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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 57113320bde [fix](planner) remove and retain input slot for aggregate 
slot which is not materialized (#33044)
57113320bde is described below

commit 57113320bde8b9581b9ac0783df2d7085a4c97a0
Author: xueweizhang <zxw520bl...@163.com>
AuthorDate: Fri Mar 29 19:39:16 2024 +0800

    [fix](planner) remove and retain input slot for aggregate slot which is not 
materialized (#33044)
    
    Signed-off-by: nextdreamblue <zxw520bl...@163.com>
---
 .../org/apache/doris/planner/AggregationNode.java  | 27 +++++++++-----
 .../test_inlineview_with_project.out               |  3 ++
 .../test_inlineview_with_project.groovy            | 41 ++++++++++++++++++++++
 3 files changed, 62 insertions(+), 9 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java
index b0a4fcf2db3..56683c79196 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/AggregationNode.java
@@ -363,16 +363,25 @@ public class AggregationNode extends PlanNode {
             if (!tupleDesc.getMaterializedSlots().isEmpty()) {
                 result.add(tupleDesc.getMaterializedSlots().get(0).getId());
             }
-        }
-        // if some input slot for aggregate slot which is not materialized, we 
need to remove it from the result
-        TupleDescriptor tupleDescriptor = aggInfo.getOutputTupleDesc();
-        ArrayList<SlotDescriptor>  slots = tupleDescriptor.getSlots();
-        for (SlotDescriptor slot : slots) {
-            if (!slot.isMaterialized()) {
-                List<SlotId> unRequestIds = Lists.newArrayList();
-                Expr.getIds(slot.getSourceExprs(), null, unRequestIds);
-                unRequestIds.forEach(result::remove);
+        } else {
+            // if some input slot for aggregate slot which is not 
materialized, we need to remove it from the result
+            TupleDescriptor tupleDescriptor = aggInfo.getOutputTupleDesc();
+            ArrayList<SlotDescriptor> slots = tupleDescriptor.getSlots();
+            Set<SlotId> allUnRequestIds = Sets.newHashSet();
+            Set<SlotId> allRequestIds = Sets.newHashSet();
+            for (SlotDescriptor slot : slots) {
+                if (!slot.isMaterialized()) {
+                    List<SlotId> unRequestIds = Lists.newArrayList();
+                    Expr.getIds(slot.getSourceExprs(), null, unRequestIds);
+                    allUnRequestIds.addAll(unRequestIds);
+                } else {
+                    List<SlotId> requestIds = Lists.newArrayList();
+                    Expr.getIds(slot.getSourceExprs(), null, requestIds);
+                    allRequestIds.addAll(requestIds);
+                }
             }
+            allRequestIds.forEach(allUnRequestIds::remove);
+            allUnRequestIds.forEach(result::remove);
         }
         return result;
     }
diff --git 
a/regression-test/data/correctness_p0/test_inlineview_with_project.out 
b/regression-test/data/correctness_p0/test_inlineview_with_project.out
index 20135da100a..fad0b3fe446 100644
--- a/regression-test/data/correctness_p0/test_inlineview_with_project.out
+++ b/regression-test/data/correctness_p0/test_inlineview_with_project.out
@@ -23,3 +23,6 @@
 2
 3
 
+-- !select5 --
+3
+
diff --git 
a/regression-test/suites/correctness_p0/test_inlineview_with_project.groovy 
b/regression-test/suites/correctness_p0/test_inlineview_with_project.groovy
index 8a70fb9e751..07d274ed1a1 100644
--- a/regression-test/suites/correctness_p0/test_inlineview_with_project.groovy
+++ b/regression-test/suites/correctness_p0/test_inlineview_with_project.groovy
@@ -562,6 +562,47 @@ suite("test_inlineview_with_project") {
         order by 1;
     """
 
+    qt_select5 """
+    select
+            count(*)
+        from
+            (
+                select
+                    random(),
+                    group_concat(cast(ga.column3 as varchar)) as column111
+                from
+                    (
+                        select
+                            t1.id as id,
+                            upper(t1.caseId) as column1,
+                            t1.content as column3
+                        from
+                            (
+                                select
+                                    id,
+                                    caseId,
+                                    content
+                                from
+                                    dr_user_test_t2
+                                limit
+                                    10
+                            ) t1
+                            left join (
+                                select
+                                    id,
+                                    caseId,
+                                    content
+                                from
+                                    dr_user_test_t2
+                                limit
+                                    10
+                            ) t2 on t1.id = t2.id
+                    ) as ga
+                group by
+                    lower(ga.column3)
+            ) as a;
+    """
+
     sql """DROP TABLE IF EXISTS `dr_user_test_t1`;"""
     sql """DROP TABLE IF EXISTS `dr_user_test_t2`;"""
 }


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

Reply via email to