File tree Expand file tree Collapse file tree 2 files changed +11
-3
lines changed Expand file tree Collapse file tree 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)
33413341 switch (state1 -> agg_kinds [i ]) {
33423342 case VOPS_AGG_SUM :
33433343 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 )) {
33453346 entry0 -> values [i ].acc .i8 += entry1 -> values [i ].acc .i8 ;
33463347 } else {
33473348 entry0 -> values [i ].acc .f8 += entry1 -> values [i ].acc .f8 ;
@@ -3495,12 +3496,14 @@ Datum vops_reduce(PG_FUNCTION_ARGS)
34953496 user_ctx -> nulls [i ] = false;
34963497 break ;
34973498 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 )
34993501 ? (double )entry -> values [i ].acc .i8
35003502 : entry -> values [i ].acc .f8 );
35013503 break ;
35023504 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 )
35043507 ? (double )entry -> values [i ].acc .i8
35053508 : entry -> values [i ].acc .f8 )/entry -> values [i ].count );
35063509 break ;
Original file line number Diff line number Diff line change @@ -22,6 +22,11 @@ typedef enum
2222 VOPS_LAST ,
2323} vops_type ;
2424
25+ static inline bool is_vops_type_integer (vops_type type )
26+ {
27+ return type < VOPS_FLOAT4 || type == VOPS_INTERVAL ;
28+ }
29+
2530typedef enum
2631{
2732 VOPS_AGG_SUM ,
You can’t perform that action at this time.
0 commit comments