pgsql: Fix collation assignment for aggregates with ORDER BY.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix collation assignment for aggregates with ORDER BY.
Date: 2013-04-26 19:49:47
Message-ID: E1UVoeR-0004av-Ns@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Fix collation assignment for aggregates with ORDER BY.

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

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/41a2760f611d1b3c1e67f755baf0a052b5cec9af

Modified Files
--------------
src/backend/parser/parse_collate.c | 177 +++++++++++++++++----------------
src/test/regress/expected/collate.out | 22 ++++
src/test/regress/sql/collate.sql | 6 +
3 files changed, 121 insertions(+), 84 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message David Fetter 2013-04-26 23:46:54 Re: [COMMITTERS] pgsql: Fix collation assignment for aggregates with ORDER BY.
Previous Message Joe Conway 2013-04-26 19:03:42 pgsql: Ensure that user created rows in extension tables get dumped if

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2013-04-26 19:50:20 Re: Bug Fix: COLLATE with multiple ORDER BYs in aggregates
Previous Message Dimitri Fontaine 2013-04-26 19:35:14 Re: pg_dump with postgis extension dumps rules separately