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]