1- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.205 2002/12/13 20:29:07 momjian Exp $*/
1+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.206 2003/01/21 20:01:12 meskes Exp $*/
22
33/* Copyright comment*/
44%{
@@ -290,7 +290,7 @@ make_name(void)
290290%type <str> comment_text ConstraintDeferrabilitySpec TableElementList
291291%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
292292%type <str> ColConstraint ColConstraintElem drop_type Bconst
293- %type <str> TableConstraint OptTableElementList Xconst
293+ %type <str> TableConstraint OptTableElementList Xconst opt_transaction
294294%type <str> ConstraintElem key_actions ColQualList type_name
295295%type <str> target_list target_el update_target_list alias_clause
296296%type <str> update_target_el opt_id qualified_name database_name
@@ -303,7 +303,7 @@ make_name(void)
303303%type <str> Typename SimpleTypename Numeric opt_float opt_numeric
304304%type <str> opt_decimal Character character opt_varying opt_charset
305305%type <str> opt_collate opt_timezone opt_interval table_ref
306- %type <str> row_descriptor ConstDatetime trans_options
306+ %type <str> row_descriptor ConstDatetime AlterDomainStmt
307307%type <str> SelectStmt into_clause OptTemp ConstraintAttributeSpec
308308%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
309309%type <str> sortby OptUseOp qualified_name_list name_list ColId_or_Sconst
@@ -329,7 +329,7 @@ make_name(void)
329329%type <str> RemoveOperStmt RenameStmt all_Op opt_Trusted opt_lancompiler
330330%type <str> VariableSetStmt var_value zone_value VariableShowStmt
331331%type <str> VariableResetStmt AlterTableStmt from_list overlay_list
332- %type <str> opt_trans user_list OptUserList OptUserElem relation_name
332+ %type <str> user_list OptUserList OptUserElem relation_name
333333%type <str> CreateUserStmt AlterUserStmt CreateSeqStmt OptSeqList
334334%type <str> OptSeqElem TriggerForSpec TriggerForOpt TriggerForType
335335%type <str> DropTrigStmt TriggerOneEvent TriggerEvents RuleActionStmt
@@ -339,6 +339,7 @@ make_name(void)
339339%type <str> createdb_opt_list opt_encoding OptInherit opt_equal
340340%type <str> AlterUserSetStmt privilege_list privilege privilege_target
341341%type <str> opt_grant_grant_option opt_revoke_grant_option
342+ %type <str> transaction_mode_list_or_empty transaction_mode_list
342343%type <str> function_with_argtypes_list function_with_argtypes
343344%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit DropOpClassStmt
344345%type <str> GrantStmt privileges PosAllConst constraints_set_list
@@ -361,14 +362,14 @@ make_name(void)
361362%type <str> insert_target_list insert_column_item DropRuleStmt
362363%type <str> createfunc_opt_item set_rest var_list_or_default
363364%type <str> CreateFunctionStmt createfunc_opt_list func_table
364- %type <str> DropUserStmt copy_from copy_opt_list opt_mode copy_opt_item
365+ %type <str> DropUserStmt copy_from copy_opt_list copy_opt_item
365366%type <str> opt_oids TableLikeClause key_action opt_definition
366367%type <str> cast_context row r_expr qual_Op qual_all_Op opt_default
367368%type <str> CreateConversionStmt any_operator opclass_item_list
368369%type <str> iso_level type_list CharacterWithLength ConstCharacter
369370%type <str> CharacterWithoutLength BitWithLength BitWithoutLength
370371%type <str> ConstBit GenericType TableFuncElementList
371- %type <str> opt_sort_clause
372+ %type <str> opt_sort_clause transaction_access_mode
372373
373374%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
374375%type <str> indicator ECPGExecute ECPGPrepare opt_ecpg_using ecpg_into
@@ -435,6 +436,7 @@ opt_at: AT connection_target
435436};
436437
437438stmt :AlterDatabaseSetStmt { output_statement($1 ,0 , connection); }
439+ | AlterDomainStmt { output_statement($1 ,0 , connection); }
438440| AlterGroupStmt { output_statement($1 ,0 , connection); }
439441| AlterTableStmt { output_statement($1 ,0 , connection); }
440442| AlterUserStmt { output_statement($1 ,0 , connection); }
@@ -842,10 +844,10 @@ set_rest:ColId TO var_list_or_default
842844 {$$ = cat_str(3 ,$1 , make_str(" =" ),$3 ); }
843845| TIME ZONE zone_value
844846{$$ = cat2_str(make_str(" time zone" ),$3 ); }
845- | TRANSACTION ISOLATION LEVEL iso_level opt_mode
846- {$$ =cat_str( 3 , make_str(" transaction isolation level " ),$4 , $5 ); }
847- | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL iso_level
848- {$$ = cat2_str(make_str(" session characteristics as transaction isolation level " ),$7 ); }
847+ | TRANSACTION transaction_mode_list
848+ {$$ =cat2_str( make_str(" transaction" ),$2 ); }
849+ | SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list
850+ {$$ = cat2_str(make_str(" session characteristics as transaction" ),$5 ); }
849851| NAMES opt_encoding
850852{$$ = cat2_str(make_str(" names" ),$2 ); }
851853| SESSION AUTHORIZATION ColId_or_Sconst
@@ -870,12 +872,6 @@ iso_level:READ COMMITTED{ $$ = make_str("read committed"); }
870872| SERIALIZABLE {$$ = make_str(" serializable" ); }
871873;
872874
873- opt_mode :READ WRITE {$$ = make_str(" read write" ); }
874- | READ ONLY { mmerror(PARSE_ERROR, ET_ERROR," SET TRANSACTION/READ ONLY is not yet supported" );
875- $$ = make_str(" read only" ); }
876- | /* EMPTY*/ {$$ = EMPTY; }
877- ;
878-
879875var_value :opt_boolean {$$ =$1 ; }
880876| AllConst {$$ =$1 ; }
881877| ColId {$$ =$1 ; }
@@ -1657,12 +1653,7 @@ TruncateStmt: TRUNCATE opt_table qualified_name
16571653 *****************************************************************************/
16581654
16591655FetchStmt :FETCH direction fetch_how_many from_in name ecpg_into
1660- {
1661- if (strcmp($2 ," relative" ) ==0 && atol($3 ) ==0L )
1662- mmerror (PARSE_ERROR, ET_ERROR," FETCH/RELATIVE at current position is not supported" );
1663-
1664- $$ = cat_str(5 , make_str(" fetch" ),$2 ,$3 ,$4 ,$5 );
1665- }
1656+ {$$ = cat_str(5 , make_str(" fetch" ),$2 ,$3 ,$4 ,$5 ); }
16661657| FETCH fetch_how_many from_in name ecpg_into
16671658{$$ = cat_str(4 , make_str(" fetch" ),$2 ,$3 ,$4 ); }
16681659| FETCH direction from_in name ecpg_into
@@ -1758,8 +1749,14 @@ GrantStmt:GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_
17581749{$$ = cat_str(7 , make_str(" grant" ),$2 , make_str(" on" ),$4 , make_str(" to" ),$6 ,$7 ); }
17591750;
17601751
1761- RevokeStmt :REVOKE opt_revoke_grant_option privileges ON privilege_target FROM grantee_list
1762- {$$ = cat_str(8 , make_str(" revoke" ),$2 ,$3 , make_str(" on" ),$5 , make_str(" from" ),$7 ); }
1752+ RevokeStmt :REVOKE opt_revoke_grant_option privileges ON privilege_target FROM grantee_list opt_drop_behavior
1753+ {
1754+ if (strcmp($8 ," drop cascade" ) ==0 )
1755+ mmerror (PARSE_ERROR, ET_WARNING," Not implemented REVOKE ... CASCADE will be send to backend" );
1756+
1757+ $$ = cat_str(9 , make_str(" revoke" ),$2 ,$3 , make_str(" on" ),$5 , make_str(" from" ),$7 ,$8 );
1758+ }
1759+
17631760;
17641761
17651762privileges :ALL PRIVILEGES {$$ = make_str(" all privileges" ); }
@@ -2178,22 +2175,40 @@ UnlistenStmt: UNLISTEN qualified_name
21782175 *(also older versions END / ABORT)
21792176 *
21802177 *****************************************************************************/
2181- TransactionStmt :ABORT_TRANS opt_trans {$$ = make_str(" rollback" ); }
2182- | BEGIN_TRANS opt_trans {$$ = make_str(" begin transaction" ); }
2183- | START TRANSACTION trans_options {$$ = cat2_str(make_str(" start transaction" ),$3 ); }
2184- | COMMIT opt_trans {$$ = make_str(" commit" ); }
2185- | END_TRANS opt_trans {$$ = make_str(" commit" ); }
2186- | ROLLBACK opt_trans {$$ = make_str(" rollback" ); }
2187- ;
2188-
2189- trans_options :ISOLATION LEVEL iso_level {$$ = cat2_str(make_str(" isolation level" ),$3 ); }
2178+ TransactionStmt :ABORT_TRANS opt_transaction {$$ = make_str(" rollback" ); }
2179+ | BEGIN_TRANS opt_transaction {$$ = make_str(" begin transaction" ); }
2180+ | START TRANSACTION transaction_mode_list_or_empty {$$ = cat2_str(make_str(" start transaction" ),$3 ); }
2181+ | COMMIT opt_transaction {$$ = make_str(" commit" ); }
2182+ | END_TRANS opt_transaction {$$ = make_str(" commit" ); }
2183+ | ROLLBACK opt_transaction {$$ = make_str(" rollback" ); }
21902184;
21912185
2192- opt_trans :WORK {$$ = EMPTY; }
2186+ opt_transaction :WORK {$$ = EMPTY; }
21932187| TRANSACTION {$$ = EMPTY; }
21942188| /* EMPTY*/ {$$ = EMPTY; }
21952189;
21962190
2191+ transaction_mode_list :
2192+ ISOLATION LEVEL iso_level
2193+ {$$ = cat2_str(make_str(" isolation level" ),$3 ); }
2194+ | transaction_access_mode
2195+ {$$ =$1 ; }
2196+ | ISOLATION LEVEL iso_level transaction_access_mode
2197+ {$$ = cat_str(3 , make_str(" isolation level" ),$3 ,$4 ); }
2198+ | transaction_access_mode ISOLATION LEVEL iso_level
2199+ {$$ = cat_str(3 ,$1 , make_str(" isolation level" ),$4 ); }
2200+ ;
2201+
2202+ transaction_mode_list_or_empty :
2203+ transaction_mode_list {$$ =$1 ; }
2204+ | /* EMPTY*/ {$$ = EMPTY; }
2205+ ;
2206+
2207+ transaction_access_mode :
2208+ READ ONLY {$$ = make_str(" read only" ); }
2209+ | READ WRITE {$$ = make_str(" read write" ); }
2210+ ;
2211+
21972212/* ****************************************************************************
21982213 *
21992214 *QUERY:
@@ -2297,6 +2312,21 @@ CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_coll
22972312 }
22982313;
22992314
2315+ AlterDomainStmt :
2316+ ALTER DOMAIN_P any_name alter_column_default
2317+ {$$ = cat_str(3 , make_str(" alter domain" ),$3 ,$4 ); }
2318+ | ALTER DOMAIN_P any_name DROP NOT NULL_P
2319+ {$$ = cat_str(3 , make_str(" alter domain" ),$3 , make_str(" drop not null" )); }
2320+ | ALTER DOMAIN_P any_name SET NOT NULL_P
2321+ {$$ = cat_str(3 , make_str(" alter domain" ),$3 , make_str(" set not null" )); }
2322+ | ALTER DOMAIN_P any_name ADD TableConstraint
2323+ {$$ = cat_str(4 , make_str(" alter domain" ),$3 , make_str(" add" ),$5 ); }
2324+ | ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior
2325+ {$$ = cat_str(5 , make_str(" alter domain" ),$3 , make_str(" drop constraint" ),$6 ,$7 ); }
2326+ | ALTER DOMAIN_P any_name OWNER TO UserId
2327+ {$$ = cat_str(4 , make_str(" alter domain" ),$3 , make_str(" owner to" ),$6 ); }
2328+ ;
2329+
23002330opt_as :AS {$$ = make_str(" as" ); }
23012331| /* EMPTY*/ {$$ = EMPTY; }
23022332;
@@ -5169,8 +5199,8 @@ unreserved_keyword:
51695199| INSTEAD {$$ = make_str(" instead" ); }
51705200| ISOLATION {$$ = make_str(" isolation" ); }
51715201| KEY {$$ = make_str(" key" ); }
5172- | LANGUAGE {$$ = make_str(" language" ); }
51735202| LANCOMPILER {$$ = make_str(" lancompiler" ); }
5203+ | LANGUAGE {$$ = make_str(" language" ); }
51745204| LAST {$$ = make_str(" last" ); }
51755205| LEVEL {$$ = make_str(" level" ); }
51765206| LISTEN {$$ = make_str(" listen" ); }
@@ -5422,7 +5452,6 @@ reserved_keyword:
54225452| UNIQUE {$$ = make_str(" unique" ); }
54235453| USER {$$ = make_str(" user" ); }
54245454| USING {$$ = make_str(" using" ); }
5425- | VALUE {$$ = make_str(" value" ); }
54265455| WHEN {$$ = make_str(" when" ); }
54275456| WHERE {$$ = make_str(" where" ); }
54285457;