mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
Simplification of aggregate functions: development [#CLICKHOUSE-2].
This commit is contained in:
parent
6d7a74cdf8
commit
3d20ea8ab9
@ -106,16 +106,7 @@ AggregateFunctionPtr AggregateFunctionFactory::get(
|
||||
nested_argument_types.reserve(argument_types.size());
|
||||
|
||||
for (const auto & arg_type : argument_types)
|
||||
{
|
||||
if (arg_type->isNullable())
|
||||
{
|
||||
const DataTypeNullable & actual_type = static_cast<const DataTypeNullable &>(*arg_type.get());
|
||||
const DataTypePtr & nested_type = actual_type.getNestedType();
|
||||
nested_argument_types.push_back(nested_type);
|
||||
}
|
||||
else
|
||||
nested_argument_types.push_back(arg_type);
|
||||
}
|
||||
nested_argument_types.push_back(removeNullable(arg_type));
|
||||
|
||||
nested_function = getImpl(name, nested_argument_types, parameters, recursion_level);
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ public:
|
||||
StringRef str_serialized = getSerialization(*columns[0], row_num, *arena);
|
||||
set.emplace(str_serialized, it, inserted);
|
||||
|
||||
if (!is_plain_column)
|
||||
if constexpr (!is_plain_column)
|
||||
{
|
||||
if (!inserted)
|
||||
arena->rollback(str_serialized.size);
|
||||
|
@ -184,14 +184,19 @@ public:
|
||||
{
|
||||
auto & set = this->data(place).value;
|
||||
if (set.capacity() != reserved)
|
||||
{
|
||||
set.resize(reserved);
|
||||
}
|
||||
|
||||
const char * begin = nullptr;
|
||||
StringRef str_serialized = columns[0]->serializeValueIntoArena(row_num, *arena, begin);
|
||||
set.insert(str_serialized);
|
||||
arena->rollback(str_serialized.size);
|
||||
if constexpr (is_plain_column)
|
||||
{
|
||||
const char * begin = nullptr;
|
||||
StringRef str_serialized = columns[0]->serializeValueIntoArena(row_num, *arena, begin);
|
||||
set.insert(str_serialized);
|
||||
arena->rollback(str_serialized.size);
|
||||
}
|
||||
else
|
||||
{
|
||||
set.insert(columns[0]->getDataAt(row_num));
|
||||
}
|
||||
}
|
||||
|
||||
void merge(AggregateDataPtr place, ConstAggregateDataPtr rhs, Arena *) const override
|
||||
@ -210,7 +215,10 @@ public:
|
||||
|
||||
for (auto & elem : result_vec)
|
||||
{
|
||||
deserializeAndInsert(elem.key, data_to);
|
||||
if constexpr (is_plain_column)
|
||||
data_to.insertData(elem.key.data, elem.key.size);
|
||||
else
|
||||
data_to.deserializeAndInsertFromArena(elem.key.data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -218,19 +226,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
template <>
|
||||
inline void AggregateFunctionTopKGeneric<false>::deserializeAndInsert(StringRef str, IColumn & data_to)
|
||||
{
|
||||
data_to.deserializeAndInsertFromArena(str.data);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void AggregateFunctionTopKGeneric<true>::deserializeAndInsert(StringRef str, IColumn & data_to)
|
||||
{
|
||||
data_to.insertData(str.data, str.size);
|
||||
}
|
||||
|
||||
|
||||
#undef TOP_K_LOAD_FACTOR
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user