This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch rc/1.3.5 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9b077d0175d65d63f5363691cc3a8f09d7229194 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,
