mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
dbms: fixed error with GROUP BY empty arrays [#METR-17361].
This commit is contained in:
parent
5077e51fc7
commit
d5a69e8e31
@ -374,8 +374,20 @@ struct AggregationMethodConcat
|
||||
/// См. функцию extractKeysAndPlaceInPoolContiguous.
|
||||
const StringRef * key_refs = reinterpret_cast<const StringRef *>(value.first.data + value.first.size);
|
||||
|
||||
for (size_t i = 0; i < keys_size; ++i)
|
||||
key_columns[i]->insertDataWithTerminatingZero(key_refs[i].data, key_refs[i].size);
|
||||
if (unlikely(0 == value.first.size))
|
||||
{
|
||||
/** Исправление, если все ключи - пустые массивы. Для них в хэш-таблицу записывается StringRef нулевой длины, но с ненулевым указателем.
|
||||
* Но при вставке в хэш-таблицу, такой StringRef оказывается равен другому ключу нулевой длины,
|
||||
* у которого указатель на данные может быть любым мусором и использовать его нельзя.
|
||||
*/
|
||||
for (size_t i = 0; i < keys_size; ++i)
|
||||
key_columns[i]->insertDefault();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (size_t i = 0; i < keys_size; ++i)
|
||||
key_columns[i]->insertDataWithTerminatingZero(key_refs[i].data, key_refs[i].size);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,6 @@
|
||||
[] 5
|
||||
[0] 1
|
||||
[0,1,2] 1
|
||||
[0,1,2,3,4] 1
|
||||
[0,1,2,3,4,5,6] 1
|
||||
[0,1,2,3,4,5,6,7,8] 1
|
@ -0,0 +1 @@
|
||||
SELECT range(x) AS k, count() FROM (SELECT number % 2 ? number : 0 AS x FROM system.numbers LIMIT 10) GROUP BY k ORDER BY k;
|
Loading…
Reference in New Issue
Block a user