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