]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Synced parser.
authorMichael Meskes <meskes@postgresql.org>
Mon, 27 Sep 2004 09:59:17 +0000 (09:59 +0000)
committerMichael Meskes <meskes@postgresql.org>
Mon, 27 Sep 2004 09:59:17 +0000 (09:59 +0000)
Removed Oracle transaction syntax to fix shift/reduce error.

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/ecpg_keywords.c
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/preproc.y

index f9e3403b293b7a7f14215b1cca81959322479369..bc0c3af03e886607ec192b6445a6b0f8c4723530 100644 (file)
@@ -1859,6 +1859,11 @@ Mon Sep  6 13:17:46 CEST 2004
 
        - Fixed bug in Informix mode that caused a segfault.
        - Set pgtypes library version to 1.2.
+       
+Mon Sep 27 11:05:49 CEST 2004
+
+       - Synced parser.
+       - Removed Oracle transaction syntax to fix shift/reduce error.
        - Set ecpg version to 3.2.0.
        - Set compat library version to 1.2.
        - Set ecpg library version to 4.2.
index f76594dad915f654713a6645dbf8114f1b54e606..6594ada2d211eae1bf0c880888cb15090c46dd46 100644 (file)
@@ -4,7 +4,7 @@
  *       lexical token lookup for reserved words in postgres embedded SQL
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.29 2003/11/29 19:52:08 pgsql Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg_keywords.c,v 1.30 2004/09/27 09:59:17 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,7 +57,6 @@ static ScanKeyword ScanKeywords[] = {
        {"open", SQL_OPEN},
        {"output", SQL_OUTPUT},
        {"reference", SQL_REFERENCE},
-       {"release", SQL_RELEASE},
        {"returned_length", SQL_RETURNED_LENGTH},
        {"returned_octet_length", SQL_RETURNED_OCTET_LENGTH},
        {"scale", SQL_SCALE},
index 004e533267bc09b29e627919001752ab6d5a7dac..d31a5b8bb7a49f47c8ef7691b8b41fd7588398ab 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.66 2004/08/30 02:54:41 momjian Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.67 2004/09/27 09:59:17 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -249,6 +249,7 @@ static ScanKeyword ScanKeywords[] = {
                {"references", REFERENCES},
                {"reindex", REINDEX},
                {"relative", RELATIVE_P},
+               {"release", RELEASE},
                {"rename", RENAME},
                {"repeatable", REPEATABLE},
                {"replace", REPLACE},
@@ -262,6 +263,7 @@ static ScanKeyword ScanKeywords[] = {
                {"row", ROW},
                {"rows", ROWS},
                {"rule", RULE},
+               {"savepoint", SAVEPOINT},
                {"schema", SCHEMA},
                {"scroll", SCROLL},
                {"second", SECOND_P},
index 296b75c0ef10996130da0bec5ec342cbdebdfdbd..32e1b66f6fb97fc1309edde0d1708adbb1b0ae53 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.296 2004/09/06 11:23:07 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.297 2004/09/27 09:59:17 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -326,7 +326,7 @@ add_additional_variables(char *name, bool insert)
                SQL_FREE SQL_GO SQL_GOTO SQL_IDENTIFIED
                SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
                SQL_LONG SQL_NAME SQL_NULLABLE SQL_OCTET_LENGTH
-               SQL_OPEN SQL_OUTPUT SQL_RELEASE SQL_REFERENCE
+               SQL_OPEN SQL_OUTPUT SQL_REFERENCE
                SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE
                SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL SQL_SQLERROR
                SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP
@@ -395,10 +395,11 @@ add_additional_variables(char *name, bool insert)
 
        QUOTE
 
-       READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RENAME REPEATABLE REPLACE
-       RESET RESTART RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW ROWS RULE
+       READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RELEASE RENAME
+       REPEATABLE REPLACE RESET RESTART RESTRICT RETURNS REVOKE RIGHT
+       ROLLBACK ROW ROWS RULE
 
-       SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
+       SAVEPOINT SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
         SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME
         STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT_P
         SUBSTRING SYSID
@@ -472,7 +473,7 @@ add_additional_variables(char *name, bool insert)
 %type  <str>   Typename SimpleTypename Numeric opt_float opt_numeric
 %type  <str>   opt_decimal Character character opt_varying opt_charset
 %type  <str>   opt_timezone opt_interval table_ref fetch_direction
-%type  <str>   ConstDatetime AlterDomainStmt AlterSeqStmt
+%type  <str>   ConstDatetime AlterDomainStmt AlterSeqStmt alter_rel_cmds
 %type  <str>   SelectStmt into_clause OptTemp ConstraintAttributeSpec
 %type  <str>   opt_table opt_all sort_clause sortby_list ConstraintAttr
 %type  <str>   sortby qualified_name_list name_list ColId_or_Sconst
@@ -529,7 +530,7 @@ add_additional_variables(char *name, bool insert)
 %type  <str>   handler_name any_name_list any_name opt_as insert_column_list
 %type  <str>   columnref function_name insert_target_el AllConstVar
 %type  <str>   insert_target_list insert_column_item DropRuleStmt
-%type  <str>   createfunc_opt_item set_rest var_list_or_default
+%type  <str>   createfunc_opt_item set_rest var_list_or_default alter_rel_cmd
 %type  <str>   CreateFunctionStmt createfunc_opt_list func_table
 %type  <str>   DropUserStmt copy_from copy_opt_list copy_opt_item
 %type  <str>   opt_oids TableLikeClause key_action opt_definition
@@ -538,13 +539,13 @@ add_additional_variables(char *name, bool insert)
 %type  <str>   iso_level type_list CharacterWithLength ConstCharacter
 %type  <str>   CharacterWithoutLength BitWithLength BitWithoutLength
 %type  <str>   ConstBit GenericType TableFuncElementList opt_analyze
-%type  <str>   opt_sort_clause transaction_access_mode subquery_Op
+%type  <str>   opt_sort_clause subquery_Op transaction_mode_item
 %type  <str>   ECPGWhenever ECPGConnect connection_target ECPGOpen
 %type  <str>   indicator ECPGExecute ECPGPrepare ecpg_using ecpg_into 
 %type  <str>   storage_declaration storage_clause opt_initializer c_anything
 %type  <str>   variable_list variable c_thing c_term ECPGKeywords_vanames
 %type  <str>   opt_pointer ECPGDisconnect dis_name storage_modifier
-%type  <str>   ECPGRelease execstring server_name ECPGVarDeclaration
+%type  <str>   execstring server_name ECPGVarDeclaration
 %type  <str>   connection_object opt_server opt_port c_stuff c_stuff_item
 %type  <str>   user_name opt_user char_variable ora_user ident opt_reference
 %type  <str>   var_type_declarations quoted_ident_stringvar ECPGKeywords_rest
@@ -561,7 +562,7 @@ add_additional_variables(char *name, bool insert)
 %type  <str>   col_name_keyword func_name_keyword precision opt_scale
 %type  <str>   ECPGTypeName using_list ECPGColLabelCommon UsingConst
 %type  <str>   inf_val_list inf_col_list using_descriptor into_descriptor 
-%type  <str>   prepared_name struct_union_type_with_symbol
+%type  <str>   prepared_name struct_union_type_with_symbol OptConsTableSpace
 %type  <str>   ECPGunreserved ECPGunreserved_interval cvariable
 %type  <str>   AlterOwnerStmt OptTableSpaceOwner CreateTableSpaceStmt
 %type  <str>   DropTableSpaceStmt indirection indirection_el ECPGSetDescriptorHeader
@@ -816,7 +817,7 @@ stmt:  AlterDatabaseSetStmt         { output_statement($1, 0, connection); }
                        whenever_action(2);
                        free($1);
                }
-               | ECPGRelease           { /* output already done */ }
+               /* | ECPGRelease                { / * output already done * / } */
                | ECPGSetAutocommit
                {
                        fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
@@ -1177,15 +1178,18 @@ CheckPointStmt: CHECKPOINT         { $$= make_str("checkpoint"); }
 
 /*****************************************************************************
  *
- *     ALTER TABLE variations
+ *     ALTER [ TABLE | INDEX ] variations
  *
  *****************************************************************************/
 
 AlterTableStmt:
                ALTER TABLE relation_expr alter_table_cmds
                        { $$ = cat_str(3, make_str("alter table"), $3, $4); }
+               |       ALTER INDEX relation_expr alter_rel_cmds
+                       { $$ = cat_str(3, make_str("alter table"), $3, $4); }
                ;
 
+/* Subcommands that are for ALTER TABLE only */
 alter_table_cmds:
                alter_table_cmd                         { $$ = $1; }
                | alter_table_cmds ',' alter_table_cmd  { $$ = cat_str(3, $1, make_str(","), $3); }
@@ -1228,16 +1232,24 @@ alter_table_cmd:
  /* ALTER TABLE <name> CREATE TOAST TABLE */
                | CREATE TOAST TABLE
                        { $$ = make_str("create toast table"); }
-/* ALTER TABLE <name> OWNER TO UserId */
-               | OWNER TO UserId
-                       { $$ = cat_str(2, make_str("owner to"), $3); }
 /* ALTER TABLE <name> CLUSTER ON <indexname> */
                | CLUSTER ON name
                        { $$ = cat_str(2, make_str("cluster on"), $3); }
 /* ALTER TABLE <name> SET WITHOUT CLUSTER */
                | SET WITHOUT CLUSTER
                        { $$ = make_str("set without cluster"); }
-               /* ALTER TABLE <name> SET TABLESPACE <tablespacename> */
+               ;
+
+alter_rel_cmds: alter_rel_cmd                                  { $$ = $1; }
+               | alter_rel_cmds ',' alter_rel_cmd      { $$ = cat_str(3, $1, make_str(","), $3); }
+               ;
+
+/* Subcommands that are for ALTER TABLE or ALTER INDEX */
+alter_rel_cmd:
+               /* ALTER [TABLE|INDEX] <name> OWNER TO UserId */
+               OWNER TO UserId
+                       { $$ = cat_str(2, make_str("owner to"), $3); }
+               /* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename> */
                | SET TABLESPACE name
                        { $$ = cat_str(2, make_str("set tablespace"), $3); }
                ;
@@ -1417,10 +1429,10 @@ ColConstraintElem:      NOT NULL_P
                        { $$ = make_str("not null"); }
                | NULL_P
                        { $$ = make_str("null"); }
-               | UNIQUE
-                       { $$ = make_str("unique"); }
-               | PRIMARY KEY
-                       { $$ = make_str("primary key"); }
+               | UNIQUE OptConsTableSpace
+                       { $$ = cat2_str(make_str("unique"), $2); }
+               | PRIMARY KEY OptConsTableSpace
+                       { $$ = cat2_str(make_str("primary key"), $3); }
                | CHECK '(' a_expr ')'
                        { $$ = cat_str(3, make_str("check ("), $3, make_str(")")); }
                | DEFAULT b_expr
@@ -1470,10 +1482,10 @@ TableConstraint:  CONSTRAINT name ConstraintElem
 
 ConstraintElem:  CHECK '(' a_expr ')'
                        { $$ = cat_str(3, make_str("check("), $3, make_str(")")); }
-               | UNIQUE '(' columnList ')'
-                       { $$ = cat_str(3, make_str("unique("), $3, make_str(")")); }
-               | PRIMARY KEY '(' columnList ')'
-                       { $$ = cat_str(3, make_str("primary key("), $4, make_str(")")); }
+               | UNIQUE '(' columnList ')' OptConsTableSpace
+                       { $$ = cat_str(4, make_str("unique("), $3, make_str(")"), $5); }
+               | PRIMARY KEY '(' columnList ')' OptConsTableSpace
+                       { $$ = cat_str(4, make_str("primary key("), $4, make_str(")"), $6); }
                | FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list
                        key_match key_actions ConstraintAttributeSpec
                        { $$ = 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); }
                | /*EMPTY*/     { $$ = EMPTY; }
                ;
 
+OptConsTableSpace: USING INDEX TABLESPACE name { $$ = cat2_str(make_str("using index tablespace"), $4); }
+                       | /*EMPTY*/             { $$ = EMPTY; }
+                       ;
+                       
 /*
  * Note: CREATE TABLE ... AS SELECT ... is just another spelling for
  * SELECT ... INTO.
@@ -2192,7 +2208,7 @@ index_params:  index_elem                 { $$ = $1; }
                | index_params ',' index_elem   { $$ = cat_str(3, $1, make_str(","), $3); }
                ;
 
-index_elem:  attr_name opt_class
+index_elem:  ColId opt_class
                { $$ = cat2_str($1, $2); }
        | func_name '(' expr_list ')' opt_class
                { $$ = cat_str(5, $1, make_str("("), $3, ")", $5); }
@@ -2416,6 +2432,8 @@ RenameStmt:  ALTER AGGREGATE func_name '(' aggr_argtype ')' RENAME TO name
                        { $$ = cat_str(4, make_str("alter schema"), $3, make_str("rename to"), $6); }
        | ALTER TABLE relation_expr RENAME TO name
                        { $$ = cat_str(4, make_str("alter table"), $3, make_str("rename to"), $6); }
+       | ALTER INDEX relation_expr RENAME TO name
+                       { $$ = cat_str(4, make_str("alter index"), $3, make_str("rename to"), $6); }
        | ALTER TABLE relation_expr RENAME opt_column name TO name
                        { $$ = cat_str(7, make_str("alter table"), $3, make_str("rename"), $5, $6, make_str("to"), $8); }
        | ALTER TRIGGER name ON relation_expr RENAME TO name
@@ -2545,12 +2563,18 @@ UnlistenStmt:  UNLISTEN qualified_name
  *             (also older versions END / ABORT)
  *
  *****************************************************************************/
-TransactionStmt:  ABORT_P opt_transaction              { $$ = make_str("rollback"); }
+TransactionStmt:  ABORT_P opt_transaction                               { $$ = make_str("rollback"); }
                | BEGIN_P opt_transaction transaction_mode_list_or_empty { $$ = cat2_str(make_str("begin transaction"), $3); }
                | START TRANSACTION transaction_mode_list_or_empty       { $$ = cat2_str(make_str("start transaction"), $3); }
-               | COMMIT opt_transaction                { $$ = make_str("commit"); }
-               | END_P opt_transaction         { $$ = make_str("commit"); }
-               | ROLLBACK opt_transaction              { $$ = make_str("rollback"); }
+               | COMMIT opt_transaction                                 { $$ = make_str("commit"); }
+               | END_P opt_transaction                                  { $$ = make_str("commit"); }
+               | ROLLBACK opt_transaction                               { $$ = make_str("rollback"); }
+               | SAVEPOINT ColId                                        { $$ = cat2_str(make_str("savepoint"), $2); }
+               | RELEASE SAVEPOINT ColId                                { $$ = cat2_str(make_str("release savepoint"), $3); }
+               | RELEASE ColId                                          { $$ = cat2_str(make_str("release"), $2); }
+               | ROLLBACK opt_transaction TO SAVEPOINT ColId            { $$ = cat_str(4, make_str("rollback"), $2, make_str("to savepoint"), $5); }
+               | ROLLBACK opt_transaction TO ColId                      { $$ = cat_str(4, make_str("rollback"), $2, make_str("to"), $4); }
+
                ;
 
 opt_transaction: WORK                  { $$ = EMPTY; }
@@ -2558,15 +2582,17 @@ opt_transaction: WORK                   { $$ = EMPTY; }
                | /*EMPTY*/             { $$ = EMPTY; }
                ;
 
-transaction_mode_list:
+transaction_mode_item:
        ISOLATION LEVEL iso_level
        { $$ = cat2_str(make_str("isolation level"), $3); }
-       | transaction_access_mode
-       { $$ = $1; }
-       | ISOLATION LEVEL iso_level transaction_access_mode
-       { $$ = cat_str(3, make_str("isolation level"), $3, $4); }
-       | transaction_access_mode ISOLATION LEVEL iso_level
-       { $$ = cat_str(3, $1, make_str("isolation level"), $4); }
+       | READ ONLY     { $$ = make_str("read only"); }
+       | READ WRITE    { $$ = make_str("read write"); }
+       ;
+       
+transaction_mode_list:
+       transaction_mode_item                                   { $$ = $1; }
+       | transaction_mode_list ',' transaction_mode_item       { $$ = cat_str(3, $1, make_str(","), $3); }
+       | transaction_mode_list transaction_mode_item           { $$ = cat_str(3, $1, make_str(" "), $2); }
        ;
         
 transaction_mode_list_or_empty:
@@ -2574,11 +2600,6 @@ transaction_mode_list_or_empty:
        | /* EMPTY */           { $$ = EMPTY; }
        ;
 
-transaction_access_mode:
-       READ ONLY       { $$ = make_str("read only"); }
-       | READ WRITE    { $$ = make_str("read write"); }
-       ;
-       
 /*****************************************************************************
  *
  *             QUERY:
@@ -4156,7 +4177,7 @@ name_list:  name
 name:                          ColId                   { $$ = $1; };
 database_name:                 ColId                   { $$ = $1; };
 access_method:                 ColId                   { $$ = $1; };
-attr_name:                             ColId                   { $$ = $1; };
+attr_name:                             ColLabel                { $$ = $1; };
 index_name:                            ColId                   { $$ = $1; };
 
 file_name:                             StringConst             { $$ = $1; };
@@ -5453,7 +5474,8 @@ descriptor_item:  SQL_CARDINALITY                 { $$ = ECPGd_cardinality; }
  * after a transaction statement to disconnect from the database.
  */
 
-ECPGRelease: TransactionStmt SQL_RELEASE
+/* We cannot do that anymore since it causes shift/reduce conflicts. 2004-09-27 Michael Meskes
+ECPGRelease: TransactionStmt RELEASE
                {
                        if (strcmp($1, "begin") == 0)
                                                        mmerror(PARSE_ERROR, ET_ERROR, "RELEASE does not make sense when beginning a transaction");
@@ -5467,6 +5489,7 @@ ECPGRelease: TransactionStmt SQL_RELEASE
                        free($1);
                }
                ;
+*/
 
 /*
  * set/reset the automatic transaction mode, this needs a differnet handling
@@ -5728,7 +5751,6 @@ ECPGKeywords_vanames:  SQL_BREAK          { $$ = make_str("break"); }
                | SQL_NAME                      { $$ = make_str("name"); }
                | SQL_NULLABLE                  { $$ = make_str("nullable"); }
                | SQL_OCTET_LENGTH              { $$ = make_str("octet_length"); }
-               | SQL_RELEASE                   { $$ = make_str("release"); }
                | SQL_RETURNED_LENGTH           { $$ = make_str("returned_length"); }
                | SQL_RETURNED_OCTET_LENGTH     { $$ = make_str("returned_octet_length"); }
                | SQL_SCALE                     { $$ = make_str("scale"); }
@@ -5978,6 +6000,7 @@ ECPGunreserved:     ABORT_P                       { $$ = make_str("abort"); }
                | RECHECK                       { $$ = make_str("recheck"); }
                | REINDEX                       { $$ = make_str("reindex"); }
                | RELATIVE_P                    { $$ = make_str("relative"); }
+               | RELEASE                       { $$ = make_str("release"); }
                | RENAME                        { $$ = make_str("rename"); }
                | REPEATABLE                    { $$ = make_str("repeatable"); }
                | REPLACE                       { $$ = make_str("replace"); }
@@ -5989,6 +6012,7 @@ ECPGunreserved:     ABORT_P                       { $$ = make_str("abort"); }
                | ROLLBACK                      { $$ = make_str("rollback"); }
                | ROWS                          { $$ = make_str("rows"); }
                | RULE                          { $$ = make_str("rule"); }
+               | SAVEPOINT                     { $$ = make_str("savepoint"); }
                | SCHEMA                        { $$ = make_str("schema"); }
                | SCROLL                        { $$ = make_str("scroll"); }
 /*             | SECOND_P                      { $$ = make_str("second"); }*/