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,

Reply via email to