This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/TableModelGrammar by this
push:
new b6a2c79ddb0 Implement TODO in fe part of query engine for refactoring
IDeviceId in PartitionFetcher
b6a2c79ddb0 is described below
commit b6a2c79ddb083efaeca4f6d6dc2211a5c59092e0
Author: Jackie Tien <[email protected]>
AuthorDate: Wed Jun 26 18:07:27 2024 +0800
Implement TODO in fe part of query engine for refactoring IDeviceId in
PartitionFetcher
---
.../operator/process/DeviceViewOperator.java | 9 +-
.../db/queryengine/plan/analyze/Analysis.java | 70 ++++-----
.../queryengine/plan/analyze/AnalyzeVisitor.java | 159 +++++++++++----------
.../queryengine/plan/analyze/TemplatedAnalyze.java | 9 +-
.../plan/optimization/AggregationPushDown.java | 14 +-
.../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 | 29 ++--
.../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 +-
.../apache/iotdb/commons/path/PathPatternTree.java | 4 +-
.../org/apache/iotdb/commons/utils/PathUtils.java | 4 +-
25 files changed, 337 insertions(+), 280 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 beb5cf6989f..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, String> 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, String> getOutputDeviceToQueriedDevicesMap() {
+ public Map<IDeviceID, IDeviceID> getOutputDeviceToQueriedDevicesMap() {
return outputDeviceToQueriedDevicesMap;
}
public void setOutputDeviceToQueriedDevicesMap(
- Map<String, String> 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 b94d0d75e0a..bde673ae36a 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;
@@ -733,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());
@@ -743,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 =
@@ -754,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();
@@ -802,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);
}
}
@@ -812,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<>();
@@ -830,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);
}
}
@@ -961,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();
@@ -992,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);
}
}
@@ -1123,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) {
@@ -1142,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);
}
}
@@ -1189,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(*)
@@ -1224,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 {
@@ -1238,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<>();
@@ -1258,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);
}
}
@@ -1313,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<>();
@@ -1329,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<>())
@@ -1340,16 +1345,14 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
}
- Map<String, String> 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<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(
@@ -1391,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()) {
@@ -1401,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;
}
}
@@ -1523,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);
@@ -1541,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<>();
@@ -1554,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);
}
@@ -1714,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) {
@@ -1732,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)));
}
}
@@ -1784,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) {
@@ -1819,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);
@@ -1990,12 +1996,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));
@@ -2298,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));
@@ -3301,7 +3304,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
return analysis;
}
if (!schemaNodeManagementPartition.getMatchedNode().isEmpty()
- &&
schemaNodeManagementPartition.getSchemaPartition().getSchemaPartitionMap().size()
== 0) {
+ &&
schemaNodeManagementPartition.getSchemaPartition().getSchemaPartitionMap().isEmpty())
{
analysis.setFinishQueryAfterAnalyze(true);
}
analysis.setMatchedNodes(schemaNodeManagementPartition.getMatchedNode());
@@ -3354,7 +3357,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
return analysis;
}
if (!schemaNodeManagementPartition.getMatchedNode().isEmpty()
- &&
schemaNodeManagementPartition.getSchemaPartition().getSchemaPartitionMap().size()
== 0) {
+ &&
schemaNodeManagementPartition.getSchemaPartition().getSchemaPartitionMap().isEmpty())
{
analysis.setFinishQueryAfterAnalyze(true);
}
analysis.setMatchedNodes(schemaNodeManagementPartition.getMatchedNode());
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..32f79e0134e 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;
@@ -109,7 +110,7 @@ public class AggregationPushDown implements PlanOptimizer {
}
// check any of the devices
- String device = analysis.getDeviceList().get(0).toString();
+ IDeviceID device =
analysis.getDeviceList().get(0).getIDeviceIDAsFullDevice();
return cannotUseStatistics(
analysis.getDeviceToAggregationExpressions().get(device),
analysis.getDeviceToSourceTransformExpressions().get(device));
@@ -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 b0337db3022..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,17 +151,13 @@ 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(
- Factory.DEFAULT_FACTORY.create(
-
analysis.getOutputDeviceToQueriedDevicesMap().get(device)),
+ analysis.getOutputDeviceToQueriedDevicesMap().get(device),
context.getPartitionTimeFilter()));
List<PlanNode> singleDeviceViewList = new ArrayList<>();
@@ -200,19 +196,16 @@ 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()
? new ArrayList<>(
analysis.getPartitionInfo(
- Factory.DEFAULT_FACTORY.create(
-
analysis.getOutputDeviceToQueriedDevicesMap().get(outputDevice)),
+
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()) {
@@ -284,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(
@@ -348,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)) {
@@ -1774,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
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
index ebaff888f2a..e46a82a9cdf 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/path/PathPatternTree.java
@@ -178,7 +178,9 @@ public class PathPatternTree {
Set<IDeviceID> resultPaths = new HashSet<>();
for (List<String> resultNodes : resultNodesSet) {
- resultPaths.add(Factory.DEFAULT_FACTORY.create(resultNodes.toArray(new
String[0])));
+ if (resultNodes != null && !resultNodes.isEmpty()) {
+ resultPaths.add(Factory.DEFAULT_FACTORY.create(resultNodes.toArray(new
String[0])));
+ }
}
return new ArrayList<>(resultPaths);
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..5b733f248c1 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.segmentNum() > 0 &&
deviceID.matchDatabaseName(storageGroup);
}
/** Remove the back quotes of a measurement if necessary */