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]

Reply via email to