1111 *
1212 *
1313 * IDENTIFICATION
14- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.352 2002/07/31 17:19:51 tgl Exp $
14+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.353 2002/08/04 04:31:44 momjian Exp $
1515 *
1616 * HISTORY
1717 * AUTHOR DATE MAJOR EVENT
@@ -195,7 +195,7 @@ static void doNegateFloat(Value *v);
195195
196196%type <str> opt_id , all_Op , MathOp , opt_name , SpecialRuleRelation
197197
198- %type <str> opt_level , opt_encoding
198+ %type <str> iso_level , opt_encoding
199199%type <node> grantee
200200%type <list> grantee_list
201201%type <ival> privilege
@@ -218,7 +218,7 @@ static void doNegateFloat(Value *v);
218218 target_list , update_target_list , insert_column_list ,
219219 insert_target_list , def_list , opt_indirection ,
220220 group_clause , TriggerFuncArgs , select_limit ,
221- opt_select_limit , opclass_item_list
221+ opt_select_limit , opclass_item_list , trans_options
222222
223223%type <range> into_clause , OptTempTableName
224224
@@ -847,14 +847,14 @@ set_rest: ColId TO var_list_or_default
847847 n->args = makeList1($3 );
848848 $$ = n;
849849 }
850- | TRANSACTION ISOLATION LEVEL opt_level opt_mode
850+ | TRANSACTION ISOLATION LEVEL iso_level opt_mode
851851 {
852852 VariableSetStmt *n = makeNode(VariableSetStmt);
853853 n->name = " TRANSACTION ISOLATION LEVEL" ;
854854 n->args = makeList1(makeStringConst($4 , NULL ));
855855 $$ = n;
856856 }
857- | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
857+ | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL iso_level
858858 {
859859 VariableSetStmt *n = makeNode(VariableSetStmt);
860860 n->name = " default_transaction_isolation" ;
@@ -902,7 +902,7 @@ var_value: opt_boolean
902902 { $$ = makeAConst($1 ); }
903903 ;
904904
905- opt_level : READ COMMITTED { $$ = " read committed" ; }
905+ iso_level : READ COMMITTED { $$ = " read committed" ; }
906906 | SERIALIZABLE { $$ = " serializable" ; }
907907 ;
908908
@@ -3445,67 +3445,60 @@ TransactionStmt:
34453445 {
34463446 TransactionStmt *n = makeNode(TransactionStmt);
34473447 n->command = ROLLBACK;
3448+ n->options = NIL;
34483449 $$ = (Node *)n;
34493450 }
34503451 | BEGIN_TRANS opt_trans
34513452 {
34523453 TransactionStmt *n = makeNode(TransactionStmt);
34533454 n->command = BEGIN_TRANS;
3455+ n->options = NIL;
34543456 $$ = (Node *)n;
34553457 }
3456- | COMMIT opt_trans
3458+ | START TRANSACTION trans_options
34573459 {
34583460 TransactionStmt *n = makeNode(TransactionStmt);
3459- n->command = COMMIT;
3461+ n->command = START;
3462+ n->options = $3 ;
34603463 $$ = (Node *)n;
34613464 }
3462- | COMMIT opt_trans opt_chain
3465+ | COMMIT opt_trans
34633466 {
34643467 TransactionStmt *n = makeNode(TransactionStmt);
34653468 n->command = COMMIT;
3469+ n->options = NIL;
34663470 $$ = (Node *)n;
34673471 }
34683472 | END_TRANS opt_trans
34693473 {
34703474 TransactionStmt *n = makeNode(TransactionStmt);
34713475 n->command = COMMIT;
3476+ n->options = NIL;
34723477 $$ = (Node *)n;
34733478 }
34743479 | ROLLBACK opt_trans
34753480 {
34763481 TransactionStmt *n = makeNode(TransactionStmt);
34773482 n->command = ROLLBACK;
3478- $$ = (Node *)n;
3479- }
3480- | ROLLBACK opt_trans opt_chain
3481- {
3482- TransactionStmt *n = makeNode(TransactionStmt);
3483- n->command = ROLLBACK;
3483+ n->options = NIL;
34843484 $$ = (Node *)n;
34853485 }
34863486 ;
34873487
3488+ trans_options : ISOLATION LEVEL iso_level
3489+ { $$ = makeList1(makeStringConst($3 , NULL )); }
3490+ | /* EMPTY */ { $$ = NIL; }
3491+ ;
3492+
34883493opt_trans : WORK {}
34893494 | TRANSACTION {}
34903495 | /* EMPTY*/ {}
34913496 ;
34923497
3493- opt_chain : AND NO CHAIN {}
3494- | AND CHAIN
3495- {
3496- /* SQL99 asks that conforming dbs reject AND CHAIN
3497- * if they don't support it. So we can't just ignore it.
3498- * - thomas 2000-08-06
3499- */
3500- elog (ERROR, " COMMIT/AND CHAIN not yet supported" );
3501- }
3502- ;
3503-
3504-
35053498/* ****************************************************************************
35063499 *
35073500 * QUERY:
3508- * define view <viewname> '('target-list ')' [where <quals> ]
3501+ * create view <viewname> '('target-list ')' AS <query>
35093502 *
35103503 *****************************************************************************/
35113504
0 commit comments