Skip to content

Commit 059349b

Browse files
author
Michael Meskes
committed
Synced parser.
1 parent fa3938f commit 059349b

File tree

2 files changed

+76
-35
lines changed

2 files changed

+76
-35
lines changed

src/interfaces/ecpg/ChangeLog

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2374,6 +2374,10 @@ Tue, 19 Aug 2008 12:32:24 +0200
23742374
Wed, 20 Aug 2008 15:49:23 +0200
23752375

23762376
- Synced parser.
2377+
2378+
Tue, 07 Oct 2008 14:35:26 +0200
2379+
2380+
- Synced parser.
23772381
- Set pgtypes library version to 3.1.
23782382
- Set compat library version to 3.1.
23792383
- Set ecpg library version to 6.2.

src/interfaces/ecpg/preproc/preproc.y

Lines changed: 72 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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 $ */
22

33
/* Copyright comment */
44
%{
@@ -621,8 +621,8 @@ add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enu
621621
%type <str> handler_name any_name_list any_name opt_as insert_column_list
622622
%type <str> columnref values_clause AllConstVar prep_type_clause ExecuteStmt
623623
%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
626626
%type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
627627
%type <str> opt_oids TableLikeClause key_action opt_definition
628628
%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
632632
%type <str> ConstBit GenericType TableFuncElementList opt_analyze
633633
%type <str> opt_sort_clause subquery_Op transaction_mode_item
634634
%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
636636
%type <str> storage_declaration storage_clause opt_initializer c_anything
637637
%type <str> variable_list variable c_thing c_term ECPGKeywords_vanames
638638
%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
@@ -2099,7 +2099,7 @@ DefineStmt: CREATE AGGREGATE func_name aggr_args definition
20992099
{ $$ = cat_str(4, make_str("create aggregate"), $3, $4, $5); }
21002100
| CREATE AGGREGATE func_name old_aggr_definition
21012101
{ $$ = cat_str(3, make_str("create aggregate"), $3, $4); }
2102-
| CREATE OPERATOR all_Op definition
2102+
| CREATE OPERATOR any_operator definition
21032103
{ $$ = cat_str(3, make_str("create operator"), $3, $4); }
21042104
| CREATE TYPE_P any_name definition
21052105
{ $$ = cat_str(3, make_str("create type"), $3, $4); }
@@ -2169,8 +2169,8 @@ opclass_item_list: opclass_item { $$ = $1; }
21692169

21702170
opclass_item: OPERATOR PosIntConst any_operator opt_recheck
21712171
{ $$ = 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); }
21742174
| FUNCTION PosIntConst func_name func_args
21752175
{ $$ = cat_str(4, make_str("function"), $2, $3, $4); }
21762176
| FUNCTION PosIntConst '(' type_list ')' func_name func_args
@@ -2397,8 +2397,8 @@ CommentStmt: COMMENT ON comment_type name IS comment_text
23972397
{ $$ = cat_str(5, make_str("comment on aggregate"), $4, $5, make_str("is"), $7); }
23982398
| COMMENT ON FUNCTION func_name func_args IS comment_text
23992399
{ $$ = 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); }
24022402
| COMMENT ON TRIGGER name ON any_name IS comment_text
24032403
{ $$ = cat_str(6, make_str("comment on trigger"), $4, make_str("on"), $6, make_str("is"), $8); }
24042404
| COMMENT ON RULE name ON any_name IS comment_text
@@ -2761,23 +2761,23 @@ RemoveAggrStmt: DROP AGGREGATE func_name aggr_args opt_drop_behavior
27612761
{ $$ = cat_str(4, make_str("drop aggregate if exists"), $5, $6, $7); }
27622762
;
27632763

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); }
27682768
;
27692769

2770-
oper_argtypes: Typename
2770+
oper_argtypes: '(' Typename ')'
27712771
{
27722772
mmerror(PARSE_ERROR, ET_ERROR, "parser: argument type missing (use NONE for unary operators)");
27732773
$$ = make_str("none");
27742774
}
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)")); }
27812781
;
27822782

