This is an automated email from the ASF dual-hosted git repository.
panxiaolei 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 f931a29aa45 [fix](rf)Fix ColumnPredicate rf may not reset judge
(#58466)
f931a29aa45 is described below
commit f931a29aa458d75cebb2f1d812b48f9d2ab18982
Author: Mryange <[email protected]>
AuthorDate: Mon Dec 1 13:38:32 2025 +0800
[fix](rf)Fix ColumnPredicate rf may not reset judge (#58466)
Previously, if always_true() returned true, judge would not be reset.
it was reset inside do_judge_selectivity.
```
if (always_true()) {
return size;
}
uint16_t new_size = _evaluate_inner(column, sel, size);
if (_can_ignore()) {
do_judge_selectivity(size - new_size, size);
}
update_filter_info(size - new_size, size);
return new_size;
```
---
be/src/olap/column_predicate.h | 10 ++++++++--
be/src/olap/comparison_predicate.h | 1 +
be/src/olap/rowset/segment_v2/segment_iterator.cpp | 2 +-
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/be/src/olap/column_predicate.h b/be/src/olap/column_predicate.h
index a8db3a889b7..834f1843c2f 100644
--- a/be/src/olap/column_predicate.h
+++ b/be/src/olap/column_predicate.h
@@ -25,6 +25,7 @@
#include "olap/rowset/segment_v2/bloom_filter.h"
#include "olap/rowset/segment_v2/inverted_index_iterator.h"
#include "runtime/define_primitive_type.h"
+#include "util/defer_op.h"
#include "util/runtime_profile.h"
#include "vec/columns/column.h"
#include "vec/exec/format/parquet/parquet_predicate.h"
@@ -186,6 +187,8 @@ public:
// evaluate predicate on IColumn
// a short circuit eval way
uint16_t evaluate(const vectorized::IColumn& column, uint16_t* sel,
uint16_t size) const {
+ Defer defer([&] { try_reset_judge_selectivity(); });
+
if (always_true()) {
return size;
}
@@ -351,10 +354,13 @@ protected:
_judge_filter_rows = 0;
}
- void do_judge_selectivity(uint64_t filter_rows, uint64_t input_rows) const
{
- if ((_judge_counter--) == 0) {
+ void try_reset_judge_selectivity() const {
+ if (_can_ignore() && ((_judge_counter--) == 0)) {
reset_judge_selectivity();
}
+ }
+
+ void do_judge_selectivity(uint64_t filter_rows, uint64_t input_rows) const
{
if (!_always_true) {
_judge_filter_rows += filter_rows;
_judge_input_rows += input_rows;
diff --git a/be/src/olap/comparison_predicate.h
b/be/src/olap/comparison_predicate.h
index da7aad0abbf..b5456893644 100644
--- a/be/src/olap/comparison_predicate.h
+++ b/be/src/olap/comparison_predicate.h
@@ -417,6 +417,7 @@ public:
Defer defer([&]() {
update_filter_info(current_evaluated_rows - current_passed_rows,
current_evaluated_rows);
+ try_reset_judge_selectivity();
});
if (column.is_nullable()) {
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
index 8a83f856aa5..0997c4c18ba 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
@@ -2267,7 +2267,7 @@ uint16_t
SegmentIterator::_evaluate_vectorization_predicate(uint16_t* sel_rowid_
}
if (all_pred_always_true) {
for (const auto& pred : _pre_eval_block_predicate) {
- pred->always_true();
+ DCHECK(pred->always_true());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]