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

starocean999 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 00c30f075ff [fix](nereids)only push down subquery in non-window agg 
functions (#26034)
00c30f075ff is described below

commit 00c30f075ffdde6c7232dec7019fcf12bbe724f8
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Mon Oct 30 11:32:10 2023 +0800

    [fix](nereids)only push down subquery in non-window agg functions (#26034)
---
 .../doris/nereids/rules/analysis/NormalizeAggregate.java | 14 +++++++-------
 .../nereids_p0/subquery/test_subquery_in_project.out     | 12 ++++++++++++
 .../nereids_p0/subquery/test_subquery_in_project.groovy  | 16 ++++++++++++++--
 3 files changed, 33 insertions(+), 9 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeAggregate.java
index 0acd366f1c2..203a7f09690 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeAggregate.java
@@ -104,11 +104,13 @@ public class NormalizeAggregate extends 
OneRewriteRuleFactory implements Normali
 
             List<NamedExpression> aggregateOutput = 
aggregate.getOutputExpressions();
             Set<Alias> existsAlias = 
ExpressionUtils.mutableCollect(aggregateOutput, Alias.class::isInstance);
-            // we need push down subquery exprs in side non-distinct agg 
functions
-            Set<SubqueryExpr> subqueryExprs = ExpressionUtils.mutableCollect(
-                    
Lists.newArrayList(ExpressionUtils.mutableCollect(aggregateOutput,
-                            expr -> expr instanceof AggregateFunction
-                                    && !((AggregateFunction) 
expr).isDistinct())),
+
+            List<AggregateFunction> aggFuncs = Lists.newArrayList();
+            aggregateOutput.forEach(o -> 
o.accept(CollectNonWindowedAggFuncs.INSTANCE, aggFuncs));
+
+            // we need push down subquery exprs inside non-window and 
non-distinct agg functions
+            Set<SubqueryExpr> subqueryExprs = 
ExpressionUtils.mutableCollect(aggFuncs.stream()
+                    .filter(aggFunc -> 
!aggFunc.isDistinct()).collect(Collectors.toList()),
                     SubqueryExpr.class::isInstance);
             Set<Expression> groupingByExprs = 
ImmutableSet.copyOf(aggregate.getGroupByExpressions());
             NormalizeToSlotContext bottomSlotContext =
@@ -116,8 +118,6 @@ public class NormalizeAggregate extends 
OneRewriteRuleFactory implements Normali
             Set<NamedExpression> bottomOutputs =
                     
bottomSlotContext.pushDownToNamedExpression(Sets.union(groupingByExprs, 
subqueryExprs));
 
-            List<AggregateFunction> aggFuncs = Lists.newArrayList();
-            aggregateOutput.forEach(o -> 
o.accept(CollectNonWindowedAggFuncs.INSTANCE, aggFuncs));
             // use group by context to normalize agg functions to process
             //   sql like: select sum(a + 1) from t group by a + 1
             //
diff --git 
a/regression-test/data/nereids_p0/subquery/test_subquery_in_project.out 
b/regression-test/data/nereids_p0/subquery/test_subquery_in_project.out
index 4d8bd4c7361..c0d289b51fb 100644
--- a/regression-test/data/nereids_p0/subquery/test_subquery_in_project.out
+++ b/regression-test/data/nereids_p0/subquery/test_subquery_in_project.out
@@ -54,3 +54,15 @@ true
 -- !sql16 --
 12
 
+-- !sql17 --
+12
+12
+
+-- !sql18 --
+12
+12
+
+-- !sql20 --
+5
+7
+
diff --git 
a/regression-test/suites/nereids_p0/subquery/test_subquery_in_project.groovy 
b/regression-test/suites/nereids_p0/subquery/test_subquery_in_project.groovy
index b9de14e530b..25920848c6d 100644
--- a/regression-test/suites/nereids_p0/subquery/test_subquery_in_project.groovy
+++ b/regression-test/suites/nereids_p0/subquery/test_subquery_in_project.groovy
@@ -117,11 +117,23 @@ suite("test_subquery_in_project") {
     """
 
     qt_sql15 """
-        select sum(age + (select sum(age) from test_sql)) from test_sql;
+        select sum(age + (select sum(age) from test_sql)) from test_sql order 
by 1;
     """
 
     qt_sql16 """
-        select sum(distinct age + (select sum(age) from test_sql)) from 
test_sql;
+        select sum(distinct age + (select sum(age) from test_sql)) from 
test_sql order by 1;
+    """
+
+    qt_sql17 """
+        select sum(age + (select sum(age) from test_sql)) over() from test_sql 
order by 1;
+    """
+
+    qt_sql18 """
+        select sum(age + (select sum(age) from test_sql)) over() from test_sql 
group by dt, age order by 1;
+    """
+
+    qt_sql20 """
+        select sum(age + (select sum(age) from test_sql)) from test_sql group 
by dt, age order by 1;
     """
 
     sql """drop table if exists test_sql;"""


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

Reply via email to