[Bug](bloomfilter) Fix wrong result using bloomfilter with date type (#17225)

This commit is contained in:
Gabriel
2023-03-01 12:29:20 +08:00
committed by GitHub
parent 979cf42d7a
commit b8ebcdff78
3 changed files with 36 additions and 10 deletions

View File

@ -312,22 +312,18 @@ struct FixedStringFindOp : public StringFindOp {
}
};
struct DateTimeFindOp : public CommonFindOp<DateTimeValue> {
struct DateTimeFindOp : public CommonFindOp<vectorized::VecDateTimeValue> {
bool find_olap_engine(const BloomFilterAdaptor& bloom_filter, const void* data) const {
vectorized::VecDateTimeValue value;
value.from_olap_datetime(*reinterpret_cast<const uint64_t*>(data));
return bloom_filter.test(Slice((char*)&value, sizeof(vectorized::VecDateTimeValue)));
}
void insert(BloomFilterAdaptor& bloom_filter, const void* data) const {
bloom_filter.add_bytes((char*)data, sizeof(vectorized::VecDateTimeValue));
}
};
// avoid violating C/C++ aliasing rules.
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101684
struct DateFindOp : public CommonFindOp<DateTimeValue> {
struct DateFindOp : public CommonFindOp<vectorized::VecDateTimeValue> {
bool find_olap_engine(const BloomFilterAdaptor& bloom_filter, const void* data) const {
uint24_t date = *static_cast<const uint24_t*>(data);
uint64_t value = uint32_t(date);
@ -337,10 +333,6 @@ struct DateFindOp : public CommonFindOp<DateTimeValue> {
return bloom_filter.test(Slice((char*)&date_value, sizeof(vectorized::VecDateTimeValue)));
}
void insert(BloomFilterAdaptor& bloom_filter, const void* data) const {
bloom_filter.add_bytes((char*)data, sizeof(vectorized::VecDateTimeValue));
}
};
struct DecimalV2FindOp : public CommonFindOp<DecimalV2Value> {

View File

@ -24,3 +24,23 @@
2 2000-02-02 2000-02-02T11:11:11 2 2000-02-02 2000-02-02T11:11:11
3 2000-03-02 2000-03-02T11:11:11 3 2000-03-02 2000-03-02T11:11:11
-- !sql2 --
1 2000-01-01 2000-01-01T11:11:11 1 2000-01-01 2000-01-01T11:11:11
2 2000-02-02 2000-02-02T11:11:11 2 2000-02-02 2000-02-02T11:11:11
3 2000-03-02 2000-03-02T11:11:11 3 2000-03-02 2000-03-02T11:11:11
-- !sql2 --
1 2000-01-01 2000-01-01T11:11:11 1 2000-01-01 2000-01-01T11:11:11
2 2000-02-02 2000-02-02T11:11:11 2 2000-02-02 2000-02-02T11:11:11
3 2000-03-02 2000-03-02T11:11:11 3 2000-03-02 2000-03-02T11:11:11
-- !sql2 --
1 2000-01-01 2000-01-01T11:11:11 1 2000-01-01 2000-01-01T11:11:11
2 2000-02-02 2000-02-02T11:11:11 2 2000-02-02 2000-02-02T11:11:11
3 2000-03-02 2000-03-02T11:11:11 3 2000-03-02 2000-03-02T11:11:11
-- !sql2 --
1 2000-01-01 2000-01-01T11:11:11 1 2000-01-01 2000-01-01T11:11:11
2 2000-02-02 2000-02-02T11:11:11 2 2000-02-02 2000-02-02T11:11:11
3 2000-03-02 2000-03-02T11:11:11 3 2000-03-02 2000-03-02T11:11:11

View File

@ -45,5 +45,19 @@ suite("test_date_runtime_filter") {
sql " set runtime_filter_type = 8; "
qt_sql2 "select * from ${tbName} a, ${tbName} b WHERE a.c3 = b.c3 ORDER BY a.c2"
sql " set runtime_filter_wait_time_ms = 0; "
sql " set runtime_filter_type = 1; "
qt_sql2 "select * from ${tbName} a, ${tbName} b WHERE a.c3 = b.c3 ORDER BY a.c2"
sql " set runtime_filter_type = 2; "
qt_sql2 "select * from ${tbName} a, ${tbName} b WHERE a.c3 = b.c3 ORDER BY a.c2"
sql " set runtime_filter_type = 4; "
qt_sql2 "select * from ${tbName} a, ${tbName} b WHERE a.c3 = b.c3 ORDER BY a.c2"
sql " set runtime_filter_type = 8; "
qt_sql2 "select * from ${tbName} a, ${tbName} b WHERE a.c3 = b.c3 ORDER BY a.c2"
sql "DROP TABLE ${tbName}"
}