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 11b38c0eae3 [Fix](query) Fix project order in table distributed plan 
generator
11b38c0eae3 is described below

commit 11b38c0eae37489c36e2d4743108908a19837aa9
Author: Beyyes <[email protected]>
AuthorDate: Fri Apr 11 11:33:19 2025 +0800

    [Fix](query) Fix project order in table distributed plan generator
---
 .../relational/AbstractAggTableScanOperator.java   |  2 +-
 .../AbstractDefaultAggTableScanOperator.java       |  2 +-
 .../distribute/TableDistributedPlanGenerator.java  | 44 +++++++++++-----------
 3 files changed, 24 insertions(+), 24 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
index 640b38cf698..bd0f9c16ef9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractAggTableScanOperator.java
@@ -110,7 +110,7 @@ public abstract class AbstractAggTableScanOperator extends 
AbstractDataSourceOpe
 
   private boolean allAggregatorsHasFinalResult = false;
 
-  public AbstractAggTableScanOperator(AbstractAggTableScanOperatorParameter 
parameter) {
+  protected AbstractAggTableScanOperator(AbstractAggTableScanOperatorParameter 
parameter) {
 
     this.sourceId = parameter.sourceId;
     this.operatorContext = parameter.context;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractDefaultAggTableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractDefaultAggTableScanOperator.java
index f88aa22aabc..ba7e1a226fe 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractDefaultAggTableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/AbstractDefaultAggTableScanOperator.java
@@ -36,7 +36,7 @@ public abstract class AbstractDefaultAggTableScanOperator 
extends AbstractAggTab
   private static final long INSTANCE_SIZE =
       
RamUsageEstimator.shallowSizeOfInstance(AbstractDefaultAggTableScanOperator.class);
 
-  public 
AbstractDefaultAggTableScanOperator(AbstractAggTableScanOperatorParameter 
parameter) {
+  protected 
AbstractDefaultAggTableScanOperator(AbstractAggTableScanOperatorParameter 
parameter) {
     super(parameter);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
index c8087e365d3..66d06f7b455 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
@@ -223,38 +223,39 @@ public class TableDistributedPlanGenerator
   public List<PlanNode> visitProject(ProjectNode node, PlanContext context) {
     List<PlanNode> childrenNodes = node.getChild().accept(this, context);
     OrderingScheme childOrdering = 
nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId());
+    boolean containAllSortItem = false;
     if (childOrdering != null) {
-      nodeOrderingMap.put(node.getPlanNodeId(), childOrdering);
+      // the column used for order by has been pruned, we can't copy this node 
to sub nodeTrees.
+      containAllSortItem =
+          
ImmutableSet.copyOf(node.getOutputSymbols()).containsAll(childOrdering.getOrderBy());
     }
-
     if (childrenNodes.size() == 1) {
+      if (containAllSortItem) {
+        nodeOrderingMap.put(node.getPlanNodeId(), childOrdering);
+      }
       node.setChild(childrenNodes.get(0));
       return Collections.singletonList(node);
     }
 
-    boolean canCopyThis = true;
-    if (childOrdering != null) {
-      // the column used for order by has been pruned, we can't copy this node 
to sub nodeTrees.
-      canCopyThis =
-          
ImmutableSet.copyOf(node.getOutputSymbols()).containsAll(childOrdering.getOrderBy());
-    }
-    canCopyThis =
-        canCopyThis
-            && node.getAssignments().getMap().values().stream()
-                .noneMatch(PushPredicateIntoTableScan::containsDiffFunction);
-
-    if (!canCopyThis) {
+    boolean containsDiff =
+        node.getAssignments().getMap().values().stream()
+            .anyMatch(PushPredicateIntoTableScan::containsDiffFunction);
+    if (containsDiff) {
+      if (containAllSortItem) {
+        nodeOrderingMap.put(node.getPlanNodeId(), childOrdering);
+      }
       node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, 
childrenNodes));
       return Collections.singletonList(node);
     }
 
-    List<PlanNode> resultNodeList = new ArrayList<>();
-    for (int i = 0; i < childrenNodes.size(); i++) {
-      PlanNode child = childrenNodes.get(i);
+    List<PlanNode> resultNodeList = new ArrayList<>(childrenNodes.size());
+    for (PlanNode child : childrenNodes) {
       ProjectNode subProjectNode =
           new ProjectNode(queryId.genPlanNodeId(), child, 
node.getAssignments());
       resultNodeList.add(subProjectNode);
-      nodeOrderingMap.put(subProjectNode.getPlanNodeId(), childOrdering);
+      if (containAllSortItem) {
+        nodeOrderingMap.put(subProjectNode.getPlanNodeId(), childOrdering);
+      }
     }
     return resultNodeList;
   }
@@ -432,8 +433,7 @@ public class TableDistributedPlanGenerator
     }
 
     List<PlanNode> resultNodeList = new ArrayList<>();
-    for (int i = 0; i < childrenNodes.size(); i++) {
-      PlanNode child = childrenNodes.get(i);
+    for (PlanNode child : childrenNodes) {
       FilterNode subFilterNode =
           new FilterNode(queryId.genPlanNodeId(), child, node.getPredicate());
       resultNodeList.add(subFilterNode);
@@ -483,6 +483,7 @@ public class TableDistributedPlanGenerator
     return Collections.singletonList(node);
   }
 
+  @Override
   public List<PlanNode> visitDeviceTableScan(
       final DeviceTableScanNode node, final PlanContext context) {
     if (context.isPushDownGrouping()) {
@@ -509,7 +510,6 @@ public class TableDistributedPlanGenerator
     }
     Map<Integer, List<TRegionReplicaSet>> cachedSeriesSlotWithRegions = new 
HashMap<>();
 
-    List<PlanNode> result = new ArrayList<>();
     List<DeviceEntry> crossRegionDevices = new ArrayList<>();
 
     final Map<TRegionReplicaSet, DeviceTableScanNode> tableScanNodeMap = new 
HashMap<>();
@@ -554,7 +554,7 @@ public class TableDistributedPlanGenerator
               });
       deviceTableScanNode.appendDeviceEntry(deviceEntry);
     }
-    result.addAll(tableScanNodeMap.values());
+    List<PlanNode> result = new ArrayList<>(tableScanNodeMap.values());
     if (context.hasSortProperty) {
       processSortProperty(node, result, context);
     }

Reply via email to