| 1 | #pragma once | 
| 2 |  | 
| 3 | #include <AggregateFunctions/IAggregateFunction.h> | 
| 4 |  | 
| 5 | #include <DataTypes/IDataType.h> | 
| 6 |  | 
| 7 |  | 
| 8 | namespace DB | 
| 9 | { | 
| 10 |  | 
| 11 | /** Type - the state of the aggregate function. | 
| 12 |   * Type parameters is an aggregate function, the types of its arguments, and its parameters (for parametric aggregate functions). | 
| 13 |   */ | 
| 14 | class DataTypeAggregateFunction final : public IDataType | 
| 15 | { | 
| 16 | private: | 
| 17 |     AggregateFunctionPtr function; | 
| 18 |     DataTypes argument_types; | 
| 19 |     Array parameters; | 
| 20 |  | 
| 21 | public: | 
| 22 |     static constexpr bool is_parametric = true; | 
| 23 |  | 
| 24 |     DataTypeAggregateFunction(const AggregateFunctionPtr & function_, const DataTypes & argument_types_, const Array & parameters_) | 
| 25 |         : function(function_), argument_types(argument_types_), parameters(parameters_) | 
| 26 |     { | 
| 27 |     } | 
| 28 |  | 
| 29 |     std::string getFunctionName() const { return function->getName(); } | 
| 30 |     AggregateFunctionPtr getFunction() const { return function; } | 
| 31 |  | 
| 32 |     std::string doGetName() const override; | 
| 33 |     const char * getFamilyName() const override { return "AggregateFunction" ; } | 
| 34 |     TypeIndex getTypeId() const override { return TypeIndex::AggregateFunction; } | 
| 35 |  | 
| 36 |     bool canBeInsideNullable() const override { return false; } | 
| 37 |  | 
| 38 |     DataTypePtr getReturnType() const { return function->getReturnType(); } | 
| 39 |     DataTypePtr getReturnTypeToPredict() const { return function->getReturnTypeToPredict(); } | 
| 40 |     DataTypes getArgumentsDataTypes() const { return argument_types; } | 
| 41 |  | 
| 42 |     /// NOTE These two functions for serializing single values are incompatible with the functions below. | 
| 43 |     void serializeBinary(const Field & field, WriteBuffer & ostr) const override; | 
| 44 |     void deserializeBinary(Field & field, ReadBuffer & istr) const override; | 
| 45 |  | 
| 46 |     void serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; | 
| 47 |     void deserializeBinary(IColumn & column, ReadBuffer & istr) const override; | 
| 48 |     void serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const override; | 
| 49 |     void deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const override; | 
| 50 |     void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 51 |     void serializeTextEscaped(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 52 |     void deserializeTextEscaped(IColumn & column, ReadBuffer & istr, const FormatSettings &) const override; | 
| 53 |     void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 54 |     void deserializeTextQuoted(IColumn & column, ReadBuffer & istr, const FormatSettings &) const override; | 
| 55 |     void deserializeWholeText(IColumn & column, ReadBuffer & istr, const FormatSettings &) const override; | 
| 56 |  | 
| 57 |     void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 58 |     void deserializeTextJSON(IColumn & column, ReadBuffer & istr, const FormatSettings &) const override; | 
| 59 |     void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 60 |     void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override; | 
| 61 |     void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const override; | 
| 62 |     void serializeProtobuf(const IColumn & column, size_t row_num, ProtobufWriter & protobuf, size_t & value_index) const override; | 
| 63 |     void deserializeProtobuf(IColumn & column, ProtobufReader & protobuf, bool allow_add_row, bool & row_added) const override; | 
| 64 |  | 
| 65 |     MutableColumnPtr createColumn() const override; | 
| 66 |  | 
| 67 |     Field getDefault() const override; | 
| 68 |  | 
| 69 |     bool equals(const IDataType & rhs) const override; | 
| 70 |  | 
| 71 |     bool isParametric() const override { return true; } | 
| 72 |     bool haveSubtypes() const override { return false; } | 
| 73 |     bool shouldAlignRightInPrettyFormats() const override { return false; } | 
| 74 | }; | 
| 75 |  | 
| 76 |  | 
| 77 | } | 
| 78 |  | 
| 79 |  |