Обсуждение: BUG #4275: Multicolumn subquery expression not allowed on both sides of IS DISTINCT FROM

Поиск
Список
Период
Сортировка

BUG #4275: Multicolumn subquery expression not allowed on both sides of IS DISTINCT FROM

От
"Carl-Daniel Hailfinger"
Дата:
The following bug has been logged online:

Bug reference:      4275
Logged by:          Carl-Daniel Hailfinger
Email address:      c-d.hailfinger.devel.2006@gmx.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
"Carl-Daniel Hailfinger" <c-d.hailfinger.devel.2006@gmx.net> writes:
> 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

This is not a bug, since we do not claim support for feature F641.

            regards, tom lane

Re: BUG #4275: Multicolumn subquery expression not allowed on both sides of IS DISTINCT FROM

От
Carl-Daniel Hailfinger
Дата:
On 01.07.2008 16:32, Tom Lane wrote:
> "Carl-Daniel Hailfinger" <c-d.hailfinger.devel.2006@gmx.net> writes:
>
>> 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
>>
>
> This is not a bug, since we do not claim support for feature F641.
>

Thanks for the information. Is there any plan to support that feature in
8.4?



Regards,
Carl-Daniel
Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> writes:
> On 01.07.2008 16:32, Tom Lane wrote:
>> This is not a bug, since we do not claim support for feature F641.

> Thanks for the information. Is there any plan to support that feature in
> 8.4?

I don't know of anyone working on it at the moment.

            regards, tom lane