This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
     new 8a5d9f587a [fix](storage) Convert dict columns in 
delete_condition_predicates (#11754) (#11767)
8a5d9f587a is described below

commit 8a5d9f587a91a61ae9b5217de44c208425f3d894
Author: Jerry Hu <[email protected]>
AuthorDate: Mon Aug 15 17:52:52 2022 +0800

    [fix](storage) Convert dict columns in delete_condition_predicates (#11754) 
(#11767)
    
    convert dictionary code for delete predicates.
---
 be/src/olap/block_column_predicate.h               | 62 +++++++++++++++-------
 be/src/olap/rowset/segment_v2/segment_iterator.cpp | 12 +++++
 2 files changed, 54 insertions(+), 20 deletions(-)

diff --git a/be/src/olap/block_column_predicate.h 
b/be/src/olap/block_column_predicate.h
index 6f679dbf25..466f67a7c7 100644
--- a/be/src/olap/block_column_predicate.h
+++ b/be/src/olap/block_column_predicate.h
@@ -44,16 +44,22 @@ public:
 
     virtual void get_all_column_ids(std::set<ColumnId>& column_id_set) const = 
0;
 
-    virtual void evaluate(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t* selected_size) const {};
-    virtual void evaluate_and(vectorized::MutableColumns& block, uint16_t* 
sel, uint16_t selected_size, bool* flags) const {};
-    virtual void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const {};
- 
-    virtual void evaluate_vec(vectorized::MutableColumns& block, uint16_t 
size, bool* flags) const {};
+    virtual void get_all_column_predicates(std::set<const ColumnPredicate*>&) 
const = 0;
+
+    virtual void evaluate(vectorized::MutableColumns& block, uint16_t* sel,
+                          uint16_t* selected_size) const {};
+    virtual void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel,
+                              uint16_t selected_size, bool* flags) const {};
+    virtual void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel,
+                             uint16_t selected_size, bool* flags) const {};
+
+    virtual void evaluate_vec(vectorized::MutableColumns& block, uint16_t size,
+                              bool* flags) const {};
 };
 
 class SingleColumnBlockPredicate : public BlockColumnPredicate {
 public:
-    explicit SingleColumnBlockPredicate(const ColumnPredicate* 
pre):_predicate(pre) {};
+    explicit SingleColumnBlockPredicate(const ColumnPredicate* pre) : 
_predicate(pre) {};
 
     void evaluate(RowBlockV2* block, uint16_t* selected_size) const override;
     void evaluate_and(RowBlockV2* block, uint16_t selected_size, bool* flags) 
const override;
@@ -63,10 +69,17 @@ public:
         column_id_set.insert(_predicate->column_id());
     };
 
-    void evaluate(vectorized::MutableColumns& block, uint16_t* sel, uint16_t* 
selected_size) const override;
-    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
-    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
- 
+    void get_all_column_predicates(std::set<const ColumnPredicate*>& 
predicates) const override {
+        predicates.insert(_predicate);
+    }
+
+    void evaluate(vectorized::MutableColumns& block, uint16_t* sel,
+                  uint16_t* selected_size) const override;
+    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                      bool* flags) const override;
+    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                     bool* flags) const override;
+
     void evaluate_vec(vectorized::MutableColumns& block, uint16_t size, bool* 
flags) const override;
 
 private:
@@ -87,9 +100,7 @@ public:
         _block_column_predicate_vec.push_back(column_predicate);
     }
 
-    size_t num_of_column_predicate() const {
-        return _block_column_predicate_vec.size();
-    }
+    size_t num_of_column_predicate() const { return 
_block_column_predicate_vec.size(); }
 
     void get_all_column_ids(std::set<ColumnId>& column_id_set) const override {
         for (auto child_block_predicate : _block_column_predicate_vec) {
@@ -97,6 +108,12 @@ public:
         }
     };
 
+    void get_all_column_predicates(std::set<const ColumnPredicate*>& 
predicates) const override {
+        for (auto child_block_predicate : _block_column_predicate_vec) {
+            child_block_predicate->get_all_column_predicates(predicates);
+        }
+    }
+
 protected:
     std::vector<const BlockColumnPredicate*> _block_column_predicate_vec;
 };
@@ -111,9 +128,12 @@ public:
     void evaluate_and(RowBlockV2* block, uint16_t selected_size, bool* flags) 
const override;
     void evaluate_or(RowBlockV2* block, uint16_t selected_size, bool* flags) 
const override;
 
-    void evaluate(vectorized::MutableColumns& block, uint16_t* sel, uint16_t* 
selected_size) const override;
-    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
-    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
+    void evaluate(vectorized::MutableColumns& block, uint16_t* sel,
+                  uint16_t* selected_size) const override;
+    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                      bool* flags) const override;
+    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                     bool* flags) const override;
 
     // note(wb) we didnt't impelment evaluate_vec method here, because storage 
layer only support AND predicate now;
 };
@@ -128,12 +148,14 @@ public:
     // 2.Evaluate OR SEMANTICS in flags use 1 result to get proper select flags
     void evaluate_or(RowBlockV2* block, uint16_t selected_size, bool* flags) 
const override;
 
-    void evaluate(vectorized::MutableColumns& block, uint16_t* sel, uint16_t* 
selected_size) const override;
-    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
-    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size, bool* flags) const override;
+    void evaluate(vectorized::MutableColumns& block, uint16_t* sel,
+                  uint16_t* selected_size) const override;
+    void evaluate_and(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                      bool* flags) const override;
+    void evaluate_or(vectorized::MutableColumns& block, uint16_t* sel, 
uint16_t selected_size,
+                     bool* flags) const override;
 
     void evaluate_vec(vectorized::MutableColumns& block, uint16_t size, bool* 
flags) const override;
-
 };
 
 } //namespace doris
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp 
b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
index 3533d77dab..83f3371893 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
@@ -879,6 +879,18 @@ void 
SegmentIterator::_evaluate_short_circuit_predicate(uint16_t* vec_sel_rowid_
     _opts.stats->rows_vec_cond_filtered += original_size - *selected_size_ptr;
 
     // evaluate delete condition
+    {
+        std::set<const ColumnPredicate*> predicates;
+        
_opts.delete_condition_predicates->get_all_column_predicates(predicates);
+        for (auto predicate : predicates) {
+            auto column_id = predicate->column_id();
+            auto& column = _current_return_columns[column_id];
+            if (predicate->type() == PredicateType::LT || predicate->type() == 
PredicateType::LE ||
+                predicate->type() == PredicateType::GT || predicate->type() == 
PredicateType::GE) {
+                column->convert_dict_codes_if_necessary();
+            }
+        }
+    }
     original_size = *selected_size_ptr;
     _opts.delete_condition_predicates->evaluate(_current_return_columns, 
vec_sel_rowid_idx,
                                                 selected_size_ptr);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to