1
- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.373 2008/10/04 21:56 :55 tgl Exp $ */
1
+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.374 2008/10/07 12:43 :55 meskes Exp $ */
2
2
3
3
/* Copyright comment */
4
4
%{
@@ -621,8 +621,8 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
621
621
%type <str> handler_name any_name_list any_name opt_as insert_column_list
622
622
%type <str> columnref values_clause AllConstVar prep_type_clause ExecuteStmt
623
623
%type <str> insert_column_item DropRuleStmt ctext_expr execute_param_clause
624
- %type <str> createfunc_opt_item set_rest
625
- %type <str> CreateFunctionStmt createfunc_opt_list func_table
624
+ %type <str> createfunc_opt_item set_rest with_clause common_table_expr
625
+ %type <str> CreateFunctionStmt createfunc_opt_list func_table cte_list
626
626
%type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
627
627
%type <str> opt_oids TableLikeClause key_action opt_definition
628
628
%type <str> cast_context row qual_Op qual_all_Op opt_default
@@ -632,7 +632,7 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
632
632
%type <str> ConstBit GenericType TableFuncElementList opt_analyze
633
633
%type <str> opt_sort_clause subquery_Op transaction_mode_item
634
634
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
635
- %type <str> indicator ecpg_using ecpg_into DeallocateStmt
635
+ %type <str> indicator ecpg_using ecpg_into DeallocateStmt interval_second
636
636
%type <str> storage_declaration storage_clause opt_initializer c_anything
637
637
%type <str> variable_list variable c_thing c_term ECPGKeywords_vanames
638
638
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
@@ -2099,7 +2099,7 @@ DefineStmt: CREATE AGGREGATE func_name aggr_args definition
2099
2099
{ $$ = cat_str(4 , make_str(" create aggregate" ), $3 , $4 , $5 ); }
2100
2100
| CREATE AGGREGATE func_name old_aggr_definition
2101
2101
{ $$ = cat_str(3 , make_str(" create aggregate" ), $3 , $4 ); }
2102
- | CREATE OPERATOR all_Op definition
2102
+ | CREATE OPERATOR any_operator definition
2103
2103
{ $$ = cat_str(3 , make_str(" create operator" ), $3 , $4 ); }
2104
2104
| CREATE TYPE_P any_name definition
2105
2105
{ $$ = cat_str(3 , make_str(" create type" ), $3 , $4 ); }
@@ -2169,8 +2169,8 @@ opclass_item_list: opclass_item { $$ = $1; }
2169
2169
2170
2170
opclass_item : OPERATOR PosIntConst any_operator opt_recheck
2171
2171
{ $$ = cat_str(4 , make_str(" operator" ), $2 , $3 , $4 ); }
2172
- | OPERATOR PosIntConst any_operator ' ( ' oper_argtypes ' ) ' opt_recheck
2173
- { $$ = cat_str(7 , make_str(" operator" ), $2 , $3 , make_str( " ( " ), $5 , make_str( " ) " ), $7 ); }
2172
+ | OPERATOR PosIntConst any_operator oper_argtypes opt_recheck
2173
+ { $$ = cat_str(5 , make_str(" operator" ), $2 , $3 , $4 , $5 ); }
2174
2174
| FUNCTION PosIntConst func_name func_args
2175
2175
{ $$ = cat_str(4 , make_str(" function" ), $2 , $3 , $4 ); }
2176
2176
| FUNCTION PosIntConst ' (' type_list ' )' func_name func_args
@@ -2397,8 +2397,8 @@ CommentStmt: COMMENT ON comment_type name IS comment_text
2397
2397
{ $$ = cat_str(5 , make_str(" comment on aggregate" ), $4 , $5 , make_str(" is" ), $7 ); }
2398
2398
| COMMENT ON FUNCTION func_name func_args IS comment_text
2399
2399
{ $$ = cat_str(5 , make_str(" comment on function" ), $4 , $5 , make_str(" is" ), $7 ); }
2400
- | COMMENT ON OPERATOR all_Op ' ( ' oper_argtypes ' ) ' IS comment_text
2401
- { $$ = cat_str(6 , make_str(" comment on operator" ), $4 , make_str( " ( " ), $6 , make_str(" ) is" ), $9 ); }
2400
+ | COMMENT ON OPERATOR any_operator oper_argtypes IS comment_text
2401
+ { $$ = cat_str(5 , make_str(" comment on operator" ), $4 , $5 , make_str(" is" ), $7 ); }
2402
2402
| COMMENT ON TRIGGER name ON any_name IS comment_text
2403
2403
{ $$ = cat_str(6 , make_str(" comment on trigger" ), $4 , make_str(" on" ), $6 , make_str(" is" ), $8 ); }
2404
2404
| COMMENT ON RULE name ON any_name IS comment_text
@@ -2761,23 +2761,23 @@ RemoveAggrStmt: DROP AGGREGATE func_name aggr_args opt_drop_behavior
2761
2761
{ $$ = cat_str(4 , make_str(" drop aggregate if exists" ), $5 , $6 , $7 ); }
2762
2762
;
2763
2763
2764
- RemoveOperStmt : DROP OPERATOR all_Op ' ( ' oper_argtypes ' ) ' opt_drop_behavior
2765
- { $$ = cat_str(6 , make_str(" drop operator" ), $3 , make_str( " ( " ), $5 , make_str( " ) " ), $7 ); }
2766
- | DROP OPERATOR IF_P EXISTS any_operator ' ( ' oper_argtypes ' ) ' opt_drop_behavior
2767
- { $$ = cat_str(6 , make_str(" drop operator if exists" ), $5 , make_str( " ( " ), $7 , make_str( " ) " ), $9 ); }
2764
+ RemoveOperStmt : DROP OPERATOR any_operator oper_argtypes opt_drop_behavior
2765
+ { $$ = cat_str(4 , make_str(" drop operator" ), $3 , $4 , $5 ); }
2766
+ | DROP OPERATOR IF_P EXISTS any_operator oper_argtypes opt_drop_behavior
2767
+ { $$ = cat_str(4 , make_str(" drop operator if exists" ), $5 , $6 , $7 ); }
2768
2768
;
2769
2769
2770
- oper_argtypes : Typename
2770
+ oper_argtypes : ' ( ' Typename ' ) '
2771
2771
{
2772
2772
mmerror (PARSE_ERROR, ET_ERROR, " parser: argument type missing (use NONE for unary operators)" );
2773
2773
$$ = make_str(" none" );
2774
2774
}
2775
- | Typename ' ,' Typename
2776
- { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
2777
- | NONE ' ,' Typename /* left unary */
2778
- { $$ = cat2_str( make_str(" none," ), $3 ); }
2779
- | Typename ' ,' NONE /* right unary */
2780
- { $$ = cat2_str( $1 , make_str(" , none" )); }
2775
+ | ' ( ' Typename ' ,' Typename ' ) '
2776
+ { $$ = cat_str(5 , make_str( " ( " ), $2 , make_str(" ," ), $4 , make_str( " ) " ) ); }
2777
+ | ' ( ' NONE ' ,' Typename ' ) ' /* left unary */
2778
+ { $$ = cat_str( 3 , make_str(" ( none," ), $4 , make_str( " ) " ) ); }
2779
+ | ' ( ' Typename ' ,' NONE ' ) ' /* right unary */
2780
+ { $$ = cat_str( 3 , make_str( " ( " ), $2 , make_str(" , none) " )); }
2781
2781
;
2782
2782
2783
2783
any_operator :
@@ -2930,8 +2930,8 @@ AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
2930
2930
{ $$ = cat_str(4 , make_str(" alter function" ), $3 , make_str(" owner to" ), $6 ); }
2931
2931
| ALTER opt_procedural LANGUAGE name OWNER TO RoleId
2932
2932
{ $$ = cat_str(6 , make_str(" alter" ), $2 , make_str(" language" ), $4 , make_str(" owner to" ), $7 ); }
2933
- | ALTER OPERATOR any_operator ' ( ' oper_argtypes ' ) ' OWNER TO RoleId
2934
- { $$ = cat_str(6 , make_str(" alter operator" ), $3 , make_str( " ( " ), $5 , make_str(" ) owner to" ), $9 ); }
2933
+ | ALTER OPERATOR any_operator oper_argtypes OWNER TO RoleId
2934
+ { $$ = cat_str(5 , make_str(" alter operator" ), $3 , $4 , make_str(" owner to" ), $7 ); }
2935
2935
| ALTER OPERATOR CLASS any_name USING access_method OWNER TO RoleId
2936
2936
{ $$ = cat_str(6 , make_str(" alter operator class" ), $4 , make_str(" using" ), $6 , make_str(" owner to" ), $9 ); }
2937
2937
| ALTER OPERATOR FAMILY any_name USING access_method OWNER TO RoleId
@@ -3162,6 +3162,14 @@ createdb_opt_item: TABLESPACE opt_equal name
3162
3162
{ $$ = cat_str(3 , make_str(" encoding" ), $2 , $3 ); }
3163
3163
| ENCODING opt_equal DEFAULT
3164
3164
{ $$ = cat_str(3 , make_str(" encoding" ), $2 , make_str(" default" )); }
3165
+ | COLLATE opt_equal StringConst
3166
+ { $$ = cat_str(3 , make_str(" collate" ), $2 , $3 ); }
3167
+ | COLLATE opt_equal DEFAULT
3168
+ { $$ = cat_str(3 , make_str(" collate" ), $2 , make_str(" default" )); }
3169
+ | CTYPE opt_equal StringConst
3170
+ { $$ = cat_str(3 , make_str(" ctype" ), $2 , $3 ); }
3171
+ | CTYPE opt_equal DEFAULT
3172
+ { $$ = cat_str(3 , make_str(" ctype" ), $2 , make_str(" default" )); }
3165
3173
| CONNECTION LIMIT opt_equal PosIntConst
3166
3174
{ $$ = cat_str(3 , make_str(" connection limit" ), $3 , $4 ); }
3167
3175
| OWNER opt_equal name
@@ -3598,6 +3606,14 @@ select_no_parens: simple_select
3598
3606
{ $$ = cat_str(4 , $1 , $2 , $3 , $4 ); }
3599
3607
| select_clause opt_sort_clause select_limit opt_for_locking_clause
3600
3608
{ $$ = cat_str(4 , $1 , $2 , $3 , $4 ); }
3609
+ | with_clause simple_select
3610
+ { $$ = cat2_str($1 , $2 ); }
3611
+ | with_clause select_clause sort_clause
3612
+ { $$ = cat_str(3 , $1 , $2 , $3 ); }
3613
+ | with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit
3614
+ { $$ = cat_str(5 , $1 , $2 , $3 , $4 , $5 ); }
3615
+ | with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause
3616
+ { $$ = cat_str(5 , $1 , $2 , $3 , $4 , $5 ); }
3601
3617
;
3602
3618
3603
3619
select_clause : simple_select { $$ = $1 ; }
@@ -3618,6 +3634,21 @@ simple_select: SELECT opt_distinct target_list
3618
3634
{ $$ = cat_str(4 , $1 , make_str(" except" ), $3 , $4 ); }
3619
3635
;
3620
3636
3637
+ with_clause :
3638
+ WITH cte_list { $$ = cat2_str(make_str(" with" ), $2 ); }
3639
+ | WITH RECURSIVE cte_list { $$ = cat2_str(make_str(" with recursive" ), $3 ); }
3640
+ ;
3641
+
3642
+ cte_list :
3643
+ common_table_expr { $$ = $1 ; }
3644
+ | cte_list ' ,' common_table_expr { $$ = cat_str(3 , $1 , make_str(" ," ), $3 ); }
3645
+ ;
3646
+
3647
+
3648
+ common_table_expr : name opt_name_list AS select_with_parens
3649
+ { $$ = cat_str(4 , $1 , $2 , make_str(" as" ), $4 ); }
3650
+ ;
3651
+
3621
3652
into_clause : INTO OptTempTableName
3622
3653
{
3623
3654
FoundInto = 1 ;
@@ -3756,7 +3787,7 @@ for_locking_item:
3756
3787
;
3757
3788
3758
3789
locked_rels_list :
3759
- OF name_list { $$ = cat2_str(make_str(" of" ), $2 ); }
3790
+ OF qualified_name_list { $$ = cat2_str(make_str(" of" ), $2 ); }
3760
3791
| /* EMPTY */ { $$ = EMPTY; }
3761
3792
;
3762
3793
@@ -4123,22 +4154,26 @@ opt_timezone: WITH TIME ZONE
4123
4154
{ $$ = EMPTY; }
4124
4155
;
4125
4156
4126
- opt_interval : YEAR_P { $$ = make_str(" year" ); }
4127
- | MONTH_P { $$ = make_str(" month" ); }
4128
- | DAY_P { $$ = make_str(" day" ); }
4129
- | HOUR_P { $$ = make_str(" hour" ); }
4130
- | MINUTE_P { $$ = make_str(" minute" ); }
4131
- | SECOND_P { $$ = make_str( " second " ) ; }
4157
+ opt_interval : YEAR_P { $$ = make_str(" year" ); }
4158
+ | MONTH_P { $$ = make_str(" month" ); }
4159
+ | DAY_P { $$ = make_str(" day" ); }
4160
+ | HOUR_P { $$ = make_str(" hour" ); }
4161
+ | MINUTE_P { $$ = make_str(" minute" ); }
4162
+ | interval_second { $$ = $1 ; }
4132
4163
| YEAR_P TO MONTH_P { $$ = make_str(" year to month" ); }
4133
4164
| DAY_P TO HOUR_P { $$ = make_str(" day to hour" ); }
4134
4165
| DAY_P TO MINUTE_P { $$ = make_str(" day to minute" ); }
4135
- | DAY_P TO SECOND_P { $$ = make_str(" day to second" ); }
4136
- | HOUR_P TO MINUTE_P { $$ = make_str(" hour to minute" ); }
4137
- | MINUTE_P TO SECOND_P { $$ = make_str(" minute to second" ); }
4138
- | HOUR_P TO SECOND_P { $$ = make_str(" hour to second" ); }
4139
- | /* EMPTY*/ { $$ = EMPTY; }
4166
+ | DAY_P TO interval_second { $$ = make_str(" day to second" ); }
4167
+ | HOUR_P TO MINUTE_P { $$ = make_str(" hour to minute" ); }
4168
+ | MINUTE_P TO interval_second { $$ = make_str(" minute to second" ); }
4169
+ | HOUR_P TO interval_second { $$ = make_str(" hour to second" ); }
4170
+ | /* EMPTY*/ { $$ = EMPTY; }
4140
4171
;
4141
4172
4173
+ interval_second :
4174
+ SECOND_P { $$ = make_str(" second" ); }
4175
+ | SECOND_P ' (' PosIntConst ' )' { $$ = cat_str(3 , make_str(" second(" ), $3 , make_str(" )" )); }
4176
+ ;
4142
4177
4143
4178
/* ****************************************************************************
4144
4179
*
@@ -6518,6 +6553,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
6518
6553
| CREATEROLE { $$ = make_str(" createrole" ); }
6519
6554
| CREATEUSER { $$ = make_str(" createuser" ); }
6520
6555
| CSV { $$ = make_str(" csv" ); }
6556
+ | CTYPE { $$ = make_str(" ctype" ); }
6521
6557
| CURSOR { $$ = make_str(" cursor" ); }
6522
6558
| CYCLE { $$ = make_str(" cycle" ); }
6523
6559
| DATABASE { $$ = make_str(" database" ); }
@@ -6630,6 +6666,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
6630
6666
| READ { $$ = make_str(" read" ); }
6631
6667
| REASSIGN { $$ = make_str(" reassign" ); }
6632
6668
| RECHECK { $$ = make_str(" recheck" ); }
6669
+ | RECURSIVE { $$ = make_str(" recursive" ); }
6633
6670
| REINDEX { $$ = make_str(" reindex" ); }
6634
6671
| RELATIVE_P { $$ = make_str(" relative" ); }
6635
6672
| RELEASE { $$ = make_str(" release" ); }
@@ -6696,7 +6733,6 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
6696
6733
| VIEW { $$ = make_str(" view" ); }
6697
6734
| VOLATILE { $$ = make_str(" volatile" ); }
6698
6735
| WHITESPACE_P { $$ = make_str(" whitespace" ); }
6699
- | WITH { $$ = make_str(" with" ); }
6700
6736
| WITHOUT { $$ = make_str(" without" ); }
6701
6737
| WORK { $$ = make_str(" work" ); }
6702
6738
| WRITE { $$ = make_str(" write" ); }
@@ -6885,6 +6921,7 @@ reserved_keyword:
6885
6921
| VARIADIC { $$ = make_str(" variadic" ); }
6886
6922
| WHEN { $$ = make_str(" when" ); }
6887
6923
| WHERE { $$ = make_str(" where" ); }
6924
+ | WITH { $$ = make_str(" with" ); }
6888
6925
;
6889
6926
6890
6927
0 commit comments