1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.296 2004/09/06 11:23:07 meskes Exp $*/
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.297 2004/09/27 09:59:17 meskes Exp $*/
22
33/* Copyright comment*/
44%{
@@ -326,7 +326,7 @@ add_additional_variables(char *name, bool insert)
326326SQL_FREE SQL_GO SQL_GOTO SQL_IDENTIFIED
327327SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
328328SQL_LONG SQL_NAME SQL_NULLABLE SQL_OCTET_LENGTH
329- SQL_OPEN SQL_OUTPUT SQL_RELEASE SQL_REFERENCE
329+ SQL_OPEN SQL_OUTPUT SQL_REFERENCE
330330SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE
331331SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL SQL_SQLERROR
332332SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP
@@ -395,10 +395,11 @@ add_additional_variables(char *name, bool insert)
395395
396396QUOTE
397397
398- READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RENAME REPEATABLE REPLACE
399- RESET RESTART RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW ROWS RULE
398+ READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME
399+ REPEATABLE REPLACE RESET RESTART RESTRICT RETURNS REVOKE RIGHT
400+ ROLLBACK ROW ROWS RULE
400401
401- SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
402+ SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
402403 SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME
403404 STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT_P
404405 SUBSTRING SYSID
@@ -472,7 +473,7 @@ add_additional_variables(char *name, bool insert)
472473%type <str> Typename SimpleTypename Numeric opt_float opt_numeric
473474%type <str> opt_decimal Character character opt_varying opt_charset
474475%type <str> opt_timezone opt_interval table_ref fetch_direction
475- %type <str> ConstDatetime AlterDomainStmt AlterSeqStmt
476+ %type <str> ConstDatetime AlterDomainStmt AlterSeqStmt alter_rel_cmds
476477%type <str> SelectStmt into_clause OptTemp ConstraintAttributeSpec
477478%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
478479%type <str> sortby qualified_name_list name_list ColId_or_Sconst
@@ -529,7 +530,7 @@ add_additional_variables(char *name, bool insert)
529530%type <str> handler_name any_name_list any_name opt_as insert_column_list
530531%type <str> columnref function_name insert_target_el AllConstVar
531532%type <str> insert_target_list insert_column_item DropRuleStmt
532- %type <str> createfunc_opt_item set_rest var_list_or_default
533+ %type <str> createfunc_opt_item set_rest var_list_or_default alter_rel_cmd
533534%type <str> CreateFunctionStmt createfunc_opt_list func_table
534535%type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
535536%type <str> opt_oids TableLikeClause key_action opt_definition
@@ -538,13 +539,13 @@ add_additional_variables(char *name, bool insert)
538539%type <str> iso_level type_list CharacterWithLength ConstCharacter
539540%type <str> CharacterWithoutLength BitWithLength BitWithoutLength
540541%type <str> ConstBit GenericType TableFuncElementList opt_analyze
541- %type <str> opt_sort_clause transaction_access_mode subquery_Op
542+ %type <str> opt_sort_clause subquery_Op transaction_mode_item
542543%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
543544%type <str> indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into
544545%type <str> storage_declaration storage_clause opt_initializer c_anything
545546%type <str> variable_list variable c_thing c_term ECPGKeywords_vanames
546547%type <str> opt_pointer ECPGDisconnect dis_name storage_modifier
547- %type <str> ECPGRelease execstring server_name ECPGVarDeclaration
548+ %type <str> execstring server_name ECPGVarDeclaration
548549%type <str> connection_object opt_server opt_port c_stuff c_stuff_item
549550%type <str> user_name opt_user char_variable ora_user ident opt_reference
550551%type <str> var_type_declarations quoted_ident_stringvar ECPGKeywords_rest
@@ -561,7 +562,7 @@ add_additional_variables(char *name, bool insert)
561562%type <str> col_name_keyword func_name_keyword precision opt_scale
562563%type <str> ECPGTypeName using_list ECPGColLabelCommon UsingConst
563564%type <str> inf_val_list inf_col_list using_descriptor into_descriptor
564- %type <str> prepared_name struct_union_type_with_symbol
565+ %type <str> prepared_name struct_union_type_with_symbol OptConsTableSpace
565566%type <str> ECPGunreserved ECPGunreserved_interval cvariable
566567%type <str> AlterOwnerStmt OptTableSpaceOwner CreateTableSpaceStmt
567568%type <str> DropTableSpaceStmt indirection indirection_el ECPGSetDescriptorHeader
@@ -816,7 +817,7 @@ stmt: AlterDatabaseSetStmt{ output_statement($1, 0, connection); }
816817whenever_action (2 );
817818free ($1 );
818819}
819- | ECPGRelease {/* output already done*/ }
820+ /* | ECPGRelease{ / * output already done * / }*/
820821| ECPGSetAutocommit
821822{
822823fprintf (yyout," { ECPGsetcommit(__LINE__,\" %s\" , %s);" , $1 , connection ? connection :" NULL" );
@@ -1177,15 +1178,18 @@ CheckPointStmt: CHECKPOINT { $$= make_str("checkpoint"); }
11771178
11781179/* ****************************************************************************
11791180 *
1180- *ALTER TABLE variations
1181+ *ALTER[ TABLE | INDEX ] variations
11811182 *
11821183 *****************************************************************************/
11831184
11841185AlterTableStmt :
11851186ALTER TABLE relation_expr alter_table_cmds
11861187{$$ = cat_str(3 , make_str(" alter table" ),$3 ,$4 ); }
1188+ | ALTER INDEX relation_expr alter_rel_cmds
1189+ {$$ = cat_str(3 , make_str(" alter table" ),$3 ,$4 ); }
11871190;
11881191
1192+ /* Subcommands that are for ALTER TABLE only*/
11891193alter_table_cmds :
11901194alter_table_cmd {$$ =$1 ; }
11911195| alter_table_cmds ' ,' alter_table_cmd {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
@@ -1228,16 +1232,24 @@ alter_table_cmd:
12281232/* ALTER TABLE <name> CREATE TOAST TABLE*/
12291233| CREATE TOAST TABLE
12301234{$$ = make_str(" create toast table" ); }
1231- /* ALTER TABLE <name> OWNER TO UserId*/
1232- | OWNER TO UserId
1233- {$$ = cat_str(2 , make_str(" owner to" ),$3 ); }
12341235/* ALTER TABLE <name> CLUSTER ON <indexname>*/
12351236| CLUSTER ON name
12361237{$$ = cat_str(2 , make_str(" cluster on" ),$3 ); }
12371238/* ALTER TABLE <name> SET WITHOUT CLUSTER*/
12381239| SET WITHOUT CLUSTER
12391240{$$ = make_str(" set without cluster" ); }
1240- /* ALTER TABLE <name> SET TABLESPACE <tablespacename>*/
1241+ ;
1242+
1243+ alter_rel_cmds :alter_rel_cmd {$$ =$1 ; }
1244+ | alter_rel_cmds ' ,' alter_rel_cmd {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
1245+ ;
1246+
1247+ /* Subcommands that are for ALTER TABLE or ALTER INDEX*/
1248+ alter_rel_cmd :
1249+ /* ALTER [TABLE|INDEX] <name> OWNER TO UserId*/
1250+ OWNER TO UserId
1251+ {$$ = cat_str(2 , make_str(" owner to" ),$3 ); }
1252+ /* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename>*/
12411253| SET TABLESPACE name
12421254{$$ = cat_str(2 , make_str(" set tablespace" ),$3 ); }
12431255;
@@ -1417,10 +1429,10 @@ ColConstraintElem:NOT NULL_P
14171429{$$ = make_str(" not null" ); }
14181430| NULL_P
14191431{$$ = make_str(" null" ); }
1420- | UNIQUE
1421- {$$ = make_str(" unique" ); }
1422- | PRIMARY KEY
1423- {$$ = make_str(" primary key" ); }
1432+ | UNIQUE OptConsTableSpace
1433+ {$$ =cat2_str( make_str(" unique" ), $2 ); }
1434+ | PRIMARY KEY OptConsTableSpace
1435+ {$$ =cat2_str( make_str(" primary key" ), $3 ); }
14241436| CHECK ' (' a_expr ' )'
14251437{$$ = cat_str(3 , make_str(" check (" ),$3 , make_str(" )" )); }
14261438| DEFAULT b_expr
@@ -1470,10 +1482,10 @@ TableConstraint: CONSTRAINT name ConstraintElem
14701482
14711483ConstraintElem :CHECK ' (' a_expr ' )'
14721484{$$ = cat_str(3 , make_str(" check(" ),$3 , make_str(" )" )); }
1473- | UNIQUE ' (' columnList ' )'
1474- {$$ = cat_str(3 , make_str(" unique(" ),$3 , make_str(" )" )); }
1475- | PRIMARY KEY ' (' columnList ' )'
1476- {$$ = cat_str(3 , make_str(" primary key(" ),$4 , make_str(" )" )); }
1485+ | UNIQUE ' (' columnList ' )' OptConsTableSpace
1486+ {$$ = cat_str(4 , make_str(" unique(" ),$3 , make_str(" )" ), $5 ); }
1487+ | PRIMARY KEY ' (' columnList ' )' OptConsTableSpace
1488+ {$$ = cat_str(4 , make_str(" primary key(" ),$4 , make_str(" )" ), $6 ); }
14771489| FOREIGN KEY ' (' columnList ' )' REFERENCES qualified_name opt_column_list
14781490key_match key_actions ConstraintAttributeSpec
14791491{$$ = cat_str(8 , make_str(" foreign key(" ),$4 , make_str(" ) references" ),$7 ,$8 ,$9 ,$10 ,$11 ); }
@@ -1546,6 +1558,10 @@ OptTableSpace: TABLESPACE name{ $$ = cat2_str(make_str("tablespace"), $2); }
15461558| /* EMPTY*/ {$$ = EMPTY; }
15471559;
15481560
1561+ OptConsTableSpace :USING INDEX TABLESPACE name {$$ = cat2_str(make_str(" using index tablespace" ),$4 ); }
1562+ | /* EMPTY*/ {$$ = EMPTY; }
1563+ ;
1564+
15491565/*
15501566 * Note: CREATE TABLE ... AS SELECT ... is just another spelling for
15511567 * SELECT ... INTO.
@@ -2192,7 +2208,7 @@ index_params: index_elem{ $$ = $1; }
21922208| index_params ' ,' index_elem {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
21932209;
21942210
2195- index_elem :attr_name opt_class
2211+ index_elem :ColId opt_class
21962212{$$ = cat2_str($1 ,$2 ); }
21972213| func_name ' (' expr_list ' )' opt_class
21982214{$$ = cat_str(5 ,$1 , make_str(" (" ),$3 ," )" ,$5 ); }
@@ -2416,6 +2432,8 @@ RenameStmt: ALTER AGGREGATE func_name '(' aggr_argtype ')' RENAME TO name
24162432{$$ = cat_str(4 , make_str(" alter schema" ),$3 , make_str(" rename to" ),$6 ); }
24172433| ALTER TABLE relation_expr RENAME TO name
24182434{$$ = cat_str(4 , make_str(" alter table" ),$3 , make_str(" rename to" ),$6 ); }
2435+ | ALTER INDEX relation_expr RENAME TO name
2436+ {$$ = cat_str(4 , make_str(" alter index" ),$3 , make_str(" rename to" ),$6 ); }
24192437| ALTER TABLE relation_expr RENAME opt_column name TO name
24202438{$$ = cat_str(7 , make_str(" alter table" ),$3 , make_str(" rename" ),$5 ,$6 , make_str(" to" ),$8 ); }
24212439| ALTER TRIGGER name ON relation_expr RENAME TO name
@@ -2545,40 +2563,43 @@ UnlistenStmt: UNLISTEN qualified_name
25452563 *(also older versions END / ABORT)
25462564 *
25472565 *****************************************************************************/
2548- TransactionStmt :ABORT_P opt_transaction {$$ = make_str(" rollback" ); }
2566+ TransactionStmt :ABORT_P opt_transaction {$$ = make_str(" rollback" ); }
25492567| BEGIN_P opt_transaction transaction_mode_list_or_empty {$$ = cat2_str(make_str(" begin transaction" ),$3 ); }
25502568| START TRANSACTION transaction_mode_list_or_empty {$$ = cat2_str(make_str(" start transaction" ),$3 ); }
2551- | COMMIT opt_transaction {$$ = make_str(" commit" ); }
2552- | END_P opt_transaction {$$ = make_str(" commit" ); }
2553- | ROLLBACK opt_transaction {$$ = make_str(" rollback" ); }
2569+ | COMMIT opt_transaction {$$ = make_str(" commit" ); }
2570+ | END_P opt_transaction {$$ = make_str(" commit" ); }
2571+ | ROLLBACK opt_transaction {$$ = make_str(" rollback" ); }
2572+ | SAVEPOINT ColId {$$ = cat2_str(make_str(" savepoint" ),$2 ); }
2573+ | RELEASE SAVEPOINT ColId {$$ = cat2_str(make_str(" release savepoint" ),$3 ); }
2574+ | RELEASE ColId {$$ = cat2_str(make_str(" release" ),$2 ); }
2575+ | ROLLBACK opt_transaction TO SAVEPOINT ColId {$$ = cat_str(4 , make_str(" rollback" ),$2 , make_str(" to savepoint" ),$5 ); }
2576+ | ROLLBACK opt_transaction TO ColId {$$ = cat_str(4 , make_str(" rollback" ),$2 , make_str(" to" ),$4 ); }
2577+
25542578;
25552579
25562580opt_transaction :WORK {$$ = EMPTY; }
25572581| TRANSACTION {$$ = EMPTY; }
25582582| /* EMPTY*/ {$$ = EMPTY; }
25592583;
25602584
2561- transaction_mode_list :
2585+ transaction_mode_item :
25622586ISOLATION LEVEL iso_level
25632587{$$ = cat2_str(make_str(" isolation level" ),$3 ); }
2564- | transaction_access_mode
2565- {$$ =$1 ; }
2566- | ISOLATION LEVEL iso_level transaction_access_mode
2567- {$$ = cat_str(3 , make_str(" isolation level" ),$3 ,$4 ); }
2568- | transaction_access_mode ISOLATION LEVEL iso_level
2569- {$$ = cat_str(3 ,$1 , make_str(" isolation level" ),$4 ); }
2588+ | READ ONLY {$$ = make_str(" read only" ); }
2589+ | READ WRITE {$$ = make_str(" read write" ); }
2590+ ;
2591+
2592+ transaction_mode_list :
2593+ transaction_mode_item {$$ =$1 ; }
2594+ | transaction_mode_list ' ,' transaction_mode_item {$$ = cat_str(3 ,$1 , make_str(" ," ),$3 ); }
2595+ | transaction_mode_list transaction_mode_item {$$ = cat_str(3 ,$1 , make_str(" " ),$2 ); }
25702596;
25712597
25722598transaction_mode_list_or_empty :
25732599transaction_mode_list {$$ =$1 ; }
25742600| /* EMPTY*/ {$$ = EMPTY; }
25752601;
25762602
2577- transaction_access_mode :
2578- READ ONLY {$$ = make_str(" read only" ); }
2579- | READ WRITE {$$ = make_str(" read write" ); }
2580- ;
2581-
25822603/* ****************************************************************************
25832604 *
25842605 *QUERY:
@@ -4156,7 +4177,7 @@ name_list: name
41564177name :ColId {$$ =$1 ; };
41574178database_name :ColId {$$ =$1 ; };
41584179access_method :ColId {$$ =$1 ; };
4159- attr_name :ColId {$$ =$1 ; };
4180+ attr_name :ColLabel {$$ =$1 ; };
41604181index_name :ColId {$$ =$1 ; };
41614182
41624183file_name :StringConst {$$ =$1 ; };
@@ -5453,7 +5474,8 @@ descriptor_item:SQL_CARDINALITY{ $$ = ECPGd_cardinality; }
54535474 * after a transaction statement to disconnect from the database.
54545475*/
54555476
5456- ECPGRelease :TransactionStmt SQL_RELEASE
5477+ /* We cannot do that anymore since it causes shift/reduce conflicts. 2004-09-27 Michael Meskes
5478+ ECPGRelease: TransactionStmt RELEASE
54575479{
54585480if (strcmp($1, "begin") == 0)
54595481mmerror(PARSE_ERROR, ET_ERROR, "RELEASE does not make sense when beginning a transaction");
@@ -5467,6 +5489,7 @@ ECPGRelease: TransactionStmt SQL_RELEASE
54675489free($1);
54685490}
54695491;
5492+ */
54705493
54715494/*
54725495 * set/reset the automatic transaction mode, this needs a differnet handling
@@ -5728,7 +5751,6 @@ ECPGKeywords_vanames: SQL_BREAK{ $$ = make_str("break"); }
57285751| SQL_NAME {$$ = make_str(" name" ); }
57295752| SQL_NULLABLE {$$ = make_str(" nullable" ); }
57305753| SQL_OCTET_LENGTH {$$ = make_str(" octet_length" ); }
5731- | SQL_RELEASE {$$ = make_str(" release" ); }
57325754| SQL_RETURNED_LENGTH {$$ = make_str(" returned_length" ); }
57335755| SQL_RETURNED_OCTET_LENGTH {$$ = make_str(" returned_octet_length" ); }
57345756| SQL_SCALE {$$ = make_str(" scale" ); }
@@ -5978,6 +6000,7 @@ ECPGunreserved: ABORT_P{ $$ = make_str("abort"); }
59786000| RECHECK {$$ = make_str(" recheck" ); }
59796001| REINDEX {$$ = make_str(" reindex" ); }
59806002| RELATIVE_P {$$ = make_str(" relative" ); }
6003+ | RELEASE {$$ = make_str(" release" ); }
59816004| RENAME {$$ = make_str(" rename" ); }
59826005| REPEATABLE {$$ = make_str(" repeatable" ); }
59836006| REPLACE {$$ = make_str(" replace" ); }
@@ -5989,6 +6012,7 @@ ECPGunreserved: ABORT_P{ $$ = make_str("abort"); }
59896012| ROLLBACK {$$ = make_str(" rollback" ); }
59906013| ROWS {$$ = make_str(" rows" ); }
59916014| RULE {$$ = make_str(" rule" ); }
6015+ | SAVEPOINT {$$ = make_str(" savepoint" ); }
59926016| SCHEMA {$$ = make_str(" schema" ); }
59936017| SCROLL {$$ = make_str(" scroll" ); }
59946018/* | SECOND_P{ $$ = make_str("second"); }*/