11
11
*
12
12
*
13
13
* 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 $
15
15
*
16
16
* HISTORY
17
17
* AUTHOR DATE MAJOR EVENT
@@ -195,7 +195,7 @@ static void doNegateFloat(Value *v);
195
195
196
196
%type <str> opt_id , all_Op , MathOp , opt_name , SpecialRuleRelation
197
197
198
- %type <str> opt_level , opt_encoding
198
+ %type <str> iso_level , opt_encoding
199
199
%type <node> grantee
200
200
%type <list> grantee_list
201
201
%type <ival> privilege
@@ -218,7 +218,7 @@ static void doNegateFloat(Value *v);
218
218
target_list , update_target_list , insert_column_list ,
219
219
insert_target_list , def_list , opt_indirection ,
220
220
group_clause , TriggerFuncArgs , select_limit ,
221
- opt_select_limit , opclass_item_list
221
+ opt_select_limit , opclass_item_list , trans_options
222
222
223
223
%type <range> into_clause , OptTempTableName
224
224
@@ -847,14 +847,14 @@ set_rest: ColId TO var_list_or_default
847
847
n->args = makeList1($3 );
848
848
$$ = n;
849
849
}
850
- | TRANSACTION ISOLATION LEVEL opt_level opt_mode
850
+ | TRANSACTION ISOLATION LEVEL iso_level opt_mode
851
851
{
852
852
VariableSetStmt *n = makeNode(VariableSetStmt);
853
853
n->name = " TRANSACTION ISOLATION LEVEL" ;
854
854
n->args = makeList1(makeStringConst($4 , NULL ));
855
855
$$ = n;
856
856
}
857
- | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
857
+ | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL iso_level
858
858
{
859
859
VariableSetStmt *n = makeNode(VariableSetStmt);
860
860
n->name = " default_transaction_isolation" ;
@@ -902,7 +902,7 @@ var_value: opt_boolean
902
902
{ $$ = makeAConst($1 ); }
903
903
;
904
904
905
- opt_level : READ COMMITTED { $$ = " read committed" ; }
905
+ iso_level : READ COMMITTED { $$ = " read committed" ; }
906
906
| SERIALIZABLE { $$ = " serializable" ; }
907
907
;
908
908
@@ -3445,67 +3445,60 @@ TransactionStmt:
3445
3445
{
3446
3446
TransactionStmt *n = makeNode(TransactionStmt);
3447
3447
n->command = ROLLBACK;
3448
+ n->options = NIL;
3448
3449
$$ = (Node *)n;
3449
3450
}
3450
3451
| BEGIN_TRANS opt_trans
3451
3452
{
3452
3453
TransactionStmt *n = makeNode(TransactionStmt);
3453
3454
n->command = BEGIN_TRANS;
3455
+ n->options = NIL;
3454
3456
$$ = (Node *)n;
3455
3457
}
3456
- | COMMIT opt_trans
3458
+ | START TRANSACTION trans_options
3457
3459
{
3458
3460
TransactionStmt *n = makeNode(TransactionStmt);
3459
- n->command = COMMIT;
3461
+ n->command = START;
3462
+ n->options = $3 ;
3460
3463
$$ = (Node *)n;
3461
3464
}
3462
- | COMMIT opt_trans opt_chain
3465
+ | COMMIT opt_trans
3463
3466
{
3464
3467
TransactionStmt *n = makeNode(TransactionStmt);
3465
3468
n->command = COMMIT;
3469
+ n->options = NIL;
3466
3470
$$ = (Node *)n;
3467
3471
}
3468
3472
| END_TRANS opt_trans
3469
3473
{
3470
3474
TransactionStmt *n = makeNode(TransactionStmt);
3471
3475
n->command = COMMIT;
3476
+ n->options = NIL;
3472
3477
$$ = (Node *)n;
3473
3478
}
3474
3479
| ROLLBACK opt_trans
3475
3480
{
3476
3481
TransactionStmt *n = makeNode(TransactionStmt);
3477
3482
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;
3484
3484
$$ = (Node *)n;
3485
3485
}
3486
3486
;
3487
3487
3488
+ trans_options : ISOLATION LEVEL iso_level
3489
+ { $$ = makeList1(makeStringConst($3 , NULL )); }
3490
+ | /* EMPTY */ { $$ = NIL; }
3491
+ ;
3492
+
3488
3493
opt_trans : WORK {}
3489
3494
| TRANSACTION {}
3490
3495
| /* EMPTY*/ {}
3491
3496
;
3492
3497
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
-
3505
3498
/* ****************************************************************************
3506
3499
*
3507
3500
* QUERY:
3508
- * define view <viewname> '('target-list ')' [where <quals> ]
3501
+ * create view <viewname> '('target-list ')' AS <query>
3509
3502
*
3510
3503
*****************************************************************************/
3511
3504
0 commit comments