This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 1fc3eae29b4 Fix TypeProvider and AggregationDescriptor serde in 
Templated Query
1fc3eae29b4 is described below

commit 1fc3eae29b4eafe6bc88840dce2a79c0036b73ee
Author: Weihao Li <[email protected]>
AuthorDate: Tue Jun 17 18:38:31 2025 +0800

    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 da39e926815..4dc2d5a4ae0 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
@@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.read.common.type.Type;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -58,7 +59,12 @@ public class TypeProvider {
   }
 
   public TSDataType getTreeModelType(String symbol) {
-    return treeModelTypeMap.get(symbol);
+    TSDataType type = treeModelTypeMap.get(symbol);
+    if (templatedInfo == null || type != null) {
+      return type;
+    }
+    IMeasurementSchema schema = templatedInfo.getSchemaMap().get(symbol);
+    return schema == null ? null : schema.getType();
   }
 
   public void setTreeModelType(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 bdc171a98a9..a353ed665ac 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
@@ -698,18 +698,14 @@ public class OperatorTreeGenerator extends 
PlanVisitor<Operator, LocalExecutionP
 
     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