• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

apache / iotdb / #9919

25 Aug 2023 07:08AM UTC coverage: 47.802% (+0.007%) from 47.795%
#9919

push

travis_ci

web-flow
Remove some useless configs (#10950)

80023 of 167404 relevant lines covered (47.8%)

0.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.91
/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
1
/*
2
 * Licensed to the Apache Software Foundation (ASF) under one
3
 * or more contributor license agreements.  See the NOTICE file
4
 * distributed with this work for additional information
5
 * regarding copyright ownership.  The ASF licenses this file
6
 * to you under the Apache License, Version 2.0 (the
7
 * "License"); you may not use this file except in compliance
8
 * with the License.  You may obtain a copy of the License at
9
 *
10
 *      http://www.apache.org/licenses/LICENSE-2.0
11
 *
12
 * Unless required by applicable law or agreed to in writing,
13
 * software distributed under the License is distributed on an
14
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
 * KIND, either express or implied.  See the License for the
16
 * specific language governing permissions and limitations
17
 * under the License.
18
 */
19

20
package org.apache.iotdb.db.queryengine.plan.analyze;
21

22
import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
23
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
24
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
25
import org.apache.iotdb.common.rpc.thrift.TSStatus;
26
import org.apache.iotdb.common.rpc.thrift.TSchemaNode;
27
import org.apache.iotdb.commons.partition.DataPartition;
28
import org.apache.iotdb.commons.partition.SchemaPartition;
29
import org.apache.iotdb.commons.path.PartialPath;
30
import org.apache.iotdb.db.queryengine.common.NodeRef;
31
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
32
import org.apache.iotdb.db.queryengine.common.schematree.ISchemaTree;
33
import org.apache.iotdb.db.queryengine.plan.expression.Expression;
34
import org.apache.iotdb.db.queryengine.plan.expression.ExpressionType;
35
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor;
36
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.FillDescriptor;
37
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.GroupByParameter;
38
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.GroupByTimeParameter;
39
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.IntoPathDescriptor;
40
import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.OrderByParameter;
41
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
42
import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
43
import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
44
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
45
import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
46
import org.apache.iotdb.db.schemaengine.template.Template;
47
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
48
import org.apache.iotdb.tsfile.read.filter.basic.Filter;
49
import org.apache.iotdb.tsfile.utils.Pair;
50

51
import java.util.ArrayList;
52
import java.util.HashMap;
53
import java.util.HashSet;
54
import java.util.LinkedHashMap;
55
import java.util.List;
56
import java.util.Map;
57
import java.util.Set;
58

59
import static com.google.common.base.Preconditions.checkArgument;
60

61
/** Analysis used for planning a query. TODO: This class may need to store more info for a query. */
62
public class Analysis {
63

64
  /////////////////////////////////////////////////////////////////////////////////////////////////
65
  // Common Analysis
66
  /////////////////////////////////////////////////////////////////////////////////////////////////
67

68
  // Statement
69
  private Statement statement;
70

71
  private DataPartition dataPartition;
72

73
  private SchemaPartition schemaPartition;
74

75
  private ISchemaTree schemaTree;
76

77
  private List<TEndPoint> redirectNodeList;
78

79
  // map from output column name (for every node) to its datatype
80
  private final Map<NodeRef<Expression>, TSDataType> expressionTypes = new LinkedHashMap<>();
1✔
81

82
  private boolean finishQueryAfterAnalyze;
83

84
  // potential fail status when finishQueryAfterAnalyze is true. If failStatus is NULL, means no
85
  // fail.
86

87
  private TSStatus failStatus;
88

89
  /////////////////////////////////////////////////////////////////////////////////////////////////
90
  // Query Analysis (used in ALIGN BY TIME)
91
  /////////////////////////////////////////////////////////////////////////////////////////////////
92

93
  // map from device name to series/aggregation under this device
94
  private Set<Expression> sourceExpressions;
95

96
  // input expressions of aggregations to be calculated
97
  private Set<Expression> sourceTransformExpressions = new HashSet<>();
1✔
98

99
  private Expression whereExpression;
100

101
  private Expression groupByExpression;
102

103
  // all aggregations that need to be calculated
104
  private Set<Expression> aggregationExpressions;
105

106
  // An ordered map from cross-timeseries aggregation to list of inner-timeseries aggregations. The
107
  // keys' order is the output one.
108
  private LinkedHashMap<Expression, Set<Expression>> crossGroupByExpressions;
109

110
  // tag keys specified in `GROUP BY TAG` clause
111
  private List<String> tagKeys;
112

113
  /*
114
  tag values -> (grouped expression -> output expressions)
115
  For different combination of tag keys, the grouped expression may be different. Let's say there
116
   are 3 timeseries root.sg.d1.temperature, root.sg.d1.status, root.sg.d2.temperature, and their
117
   tags are [k1=v1], [k1=v1] and [k1=v2] respectively. For query "SELECT last_value(**) FROM root
118
   GROUP BY k1", timeseries are grouped by their tags into 2 buckets. Bucket [v1] has
119
   [root.sg.d1.temperature, root.sg.d1.status], while bucket [v2] has [root.sg.d2.temperature].
120
   Thus, the aggregation results of bucket [v1] and [v2] are different. Bucket [v1] has 2
121
   aggregation results last_value(temperature) and last_value(status), whereas bucket [v2] only
122
  has [last_value(temperature)].
123
   */
124
  private Map<List<String>, LinkedHashMap<Expression, List<Expression>>>
125
      tagValuesToGroupedTimeseriesOperands;
126

127
  /////////////////////////////////////////////////////////////////////////////////////////////////
128
  // Query Analysis (used in ALIGN BY DEVICE)
129
  /////////////////////////////////////////////////////////////////////////////////////////////////
130

131
  // the list of device names
132
  private List<PartialPath> deviceList;
133

134
  // map from output device name to queried devices
135
  private Map<String, List<String>> outputDeviceToQueriedDevicesMap;
136

137
  // map from device name to series/aggregation under this device
138
  private Map<String, Set<Expression>> deviceToSourceExpressions;
139

140
  // input expressions of aggregations to be calculated
141
  private Map<String, Set<Expression>> deviceToSourceTransformExpressions = new HashMap<>();
1✔
142

143
  // map from device name to query filter under this device
144
  private Map<String, Expression> deviceToWhereExpression;
145

146
  // all aggregations that need to be calculated
147
  private Map<String, Set<Expression>> deviceToAggregationExpressions = new HashMap<>();
1✔
148

149
  // expression of output column to be calculated
150
  private Map<String, Set<Expression>> deviceToSelectExpressions;
151

152
  // expression of group by that need to be calculated
153
  private Map<String, Expression> deviceToGroupByExpression;
154

155
  // expression of order by that need to be calculated
156
  private Map<String, Set<Expression>> deviceToOrderByExpressions;
157

158
  // the sortItems used in order by push down of align by device
159
  private Map<String, List<SortItem>> deviceToSortItems;
160

161
  // e.g. [s1,s2,s3] is query, but [s1, s3] exists in device1, then device1 -> [1, 3], s1 is 1 but
162
  // not 0 because device is the first column
163
  private Map<String, List<Integer>> deviceViewInputIndexesMap;
164

165
  private Set<Expression> deviceViewOutputExpressions;
166

167
  private final Map<String, Set<Expression>> deviceToOutputExpressions = new HashMap<>();
1✔
168

169
  // indicates whether DeviceView need special process when rewriteSource in DistributionPlan,
170
  // you can see SourceRewriter#visitDeviceView to get more information
171
  private boolean deviceViewSpecialProcess;
172

173
  /////////////////////////////////////////////////////////////////////////////////////////////////
174
  // Query Common Analysis (above DeviceView)
175
  /////////////////////////////////////////////////////////////////////////////////////////////////
176

177
  // indicate is there a value filter
178
  private boolean hasValueFilter = false;
1✔
179

180
  // a global time filter used in `initQueryDataSource` and filter push down
181
  private Filter globalTimeFilter;
182

183
  // expression of output column to be calculated
184
  private Set<Expression> selectExpressions;
185

186
  private Expression havingExpression;
187

188
  // The expressions in order by clause
189
  // In align by device orderByExpression is the deviceView of expression which doesn't have
190
  // device-prefix
191
  // for example, in device root.sg1.d1, [root.sg1.d1.s1] is expression and [s1] is the device-view
192
  // one.
193
  private Set<Expression> orderByExpressions;
194

195
  private boolean hasSort = false;
1✔
196

197
  // parameter of `FILL` clause
198
  private FillDescriptor fillDescriptor;
199

200
  // parameter of `GROUP BY TIME` clause
201
  private GroupByTimeParameter groupByTimeParameter;
202

203
  // parameter of `GROUP BY VARIATION` clause
204
  private GroupByParameter groupByParameter;
205

206
  private OrderByParameter mergeOrderParameter;
207

208
  // This field will be set and used when the order by in last query only indicates the ordering of
209
  // timeseries, otherwise it will be null
210
  private Ordering timeseriesOrderingForLastQuery = null;
1✔
211

212
  // header of result dataset
213
  private DatasetHeader respDatasetHeader;
214

215
  // indicate whether the Nodes produce source data are VirtualSourceNodes
216
  private boolean isVirtualSource = false;
1✔
217

218
  /////////////////////////////////////////////////////////////////////////////////////////////////
219
  // SELECT INTO Analysis
220
  /////////////////////////////////////////////////////////////////////////////////////////////////
221

222
  // used in ALIGN BY DEVICE
223
  private DeviceViewIntoPathDescriptor deviceViewIntoPathDescriptor;
224

225
  // used in ALIGN BY TIME
226
  private IntoPathDescriptor intoPathDescriptor;
227

228
  /////////////////////////////////////////////////////////////////////////////////////////////////
229
  // Schema Query Analysis
230
  /////////////////////////////////////////////////////////////////////////////////////////////////
231

232
  // extra message from config node, used for node management
233
  private Set<TSchemaNode> matchedNodes;
234

235
  // template and paths set template
236
  private Pair<Template, List<PartialPath>> templateSetInfo;
237

238
  // devicePath -> <template, paths set template>
239
  private Map<PartialPath, Pair<Template, PartialPath>> deviceTemplateSetInfoMap;
240

241
  // potential template used in timeseries query or fetch
242
  private Map<Integer, Template> relatedTemplateInfo;
243

244
  // generated by combine the input path pattern and template set path
245
  private List<PartialPath> specifiedTemplateRelatedPathPatternList;
246

247
  /////////////////////////////////////////////////////////////////////////////////////////////////
248
  // Logical View Analysis
249
  /////////////////////////////////////////////////////////////////////////////////////////////////
250

251
  private boolean useLogicalView = false;
1✔
252

253
  private List<Pair<Expression, String>> outputExpressions = null;
1✔
254

255
  /////////////////////////////////////////////////////////////////////////////////////////////////
256
  // Show Queries Analysis
257
  /////////////////////////////////////////////////////////////////////////////////////////////////
258

259
  // extra message from config node, queries wll be sent to these Running DataNodes
260
  private List<TDataNodeLocation> runningDataNodeLocations;
261

262
  // used for limit and offset push down optimizer, if we select all columns from aligned device, we
263
  // can use statistics to skip
264
  private boolean lastLevelUseWildcard = false;
1✔
265

266
  public Analysis() {
1✔
267
    this.finishQueryAfterAnalyze = false;
1✔
268
  }
1✔
269

270
  public List<TRegionReplicaSet> getPartitionInfo(PartialPath seriesPath, Filter timefilter) {
271
    // TODO: (xingtanzjr) implement the calculation of timePartitionIdList
272
    return dataPartition.getDataRegionReplicaSet(seriesPath.getDevice(), null);
1✔
273
  }
274

275
  public List<TRegionReplicaSet> getPartitionInfo(String deviceName, Filter globalTimeFilter) {
276
    // TODO: (xingtanzjr) implement the calculation of timePartitionIdList
277
    return dataPartition.getDataRegionReplicaSet(deviceName, null);
×
278
  }
279

280
  public Statement getStatement() {
281
    return statement;
1✔
282
  }
283

284
  public void setStatement(Statement statement) {
285
    this.statement = statement;
1✔
286
  }
1✔
287

288
  public DataPartition getDataPartitionInfo() {
289
    return dataPartition;
1✔
290
  }
291

292
  public void setDataPartitionInfo(DataPartition dataPartition) {
293
    this.dataPartition = dataPartition;
1✔
294
  }
1✔
295

296
  public SchemaPartition getSchemaPartitionInfo() {
297
    return schemaPartition;
1✔
298
  }
299

300
  public void setSchemaPartitionInfo(SchemaPartition schemaPartition) {
301
    this.schemaPartition = schemaPartition;
1✔
302
  }
1✔
303

304
  public ISchemaTree getSchemaTree() {
305
    return schemaTree;
1✔
306
  }
307

308
  public void setSchemaTree(ISchemaTree schemaTree) {
309
    this.schemaTree = schemaTree;
1✔
310
  }
1✔
311

312
  public List<TEndPoint> getRedirectNodeList() {
313
    return redirectNodeList;
×
314
  }
315

316
  public void setRedirectNodeList(List<TEndPoint> redirectNodeList) {
317
    this.redirectNodeList = redirectNodeList;
1✔
318
  }
1✔
319

320
  public void addEndPointToRedirectNodeList(TEndPoint endPoint) {
321
    if (redirectNodeList == null) {
1✔
322
      redirectNodeList = new ArrayList<>();
1✔
323
    }
324
    redirectNodeList.add(endPoint);
1✔
325
  }
1✔
326

327
  public Filter getGlobalTimeFilter() {
328
    return globalTimeFilter;
1✔
329
  }
330

331
  public void setGlobalTimeFilter(Filter timeFilter) {
332
    this.globalTimeFilter = timeFilter;
1✔
333
  }
1✔
334

335
  public DatasetHeader getRespDatasetHeader() {
336
    return respDatasetHeader;
1✔
337
  }
338

339
  public void setRespDatasetHeader(DatasetHeader respDatasetHeader) {
340
    this.respDatasetHeader = respDatasetHeader;
1✔
341
  }
1✔
342

343
  public TSDataType getType(Expression expression) {
344
    // NULL_Operand needn't check
345
    if (expression.getExpressionType() == ExpressionType.NULL) {
1✔
346
      return null;
×
347
    }
348
    TSDataType type = expressionTypes.get(NodeRef.of(expression));
1✔
349
    checkArgument(type != null, "Expression not analyzed: %s", expression);
1✔
350
    return type;
1✔
351
  }
352

353
  public boolean hasDataSource() {
354
    return (dataPartition != null && !dataPartition.isEmpty())
×
355
        || (schemaPartition != null && !schemaPartition.isEmpty())
×
356
        || statement instanceof ShowQueriesStatement
357
        || (statement instanceof QueryStatement
358
            && ((QueryStatement) statement).isAggregationQuery());
×
359
  }
360

361
  public LinkedHashMap<Expression, Set<Expression>> getCrossGroupByExpressions() {
362
    return crossGroupByExpressions;
1✔
363
  }
364

365
  public void setCrossGroupByExpressions(
366
      LinkedHashMap<Expression, Set<Expression>> crossGroupByExpressions) {
367
    this.crossGroupByExpressions = crossGroupByExpressions;
×
368
  }
×
369

370
  public FillDescriptor getFillDescriptor() {
371
    return fillDescriptor;
1✔
372
  }
373

374
  public void setFillDescriptor(FillDescriptor fillDescriptor) {
375
    this.fillDescriptor = fillDescriptor;
1✔
376
  }
1✔
377

378
  public boolean hasValueFilter() {
379
    return hasValueFilter;
1✔
380
  }
381

382
  public void setHasValueFilter(boolean hasValueFilter) {
383
    this.hasValueFilter = hasValueFilter;
1✔
384
  }
1✔
385

386
  public Expression getWhereExpression() {
387
    return whereExpression;
1✔
388
  }
389

390
  public void setWhereExpression(Expression whereExpression) {
391
    this.whereExpression = whereExpression;
1✔
392
  }
1✔
393

394
  public Map<String, Expression> getDeviceToWhereExpression() {
395
    return deviceToWhereExpression;
1✔
396
  }
397

398
  public void setDeviceToWhereExpression(Map<String, Expression> deviceToWhereExpression) {
399
    this.deviceToWhereExpression = deviceToWhereExpression;
1✔
400
  }
1✔
401

402
  public GroupByTimeParameter getGroupByTimeParameter() {
403
    return groupByTimeParameter;
1✔
404
  }
405

406
  public Expression getHavingExpression() {
407
    return havingExpression;
1✔
408
  }
409

410
  public void setHavingExpression(Expression havingExpression) {
411
    this.havingExpression = havingExpression;
1✔
412
  }
1✔
413

414
  public void setGroupByTimeParameter(GroupByTimeParameter groupByTimeParameter) {
415
    this.groupByTimeParameter = groupByTimeParameter;
1✔
416
  }
1✔
417

418
  public void setGroupByParameter(GroupByParameter groupByParameter) {
419
    this.groupByParameter = groupByParameter;
×
420
  }
×
421

422
  public GroupByParameter getGroupByParameter() {
423
    return groupByParameter;
1✔
424
  }
425

426
  public boolean hasGroupByParameter() {
427
    return groupByParameter != null;
1✔
428
  }
429

430
  public boolean isFinishQueryAfterAnalyze() {
431
    return finishQueryAfterAnalyze;
1✔
432
  }
433

434
  public void setFinishQueryAfterAnalyze(boolean finishQueryAfterAnalyze) {
435
    this.finishQueryAfterAnalyze = finishQueryAfterAnalyze;
×
436
  }
×
437

438
  public boolean isFailed() {
439
    return failStatus != null;
×
440
  }
441

442
  public TSStatus getFailStatus() {
443
    return this.failStatus;
×
444
  }
445

446
  public void setFailStatus(TSStatus status) {
447
    this.failStatus = status;
×
448
  }
×
449

450
  public void setDeviceViewInputIndexesMap(Map<String, List<Integer>> deviceViewInputIndexesMap) {
451
    this.deviceViewInputIndexesMap = deviceViewInputIndexesMap;
1✔
452
  }
1✔
453

454
  public Map<String, List<Integer>> getDeviceViewInputIndexesMap() {
455
    return deviceViewInputIndexesMap;
1✔
456
  }
457

458
  public Set<Expression> getSourceExpressions() {
459
    return sourceExpressions;
1✔
460
  }
461

462
  public void setSourceExpressions(Set<Expression> sourceExpressions) {
463
    this.sourceExpressions = sourceExpressions;
1✔
464
  }
1✔
465

466
  public Set<Expression> getSourceTransformExpressions() {
467
    return sourceTransformExpressions;
1✔
468
  }
469

470
  public void setSourceTransformExpressions(Set<Expression> sourceTransformExpressions) {
471
    this.sourceTransformExpressions = sourceTransformExpressions;
1✔
472
  }
1✔
473

474
  public Set<Expression> getAggregationExpressions() {
475
    return aggregationExpressions;
1✔
476
  }
477

478
  public void setAggregationExpressions(Set<Expression> aggregationExpressions) {
479
    this.aggregationExpressions = aggregationExpressions;
1✔
480
  }
1✔
481

482
  public Set<Expression> getSelectExpressions() {
483
    return selectExpressions;
1✔
484
  }
485

486
  public void setSelectExpressions(Set<Expression> selectExpressions) {
487
    this.selectExpressions = selectExpressions;
1✔
488
  }
1✔
489

490
  public Map<String, Set<Expression>> getDeviceToSourceExpressions() {
491
    return deviceToSourceExpressions;
1✔
492
  }
493

494
  public void setDeviceToSourceExpressions(Map<String, Set<Expression>> deviceToSourceExpressions) {
495
    this.deviceToSourceExpressions = deviceToSourceExpressions;
1✔
496
  }
1✔
497

498
  public Map<String, Set<Expression>> getDeviceToSourceTransformExpressions() {
499
    return deviceToSourceTransformExpressions;
1✔
500
  }
501

502
  public void setDeviceToSourceTransformExpressions(
503
      Map<String, Set<Expression>> deviceToSourceTransformExpressions) {
504
    this.deviceToSourceTransformExpressions = deviceToSourceTransformExpressions;
1✔
505
  }
1✔
506

507
  public Map<String, Set<Expression>> getDeviceToAggregationExpressions() {
508
    return deviceToAggregationExpressions;
1✔
509
  }
510

511
  public void setDeviceToAggregationExpressions(
512
      Map<String, Set<Expression>> deviceToAggregationExpressions) {
513
    this.deviceToAggregationExpressions = deviceToAggregationExpressions;
1✔
514
  }
1✔
515

516
  public Map<String, Set<Expression>> getDeviceToSelectExpressions() {
517
    return deviceToSelectExpressions;
1✔
518
  }
519

520
  public void setDeviceToSelectExpressions(Map<String, Set<Expression>> deviceToSelectExpressions) {
521
    this.deviceToSelectExpressions = deviceToSelectExpressions;
1✔
522
  }
1✔
523

524
  public Expression getGroupByExpression() {
525
    return groupByExpression;
1✔
526
  }
527

528
  public void setGroupByExpression(Expression groupByExpression) {
529
    this.groupByExpression = groupByExpression;
×
530
  }
×
531

532
  public Map<String, Expression> getDeviceToGroupByExpression() {
533
    return deviceToGroupByExpression;
1✔
534
  }
535

536
  public void setDeviceToGroupByExpression(Map<String, Expression> deviceToGroupByExpression) {
537
    this.deviceToGroupByExpression = deviceToGroupByExpression;
×
538
  }
×
539

540
  public Set<TSchemaNode> getMatchedNodes() {
541
    return matchedNodes;
×
542
  }
543

544
  public void setMatchedNodes(Set<TSchemaNode> matchedNodes) {
545
    this.matchedNodes = matchedNodes;
×
546
  }
×
547

548
  public OrderByParameter getMergeOrderParameter() {
549
    return mergeOrderParameter;
×
550
  }
551

552
  public void setMergeOrderParameter(OrderByParameter mergeOrderParameter) {
553
    this.mergeOrderParameter = mergeOrderParameter;
×
554
  }
×
555

556
  public Pair<Template, List<PartialPath>> getTemplateSetInfo() {
557
    return templateSetInfo;
×
558
  }
559

560
  public void setTemplateSetInfo(Pair<Template, List<PartialPath>> templateSetInfo) {
561
    this.templateSetInfo = templateSetInfo;
×
562
  }
×
563

564
  public Map<PartialPath, Pair<Template, PartialPath>> getDeviceTemplateSetInfoMap() {
565
    return deviceTemplateSetInfoMap;
×
566
  }
567

568
  public void setDeviceTemplateSetInfoMap(
569
      Map<PartialPath, Pair<Template, PartialPath>> deviceTemplateSetInfoMap) {
570
    this.deviceTemplateSetInfoMap = deviceTemplateSetInfoMap;
×
571
  }
×
572

573
  public Map<Integer, Template> getRelatedTemplateInfo() {
574
    return relatedTemplateInfo;
×
575
  }
576

577
  public void setRelatedTemplateInfo(Map<Integer, Template> relatedTemplateInfo) {
578
    this.relatedTemplateInfo = relatedTemplateInfo;
×
579
  }
×
580

581
  public List<PartialPath> getSpecifiedTemplateRelatedPathPatternList() {
582
    return specifiedTemplateRelatedPathPatternList;
×
583
  }
584

585
  public void setSpecifiedTemplateRelatedPathPatternList(
586
      List<PartialPath> specifiedTemplateRelatedPathPatternList) {
587
    this.specifiedTemplateRelatedPathPatternList = specifiedTemplateRelatedPathPatternList;
×
588
  }
×
589

590
  public void addTypes(Map<NodeRef<Expression>, TSDataType> types) {
591
    this.expressionTypes.putAll(types);
1✔
592
  }
1✔
593

594
  public void setExpressionType(Expression expression, TSDataType type) {
595
    this.expressionTypes.put(NodeRef.of(expression), type);
×
596
  }
×
597

598
  public Set<Expression> getDeviceViewOutputExpressions() {
599
    return deviceViewOutputExpressions;
1✔
600
  }
601

602
  public void setDeviceViewOutputExpressions(Set<Expression> deviceViewOutputExpressions) {
603
    this.deviceViewOutputExpressions = deviceViewOutputExpressions;
1✔
604
  }
1✔
605

606
  public boolean isDeviceViewSpecialProcess() {
607
    return deviceViewSpecialProcess;
1✔
608
  }
609

610
  public void setDeviceViewSpecialProcess(boolean deviceViewSpecialProcess) {
611
    this.deviceViewSpecialProcess = deviceViewSpecialProcess;
1✔
612
  }
1✔
613

614
  public DeviceViewIntoPathDescriptor getDeviceViewIntoPathDescriptor() {
615
    return deviceViewIntoPathDescriptor;
1✔
616
  }
617

618
  public void setDeviceViewIntoPathDescriptor(
619
      DeviceViewIntoPathDescriptor deviceViewIntoPathDescriptor) {
620
    this.deviceViewIntoPathDescriptor = deviceViewIntoPathDescriptor;
1✔
621
  }
1✔
622

623
  public IntoPathDescriptor getIntoPathDescriptor() {
624
    return intoPathDescriptor;
1✔
625
  }
626

627
  public void setIntoPathDescriptor(IntoPathDescriptor intoPathDescriptor) {
628
    this.intoPathDescriptor = intoPathDescriptor;
1✔
629
  }
1✔
630

631
  public List<String> getTagKeys() {
632
    return tagKeys;
1✔
633
  }
634

635
  public void setTagKeys(List<String> tagKeys) {
636
    this.tagKeys = tagKeys;
×
637
  }
×
638

639
  public Map<List<String>, LinkedHashMap<Expression, List<Expression>>>
640
      getTagValuesToGroupedTimeseriesOperands() {
641
    return tagValuesToGroupedTimeseriesOperands;
1✔
642
  }
643

644
  public void setTagValuesToGroupedTimeseriesOperands(
645
      Map<List<String>, LinkedHashMap<Expression, List<Expression>>>
646
          tagValuesToGroupedTimeseriesOperands) {
647
    this.tagValuesToGroupedTimeseriesOperands = tagValuesToGroupedTimeseriesOperands;
×
648
  }
×
649

650
  public List<TDataNodeLocation> getRunningDataNodeLocations() {
651
    return runningDataNodeLocations;
×
652
  }
653

654
  public void setRunningDataNodeLocations(List<TDataNodeLocation> runningDataNodeLocations) {
655
    this.runningDataNodeLocations = runningDataNodeLocations;
×
656
  }
×
657

658
  public boolean isVirtualSource() {
659
    return isVirtualSource;
1✔
660
  }
661

662
  public void setVirtualSource(boolean virtualSource) {
663
    isVirtualSource = virtualSource;
×
664
  }
×
665

666
  public Map<NodeRef<Expression>, TSDataType> getExpressionTypes() {
667
    return expressionTypes;
1✔
668
  }
669

670
  public void setOrderByExpressions(Set<Expression> orderByExpressions) {
671
    this.orderByExpressions = orderByExpressions;
1✔
672
  }
1✔
673

674
  public Set<Expression> getOrderByExpressions() {
675
    return orderByExpressions;
1✔
676
  }
677

678
  public Map<String, Set<Expression>> getDeviceToOrderByExpressions() {
679
    return deviceToOrderByExpressions;
1✔
680
  }
681

682
  public void setDeviceToOrderByExpressions(
683
      Map<String, Set<Expression>> deviceToOrderByExpressions) {
684
    this.deviceToOrderByExpressions = deviceToOrderByExpressions;
1✔
685
  }
1✔
686

687
  public void setHasSort(boolean hasSort) {
688
    this.hasSort = hasSort;
×
689
  }
×
690

691
  public boolean isHasSort() {
692
    return hasSort;
×
693
  }
694

695
  public Map<String, List<SortItem>> getDeviceToSortItems() {
696
    return deviceToSortItems;
×
697
  }
698

699
  public void setDeviceToSortItems(Map<String, List<SortItem>> deviceToSortItems) {
700
    this.deviceToSortItems = deviceToSortItems;
1✔
701
  }
1✔
702

703
  /////////////////////////////////////////////////////////////////////////////////////////////////
704
  // Logical View Analysis
705
  /////////////////////////////////////////////////////////////////////////////////////////////////
706

707
  public void setUseLogicalView(boolean useLogicalView) {
708
    this.useLogicalView = useLogicalView;
×
709
  }
×
710

711
  public boolean useLogicalView() {
712
    return this.useLogicalView;
×
713
  }
714

715
  public void setOutputExpressions(List<Pair<Expression, String>> outputExpressions) {
716
    this.outputExpressions = outputExpressions;
1✔
717
  }
1✔
718

719
  public List<Pair<Expression, String>> getOutputExpressions() {
720
    return this.outputExpressions;
×
721
  }
722

723
  public Ordering getTimeseriesOrderingForLastQuery() {
724
    return timeseriesOrderingForLastQuery;
×
725
  }
726

727
  public void setTimeseriesOrderingForLastQuery(Ordering timeseriesOrderingForLastQuery) {
728
    this.timeseriesOrderingForLastQuery = timeseriesOrderingForLastQuery;
×
729
  }
×
730

731
  public Map<String, List<String>> getOutputDeviceToQueriedDevicesMap() {
732
    return outputDeviceToQueriedDevicesMap;
1✔
733
  }
734

735
  public void setOutputDeviceToQueriedDevicesMap(
736
      Map<String, List<String>> outputDeviceToQueriedDevicesMap) {
737
    this.outputDeviceToQueriedDevicesMap = outputDeviceToQueriedDevicesMap;
1✔
738
  }
1✔
739

740
  public Map<String, Set<Expression>> getDeviceToOutputExpressions() {
741
    return deviceToOutputExpressions;
1✔
742
  }
743

744
  public boolean isLastLevelUseWildcard() {
745
    return lastLevelUseWildcard;
1✔
746
  }
747

748
  public void setLastLevelUseWildcard(boolean lastLevelUseWildcard) {
749
    this.lastLevelUseWildcard = lastLevelUseWildcard;
1✔
750
  }
1✔
751

752
  public void setDeviceList(List<PartialPath> deviceList) {
753
    this.deviceList = deviceList;
1✔
754
  }
1✔
755

756
  public List<PartialPath> getDeviceList() {
757
    return deviceList;
1✔
758
  }
759
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc