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

apache / iotdb / #9892

22 Aug 2023 11:18AM UTC coverage: 47.948% (+0.03%) from 47.923%
#9892

push

travis_ci

web-flow
[Metric] Fix flush point statistics (#10915)

23 of 23 new or added lines in 1 file covered. (100.0%)

80114 of 167086 relevant lines covered (47.95%)

0.48 hits per line

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

68.75
/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.LinkedHashMap;
54
import java.util.List;
55
import java.util.Map;
56
import java.util.Set;
57

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

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

63
  /////////////////////////////////////////////////////////////////////////////////////////////////
64
  // Common Analysis
65
  /////////////////////////////////////////////////////////////////////////////////////////////////
66

67
  // Statement
68
  private Statement statement;
69

70
  private DataPartition dataPartition;
71

72
  private SchemaPartition schemaPartition;
73

74
  private ISchemaTree schemaTree;
75

76
  private List<TEndPoint> redirectNodeList;
77

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

81
  private boolean finishQueryAfterAnalyze;
82

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

86
  private TSStatus failStatus;
87

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

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

95
  // input expressions of aggregations to be calculated
96
  private Set<Expression> sourceTransformExpressions;
97

98
  private Expression whereExpression;
99

100
  private Expression groupByExpression;
101

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

164
  private Set<Expression> deviceViewOutputExpressions;
165

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

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

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

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

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

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

185
  private Expression havingExpression;
186

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

194
  private boolean hasSort = false;
1✔
195

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

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

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

205
  private OrderByParameter mergeOrderParameter;
206

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

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

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

217
  /////////////////////////////////////////////////////////////////////////////////////////////////
218
  // SELECT INTO Analysis
219
  /////////////////////////////////////////////////////////////////////////////////////////////////
220

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

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

227
  /////////////////////////////////////////////////////////////////////////////////////////////////
228
  // Schema Query Analysis
229
  /////////////////////////////////////////////////////////////////////////////////////////////////
230

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

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

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

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

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

246
  /////////////////////////////////////////////////////////////////////////////////////////////////
247
  // Logical View Analysis
248
  /////////////////////////////////////////////////////////////////////////////////////////////////
249

250
  private boolean useLogicalView = false;
1✔
251

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

254
  /////////////////////////////////////////////////////////////////////////////////////////////////
255
  // Show Queries Analysis
256
  /////////////////////////////////////////////////////////////////////////////////////////////////
257

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

702
  /////////////////////////////////////////////////////////////////////////////////////////////////
703
  // Logical View Analysis
704
  /////////////////////////////////////////////////////////////////////////////////////////////////
705

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

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

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

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

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

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

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

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

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

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

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

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

755
  public List<PartialPath> getDeviceList() {
756
    return deviceList;
1✔
757
  }
758
}
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