| From: | "Carl-Daniel Hailfinger" <c-d(dot)hailfinger(dot)devel(dot)2006(at)gmx(dot)net> | 
|---|---|
| To: | pgsql-bugs(at)postgresql(dot)org | 
| Subject: | BUG #4275: Multicolumn subquery expression not allowed on both sides of IS DISTINCT FROM | 
| Date: | 2008-07-01 02:47:45 | 
| Message-ID: | 200807010247.m612ljXC053427@wwwmaster.postgresql.org | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-bugs | 
The following bug has been logged online:
Bug reference:      4275
Logged by:          Carl-Daniel Hailfinger
Email address:      c-d(dot)hailfinger(dot)devel(dot)2006(at)gmx(dot)net
PostgreSQL version: 8.2.9
Operating system:   openSUSE Linux 10.3, x86
Description:        Multicolumn subquery expression not allowed on both
sides of IS DISTINCT FROM
Details: 
The PostgreSQL docs say a multicolumn subquery expression is not allowed on
both sides of IS DISTINCT FROM. The implementation conforms to the docs, but
AFAICS the SQL:2003 standard allows multicolumn subquery expressions on both
sides of the operator.
This works:
# SELECT ROW(true,true)=(SELECT true,true);
This doesn't:
# SELECT (SELECT true,true)=(SELECT true,true);
Error:  42601: subquery must return only one column
Location:  transformSubLink, parse_expr.c:1139
Expected result:
The second query has the same result as the first query (true).
Please allow me to explain why I think the standard allows multicolumn
subqueries on both sides of IS DISTINCT FROM:
  <distinct predicate>    ::=   <row value predicand 3> <distinct predicate
part 2>
  <distinct predicate part 2>    ::=   IS DISTINCT FROM <row value predicand
4>
<row value predicand 3> ::= <row value predicand>
<row value predicand 4> ::= <row value predicand>
    <row value predicand>    ::=
         <row value special case>
     |     <row value constructor predicand> 
    <row value constructor predicand>    ::=
         <common value expression>
     |     <boolean predicand>
     |     <explicit row value constructor> 
    <explicit row value constructor>    ::=
         <left paren> <row value constructor element> <comma> <row value
constructor element list> <right paren>
     |     ROW <left paren> <row value constructor element list> <right
paren>
     |     <row subquery> 
So the following should be valid:
  <distinct predicate>    ::=  <row subquery> IS DISTINCT FROM <row
subquery>
Somebody in the #postgresql irc channel was so kind to test this on 8.3.3
with the same results.
Regards,
Carl-Daniel
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Ati Rosselet | 2008-07-01 10:28:58 | Re: just a question re: submitted bug... | 
| Previous Message | Tom Lane | 2008-06-30 23:37:29 | Re: psql: FATAL: the database system is starting up |