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

englefly 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 8c117550287 [fix](nereids)support topn-filter for non pipeline engine 
#32397
8c117550287 is described below

commit 8c117550287a3bb9be75a287bde312b8577f878d
Author: minghong <[email protected]>
AuthorDate: Tue Mar 19 17:27:09 2024 +0800

    [fix](nereids)support topn-filter for non pipeline engine #32397
---
 .../src/main/java/org/apache/doris/qe/Coordinator.java     | 14 +++++++++++---
 regression-test/data/nereids_tpch_p0/tpch/topn-filter.out  |  4 ++++
 .../suites/nereids_tpch_p0/tpch/topn-filter.groovy         |  3 +++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
index 59983941446..9984889a3bb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java
@@ -3599,7 +3599,10 @@ public class Coordinator implements CoordInterface {
 
         List<TExecPlanFragmentParams> toThrift(int backendNum) {
             List<TExecPlanFragmentParams> paramsList = Lists.newArrayList();
-
+            Set<Integer> topnFilterSources = scanNodes.stream()
+                    .filter(scanNode -> scanNode instanceof OlapScanNode)
+                    .flatMap(scanNode -> ((OlapScanNode) 
scanNode).getTopnFilterSortNodes().stream())
+                    .map(sort -> 
sort.getId().asInt()).collect(Collectors.toSet());
             for (int i = 0; i < instanceExecParams.size(); ++i) {
                 final FInstanceExecParam instanceExecParam = 
instanceExecParams.get(i);
                 TExecPlanFragmentParams params = new TExecPlanFragmentParams();
@@ -3611,11 +3614,17 @@ public class Coordinator implements CoordInterface {
                 
params.setBuildHashTableForBroadcastJoin(instanceExecParam.buildHashTableForBroadcastJoin);
                 params.params.setQueryId(queryId);
                 
params.params.setFragmentInstanceId(instanceExecParam.instanceId);
+
                 Map<Integer, List<TScanRangeParams>> scanRanges = 
instanceExecParam.perNodeScanRanges;
                 if (scanRanges == null) {
                     scanRanges = Maps.newHashMap();
                 }
-
+                if (!topnFilterSources.isEmpty()) {
+                    // topn_filter_source_node_ids is used by nereids not by 
legacy planner.
+                    // if there is no topnFilterSources, do not set it.
+                    // topn_filter_source_node_ids=null means legacy planner
+                    params.params.topn_filter_source_node_ids = 
Lists.newArrayList(topnFilterSources);
+                }
                 params.params.setPerNodeScanRanges(scanRanges);
                 params.params.setPerExchNumSenders(perExchNumSenders);
 
@@ -3686,7 +3695,6 @@ public class Coordinator implements CoordInterface {
                                 rf.getFilterId().asInt(), rf.toThrift());
                     }
                 }
-
                 params.setFileScanParams(fileScanRangeParamsMap);
                 paramsList.add(params);
             }
diff --git a/regression-test/data/nereids_tpch_p0/tpch/topn-filter.out 
b/regression-test/data/nereids_tpch_p0/tpch/topn-filter.out
index be88d829f25..56ebfba87f0 100644
--- a/regression-test/data/nereids_tpch_p0/tpch/topn-filter.out
+++ b/regression-test/data/nereids_tpch_p0/tpch/topn-filter.out
@@ -27,3 +27,7 @@
 0      50
 1      47
 
+-- !groupingsets2 --
+0      50
+1      47
+
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 23e742fba15..14733d1303f 100644
--- a/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy
+++ b/regression-test/suites/nereids_tpch_p0/tpch/topn-filter.groovy
@@ -117,4 +117,7 @@ suite("topn-filter") {
 
     qt_groupingsets "select n_regionkey, sum(n_nationkey) from nation group by 
grouping sets((n_regionkey)) order by n_regionkey limit 2;"
 
+    sql "set enable_pipeline_engine=false;"
+    sql "set enable_pipeline_x_engine=false;"
+    qt_groupingsets2 "select n_regionkey, sum(n_nationkey) from nation group 
by grouping sets((n_regionkey)) order by n_regionkey limit 2;"
 }
\ No newline at end of file


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

Reply via email to