This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TreeModelDataPartition in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a455c5ec57d497f120f8382e590adc3bfbfcd623 Author: JackieTien97 <[email protected]> AuthorDate: Mon Jun 24 18:05:03 2024 +0800 change some --- .../operator/process/DeviceViewOperator.java | 9 +- .../db/queryengine/plan/analyze/Analysis.java | 70 +++++----- .../queryengine/plan/analyze/AnalyzeVisitor.java | 142 +++++++++++---------- .../queryengine/plan/analyze/TemplatedAnalyze.java | 9 +- .../plan/optimization/AggregationPushDown.java | 12 +- .../plan/planner/LogicalPlanBuilder.java | 28 ++-- .../plan/planner/LogicalPlanVisitor.java | 21 +-- .../plan/planner/OperatorTreeGenerator.java | 2 +- .../plan/planner/TemplatedLogicalPlan.java | 15 ++- .../plan/planner/distribution/SourceRewriter.java | 23 ++-- .../planner/plan/node/process/DeviceViewNode.java | 50 ++++---- .../plan/node/process/SingleDeviceViewNode.java | 27 ++-- .../execution/operator/DeviceViewOperatorTest.java | 8 +- .../execution/operator/MergeSortOperatorTest.java | 12 +- .../execution/operator/OperatorMemoryTest.java | 10 +- .../execution/operator/TopKOperatorTest.java | 12 +- .../db/queryengine/plan/analyze/AnalyzeTest.java | 56 ++++---- .../plan/optimization/TestPlanBuilder.java | 19 ++- .../plan/planner/PipelineBuilderTest.java | 3 +- .../logical/DataQueryLogicalPlannerTest.java | 43 ++++--- .../plan/planner/node/PlanGraphPrinterTest.java | 3 +- .../node/process/DeviceViewNodeSerdeTest.java | 7 +- .../process/SingleDeviceViewNodeSerdeTest.java | 3 +- 23 files changed, 325 insertions(+), 259 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewOperator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewOperator.java index a3e5ef242f7..cd0fdcb5a50 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewOperator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewOperator.java @@ -29,6 +29,7 @@ import org.apache.tsfile.block.column.ColumnBuilder; import org.apache.tsfile.common.conf.TSFileConfig; import org.apache.tsfile.common.conf.TSFileDescriptor; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.read.common.block.TsBlock; import org.apache.tsfile.read.common.block.column.BinaryColumnBuilder; import org.apache.tsfile.read.common.block.column.NullColumn; @@ -57,7 +58,7 @@ public class DeviceViewOperator implements ProcessOperator { RamUsageEstimator.shallowSizeOfInstance(DeviceViewOperator.class); private final OperatorContext operatorContext; // The size devices and deviceOperators should be the same. - private final List<String> devices; + private final List<IDeviceID> devices; private final List<Operator> deviceOperators; // Used to fill columns and leave null columns which doesn't exist in some devices. // e.g. [s1,s2,s3] is query, but [s1, s3] exists in device1, then device1 -> [1, 3], s1 is 1 but @@ -70,7 +71,7 @@ public class DeviceViewOperator implements ProcessOperator { public DeviceViewOperator( OperatorContext operatorContext, - List<String> devices, + List<IDeviceID> devices, List<Operator> deviceOperators, List<List<Integer>> deviceColumnIndex, List<TSDataType> dataTypes) { @@ -84,7 +85,7 @@ public class DeviceViewOperator implements ProcessOperator { } private String getCurDeviceName() { - return devices.get(deviceIndex); + return devices.get(deviceIndex).toString(); } private Operator getCurDeviceOperator() { @@ -199,7 +200,7 @@ public class DeviceViewOperator implements ProcessOperator { public long ramBytesUsed() { return INSTANCE_SIZE + MemoryEstimationHelper.getEstimatedSizeOfAccountableObject(operatorContext) - + devices.stream().mapToLong(RamUsageEstimator::sizeOf).sum() + + devices.stream().mapToLong(IDeviceID::ramBytesUsed).sum() + deviceOperators.stream() .mapToLong(MemoryEstimationHelper::getEstimatedSizeOfAccountableObject) .sum(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java index e9b8f05bf46..ecf99c7b383 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java @@ -149,39 +149,39 @@ public class Analysis implements IAnalysis { private List<PartialPath> deviceList; // map from device name to series/aggregation under this device - private Map<String, Set<Expression>> deviceToSourceExpressions; + private Map<IDeviceID, Set<Expression>> deviceToSourceExpressions; // input expressions of aggregations to be calculated - private Map<String, Set<Expression>> deviceToSourceTransformExpressions = new HashMap<>(); + private Map<IDeviceID, Set<Expression>> deviceToSourceTransformExpressions = new HashMap<>(); // map from device name to query filter under this device - private Map<String, Expression> deviceToWhereExpression; + private Map<IDeviceID, Expression> deviceToWhereExpression; // all aggregations that need to be calculated - private Map<String, Set<Expression>> deviceToAggregationExpressions = new HashMap<>(); + private Map<IDeviceID, Set<Expression>> deviceToAggregationExpressions = new HashMap<>(); // expression of output column to be calculated - private Map<String, Set<Expression>> deviceToSelectExpressions; + private Map<IDeviceID, Set<Expression>> deviceToSelectExpressions; // expression of group by that need to be calculated - private Map<String, Expression> deviceToGroupByExpression; + private Map<IDeviceID, Expression> deviceToGroupByExpression; // expression of order by that need to be calculated - private Map<String, Set<Expression>> deviceToOrderByExpressions; + private Map<IDeviceID, Set<Expression>> deviceToOrderByExpressions; // the sortItems used in order by push down of align by device - private Map<String, List<SortItem>> deviceToSortItems; + private Map<IDeviceID, List<SortItem>> deviceToSortItems; // e.g. [s1,s2,s3] is query, but [s1, s3] exists in device1, then device1 -> [1, 3], s1 is 1 but // not 0 because device is the first column - private Map<String, List<Integer>> deviceViewInputIndexesMap; + private Map<IDeviceID, List<Integer>> deviceViewInputIndexesMap; private Set<Expression> deviceViewOutputExpressions; - private Map<String, Set<Expression>> deviceToOutputExpressions = new HashMap<>(); + private Map<IDeviceID, Set<Expression>> deviceToOutputExpressions = new HashMap<>(); // map from output device name to queried devices - private Map<String, IDeviceID> outputDeviceToQueriedDevicesMap; + private Map<IDeviceID, IDeviceID> outputDeviceToQueriedDevicesMap; // indicates whether DeviceView need special process when rewriteSource in DistributionPlan, // you can see SourceRewriter#visitDeviceView to get more information @@ -536,11 +536,11 @@ public class Analysis implements IAnalysis { this.whereExpression = whereExpression; } - public Map<String, Expression> getDeviceToWhereExpression() { + public Map<IDeviceID, Expression> getDeviceToWhereExpression() { return deviceToWhereExpression; } - public void setDeviceToWhereExpression(Map<String, Expression> deviceToWhereExpression) { + public void setDeviceToWhereExpression(Map<IDeviceID, Expression> deviceToWhereExpression) { this.deviceToWhereExpression = deviceToWhereExpression; } @@ -594,11 +594,12 @@ public class Analysis implements IAnalysis { this.failStatus = status; } - public void setDeviceViewInputIndexesMap(Map<String, List<Integer>> deviceViewInputIndexesMap) { + public void setDeviceViewInputIndexesMap( + Map<IDeviceID, List<Integer>> deviceViewInputIndexesMap) { this.deviceViewInputIndexesMap = deviceViewInputIndexesMap; } - public Map<String, List<Integer>> getDeviceViewInputIndexesMap() { + public Map<IDeviceID, List<Integer>> getDeviceViewInputIndexesMap() { return deviceViewInputIndexesMap; } @@ -634,37 +635,39 @@ public class Analysis implements IAnalysis { this.selectExpressions = selectExpressions; } - public Map<String, Set<Expression>> getDeviceToSourceExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToSourceExpressions() { return deviceToSourceExpressions; } - public void setDeviceToSourceExpressions(Map<String, Set<Expression>> deviceToSourceExpressions) { + public void setDeviceToSourceExpressions( + Map<IDeviceID, Set<Expression>> deviceToSourceExpressions) { this.deviceToSourceExpressions = deviceToSourceExpressions; } - public Map<String, Set<Expression>> getDeviceToSourceTransformExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToSourceTransformExpressions() { return deviceToSourceTransformExpressions; } public void setDeviceToSourceTransformExpressions( - Map<String, Set<Expression>> deviceToSourceTransformExpressions) { + Map<IDeviceID, Set<Expression>> deviceToSourceTransformExpressions) { this.deviceToSourceTransformExpressions = deviceToSourceTransformExpressions; } - public Map<String, Set<Expression>> getDeviceToAggregationExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToAggregationExpressions() { return deviceToAggregationExpressions; } public void setDeviceToAggregationExpressions( - Map<String, Set<Expression>> deviceToAggregationExpressions) { + Map<IDeviceID, Set<Expression>> deviceToAggregationExpressions) { this.deviceToAggregationExpressions = deviceToAggregationExpressions; } - public Map<String, Set<Expression>> getDeviceToSelectExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToSelectExpressions() { return deviceToSelectExpressions; } - public void setDeviceToSelectExpressions(Map<String, Set<Expression>> deviceToSelectExpressions) { + public void setDeviceToSelectExpressions( + Map<IDeviceID, Set<Expression>> deviceToSelectExpressions) { this.deviceToSelectExpressions = deviceToSelectExpressions; } @@ -676,11 +679,11 @@ public class Analysis implements IAnalysis { this.groupByExpression = groupByExpression; } - public Map<String, Expression> getDeviceToGroupByExpression() { + public Map<IDeviceID, Expression> getDeviceToGroupByExpression() { return deviceToGroupByExpression; } - public void setDeviceToGroupByExpression(Map<String, Expression> deviceToGroupByExpression) { + public void setDeviceToGroupByExpression(Map<IDeviceID, Expression> deviceToGroupByExpression) { this.deviceToGroupByExpression = deviceToGroupByExpression; } @@ -822,12 +825,12 @@ public class Analysis implements IAnalysis { return orderByExpressions; } - public Map<String, Set<Expression>> getDeviceToOrderByExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToOrderByExpressions() { return deviceToOrderByExpressions; } public void setDeviceToOrderByExpressions( - Map<String, Set<Expression>> deviceToOrderByExpressions) { + Map<IDeviceID, Set<Expression>> deviceToOrderByExpressions) { this.deviceToOrderByExpressions = deviceToOrderByExpressions; } @@ -839,11 +842,11 @@ public class Analysis implements IAnalysis { return hasSortNode; } - public Map<String, List<SortItem>> getDeviceToSortItems() { + public Map<IDeviceID, List<SortItem>> getDeviceToSortItems() { return deviceToSortItems; } - public void setDeviceToSortItems(Map<String, List<SortItem>> deviceToSortItems) { + public void setDeviceToSortItems(Map<IDeviceID, List<SortItem>> deviceToSortItems) { this.deviceToSortItems = deviceToSortItems; } @@ -892,20 +895,21 @@ public class Analysis implements IAnalysis { this.lastQueryNonWritableViewSourceExpressionMap = lastQueryNonWritableViewSourceExpressionMap; } - public Map<String, IDeviceID> getOutputDeviceToQueriedDevicesMap() { + public Map<IDeviceID, IDeviceID> getOutputDeviceToQueriedDevicesMap() { return outputDeviceToQueriedDevicesMap; } public void setOutputDeviceToQueriedDevicesMap( - Map<String, IDeviceID> outputDeviceToQueriedDevicesMap) { + Map<IDeviceID, IDeviceID> outputDeviceToQueriedDevicesMap) { this.outputDeviceToQueriedDevicesMap = outputDeviceToQueriedDevicesMap; } - public Map<String, Set<Expression>> getDeviceToOutputExpressions() { + public Map<IDeviceID, Set<Expression>> getDeviceToOutputExpressions() { return deviceToOutputExpressions; } - public void setDeviceToOutputExpressions(Map<String, Set<Expression>> deviceToOutputExpressions) { + public void setDeviceToOutputExpressions( + Map<IDeviceID, Set<Expression>> deviceToOutputExpressions) { this.deviceToOutputExpressions = deviceToOutputExpressions; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java index 56aaf3f4025..e8fffb63d1a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java @@ -732,7 +732,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> List<PartialPath> deviceList, MPPQueryContext queryContext) { List<Pair<Expression, String>> outputExpressions = new ArrayList<>(); - Map<String, Set<Expression>> deviceToSelectExpressions = new HashMap<>(); + Map<IDeviceID, Set<Expression>> deviceToSelectExpressions = new HashMap<>(); ColumnPaginationController paginationController = new ColumnPaginationController( queryStatement.getSeriesLimit(), queryStatement.getSeriesOffset()); @@ -742,7 +742,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> // select expression after removing wildcard // use LinkedHashMap for order-preserving - Map<Expression, Map<String, Expression>> measurementToDeviceSelectExpressions = + Map<Expression, Map<IDeviceID, Expression>> measurementToDeviceSelectExpressions = new LinkedHashMap<>(); for (PartialPath device : deviceList) { List<Expression> selectExpressionsOfOneDevice = @@ -753,15 +753,18 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } updateMeasurementToDeviceSelectExpressions( - analysis, measurementToDeviceSelectExpressions, device, selectExpressionsOfOneDevice); + analysis, + measurementToDeviceSelectExpressions, + device.getIDeviceIDAsFullDevice(), + selectExpressionsOfOneDevice); } checkAliasUniqueness(resultColumn.getAlias(), measurementToDeviceSelectExpressions); - for (Map.Entry<Expression, Map<String, Expression>> entry : + for (Map.Entry<Expression, Map<IDeviceID, Expression>> entry : measurementToDeviceSelectExpressions.entrySet()) { Expression measurementExpression = entry.getKey(); - Map<String, Expression> deviceToSelectExpressionsOfOneMeasurement = entry.getValue(); + Map<IDeviceID, Expression> deviceToSelectExpressionsOfOneMeasurement = entry.getValue(); if (paginationController.hasCurOffset()) { paginationController.consumeOffset(); @@ -801,7 +804,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> // remove devices without measurements to compute Set<PartialPath> noMeasurementDevices = new HashSet<>(); for (PartialPath device : deviceList) { - if (!deviceToSelectExpressions.containsKey(device.getFullPath())) { + if (!deviceToSelectExpressions.containsKey(device.getIDeviceIDAsFullDevice())) { noMeasurementDevices.add(device); } } @@ -811,7 +814,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> // the where expression map also need remove this device if (analysis.getDeviceToWhereExpression() != null) { noMeasurementDevices.forEach( - devicePath -> analysis.getDeviceToWhereExpression().remove(devicePath.getFullPath())); + devicePath -> + analysis.getDeviceToWhereExpression().remove(devicePath.getIDeviceIDAsFullDevice())); } Set<Expression> selectExpressions = new LinkedHashSet<>(); @@ -829,32 +833,32 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> private void updateMeasurementToDeviceSelectExpressions( Analysis analysis, - Map<Expression, Map<String, Expression>> measurementToDeviceSelectExpressions, - PartialPath device, + Map<Expression, Map<IDeviceID, Expression>> measurementToDeviceSelectExpressions, + IDeviceID device, List<Expression> selectExpressionsOfOneDevice) { for (Expression expression : selectExpressionsOfOneDevice) { Expression measurementExpression = ExpressionAnalyzer.getMeasurementExpression(expression, analysis); measurementToDeviceSelectExpressions .computeIfAbsent(measurementExpression, key -> new LinkedHashMap<>()) - .put(device.getFullPath(), ExpressionAnalyzer.toLowerCaseExpression(expression)); + .put(device, ExpressionAnalyzer.toLowerCaseExpression(expression)); } } private void updateDeviceToSelectExpressions( Analysis analysis, - Map<String, Set<Expression>> deviceToSelectExpressions, - Map<String, Expression> deviceToSelectExpressionsOfOneMeasurement) { + Map<IDeviceID, Set<Expression>> deviceToSelectExpressions, + Map<IDeviceID, Expression> deviceToSelectExpressionsOfOneMeasurement) { - for (Map.Entry<String, Expression> entry : + for (Map.Entry<IDeviceID, Expression> entry : deviceToSelectExpressionsOfOneMeasurement.entrySet()) { - String deviceName = entry.getKey(); + IDeviceID deviceID = entry.getKey(); Expression expression = entry.getValue(); Expression lowerCaseExpression = toLowerCaseExpression(expression); analyzeExpressionType(analysis, lowerCaseExpression); deviceToSelectExpressions - .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) + .computeIfAbsent(deviceID, key -> new LinkedHashSet<>()) .add(lowerCaseExpression); } } @@ -960,9 +964,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } // two maps to be updated - Map<String, Set<Expression>> deviceToAggregationExpressions = + Map<IDeviceID, Set<Expression>> deviceToAggregationExpressions = analysis.getDeviceToAggregationExpressions(); - Map<String, Set<Expression>> deviceToOutputExpressions = + Map<IDeviceID, Set<Expression>> deviceToOutputExpressions = analysis.getDeviceToOutputExpressions(); Expression havingExpression = queryStatement.getHavingCondition().getPredicate(); @@ -991,10 +995,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> normalizedAggregationExpressions.add(normalizedAggregationExpression); } deviceToOutputExpressions - .computeIfAbsent(device.getFullPath(), key -> new LinkedHashSet<>()) + .computeIfAbsent(device.getIDeviceIDAsFullDevice(), key -> new LinkedHashSet<>()) .addAll(aggregationExpressions); deviceToAggregationExpressions - .computeIfAbsent(device.getFullPath(), key -> new LinkedHashSet<>()) + .computeIfAbsent(device.getIDeviceID(), key -> new LinkedHashSet<>()) .addAll(normalizedAggregationExpressions); } } @@ -1122,16 +1126,16 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } private void updateDeviceToAggregationAndOutputExpressions( - Analysis analysis, Map<String, Set<Expression>> deviceToExpressions) { + Analysis analysis, Map<IDeviceID, Set<Expression>> deviceToExpressions) { // two maps to be updated - Map<String, Set<Expression>> deviceToAggregationExpressions = + Map<IDeviceID, Set<Expression>> deviceToAggregationExpressions = analysis.getDeviceToAggregationExpressions(); - Map<String, Set<Expression>> deviceToOutputExpressions = + Map<IDeviceID, Set<Expression>> deviceToOutputExpressions = analysis.getDeviceToOutputExpressions(); - for (Map.Entry<String, Set<Expression>> deviceExpressionsEntry : + for (Map.Entry<IDeviceID, Set<Expression>> deviceExpressionsEntry : deviceToExpressions.entrySet()) { - String deviceName = deviceExpressionsEntry.getKey(); + IDeviceID deviceID = deviceExpressionsEntry.getKey(); Set<Expression> expressionSet = deviceExpressionsEntry.getValue(); for (Expression expression : expressionSet) { @@ -1141,10 +1145,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> analyzeExpressionType(analysis, normalizedAggregationExpression); deviceToOutputExpressions - .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) + .computeIfAbsent(deviceID, key -> new LinkedHashSet<>()) .add(aggregationExpression); deviceToAggregationExpressions - .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) + .computeIfAbsent(deviceID, key -> new LinkedHashSet<>()) .add(normalizedAggregationExpression); } } @@ -1188,18 +1192,19 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> private void analyzeDeviceToSourceTransform(Analysis analysis, QueryStatement queryStatement) { if (queryStatement.isAggregationQuery()) { - Map<String, Set<Expression>> deviceToSourceTransformExpressions = + Map<IDeviceID, Set<Expression>> deviceToSourceTransformExpressions = analysis.getDeviceToSourceTransformExpressions(); - Map<String, Set<Expression>> deviceToAggregationExpressions = + Map<IDeviceID, Set<Expression>> deviceToAggregationExpressions = analysis.getDeviceToAggregationExpressions(); - for (Map.Entry<String, Set<Expression>> entry : deviceToAggregationExpressions.entrySet()) { - String deviceName = entry.getKey(); + for (Map.Entry<IDeviceID, Set<Expression>> entry : + deviceToAggregationExpressions.entrySet()) { + IDeviceID deviceID = entry.getKey(); Set<Expression> aggregationExpressions = entry.getValue(); Set<Expression> sourceTransformExpressions = deviceToSourceTransformExpressions.computeIfAbsent( - deviceName, k -> new LinkedHashSet<>()); + deviceID, k -> new LinkedHashSet<>()); for (Expression expression : aggregationExpressions) { // if count_time aggregation exist, it can exist only one count_time(*) @@ -1223,7 +1228,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } if (queryStatement.hasGroupByExpression()) { - sourceTransformExpressions.add(analysis.getDeviceToGroupByExpression().get(deviceName)); + sourceTransformExpressions.add(analysis.getDeviceToGroupByExpression().get(deviceID)); } } } else { @@ -1237,16 +1242,16 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } private void updateDeviceToSourceTransformAndOutputExpressions( - Analysis analysis, Map<String, Set<Expression>> deviceToExpressions) { + Analysis analysis, Map<IDeviceID, Set<Expression>> deviceToExpressions) { // two maps to be updated - Map<String, Set<Expression>> deviceToSourceTransformExpressions = + Map<IDeviceID, Set<Expression>> deviceToSourceTransformExpressions = analysis.getDeviceToSourceTransformExpressions(); - Map<String, Set<Expression>> deviceToOutputExpressions = + Map<IDeviceID, Set<Expression>> deviceToOutputExpressions = analysis.getDeviceToOutputExpressions(); - for (Map.Entry<String, Set<Expression>> deviceExpressionsEntry : + for (Map.Entry<IDeviceID, Set<Expression>> deviceExpressionsEntry : deviceToExpressions.entrySet()) { - String deviceName = deviceExpressionsEntry.getKey(); + IDeviceID deviceID = deviceExpressionsEntry.getKey(); Set<Expression> expressions = deviceExpressionsEntry.getValue(); Set<Expression> normalizedExpressions = new LinkedHashSet<>(); @@ -1257,10 +1262,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> normalizedExpressions.add(normalizedExpression); } deviceToOutputExpressions - .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) + .computeIfAbsent(deviceID, key -> new LinkedHashSet<>()) .addAll(expressions); deviceToSourceTransformExpressions - .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) + .computeIfAbsent(deviceID, key -> new LinkedHashSet<>()) .addAll(normalizedExpressions); } } @@ -1312,12 +1317,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } private void analyzeDeviceToSource(Analysis analysis, QueryStatement queryStatement) { - Map<String, Set<Expression>> deviceToSourceExpressions = new HashMap<>(); - Map<String, Set<Expression>> deviceToSourceTransformExpressions = + Map<IDeviceID, Set<Expression>> deviceToSourceExpressions = new HashMap<>(); + Map<IDeviceID, Set<Expression>> deviceToSourceTransformExpressions = analysis.getDeviceToSourceTransformExpressions(); - for (Map.Entry<String, Set<Expression>> entry : deviceToSourceTransformExpressions.entrySet()) { - String deviceName = entry.getKey(); + for (Map.Entry<IDeviceID, Set<Expression>> entry : + deviceToSourceTransformExpressions.entrySet()) { + IDeviceID deviceName = entry.getKey(); Set<Expression> sourceTransformExpressions = entry.getValue(); Set<Expression> sourceExpressions = new LinkedHashSet<>(); @@ -1328,10 +1334,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } if (queryStatement.hasWhere()) { - Map<String, Expression> deviceToWhereExpression = analysis.getDeviceToWhereExpression(); - for (Map.Entry<String, Expression> deviceWhereExpressionEntry : + Map<IDeviceID, Expression> deviceToWhereExpression = analysis.getDeviceToWhereExpression(); + for (Map.Entry<IDeviceID, Expression> deviceWhereExpressionEntry : deviceToWhereExpression.entrySet()) { - String deviceName = deviceWhereExpressionEntry.getKey(); + IDeviceID deviceName = deviceWhereExpressionEntry.getKey(); Expression whereExpression = deviceWhereExpressionEntry.getValue(); deviceToSourceExpressions .computeIfAbsent(deviceName, key -> new LinkedHashSet<>()) @@ -1339,9 +1345,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } } - Map<String, IDeviceID> outputDeviceToQueriedDevicesMap = new LinkedHashMap<>(); - for (Map.Entry<String, Set<Expression>> entry : deviceToSourceExpressions.entrySet()) { - String deviceName = entry.getKey(); + Map<IDeviceID, IDeviceID> outputDeviceToQueriedDevicesMap = new LinkedHashMap<>(); + for (Map.Entry<IDeviceID, Set<Expression>> entry : deviceToSourceExpressions.entrySet()) { + IDeviceID deviceName = entry.getKey(); Set<Expression> sourceExpressionsUnderDevice = entry.getValue(); Set<IDeviceID> queriedDevices = new HashSet<>(); // conversion @@ -1388,7 +1394,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> return; } - Map<String, Expression> deviceToWhereExpression = new HashMap<>(); + Map<IDeviceID, Expression> deviceToWhereExpression = new HashMap<>(); Iterator<PartialPath> deviceIterator = deviceSet.iterator(); boolean hasValueFilter = false; while (deviceIterator.hasNext()) { @@ -1398,13 +1404,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> if (whereExpression.equals(ConstantOperand.FALSE)) { deviceIterator.remove(); } else if (whereExpression.equals(ConstantOperand.TRUE)) { - deviceToWhereExpression.put(devicePath.getFullPath(), null); + deviceToWhereExpression.put(devicePath.getIDeviceIDAsFullDevice(), null); } else { TSDataType outputType = analyzeExpressionType(analysis, whereExpression); if (outputType != TSDataType.BOOLEAN) { throw new SemanticException(String.format(WHERE_WRONG_TYPE_ERROR_MSG, outputType)); } - deviceToWhereExpression.put(devicePath.getFullPath(), whereExpression); + deviceToWhereExpression.put(devicePath.getIDeviceIDAsFullDevice(), whereExpression); hasValueFilter = true; } } @@ -1520,10 +1526,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> .map(Expression::getOutputSymbol) .collect(Collectors.toList()); - Map<String, Set<String>> deviceToOutputColumnsMap = new LinkedHashMap<>(); - Map<String, Set<Expression>> deviceToOutputExpressions = + Map<IDeviceID, Set<String>> deviceToOutputColumnsMap = new LinkedHashMap<>(); + Map<IDeviceID, Set<Expression>> deviceToOutputExpressions = analysis.getDeviceToOutputExpressions(); - for (Map.Entry<String, Set<Expression>> deviceOutputExpressionEntry : + for (Map.Entry<IDeviceID, Set<Expression>> deviceOutputExpressionEntry : deviceToOutputExpressions.entrySet()) { Set<Expression> outputExpressionsUnderDevice = deviceOutputExpressionEntry.getValue(); checkDeviceViewInputUniqueness(outputExpressionsUnderDevice); @@ -1538,10 +1544,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> deviceToOutputColumnsMap.put(deviceOutputExpressionEntry.getKey(), outputColumns); } - Map<String, List<Integer>> deviceViewInputIndexesMap = new HashMap<>(); - for (Map.Entry<String, Set<String>> deviceOutputColumnsEntry : + Map<IDeviceID, List<Integer>> deviceViewInputIndexesMap = new HashMap<>(); + for (Map.Entry<IDeviceID, Set<String>> deviceOutputColumnsEntry : deviceToOutputColumnsMap.entrySet()) { - String deviceName = deviceOutputColumnsEntry.getKey(); + IDeviceID deviceID = deviceOutputColumnsEntry.getKey(); List<String> outputsUnderDevice = new ArrayList<>(deviceOutputColumnsEntry.getValue()); List<Integer> indexes = new ArrayList<>(); @@ -1551,7 +1557,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> index >= 1, "output column '%s' is not stored in %s", output, deviceViewOutputColumns); indexes.add(index); } - deviceViewInputIndexesMap.put(deviceName, indexes); + deviceViewInputIndexesMap.put(deviceID, indexes); } analysis.setDeviceViewInputIndexesMap(deviceViewInputIndexesMap); } @@ -1711,7 +1717,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> GroupByComponent groupByComponent = queryStatement.getGroupByComponent(); WindowType windowType = groupByComponent.getWindowType(); - Map<String, Expression> deviceToGroupByExpression = new LinkedHashMap<>(); + Map<IDeviceID, Expression> deviceToGroupByExpression = new LinkedHashMap<>(); if (queryStatement.hasGroupByExpression()) { Expression expression = groupByComponent.getControlColumnExpression(); for (PartialPath device : deviceSet) { @@ -1729,7 +1735,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> expression)); } deviceToGroupByExpression.put( - device.getFullPath(), normalizeExpression(groupByExpressionsOfOneDevice.get(0))); + device.getIDeviceIDAsFullDevice(), + normalizeExpression(groupByExpressionsOfOneDevice.get(0))); } } @@ -1781,8 +1788,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> return; } - Map<String, Set<Expression>> deviceToOrderByExpressions = new LinkedHashMap<>(); - Map<String, List<SortItem>> deviceToSortItems = new LinkedHashMap<>(); + Map<IDeviceID, Set<Expression>> deviceToOrderByExpressions = new LinkedHashMap<>(); + Map<IDeviceID, List<SortItem>> deviceToSortItems = new LinkedHashMap<>(); // build the device-view outputColumn for the sortNode above the deviceViewNode Set<Expression> deviceViewOrderByExpression = new LinkedHashSet<>(); for (PartialPath device : deviceSet) { @@ -1816,8 +1823,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> orderByExpressionsForOneDevice.add(expressionForItem); } deviceToSortItems.put( - device.getFullPath(), queryStatement.getUpdatedSortItems(orderByExpressionsForOneDevice)); - deviceToOrderByExpressions.put(device.getFullPath(), orderByExpressionsForOneDevice); + device.getIDeviceIDAsFullDevice(), + queryStatement.getUpdatedSortItems(orderByExpressionsForOneDevice)); + deviceToOrderByExpressions.put( + device.getIDeviceIDAsFullDevice(), orderByExpressionsForOneDevice); } analysis.setOrderByExpressions(deviceViewOrderByExpression); @@ -2291,7 +2300,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> } private void checkAliasUniqueness( - String alias, Map<Expression, Map<String, Expression>> measurementToDeviceSelectExpressions) { + String alias, + Map<Expression, Map<IDeviceID, Expression>> measurementToDeviceSelectExpressions) { if (alias != null && measurementToDeviceSelectExpressions.keySet().size() > 1) { throw new SemanticException( String.format("alias '%s' can only be matched with one time series", alias)); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java index a64f54ae536..6014cd572f7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAnalyze.java @@ -284,8 +284,8 @@ public class TemplatedAnalyze { return; } - Map<String, Set<Expression>> deviceToOrderByExpressions = new LinkedHashMap<>(); - Map<String, List<SortItem>> deviceToSortItems = new LinkedHashMap<>(); + Map<IDeviceID, Set<Expression>> deviceToOrderByExpressions = new LinkedHashMap<>(); + Map<IDeviceID, List<SortItem>> deviceToSortItems = new LinkedHashMap<>(); // build the device-view outputColumn for the sortNode above the deviceViewNode Set<Expression> deviceViewOrderByExpression = new LinkedHashSet<>(); for (PartialPath device : deviceSet) { @@ -319,8 +319,9 @@ public class TemplatedAnalyze { orderByExpressionsForOneDevice.add(expressionForItem); } deviceToSortItems.put( - device.getFullPath(), queryStatement.getUpdatedSortItems(orderByExpressionsForOneDevice)); - deviceToOrderByExpressions.put(device.getFullPath(), orderByExpressionsForOneDevice); + device.getIDeviceIDAsFullDevice(), + queryStatement.getUpdatedSortItems(orderByExpressionsForOneDevice)); + deviceToOrderByExpressions.put(device.getIDeviceID(), orderByExpressionsForOneDevice); } analysis.setOrderByExpressions(deviceViewOrderByExpression); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java index 00907e2f669..c2fb74b8b70 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java @@ -62,6 +62,7 @@ import org.apache.iotdb.db.utils.SchemaUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.Pair; import org.apache.tsfile.write.schema.IMeasurementSchema; @@ -227,7 +228,12 @@ public class AggregationPushDown implements PlanOptimizer { @Override public PlanNode visitSingleDeviceView(SingleDeviceViewNode node, RewriterContext context) { context.setCurDevice(node.getDevice()); - context.setCurDevicePath(new PartialPath(node.getDevice().split(","))); + try { + context.setCurDevicePath(new PartialPath(node.getDevice())); + } catch (IllegalPathException e) { + throw new IllegalStateException( + "Should always legal here. Illegal Path is " + node.getDevice()); + } PlanNode rewrittenChild = node.getChild().accept(this, context); node.setChild(rewrittenChild); return node; @@ -639,7 +645,7 @@ public class AggregationPushDown implements PlanOptimizer { private final MPPQueryContext context; private final boolean isAlignByDevice; - private String curDevice; + private IDeviceID curDevice; private PartialPath curDevicePath; private long bytesToBeReleased = 0; @@ -659,7 +665,7 @@ public class AggregationPushDown implements PlanOptimizer { return isAlignByDevice; } - public void setCurDevice(String curDevice) { + public void setCurDevice(IDeviceID curDevice) { this.curDevice = curDevice; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java index 23ea2f49f6f..8871329765a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java @@ -486,9 +486,9 @@ public class LogicalPlanBuilder { } public LogicalPlanBuilder planDeviceView( - Map<String, PlanNode> deviceNameToSourceNodesMap, + Map<IDeviceID, PlanNode> deviceNameToSourceNodesMap, Set<Expression> deviceViewOutputExpressions, - Map<String, List<Integer>> deviceToMeasurementIndexesMap, + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap, Set<Expression> selectExpression, QueryStatement queryStatement, Analysis analysis) { @@ -614,21 +614,21 @@ public class LogicalPlanBuilder { private void addSingleDeviceViewNodes( MultiChildProcessNode parent, - Map<String, PlanNode> deviceNameToSourceNodesMap, + Map<IDeviceID, PlanNode> deviceNameToSourceNodesMap, List<String> outputColumnNames, - Map<String, List<Integer>> deviceToMeasurementIndexesMap, + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap, long valueFilterLimit) { - for (Map.Entry<String, PlanNode> entry : deviceNameToSourceNodesMap.entrySet()) { - String deviceName = entry.getKey(); + for (Map.Entry<IDeviceID, PlanNode> entry : deviceNameToSourceNodesMap.entrySet()) { + IDeviceID deviceID = entry.getKey(); PlanNode subPlan = entry.getValue(); SingleDeviceViewNode singleDeviceViewNode = new SingleDeviceViewNode( context.getQueryId().genPlanNodeId(), outputColumnNames, - deviceName, + deviceID, deviceToMeasurementIndexesMap == null ? null - : deviceToMeasurementIndexesMap.get(deviceName)); + : deviceToMeasurementIndexesMap.get(deviceID)); // put LIMIT-NODE below of SingleDeviceViewNode if exists value filter if (valueFilterLimit > 0) { @@ -646,8 +646,8 @@ public class LogicalPlanBuilder { private DeviceViewNode addDeviceViewNode( OrderByParameter orderByParameter, List<String> outputColumnNames, - Map<String, List<Integer>> deviceToMeasurementIndexesMap, - Map<String, PlanNode> deviceNameToSourceNodesMap, + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap, + Map<IDeviceID, PlanNode> deviceNameToSourceNodesMap, long valueFilterLimit) { DeviceViewNode deviceViewNode = new DeviceViewNode( @@ -656,15 +656,15 @@ public class LogicalPlanBuilder { outputColumnNames, deviceToMeasurementIndexesMap); - for (Map.Entry<String, PlanNode> entry : deviceNameToSourceNodesMap.entrySet()) { - String deviceName = entry.getKey(); + for (Map.Entry<IDeviceID, PlanNode> entry : deviceNameToSourceNodesMap.entrySet()) { + IDeviceID deviceID = entry.getKey(); PlanNode subPlan = entry.getValue(); if (valueFilterLimit > 0) { LimitNode limitNode = new LimitNode(context.getQueryId().genPlanNodeId(), subPlan, valueFilterLimit); - deviceViewNode.addChildDeviceNode(deviceName, limitNode); + deviceViewNode.addChildDeviceNode(deviceID, limitNode); } else { - deviceViewNode.addChildDeviceNode(deviceName, subPlan); + deviceViewNode.addChildDeviceNode(deviceID, subPlan); } } return deviceViewNode; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java index 68a3281dead..d4a46d08d44 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java @@ -89,6 +89,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement; import org.apache.iotdb.db.schemaengine.template.Template; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.Pair; import java.util.ArrayList; @@ -157,32 +158,32 @@ public class LogicalPlanVisitor extends StatementVisitor<PlanNode, MPPQueryConte } if (queryStatement.isAlignByDevice()) { - Map<String, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); + Map<IDeviceID, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); for (PartialPath device : analysis.getDeviceList()) { - String deviceName = device.getFullPath(); + IDeviceID deviceID = device.getIDeviceIDAsFullDevice(); LogicalPlanBuilder subPlanBuilder = new LogicalPlanBuilder(analysis, context); subPlanBuilder = subPlanBuilder.withNewRoot( visitQueryBody( queryStatement, - analysis.getDeviceToSourceExpressions().get(deviceName), - analysis.getDeviceToSourceTransformExpressions().get(deviceName), + analysis.getDeviceToSourceExpressions().get(deviceID), + analysis.getDeviceToSourceTransformExpressions().get(deviceID), analysis.getDeviceToWhereExpression() != null - ? analysis.getDeviceToWhereExpression().get(deviceName) + ? analysis.getDeviceToWhereExpression().get(deviceID) : null, - analysis.getDeviceToAggregationExpressions().get(deviceName), + analysis.getDeviceToAggregationExpressions().get(deviceID), analysis.getDeviceToGroupByExpression() != null - ? analysis.getDeviceToGroupByExpression().get(deviceName) + ? analysis.getDeviceToGroupByExpression().get(deviceID) : null, context)); // order by device, expression, push down sortOperator if (queryStatement.needPushDownSort()) { subPlanBuilder = subPlanBuilder.planOrderBy( - analysis.getDeviceToOrderByExpressions().get(deviceName), - analysis.getDeviceToSortItems().get(deviceName)); + analysis.getDeviceToOrderByExpressions().get(deviceID), + analysis.getDeviceToSortItems().get(deviceID)); } - deviceToSubPlanMap.put(deviceName, subPlanBuilder.getRoot()); + deviceToSubPlanMap.put(deviceID, subPlanBuilder.getRoot()); } // convert to ALIGN BY DEVICE view diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java index cd9cb23db33..71dc05861d4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java @@ -1103,7 +1103,7 @@ public class OperatorTreeGenerator extends PlanVisitor<Operator, LocalExecutionP throw new IllegalStateException("OutputColumTypes should not be null/empty"); } return new SingleDeviceViewOperator( - operatorContext, node.getDevice(), child, deviceColumnIndex, outputColumnTypes); + operatorContext, node.getDevice().toString(), child, deviceColumnIndex, outputColumnTypes); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TemplatedLogicalPlan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TemplatedLogicalPlan.java index a0a5678c1aa..198e26e2f12 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TemplatedLogicalPlan.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TemplatedLogicalPlan.java @@ -35,6 +35,7 @@ import org.apache.iotdb.db.utils.SchemaUtils; import org.apache.commons.lang3.Validate; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.write.schema.IMeasurementSchema; import java.util.ArrayList; @@ -254,9 +255,9 @@ public class TemplatedLogicalPlan { LogicalPlanBuilder planBuilder = new TemplatedLogicalPlanBuilder(analysis, context, measurementList, schemaList); - Map<String, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); + Map<IDeviceID, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); for (PartialPath devicePath : analysis.getDeviceList()) { - String deviceName = devicePath.getFullPath(); + IDeviceID deviceID = devicePath.getIDeviceIDAsFullDevice(); PlanNode rootNode = visitQueryBody(devicePath); LogicalPlanBuilder subPlanBuilder = @@ -267,10 +268,10 @@ public class TemplatedLogicalPlan { if (queryStatement.needPushDownSort()) { subPlanBuilder = subPlanBuilder.planOrderBy( - analysis.getDeviceToOrderByExpressions().get(deviceName), - analysis.getDeviceToSortItems().get(deviceName)); + analysis.getDeviceToOrderByExpressions().get(deviceID), + analysis.getDeviceToSortItems().get(deviceID)); } - deviceToSubPlanMap.put(deviceName, subPlanBuilder.getRoot()); + deviceToSubPlanMap.put(deviceID, subPlanBuilder.getRoot()); } // convert to ALIGN BY DEVICE view @@ -339,7 +340,7 @@ public class TemplatedLogicalPlan { LogicalPlanBuilder templatedPlanBuilder = new TemplatedLogicalPlanBuilder(analysis, context, measurementList, schemaList); - Map<String, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); + Map<IDeviceID, PlanNode> deviceToSubPlanMap = new LinkedHashMap<>(); aggregationDescriptorList = getDeduplicatedDescriptors(aggregationDescriptorList); boolean needCheckAscending = queryStatement.isGroupByTime(); @@ -358,7 +359,7 @@ public class TemplatedLogicalPlan { context.getTypeProvider().getTemplatedInfo().setDescendingDescriptorList(descendingDescriptors); for (PartialPath devicePath : analysis.getDeviceList()) { - String deviceName = devicePath.getFullPath(); + IDeviceID deviceName = devicePath.getIDeviceID(); PlanNode rootNode = visitDeviceAggregationBody(devicePath); LogicalPlanBuilder subPlanBuilder = diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java index 5af4d55b744..f0e13456d5d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java @@ -81,7 +81,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; import org.apache.iotdb.db.utils.constant.SqlConstant; import org.apache.tsfile.enums.TSDataType; -import org.apache.tsfile.file.metadata.IDeviceID.Factory; +import org.apache.tsfile.file.metadata.IDeviceID; import java.util.ArrayList; import java.util.Arrays; @@ -151,13 +151,10 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> return Collections.singletonList(node); } - String device = node.getDevice(); - // TODO: remove conversion for device and OutputDeviceToQueriedDevicesMap + IDeviceID device = node.getDevice(); List<TRegionReplicaSet> regionReplicaSets = !analysis.useLogicalView() - ? new ArrayList<>( - analysis.getPartitionInfo( - Factory.DEFAULT_FACTORY.create(device), context.getPartitionTimeFilter())) + ? new ArrayList<>(analysis.getPartitionInfo(device, context.getPartitionTimeFilter())) : new ArrayList<>( analysis.getPartitionInfo( analysis.getOutputDeviceToQueriedDevicesMap().get(device), @@ -199,7 +196,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> boolean existDeviceCrossRegion = false; for (int i = 0; i < node.getDevices().size(); i++) { - String outputDevice = node.getDevices().get(i); + IDeviceID outputDevice = node.getDevices().get(i); PlanNode child = node.getChildren().get(i); List<TRegionReplicaSet> regionReplicaSets = analysis.useLogicalView() @@ -208,9 +205,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> analysis.getOutputDeviceToQueriedDevicesMap().get(outputDevice), context.getPartitionTimeFilter())) : new ArrayList<>( - analysis.getPartitionInfo( - Factory.DEFAULT_FACTORY.create(outputDevice), - context.getPartitionTimeFilter())); + analysis.getPartitionInfo(outputDevice, context.getPartitionTimeFilter())); if (regionReplicaSets.size() > 1 && !existDeviceCrossRegion) { existDeviceCrossRegion = true; if (analysis.isDeviceViewSpecialProcess() && aggregationCannotUseMergeSort()) { @@ -282,7 +277,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> : Collections.singletonList(newIdxSum++)); } - for (String device : node.getDevices()) { + for (IDeviceID device : node.getDevices()) { List<Integer> oldMeasurementIdxList = node.getDeviceToMeasurementIndexesMap().get(device); List<Integer> newMeasurementIdxList = new ArrayList<>(); oldMeasurementIdxList.forEach( @@ -346,7 +341,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> DeviceViewNode node, DistributionPlanContext context) { for (TRegionReplicaSet regionReplicaSet : relatedDataRegions) { - List<String> devices = new ArrayList<>(); + List<IDeviceID> devices = new ArrayList<>(); List<PlanNode> children = new ArrayList<>(); for (DeviceViewSplit split : deviceViewSplits) { if (split.needDistributeTo(regionReplicaSet)) { @@ -1772,12 +1767,12 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext> } private static class DeviceViewSplit { - protected String device; + protected IDeviceID device; protected PlanNode root; protected Set<TRegionReplicaSet> dataPartitions; protected DeviceViewSplit( - String device, PlanNode root, List<TRegionReplicaSet> dataPartitions) { + IDeviceID device, PlanNode root, List<TRegionReplicaSet> dataPartitions) { this.device = device; this.root = root; this.dataPartitions = new HashSet<>(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java index b6114e1f127..5f501b4c9ae 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java @@ -25,6 +25,7 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.OrderByParameter; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -51,20 +52,20 @@ public class DeviceViewNode extends MultiChildProcessNode { private final OrderByParameter mergeOrderParameter; // The size devices and children should be the same. - private final List<String> devices = new ArrayList<>(); + private final List<IDeviceID> devices = new ArrayList<>(); // Device column and measurement columns in result output private List<String> outputColumnNames; // e.g. [s1,s2,s3] is query, but [s1, s3] exists in device1, then device1 -> [1, 3], s1 is 1 but // not 0 because device is the first column - private final Map<String, List<Integer>> deviceToMeasurementIndexesMap; + private final Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap; public DeviceViewNode( PlanNodeId id, OrderByParameter mergeOrderParameter, List<String> outputColumnNames, - Map<String, List<Integer>> deviceToMeasurementIndexesMap) { + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap) { super(id); this.mergeOrderParameter = mergeOrderParameter; this.outputColumnNames = outputColumnNames; @@ -75,8 +76,8 @@ public class DeviceViewNode extends MultiChildProcessNode { PlanNodeId id, OrderByParameter mergeOrderParameter, List<String> outputColumnNames, - List<String> devices, - Map<String, List<Integer>> deviceToMeasurementIndexesMap) { + List<IDeviceID> devices, + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap) { super(id); this.mergeOrderParameter = mergeOrderParameter; this.outputColumnNames = outputColumnNames; @@ -84,16 +85,16 @@ public class DeviceViewNode extends MultiChildProcessNode { this.deviceToMeasurementIndexesMap = deviceToMeasurementIndexesMap; } - public void addChildDeviceNode(String deviceName, PlanNode childNode) { + public void addChildDeviceNode(IDeviceID deviceName, PlanNode childNode) { this.devices.add(deviceName); this.children.add(childNode); } - public List<String> getDevices() { + public List<IDeviceID> getDevices() { return devices; } - public Map<String, List<Integer>> getDeviceToMeasurementIndexesMap() { + public Map<IDeviceID, List<Integer>> getDeviceToMeasurementIndexesMap() { return deviceToMeasurementIndexesMap; } @@ -139,12 +140,12 @@ public class DeviceViewNode extends MultiChildProcessNode { ReadWriteIOUtils.write(column, byteBuffer); } ReadWriteIOUtils.write(devices.size(), byteBuffer); - for (String deviceName : devices) { - ReadWriteIOUtils.write(deviceName, byteBuffer); + for (IDeviceID deviceName : devices) { + deviceName.serialize(byteBuffer); } ReadWriteIOUtils.write(deviceToMeasurementIndexesMap.size(), byteBuffer); - for (Map.Entry<String, List<Integer>> entry : deviceToMeasurementIndexesMap.entrySet()) { - ReadWriteIOUtils.write(entry.getKey(), byteBuffer); + for (Map.Entry<IDeviceID, List<Integer>> entry : deviceToMeasurementIndexesMap.entrySet()) { + entry.getKey().serialize(byteBuffer); ReadWriteIOUtils.write(entry.getValue().size(), byteBuffer); for (Integer index : entry.getValue()) { ReadWriteIOUtils.write(index, byteBuffer); @@ -161,12 +162,12 @@ public class DeviceViewNode extends MultiChildProcessNode { ReadWriteIOUtils.write(column, stream); } ReadWriteIOUtils.write(devices.size(), stream); - for (String deviceName : devices) { - ReadWriteIOUtils.write(deviceName, stream); + for (IDeviceID deviceName : devices) { + deviceName.serialize(stream); } ReadWriteIOUtils.write(deviceToMeasurementIndexesMap.size(), stream); - for (Map.Entry<String, List<Integer>> entry : deviceToMeasurementIndexesMap.entrySet()) { - ReadWriteIOUtils.write(entry.getKey(), stream); + for (Map.Entry<IDeviceID, List<Integer>> entry : deviceToMeasurementIndexesMap.entrySet()) { + entry.getKey().serialize(stream); ReadWriteIOUtils.write(entry.getValue().size(), stream); for (Integer index : entry.getValue()) { ReadWriteIOUtils.write(index, stream); @@ -185,16 +186,17 @@ public class DeviceViewNode extends MultiChildProcessNode { } int devicesSize = ReadWriteIOUtils.readInt(byteBuffer); - List<String> devices = new ArrayList<>(); + List<IDeviceID> devices = new ArrayList<>(); while (devicesSize > 0) { - devices.add(ReadWriteIOUtils.readString(byteBuffer)); + devices.add(IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer)); devicesSize--; } int mapSize = ReadWriteIOUtils.readInt(byteBuffer); - Map<String, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(mapSize); + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(mapSize); while (mapSize > 0) { - String deviceName = ReadWriteIOUtils.readString(byteBuffer); + IDeviceID deviceName = + IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer); int listSize = ReadWriteIOUtils.readInt(byteBuffer); List<Integer> indexes = new ArrayList<>(listSize); while (listSize > 0) { @@ -216,8 +218,8 @@ public class DeviceViewNode extends MultiChildProcessNode { id.serialize(stream); mergeOrderParameter.serializeAttributes(stream); ReadWriteIOUtils.write(devices.size(), stream); - for (String deviceName : devices) { - ReadWriteIOUtils.write(deviceName, stream); + for (IDeviceID deviceName : devices) { + deviceName.serialize(stream); } ReadWriteIOUtils.write(getChildren().size(), stream); @@ -232,9 +234,9 @@ public class DeviceViewNode extends MultiChildProcessNode { OrderByParameter mergeOrderParameter = OrderByParameter.deserialize(byteBuffer); int devicesSize = ReadWriteIOUtils.readInt(byteBuffer); - List<String> devices = new ArrayList<>(devicesSize); + List<IDeviceID> devices = new ArrayList<>(devicesSize); while (devicesSize > 0) { - devices.add(ReadWriteIOUtils.readString(byteBuffer)); + devices.add(IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer)); devicesSize--; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java index 263223c5d5c..f43679f68bf 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/SingleDeviceViewNode.java @@ -24,6 +24,7 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -35,7 +36,7 @@ import java.util.Objects; public class SingleDeviceViewNode extends SingleChildProcessNode { - private final String device; + private final IDeviceID device; // To reduce memory cost, SingleDeviceViewNode doesn't serialize and deserialize // outputColumnNames.It just rebuilds using the infos from parent node. @@ -48,7 +49,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { public SingleDeviceViewNode( PlanNodeId id, List<String> outputColumnNames, - String device, + IDeviceID device, List<Integer> deviceToMeasurementIndexes) { super(id); this.device = device; @@ -60,7 +61,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { PlanNodeId id, boolean cacheOutputColumnNames, List<String> outputColumnNames, - String device, + IDeviceID device, List<Integer> deviceToMeasurementIndexes) { super(id); this.device = device; @@ -93,7 +94,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { this.cacheOutputColumnNames = cacheOutputColumnNames; } - public String getDevice() { + public IDeviceID getDevice() { return device; } @@ -113,7 +114,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { @Override protected void serializeAttributes(ByteBuffer byteBuffer) { PlanNodeType.SINGLE_DEVICE_VIEW.serialize(byteBuffer); - ReadWriteIOUtils.write(device, byteBuffer); + device.serialize(byteBuffer); ReadWriteIOUtils.write(cacheOutputColumnNames, byteBuffer); ReadWriteIOUtils.write(deviceToMeasurementIndexes.size(), byteBuffer); for (Integer index : deviceToMeasurementIndexes) { @@ -130,7 +131,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { @Override protected void serializeAttributes(DataOutputStream stream) throws IOException { PlanNodeType.SINGLE_DEVICE_VIEW.serialize(stream); - ReadWriteIOUtils.write(device, stream); + device.serialize(stream); ReadWriteIOUtils.write(cacheOutputColumnNames, stream); ReadWriteIOUtils.write(deviceToMeasurementIndexes.size(), stream); for (Integer index : deviceToMeasurementIndexes) { @@ -145,7 +146,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { } public static SingleDeviceViewNode deserialize(ByteBuffer byteBuffer) { - String device = ReadWriteIOUtils.readString(byteBuffer); + IDeviceID deviceID = IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer); boolean cacheOutputColumnNames = ReadWriteIOUtils.readBool(byteBuffer); int listSize = ReadWriteIOUtils.readInt(byteBuffer); List<Integer> deviceToMeasurementIndexes = new ArrayList<>(listSize); @@ -165,7 +166,11 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); return new SingleDeviceViewNode( - planNodeId, cacheOutputColumnNames, outputColumnNames, device, deviceToMeasurementIndexes); + planNodeId, + cacheOutputColumnNames, + outputColumnNames, + deviceID, + deviceToMeasurementIndexes); } @Override @@ -173,7 +178,7 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { throws IOException { PlanNodeType.SINGLE_DEVICE_VIEW.serialize(stream); id.serialize(stream); - ReadWriteIOUtils.write(device, stream); + device.serialize(stream); ReadWriteIOUtils.write(cacheOutputColumnNames, stream); ReadWriteIOUtils.write(getChildren().size(), stream); for (PlanNode planNode : getChildren()) { @@ -184,14 +189,14 @@ public class SingleDeviceViewNode extends SingleChildProcessNode { public static SingleDeviceViewNode deserializeUseTemplate( ByteBuffer byteBuffer, TypeProvider typeProvider) { PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); - String device = ReadWriteIOUtils.readString(byteBuffer); + IDeviceID deviceID = IDeviceID.Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(byteBuffer); boolean cacheOutputColumnNames = ReadWriteIOUtils.readBool(byteBuffer); return new SingleDeviceViewNode( planNodeId, cacheOutputColumnNames, typeProvider.getTemplatedInfo().getDeviceViewOutputNames(), - device, + deviceID, typeProvider.getTemplatedInfo().getDeviceToMeasurementIndexes()); } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/DeviceViewOperatorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/DeviceViewOperatorTest.java index 04c63bb4c92..007cdbb8dcd 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/DeviceViewOperatorTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/DeviceViewOperatorTest.java @@ -138,9 +138,11 @@ public class DeviceViewOperatorTest { .getOperatorContext() .setMaxRunTime(new Duration(500, TimeUnit.MILLISECONDS)); - List<String> devices = new ArrayList<>(); - devices.add(DEVICE_MERGE_OPERATOR_TEST_SG + ".device0"); - devices.add(DEVICE_MERGE_OPERATOR_TEST_SG + ".device1"); + List<IDeviceID> devices = new ArrayList<>(); + devices.add( + IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_MERGE_OPERATOR_TEST_SG + ".device0")); + devices.add( + IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_MERGE_OPERATOR_TEST_SG + ".device1")); List<Operator> deviceOperators = new ArrayList<>(); deviceOperators.add(seriesScanOperator1); deviceOperators.add(seriesScanOperator2); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java index 3b742f6023d..99519e84b93 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java @@ -105,9 +105,13 @@ public class MergeSortOperatorTest { private final List<TsFileResource> unSeqResources = new ArrayList<>(); private static final String DEVICE0 = MERGE_SORT_OPERATOR_TEST_SG + ".device0"; + private static final IDeviceID DEVICE0_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE0); private static final String DEVICE1 = MERGE_SORT_OPERATOR_TEST_SG + ".device1"; + private static final IDeviceID DEVICE1_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE1); private static final String DEVICE2 = MERGE_SORT_OPERATOR_TEST_SG + ".device2"; + private static final IDeviceID DEVICE2_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE2); private static final String DEVICE3 = MERGE_SORT_OPERATOR_TEST_SG + ".device3"; + private static final IDeviceID DEVICE3_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE3); private int dataNodeId; @@ -1276,8 +1280,8 @@ public class MergeSortOperatorTest { new DeviceViewOperator( driverContext.getOperatorContexts().get(10), deviceOrdering == Ordering.ASC - ? Arrays.asList(DEVICE0, DEVICE1) - : Arrays.asList(DEVICE1, DEVICE0), + ? Arrays.asList(DEVICE0_ID, DEVICE1_ID) + : Arrays.asList(DEVICE1_ID, DEVICE0_ID), deviceOrdering == Ordering.ASC ? Arrays.asList(seriesScanOperator1, timeJoinOperator1) : Arrays.asList(timeJoinOperator1, seriesScanOperator1), @@ -1290,8 +1294,8 @@ public class MergeSortOperatorTest { new DeviceViewOperator( driverContext.getOperatorContexts().get(11), deviceOrdering == Ordering.ASC - ? Arrays.asList(DEVICE2, DEVICE3) - : Arrays.asList(DEVICE3, DEVICE2), + ? Arrays.asList(DEVICE2_ID, DEVICE3_ID) + : Arrays.asList(DEVICE3_ID, DEVICE2_ID), deviceOrdering == Ordering.ASC ? Arrays.asList(timeJoinOperator2, timeJoinOperator3) : Arrays.asList(timeJoinOperator3, timeJoinOperator2), diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java index 9145e98a7b9..4a7a271e64a 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java @@ -580,11 +580,11 @@ public class OperatorMemoryTest { List<TSDataType> dataTypeList = new ArrayList<>(2); dataTypeList.add(TSDataType.INT32); dataTypeList.add(TSDataType.INT32); - List<String> devices = new ArrayList<>(4); - devices.add("device1"); - devices.add("device2"); - devices.add("device3"); - devices.add("device4"); + List<IDeviceID> devices = new ArrayList<>(4); + devices.add(IDeviceID.Factory.DEFAULT_FACTORY.create("device1")); + devices.add(IDeviceID.Factory.DEFAULT_FACTORY.create("device2")); + devices.add(IDeviceID.Factory.DEFAULT_FACTORY.create("device3")); + devices.add(IDeviceID.Factory.DEFAULT_FACTORY.create("device4")); long expectedMaxReturnSize = 2L * TSFileDescriptor.getInstance().getConfig().getPageSizeInByte(); long expectedMaxPeekMemory = expectedMaxReturnSize; diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TopKOperatorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TopKOperatorTest.java index cb71b11f3b8..f8a4f104d96 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TopKOperatorTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/TopKOperatorTest.java @@ -100,9 +100,13 @@ public class TopKOperatorTest { private final List<TsFileResource> unSeqResources = new ArrayList<>(); private static final String DEVICE0 = TOP_K_OPERATOR_TEST_SG + ".device0"; + private static final IDeviceID DEVICE0_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE0); private static final String DEVICE1 = TOP_K_OPERATOR_TEST_SG + ".device1"; + private static final IDeviceID DEVICE1_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE1); private static final String DEVICE2 = TOP_K_OPERATOR_TEST_SG + ".device2"; + private static final IDeviceID DEVICE2_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE2); private static final String DEVICE3 = TOP_K_OPERATOR_TEST_SG + ".device3"; + private static final IDeviceID DEVICE3_ID = IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE3); private int dataNodeId; @@ -1061,8 +1065,8 @@ public class TopKOperatorTest { new DeviceViewOperator( driverContext.getOperatorContexts().get(10), deviceOrdering == Ordering.ASC - ? Arrays.asList(DEVICE0, DEVICE1) - : Arrays.asList(DEVICE1, DEVICE0), + ? Arrays.asList(DEVICE0_ID, DEVICE1_ID) + : Arrays.asList(DEVICE1_ID, DEVICE0_ID), deviceOrdering == Ordering.ASC ? Arrays.asList(seriesScanOperator1, timeJoinOperator1) : Arrays.asList(timeJoinOperator1, seriesScanOperator1), @@ -1073,8 +1077,8 @@ public class TopKOperatorTest { new DeviceViewOperator( driverContext.getOperatorContexts().get(11), deviceOrdering == Ordering.ASC - ? Arrays.asList(DEVICE2, DEVICE3) - : Arrays.asList(DEVICE3, DEVICE2), + ? Arrays.asList(DEVICE2_ID, DEVICE3_ID) + : Arrays.asList(DEVICE3_ID, DEVICE2_ID), deviceOrdering == Ordering.ASC ? Arrays.asList(timeJoinOperator2, timeJoinOperator3) : Arrays.asList(timeJoinOperator3, timeJoinOperator2), diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java index b9681477344..a1294ca13fc 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java @@ -52,6 +52,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement; import org.apache.ratis.thirdparty.com.google.common.collect.ImmutableMap; import org.apache.ratis.thirdparty.com.google.common.collect.Sets; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.Pair; import org.junit.Assert; import org.junit.Test; @@ -78,6 +79,9 @@ import static org.junit.Assert.fail; public class AnalyzeTest { + private final IDeviceID DEVICE1 = IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"); + private final IDeviceID DEVICE2 = IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"); + @Test public void testRawDataQuery() { String sql = "select s1, status, s1 + 1 as t from root.sg.d1 where time > 100 and s2 > 10;"; @@ -294,14 +298,14 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "1")))); expectedAnalysis.setDeviceToSelectExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.status")), new AdditionExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new ConstantOperand(TSDataType.INT64, "1"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d2.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d2.status")), @@ -310,25 +314,25 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "1"))))); expectedAnalysis.setDeviceToWhereExpression( ImmutableMap.of( - "root.sg.d1", + DEVICE1, new GreaterThanExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new ConstantOperand(TSDataType.INT64, "10")), - "root.sg.d2", + DEVICE2, new GreaterThanExpression( new TimeSeriesOperand(new PartialPath("root.sg.d2.s2")), new ConstantOperand(TSDataType.INT64, "10")))); expectedAnalysis.setDeviceToAggregationExpressions(ImmutableMap.of()); expectedAnalysis.setDeviceToSourceTransformExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new AdditionExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new ConstantOperand(TSDataType.INT64, "1"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d2.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d2.s2")), @@ -337,17 +341,16 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "1"))))); expectedAnalysis.setDeviceToSourceExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.s2"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d2.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d2.s2"))))); expectedAnalysis.setDeviceViewInputIndexesMap( - ImmutableMap.of( - "root.sg.d1", Arrays.asList(1, 2, 3), "root.sg.d2", Arrays.asList(1, 2, 3))); + ImmutableMap.of(DEVICE1, Arrays.asList(1, 2, 3), DEVICE2, Arrays.asList(1, 2, 3))); expectedAnalysis.setDeviceViewOutputExpressions( Sets.newHashSet( new TimeSeriesOperand( @@ -415,7 +418,7 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "100"))); expectedAnalysis.setDeviceToSelectExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new AdditionExpression( new FunctionExpression( @@ -426,7 +429,7 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new ConstantOperand(TSDataType.INT64, "1")))), new ConstantOperand(TSDataType.INT64, "1"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new AdditionExpression( new FunctionExpression( @@ -439,17 +442,17 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "1"))))); expectedAnalysis.setDeviceToWhereExpression( ImmutableMap.of( - "root.sg.d1", + DEVICE1, new GreaterThanExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new ConstantOperand(TSDataType.INT64, "10")), - "root.sg.d2", + DEVICE2, new GreaterThanExpression( new TimeSeriesOperand(new PartialPath("root.sg.d2.s2")), new ConstantOperand(TSDataType.INT64, "10")))); expectedAnalysis.setDeviceToAggregationExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new FunctionExpression( "count", @@ -470,7 +473,7 @@ public class AnalyzeTest { new LinkedHashMap<>(), Collections.singletonList( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1"))))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new FunctionExpression( "count", @@ -493,7 +496,7 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("root.sg.d2.s1"))))))); expectedAnalysis.setDeviceToSourceTransformExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new AdditionExpression( @@ -502,7 +505,7 @@ public class AnalyzeTest { new AdditionExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")), new ConstantOperand(TSDataType.INT64, "1"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d2.s1")), new AdditionExpression( @@ -513,11 +516,11 @@ public class AnalyzeTest { new ConstantOperand(TSDataType.INT64, "1"))))); expectedAnalysis.setDeviceToSourceExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.s2"))), - "root.sg.d2", + DEVICE2, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d2.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d2.s2"))))); @@ -544,8 +547,7 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("s1")), new ConstantOperand(TSDataType.INT64, "1")))))); expectedAnalysis.setDeviceViewInputIndexesMap( - ImmutableMap.of( - "root.sg.d1", Arrays.asList(2, 3, 1), "root.sg.d2", Arrays.asList(2, 3, 1))); + ImmutableMap.of(DEVICE1, Arrays.asList(2, 3, 1), DEVICE2, Arrays.asList(2, 3, 1))); expectedAnalysis.setRespDatasetHeader( new DatasetHeader( @@ -924,14 +926,14 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("s2"))))); expectedAnalysis.setDeviceToOrderByExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new AdditionExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")))))); expectedAnalysis.setDeviceToSourceTransformExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new AdditionExpression( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), @@ -963,7 +965,7 @@ public class AnalyzeTest { Collections.singletonList(new TimeSeriesOperand(new PartialPath("s2"))))))); expectedAnalysis.setDeviceToOrderByExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new AdditionExpression( new FunctionExpression( @@ -978,7 +980,7 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")))))))); expectedAnalysis.setDeviceToAggregationExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new FunctionExpression( "avg", @@ -992,7 +994,7 @@ public class AnalyzeTest { new TimeSeriesOperand(new PartialPath("root.sg.d1.s2"))))))); expectedAnalysis.setDeviceToSourceTransformExpressions( ImmutableMap.of( - "root.sg.d1", + DEVICE1, Sets.newHashSet( new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), new TimeSeriesOperand(new PartialPath("root.sg.d1.s2"))))); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java index aff45606a04..8251054c43d 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java @@ -55,12 +55,15 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; import org.apache.iotdb.db.queryengine.plan.statement.literal.LongLiteral; import org.apache.iotdb.db.utils.columngenerator.parameter.SlidingTimeColumnGeneratorParameter; +import org.apache.tsfile.file.metadata.IDeviceID; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static org.apache.iotdb.db.queryengine.common.header.ColumnHeaderConstant.DEVICE; @@ -340,8 +343,9 @@ public class TestPlanBuilder { } public TestPlanBuilder singleDeviceView(String id, String device, String measurement) { - Map<String, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); - deviceToMeasurementIndexesMap.put(device, Collections.singletonList(1)); + IDeviceID deviceID = IDeviceID.Factory.DEFAULT_FACTORY.create(device); + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); + deviceToMeasurementIndexesMap.put(deviceID, Collections.singletonList(1)); DeviceViewNode deviceViewNode = new DeviceViewNode( new PlanNodeId(id), @@ -351,7 +355,7 @@ public class TestPlanBuilder { new SortItem(OrderByKey.TIME, Ordering.ASC))), Arrays.asList(DEVICE, measurement), deviceToMeasurementIndexesMap); - deviceViewNode.addChildDeviceNode(device, getRoot()); + deviceViewNode.addChildDeviceNode(deviceID, getRoot()); this.root = deviceViewNode; return this; } @@ -407,6 +411,9 @@ public class TestPlanBuilder { List<String> devices, Map<String, List<Integer>> deviceToMeasurementIndexesMap, List<PlanNode> children) { + Map<IDeviceID, List<Integer>> map = new HashMap<>(); + deviceToMeasurementIndexesMap.forEach( + (key, value) -> map.put(IDeviceID.Factory.DEFAULT_FACTORY.create(key), value)); DeviceViewNode deviceViewNode = new DeviceViewNode( new PlanNodeId(id), @@ -415,8 +422,10 @@ public class TestPlanBuilder { new SortItem(OrderByKey.DEVICE, Ordering.ASC), new SortItem(OrderByKey.TIME, Ordering.ASC))), outputColumnNames, - devices, - deviceToMeasurementIndexesMap); + devices.stream() + .map(IDeviceID.Factory.DEFAULT_FACTORY::create) + .collect(Collectors.toList()), + map); deviceViewNode.setChildren(children); this.root = deviceViewNode; return this; diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java index bc644e45cdd..4162f24846b 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java @@ -65,6 +65,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; import org.apache.iotdb.db.storageengine.dataregion.DataRegion; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.junit.Test; import org.mockito.Mockito; @@ -1708,7 +1709,7 @@ public class PipelineBuilderTest { new SingleDeviceViewNode( new PlanNodeId(String.format("SingleDeviceViewNode%d", i)), Arrays.asList("Time", "Device", "s1"), - "root.sg.d" + i, + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d" + i), Arrays.asList(0, 1, 2)); singleDeviceViewNode.setCacheOutputColumnNames(true); SeriesScanNode seriesScanNode = diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/DataQueryLogicalPlannerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/DataQueryLogicalPlannerTest.java index 2a14c0cf3b2..9fd121453a8 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/DataQueryLogicalPlannerTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/DataQueryLogicalPlannerTest.java @@ -51,6 +51,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering; import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.junit.Assert; import org.junit.Test; @@ -292,9 +293,11 @@ public class DataQueryLogicalPlannerTest { Ordering.DESC, true); - Map<String, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); - deviceToMeasurementIndexesMap.put("root.sg.d1", Arrays.asList(1, 2, 3)); - deviceToMeasurementIndexesMap.put("root.sg.d2", Arrays.asList(2, 3, 4)); + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), Arrays.asList(1, 2, 3)); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), Arrays.asList(2, 3, 4)); DeviceViewNode deviceViewNode = new DeviceViewNode( queryId.genPlanNodeId(), @@ -304,8 +307,10 @@ public class DataQueryLogicalPlannerTest { new SortItem(OrderByKey.TIME, Ordering.DESC))), Arrays.asList(ColumnHeaderConstant.DEVICE, "s3", "s1", "s2", "s4"), deviceToMeasurementIndexesMap); - deviceViewNode.addChildDeviceNode("root.sg.d1", filterNode1); - deviceViewNode.addChildDeviceNode("root.sg.d2", filterNode2); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), filterNode1); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), filterNode2); OffsetNode offsetNode = new OffsetNode(queryId.genPlanNodeId(), deviceViewNode, 100); LimitNode limitNode = new LimitNode(queryId.genPlanNodeId(), offsetNode, 100); @@ -666,9 +671,11 @@ public class DataQueryLogicalPlannerTest { null, Ordering.DESC); - Map<String, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); - deviceToMeasurementIndexesMap.put("root.sg.d1", Arrays.asList(1, 2, 3)); - deviceToMeasurementIndexesMap.put("root.sg.d2", Arrays.asList(1, 2, 3)); + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), Arrays.asList(1, 2, 3)); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), Arrays.asList(1, 2, 3)); DeviceViewNode deviceViewNode = new DeviceViewNode( queryId.genPlanNodeId(), @@ -679,8 +686,10 @@ public class DataQueryLogicalPlannerTest { Arrays.asList( ColumnHeaderConstant.DEVICE, "count(s1)", "max_value(s2)", "last_value(s1)"), deviceToMeasurementIndexesMap); - deviceViewNode.addChildDeviceNode("root.sg.d1", rawDataAggregationNode1); - deviceViewNode.addChildDeviceNode("root.sg.d2", rawDataAggregationNode2); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), rawDataAggregationNode1); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), rawDataAggregationNode2); OffsetNode offsetNode = new OffsetNode(queryId.genPlanNodeId(), deviceViewNode, 100); LimitNode limitNode = new LimitNode(queryId.genPlanNodeId(), offsetNode, 100); @@ -953,9 +962,11 @@ public class DataQueryLogicalPlannerTest { null, Ordering.DESC); - Map<String, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); - deviceToMeasurementIndexesMap.put("root.sg.d1", Arrays.asList(1, 2, 3)); - deviceToMeasurementIndexesMap.put("root.sg.d2", Arrays.asList(1, 2, 3)); + Map<IDeviceID, List<Integer>> deviceToMeasurementIndexesMap = new HashMap<>(); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), Arrays.asList(1, 2, 3)); + deviceToMeasurementIndexesMap.put( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), Arrays.asList(1, 2, 3)); DeviceViewNode deviceViewNode = new DeviceViewNode( queryId.genPlanNodeId(), @@ -966,8 +977,10 @@ public class DataQueryLogicalPlannerTest { Arrays.asList( ColumnHeaderConstant.DEVICE, "count(s1)", "max_value(s2)", "last_value(s1)"), deviceToMeasurementIndexesMap); - deviceViewNode.addChildDeviceNode("root.sg.d1", aggregationNode1); - deviceViewNode.addChildDeviceNode("root.sg.d2", aggregationNode2); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), aggregationNode1); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), aggregationNode2); OffsetNode offsetNode = new OffsetNode(queryId.genPlanNodeId(), deviceViewNode, 100); LimitNode limitNode = new LimitNode(queryId.genPlanNodeId(), offsetNode, 100); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java index dd0e664d38a..c9be00b98ee 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java @@ -29,6 +29,7 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.OrderByParame import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering; import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; +import org.apache.tsfile.file.metadata.IDeviceID; import org.junit.Test; import java.util.Arrays; @@ -57,7 +58,7 @@ public class PlanGraphPrinterTest { Collections.emptyMap()); SeriesScanNode scanNode = new SeriesScanNode(new PlanNodeId("3"), new MeasurementPath("s1")); - deviceViewNode.addChildDeviceNode("d1", scanNode); + deviceViewNode.addChildDeviceNode(IDeviceID.Factory.DEFAULT_FACTORY.create("d1"), scanNode); topKNode.addChild(deviceViewNode); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java index ea3e9b8a7dd..264cb2aa0b6 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java @@ -28,6 +28,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.component.OrderByKey; import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering; import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem; +import org.apache.tsfile.file.metadata.IDeviceID; import org.junit.Test; import java.nio.ByteBuffer; @@ -52,8 +53,10 @@ public class DeviceViewNodeSerdeTest { new SortItem(OrderByKey.TIME, Ordering.DESC))), Arrays.asList("s1", "s2"), new HashMap<>()); - deviceViewNode.addChildDeviceNode("root.sg.d1", fullOuterTimeJoinNode1); - deviceViewNode.addChildDeviceNode("root.sg.d2", fullOuterTimeJoinNode2); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d1"), fullOuterTimeJoinNode1); + deviceViewNode.addChildDeviceNode( + IDeviceID.Factory.DEFAULT_FACTORY.create("root.sg.d2"), fullOuterTimeJoinNode2); ByteBuffer byteBuffer = ByteBuffer.allocate(1024); deviceViewNode.serialize(byteBuffer); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java index d1904a4c301..cf95180339c 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelp import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleDeviceViewNode; +import org.apache.tsfile.file.metadata.IDeviceID; import org.junit.Assert; import org.junit.Test; @@ -40,7 +41,7 @@ public class SingleDeviceViewNodeSerdeTest { new SingleDeviceViewNode( new PlanNodeId("TestSingleDeviceViewNode"), outputColumnNames, - "TestDevice", + IDeviceID.Factory.DEFAULT_FACTORY.create("TestDevice"), Arrays.asList(1, 2)); // when cache is false
