diff options
Diffstat (limited to 'src/backend/executor/nodeAgg.c')
-rw-r--r-- | src/backend/executor/nodeAgg.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index accc7b1fb7..5b6b180cb9 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -534,6 +534,19 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) outerPlan = outerPlan(node); ExecInitNode(outerPlan, estate, (Plan *) node); + /* + * Result runs in its own context, but make it use our aggregates + * fix for 'select sum(2+2)' + */ + if (nodeTag(outerPlan) == T_Result) + { + ((Result *)outerPlan)->resstate->cstate.cs_ProjInfo->pi_exprContext->ecxt_values = + econtext->ecxt_values; + ((Result *)outerPlan)->resstate->cstate.cs_ProjInfo->pi_exprContext->ecxt_nulls = + econtext->ecxt_nulls; + } + + /* ---------------- * initialize tuple type. * ---------------- |