mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
dbms: AggregateFunctionArray: fixed performance issue [#METR-10366].
This commit is contained in:
parent
eba3126077
commit
95a3cd2e9e
@ -81,18 +81,18 @@ public:
|
||||
|
||||
void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num) const
|
||||
{
|
||||
const IColumn ** nested = new const IColumn*[num_agruments];
|
||||
std::vector<ColumnPtr> column_ptrs;
|
||||
const IColumn * nested[num_agruments];
|
||||
|
||||
for (int i = 0; i < num_agruments; ++i)
|
||||
{
|
||||
ColumnPtr single_value_column = dynamic_cast<const ColumnArray &>(*columns[i]).cut(row_num, 1);
|
||||
column_ptrs.push_back(single_value_column);
|
||||
nested[i] = dynamic_cast<const ColumnArray &>(*single_value_column).getDataPtr().get();
|
||||
}
|
||||
for (int i = 0; i < num_agruments; ++i)
|
||||
if (nested[i]->size() != nested[0]->size())
|
||||
throw Exception("All arrays must be of the same size. Aggregate function " + getName(), ErrorCodes::BAD_ARGUMENTS);
|
||||
for (size_t i = 0; i < nested[0]->size(); ++i)
|
||||
nested[i] = &static_cast<const ColumnArray &>(*columns[i]).getData();
|
||||
|
||||
const ColumnArray & first_array_column = static_cast<const ColumnArray &>(*columns[0]);
|
||||
const IColumn::Offsets_t & offsets = first_array_column.getOffsets();
|
||||
|
||||
size_t begin = row_num == 0 ? 0 : offsets[row_num - 1];
|
||||
size_t end = offsets[row_num];
|
||||
|
||||
for (size_t i = begin; i < end; ++i)
|
||||
nested_func->add(place, nested, i);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user