This is an automated email from the ASF dual-hosted git repository. lancelly pushed a commit to branch support_correlated_scalar_subquery in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 8fcbf177a0c8317d7fd188b535bf584920334b40 Author: lancelly <[email protected]> AuthorDate: Tue Feb 18 11:17:55 2025 +0800 fix visitAssignUniqueId in TableDistributedPlanGenerator --- .../distribute/TableDistributedPlanGenerator.java | 58 +++++++--------------- 1 file changed, 18 insertions(+), 40 deletions(-) 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 fb479eb4474..72b61318e11 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 @@ -32,6 +32,7 @@ import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.WritePlanNode; +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChildProcessNode; import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis; import org.apache.iotdb.db.queryengine.plan.relational.metadata.AlignedDeviceEntry; import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema; @@ -43,6 +44,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.planner.SymbolAllocator; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationNode; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode; +import org.apache.iotdb.db.queryengine.plan.relational.planner.node.AssignUniqueId; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode; import org.apache.iotdb.db.queryengine.plan.relational.planner.node.EnforceSingleRowNode; @@ -188,52 +190,24 @@ public class TableDistributedPlanGenerator if (!(node instanceof ValueFillNode)) { context.clearExpectedOrderingScheme(); } - List<PlanNode> childrenNodes = node.getChild().accept(this, context); - OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); - if (childOrdering != null) { - nodeOrderingMap.put(node.getPlanNodeId(), childOrdering); - } - - node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, childrenNodes)); - return Collections.singletonList(node); + return dealWithPlainSingleChildNode(node, context); } @Override public List<PlanNode> visitGapFill(GapFillNode node, PlanContext context) { context.clearExpectedOrderingScheme(); - List<PlanNode> childrenNodes = node.getChild().accept(this, context); - OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); - if (childOrdering != null) { - nodeOrderingMap.put(node.getPlanNodeId(), childOrdering); - } - - node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, childrenNodes)); - return Collections.singletonList(node); + return dealWithPlainSingleChildNode(node, context); } @Override public List<PlanNode> visitLimit(LimitNode node, PlanContext context) { - List<PlanNode> childrenNodes = node.getChild().accept(this, context); - OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); - if (childOrdering != null) { - nodeOrderingMap.put(node.getPlanNodeId(), childOrdering); - } - // push down LimitNode in distributed plan optimize rule - node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, childrenNodes)); - return Collections.singletonList(node); + return dealWithPlainSingleChildNode(node, context); } @Override public List<PlanNode> visitOffset(OffsetNode node, PlanContext context) { - List<PlanNode> childrenNodes = node.getChild().accept(this, context); - OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); - if (childOrdering != null) { - nodeOrderingMap.put(node.getPlanNodeId(), childOrdering); - } - - node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, childrenNodes)); - return Collections.singletonList(node); + return dealWithPlainSingleChildNode(node, context); } @Override @@ -827,18 +801,21 @@ public class TableDistributedPlanGenerator @Override public List<PlanNode> visitEnforceSingleRow(EnforceSingleRowNode node, PlanContext context) { - List<PlanNode> childrenNodes = node.getChild().accept(this, context); - OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); - if (childOrdering != null) { - nodeOrderingMap.put(node.getPlanNodeId(), childOrdering); - } + return dealWithPlainSingleChildNode(node, context); + } - node.setChild(mergeChildrenViaCollectOrMergeSort(childOrdering, childrenNodes)); - return Collections.singletonList(node); + @Override + public List<PlanNode> visitAssignUniqueId(AssignUniqueId node, PlanContext context) { + return dealWithPlainSingleChildNode(node, context); } @Override public List<PlanNode> visitMarkDistinct(MarkDistinctNode node, PlanContext context) { + return dealWithPlainSingleChildNode(node, context); + } + + private List<PlanNode> dealWithPlainSingleChildNode( + SingleChildProcessNode node, PlanContext context) { List<PlanNode> childrenNodes = node.getChild().accept(this, context); OrderingScheme childOrdering = nodeOrderingMap.get(childrenNodes.get(0).getPlanNodeId()); if (childOrdering != null) { @@ -932,7 +909,8 @@ public class TableDistributedPlanGenerator private PlanNode mergeChildrenViaCollectOrMergeSort( final OrderingScheme childOrdering, final List<PlanNode> childrenNodes) { - checkArgument(!childrenNodes.isEmpty(), "childrenNodes should not be empty"); + checkArgument(childrenNodes != null, "childrenNodes should not be null."); + checkArgument(!childrenNodes.isEmpty(), "childrenNodes should not be empty."); if (childrenNodes.size() == 1) { return childrenNodes.get(0);
