mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
Move per-agg and per-trans duplicate finding to the planner.
This has the advantage that the cost estimates for aggregates can count the number of calls to transition and final functions correctly. Bump catalog version, because views can contain Aggrefs. Reviewed-by: Andres Freund Discussion: https://www.postgresql.org/message-id/b2e3536b-1dbc-8303-c97e-89cb0b4a9a48%40iki.fi
This commit is contained in:
@ -99,8 +99,7 @@ static void ExecBuildAggTransCall(ExprState *state, AggState *aggstate,
|
||||
* the same as the per-query context of the associated ExprContext.
|
||||
*
|
||||
* Any Aggref, WindowFunc, or SubPlan nodes found in the tree are added to
|
||||
* the lists of such nodes held by the parent PlanState (or more accurately,
|
||||
* the AggrefExprState etc. nodes created for them are added).
|
||||
* the lists of such nodes held by the parent PlanState.
|
||||
*
|
||||
* Note: there is no ExecEndExpr function; we assume that any resource
|
||||
* cleanup needed will be handled by just releasing the memory context
|
||||
@ -779,18 +778,15 @@ ExecInitExprRec(Expr *node, ExprState *state,
|
||||
case T_Aggref:
|
||||
{
|
||||
Aggref *aggref = (Aggref *) node;
|
||||
AggrefExprState *astate = makeNode(AggrefExprState);
|
||||
|
||||
scratch.opcode = EEOP_AGGREF;
|
||||
scratch.d.aggref.astate = astate;
|
||||
astate->aggref = aggref;
|
||||
scratch.d.aggref.aggno = aggref->aggno;
|
||||
|
||||
if (state->parent && IsA(state->parent, AggState))
|
||||
{
|
||||
AggState *aggstate = (AggState *) state->parent;
|
||||
|
||||
aggstate->aggs = lappend(aggstate->aggs, astate);
|
||||
aggstate->numaggs++;
|
||||
aggstate->aggs = lappend(aggstate->aggs, aggref);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user