This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new e137ae943b3 [fix](nereids) Not use rule 
FOUR_PHASE_AGGREGATE_WITH_DISTINCT_WITH_FULL_DISTRIBUTE when 
mustUseMultiDistinctAgg (#51099)
e137ae943b3 is described below

commit e137ae943b31c24830f4d69501ce932ef2fad2e4
Author: feiniaofeiafei <moail...@selectdb.com>
AuthorDate: Thu May 22 11:37:49 2025 +0800

    [fix](nereids) Not use rule 
FOUR_PHASE_AGGREGATE_WITH_DISTINCT_WITH_FULL_DISTRIBUTE when 
mustUseMultiDistinctAgg (#51099)
    
    ### What problem does this PR solve?
    
    Related PR: #35871
    
    Problem Summary:
    
    select
            
/*+SET_VAR(disable_nereids_rules='TWO_PHASE_AGGREGATE_SINGLE_DISTINCT_TO_MULTI')*/
            id,group_concat(distinct field2 order by field1)
            from agg_4_phase_tbl2
            group by id
    
    this sql will report error : VSlotRef a have invalid slot id. The
    group_concat argument field1 is not output by children, because when do
    local distinct agg, only output the group by key id and distinct slot
    field2.
    This pr will not perform
    FOUR_PHASE_AGGREGATE_WITH_DISTINCT_WITH_FULL_DISTRIBUTE rule when agg
    functions have group_concat with distinct and order by key.
---
 .../nereids/rules/implementation/AggregateStrategies.java      |  2 ++
 regression-test/suites/nereids_syntax_p0/agg_4_phase.groovy    | 10 ++++++++++
 2 files changed, 12 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
index 0a1b1c4e9b2..fa511631fc6 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/AggregateStrategies.java
@@ -62,6 +62,7 @@ import org.apache.doris.nereids.trees.plans.AggMode;
 import org.apache.doris.nereids.trees.plans.AggPhase;
 import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.algebra.Aggregate;
 import org.apache.doris.nereids.trees.plans.algebra.Project;
 import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
 import org.apache.doris.nereids.trees.plans.logical.LogicalFileScan;
@@ -421,6 +422,7 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
                         return couldConvertToMulti(agg);
                     })
                     .when(agg -> 
agg.supportAggregatePhase(AggregatePhase.FOUR))
+                    .whenNot(Aggregate::mustUseMultiDistinctAgg)
                     .thenApplyMulti(ctx -> {
                         Function<List<Expression>, RequireProperties> 
secondPhaseRequireGroupByAndDistinctHash =
                                 groupByAndDistinct -> RequireProperties.of(
diff --git a/regression-test/suites/nereids_syntax_p0/agg_4_phase.groovy 
b/regression-test/suites/nereids_syntax_p0/agg_4_phase.groovy
index ed69d0018c9..e2113ee7571 100644
--- a/regression-test/suites/nereids_syntax_p0/agg_4_phase.groovy
+++ b/regression-test/suites/nereids_syntax_p0/agg_4_phase.groovy
@@ -85,4 +85,14 @@ suite("agg_4_phase") {
         from agg_4_phase_tbl2
         group by id
         order by id"""
+
+    test {
+        sql """select
+        
/*+SET_VAR(disable_nereids_rules='TWO_PHASE_AGGREGATE_SINGLE_DISTINCT_TO_MULTI')*/
+        id,group_concat(distinct field2 order by field1)
+        from agg_4_phase_tbl2
+        group by id
+        """
+        exception """lowestCostPlans with physicalProperties(GATHER) doesn't 
exist in root group"""
+    }
 }


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

Reply via email to