This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit e52e27ba6636640931abf97b69cc3d646e642795 Author: Yongqiang YANG <[email protected]> AuthorDate: Sun May 22 21:29:53 2022 +0800 [fix] NullPredicate should implement evaluate_vec (#9689) select column from table where column is null --- be/src/olap/column_predicate.h | 5 ++++- be/src/olap/null_predicate.cpp | 12 ++++++++++++ be/src/olap/null_predicate.h | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/be/src/olap/column_predicate.h b/be/src/olap/column_predicate.h index 56f817d9f3..bb5f468303 100644 --- a/be/src/olap/column_predicate.h +++ b/be/src/olap/column_predicate.h @@ -83,7 +83,10 @@ public: // used to evaluate pre read column in lazy matertialization // now only support integer/float // a vectorized eval way - virtual void evaluate_vec(vectorized::IColumn& column, uint16_t size, bool* flags) const {}; + virtual void evaluate_vec(vectorized::IColumn& column, uint16_t size, bool* flags) const { + DCHECK(false) << "should not reach here"; + } + uint32_t column_id() const { return _column_id; } protected: diff --git a/be/src/olap/null_predicate.cpp b/be/src/olap/null_predicate.cpp index 43cfbcaab3..631eb67a86 100644 --- a/be/src/olap/null_predicate.cpp +++ b/be/src/olap/null_predicate.cpp @@ -165,4 +165,16 @@ void NullPredicate::evaluate_and(IColumn& column, uint16_t* sel, uint16_t size, if (_is_null) memset(flags, false, size); } } + +void NullPredicate::evaluate_vec(vectorized::IColumn& column, uint16_t size, bool* flags) const { + if (auto* nullable = check_and_get_column<ColumnNullable>(column)) { + auto& null_map = nullable->get_null_map_data(); + for (uint16_t i = 0; i < size; ++i) { + flags[i] = (null_map[i] == _is_null); + } + } else { + if (_is_null) memset(flags, false, size); + } +} + } //namespace doris diff --git a/be/src/olap/null_predicate.h b/be/src/olap/null_predicate.h index 7b90ffbf92..f7e92d9fe4 100644 --- a/be/src/olap/null_predicate.h +++ b/be/src/olap/null_predicate.h @@ -53,6 +53,8 @@ public: void evaluate_and(vectorized::IColumn& column, uint16_t* sel, uint16_t size, bool* flags) const override; + void evaluate_vec(vectorized::IColumn& column, uint16_t size, bool* flags) const override; + private: bool _is_null; //true for null, false for not null }; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
