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 d0661006d1..3d4e8cb75f 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 @@ -3605,7 +3605,10 @@ public class Coordinator implements CoordInterface { List toThrift(int backendNum) { List paramsList = Lists.newArrayList(); - + Set 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(); @@ -3617,11 +3620,17 @@ public class Coordinator implements CoordInterface { params.setBuildHashTableForBroadcastJoin(instanceExecParam.buildHashTableForBroadcastJoin); params.params.setQueryId(queryId); params.params.setFragmentInstanceId(instanceExecParam.instanceId); + Map> 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); @@ -3692,7 +3701,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 be88d829f2..56ebfba87f 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 23e742fba1..14733d1303 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