Skip to content

Commit e21ce21

Browse files
author
Karina Litskevich
committed
[PGPRO-9881] Fix wrong type used for VOPS_INTERVAL
Tags: vops
1 parent 69fd09b commit e21ce21

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

Diff for: vops.c

+6-3
Original file line numberDiff line numberDiff 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;

Diff for: vops.h

+5
Original file line numberDiff line numberDiff 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+
2530
typedef enum
2631
{
2732
VOPS_AGG_SUM,

0 commit comments

Comments
 (0)