> On Mar 8, 2017, at 9:40 AM, Andrew Gierth <and...@tao11.riddles.org.uk> wrote:
>>>>>> "Mark" == Mark Dilger <hornschnor...@gmail.com> writes:
> Mark> Hi Andrew,
> Mark> Reviewing the patch a bit more, I find it hard to understand the
> Mark> comment about passing -1 as a flag for finalize_aggregates. Any
> Mark> chance you can spend a bit more time word-smithing that code
> Mark> comment?
> How does this look for wording (I'll incorporate it into an updated
> patch later):
Much better. Thanks!
> * Compute the final value of all aggregates for one group.
> * This function handles only one grouping set at a time. But in the hash
> * case, it's the caller's responsibility to have selected the set already, and
> * we pass in -1 as currentSet here to flag that; this also changes how we
> * handle the indexing into AggStatePerGroup as explained below.
> * Results are stored in the output econtext aggvalues/aggnulls.
> static void
> finalize_aggregates(AggState *aggstate,
> AggStatePerAgg peraggs,
> AggStatePerGroup pergroup,
> int currentSet)
> ExprContext *econtext = aggstate->ss.ps.ps_ExprContext;
> Datum *aggvalues = econtext->ecxt_aggvalues;
> bool *aggnulls = econtext->ecxt_aggnulls;
> int aggno;
> int transno;
> * If currentSet >= 0, then we're doing sorted grouping, and pergroup
> is an
> * array of size numTrans*numSets which we have to index into using
> * currentSet in addition to transno. The caller may not have selected
> * set, so we do that.
> * If currentSet < 0, then we're doing hashed grouping, and pergroup is
> * array of only numTrans items (since for hashed grouping, each
> * set is in a separate hashtable). We rely on the caller having done
> * select_current_set, and we fudge currentSet to 0 in order to make the
> * same indexing calculations work as for the grouping case.
> if (currentSet >= 0)
> select_current_set(aggstate, currentSet, false);
> currentSet = 0;
> Andrew (irc:RhodiumToad)
Sent via pgsql-hackers mailing list (email@example.com)
To make changes to your subscription: