This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new dc5a36e6458 [To dev/1.3]Fix TypeProvider and AggregationDescriptor
serde in Templated Query
dc5a36e6458 is described below
commit dc5a36e64586b3a328d2b3e09177a0d114c4aa08
Author: Weihao Li <[email protected]>
AuthorDate: Tue Jun 17 18:41:05 2025 +0800
[To dev/1.3]Fix TypeProvider and AggregationDescriptor serde in Templated
Query
---
.../apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java | 8 +++++++-
.../iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java | 8 ++------
.../plan/node/source/AlignedSeriesAggregationScanNode.java | 6 ++++++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
index 7c38bbdc4e9..ef26583119e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.queryengine.plan.analyze;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.ReadWriteIOUtils;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -49,7 +50,12 @@ public class TypeProvider {
}
public TSDataType getType(String symbol) {
- return typeMap.get(symbol);
+ TSDataType type = typeMap.get(symbol);
+ if (templatedInfo == null || type != null) {
+ return type;
+ }
+ IMeasurementSchema schema = templatedInfo.getSchemaMap().get(symbol);
+ return schema == null ? null : schema.getType();
}
public void setType(String symbol, TSDataType dataType) {
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 405eb9b2033..30d778c079d 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
@@ -683,18 +683,14 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
AlignedSeriesAggregationScanNode node, LocalExecutionPlanContext
context) {
if (context.isBuildPlanUseTemplate()) {
Ordering scanOrder = context.getTemplatedInfo().getScanOrder();
- List<AggregationDescriptor> aggregationDescriptors;
- if (node.getDescriptorType() == 0 || node.getDescriptorType() == 2) {
- aggregationDescriptors =
context.getTemplatedInfo().getAscendingDescriptorList();
- } else {
+ if (node.getDescriptorType() == 1) {
scanOrder = scanOrder.reverse();
- aggregationDescriptors =
context.getTemplatedInfo().getDescendingDescriptorList();
}
return constructAlignedSeriesAggregationScanOperator(
node.getPlanNodeId(),
node.getAlignedPath(),
- aggregationDescriptors,
+ node.getAggregationDescriptorList(),
context.getTemplatedInfo().getPushDownPredicate(),
scanOrder,
context.getTemplatedInfo().getGroupByTimeParameter(),
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
index b16b723c44b..d81ca0c92bd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
@@ -33,6 +33,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeUtil;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.AggregationDescriptor;
+import
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.AggregationStep;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.GroupByTimeParameter;
import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
@@ -286,6 +287,7 @@ public class AlignedSeriesAggregationScanNode extends
SeriesAggregationSourceNod
ReadWriteIOUtils.write(node, stream);
}
ReadWriteIOUtils.write(descriptorType, stream);
+ aggregationDescriptorList.get(0).getStep().serialize(stream);
}
public static AlignedSeriesAggregationScanNode deserializeUseTemplate(
@@ -306,7 +308,11 @@ public class AlignedSeriesAggregationScanNode extends
SeriesAggregationSourceNod
aggregationDescriptorList =
typeProvider.getTemplatedInfo().getAscendingDescriptorList();
} else if (descriptorType == 1) {
aggregationDescriptorList =
typeProvider.getTemplatedInfo().getDescendingDescriptorList();
+ } else {
+ throw new IllegalStateException("Unexpected descriptorType: " +
descriptorType);
}
+ AggregationStep step = AggregationStep.deserialize(byteBuffer);
+ aggregationDescriptorList.forEach(aggregationDescriptor ->
aggregationDescriptor.setStep(step));
return new AlignedSeriesAggregationScanNode(
planNodeId,