diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java index c8187727da47f2..3212cb170f052c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashAggregate.java @@ -27,12 +27,14 @@ import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateParam; +import org.apache.doris.nereids.trees.expressions.functions.agg.NullableAggregateFunction; import org.apache.doris.nereids.trees.plans.AggMode; import org.apache.doris.nereids.trees.plans.AggPhase; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.PlanType; import org.apache.doris.nereids.trees.plans.algebra.Aggregate; import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.ExpressionUtils; import org.apache.doris.nereids.util.MutableState; import org.apache.doris.nereids.util.Utils; import org.apache.doris.statistics.Statistics; @@ -93,8 +95,9 @@ public PhysicalHashAggregate(List groupByExpressions, List groupByExpressions, List setTopnPushInfo(TopnPushInfo topnPushIn setMutableState(MutableState.KEY_PUSH_TOPN_TO_AGG, topnPushInfo); return this; } + + private List adjustNullableForOutputs(List outputs, boolean alwaysNullable) { + return ExpressionUtils.rewriteDownShortCircuit(outputs, output -> { + if (output instanceof NullableAggregateFunction + && ((NullableAggregateFunction) output).isAlwaysNullable() != alwaysNullable) { + return ((NullableAggregateFunction) output).withAlwaysNullable(alwaysNullable); + } else { + return output; + } + }); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/AggregateStrategiesTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/AggregateStrategiesTest.java index 34c16309181466..c4a5e53d2ea144 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/AggregateStrategiesTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/AggregateStrategiesTest.java @@ -138,7 +138,7 @@ public void globalAggregate() { Plan root = new LogicalAggregate<>(groupExpressionList, outputExpressionList, true, Optional.empty(), rStudent); - Sum localOutput0 = new Sum(rStudent.getOutput().get(0).toSlot()); + Sum localOutput0 = new Sum(false, true, rStudent.getOutput().get(0).toSlot()); PlanChecker.from(MemoTestUtils.createConnectContext(), root) .applyImplementation(twoPhaseAggregateWithoutDistinct())