• Tom Lane's avatar
    Fix improper repetition of previous results from a hashed aggregate. · 2c00fad2
    Tom Lane authored
    ExecReScanAgg's check for whether it could re-use a previously calculated
    hashtable neglected the possibility that the Agg node might reference
    PARAM_EXEC Params that are not referenced by its input plan node.  That's
    okay if the Params are in upper tlist or qual expressions; but if one
    appears in aggregate input expressions, then the hashtable contents need
    to be recomputed when the Param's value changes.
    
    To avoid unnecessary performance degradation in the case of a Param that
    isn't within an aggregate input, add logic to the planner to determine
    which Params are within aggregate inputs.  This requires a new field in
    struct Agg, but fortunately we never write plans to disk, so this isn't
    an initdb-forcing change.
    
    Per report from Jeevan Chalke.  This has been broken since forever,
    so back-patch to all supported branches.
    
    Andrew Gierth, with minor adjustments by me
    
    Report: <CAM2+6=VY8ykfLT5Q8vb9B6EbeBk-NGuLbT6seaQ+Fq4zXvrDcA@mail.gmail.com>
    2c00fad2
copyfuncs.c 104 KB