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

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new eb6a5f884e0 branch-2.1: [fix](Nereids) not process must shuffle when 
regulate cannot be banned agg #52827 (#53265)
eb6a5f884e0 is described below

commit eb6a5f884e032b188757a50f0bb95932690b5315
Author: morrySnow <[email protected]>
AuthorDate: Thu Jul 17 11:34:05 2025 +0800

    branch-2.1: [fix](Nereids) not process must shuffle when regulate cannot be 
banned agg #52827 (#53265)
    
    picked from #52827
---
 .../properties/ChildrenPropertiesRegulator.java       |   6 ++----
 .../doris/nereids/rules/analysis/CheckAnalysis.java   |  13 ++++++++-----
 .../rules/implementation/AggregateStrategies.java     |  10 ++++++----
 .../data/query_p0/group_concat/test_group_concat.out  | Bin 1132 -> 1158 bytes
 .../query_p0/group_concat/test_group_concat.groovy    |  13 +++++++++++++
 5 files changed, 29 insertions(+), 13 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
index f4327d86b21..cce7f630457 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildrenPropertiesRegulator.java
@@ -109,7 +109,7 @@ public class ChildrenPropertiesRegulator extends 
PlanVisitor<Boolean, Void> {
             return false;
         }
         if (!agg.getAggregateParam().canBeBanned) {
-            return true;
+            return visit(agg, context);
         }
         // forbid one phase agg on distribute
         if (agg.getAggMode() == AggMode.INPUT_TO_RESULT && 
children.get(0).getPlan() instanceof PhysicalDistribute) {
@@ -175,9 +175,7 @@ public class ChildrenPropertiesRegulator extends 
PlanVisitor<Boolean, Void> {
             }
         }
         // process must shuffle
-        visit(agg, context);
-        // process agg
-        return true;
+        return visit(agg, context);
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java
index 7ca8637446b..ae7bb232e83 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.OrderExpression;
 import org.apache.doris.nereids.trees.expressions.WindowExpression;
 import 
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
+import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
 import 
org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
 import 
org.apache.doris.nereids.trees.expressions.functions.scalar.GroupingScalarFunction;
 import org.apache.doris.nereids.trees.expressions.typecoercion.TypeCheckResult;
@@ -148,11 +149,13 @@ public class CheckAnalysis implements AnalysisRuleFactory 
{
             if (func.arity() <= 1) {
                 continue;
             }
-            for (int i = 1; i < func.arity(); i++) {
-                if (!func.child(i).getInputSlots().isEmpty() && 
!(func.child(i) instanceof OrderExpression)) {
-                    // think about group_concat(distinct col_1, ',')
-                    distinctMultiColumns = true;
-                    break;
+            if (func instanceof Count) {
+                for (int i = 1; i < func.arity(); i++) {
+                    if (!func.child(i).getInputSlots().isEmpty() && 
!(func.child(i) instanceof OrderExpression)) {
+                        // think about group_concat(distinct col_1, ',')
+                        distinctMultiColumns = true;
+                        break;
+                    }
                 }
             }
             if (distinctMultiColumns) {
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 3f690ad3c3a..8660034a2b5 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
@@ -2048,10 +2048,12 @@ public class AggregateStrategies implements 
ImplementationRuleFactory {
             if (func.arity() <= 1) {
                 continue;
             }
-            for (int i = 1; i < func.arity(); i++) {
-                // think about group_concat(distinct col_1, ',')
-                if (!(func.child(i) instanceof OrderExpression) && 
!func.child(i).getInputSlots().isEmpty()) {
-                    return false;
+            if (func instanceof Count) {
+                for (int i = 1; i < func.arity(); i++) {
+                    // think about group_concat(distinct col_1, ',')
+                    if (!(func.child(i) instanceof OrderExpression) && 
!func.child(i).getInputSlots().isEmpty()) {
+                        return false;
+                    }
                 }
             }
         }
diff --git a/regression-test/data/query_p0/group_concat/test_group_concat.out 
b/regression-test/data/query_p0/group_concat/test_group_concat.out
index d01900ef88b..3065713cf55 100644
Binary files a/regression-test/data/query_p0/group_concat/test_group_concat.out 
and b/regression-test/data/query_p0/group_concat/test_group_concat.out differ
diff --git 
a/regression-test/suites/query_p0/group_concat/test_group_concat.groovy 
b/regression-test/suites/query_p0/group_concat/test_group_concat.groovy
index 522d66ed64b..57056c7318d 100644
--- a/regression-test/suites/query_p0/group_concat/test_group_concat.groovy
+++ b/regression-test/suites/query_p0/group_concat/test_group_concat.groovy
@@ -16,6 +16,9 @@
 // under the License.
 
 suite("test_group_concat", "query,p0,arrow_flight_sql") {
+
+    sql "set enable_fallback_to_original_planner=false"
+
     qt_select """
                 SELECT group_concat(k6) FROM test_query_db.test where 
k6='false'
               """
@@ -79,6 +82,16 @@ suite("test_group_concat", "query,p0,arrow_flight_sql") {
                 b2;
               """
 
+    // test SPLIT_MULTI_DISTINCT could work right with can not be banned 
aggregation
+    qt_select_13 """
+                select
+                group_concat( distinct b1, cast(b2 as varchar)), group_concat( 
distinct b3, '?')
+                from
+                table_group_concat
+                group by 
+                b2;
+              """
+
     sql """ drop table table_group_concat """
     sql """create table table_group_concat ( b1 varchar(10) not null, b2 int 
not null, b3 varchar(10) not null )
             ENGINE=OLAP


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to