diff options
Diffstat (limited to 'src/backend/executor/execQual.c')
-rw-r--r-- | src/backend/executor/execQual.c | 29 |
1 files changed, 7 insertions, 22 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 01e04d3b14e..d04d1a89a7f 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -4510,35 +4510,20 @@ ExecInitExpr(Expr *node, PlanState *parent) case T_Aggref: { AggrefExprState *astate = makeNode(AggrefExprState); - AggState *aggstate = (AggState *) parent; - Aggref *aggref = (Aggref *) node; astate->xprstate.evalfunc = (ExprStateEvalFunc) ExecEvalAggref; - if (!aggstate || !IsA(aggstate, AggState)) + if (parent && IsA(parent, AggState)) { - /* planner messed up */ - elog(ERROR, "Aggref found in non-Agg plan node"); - } - if (aggref->aggpartial == aggstate->finalizeAggs) - { - /* planner messed up */ - if (aggref->aggpartial) - elog(ERROR, "partial Aggref found in finalize agg plan node"); - else - elog(ERROR, "non-partial Aggref found in non-finalize agg plan node"); - } + AggState *aggstate = (AggState *) parent; - if (aggref->aggcombine != aggstate->combineStates) + aggstate->aggs = lcons(astate, aggstate->aggs); + aggstate->numaggs++; + } + else { /* planner messed up */ - if (aggref->aggcombine) - elog(ERROR, "combine Aggref found in non-combine agg plan node"); - else - elog(ERROR, "non-combine Aggref found in combine agg plan node"); + elog(ERROR, "Aggref found in non-Agg plan node"); } - - aggstate->aggs = lcons(astate, aggstate->aggs); - aggstate->numaggs++; state = (ExprState *) astate; } break; |