ExecInitAgg: update aggstate->numaggs and ->numtrans earlier.
authorJeff Davis <[email protected]>
Tue, 7 Jan 2025 23:13:50 +0000 (15:13 -0800)
committerJeff Davis <[email protected]>
Tue, 7 Jan 2025 23:13:50 +0000 (15:13 -0800)
Functions hash_agg_entry_size() and build_hash_tables() make use of
those values for memory size estimates.

Because this change only affects memory estimates, don't back.

Discussion: https://postgr.es/m/7530bd8783b1a78d53a3c70383e38d8da0a5ffe5.camel%40j-davis.com

src/backend/executor/nodeAgg.c

index 66cd46169630e3dcb4847642598ea0efa303bba4..3005b5c0e3b89ee38a4ba2288d61c60676232df6 100644 (file)
@@ -3379,8 +3379,8 @@ ExecInitAgg(Agg *node, EState *estate, int eflags)
        max_aggno = Max(max_aggno, aggref->aggno);
        max_transno = Max(max_transno, aggref->aggtransno);
    }
-   numaggs = max_aggno + 1;
-   numtrans = max_transno + 1;
+   aggstate->numaggs = numaggs = max_aggno + 1;
+   aggstate->numtrans = numtrans = max_transno + 1;
 
    /*
     * For each phase, prepare grouping set data and fmgr lookup data for
@@ -3943,13 +3943,6 @@ ExecInitAgg(Agg *node, EState *estate, int eflags)
        ReleaseSysCache(aggTuple);
    }
 
-   /*
-    * Update aggstate->numaggs to be the number of unique aggregates found.
-    * Also set numstates to the number of unique transition states found.
-    */
-   aggstate->numaggs = numaggs;
-   aggstate->numtrans = numtrans;
-
    /*
     * Last, check whether any more aggregates got added onto the node while
     * we processed the expressions for the aggregate arguments (including not