• Tom Lane's avatar
    Fix AggGetAggref() so it won't lie to aggregate final functions. · 305cf1fd
    Tom Lane authored
    If we merge the transition calculations for two different aggregates,
    it's reasonable to assume that the transition function should not care
    which of those Aggref structs it gets from AggGetAggref().  It is not
    reasonable to make the same assumption about an aggregate final function,
    however.  Commit 804163bc broke this, as it will pass whichever Aggref
    was first associated with the transition state in both cases.
    
    This doesn't create an observable bug so far as the core system is
    concerned, because the only existing uses of AggGetAggref() are in
    ordered-set aggregates that happen to not pay attention to anything
    but the input properties of the Aggref; and besides that, we disabled
    sharing of transition calculations for OSAs yesterday.  Nonetheless,
    if some third-party code were using AggGetAggref() in a normal aggregate,
    they would be entitled to call this a bug.  Hence, back-patch the fix
    to 9.6 where the problem was introduced.
    
    In passing, improve some of the comments about transition state sharing.
    
    Discussion: https://postgr.es/m/CAB4ELO5RZhOamuT9Xsf72ozbenDLLXZKSk07FiSVsuJNZB861A@mail.gmail.com
    305cf1fd
execnodes.h 74.3 KB