• Tom Lane's avatar
    Rethink node-level representation of partial-aggregation modes. · 19e972d5
    Tom Lane authored
    The original coding had three separate booleans representing partial
    aggregation behavior, which was confusing, unreadable, and error-prone,
    not least because the booleans weren't always listed in the same order.
    It was also inadequate for the allegedly-desirable future extension to
    support intermediate partial aggregation, because we'd need separate
    markers for serialization and deserialization in such a case.
    
    Merge these bools into an enum "AggSplit" to provide symbolic names for
    the supported operating modes (and document what those are).  By assigning
    the values of the enum constants carefully, we can treat AggSplit values
    as options bitmasks so that tests of what to do aren't noticeably more
    expensive than before.
    
    While at it, get rid of Aggref.aggoutputtype.  That's not needed since
    commit 59a3795c got rid of setrefs.c's special-purpose Aggref comparison
    code, and it likewise seemed more confusing than helpful.
    
    Assorted comment cleanup as well (there's still more that I want to do
    in that line).
    
    catversion bump for change in Aggref node contents.  Should be the last
    one for partial-aggregation changes.
    
    Discussion: <29309.1466699160@sss.pgh.pa.us>
    19e972d5
prepunion.c 64.6 KB