From e46b6093e0a831ecb5f49400b3c98e86cc79ee3f Mon Sep 17 00:00:00 2001 From: Mryange Date: Fri, 29 May 2026 18:21:25 +0800 Subject: [PATCH] upd --- be/src/exec/operator/sort_sink_operator.cpp | 9 +++++++-- be/src/runtime/runtime_predicate.h | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/be/src/exec/operator/sort_sink_operator.cpp b/be/src/exec/operator/sort_sink_operator.cpp index 9b045da6d8c392..55406ed1b5a32c 100644 --- a/be/src/exec/operator/sort_sink_operator.cpp +++ b/be/src/exec/operator/sort_sink_operator.cpp @@ -51,10 +51,15 @@ Status SortSinkLocalState::open(RuntimeState* state) { } switch (p._algorithm) { case TSortAlgorithm::HEAP_SORT: { + bool disable_local_topn_filter = false; + if (state->get_query_ctx()->has_runtime_predicate(p._node_id)) { + disable_local_topn_filter = + state->get_query_ctx()->get_runtime_predicate(p._node_id) + .all_targets_are_slot(); + } _shared_state->sorter = HeapSorter::create_shared( _ordering_expr_ctxs, state, p._limit, p._offset, p._pool, p._is_asc_order, - p._nulls_first, p._child->row_desc(), - state->get_query_ctx()->has_runtime_predicate(p._node_id)); + p._nulls_first, p._child->row_desc(), disable_local_topn_filter); break; } case TSortAlgorithm::TOPN_SORT: { diff --git a/be/src/runtime/runtime_predicate.h b/be/src/runtime/runtime_predicate.h index a56cf7efbe7404..8ad26e7cb22e0d 100644 --- a/be/src/runtime/runtime_predicate.h +++ b/be/src/runtime/runtime_predicate.h @@ -17,6 +17,7 @@ #pragma once +#include #include #include #include @@ -90,6 +91,13 @@ class RuntimePredicate { return _contexts.find(target_node_id)->second.target_is_slot(); } + bool all_targets_are_slot() const { + std::shared_lock rlock(_rwlock); + return std::ranges::all_of(_contexts, [](const auto& entry) { + return entry.second.target_is_slot(); + }); + } + const TExpr& get_texpr(int32_t target_node_id) const { check_target_node_id(target_node_id); return _contexts.find(target_node_id)->second.expr;