mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 09:32:06 +00:00
Fix optimize_aggregation_in_order with *Array aggregate functions
row_begin was wrong, and before this patch aggregator processing {row_end, row_end} range, in other words, zero range. Fixes: #9113 (cc @dimarub2000) v2: add static_cast to fix UBSan Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
This commit is contained in:
parent
32157285b0
commit
6ada8a6337
@ -1194,9 +1194,18 @@ void NO_INLINE Aggregator::executeOnIntervalWithoutKeyImpl(
|
|||||||
for (AggregateFunctionInstruction * inst = aggregate_instructions; inst->that; ++inst)
|
for (AggregateFunctionInstruction * inst = aggregate_instructions; inst->that; ++inst)
|
||||||
{
|
{
|
||||||
if (inst->offsets)
|
if (inst->offsets)
|
||||||
inst->batch_that->addBatchSinglePlaceFromInterval(inst->offsets[row_begin], inst->offsets[row_end - 1], res + inst->state_offset, inst->batch_arguments, arena);
|
inst->batch_that->addBatchSinglePlaceFromInterval(
|
||||||
|
inst->offsets[static_cast<ssize_t>(row_begin) - 1],
|
||||||
|
inst->offsets[row_end - 1],
|
||||||
|
res + inst->state_offset,
|
||||||
|
inst->batch_arguments, arena);
|
||||||
else
|
else
|
||||||
inst->batch_that->addBatchSinglePlaceFromInterval(row_begin, row_end, res + inst->state_offset, inst->batch_arguments, arena);
|
inst->batch_that->addBatchSinglePlaceFromInterval(
|
||||||
|
row_begin,
|
||||||
|
row_end,
|
||||||
|
res + inst->state_offset,
|
||||||
|
inst->batch_arguments,
|
||||||
|
arena);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
[0,1] [0,1]
|
@ -0,0 +1,5 @@
|
|||||||
|
drop table if exists data_02293;
|
||||||
|
create table data_02293 (a Int64, grp_aggreg AggregateFunction(groupArrayArray, Array(UInt64)), grp_simple SimpleAggregateFunction(groupArrayArray, Array(UInt64))) engine = MergeTree() order by a;
|
||||||
|
insert into data_02293 select 1 a, groupArrayArrayState([toUInt64(number)]), groupArrayArray([toUInt64(number)]) from numbers(2) group by a;
|
||||||
|
SELECT arraySort(groupArrayArrayMerge(grp_aggreg)) gra , arraySort(groupArrayArray(grp_simple)) grs FROM data_02293 group by a SETTINGS optimize_aggregation_in_order=1;
|
||||||
|
drop table data_02293;
|
Loading…
Reference in New Issue
Block a user