Zoltan Boszormenyi írta:
> Martijn van Oosterhout írta:
>> On Thu, Apr 19, 2007 at 11:19:40AM +0200, Zoltan Boszormenyi wrote:
>>
>>>> The problem comes from cases like
>>>>
>>>> colname coltype DEFAULT 5! GENERATED ...
>>>>
>>>> Since b_expr allows postfix operators, it takes one more token of
>>>> lookahead than we have to tell if the default expression is "5!"
>>>> or "5!GENERATED ...".
>>>>
>>
>> ISTM that as long as:
>>
>> colname coltype DEFAULT (5!) GENERATED ...
>>
>> works I don't see why it would be a problem to require the parentheses
>> in this case. Postfis operators are not going to be that common here I
>> think.
>>
>> Have a nice day,
>>
>
> You mean like this one?
> ------------------------------------------------------------------------
> *** gram.y.old 2007-04-20 09:23:16.000000000 +0200
> --- gram.y 2007-04-20 09:25:34.000000000 +0200
> ***************
> *** 7550,7557 ****
> { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $2, $1, $3, @2); }
> | qual_Op
> b_expr %prec Op
> { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $1, NULL, $2, @1); }
> ! | b_expr
> qual_Op %prec POSTFIXOP
> ! { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $2, $1, NULL, @2); }
> | b_expr IS DISTINCT FROM b_expr
> %prec IS
> {
> $$ = (Node *)
> makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5, @2);
> --- 7550,7557 ----
> { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $2, $1, $3, @2); }
> | qual_Op
> b_expr %prec Op
> { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $1, NULL, $2, @1); }
> ! | '(' b_expr qual_Op
> ')' %prec POSTFIXOP
> ! { $$ = (Node *) makeA_Expr(AEXPR_OP,
> $3, $2, NULL, @3); }
> | b_expr IS DISTINCT FROM b_expr
> %prec IS
> {
> $$ = (Node *)
> makeSimpleA_Expr(AEXPR_DISTINCT, "=", $1, $5, @2);
> ------------------------------------------------------------------------
>
> This change alone brings 13 reduce/reduce conflicts.
On the other hand, marking GENERATED as %right
solves this issue. I hope it's an acceptable solution.
Best regards,
Zoltán Böszörményi
--
----------------------------------
Zoltán Böszörményi
Cybertec Geschwinde & Schönig GmbH
http://www.postgresql.at/