From 87d95e24295df49fd9b64da275385bc1c775ae2d Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 10 Jul 2017 15:07:32 -0700 Subject: [PATCH 11/16] Avoid dereferencing tts_values/nulls repeatedly. Author: Reviewed-By: Discussion: https://postgr.es/m/ Backpatch: --- src/backend/executor/nodeAgg.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 291f15fd94..a63c05cb68 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -960,6 +960,8 @@ advance_aggregates(AggState *aggstate, AggStatePerGroup *sort_pergroups, AggStat int numHashes = aggstate->num_hashes; int numTrans = aggstate->numtrans; TupleTableSlot *slot = aggstate->evalslot; + Datum *values = slot->tts_values; + bool *nulls = slot->tts_isnull; AggStatePerTrans pertrans; /* compute input for all aggregates */ @@ -1015,8 +1017,7 @@ advance_aggregates(AggState *aggstate, AggStatePerGroup *sort_pergroups, AggStat /* OK, put the tuple into the tuplesort object */ if (pertrans->numInputs == 1) tuplesort_putdatum(pertrans->sortstates[setno], - slot->tts_values[inputoff], - slot->tts_isnull[inputoff]); + values[inputoff], nulls[inputoff]); else { /* @@ -1025,10 +1026,10 @@ advance_aggregates(AggState *aggstate, AggStatePerGroup *sort_pergroups, AggStat */ ExecClearTuple(pertrans->sortslot); memcpy(pertrans->sortslot->tts_values, - &slot->tts_values[inputoff], + &values[inputoff], pertrans->numInputs * sizeof(Datum)); memcpy(pertrans->sortslot->tts_isnull, - &slot->tts_isnull[inputoff], + &nulls[inputoff], pertrans->numInputs * sizeof(bool)); pertrans->sortslot->tts_nvalid = pertrans->numInputs; ExecStoreVirtualTuple(pertrans->sortslot); @@ -1047,8 +1048,8 @@ advance_aggregates(AggState *aggstate, AggStatePerGroup *sort_pergroups, AggStat for (i = 0; i < numTransInputs; i++) { - fcinfo->arg[i + 1] = slot->tts_values[i + inputoff]; - fcinfo->argnull[i + 1] = slot->tts_isnull[i + inputoff]; + fcinfo->arg[i + 1] = values[i + inputoff]; + fcinfo->argnull[i + 1] = nulls[i + inputoff]; } if (sort_pergroups) -- 2.14.1.2.g4274c698f4.dirty