From 8fc603c9aa1d0bfb0cf397b8754ade48eb203c61 Mon Sep 17 00:00:00 2001 From: 924060929 Date: Wed, 14 Jan 2026 18:53:47 +0800 Subject: [PATCH] [fix](local shuffle) fix set operation compute wrong data because not set AggregationNode.isColocate (#59840) fix set operation compute wrong data because not set AggregationNode.isColocate --- .../glue/translator/PhysicalPlanTranslator.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 0e452b04939ab0..89cf2b21585e7d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -2073,7 +2073,7 @@ public PlanFragment visitPhysicalPartitionTopN(PhysicalPartitionTopN physicalW // in pipeline engine, we use parallel scan by default, but it broke the rule of data distribution // we need turn of parallel scan to ensure to get correct result. // TODO: nereids forbid all parallel scan under PhysicalSetOperation temporary - if (findOlapScanNodesByPassExchangeAndJoinNode(inputPlanFragment.getPlanRoot())) { + if (findOlapScanNodesByPassExchangeNode(inputPlanFragment.getPlanRoot())) { inputPlanFragment.setHasColocatePlanNode(true); analyticEvalNode.setColocate(true); if (root instanceof SortNode) { @@ -3200,11 +3200,11 @@ private PhysicalCTEConsumer getCTEConsumerChild(PhysicalPlan root) { } } - private boolean findOlapScanNodesByPassExchangeAndJoinNode(PlanNode root) { + private boolean findOlapScanNodesByPassExchangeNode(PlanNode root) { if (root instanceof OlapScanNode) { return true; - } else if (!(root instanceof JoinNodeBase || root instanceof ExchangeNode)) { - return root.getChildren().stream().anyMatch(child -> findOlapScanNodesByPassExchangeAndJoinNode(child)); + } else if (!(root instanceof ExchangeNode)) { + return root.getChildren().stream().anyMatch(child -> findOlapScanNodesByPassExchangeNode(child)); } return false; }