Skip to content

Commit 416b60f

Browse files
authored
[refactor](type) Remove nearest type from sum/avg (#59669)
1 parent 0704540 commit 416b60f

File tree

3 files changed

+28
-82
lines changed

3 files changed

+28
-82
lines changed

be/src/runtime/primitive_type.h

Lines changed: 0 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@ struct PrimitiveTypeTraits;
270270
* ColumnItemType: Data item type in column
271271
* DataType: DataType which is mapping to this PrimitiveType
272272
* ColumnType: ColumnType which is mapping to this PrimitiveType
273-
* NearestPrimitiveType: Nearest primitive type
274273
*/
275274
template <>
276275
struct PrimitiveTypeTraits<TYPE_BOOLEAN> {
@@ -280,8 +279,6 @@ struct PrimitiveTypeTraits<TYPE_BOOLEAN> {
280279
using ColumnItemType = vectorized::UInt8;
281280
using DataType = vectorized::DataTypeBool;
282281
using ColumnType = vectorized::ColumnUInt8;
283-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
284-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
285282
};
286283
template <>
287284
struct PrimitiveTypeTraits<TYPE_TINYINT> {
@@ -291,8 +288,6 @@ struct PrimitiveTypeTraits<TYPE_TINYINT> {
291288
using ColumnItemType = CppType;
292289
using DataType = vectorized::DataTypeInt8;
293290
using ColumnType = vectorized::ColumnInt8;
294-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
295-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
296291
};
297292
template <>
298293
struct PrimitiveTypeTraits<TYPE_SMALLINT> {
@@ -302,8 +297,6 @@ struct PrimitiveTypeTraits<TYPE_SMALLINT> {
302297
using ColumnItemType = CppType;
303298
using DataType = vectorized::DataTypeInt16;
304299
using ColumnType = vectorized::ColumnInt16;
305-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
306-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
307300
};
308301
template <>
309302
struct PrimitiveTypeTraits<TYPE_INT> {
@@ -313,8 +306,6 @@ struct PrimitiveTypeTraits<TYPE_INT> {
313306
using ColumnItemType = CppType;
314307
using DataType = vectorized::DataTypeInt32;
315308
using ColumnType = vectorized::ColumnInt32;
316-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
317-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT;
318309
};
319310
template <>
320311
struct PrimitiveTypeTraits<TYPE_BIGINT> {
@@ -324,8 +315,6 @@ struct PrimitiveTypeTraits<TYPE_BIGINT> {
324315
using ColumnItemType = CppType;
325316
using DataType = vectorized::DataTypeInt64;
326317
using ColumnType = vectorized::ColumnInt64;
327-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT;
328-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT;
329318
};
330319
template <>
331320
struct PrimitiveTypeTraits<TYPE_LARGEINT> {
@@ -335,8 +324,6 @@ struct PrimitiveTypeTraits<TYPE_LARGEINT> {
335324
using ColumnItemType = CppType;
336325
using DataType = vectorized::DataTypeInt128;
337326
using ColumnType = vectorized::ColumnInt128;
338-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_LARGEINT;
339-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT;
340327
};
341328
template <>
342329
struct PrimitiveTypeTraits<TYPE_NULL> {
@@ -346,8 +333,6 @@ struct PrimitiveTypeTraits<TYPE_NULL> {
346333
using ColumnItemType = CppType;
347334
using DataType = vectorized::DataTypeNothing;
348335
using ColumnType = vectorized::IColumnDummy;
349-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_NULL;
350-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_NULL;
351336
};
352337
template <>
353338
struct PrimitiveTypeTraits<TYPE_FLOAT> {
@@ -357,8 +342,6 @@ struct PrimitiveTypeTraits<TYPE_FLOAT> {
357342
using ColumnItemType = CppType;
358343
using DataType = vectorized::DataTypeFloat32;
359344
using ColumnType = vectorized::ColumnFloat32;
360-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
361-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
362345
};
363346
template <>
364347
struct PrimitiveTypeTraits<TYPE_DOUBLE> {
@@ -368,8 +351,6 @@ struct PrimitiveTypeTraits<TYPE_DOUBLE> {
368351
using ColumnItemType = CppType;
369352
using DataType = vectorized::DataTypeFloat64;
370353
using ColumnType = vectorized::ColumnFloat64;
371-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
372-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
373354
};
374355
template <>
375356
struct PrimitiveTypeTraits<TYPE_TIMEV2> {
@@ -379,8 +360,6 @@ struct PrimitiveTypeTraits<TYPE_TIMEV2> {
379360
using ColumnItemType = CppType;
380361
using DataType = vectorized::DataTypeTimeV2;
381362
using ColumnType = vectorized::ColumnTimeV2;
382-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
383-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
384363
};
385364
template <>
386365
struct PrimitiveTypeTraits<TYPE_TIME> {
@@ -390,8 +369,6 @@ struct PrimitiveTypeTraits<TYPE_TIME> {
390369
using ColumnItemType = CppType;
391370
using DataType = vectorized::DataTypeTimeV2;
392371
using ColumnType = vectorized::ColumnTime;
393-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE;
394-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
395372
};
396373
template <>
397374
struct PrimitiveTypeTraits<TYPE_DATE> {
@@ -402,8 +379,6 @@ struct PrimitiveTypeTraits<TYPE_DATE> {
402379
using ColumnItemType = vectorized::Int64;
403380
using DataType = vectorized::DataTypeDate;
404381
using ColumnType = vectorized::ColumnDate;
405-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATE;
406-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATE;
407382
};
408383
template <>
409384
struct PrimitiveTypeTraits<TYPE_DATETIME> {
@@ -413,8 +388,6 @@ struct PrimitiveTypeTraits<TYPE_DATETIME> {
413388
using ColumnItemType = vectorized::Int64;
414389
using DataType = vectorized::DataTypeDateTime;
415390
using ColumnType = vectorized::ColumnDateTime;
416-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIME;
417-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIME;
418391
};
419392
template <>
420393
struct PrimitiveTypeTraits<TYPE_DATETIMEV2> {
@@ -424,8 +397,6 @@ struct PrimitiveTypeTraits<TYPE_DATETIMEV2> {
424397
using ColumnItemType = vectorized::UInt64;
425398
using DataType = vectorized::DataTypeDateTimeV2;
426399
using ColumnType = vectorized::ColumnDateTimeV2;
427-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIMEV2;
428-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIMEV2;
429400
};
430401
template <>
431402
struct PrimitiveTypeTraits<TYPE_DATEV2> {
@@ -435,8 +406,6 @@ struct PrimitiveTypeTraits<TYPE_DATEV2> {
435406
using ColumnItemType = vectorized::UInt32;
436407
using DataType = vectorized::DataTypeDateV2;
437408
using ColumnType = vectorized::ColumnDateV2;
438-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATEV2;
439-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATEV2;
440409
};
441410

442411
template <>
@@ -447,9 +416,6 @@ struct PrimitiveTypeTraits<TYPE_TIMESTAMPTZ> {
447416
using ColumnItemType = vectorized::UInt64;
448417
using DataType = vectorized::DataTypeTimeStampTz;
449418
using ColumnType = vectorized::ColumnTimeStampTz;
450-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_TIMESTAMPTZ;
451-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_TIMESTAMPTZ;
452-
static constexpr PrimitiveType AvgNearestPrimitiveType256 = TYPE_TIMESTAMPTZ;
453419
};
454420

455421
template <>
@@ -461,8 +427,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMALV2> {
461427
using ColumnItemType = vectorized::Decimal128V2;
462428
using DataType = vectorized::DataTypeDecimalV2;
463429
using ColumnType = vectorized::ColumnDecimal128V2;
464-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMALV2;
465-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMALV2;
466430
};
467431
template <>
468432
struct PrimitiveTypeTraits<TYPE_DECIMAL32> {
@@ -472,8 +436,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL32> {
472436
using ColumnItemType = CppType;
473437
using DataType = vectorized::DataTypeDecimal32;
474438
using ColumnType = vectorized::ColumnDecimal32;
475-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL32;
476-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
477439
};
478440
template <>
479441
struct PrimitiveTypeTraits<TYPE_DECIMAL64> {
@@ -483,8 +445,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL64> {
483445
using ColumnItemType = CppType;
484446
using DataType = vectorized::DataTypeDecimal64;
485447
using ColumnType = vectorized::ColumnDecimal64;
486-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL64;
487-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
488448
};
489449
template <>
490450
struct PrimitiveTypeTraits<TYPE_DECIMAL128I> {
@@ -494,8 +454,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL128I> {
494454
using ColumnItemType = CppType;
495455
using DataType = vectorized::DataTypeDecimal128;
496456
using ColumnType = vectorized::ColumnDecimal128V3;
497-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL128I;
498-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I;
499457
};
500458
template <>
501459
struct PrimitiveTypeTraits<TYPE_DECIMAL256> {
@@ -505,8 +463,6 @@ struct PrimitiveTypeTraits<TYPE_DECIMAL256> {
505463
using ColumnItemType = CppType;
506464
using DataType = vectorized::DataTypeDecimal256;
507465
using ColumnType = vectorized::ColumnDecimal256;
508-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL256;
509-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL256;
510466
};
511467
template <>
512468
struct PrimitiveTypeTraits<TYPE_IPV4> {
@@ -516,8 +472,6 @@ struct PrimitiveTypeTraits<TYPE_IPV4> {
516472
using ColumnItemType = CppType;
517473
using DataType = vectorized::DataTypeIPv4;
518474
using ColumnType = vectorized::ColumnIPv4;
519-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV4;
520-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV4;
521475
};
522476
template <>
523477
struct PrimitiveTypeTraits<TYPE_IPV6> {
@@ -527,8 +481,6 @@ struct PrimitiveTypeTraits<TYPE_IPV6> {
527481
using ColumnItemType = CppType;
528482
using DataType = vectorized::DataTypeIPv6;
529483
using ColumnType = vectorized::ColumnIPv6;
530-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV6;
531-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV6;
532484
};
533485
template <>
534486
struct PrimitiveTypeTraits<TYPE_CHAR> {
@@ -538,8 +490,6 @@ struct PrimitiveTypeTraits<TYPE_CHAR> {
538490
using ColumnItemType = CppType;
539491
using DataType = vectorized::DataTypeString;
540492
using ColumnType = vectorized::ColumnString;
541-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_CHAR;
542-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_CHAR;
543493
};
544494
template <>
545495
struct PrimitiveTypeTraits<TYPE_VARCHAR> {
@@ -549,8 +499,6 @@ struct PrimitiveTypeTraits<TYPE_VARCHAR> {
549499
using ColumnItemType = CppType;
550500
using DataType = vectorized::DataTypeString;
551501
using ColumnType = vectorized::ColumnString;
552-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARCHAR;
553-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARCHAR;
554502
};
555503
template <>
556504
struct PrimitiveTypeTraits<TYPE_STRING> {
@@ -560,8 +508,6 @@ struct PrimitiveTypeTraits<TYPE_STRING> {
560508
using ColumnItemType = CppType;
561509
using DataType = vectorized::DataTypeString;
562510
using ColumnType = vectorized::ColumnString;
563-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRING;
564-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRING;
565511
};
566512
template <>
567513
struct PrimitiveTypeTraits<TYPE_VARBINARY> {
@@ -571,9 +517,6 @@ struct PrimitiveTypeTraits<TYPE_VARBINARY> {
571517
using ColumnItemType = CppType;
572518
using DataType = vectorized::DataTypeVarbinary;
573519
using ColumnType = vectorized::ColumnVarbinary;
574-
// StringView is non-owning, but StringViewField wraps it with String for ownership
575-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARBINARY;
576-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARBINARY;
577520
};
578521
template <>
579522
struct PrimitiveTypeTraits<TYPE_HLL> {
@@ -583,8 +526,6 @@ struct PrimitiveTypeTraits<TYPE_HLL> {
583526
using ColumnItemType = CppType;
584527
using DataType = vectorized::DataTypeHLL;
585528
using ColumnType = vectorized::ColumnHLL;
586-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_HLL;
587-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_HLL;
588529
};
589530
template <>
590531
struct PrimitiveTypeTraits<TYPE_JSONB> {
@@ -594,8 +535,6 @@ struct PrimitiveTypeTraits<TYPE_JSONB> {
594535
using ColumnItemType = CppType;
595536
using DataType = vectorized::DataTypeJsonb;
596537
using ColumnType = vectorized::ColumnString;
597-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_JSONB;
598-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_JSONB;
599538
};
600539
template <>
601540
struct PrimitiveTypeTraits<TYPE_ARRAY> {
@@ -605,8 +544,6 @@ struct PrimitiveTypeTraits<TYPE_ARRAY> {
605544
using ColumnItemType = CppType;
606545
using DataType = vectorized::DataTypeArray;
607546
using ColumnType = vectorized::ColumnArray;
608-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_ARRAY;
609-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_ARRAY;
610547
};
611548
template <>
612549
struct PrimitiveTypeTraits<TYPE_MAP> {
@@ -616,8 +553,6 @@ struct PrimitiveTypeTraits<TYPE_MAP> {
616553
using ColumnItemType = CppType;
617554
using DataType = vectorized::DataTypeMap;
618555
using ColumnType = vectorized::ColumnMap;
619-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_MAP;
620-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_MAP;
621556
};
622557
template <>
623558
struct PrimitiveTypeTraits<TYPE_STRUCT> {
@@ -627,8 +562,6 @@ struct PrimitiveTypeTraits<TYPE_STRUCT> {
627562
using ColumnItemType = CppType;
628563
using DataType = vectorized::DataTypeStruct;
629564
using ColumnType = vectorized::ColumnStruct;
630-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRUCT;
631-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRUCT;
632565
};
633566
template <>
634567
struct PrimitiveTypeTraits<TYPE_VARIANT> {
@@ -638,8 +571,6 @@ struct PrimitiveTypeTraits<TYPE_VARIANT> {
638571
using ColumnItemType = CppType;
639572
using DataType = vectorized::DataTypeVariant;
640573
using ColumnType = vectorized::ColumnVariant;
641-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARIANT;
642-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARIANT;
643574
};
644575
template <>
645576
struct PrimitiveTypeTraits<TYPE_BITMAP> {
@@ -649,8 +580,6 @@ struct PrimitiveTypeTraits<TYPE_BITMAP> {
649580
using ColumnItemType = CppType;
650581
using DataType = vectorized::DataTypeBitMap;
651582
using ColumnType = vectorized::ColumnBitmap;
652-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_BITMAP;
653-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BITMAP;
654583
};
655584
template <>
656585
struct PrimitiveTypeTraits<TYPE_QUANTILE_STATE> {
@@ -660,8 +589,6 @@ struct PrimitiveTypeTraits<TYPE_QUANTILE_STATE> {
660589
using ColumnItemType = CppType;
661590
using DataType = vectorized::DataTypeQuantileState;
662591
using ColumnType = vectorized::ColumnQuantileState;
663-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_QUANTILE_STATE;
664-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_QUANTILE_STATE;
665592
};
666593
template <>
667594
struct PrimitiveTypeTraits<TYPE_UINT32> {
@@ -671,8 +598,6 @@ struct PrimitiveTypeTraits<TYPE_UINT32> {
671598
using ColumnItemType = CppType;
672599
using DataType = vectorized::DataTypeNothing;
673600
using ColumnType = vectorized::ColumnOffset32;
674-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT32;
675-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_UINT32;
676601
};
677602
template <>
678603
struct PrimitiveTypeTraits<TYPE_UINT64> {
@@ -682,8 +607,6 @@ struct PrimitiveTypeTraits<TYPE_UINT64> {
682607
using ColumnItemType = CppType;
683608
using DataType = vectorized::DataTypeNothing;
684609
using ColumnType = vectorized::ColumnOffset64;
685-
static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT64;
686-
static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE;
687610
};
688611

689612
template <PrimitiveType PT>

be/src/vec/aggregate_functions/aggregate_function_avg.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,25 @@
2828
namespace doris::vectorized {
2929
#include "common/compile_check_begin.h"
3030

31+
constexpr PrimitiveType result_type(PrimitiveType T) {
32+
if (T == TYPE_LARGEINT) {
33+
return TYPE_LARGEINT;
34+
} else if (is_int_or_bool(T)) {
35+
return TYPE_BIGINT;
36+
} else if (is_float_or_double(T) || is_time_type(T)) {
37+
return TYPE_DOUBLE;
38+
} else if (is_decimalv3(T) && T != TYPE_DECIMAL256) {
39+
return TYPE_DECIMAL128I;
40+
} else {
41+
return T;
42+
}
43+
}
44+
3145
// TODO: use result type got from FE plan
3246
template <PrimitiveType T>
3347
struct Avg {
3448
static constexpr PrimitiveType ResultPType = T == TYPE_DECIMALV2 ? T : TYPE_DOUBLE;
35-
using Function = AggregateFunctionAvg<
36-
T, ResultPType,
37-
AggregateFunctionAvgData<PrimitiveTypeTraits<T>::AvgNearestPrimitiveType>>;
49+
using Function = AggregateFunctionAvg<T, ResultPType, AggregateFunctionAvgData<result_type(T)>>;
3850
};
3951

4052
template <PrimitiveType T>

be/src/vec/aggregate_functions/aggregate_function_sum.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,24 @@ class AggregateFunctionSum<T, TResult, Data> final
285285
UInt32 scale;
286286
};
287287

288+
constexpr PrimitiveType result_type(PrimitiveType T) {
289+
if (T == TYPE_LARGEINT) {
290+
return TYPE_LARGEINT;
291+
} else if (is_int_or_bool(T)) {
292+
return TYPE_BIGINT;
293+
} else if (is_float_or_double(T) || is_time_type(T)) {
294+
return TYPE_DOUBLE;
295+
} else {
296+
return T;
297+
}
298+
}
299+
288300
// TODO: use result type from FE plan
289301
template <PrimitiveType T>
290302
struct SumSimple {
291303
static_assert(!is_decimalv3(T));
292304
/// @note It uses slow Decimal128 (cause we need such a variant). sumWithOverflow is faster for Decimal32/64
293-
static constexpr PrimitiveType ResultType =
294-
T == TYPE_DECIMALV2 ? TYPE_DECIMALV2 : PrimitiveTypeTraits<T>::NearestPrimitiveType;
305+
static constexpr PrimitiveType ResultType = result_type(T);
295306
using AggregateDataType = AggregateFunctionSumData<ResultType>;
296307
using Function = AggregateFunctionSum<T, ResultType, AggregateDataType>;
297308
};

0 commit comments

Comments
 (0)