dbms: fixed error with GROUP BY empty arrays [#METR-17361].

This commit is contained in:
Alexey Milovidov 2015-07-18 07:18:14 +03:00
parent 5077e51fc7
commit d5a69e8e31
3 changed files with 21 additions and 2 deletions

View File

@ -374,9 +374,21 @@ struct AggregationMethodConcat
/// См. функцию extractKeysAndPlaceInPoolContiguous.
const StringRef * key_refs = reinterpret_cast<const StringRef *>(value.first.data + value.first.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);
}
}
};

View File

@ -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

View File

@ -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;