Simplification of aggregate functions: development [#CLICKHOUSE-2].

This commit is contained in:
Alexey Milovidov 2017-12-21 05:06:08 +03:00
parent 6d7a74cdf8
commit 3d20ea8ab9
3 changed files with 17 additions and 31 deletions

View File

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

View File

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

View File

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