Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions be/src/exprs/bloom_filter_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,8 @@ class BloomFilterFuncBase : public FilterFuncBase {

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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
Expand All @@ -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> {
Expand Down Expand Up @@ -555,6 +578,10 @@ class BloomFilterFunc final : public BloomFilterFuncBase {
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:
Expand Down
7 changes: 4 additions & 3 deletions be/src/olap/bloom_filter_predicate.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,13 @@ class BloomFilterColumnPredicate : public ColumnPredicate {
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;
}
}
Expand Down