morrySnow commented on code in PR #12159:
URL: https://github.com/apache/doris/pull/12159#discussion_r965606605


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggregateFunction.java:
##########
@@ -25,13 +25,24 @@
 public abstract class AggregateFunction extends BoundFunction {
 
     private DataType intermediate;
+    private final boolean isDistinct;

Review Comment:
   need overload equals and hashcode and add ut to ExpressionEqualsTest



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalAggregate.java:
##########
@@ -57,24 +57,32 @@
     private final List<NamedExpression> outputExpressions;
     private final AggPhase aggPhase;
 
+    // use for scenes containing distinct agg
+    // 1. If there are LOCAL and GLOBAL phases, global is the final phase
+    // 2. If there are LOCAL, GLOBAL and DISTINCT_LOCAL phases, DISTINCT_LOCAL 
is the final phase
+    // 3. If there are LOCAL, GLOBAL, DISTINCT_LOCAL, DISTINCT_GLOBAL phases,
+    // DISTINCT_GLOBAL is the final phase
+    private final boolean isFinalPhase;
+
     /**
      * Desc: Constructor for LogicalAggregate.
      */
     public LogicalAggregate(
             List<Expression> groupByExpressions,
             List<NamedExpression> outputExpressions,
             CHILD_TYPE child) {
-        this(groupByExpressions, outputExpressions, false, false, 
AggPhase.GLOBAL, child);
+        this(groupByExpressions, outputExpressions, false, false, false, 
AggPhase.GLOBAL, child);

Review Comment:
   i think the default of finalize should be true and aggphase should set to 
local to support one stage aggregate 



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/properties/RequestPropertyDeriver.java:
##########
@@ -82,14 +83,17 @@ public Void visitPhysicalAggregate(PhysicalAggregate<? 
extends Plan> agg, PlanCo
             addToRequestPropertyToChildren(PhysicalProperties.ANY);
             return null;
         }
-
+        //  EXCHANGE NODE does not need to be generated between DISTINCT_LOCAL 
and GLOBAL
+        if (agg.getAggPhase() == AggPhase.DISTINCT_LOCAL) {
+            addToRequestPropertyToChildren(PhysicalProperties.ANY);

Review Comment:
   we should set the request what the DISTINCT_LOCAL agg want to. in later 
stage if the missing enforce helper found that the GLOBAL agg's distribute 
satisfy the DISTINCT_LOCAL agg, no exchange node will be added



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalAggToPhysicalHashAgg.java:
##########
@@ -36,6 +36,7 @@ public Rule build() {
                 ImmutableList.of(),
                 agg.getAggPhase(),
                 false,
+                agg.isFinalPhase(),

Review Comment:
   👍🏻



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to