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]