Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 0 additions & 77 deletions be/src/runtime/primitive_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,6 @@ struct PrimitiveTypeTraits;
* ColumnItemType: Data item type in column
* DataType: DataType which is mapping to this PrimitiveType
* ColumnType: ColumnType which is mapping to this PrimitiveType
* NearestPrimitiveType: Nearest primitive type
*/
template <>
struct PrimitiveTypeTraits<TYPE_BOOLEAN> {
Expand All @@ -280,8 +279,6 @@ struct PrimitiveTypeTraits<TYPE_BOOLEAN> {
using ColumnItemType = vectorized::UInt8;
using DataType = vectorized::DataTypeBool;
using ColumnType = vectorized::ColumnUInt8;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_TINYINT> {
Expand All @@ -291,8 +288,6 @@ struct PrimitiveTypeTraits<TYPE_TINYINT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeInt8;
using ColumnType = vectorized::ColumnInt8;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_SMALLINT> {
Expand All @@ -302,8 +297,6 @@ struct PrimitiveTypeTraits<TYPE_SMALLINT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeInt16;
using ColumnType = vectorized::ColumnInt16;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_INT> {
Expand All @@ -313,8 +306,6 @@ struct PrimitiveTypeTraits<TYPE_INT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeInt32;
using ColumnType = vectorized::ColumnInt32;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_BIGINT> {
Expand All @@ -324,8 +315,6 @@ struct PrimitiveTypeTraits<TYPE_BIGINT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeInt64;
using ColumnType = vectorized::ColumnInt64;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_LARGEINT> {
Expand All @@ -335,8 +324,6 @@ struct PrimitiveTypeTraits<TYPE_LARGEINT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeInt128;
using ColumnType = vectorized::ColumnInt128;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_LARGEINT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT;
};
template <>
struct PrimitiveTypeTraits<TYPE_NULL> {
Expand All @@ -346,8 +333,6 @@ struct PrimitiveTypeTraits<TYPE_NULL> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeNothing;
using ColumnType = vectorized::IColumnDummy;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_NULL;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_NULL;
};
template <>
struct PrimitiveTypeTraits<TYPE_FLOAT> {
Expand All @@ -357,8 +342,6 @@ struct PrimitiveTypeTraits<TYPE_FLOAT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeFloat32;
using ColumnType = vectorized::ColumnFloat32;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
};
template <>
struct PrimitiveTypeTraits<TYPE_DOUBLE> {
Expand All @@ -368,8 +351,6 @@ struct PrimitiveTypeTraits<TYPE_DOUBLE> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeFloat64;
using ColumnType = vectorized::ColumnFloat64;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
};
template <>
struct PrimitiveTypeTraits<TYPE_TIMEV2> {
Expand All @@ -379,8 +360,6 @@ struct PrimitiveTypeTraits<TYPE_TIMEV2> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeTimeV2;
using ColumnType = vectorized::ColumnTimeV2;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
};
template <>
struct PrimitiveTypeTraits<TYPE_TIME> {
Expand All @@ -390,8 +369,6 @@ struct PrimitiveTypeTraits<TYPE_TIME> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeTimeV2;
using ColumnType = vectorized::ColumnTime;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
};
template <>
struct PrimitiveTypeTraits<TYPE_DATE> {
Expand All @@ -402,8 +379,6 @@ struct PrimitiveTypeTraits<TYPE_DATE> {
using ColumnItemType = vectorized::Int64;
using DataType = vectorized::DataTypeDate;
using ColumnType = vectorized::ColumnDate;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATE;
};
template <>
struct PrimitiveTypeTraits<TYPE_DATETIME> {
Expand All @@ -413,8 +388,6 @@ struct PrimitiveTypeTraits<TYPE_DATETIME> {
using ColumnItemType = vectorized::Int64;
using DataType = vectorized::DataTypeDateTime;
using ColumnType = vectorized::ColumnDateTime;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIME;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIME;
};
template <>
struct PrimitiveTypeTraits<TYPE_DATETIMEV2> {
Expand All @@ -424,8 +397,6 @@ struct PrimitiveTypeTraits<TYPE_DATETIMEV2> {
using ColumnItemType = vectorized::UInt64;
using DataType = vectorized::DataTypeDateTimeV2;
using ColumnType = vectorized::ColumnDateTimeV2;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIMEV2;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIMEV2;
};
template <>
struct PrimitiveTypeTraits<TYPE_DATEV2> {
Expand All @@ -435,8 +406,6 @@ struct PrimitiveTypeTraits<TYPE_DATEV2> {
using ColumnItemType = vectorized::UInt32;
using DataType = vectorized::DataTypeDateV2;
using ColumnType = vectorized::ColumnDateV2;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATEV2;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATEV2;
};

template <>
Expand All @@ -447,9 +416,6 @@ struct PrimitiveTypeTraits<TYPE_TIMESTAMPTZ> {
using ColumnItemType = vectorized::UInt64;
using DataType = vectorized::DataTypeTimeStampTz;
using ColumnType = vectorized::ColumnTimeStampTz;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_TIMESTAMPTZ;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_TIMESTAMPTZ;
static constexpr PrimitiveType AvgNearestPrimitiveType256 = TYPE_TIMESTAMPTZ;
};

template <>
Expand All @@ -461,8 +427,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMALV2> {
using ColumnItemType = vectorized::Decimal128V2;
using DataType = vectorized::DataTypeDecimalV2;
using ColumnType = vectorized::ColumnDecimal128V2;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMALV2;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMALV2;
};
template <>
struct PrimitiveTypeTraits<TYPE_DECIMAL32> {
Expand All @@ -472,8 +436,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL32> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeDecimal32;
using ColumnType = vectorized::ColumnDecimal32;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL32;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
};
template <>
struct PrimitiveTypeTraits<TYPE_DECIMAL64> {
Expand All @@ -483,8 +445,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL64> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeDecimal64;
using ColumnType = vectorized::ColumnDecimal64;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL64;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
};
template <>
struct PrimitiveTypeTraits<TYPE_DECIMAL128I> {
Expand All @@ -494,8 +454,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL128I> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeDecimal128;
using ColumnType = vectorized::ColumnDecimal128V3;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL128I;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
};
template <>
struct PrimitiveTypeTraits<TYPE_DECIMAL256> {
Expand All @@ -505,8 +463,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL256> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeDecimal256;
using ColumnType = vectorized::ColumnDecimal256;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL256;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL256;
};
template <>
struct PrimitiveTypeTraits<TYPE_IPV4> {
Expand All @@ -516,8 +472,6 @@ struct PrimitiveTypeTraits<TYPE_IPV4> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeIPv4;
using ColumnType = vectorized::ColumnIPv4;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV4;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV4;
};
template <>
struct PrimitiveTypeTraits<TYPE_IPV6> {
Expand All @@ -527,8 +481,6 @@ struct PrimitiveTypeTraits<TYPE_IPV6> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeIPv6;
using ColumnType = vectorized::ColumnIPv6;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV6;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV6;
};
template <>
struct PrimitiveTypeTraits<TYPE_CHAR> {
Expand All @@ -538,8 +490,6 @@ struct PrimitiveTypeTraits<TYPE_CHAR> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeString;
using ColumnType = vectorized::ColumnString;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_CHAR;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_CHAR;
};
template <>
struct PrimitiveTypeTraits<TYPE_VARCHAR> {
Expand All @@ -549,8 +499,6 @@ struct PrimitiveTypeTraits<TYPE_VARCHAR> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeString;
using ColumnType = vectorized::ColumnString;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARCHAR;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARCHAR;
};
template <>
struct PrimitiveTypeTraits<TYPE_STRING> {
Expand All @@ -560,8 +508,6 @@ struct PrimitiveTypeTraits<TYPE_STRING> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeString;
using ColumnType = vectorized::ColumnString;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRING;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRING;
};
template <>
struct PrimitiveTypeTraits<TYPE_VARBINARY> {
Expand All @@ -571,9 +517,6 @@ struct PrimitiveTypeTraits<TYPE_VARBINARY> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeVarbinary;
using ColumnType = vectorized::ColumnVarbinary;
// StringView is non-owning, but StringViewField wraps it with String for ownership
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARBINARY;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARBINARY;
};
template <>
struct PrimitiveTypeTraits<TYPE_HLL> {
Expand All @@ -583,8 +526,6 @@ struct PrimitiveTypeTraits<TYPE_HLL> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeHLL;
using ColumnType = vectorized::ColumnHLL;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_HLL;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_HLL;
};
template <>
struct PrimitiveTypeTraits<TYPE_JSONB> {
Expand All @@ -594,8 +535,6 @@ struct PrimitiveTypeTraits<TYPE_JSONB> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeJsonb;
using ColumnType = vectorized::ColumnString;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_JSONB;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_JSONB;
};
template <>
struct PrimitiveTypeTraits<TYPE_ARRAY> {
Expand All @@ -605,8 +544,6 @@ struct PrimitiveTypeTraits<TYPE_ARRAY> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeArray;
using ColumnType = vectorized::ColumnArray;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_ARRAY;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_ARRAY;
};
template <>
struct PrimitiveTypeTraits<TYPE_MAP> {
Expand All @@ -616,8 +553,6 @@ struct PrimitiveTypeTraits<TYPE_MAP> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeMap;
using ColumnType = vectorized::ColumnMap;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_MAP;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_MAP;
};
template <>
struct PrimitiveTypeTraits<TYPE_STRUCT> {
Expand All @@ -627,8 +562,6 @@ struct PrimitiveTypeTraits<TYPE_STRUCT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeStruct;
using ColumnType = vectorized::ColumnStruct;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRUCT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRUCT;
};
template <>
struct PrimitiveTypeTraits<TYPE_VARIANT> {
Expand All @@ -638,8 +571,6 @@ struct PrimitiveTypeTraits<TYPE_VARIANT> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeVariant;
using ColumnType = vectorized::ColumnVariant;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARIANT;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARIANT;
};
template <>
struct PrimitiveTypeTraits<TYPE_BITMAP> {
Expand All @@ -649,8 +580,6 @@ struct PrimitiveTypeTraits<TYPE_BITMAP> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeBitMap;
using ColumnType = vectorized::ColumnBitmap;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BITMAP;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BITMAP;
};
template <>
struct PrimitiveTypeTraits<TYPE_QUANTILE_STATE> {
Expand All @@ -660,8 +589,6 @@ struct PrimitiveTypeTraits<TYPE_QUANTILE_STATE> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeQuantileState;
using ColumnType = vectorized::ColumnQuantileState;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_QUANTILE_STATE;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_QUANTILE_STATE;
};
template <>
struct PrimitiveTypeTraits<TYPE_UINT32> {
Expand All @@ -671,8 +598,6 @@ struct PrimitiveTypeTraits<TYPE_UINT32> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeNothing;
using ColumnType = vectorized::ColumnOffset32;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT32;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_UINT32;
};
template <>
struct PrimitiveTypeTraits<TYPE_UINT64> {
Expand All @@ -682,8 +607,6 @@ struct PrimitiveTypeTraits<TYPE_UINT64> {
using ColumnItemType = CppType;
using DataType = vectorized::DataTypeNothing;
using ColumnType = vectorized::ColumnOffset64;
static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT64;
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
};

template <PrimitiveType PT>
Expand Down
18 changes: 15 additions & 3 deletions be/src/vec/aggregate_functions/aggregate_function_avg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,25 @@
namespace doris::vectorized {
#include "common/compile_check_begin.h"

constexpr PrimitiveType result_type(PrimitiveType T) {
if (T == TYPE_LARGEINT) {
return TYPE_LARGEINT;
} else if (is_int_or_bool(T)) {
return TYPE_BIGINT;
} else if (is_float_or_double(T) || is_time_type(T)) {
return TYPE_DOUBLE;
} else if (is_decimalv3(T) && T != TYPE_DECIMAL256) {
return TYPE_DECIMAL128I;
} else {
return T;
}
}

// TODO: use result type got from FE plan
template <PrimitiveType T>
struct Avg {
static constexpr PrimitiveType ResultPType = T == TYPE_DECIMALV2 ? T : TYPE_DOUBLE;
using Function = AggregateFunctionAvg<
T, ResultPType,
AggregateFunctionAvgData<PrimitiveTypeTraits<T>::AvgNearestPrimitiveType>>;
using Function = AggregateFunctionAvg<T, ResultPType, AggregateFunctionAvgData<result_type(T)>>;
};

template <PrimitiveType T>
Expand Down
15 changes: 13 additions & 2 deletions be/src/vec/aggregate_functions/aggregate_function_sum.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,13 +285,24 @@ class AggregateFunctionSum<T, TResult, Data> final
UInt32 scale;
};

constexpr PrimitiveType result_type(PrimitiveType T) {
if (T == TYPE_LARGEINT) {
return TYPE_LARGEINT;
} else if (is_int_or_bool(T)) {
return TYPE_BIGINT;
} else if (is_float_or_double(T) || is_time_type(T)) {
return TYPE_DOUBLE;
} else {
return T;
}
}

// TODO: use result type from FE plan
template <PrimitiveType T>
struct SumSimple {
static_assert(!is_decimalv3(T));
/// @note It uses slow Decimal128 (cause we need such a variant). sumWithOverflow is faster for Decimal32/64
static constexpr PrimitiveType ResultType =
T == TYPE_DECIMALV2 ? TYPE_DECIMALV2 : PrimitiveTypeTraits<T>::NearestPrimitiveType;
static constexpr PrimitiveType ResultType = result_type(T);
using AggregateDataType = AggregateFunctionSumData<ResultType>;
using Function = AggregateFunctionSum<T, ResultType, AggregateDataType>;
};
Expand Down
Loading