Alexey Klyukin <al...@commandprompt.com> wrote:
> On Aug 29, 2011, at 5:02 PM, Kevin Grittner wrote:
> 
>> Alexey Klyukin <al...@commandprompt.com> wrote:
>> 
>>> Function calls can appear in the FROM clause. (This is
>>> especially useful for functions that return result sets, but any
>>> function can be used.) This acts as though its output were
>>> created as a temporary table for the duration of this single
>>> SELECT command.
>> 
>> It doesn't say that operators which provide equivalent
>> functionality to functions can also be used.
> 
> I agree, but why is it possible to use the type casting with CAST
> there?
 
Because the syntax is that of a function, which is allowed.
 
> Doesn't this break the promise of equivalency between the
> 'CAST .. ' and '::'?
 
No.  Equivalent functionality doesn't imply that the different
syntax forms can be used in the same places; just that they do the
same thing when used.   This is hardly unique to casting. 
Comparison of two text values is done through the texteq function.
 
test=# select val from texteq('a', 'a') as val;
 val
-----
 t
(1 row)
 
test=# select val from 'a' = 'a' as val;
ERROR:  syntax error at or near "'a'"
LINE 1: select val from 'a' = 'a' as val;
                        ^
test=# select val from (select 'a' = 'a') as val;
 val
-----
 (t)
(1 row)
 
> select val from CAST(random() as integer) as val;
>  val 
> -----
>    1
> (1 row)
 
Right.  A function is allowed as a from_item.  Arbitrary expressions
using operators which happen to provide equivalent services are not.
 
-Kevin

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to