You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/05/22 14:51:35 UTC
[incubator-doris] 10/13: [fix] NullPredicate should implement evaluate_vec (#9689)
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 <98...@users.noreply.github.com>
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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org