27832783
any_operator:
@@ -2930,8 +2930,8 @@ AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
29302930
{ $$ = cat_str(4, make_str("alter function"), $3, make_str("owner to"), $6); }
29312931
| ALTER opt_procedural LANGUAGE name OWNER TO RoleId
29322932
{ $$ = 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); }
29352935
| ALTER OPERATOR CLASS any_name USING access_method OWNER TO RoleId
29362936
{ $$ = cat_str(6, make_str("alter operator class"), $4, make_str("using"), $6, make_str("owner to"), $9); }
29372937
| ALTER OPERATOR FAMILY any_name USING access_method OWNER TO RoleId
@@ -3162,6 +3162,14 @@ createdb_opt_item: TABLESPACE opt_equal name
31623162
{ $$ = cat_str(3, make_str("encoding"), $2, $3); }
31633163
| ENCODING opt_equal DEFAULT
31643164
{ $$ = 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")); }
31653173
| CONNECTION LIMIT opt_equal PosIntConst
31663174
{ $$ = cat_str(3, make_str("connection limit"), $3, $4); }
31673175
| OWNER opt_equal name
@@ -3598,6 +3606,14 @@ select_no_parens: simple_select
35983606
{ $$ = cat_str(4, $1, $2, $3, $4); }
35993607
| select_clause opt_sort_clause select_limit opt_for_locking_clause
36003608
{ $$ = 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); }
36013617
;
36023618

36033619
select_clause: simple_select { $$ = $1; }
@@ -3618,6 +3634,21 @@ simple_select: SELECT opt_distinct target_list
36183634
{ $$ = cat_str(4, $1, make_str("except"), $3, $4); }
36193635
;
36203636

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+
36213652
into_clause: INTO OptTempTableName
36223653
{
36233654
FoundInto = 1;
@@ -3756,7 +3787,7 @@ for_locking_item:
37563787
;
37573788

37583789
locked_rels_list:
3759-
OF name_list { $$ = cat2_str(make_str("of"), $2); }
3790+
OF qualified_name_list { $$ = cat2_str(make_str("of"), $2); }
37603791
| /* EMPTY */ { $$ = EMPTY; }
37613792
;
37623793

@@ -4123,22 +4154,26 @@ opt_timezone: WITH TIME ZONE
41234154
{ $$ = EMPTY; }
41244155
;
41254156

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; }
41324163
| YEAR_P TO MONTH_P { $$ = make_str("year to month"); }
41334164
| DAY_P TO HOUR_P { $$ = make_str("day to hour"); }
41344165
| 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; }
41404171
;
41414172

4173+
interval_second:
4174+
SECOND_P { $$ = make_str("second"); }
4175+
| SECOND_P '(' PosIntConst ')' { $$ = cat_str(3, make_str("second("), $3, make_str(")")); }
4176+
;
41424177

41434178
/*****************************************************************************
41444179
*
@@ -6518,6 +6553,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
65186553
| CREATEROLE { $$ = make_str("createrole"); }
65196554
| CREATEUSER { $$ = make_str("createuser"); }
65206555
| CSV { $$ = make_str("csv"); }
6556+
| CTYPE { $$ = make_str("ctype"); }
65216557
| CURSOR { $$ = make_str("cursor"); }
65226558
| CYCLE { $$ = make_str("cycle"); }
65236559
| DATABASE { $$ = make_str("database"); }
@@ -6630,6 +6666,7 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
66306666
| READ { $$ = make_str("read"); }
66316667
| REASSIGN { $$ = make_str("reassign"); }
66326668
| RECHECK { $$ = make_str("recheck"); }
6669+
| RECURSIVE { $$ = make_str("recursive"); }
66336670
| REINDEX { $$ = make_str("reindex"); }
66346671
| RELATIVE_P { $$ = make_str("relative"); }
66356672
| RELEASE { $$ = make_str("release"); }
@@ -6696,7 +6733,6 @@ ECPGunreserved_con: ABORT_P { $$ = make_str("abort"); }
66966733
| VIEW { $$ = make_str("view"); }
66976734
| VOLATILE { $$ = make_str("volatile"); }
66986735
| WHITESPACE_P { $$ = make_str("whitespace"); }
6699-
| WITH { $$ = make_str("with"); }
67006736
| WITHOUT { $$ = make_str("without"); }
67016737
| WORK { $$ = make_str("work"); }
67026738
| WRITE { $$ = make_str("write"); }
@@ -6885,6 +6921,7 @@ reserved_keyword:
68856921
| VARIADIC { $$ = make_str("variadic"); }
68866922
| WHEN { $$ = make_str("when"); }
68876923
| WHERE { $$ = make_str("where"); }
6924+
| WITH { $$ = make_str("with"); }
68886925
;
68896926

68906927

0 commit comments

Comments
 (0)