This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new 9c268bcd3b6 branch-4.1: [refactor](be) Remove redundant remaining
conjunct roots #63525 (#63614)
9c268bcd3b6 is described below
commit 9c268bcd3b612de9ca2e47f4cac528ee5b8beb00
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue May 26 19:35:16 2026 +0800
branch-4.1: [refactor](be) Remove redundant remaining conjunct roots #63525
(#63614)
Cherry-picked from #63525
Co-authored-by: Jerry Hu <[email protected]>
---
be/src/exec/scan/olap_scanner.cpp | 12 ------------
be/src/storage/iterators.h | 2 --
be/src/storage/rowset/beta_rowset_reader.cpp | 1 -
be/src/storage/rowset/rowset_reader_context.h | 1 -
be/src/storage/segment/segment_iterator.cpp | 26 +++++++-------------------
be/src/storage/segment/segment_iterator.h | 4 +---
be/src/storage/tablet/tablet_reader.cpp | 1 -
be/src/storage/tablet/tablet_reader.h | 1 -
8 files changed, 8 insertions(+), 40 deletions(-)
diff --git a/be/src/exec/scan/olap_scanner.cpp
b/be/src/exec/scan/olap_scanner.cpp
index 2fab478562f..ee20194c21a 100644
--- a/be/src/exec/scan/olap_scanner.cpp
+++ b/be/src/exec/scan/olap_scanner.cpp
@@ -84,7 +84,6 @@ OlapScanner::OlapScanner(ScanLocalStateBase* parent,
OlapScanner::Params&& param
.rs_splits {},
.return_columns {},
.output_columns {},
- .remaining_conjunct_roots {},
.common_expr_ctxs_push_down {},
.topn_filter_source_node_ids {},
.filter_block_conjuncts {},
@@ -309,17 +308,6 @@ Status OlapScanner::_init_tablet_reader_params(
_tablet_reader_params.reader_type = ReaderType::READER_QUERY;
_tablet_reader_params.push_down_agg_type_opt =
_local_state->get_push_down_agg_type();
- // TODO: If a new runtime filter arrives after `_conjuncts` move to
`_common_expr_ctxs_push_down`,
- if (_common_expr_ctxs_push_down.empty()) {
- for (auto& conjunct : _conjuncts) {
-
_tablet_reader_params.remaining_conjunct_roots.emplace_back(conjunct->root());
- }
- } else {
- for (auto& ctx : _common_expr_ctxs_push_down) {
-
_tablet_reader_params.remaining_conjunct_roots.emplace_back(ctx->root());
- }
- }
-
_tablet_reader_params.common_expr_ctxs_push_down =
_common_expr_ctxs_push_down;
_tablet_reader_params.virtual_column_exprs = _virtual_column_exprs;
_tablet_reader_params.vir_cid_to_idx_in_block = _vir_cid_to_idx_in_block;
diff --git a/be/src/storage/iterators.h b/be/src/storage/iterators.h
index 1c9b5518743..d0cb859627b 100644
--- a/be/src/storage/iterators.h
+++ b/be/src/storage/iterators.h
@@ -124,8 +124,6 @@ public:
// columns for orderby keys
std::vector<uint32_t>* read_orderby_key_columns = nullptr;
io::IOContext io_ctx;
- VExpr* remaining_vconjunct_root = nullptr;
- std::vector<VExprSPtr> remaining_conjunct_roots;
VExprContextSPtrs common_expr_ctxs_push_down;
const std::set<int32_t>* output_columns = nullptr;
// runtime state
diff --git a/be/src/storage/rowset/beta_rowset_reader.cpp
b/be/src/storage/rowset/beta_rowset_reader.cpp
index 94b76272a10..0bd6a810138 100644
--- a/be/src/storage/rowset/beta_rowset_reader.cpp
+++ b/be/src/storage/rowset/beta_rowset_reader.cpp
@@ -100,7 +100,6 @@ Status
BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context
_read_options.preferred_block_size_bytes =
read_context->preferred_block_size_bytes;
_read_options.stats = _stats;
_read_options.push_down_agg_type_opt =
_read_context->push_down_agg_type_opt;
- _read_options.remaining_conjunct_roots =
_read_context->remaining_conjunct_roots;
_read_options.common_expr_ctxs_push_down =
_read_context->common_expr_ctxs_push_down;
_read_options.virtual_column_exprs = _read_context->virtual_column_exprs;
diff --git a/be/src/storage/rowset/rowset_reader_context.h
b/be/src/storage/rowset/rowset_reader_context.h
index c54a39f0a55..066c5890af0 100644
--- a/be/src/storage/rowset/rowset_reader_context.h
+++ b/be/src/storage/rowset/rowset_reader_context.h
@@ -68,7 +68,6 @@ struct RowsetReaderContext {
const DeleteHandler* delete_handler = nullptr;
OlapReaderStatistics* stats = nullptr;
RuntimeState* runtime_state = nullptr;
- std::vector<VExprSPtr> remaining_conjunct_roots;
VExprContextSPtrs common_expr_ctxs_push_down;
bool use_page_cache = false;
int sequence_id_idx = -1;
diff --git a/be/src/storage/segment/segment_iterator.cpp
b/be/src/storage/segment/segment_iterator.cpp
index e98535fcdb5..3d542307318 100644
--- a/be/src/storage/segment/segment_iterator.cpp
+++ b/be/src/storage/segment/segment_iterator.cpp
@@ -119,8 +119,7 @@ SegmentIterator::~SegmentIterator() = default;
void SegmentIterator::_init_row_bitmap_by_condition_cache() {
// Only dispose need column predicate and expr cal in condition cache
- if (!_col_predicates.empty() ||
- (_enable_common_expr_pushdown && !_remaining_conjunct_roots.empty())) {
+ if (!_col_predicates.empty() || !_common_expr_ctxs_push_down.empty()) {
if (_opts.condition_cache_digest) {
auto* condition_cache = ConditionCache::instance();
ConditionCache::CacheKey cache_key(_opts.rowset_id, _segment->id(),
@@ -407,8 +406,6 @@ Status SegmentIterator::_init_impl(const
StorageReadOptions& opts) {
_initial_block_row_max = _opts.block_row_max;
_block_size_predictor = _make_block_size_predictor();
- _remaining_conjunct_roots = opts.remaining_conjunct_roots;
-
if (_schema->rowid_col_idx() > 0) {
_record_rowids = true;
}
@@ -463,7 +460,6 @@ Status SegmentIterator::_init_impl(const
StorageReadOptions& opts) {
RETURN_IF_ERROR(init_iterators());
RETURN_IF_ERROR(_construct_compound_expr_context());
- _enable_common_expr_pushdown = !_common_expr_ctxs_push_down.empty();
VLOG_DEBUG << fmt::format(
"Segment iterator init, virtual_column_exprs size: {}, "
"_vir_cid_to_idx_in_block size: {}, common_expr_pushdown size: {}",
@@ -480,7 +476,7 @@ void SegmentIterator::_initialize_predicate_results() {
_column_predicate_index_exec_status[cid][pred] = false;
}
- _calculate_expr_in_remaining_conjunct_root();
+ _calculate_common_expr_index_exec_status();
}
Status SegmentIterator::init_iterators() {
@@ -812,12 +808,6 @@ Status
SegmentIterator::_get_row_ranges_by_column_conditions() {
(*it)->root().get());
if (result != nullptr) {
_row_bitmap &= *result->get_data_bitmap();
- auto root = (*it)->root();
- auto iter_find =
std::find(_remaining_conjunct_roots.begin(),
-
_remaining_conjunct_roots.end(), root);
- if (iter_find != _remaining_conjunct_roots.end()) {
- _remaining_conjunct_roots.erase(iter_find);
- }
it = _common_expr_ctxs_push_down.erase(it);
}
} else {
@@ -1276,8 +1266,6 @@ Status SegmentIterator::_apply_index_expr() {
++it;
}
}
- // TODOļ¼Do we need to remove these expr root from
_remaining_conjunct_roots?
-
return Status::OK();
}
@@ -1943,9 +1931,9 @@ Status SegmentIterator::_vec_init_lazy_materialization() {
// Step2: extract columns that can execute expr context
_is_common_expr_column.resize(_schema->columns().size(), false);
- if (_enable_common_expr_pushdown && !_remaining_conjunct_roots.empty()) {
- for (auto expr : _remaining_conjunct_roots) {
- RETURN_IF_ERROR(_extract_common_expr_columns(expr));
+ if (!_common_expr_ctxs_push_down.empty()) {
+ for (const auto& expr_ctx : _common_expr_ctxs_push_down) {
+ RETURN_IF_ERROR(_extract_common_expr_columns(expr_ctx->root()));
}
if (!_common_expr_columns.empty()) {
_is_need_expr_eval = true;
@@ -2934,7 +2922,7 @@ Status SegmentIterator::_process_common_expr(uint16_t*
sel_rowid_idx, uint16_t&
Status SegmentIterator::_execute_common_expr(uint16_t* sel_rowid_idx,
uint16_t& selected_size,
Block* block) {
SCOPED_RAW_TIMER(&_opts.stats->expr_filter_ns);
- DCHECK(!_remaining_conjunct_roots.empty());
+ DCHECK(!_common_expr_ctxs_push_down.empty());
DCHECK(block->rows() != 0);
int prev_columns = block->columns();
uint16_t original_size = selected_size;
@@ -3129,7 +3117,7 @@ Status
SegmentIterator::_construct_compound_expr_context() {
return Status::OK();
}
-void SegmentIterator::_calculate_expr_in_remaining_conjunct_root() {
+void SegmentIterator::_calculate_common_expr_index_exec_status() {
for (const auto& root_expr_ctx : _common_expr_ctxs_push_down) {
const auto& root_expr = root_expr_ctx->root();
if (root_expr == nullptr) {
diff --git a/be/src/storage/segment/segment_iterator.h
b/be/src/storage/segment/segment_iterator.h
index 1d804eb106b..f6fed55df2f 100644
--- a/be/src/storage/segment/segment_iterator.h
+++ b/be/src/storage/segment/segment_iterator.h
@@ -325,7 +325,7 @@ private:
bool _check_all_conditions_passed_inverted_index_for_column(ColumnId cid,
bool
default_return = false);
- void _calculate_expr_in_remaining_conjunct_root();
+ void _calculate_common_expr_index_exec_status();
Status _process_eof(Block* block);
@@ -418,8 +418,6 @@ private:
// make a copy of `_opts.column_predicates` in order to make local changes
std::vector<std::shared_ptr<ColumnPredicate>> _col_predicates;
VExprContextSPtrs _common_expr_ctxs_push_down;
- bool _enable_common_expr_pushdown = false;
- std::vector<VExprSPtr> _remaining_conjunct_roots;
std::set<ColumnId> _not_apply_index_pred;
// row schema of the key to seek
diff --git a/be/src/storage/tablet/tablet_reader.cpp
b/be/src/storage/tablet/tablet_reader.cpp
index dc470525431..4acf3a6016a 100644
--- a/be/src/storage/tablet/tablet_reader.cpp
+++ b/be/src/storage/tablet/tablet_reader.cpp
@@ -182,7 +182,6 @@ Status TabletReader::_capture_rs_readers(const
ReaderParams& read_params) {
_reader_context.record_rowids = read_params.record_rowids;
_reader_context.rowid_conversion = read_params.rowid_conversion;
_reader_context.is_key_column_group = read_params.is_key_column_group;
- _reader_context.remaining_conjunct_roots =
read_params.remaining_conjunct_roots;
_reader_context.common_expr_ctxs_push_down =
read_params.common_expr_ctxs_push_down;
_reader_context.output_columns = &read_params.output_columns;
_reader_context.push_down_agg_type_opt =
read_params.push_down_agg_type_opt;
diff --git a/be/src/storage/tablet/tablet_reader.h
b/be/src/storage/tablet/tablet_reader.h
index 43da5879874..becc351019a 100644
--- a/be/src/storage/tablet/tablet_reader.h
+++ b/be/src/storage/tablet/tablet_reader.h
@@ -166,7 +166,6 @@ public:
std::vector<ColumnId>* origin_return_columns = nullptr;
std::unordered_set<uint32_t>* tablet_columns_convert_to_null_set =
nullptr;
TPushAggOp::type push_down_agg_type_opt = TPushAggOp::NONE;
- std::vector<VExprSPtr> remaining_conjunct_roots;
VExprContextSPtrs common_expr_ctxs_push_down;
// used for compaction to record row ids
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]