You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/06/24 10:07:17 UTC
(iotdb) branch TreeModelDataPartition created (now a455c5ec57d)
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a change to branch TreeModelDataPartition
in repository https://gitbox.apache.org/repos/asf/iotdb.git
at a455c5ec57d change some
This branch includes the following new commits:
new 66073a698bd change some
new a455c5ec57d change some
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(iotdb) 02/02: change some
Posted by ja...@apache.org.
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 <ja...@gmail.com>
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
(iotdb) 01/02: change some
Posted by ja...@apache.org.
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 66073a698bdfa8c7e45aac4b2f66f6ffda6aeab5
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Mon Jun 24 16:16:56 2024 +0800
change some
---
.../iotdb/db/queryengine/plan/analyze/Analysis.java | 6 +++---
.../iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java | 15 ++++-----------
.../plan/planner/distribution/SourceRewriter.java | 6 ++----
.../java/org/apache/iotdb/commons/utils/PathUtils.java | 4 +---
4 files changed, 10 insertions(+), 21 deletions(-)
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 beb5cf6989f..e9b8f05bf46 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
@@ -181,7 +181,7 @@ public class Analysis implements IAnalysis {
private Map<String, Set<Expression>> deviceToOutputExpressions = new HashMap<>();
// map from output device name to queried devices
- private Map<String, String> outputDeviceToQueriedDevicesMap;
+ private Map<String, IDeviceID> outputDeviceToQueriedDevicesMap;
// indicates whether DeviceView need special process when rewriteSource in DistributionPlan,
// you can see SourceRewriter#visitDeviceView to get more information
@@ -892,12 +892,12 @@ public class Analysis implements IAnalysis {
this.lastQueryNonWritableViewSourceExpressionMap = lastQueryNonWritableViewSourceExpressionMap;
}
- public Map<String, String> getOutputDeviceToQueriedDevicesMap() {
+ public Map<String, IDeviceID> getOutputDeviceToQueriedDevicesMap() {
return outputDeviceToQueriedDevicesMap;
}
public void setOutputDeviceToQueriedDevicesMap(
- Map<String, String> outputDeviceToQueriedDevicesMap) {
+ Map<String, IDeviceID> outputDeviceToQueriedDevicesMap) {
this.outputDeviceToQueriedDevicesMap = outputDeviceToQueriedDevicesMap;
}
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 b94d0d75e0a..56aaf3f4025 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
@@ -155,7 +155,6 @@ import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.thrift.TException;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.IDeviceID;
-import org.apache.tsfile.file.metadata.IDeviceID.Factory;
import org.apache.tsfile.read.common.TimeRange;
import org.apache.tsfile.read.filter.basic.Filter;
import org.apache.tsfile.utils.Pair;
@@ -1340,16 +1339,14 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
}
}
- Map<String, String> outputDeviceToQueriedDevicesMap = new LinkedHashMap<>();
+ Map<String, IDeviceID> outputDeviceToQueriedDevicesMap = new LinkedHashMap<>();
for (Map.Entry<String, Set<Expression>> entry : deviceToSourceExpressions.entrySet()) {
String deviceName = entry.getKey();
Set<Expression> sourceExpressionsUnderDevice = entry.getValue();
- Set<String> queriedDevices = new HashSet<>();
- // TODO: Change outputDeviceToQueriedDevicesMap to Map<IDeviceID, IDeviceID> to remove
+ Set<IDeviceID> queriedDevices = new HashSet<>();
// conversion
for (Expression expression : sourceExpressionsUnderDevice) {
- queriedDevices.add(
- ExpressionAnalyzer.getDeviceNameInSourceExpression(expression).toString());
+ queriedDevices.add(ExpressionAnalyzer.getDeviceNameInSourceExpression(expression));
}
if (queriedDevices.size() > 1) {
throw new SemanticException(
@@ -1990,12 +1987,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
MPPQueryContext context) {
Set<IDeviceID> deviceSet = new HashSet<>();
if (queryStatement.isAlignByDevice()) {
- // TODO: change OutputDeviceToQueriedDevicesMap to Map<IDeviceID, IDeviceID> to remove
// conversion
- deviceSet =
- analysis.getOutputDeviceToQueriedDevicesMap().values().stream()
- .map(Factory.DEFAULT_FACTORY::create)
- .collect(Collectors.toSet());
+ deviceSet = new HashSet<>(analysis.getOutputDeviceToQueriedDevicesMap().values());
} else {
for (Expression expression : analysis.getSourceExpressions()) {
deviceSet.add(ExpressionAnalyzer.getDeviceNameInSourceExpression(expression));
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 b0337db3022..5af4d55b744 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
@@ -160,8 +160,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext>
Factory.DEFAULT_FACTORY.create(device), context.getPartitionTimeFilter()))
: new ArrayList<>(
analysis.getPartitionInfo(
- Factory.DEFAULT_FACTORY.create(
- analysis.getOutputDeviceToQueriedDevicesMap().get(device)),
+ analysis.getOutputDeviceToQueriedDevicesMap().get(device),
context.getPartitionTimeFilter()));
List<PlanNode> singleDeviceViewList = new ArrayList<>();
@@ -206,8 +205,7 @@ public class SourceRewriter extends BaseSourceRewriter<DistributionPlanContext>
analysis.useLogicalView()
? new ArrayList<>(
analysis.getPartitionInfo(
- Factory.DEFAULT_FACTORY.create(
- analysis.getOutputDeviceToQueriedDevicesMap().get(outputDevice)),
+ analysis.getOutputDeviceToQueriedDevicesMap().get(outputDevice),
context.getPartitionTimeFilter()))
: new ArrayList<>(
analysis.getPartitionInfo(
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java
index 06d66b2d10d..939be284810 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java
@@ -183,9 +183,7 @@ public class PathUtils {
}
public static boolean isStartWith(IDeviceID deviceID, String storageGroup) {
- // TODO: use correct judgement without converting to string
- String deviceName = deviceID.toString();
- return deviceName.equals(storageGroup) || deviceName.startsWith(storageGroup + ".");
+ return deviceID.startWith(storageGroup + ".");
}
/** Remove the back quotes of a measurement if necessary */