• Tom Lane's avatar
    Fix the handling of sub-SELECTs appearing in the arguments of an outer-level · 20a3ddbb
    Tom Lane authored
    aggregate function.  By definition, such a sub-SELECT cannot reference any
    variables of query levels between itself and the aggregate's semantic level
    (else the aggregate would've been assigned to that lower level instead).
    So the correct, most efficient implementation is to treat the sub-SELECT as
    being a sub-select of that outer query level, not the level the aggregate
    syntactically appears in.  Not doing so also confuses the heck out of our
    parameter-passing logic, as illustrated in bug report from Daniel Grace.
    
    Fortunately, we were already copying the whole Aggref expression up to the
    outer query level, so all that's needed is to delay SS_process_sublinks
    processing of the sub-SELECT until control returns to the outer level.
    
    This has been broken since we introduced spec-compliant treatment of
    outer aggregates in 7.4; so patch all the way back.
    20a3ddbb
aggregates.out 10.2 KB