|
10 | 10 | * |
11 | 11 | * |
12 | 12 | * IDENTIFICATION |
13 | | - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.117 1999/12/06 18:02:43 wieck Exp $ |
| 13 | + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.118 1999/12/10 03:01:05 tgl Exp $ |
14 | 14 | * |
15 | 15 | * HISTORY |
16 | 16 | * AUTHORDATEMAJOR EVENT |
@@ -362,7 +362,7 @@ static Node *doNegate(Node *n); |
362 | 362 | %rightUMINUS |
363 | 363 | %left'.' |
364 | 364 | %left'[' ']' |
365 | | -%nonassocTYPECAST |
| 365 | +%leftTYPECAST |
366 | 366 | %leftUNION INTERSECT EXCEPT |
367 | 367 | %% |
368 | 368 |
|
@@ -759,11 +759,9 @@ alter_clause: ADD opt_column columnDef |
759 | 759 | } |
760 | 760 | | ADD '(' OptTableElementList ')' |
761 | 761 | { |
762 | | -Node *lp = lfirst($3); |
763 | | - |
764 | 762 | if (length($3) != 1) |
765 | 763 | elog(ERROR,"ALTER TABLE/ADD() allows one column only"); |
766 | | -$$ =lp; |
| 764 | +$$ =(Node *) lfirst($3); |
767 | 765 | } |
768 | 766 | | DROP opt_column ColId |
769 | 767 | {elog(ERROR,"ALTER TABLE/DROP COLUMN not yet implemented"); } |
@@ -1532,7 +1530,7 @@ ConstraintTimeSpec: INITIALLY IMMEDIATE |
1532 | 1530 | | INITIALLY DEFERRED |
1533 | 1531 | { $$ = 2; } |
1534 | 1532 | ; |
1535 | | -
|
| 1533 | + |
1536 | 1534 |
|
1537 | 1535 | DropTrigStmt: DROP TRIGGER name ON relation_name |
1538 | 1536 | { |
@@ -1758,7 +1756,7 @@ comment_tg:TRIGGER { $$ = TRIGGER; } |
1758 | 1756 | ; |
1759 | 1757 |
|
1760 | 1758 | comment_text:Sconst { $$ = $1; } |
1761 | | -| NULL_P { $$ =0; } |
| 1759 | +| NULL_P { $$ =NULL; } |
1762 | 1760 | ; |
1763 | 1761 |
|
1764 | 1762 | /***************************************************************************** |
@@ -3807,6 +3805,17 @@ a_expr: com_expr |
3807 | 3805 | $$ = (Node *)n; |
3808 | 3806 | } |
3809 | 3807 | } |
| 3808 | +/* |
| 3809 | + * Can't collapse this into prior rule by using a_expr_or_null; |
| 3810 | + * that creates reduce/reduce conflicts. Grumble. |
| 3811 | + */ |
| 3812 | +| NULL_P TYPECAST Typename |
| 3813 | +{ |
| 3814 | +A_Const *n = makeNode(A_Const); |
| 3815 | +n->val.type = T_Null; |
| 3816 | +n->typename = $3; |
| 3817 | +$$ = (Node *)n; |
| 3818 | +} |
3810 | 3819 | /* |
3811 | 3820 | * These operators must be called out explicitly in order to make use |
3812 | 3821 | * of yacc/bison's automatic operator-precedence handling. All other |
@@ -4041,6 +4050,13 @@ b_expr: com_expr |
4041 | 4050 | $$ = (Node *)n; |
4042 | 4051 | } |
4043 | 4052 | } |
| 4053 | +| NULL_P TYPECAST Typename |
| 4054 | +{ |
| 4055 | +A_Const *n = makeNode(A_Const); |
| 4056 | +n->val.type = T_Null; |
| 4057 | +n->typename = $3; |
| 4058 | +$$ = (Node *)n; |
| 4059 | +} |
4044 | 4060 | | '-' b_expr %prec UMINUS |
4045 | 4061 | {$$ = doNegate($2); } |
4046 | 4062 | | '%' b_expr |
@@ -4110,7 +4126,7 @@ com_expr: attr |
4110 | 4126 | {$$ = $1; } |
4111 | 4127 | | '(' a_expr_or_null ')' |
4112 | 4128 | {$$ = $2; } |
4113 | | -| CAST '('a_expr AS Typename ')' |
| 4129 | +| CAST '('a_expr_or_null AS Typename ')' |
4114 | 4130 | { |
4115 | 4131 | $$ = (Node *)$3; |
4116 | 4132 | /* AexprConst can be either A_Const or ParamNo */ |
@@ -4870,7 +4886,7 @@ ColId: IDENT{ $$ = $1; } |
4870 | 4886 | | STATEMENT{ $$ = "statement"; } |
4871 | 4887 | | STDIN{ $$ = "stdin"; } |
4872 | 4888 | | STDOUT{ $$ = "stdout"; } |
4873 | | -| SYSID{ $$ = "sysid"; } |
| 4889 | +| SYSID{ $$ = "sysid"; } |
4874 | 4890 | | TIME{ $$ = "time"; } |
4875 | 4891 | | TIMESTAMP{ $$ = "timestamp"; } |
4876 | 4892 | | TIMEZONE_HOUR{ $$ = "timezone_hour"; } |
|