This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 0b18ce05578 [fix](FixedString) fix type char error when be
config::enable_low_cardinality_optimize = false #28376
0b18ce05578 is described below
commit 0b18ce055788582bfc2c14bd3bb11fea13e55efc
Author: Mryange <[email protected]>
AuthorDate: Fri Dec 15 09:23:50 2023 +0800
[fix](FixedString) fix type char error when be
config::enable_low_cardinality_optimize = false #28376
---
be/src/exprs/bloom_filter_func.h | 27 +++++++++++++++++++++++++++
be/src/olap/bloom_filter_predicate.h | 7 ++++---
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/be/src/exprs/bloom_filter_func.h b/be/src/exprs/bloom_filter_func.h
index 330c939819c..7713d187152 100644
--- a/be/src/exprs/bloom_filter_func.h
+++ b/be/src/exprs/bloom_filter_func.h
@@ -226,6 +226,8 @@ public:
virtual bool find_olap_engine(const void* data) const = 0;
+ virtual bool find_olap_engine_crc32(const void* data) const = 0;
+
virtual bool find_uint32_t(uint32_t data) const = 0;
virtual void insert_fixed_len(const char* data, const int* offsets, int
number) = 0;
@@ -334,6 +336,11 @@ struct CommonFindOp {
bool find_olap_engine(const BloomFilterAdaptor& bloom_filter, const void*
data) const {
return find(bloom_filter, data);
}
+
+ bool find_olap_engine_crc32(const BloomFilterAdaptor& bloom_filter, const
void* data) const {
+ return find(bloom_filter, data);
+ }
+
bool find(const BloomFilterAdaptor& bloom_filter, uint32_t data) const {
return bloom_filter.test(data);
}
@@ -396,6 +403,11 @@ struct StringFindOp {
bool find_olap_engine(const BloomFilterAdaptor& bloom_filter, const void*
data) const {
return StringFindOp::find(bloom_filter, data);
}
+
+ bool find_olap_engine_crc32(const BloomFilterAdaptor& bloom_filter, const
void* data) const {
+ return StringFindOp::find_crc32_hash(bloom_filter, data);
+ }
+
bool find(const BloomFilterAdaptor& bloom_filter, uint32_t data) const {
return bloom_filter.test(data);
}
@@ -414,6 +426,17 @@ struct FixedStringFindOp : public StringFindOp {
}
return bloom_filter.test(Slice(value->data, size));
}
+ bool find_olap_engine_crc32(const BloomFilterAdaptor& bloom_filter,
+ const void* input_data) const {
+ const auto* value = reinterpret_cast<const StringRef*>(input_data);
+ int64_t size = value->size;
+ const char* data = value->data;
+ // CHAR type may pad the tail with \0, need to trim
+ while (size > 0 && data[size - 1] == '\0') {
+ size--;
+ }
+ return bloom_filter.test_new_hash(Slice(value->data, size));
+ }
};
struct DateTimeFindOp : public CommonFindOp<vectorized::VecDateTimeValue> {
@@ -555,6 +578,10 @@ public:
return dummy.find_olap_engine(*_bloom_filter, data);
}
+ bool find_olap_engine_crc32(const void* data) const override {
+ return dummy.find_olap_engine_crc32(*_bloom_filter, data);
+ }
+
bool find_uint32_t(uint32_t data) const override { return
dummy.find(*_bloom_filter, data); }
private:
diff --git a/be/src/olap/bloom_filter_predicate.h
b/be/src/olap/bloom_filter_predicate.h
index d2816be9966..0876f4e8788 100644
--- a/be/src/olap/bloom_filter_predicate.h
+++ b/be/src/olap/bloom_filter_predicate.h
@@ -113,12 +113,13 @@ private:
for (uint16_t i = 0; i < size; i++) {
uint16_t idx = is_dense_column ? i : sel[i];
if constexpr (is_nullable) {
- if (!null_map[idx] &&
-
_specific_filter->find_crc32_hash(get_cell_value(pred_col_data[idx]))) {
+ if (!null_map[idx] &&
_specific_filter->find_olap_engine_crc32(
+
get_cell_value(pred_col_data[idx]))) {
sel[new_size++] = idx;
}
} else {
- if
(_specific_filter->find_crc32_hash(get_cell_value(pred_col_data[idx]))) {
+ if (_specific_filter->find_olap_engine_crc32(
+ get_cell_value(pred_col_data[idx]))) {
sel[new_size++] = idx;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]