[Bug](bloomfilter) Fix wrong result using bloomfilter with date type (#17225)
This commit is contained in:
@ -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> {
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user