mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
fix null minmax
This commit is contained in:
parent
8ef7f3589a
commit
3e02eaf28d
@ -32,10 +32,22 @@ void MergeTreeMinMaxGranule::serializeBinary(WriteBuffer & ostr) const
|
||||
for (size_t i = 0; i < index.columns.size(); ++i)
|
||||
{
|
||||
const DataTypePtr & type = index.data_types[i];
|
||||
|
||||
if (!type->isNullable())
|
||||
{
|
||||
type->serializeBinary(parallelogram[i].left, ostr);
|
||||
type->serializeBinary(parallelogram[i].right, ostr);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool is_null = parallelogram[i].left.isNull() || parallelogram[i].right.isNull(); // one is enough
|
||||
writeBinary(is_null, ostr);
|
||||
if (!is_null)
|
||||
{
|
||||
type->serializeBinary(parallelogram[i].left, ostr);
|
||||
type->serializeBinary(parallelogram[i].right, ostr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MergeTreeMinMaxGranule::deserializeBinary(ReadBuffer & istr)
|
||||
@ -46,9 +58,26 @@ void MergeTreeMinMaxGranule::deserializeBinary(ReadBuffer & istr)
|
||||
for (size_t i = 0; i < index.columns.size(); ++i)
|
||||
{
|
||||
const DataTypePtr & type = index.data_types[i];
|
||||
if (!type->isNullable())
|
||||
{
|
||||
type->deserializeBinary(min_val, istr);
|
||||
type->deserializeBinary(max_val, istr);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
bool is_null;
|
||||
readBinary(is_null, istr);
|
||||
if (!is_null)
|
||||
{
|
||||
type->deserializeBinary(min_val, istr);
|
||||
type->deserializeBinary(max_val, istr);
|
||||
}
|
||||
else
|
||||
{
|
||||
min_val = Null();
|
||||
max_val = Null();
|
||||
}
|
||||
}
|
||||
parallelogram.emplace_back(min_val, true, max_val, true);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
0
|
||||
2
|
||||
4
|
||||
0
|
24
dbms/tests/queries/0_stateless/00944_minmax_null.sql
Normal file
24
dbms/tests/queries/0_stateless/00944_minmax_null.sql
Normal file
@ -0,0 +1,24 @@
|
||||
DROP TABLE IF EXISTS min_max_with_nullable_string;
|
||||
SET allow_experimental_data_skipping_indices = 1;
|
||||
|
||||
CREATE TABLE min_max_with_nullable_string (
|
||||
t DateTime,
|
||||
nullable_str Nullable(String),
|
||||
INDEX nullable_str_min_max nullable_str TYPE minmax GRANULARITY 8192
|
||||
) ENGINE = MergeTree ORDER BY (t);
|
||||
|
||||
INSERT INTO min_max_with_nullable_string(t) VALUES (now()) (now());
|
||||
|
||||
SELECT count() FROM min_max_with_nullable_string WHERE nullable_str == '.';
|
||||
|
||||
INSERT INTO min_max_with_nullable_string(t, nullable_str) VALUES (now(), '.') (now(), '.');
|
||||
|
||||
SELECT count() FROM min_max_with_nullable_string WHERE nullable_str == '.';
|
||||
|
||||
INSERT INTO min_max_with_nullable_string(t, nullable_str) VALUES (now(), NULL) (now(), '.') (now(), NULL) (now(), '.') (now(), NULL);
|
||||
|
||||
SELECT count() FROM min_max_with_nullable_string WHERE nullable_str == '.';
|
||||
|
||||
SELECT count() FROM min_max_with_nullable_string WHERE nullable_str == '';
|
||||
|
||||
DROP TABLE min_max_with_nullable_string;
|
Loading…
Reference in New Issue
Block a user