diff --git a/dbms/include/DB/AggregateFunctions/AggregateFunctionQuantileTiming.h b/dbms/include/DB/AggregateFunctions/AggregateFunctionQuantileTiming.h index f828a8c3fb5..b634f7182a9 100644 --- a/dbms/include/DB/AggregateFunctions/AggregateFunctionQuantileTiming.h +++ b/dbms/include/DB/AggregateFunctions/AggregateFunctionQuantileTiming.h @@ -600,7 +600,8 @@ public: /** То же самое, но с двумя аргументами. Второй аргумент - "вес" (целое число) - сколько раз учитывать значение. */ template -class AggregateFunctionQuantileTimingWeighted final : public IAggregateFunctionHelper +class AggregateFunctionQuantileTimingWeighted final + : public IBinaryAggregateFunction> { private: double level; @@ -615,7 +616,7 @@ public: return new DataTypeFloat32; } - void setArguments(const DataTypes & arguments) override + void setArgumentsImpl(const DataTypes & arguments) { } @@ -627,12 +628,11 @@ public: level = apply_visitor(FieldVisitorConvertToNumber(), params[0]); } - - void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num) const override + void addImpl(AggregateDataPtr place, const IColumn & column_value, const IColumn & column_weight, size_t row_num) const { this->data(place).insertWeighted( - static_cast &>(*columns[0]).getData()[row_num], - static_cast &>(*columns[1]).getData()[row_num]); + static_cast &>(column_value).getData()[row_num], + static_cast &>(column_weight).getData()[row_num]); } void merge(AggregateDataPtr place, ConstAggregateDataPtr rhs) const override diff --git a/dbms/include/DB/AggregateFunctions/AggregateFunctionsArgMinMax.h b/dbms/include/DB/AggregateFunctions/AggregateFunctionsArgMinMax.h index 136da096d36..62149ce377c 100644 --- a/dbms/include/DB/AggregateFunctions/AggregateFunctionsArgMinMax.h +++ b/dbms/include/DB/AggregateFunctions/AggregateFunctionsArgMinMax.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace DB @@ -20,7 +21,7 @@ struct AggregateFunctionsArgMinMaxData /// Возвращает первое попавшееся значение arg для минимального/максимального value. Пример: argMax(arg, value). template -class AggregateFunctionsArgMinMax final : public IAggregateFunctionHelper +class AggregateFunctionsArgMinMax final : public IBinaryAggregateFunction> { private: DataTypePtr type_res; @@ -34,19 +35,16 @@ public: return type_res; } - void setArguments(const DataTypes & arguments) override + void setArgumentsImpl(const DataTypes & arguments) { - if (arguments.size() != 2) - throw Exception("Aggregate function " + getName() + " requires exactly two arguments.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - type_res = arguments[0]; type_val = arguments[1]; } - void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num) const override + void addImpl(AggregateDataPtr place, const IColumn & columns_arg, const IColumn & column_max, size_t row_num) const { - if (this->data(place).value.changeIfBetter(*columns[1], row_num)) - this->data(place).result.change(*columns[0], row_num); + if (this->data(place).value.changeIfBetter(columns_arg, row_num)) + this->data(place).result.change(column_max, row_num); } void merge(AggregateDataPtr place, ConstAggregateDataPtr rhs) const override