• Tom Lane's avatar
    Fix collation assignment for aggregates with ORDER BY. · 41a2760f
    Tom Lane authored
    ORDER BY expressions were being treated the same as regular aggregate
    arguments for purposes of collation determination, but really they should
    not affect the aggregate's collation at all; only collations of the
    aggregate's regular arguments should affect it.
    
    In many cases this mistake would lead to incorrectly throwing a "collation
    conflict" error; but in some cases the corrected code will silently assign
    a different collation to the aggregate than before, for example
    	agg(foo ORDER BY bar COLLATE "x")
    which will now use foo's collation rather than "x" for the aggregate.
    Given this risk and the lack of field complaints about the issue, it
    doesn't seem prudent to back-patch.
    
    In passing, rearrange code in assign_collations_walker so that we don't
    need multiple copies of the standard logic for computing collation of a
    node with children.  (Previously, CaseExpr duplicated the standard logic,
    and we would have needed a third copy for Aggref without this change.)
    
    Andrew Gierth and David Fetter
    41a2760f
collate.sql 8.83 KB