Skip to content

Commit a6b5303

Browse files
branch-4.0: [fix](nereids) make needsFinalize false for distinct agg local phase #58460 (#58489)
Cherry-picked from #58460 Co-authored-by: feiniaofeiafei <[email protected]>
1 parent cadeb78 commit a6b5303

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1182,7 +1182,7 @@ public PlanFragment visitPhysicalHashAggregate(
11821182

11831183
aggregationNode.setNereidsId(aggregate.getId());
11841184
context.getNereidsIdToPlanNodeIdMap().put(aggregate.getId(), aggregationNode.getId());
1185-
if (isPartial) {
1185+
if (isPartial || aggregate.getAggregateParam().aggPhase.isLocal()) {
11861186
aggregationNode.unsetNeedsFinalize();
11871187
}
11881188

fe/fe-core/src/test/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslatorTest.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,26 @@
3535
import org.apache.doris.nereids.trees.plans.physical.PhysicalProject;
3636
import org.apache.doris.nereids.types.IntegerType;
3737
import org.apache.doris.nereids.util.PlanConstructor;
38+
import org.apache.doris.planner.AggregationNode;
3839
import org.apache.doris.planner.OlapScanNode;
3940
import org.apache.doris.planner.PlanFragment;
4041
import org.apache.doris.planner.PlanNode;
42+
import org.apache.doris.planner.Planner;
43+
import org.apache.doris.utframe.TestWithFeService;
4144

4245
import com.google.common.collect.ImmutableList;
4346
import com.google.common.collect.ImmutableSet;
4447
import mockit.Injectable;
4548
import org.junit.jupiter.api.Assertions;
4649
import org.junit.jupiter.api.Test;
4750

51+
import java.lang.reflect.Field;
4852
import java.util.ArrayList;
4953
import java.util.Collections;
5054
import java.util.List;
5155
import java.util.Optional;
5256

53-
public class PhysicalPlanTranslatorTest {
57+
public class PhysicalPlanTranslatorTest extends TestWithFeService {
5458

5559
@Test
5660
public void testOlapPrune(@Injectable LogicalProperties placeHolder) throws Exception {
@@ -86,4 +90,39 @@ public void testOlapPrune(@Injectable LogicalProperties placeHolder) throws Exce
8690
planNode.collect(OlapScanNode.class::isInstance, scanNodeList);
8791
Assertions.assertEquals(2, scanNodeList.get(0).getTupleDesc().getSlots().size());
8892
}
93+
94+
@Test
95+
public void testAggNeedsFinalize() throws Exception {
96+
createDatabase("test_db");
97+
createTable("create table test_db.t(a int, b int) distributed by hash(a) buckets 3 "
98+
+ "properties('replication_num' = '1');");
99+
connectContext.getSessionVariable().setDisableNereidsRules("prune_empty_partition");
100+
String querySql = "select b from test_db.t group by b";
101+
Planner planner = getSQLPlanner(querySql);
102+
Assertions.assertNotNull(planner);
103+
104+
List<PlanFragment> fragments = planner.getFragments();
105+
Assertions.assertNotNull(fragments);
106+
Assertions.assertFalse(fragments.isEmpty());
107+
108+
List<AggregationNode> aggNodes = new ArrayList<>();
109+
for (PlanFragment fragment : fragments) {
110+
PlanNode root = fragment.getPlanRoot();
111+
if (root != null) {
112+
root.collect(AggregationNode.class::isInstance, aggNodes);
113+
}
114+
}
115+
Assertions.assertEquals(2, aggNodes.size());
116+
Field needsFinalizeField = AggregationNode.class.getDeclaredField("needsFinalize");
117+
needsFinalizeField.setAccessible(true);
118+
AggregationNode upperAggNode = aggNodes.get(0);
119+
AggregationNode lowerAggNode = aggNodes.get(1);
120+
121+
boolean lowerNeedsFinalize = needsFinalizeField.getBoolean(lowerAggNode);
122+
Assertions.assertFalse(lowerNeedsFinalize,
123+
"lower AggregationNode needsFinalize should be false");
124+
boolean upperNeedsFinalize = needsFinalizeField.getBoolean(upperAggNode);
125+
Assertions.assertTrue(upperNeedsFinalize,
126+
"upper AggregationNode needsFinalize should be true");
127+
}
89128
}

0 commit comments

Comments
 (0)