findTargetlistEntrySQL92() and COLLATE clause - Mailing list pgsql-hackers

From Amit Langote
Subject findTargetlistEntrySQL92() and COLLATE clause
Date
Msg-id 2173dc58-6697-1e10-9604-a7c9f2a8bb55@lab.ntt.co.jp
Whole thread Raw
Responses Re: findTargetlistEntrySQL92() and COLLATE clause
List pgsql-hackers
Hi,

I couldn't find old discussions or source code comments about this, but
has someone encountered the following error and wondered whether it's
working that way for a reason?

select a::text, b from foo order by 1, 2 collate "C";
ERROR:  collations are not supported by type integer
LINE 1: select a::text, b from foo order by 1, 2 collate "C";
                                                 ^
I expected this to resolve the output column number (2) to actual column
(b) and apply COLLATE clause on top of it.  Attached patch makes it so by
teaching findTargetlistEntrySQL92() to recognize such ORDER BY items and
handle them likewise.  With the patch:

select a::text, b from foo order by 1, 2 collate "C";
 a  │    b
────┼──────────
 ab │ ab wins
 ab │ ab1 wins
 ab │ ab2 wins
(3 rows)

select a::text, b from foo order by 1 collate "C", 2;
 a  │    b
────┼──────────
 ab │ ab1 wins
 ab │ ab2 wins
 ab │ ab wins
(3 rows)

select a::text, b from foo order by 3 collate "C", 2;
ERROR:  ORDER BY position 3 is not in select list
LINE 1: select a::text, b from foo order by 3 collate "C", 2;

Am I missing something?

Thanks,
Amit

Attachment

pgsql-hackers by date:

Previous
From: "Iwata, Aya"
Date:
Subject: RE: libpq debug log
Next
From: John Naylor
Date:
Subject: Re: Unhappy about API changes in the no-fsm-for-small-rels patch