diff options
author | Andres Freund <andres@anarazel.de> | 2020-02-06 19:06:16 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2020-02-06 19:54:43 -0800 |
commit | 1fdb7f9789c4550204cd62d1746a7deed1dc4c29 (patch) | |
tree | 877c68ff731bf42a811be492dca9c79db71494be /src/backend/executor/execExprInterp.c | |
parent | 1ec7679f1b67e84be688a311dce234eeaa1d5de8 (diff) |
expression eval: Don't redundantly keep track of AggState.
It's already tracked via ExprState->parent, so we don't need to also
include it in ExprEvalStep. When that code originally was written
ExprState->parent didn't exist, but it since has been introduced in
6719b238e8f.
Author: Andres Freund
Discussion: https://postgr.es/m/20191023163849.sosqbfs5yenocez3@alap3.anarazel.de
Diffstat (limited to 'src/backend/executor/execExprInterp.c')
-rw-r--r-- | src/backend/executor/execExprInterp.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index 19c117436aa..35eb8b99f69 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -1544,7 +1544,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) EEO_CASE(EEOP_AGG_DESERIALIZE) { FunctionCallInfo fcinfo = op->d.agg_deserialize.fcinfo_data; - AggState *aggstate = op->d.agg_deserialize.aggstate; + AggState *aggstate = castNode(AggState, state->parent); MemoryContext oldContext; /* @@ -1596,10 +1596,9 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) */ EEO_CASE(EEOP_AGG_INIT_TRANS) { - AggState *aggstate; + AggState *aggstate = castNode(AggState, state->parent); AggStatePerGroup pergroup; - aggstate = op->d.agg_init_trans.aggstate; pergroup = &aggstate->all_pergroups [op->d.agg_init_trans.setoff] [op->d.agg_init_trans.transno]; @@ -1624,10 +1623,9 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) /* check that a strict aggregate's input isn't NULL */ EEO_CASE(EEOP_AGG_STRICT_TRANS_CHECK) { - AggState *aggstate; + AggState *aggstate = castNode(AggState, state->parent); AggStatePerGroup pergroup; - aggstate = op->d.agg_strict_trans_check.aggstate; pergroup = &aggstate->all_pergroups [op->d.agg_strict_trans_check.setoff] [op->d.agg_strict_trans_check.transno]; @@ -1645,14 +1643,13 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) */ EEO_CASE(EEOP_AGG_PLAIN_TRANS_BYVAL) { - AggState *aggstate; + AggState *aggstate = castNode(AggState, state->parent); AggStatePerTrans pertrans; AggStatePerGroup pergroup; FunctionCallInfo fcinfo; MemoryContext oldContext; Datum newVal; - aggstate = op->d.agg_trans.aggstate; pertrans = op->d.agg_trans.pertrans; pergroup = &aggstate->all_pergroups @@ -1696,14 +1693,13 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, bool *isnull) */ EEO_CASE(EEOP_AGG_PLAIN_TRANS) { - AggState *aggstate; + AggState *aggstate = castNode(AggState, state->parent); AggStatePerTrans pertrans; AggStatePerGroup pergroup; FunctionCallInfo fcinfo; MemoryContext oldContext; Datum newVal; - aggstate = op->d.agg_trans.aggstate; pertrans = op->d.agg_trans.pertrans; pergroup = &aggstate->all_pergroups @@ -3846,8 +3842,9 @@ ExecEvalXmlExpr(ExprState *state, ExprEvalStep *op) void ExecEvalGroupingFunc(ExprState *state, ExprEvalStep *op) { + AggState *aggstate = castNode(AggState, state->parent); int result = 0; - Bitmapset *grouped_cols = op->d.grouping_func.parent->grouped_cols; + Bitmapset *grouped_cols = aggstate->grouped_cols; ListCell *lc; foreach(lc, op->d.grouping_func.clauses) |