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 d379b04b39 [fix](planner) fix bug of push conjuncts through second 
phase agg (#22417)
d379b04b39 is described below

commit d379b04b3989c81c14d36d3909871d86f8e4baa2
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Fri Aug 4 15:21:18 2023 +0800

    [fix](planner) fix bug of push conjuncts through second phase agg (#22417)
    
    If there is a second phase agg, the output of the 1st phase agg is its 
intermediate tuple not the output tuple.
    This pr fix it
---
 .../java/org/apache/doris/planner/SingleNodePlanner.java   | 13 +++++++++++--
 .../suites/correctness_p0/test_distinct_agg.groovy         | 14 ++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
index 3bce97a0c4..7cc6ae7cd2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java
@@ -2687,7 +2687,12 @@ public class SingleNodePlanner {
         if (aggregateInfo == null || 
aggregateInfo.getGroupingExprs().isEmpty()) {
             return;
         }
-        final List<Expr> predicates = getBoundPredicates(analyzer, 
aggregateInfo.getOutputTupleDesc());
+        // The output of the 1st phase agg is the 1st phase intermediate.
+        // see createSecondPhaseAggInfo method
+        final List<Expr> predicates = getBoundPredicates(analyzer,
+                aggregateInfo.getSecondPhaseDistinctAggInfo() != null
+                        ? aggregateInfo.getIntermediateTupleDesc()
+                        : aggregateInfo.getOutputTupleDesc());
         if (predicates.isEmpty()) {
             return;
         }
@@ -2713,7 +2718,11 @@ public class SingleNodePlanner {
         }
         final AggregateInfo secondPhaseAggInfo = 
firstPhaseAggInfo.getSecondPhaseDistinctAggInfo();
 
-        final List<TupleId> firstPhaseTupleIds = 
Lists.newArrayList(firstPhaseAggInfo.getOutputTupleId());
+        // The output of the 1st phase agg is the 1st phase intermediate.
+        // see createSecondPhaseAggInfo method
+        final List<TupleId> firstPhaseTupleIds = Lists.newArrayList(
+                secondPhaseAggInfo != null ? 
firstPhaseAggInfo.getIntermediateTupleId()
+                        : firstPhaseAggInfo.getOutputTupleId());
         pushDownPredicatesPastAggregationOnePhase(secondPhaseAggInfo, 
analyzer, stmt, firstPhaseTupleIds);
         pushDownPredicatesPastAggregationOnePhase(firstPhaseAggInfo, analyzer, 
stmt, stmt.getTableRefIds());
     }
diff --git a/regression-test/suites/correctness_p0/test_distinct_agg.groovy 
b/regression-test/suites/correctness_p0/test_distinct_agg.groovy
index 8c80c9f184..ea2cd1f4a4 100644
--- a/regression-test/suites/correctness_p0/test_distinct_agg.groovy
+++ b/regression-test/suites/correctness_p0/test_distinct_agg.groovy
@@ -55,4 +55,18 @@ suite("test_distinct_agg") {
         '''
         result([['1', '2023-01-10', 1L]])
     }
+
+    sql '''SELECT `b`.`dt` AS `dt`
+            FROM 
+                (SELECT `dt`AS `dt`,
+                    count(DISTINCT `role_id`) AS `pay_role`,
+                    avg(`cost`) AS `avg_cost`
+                FROM 
+                    (SELECT `k6` AS `dt`,
+                    `k1` AS `role_id`,
+                    sum(CAST(`k2` AS INT)) AS `cost`
+                    FROM `t`
+                    GROUP BY  `dt`, `role_id`) a
+                    GROUP BY  `dt`) b 
+                WHERE `dt` = '2023-06-18';'''
 }
\ No newline at end of file


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

Reply via email to