aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-08-04 04:31:44 +0000
committerBruce Momjian <bruce@momjian.us>2002-08-04 04:31:44 +0000
commit19e0e35bcd3d0a1e46cb294ab08fbe062d4cf0d6 (patch)
tree0e46bff54197af8970529fc54e8766cbcda23567 /src/backend/parser
parentfecc04f95a136bbfbded44c476d597eed6ac6258 (diff)
downloadpostgresql-19e0e35bcd3d0a1e46cb294ab08fbe062d4cf0d6.tar.gz
postgresql-19e0e35bcd3d0a1e46cb294ab08fbe062d4cf0d6.zip
The attached patch implements START TRANSACTION, per SQL99. The
functionality of the command is basically identical to that of BEGIN; it just accepts a few extra options (only one of which PostgreSQL currently implements), and is standards-compliant. The patch includes a simple regression test and documentation. [ Regression tests removed, per Peter.] Neil Conway
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y49
1 files changed, 21 insertions, 28 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 73c2875d1b7..76731f97d7a 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.352 2002/07/31 17:19:51 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.353 2002/08/04 04:31:44 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -195,7 +195,7 @@ static void doNegateFloat(Value *v);
%type <str> opt_id, all_Op, MathOp, opt_name, SpecialRuleRelation
-%type <str> opt_level, opt_encoding
+%type <str> iso_level, opt_encoding
%type <node> grantee
%type <list> grantee_list
%type <ival> privilege
@@ -218,7 +218,7 @@ static void doNegateFloat(Value *v);
target_list, update_target_list, insert_column_list,
insert_target_list, def_list, opt_indirection,
group_clause, TriggerFuncArgs, select_limit,
- opt_select_limit, opclass_item_list
+ opt_select_limit, opclass_item_list, trans_options
%type <range> into_clause, OptTempTableName
@@ -847,14 +847,14 @@ set_rest: ColId TO var_list_or_default
n->args = makeList1($3);
$$ = n;
}
- | TRANSACTION ISOLATION LEVEL opt_level opt_mode
+ | TRANSACTION ISOLATION LEVEL iso_level opt_mode
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = "TRANSACTION ISOLATION LEVEL";
n->args = makeList1(makeStringConst($4, NULL));
$$ = n;
}
- | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
+ | SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL iso_level
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = "default_transaction_isolation";
@@ -902,7 +902,7 @@ var_value: opt_boolean
{ $$ = makeAConst($1); }
;
-opt_level: READ COMMITTED { $$ = "read committed"; }
+iso_level: READ COMMITTED { $$ = "read committed"; }
| SERIALIZABLE { $$ = "serializable"; }
;
@@ -3445,67 +3445,60 @@ TransactionStmt:
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = ROLLBACK;
+ n->options = NIL;
$$ = (Node *)n;
}
| BEGIN_TRANS opt_trans
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = BEGIN_TRANS;
+ n->options = NIL;
$$ = (Node *)n;
}
- | COMMIT opt_trans
+ | START TRANSACTION trans_options
{
TransactionStmt *n = makeNode(TransactionStmt);
- n->command = COMMIT;
+ n->command = START;
+ n->options = $3;
$$ = (Node *)n;
}
- | COMMIT opt_trans opt_chain
+ | COMMIT opt_trans
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = COMMIT;
+ n->options = NIL;
$$ = (Node *)n;
}
| END_TRANS opt_trans
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = COMMIT;
+ n->options = NIL;
$$ = (Node *)n;
}
| ROLLBACK opt_trans
{
TransactionStmt *n = makeNode(TransactionStmt);
n->command = ROLLBACK;
- $$ = (Node *)n;
- }
- | ROLLBACK opt_trans opt_chain
- {
- TransactionStmt *n = makeNode(TransactionStmt);
- n->command = ROLLBACK;
+ n->options = NIL;
$$ = (Node *)n;
}
;
+trans_options: ISOLATION LEVEL iso_level
+ { $$ = makeList1(makeStringConst($3, NULL)); }
+ | /* EMPTY */ { $$ = NIL; }
+ ;
+
opt_trans: WORK {}
| TRANSACTION {}
| /*EMPTY*/ {}
;
-opt_chain: AND NO CHAIN {}
- | AND CHAIN
- {
- /* SQL99 asks that conforming dbs reject AND CHAIN
- * if they don't support it. So we can't just ignore it.
- * - thomas 2000-08-06
- */
- elog(ERROR, "COMMIT/AND CHAIN not yet supported");
- }
- ;
-
-
/*****************************************************************************
*
* QUERY:
- * define view <viewname> '('target-list ')' [where <quals> ]
+ * create view <viewname> '('target-list ')' AS <query>
*
*****************************************************************************/