1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.342 2007/03/27 03:25:28 tgl Exp $*/
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.343 2007/05/10 09:53:17 meskes Exp $*/
22
33/* Copyright comment*/
44%{
@@ -349,7 +349,7 @@ add_additional_variables(char *name, bool insert)
349349SQL_CONTINUE SQL_COUNT SQL_CURRENT SQL_DATA
350350SQL_DATETIME_INTERVAL_CODE
351351SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE
352- SQL_DESCRIPTOR SQL_DISCONNECT SQL_ENUM SQL_FOUND
352+ SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND
353353SQL_FREE SQL_GO SQL_GOTO SQL_IDENTIFIED
354354SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
355355SQL_LONG SQL_NULLABLE SQL_OCTET_LENGTH
@@ -371,7 +371,7 @@ add_additional_variables(char *name, bool insert)
371371
372372/* ordinary key words in alphabetical order*/
373373%token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
374- AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC
374+ AGGREGATE ALL ALSO ALTERALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC
375375ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
376376
377377BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
@@ -387,9 +387,9 @@ add_additional_variables(char *name, bool insert)
387387
388388DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
389389DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS
390- DESC DISABLE_P DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
390+ DESC DISABLE_PDISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
391391
392- EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ESCAPE EXCEPT EXCLUSIVE EXCLUDING
392+ EACH ELSE ENABLE_P ENCODING ENCRYPTED END_PENUM_P ESCAPE EXCEPT EXCLUSIVE EXCLUDING
393393EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
394394
395395FALSE_P FAMILY FETCH FIRST_P FLOAT_P FOR FORCE FOREIGN FORWARD FREEZE FROM
@@ -421,15 +421,15 @@ add_additional_variables(char *name, bool insert)
421421OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ORDER
422422OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER
423423
424- PARTIAL PASSWORD PLACING POSITION
424+ PARTIAL PASSWORD PLACINGPLANS POSITION
425425PRECISION PRESERVE PREPARE PREPARED PRIMARY
426426PRIOR PRIVILEGES PROCEDURAL PROCEDURE
427427
428428QUOTE
429429
430430READ REAL REASSIGN RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME
431- REPEATABLE REPLACE RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT
432- ROLE ROLLBACK ROW ROWS RULE
431+ REPEATABLE REPLACEREPLICA RESET RESTART RESTRICT RETURNING RETURNS REVOKE
432+ RIGHT ROLE ROLLBACK ROW ROWS RULE
433433
434434SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE
435435SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
@@ -504,7 +504,7 @@ add_additional_variables(char *name, bool insert)
504504%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
505505%type <str> ColConstraint ColConstraintElem drop_type Bconst Iresult
506506%type <str> TableConstraint OptTableElementList Xconst opt_transaction
507- %type <str> ConstraintElem key_actions ColQualList
507+ %type <str> ConstraintElem key_actions ColQualList cluster_index_specification
508508%type <str> target_list target_el alias_clause type_func_name_keyword
509509%type <str> qualified_name database_name alter_using type_function_name
510510%type <str> access_method attr_name index_name name func_name
@@ -513,8 +513,8 @@ add_additional_variables(char *name, bool insert)
513513%type <str> opt_indirection expr_list extract_list extract_arg
514514%type <str> position_list substr_list substr_from alter_column_default
515515%type <str> trim_list in_expr substr_for attrs TableFuncElement
516- %type <str> Typename SimpleTypename Numeric opt_float
517- %type <str> Character character opt_varying opt_charset
516+ %type <str> Typename SimpleTypename Numeric opt_float DiscardStmt
517+ %type <str> Character character opt_varying opt_charset enum_val_list
518518%type <str> opt_timezone opt_interval table_ref fetch_direction
519519%type <str> ConstDatetime AlterDomainStmt AlterSeqStmt alter_rel_cmds
520520%type <str> SelectStmt into_clause OptTemp ConstraintAttributeSpec
@@ -736,6 +736,7 @@ stmt: AlterDatabaseStmt{ output_statement($1, 0, connection); }
736736| DeclareCursorStmt { output_simple_statement($1 ); }
737737| DefineStmt { output_statement($1 ,0 , connection); }
738738| DeleteStmt { output_statement($1 ,1 , connection); }
739+ | DiscardStmt { output_statement($1 ,1 , connection); }
739740| DropAssertStmt { output_statement($1 ,0 , connection); }
740741| DropCastStmt { output_statement($1 ,0 , connection); }
741742| DropGroupStmt { output_statement($1 ,0 , connection); }
@@ -1278,6 +1279,12 @@ constraints_set_mode: DEFERRED{ $$ = make_str("deferred"); }
12781279CheckPointStmt :CHECKPOINT {$$ = make_str(" checkpoint" ); }
12791280;
12801281
1282+ DiscardStmt :
1283+ DISCARD ALL {$$ = make_str(" discard all" ); }
1284+ | DISCARD TEMP {$$ = make_str(" discard temp" ); }
1285+ | DISCARD TEMPORARY {$$ = make_str(" discard temporary" ); }
1286+ | DISCARD PLANS {$$ = make_str(" discard plans" ); }
1287+ ;
12811288
12821289/* ****************************************************************************
12831290 *
@@ -1341,6 +1348,12 @@ alter_table_cmd:
13411348/* ALTER TABLE <name> ENABLE TRIGGER <trig>*/
13421349| ENABLE_P TRIGGER name
13431350{$$ = cat2_str(make_str(" enable trigger" ),$3 ); }
1351+ /* ALTER TABLE <name> ENABLE ALWAYS TRIGGER <trig>*/
1352+ | ENABLE_P ALWAYS TRIGGER name
1353+ {$$ = cat2_str(make_str(" enable always trigger" ),$4 ); }
1354+ /* ALTER TABLE <name> ENABLE REPLICA TRIGGER <trig>*/
1355+ | ENABLE_P REPLICA TRIGGER name
1356+ {$$ = cat2_str(make_str(" enable replica trigger" ),$4 ); }
13441357/* ALTER TABLE <name> ENABLE TRIGGER ALL*/
13451358| ENABLE_P TRIGGER ALL
13461359{$$ = make_str(" enable trigger all" ); }
@@ -1356,6 +1369,18 @@ alter_table_cmd:
13561369/* ALTER TABLE <name> DISABLE TRIGGER USER*/
13571370| DISABLE_P TRIGGER USER
13581371{$$ = make_str(" disable trigger user" ); }
1372+ /* ALTER TABLE <name> ENABLE RULE <rule>*/
1373+ | ENABLE_P RULE name
1374+ {$$ = cat2_str(make_str(" enable rule" ),$3 ); }
1375+ /* ALTER TABLE <name> ENABLE ALWAYS RULE <rule>*/
1376+ | ENABLE_P ALWAYS RULE name
1377+ {$$ = cat2_str(make_str(" enable always rule" ),$4 ); }
1378+ /* ALTER TABLE <name> ENABLE REPLICA RULE <rule>*/
1379+ | ENABLE_P REPLICA RULE name
1380+ {$$ = cat2_str(make_str(" enable replica rule" ),$4 ); }
1381+ /* ALTER TABLE <name> DISABLE RULE <rule>*/
1382+ | DISABLE_P RULE name
1383+ {$$ = cat2_str(make_str(" disable rule" ),$3 ); }
13591384/* ALTER TABLE <name> ALTER INHERITS ADD <parent>*/
13601385| INHERIT qualified_name
13611386{$$ = cat2_str(make_str(" inherit" ),$2 ); }
@@ -1407,6 +1432,8 @@ alter_using:USING a_expr{ $$ = cat2_str(make_str("using"), $2); }
14071432
14081433ClosePortalStmt :CLOSE name
14091434{$$ = cat2_str(make_str(" close" ),$2 );}
1435+ | CLOSE ALL
1436+ {$$ = make_str(" close all" ); }
14101437;
14111438
14121439CopyStmt :COPY opt_binary qualified_name opt_oids copy_from
@@ -2009,6 +2036,8 @@ DefineStmt: CREATE AGGREGATE func_name aggr_args definition
20092036{$$ = cat2_str(make_str(" create type" ),$3 ); }
20102037| CREATE TYPE_P any_name AS ' (' TableFuncElementList ' )'
20112038{$$ = cat_str(5 , make_str(" create type" ),$3 , make_str(" as (" ),$6 , make_str(" )" )); }
2039+ | CREATE TYPE_P any_name AS ENUM_P ' (' enum_val_list ' )'
2040+ {$$ = cat_str(5 , make_str(" create type" ),$3 , make_str(" as enum (" ),$7 , make_str(" )" )); }
20122041;
20132042
20142043definition :' (' def_list ' )'
@@ -2044,6 +2073,9 @@ old_aggr_list: old_aggr_elem{ $$ = $1; }
20442073old_aggr_elem :ident ' =' def_arg {$$ = cat_str(3 ,$1 , make_str(" =" ),$3 ); }
20452074;
20462075
2076+ enum_val_list :StringConst {$$ =$1 ; }
2077+ | enum_val_list ' ,' StringConst {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 );}
2078+ ;
20472079
20482080CreateOpClassStmt :CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename
20492081USING access_method opt_opfamily AS opclass_item_list
@@ -2688,8 +2720,8 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
26882720{$$ = cat_str(5 , make_str(" alter function" ),$3 ,$4 , make_str(" rename to" ),$7 ); }
26892721| ALTER GROUP_P RoleId RENAME TO RoleId
26902722{$$ = cat_str(4 , make_str(" alter group" ),$3 , make_str(" rename to" ),$6 ); }
2691- | ALTER LANGUAGE name RENAME TO name
2692- {$$ = cat_str(4 , make_str(" alter language" ),$3 , make_str(" rename to" ),$6 ); }
2723+ | ALTER opt_procedural LANGUAGE name RENAME TO name
2724+ {$$ = cat_str(6 , make_str(" alter" ), $2 , make_str( " language" ),$4 , make_str(" rename to" ),$7 ); }
26932725| ALTER OPERATOR CLASS any_name USING access_method RENAME TO name
26942726{$$ = cat_str(6 , make_str(" alter operator class" ),$4 , make_str(" using" ),$6 , make_str(" rename to" ),$9 ); }
26952727| ALTER OPERATOR FAMILY any_name USING access_method RENAME TO name
@@ -2751,6 +2783,8 @@ AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
27512783{$$ = cat_str(4 , make_str(" alter domain" ),$3 , make_str(" owner to" ),$6 ); }
27522784| ALTER FUNCTION func_name func_args OWNER TO RoleId
27532785{$$ = cat_str(5 , make_str(" alter function" ),$3 ,$4 , make_str(" owner to" ),$7 ); }
2786+ | ALTER opt_procedural LANGUAGE name OWNER TO RoleId
2787+ {$$ = cat_str(6 , make_str(" alter" ),$2 , make_str(" language" ),$4 , make_str(" owner to" ),$7 ); }
27542788| ALTER OPERATOR any_operator ' (' oper_argtypes ' )' OWNER TO RoleId
27552789{$$ = cat_str(6 , make_str(" alter operator" ),$3 , make_str(" (" ),$5 , make_str(" ) owner to" ),$9 ); }
27562790| ALTER OPERATOR CLASS any_name USING access_method OWNER TO RoleId
@@ -2831,15 +2865,15 @@ DropRuleStmt: DROP RULE name ON qualified_name opt_drop_behavior
28312865 *
28322866 *****************************************************************************/
28332867
2834- NotifyStmt :NOTIFY qualified_name
2868+ NotifyStmt :NOTIFY ColId
28352869{$$ = cat2_str(make_str(" notify" ),$2 ); }
28362870;
28372871
2838- ListenStmt :LISTEN qualified_name
2872+ ListenStmt :LISTEN ColId
28392873{$$ = cat2_str(make_str(" listen" ),$2 ); }
28402874;
28412875
2842- UnlistenStmt :UNLISTEN qualified_name
2876+ UnlistenStmt :UNLISTEN ColId
28432877{$$ = cat2_str(make_str(" unlisten" ),$2 ); }
28442878| UNLISTEN ' *'
28452879{$$ = make_str(" unlisten *" ); }
@@ -3075,14 +3109,18 @@ CreateConversionStmt:
30753109 *
30763110 *****************************************************************************/
30773111
3078- ClusterStmt :CLUSTER index_name ON qualified_name
3079- {$$ = cat_str(4 , make_str(" cluster" ),$2 , make_str(" on" ),$4 ); }
3080- | CLUSTER qualified_name
3081- {$$ = cat2_str(make_str(" cluster" ),$2 ); }
3112+ ClusterStmt :CLUSTER qualified_name cluster_index_specification
3113+ {$$ = cat_str(3 ,make_str(" cluster" ),$2 ,$3 ); }
30823114| CLUSTER
30833115{$$ = make_str(" cluster" ); }
3116+ | CLUSTER qualified_name ON qualified_name
3117+ {$$ = cat_str(4 , make_str(" cluster" ),$2 , make_str(" on" ),$4 ); }
30843118;
30853119
3120+ cluster_index_specification :
3121+ USING index_name {$$ = cat2_str(make_str(" using" ),$2 ); }
3122+ | /* EMPTY*/ {$$ = EMPTY; }
3123+ ;
30863124
30873125/* ****************************************************************************
30883126 *
@@ -3185,6 +3223,8 @@ execute_param_clause: '(' expr_list ')'{ $$ = cat_str(3, make_str("("), $2, mak
31853223
31863224DeallocateStmt: DEALLOCATE name{ $$ = cat2_str(make_str("deallocate"), $2); }
31873225| DEALLOCATE PREPARE name{ $$ = cat2_str(make_str("deallocate prepare"), $3); }
3226+ | DEALLOCATE ALL{ $$ = make_str("deallocate all"); }
3227+ | DEALLOCATE PREPARE ALL{ $$ = make_str("deallocate prepare all"); }
31883228;
31893229*/
31903230
@@ -5401,11 +5441,11 @@ var_type:simple_type
54015441}
54025442;
54035443
5404- enum_type :SQL_ENUM symbol enum_definition
5444+ enum_type :ENUM_P symbol enum_definition
54055445{$$ = cat_str(3 , make_str(" enum" ),$2 ,$3 ); }
5406- | SQL_ENUM enum_definition
5446+ | ENUM_P enum_definition
54075447{$$ = cat2_str(make_str(" enum" ),$2 ); }
5408- | SQL_ENUM symbol
5448+ | ENUM_P symbol
54095449{$$ = cat2_str(make_str(" enum" ),$2 ); }
54105450;
54115451
@@ -6367,6 +6407,7 @@ ECPGunreserved_con: ABORT_P{ $$ = make_str("abort"); }
63676407| AGGREGATE {$$ = make_str(" aggregate" ); }
63686408| ALSO {$$ = make_str(" also" ); }
63696409| ALTER {$$ = make_str(" alter" ); }
6410+ | ALWAYS {$$ = make_str(" always" ); }
63706411| ASSERTION {$$ = make_str(" assertion" ); }
63716412| ASSIGNMENT {$$ = make_str(" assignment" ); }
63726413| AT {$$ = make_str(" at" ); }
@@ -6409,6 +6450,7 @@ ECPGunreserved_con: ABORT_P{ $$ = make_str("abort"); }
64096450| DELIMITER {$$ = make_str(" delimiter" ); }
64106451| DELIMITERS {$$ = make_str(" delimiters" ); }
64116452| DISABLE_P {$$ = make_str(" disable" ); }
6453+ | DISCARD {$$ = make_str(" discard" ); }
64126454| DOCUMENT_P {$$ = make_str(" document" ); }
64136455| DOMAIN_P {$$ = make_str(" domain" ); }
64146456| DOUBLE_P {$$ = make_str(" double" ); }
@@ -6417,6 +6459,7 @@ ECPGunreserved_con: ABORT_P{ $$ = make_str("abort"); }
64176459| ENABLE_P {$$ = make_str(" enable" ); }
64186460| ENCODING {$$ = make_str(" encoding" ); }
64196461| ENCRYPTED {$$ = make_str(" encrypted" ); }
6462+ /* | ENUM_P{ $$ = make_str("enum"); }*/
64206463| ESCAPE {$$ = make_str(" escape" ); }
64216464| EXCLUDING {$$ = make_str(" excluding" ); }
64226465| EXCLUSIVE {$$ = make_str(" exclusive" ); }
@@ -6491,6 +6534,7 @@ ECPGunreserved_con: ABORT_P{ $$ = make_str("abort"); }
64916534| OWNER {$$ = make_str(" owner" ); }
64926535| PARTIAL {$$ = make_str(" partial" ); }
64936536| PASSWORD {$$ = make_str(" password" ); }
6537+ | PLANS {$$ = make_str(" plans" ); }
64946538| PREPARE {$$ = make_str(" prepare" ); }
64956539| PREPARED {$$ = make_str(" prepared" ); }
64966540| PRESERVE {$$ = make_str(" preserver" ); }
@@ -6508,6 +6552,7 @@ ECPGunreserved_con: ABORT_P{ $$ = make_str("abort"); }
65086552| RENAME {$$ = make_str(" rename" ); }
65096553| REPEATABLE {$$ = make_str(" repeatable" ); }
65106554| REPLACE {$$ = make_str(" replace" ); }
6555+ | REPLICA {$$ = make_str(" replica" ); }
65116556| RESET {$$ = make_str(" reset" ); }
65126557| RESTART {$$ = make_str(" restart" ); }
65136558| RESTRICT {$$ = make_str(" restrict" ); }
@@ -6903,7 +6948,7 @@ c_anything: IDENT{ $$ = $1; }
69036948| S_TYPEDEF {$$ = make_str(" typedef" ); }
69046949| S_VOLATILE {$$ = make_str(" volatile" ); }
69056950| SQL_BOOL {$$ = make_str(" bool" ); }
6906- | SQL_ENUM {$$ = make_str(" enum" ); }
6951+ | ENUM_P {$$ = make_str(" enum" ); }
69076952| HOUR_P {$$ = make_str(" hour" ); }
69086953| INT_P {$$ = make_str(" int" ); }
69096954| SQL_LONG {$$ = make_str(" long" ); }