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 db8344e1685 [fix](topn-filter) throw out of bound exception  when 
union has no child (#36469)
db8344e1685 is described below

commit db8344e168509c76762ad6388f1b3bb080babc33
Author: morrySnow <101034200+morrys...@users.noreply.github.com>
AuthorDate: Wed Jun 19 14:09:13 2024 +0800

    [fix](topn-filter) throw out of bound exception  when union has no child 
(#36469)
    
    introduced by #35405
---
 .../nereids/processor/post/TopnFilterPushDownVisitor.java      | 10 +++++++---
 regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy |  2 ++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopnFilterPushDownVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopnFilterPushDownVisitor.java
index 8c9792b6751..5691c701bf1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopnFilterPushDownVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopnFilterPushDownVisitor.java
@@ -52,7 +52,8 @@ import java.util.Map;
  * push down topn filter
  */
 public class TopnFilterPushDownVisitor extends PlanVisitor<Boolean, 
PushDownContext> {
-    private TopnFilterContext topnFilterContext;
+
+    private final TopnFilterContext topnFilterContext;
 
     public TopnFilterPushDownVisitor(TopnFilterContext topnFilterContext) {
         this.topnFilterContext = topnFilterContext;
@@ -109,10 +110,13 @@ public class TopnFilterPushDownVisitor extends 
PlanVisitor<Boolean, PushDownCont
     @Override
     public Boolean visitPhysicalSetOperation(
             PhysicalSetOperation setOperation, PushDownContext ctx) {
-        boolean pushedDown = pushDownFilterToSetOperatorChild(setOperation, 
ctx, 0);
+        boolean pushedDown = false;
+        if (setOperation.arity() > 0) {
+            pushedDown = pushDownFilterToSetOperatorChild(setOperation, ctx, 
0);
+        }
 
         if (setOperation instanceof Union) {
-            for (int i = 1; i < setOperation.children().size(); i++) {
+            for (int i = 1; i < setOperation.arity(); i++) {
                 // push down to the other children
                 pushedDown |= pushDownFilterToSetOperatorChild(setOperation, 
ctx, i);
             }
diff --git a/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy 
b/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy
index 617794e1988..9bee2140098 100644
--- a/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy
+++ b/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy
@@ -156,4 +156,6 @@ suite("topn-filter") {
     }
 
     qt_groupingsets2 "select n_regionkey, sum(n_nationkey) from nation group 
by grouping sets((n_regionkey)) order by n_regionkey limit 2;"
+
+    sql """select * from (select 1 as id union all select 2 as id) tmp order 
by id limit 100"""
 }
\ 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