Skip to content

Commit daa1b6f

Browse files
branch-4.0: [fix](rf)Fix ColumnPredicate rf may not reset judge #58466 (#58558)
Cherry-picked from #58466 Co-authored-by: Mryange <[email protected]>
1 parent d02422d commit daa1b6f

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

be/src/olap/column_predicate.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "olap/rowset/segment_v2/bloom_filter.h"
2626
#include "olap/rowset/segment_v2/inverted_index_iterator.h"
2727
#include "runtime/define_primitive_type.h"
28+
#include "util/defer_op.h"
2829
#include "util/runtime_profile.h"
2930
#include "vec/columns/column.h"
3031
#include "vec/exprs/vruntimefilter_wrapper.h"
@@ -185,6 +186,8 @@ class ColumnPredicate {
185186
// evaluate predicate on IColumn
186187
// a short circuit eval way
187188
uint16_t evaluate(const vectorized::IColumn& column, uint16_t* sel, uint16_t size) const {
189+
Defer defer([&] { try_reset_judge_selectivity(); });
190+
188191
if (always_true()) {
189192
return size;
190193
}
@@ -330,10 +333,13 @@ class ColumnPredicate {
330333
_judge_filter_rows = 0;
331334
}
332335

333-
void do_judge_selectivity(uint64_t filter_rows, uint64_t input_rows) const {
334-
if ((_judge_counter--) == 0) {
336+
void try_reset_judge_selectivity() const {
337+
if (_can_ignore() && ((_judge_counter--) == 0)) {
335338
reset_judge_selectivity();
336339
}
340+
}
341+
342+
void do_judge_selectivity(uint64_t filter_rows, uint64_t input_rows) const {
337343
if (!_always_true) {
338344
_judge_filter_rows += filter_rows;
339345
_judge_input_rows += input_rows;

be/src/olap/comparison_predicate.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ class ComparisonPredicateBase : public ColumnPredicate {
286286
Defer defer([&]() {
287287
update_filter_info(current_evaluated_rows - current_passed_rows,
288288
current_evaluated_rows);
289+
try_reset_judge_selectivity();
289290
});
290291

291292
if (column.is_nullable()) {

be/src/olap/rowset/segment_v2/segment_iterator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2196,7 +2196,7 @@ uint16_t SegmentIterator::_evaluate_vectorization_predicate(uint16_t* sel_rowid_
21962196
}
21972197
if (all_pred_always_true) {
21982198
for (const auto& pred : _pre_eval_block_predicate) {
2199-
pred->always_true();
2199+
DCHECK(pred->always_true());
22002200
}
22012201
}
22022202

0 commit comments

Comments
 (0)