1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-25 21:42:33 +03:00

Allow BEGIN WORK to specify transaction isolation level, like START

TRANSACTION.
This commit is contained in:
Bruce Momjian 2004-01-10 02:21:08 +00:00
parent e439fef6fc
commit a620a760ed
4 changed files with 41 additions and 11 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$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
<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 ]
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 ]
</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>

View File

@ -1,5 +1,5 @@
<!-- <!--
$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
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>

View File

@ -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:
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

View File

@ -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)
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)
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