diff options
Diffstat (limited to 'src/backend/parser/parse_agg.c')
-rw-r--r-- | src/backend/parser/parse_agg.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 272d27f919e..9af43d2a328 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -1199,7 +1199,7 @@ void build_aggregate_fnexprs(Oid *agg_input_types, int agg_num_inputs, int agg_num_direct_inputs, - bool agg_ordered_set, + int num_finalfn_inputs, bool agg_variadic, Oid agg_state_type, Oid agg_result_type, @@ -1292,19 +1292,17 @@ build_aggregate_fnexprs(Oid *agg_input_types, argp->location = -1; args = list_make1(argp); - if (agg_ordered_set) + /* finalfn may take additional args, which match agg's input types */ + for (i = 0; i < num_finalfn_inputs - 1; i++) { - for (i = 0; i < agg_num_inputs; i++) - { - argp = makeNode(Param); - argp->paramkind = PARAM_EXEC; - argp->paramid = -1; - argp->paramtype = agg_input_types[i]; - argp->paramtypmod = -1; - argp->paramcollid = agg_input_collation; - argp->location = -1; - args = lappend(args, argp); - } + argp = makeNode(Param); + argp->paramkind = PARAM_EXEC; + argp->paramid = -1; + argp->paramtype = agg_input_types[i]; + argp->paramtypmod = -1; + argp->paramcollid = agg_input_collation; + argp->location = -1; + args = lappend(args, argp); } *finalfnexpr = (Expr *) makeFuncExpr(finalfn_oid, |