File tree 2 files changed +11
-3
lines changed
2 files changed +11
-3
lines changed Original file line number Diff line number Diff line change @@ -3341,7 +3341,8 @@ Datum vops_agg_combine(PG_FUNCTION_ARGS)
3341
3341
switch (state1 -> agg_kinds [i ]) {
3342
3342
case VOPS_AGG_SUM :
3343
3343
case VOPS_AGG_AVG :
3344
- if (state0 -> agg_type < VOPS_FLOAT4 ) {
3344
+ Assert (state0 -> agg_type != VOPS_TEXT );
3345
+ if (is_vops_type_integer (state0 -> agg_type )) {
3345
3346
entry0 -> values [i ].acc .i8 += entry1 -> values [i ].acc .i8 ;
3346
3347
} else {
3347
3348
entry0 -> values [i ].acc .f8 += entry1 -> values [i ].acc .f8 ;
@@ -3495,12 +3496,14 @@ Datum vops_reduce(PG_FUNCTION_ARGS)
3495
3496
user_ctx -> nulls [i ] = false;
3496
3497
break ;
3497
3498
case VOPS_AGG_SUM :
3498
- user_ctx -> elems [i ] = Float8GetDatum ((state -> agg_type < VOPS_FLOAT4 )
3499
+ Assert (state -> agg_type != VOPS_TEXT );
3500
+ user_ctx -> elems [i ] = Float8GetDatum (is_vops_type_integer (state -> agg_type )
3499
3501
? (double )entry -> values [i ].acc .i8
3500
3502
: entry -> values [i ].acc .f8 );
3501
3503
break ;
3502
3504
case VOPS_AGG_AVG :
3503
- user_ctx -> elems [i ] = Float8GetDatum (((state -> agg_type < VOPS_FLOAT4 )
3505
+ Assert (state -> agg_type != VOPS_TEXT );
3506
+ user_ctx -> elems [i ] = Float8GetDatum ((is_vops_type_integer (state -> agg_type )
3504
3507
? (double )entry -> values [i ].acc .i8
3505
3508
: entry -> values [i ].acc .f8 )/entry -> values [i ].count );
3506
3509
break ;
Original file line number Diff line number Diff line change @@ -22,6 +22,11 @@ typedef enum
22
22
VOPS_LAST ,
23
23
} vops_type ;
24
24
25
+ static inline bool is_vops_type_integer (vops_type type )
26
+ {
27
+ return type < VOPS_FLOAT4 || type == VOPS_INTERVAL ;
28
+ }
29
+
25
30
typedef enum
26
31
{
27
32
VOPS_AGG_SUM ,
You can’t perform that action at this time.
0 commit comments