Commit a620a760 authored by Bruce Momjian's avatar Bruce Momjian

Allow BEGIN WORK to specify transaction isolation level, like START

TRANSACTION.
parent e439fef6
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/begin.sgml,v 1.27 2003/11/29 19:51:38 pgsql Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/begin.sgml,v 1.28 2004/01/10 02:21:08 momjian Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -21,6 +21,8 @@ PostgreSQL documentation ...@@ -21,6 +21,8 @@ PostgreSQL documentation
<refsynopsisdiv> <refsynopsisdiv>
<synopsis> <synopsis>
BEGIN [ WORK | TRANSACTION ] BEGIN [ WORK | TRANSACTION ]
[ ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } ]
[ READ WRITE | READ ONLY ]
</synopsis> </synopsis>
</refsynopsisdiv> </refsynopsisdiv>
...@@ -49,6 +51,13 @@ BEGIN [ WORK | TRANSACTION ] ...@@ -49,6 +51,13 @@ BEGIN [ WORK | TRANSACTION ]
other sessions will be unable to see the intermediate states other sessions will be unable to see the intermediate states
wherein not all the related updates have been done. wherein not all the related updates have been done.
</para> </para>
<para>
If the isolation level or read/write mode is specified, the new
transaction has those characteristics, as if
<xref linkend="sql-set-transaction" endterm="sql-set-transaction-title">
was executed.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
...@@ -65,6 +74,12 @@ BEGIN [ WORK | TRANSACTION ] ...@@ -65,6 +74,12 @@ BEGIN [ WORK | TRANSACTION ]
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>
<para>
See under <xref linkend="sql-set-transaction"
endterm="sql-set-transaction-title"> about the meaning of the
other parameters.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/start_transaction.sgml,v 1.9 2003/11/29 19:51:39 pgsql Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/start_transaction.sgml,v 1.10 2004/01/10 02:21:08 momjian Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -33,9 +33,8 @@ START TRANSACTION ...@@ -33,9 +33,8 @@ START TRANSACTION
This command begins a new transaction. If the isolation level or This command begins a new transaction. If the isolation level or
read/write mode is specified, the new transaction has those read/write mode is specified, the new transaction has those
characteristics, as if <xref linkend="sql-set-transaction" characteristics, as if <xref linkend="sql-set-transaction"
endterm="sql-set-transaction-title"> was executed. In all other endterm="sql-set-transaction-title"> was executed. It is the same
respects, the behavior of this command is identical to the <xref as the <xref linkend="sql-begin" endterm="sql-begin-title"> command.
linkend="sql-begin" endterm="sql-begin-title"> command.
</para> </para>
</refsect1> </refsect1>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.443 2004/01/07 18:56:27 neilc Exp $ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.444 2004/01/10 02:21:08 momjian Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -3674,11 +3674,11 @@ TransactionStmt: ...@@ -3674,11 +3674,11 @@ TransactionStmt:
n->options = NIL; n->options = NIL;
$$ = (Node *)n; $$ = (Node *)n;
} }
| BEGIN_P opt_transaction | BEGIN_P opt_transaction transaction_mode_list_or_empty
{ {
TransactionStmt *n = makeNode(TransactionStmt); TransactionStmt *n = makeNode(TransactionStmt);
n->kind = TRANS_STMT_BEGIN; n->kind = TRANS_STMT_BEGIN;
n->options = NIL; n->options = $3;
$$ = (Node *)n; $$ = (Node *)n;
} }
| START TRANSACTION transaction_mode_list_or_empty | START TRANSACTION transaction_mode_list_or_empty
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2003, PostgreSQL Global Development Group * Copyright (c) 2000-2003, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.97 2003/12/01 22:21:54 momjian Exp $ * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.98 2004/01/10 02:21:08 momjian Exp $
*/ */
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -723,6 +723,18 @@ psql_completion(char *text, int start, int end) ...@@ -723,6 +723,18 @@ psql_completion(char *text, int start, int end)
else if (strcasecmp(prev2_wd, "ANALYZE") == 0) else if (strcasecmp(prev2_wd, "ANALYZE") == 0)
COMPLETE_WITH_CONST(";"); COMPLETE_WITH_CONST(";");
/* BEGIN, COMMIT, ROLLBACK, ABORT, */
else if (strcasecmp(prev_wd, "BEGIN") == 0 ||
strcasecmp(prev_wd, "END") == 0 ||
strcasecmp(prev_wd, "COMMIT") == 0 ||
strcasecmp(prev_wd, "ROLLBACK") == 0 ||
strcasecmp(prev_wd, "ABORT") == 0)
{
static const char * const list_TRANS[] =
{"WORK", "TRANSACTION", NULL};
COMPLETE_WITH_LIST(list_TRANS);
}
/* CLUSTER */ /* CLUSTER */
/* If the previous word is CLUSTER, produce list of indexes. */ /* If the previous word is CLUSTER, produce list of indexes. */
else if (strcasecmp(prev_wd, "CLUSTER") == 0) else if (strcasecmp(prev_wd, "CLUSTER") == 0)
...@@ -1099,10 +1111,14 @@ psql_completion(char *text, int start, int end) ...@@ -1099,10 +1111,14 @@ psql_completion(char *text, int start, int end)
strcasecmp(prev_wd, "SHOW") == 0) strcasecmp(prev_wd, "SHOW") == 0)
COMPLETE_WITH_LIST(pgsql_variables); COMPLETE_WITH_LIST(pgsql_variables);
/* Complete "SET TRANSACTION" */ /* Complete "SET TRANSACTION" */
else if ((strcasecmp(prev2_wd, "SET") == 0 else if ((strcasecmp(prev2_wd, "SET") == 0 &&
&& strcasecmp(prev_wd, "TRANSACTION") == 0) strcasecmp(prev_wd, "TRANSACTION") == 0)
|| (strcasecmp(prev2_wd, "START") == 0 || (strcasecmp(prev2_wd, "START") == 0
&& strcasecmp(prev_wd, "TRANSACTION") == 0) && strcasecmp(prev_wd, "TRANSACTION") == 0)
|| (strcasecmp(prev2_wd, "BEGIN") == 0
&& strcasecmp(prev_wd, "WORK") == 0)
|| (strcasecmp(prev2_wd, "BEGIN") == 0
&& strcasecmp(prev_wd, "TRANSACTION") == 0)
|| (strcasecmp(prev4_wd, "SESSION") == 0 || (strcasecmp(prev4_wd, "SESSION") == 0
&& strcasecmp(prev3_wd, "CHARACTERISTICS") == 0 && strcasecmp(prev3_wd, "CHARACTERISTICS") == 0
&& strcasecmp(prev2_wd, "AS") == 0 && strcasecmp(prev2_wd, "AS") == 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment