mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-27 18:12:02 +00:00
Update FunctionsArray.cpp
This commit is contained in:
parent
2c6a9b2a92
commit
552d789aa6
@ -1339,7 +1339,7 @@ void FunctionArrayDistinct::executeImpl(Block & block, const ColumnNumbers & arg
|
|||||||
|| executeNumber<Float32>(*inner_col, offsets, res_data, res_offsets, nullable_col)
|
|| executeNumber<Float32>(*inner_col, offsets, res_data, res_offsets, nullable_col)
|
||||||
|| executeNumber<Float64>(*inner_col, offsets, res_data, res_offsets, nullable_col)
|
|| executeNumber<Float64>(*inner_col, offsets, res_data, res_offsets, nullable_col)
|
||||||
|| executeString(*inner_col, offsets, res_data, res_offsets, nullable_col)))
|
|| executeString(*inner_col, offsets, res_data, res_offsets, nullable_col)))
|
||||||
executeHashed(offsets, original_data_columns, res_data, res_offsets);
|
executeHashed(offsets, original_data_columns, res_data, res_offsets, nullable_col);
|
||||||
|
|
||||||
block.getByPosition(result).column = std::move(res_ptr);
|
block.getByPosition(result).column = std::move(res_ptr);
|
||||||
}
|
}
|
||||||
@ -1449,13 +1449,21 @@ void FunctionArrayDistinct::executeHashed(
|
|||||||
const ColumnArray::Offsets & offsets,
|
const ColumnArray::Offsets & offsets,
|
||||||
const ColumnRawPtrs & columns,
|
const ColumnRawPtrs & columns,
|
||||||
IColumn & res_data_col,
|
IColumn & res_data_col,
|
||||||
ColumnArray::Offsets & res_offsets)
|
ColumnArray::Offsets & res_offsets,
|
||||||
|
const ColumnNullable * nullable_col)
|
||||||
{
|
{
|
||||||
size_t count = columns.size();
|
size_t count = columns.size();
|
||||||
|
|
||||||
using Set = ClearableHashSet<UInt128, UInt128TrivialHash, HashTableGrower<INITIAL_SIZE_DEGREE>,
|
using Set = ClearableHashSet<UInt128, UInt128TrivialHash, HashTableGrower<INITIAL_SIZE_DEGREE>,
|
||||||
HashTableAllocatorWithStackMemory<(1ULL << INITIAL_SIZE_DEGREE) * sizeof(UInt128)>>;
|
HashTableAllocatorWithStackMemory<(1ULL << INITIAL_SIZE_DEGREE) * sizeof(UInt128)>>;
|
||||||
|
|
||||||
|
const PaddedPODArray<UInt8> * src_null_map = nullptr;
|
||||||
|
|
||||||
|
if (nullable_col)
|
||||||
|
{
|
||||||
|
src_null_map = &static_cast<const ColumnUInt8 *>(&nullable_col->getNullMapColumn())->getData();
|
||||||
|
}
|
||||||
|
|
||||||
Set set;
|
Set set;
|
||||||
size_t prev_off = 0;
|
size_t prev_off = 0;
|
||||||
for (size_t i = 0; i < offsets.size(); ++i)
|
for (size_t i = 0; i < offsets.size(); ++i)
|
||||||
@ -1465,7 +1473,7 @@ void FunctionArrayDistinct::executeHashed(
|
|||||||
for (size_t j = prev_off; j < off; ++j)
|
for (size_t j = prev_off; j < off; ++j)
|
||||||
{
|
{
|
||||||
auto hash = hash128(j, count, columns);
|
auto hash = hash128(j, count, columns);
|
||||||
if (set.find(hash) == set.end())
|
if (set.find(hash) == set.end() && (!nullable_col || (*src_null_map)[j] == 0))
|
||||||
{
|
{
|
||||||
set.insert(hash);
|
set.insert(hash);
|
||||||
res_data_col.insertFrom(*columns[0], j);
|
res_data_col.insertFrom(*columns[0], j);
|
||||||
|
Loading…
Reference in New Issue
Block a user