Re: "AS" by the syntax of table reference.(8.4 proposal) - Mailing list pgsql-hackers

From Hiroshi Saito
Subject Re: "AS" by the syntax of table reference.(8.4 proposal)
Date
Msg-id 058001c86ab8$9cc6f370$0301a8c0@HP22720319231
Whole thread Raw
In response to "AS" by the syntax of table reference.(8.4 proposal)  ("Hiroshi Saito" <z-saito@guitar.ocn.ne.jp>)
List pgsql-hackers
----- Original Message ----- 
From: "Tom Lane" <tgl@sss.pgh.pa.us>


> "Hiroshi Saito" <z-saito@guitar.ocn.ne.jp> writes:
>> Oops, and,
>>>> so we really need to support at least ColId as the allowed set of
>>>> column alias names.  (I tried changing the patch to do that, but
>>>> got a lot of shift/reduce conflicts, some of which are maybe fixable
>>>> but some seem hard to fix.)
> 
>> Since capability was insufficient, I spent several times as many time as this.
>> It understands the very hard thing. Hardship had left traces upon this features.
>> I want me to still inquire. 
> 
> The case that I couldn't see a good way to fix was the shift/reduce
> conflicts here:

Eh?, c_expr IDENT is no conflicts....?_?

> 
> state 1414
> 
>  1418 AexprConst: ConstInterval Sconst . opt_interval
> 
>    DAY_P     shift, and go to state 1680
>    HOUR_P    shift, and go to state 1681
>    MINUTE_P  shift, and go to state 1682
>    MONTH_P   shift, and go to state 1683
>    SECOND_P  shift, and go to state 1684
>    YEAR_P    shift, and go to state 1685
> 
>    DAY_P     [reduce using rule 1149 (opt_interval)]
>    HOUR_P    [reduce using rule 1149 (opt_interval)]
>    MINUTE_P  [reduce using rule 1149 (opt_interval)]
>    MONTH_P   [reduce using rule 1149 (opt_interval)]
>    SECOND_P  [reduce using rule 1149 (opt_interval)]
>    YEAR_P    [reduce using rule 1149 (opt_interval)]
>    $default  reduce using rule 1149 (opt_interval)
> 
> What this is pointing out is that without AS, this statement is actually
> ambiguous:
> 
> SELECT INTERVAL '1 year' YEAR;
> 
> Is "YEAR" meant to be a column alias or a qualifier for the interval
> constant?

postgres=# SELECT INTERVAL '1 year' YEAR;interval
----------1 year
(1 row)

Sorry, please let me read the following sentences later.

> 
> AFAICS, the only way to resolve that would be to make YEAR, as well as
> the other interval qualifier words (MONTH etc), not be allowed as a
> ColId ... which is per SQL spec but I confidently predict howls of
> anguish from our users if we do it.  I imagine there are more than
> a few tables out there with columns named "month", for instance.
> 
> I guess plan B could be to rip out the special interval-constant syntax,
> which we have never really implemented anyway.  There isn't any
> functional reason to implement it, it'd just be for spec compliance,
> and you could certainly argue that supporting no-AS is more interesting
> than supporting interval-constant qualifiers.
> 
> The other conflicts I saw could be resolved by making a small number
> of other keywords like CHARACTER and VARYING reserved (or more reserved
> than they are now anyway).  These seemed like they'd be less of a
> problem to reserve than the interval qualifier words.
> 
> However that still leaves us with the problem that c_expr isn't flexible
> enough to make this spec-compliant.  AFAICS the only way to fix that is
> to give up postfix operators.  IMHO, an actual loss of functionality is
> too high a price to pay for being able to omit AS.
> 
> regards, tom lane


pgsql-hackers by date:

Previous
From: "Hiroshi Saito"
Date:
Subject: Re: "AS" by the syntax of table reference.(8.4 proposal)
Next
From: Andrew Dunstan
Date:
Subject: Re: "AS" by the syntax of table reference.(8.4 proposal)