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
* AUTHORDATEMAJOR 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