BEGIN WORK and transaction isolation level

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема BEGIN WORK and transaction isolation level
Дата
Msg-id 200401100222.i0A2M6O03432@candle.pha.pa.us
обсуждение исходный текст
Список pgsql-patches
This applied patch adds transaction isolation level to BEGIN WORK just
like START TRANSACTION.  The bottom of the patch improves table
completion for transaction commands.

This was discussed and approved a while ago.  (Peter objected, though.)

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/ref/begin.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/begin.sgml,v
retrieving revision 1.26
diff -c -c -r1.26 begin.sgml
*** doc/src/sgml/ref/begin.sgml    9 Sep 2003 18:28:52 -0000    1.26
--- doc/src/sgml/ref/begin.sgml    10 Nov 2003 03:08:31 -0000
***************
*** 21,26 ****
--- 21,28 ----
   <refsynopsisdiv>
  <synopsis>
  BEGIN [ WORK | TRANSACTION ]
+     [ ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } ]
+     [ READ WRITE | READ ONLY ]
  </synopsis>
   </refsynopsisdiv>

***************
*** 49,54 ****
--- 51,63 ----
     other sessions will be unable to see the intermediate states
     wherein not all the related updates have been done.
    </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>
***************
*** 65,70 ****
--- 74,85 ----
      </listitem>
     </varlistentry>
    </variablelist>
+
+   <para>
+    See under <xref linkend="sql-set-transaction"
+    endterm="sql-set-transaction-title"> about the meaning of the
+    other parameters.
+   </para>
   </refsect1>

   <refsect1>
Index: doc/src/sgml/ref/start_transaction.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/start_transaction.sgml,v
retrieving revision 1.8
diff -c -c -r1.8 start_transaction.sgml
*** doc/src/sgml/ref/start_transaction.sgml    6 Nov 2003 22:08:14 -0000    1.8
--- doc/src/sgml/ref/start_transaction.sgml    10 Nov 2003 03:08:31 -0000
***************
*** 33,41 ****
     This command begins a new transaction. 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. In all other
!    respects, the behavior of this command is identical to the <xref
!    linkend="sql-begin" endterm="sql-begin-title"> command.
    </para>
   </refsect1>

--- 33,40 ----
     This command begins a new transaction. 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. It is the same
!    as the <xref linkend="sql-begin" endterm="sql-begin-title"> command.
    </para>
   </refsect1>

Index: src/backend/parser/gram.y
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.437
diff -c -c -r2.437 gram.y
*** src/backend/parser/gram.y    6 Nov 2003 22:08:14 -0000    2.437
--- src/backend/parser/gram.y    10 Nov 2003 03:08:38 -0000
***************
*** 3607,3617 ****
                      n->options = NIL;
                      $$ = (Node *)n;
                  }
!             | BEGIN_P opt_transaction
                  {
                      TransactionStmt *n = makeNode(TransactionStmt);
                      n->kind = TRANS_STMT_BEGIN;
!                     n->options = NIL;
                      $$ = (Node *)n;
                  }
              | START TRANSACTION transaction_mode_list_or_empty
--- 3607,3617 ----
                      n->options = NIL;
                      $$ = (Node *)n;
                  }
!             | BEGIN_P opt_transaction transaction_mode_list_or_empty
                  {
                      TransactionStmt *n = makeNode(TransactionStmt);
                      n->kind = TRANS_STMT_BEGIN;
!                     n->options = $3;
                      $$ = (Node *)n;
                  }
              | START TRANSACTION transaction_mode_list_or_empty
Index: src/bin/psql/tab-complete.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/tab-complete.c,v
retrieving revision 1.93
diff -c -c -r1.93 tab-complete.c
*** src/bin/psql/tab-complete.c    8 Nov 2003 20:54:24 -0000    1.93
--- src/bin/psql/tab-complete.c    10 Nov 2003 03:08:45 -0000
***************
*** 725,730 ****
--- 725,742 ----
      else if (strcasecmp(prev2_wd, "ANALYZE") == 0)
          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 */
      /* If the previous word is CLUSTER, produce list of indexes. */
      else if (strcasecmp(prev_wd, "CLUSTER") == 0)
***************
*** 1101,1109 ****
               strcasecmp(prev_wd, "SHOW") == 0)
          COMPLETE_WITH_LIST(pgsql_variables);
      /* Complete "SET TRANSACTION" */
!     else if ((strcasecmp(prev2_wd, "SET") == 0
!               && strcasecmp(prev_wd, "TRANSACTION") == 0)
               || (strcasecmp(prev2_wd, "START") == 0
                   && strcasecmp(prev_wd, "TRANSACTION") == 0)
               || (strcasecmp(prev4_wd, "SESSION") == 0
                   && strcasecmp(prev3_wd, "CHARACTERISTICS") == 0
--- 1113,1125 ----
               strcasecmp(prev_wd, "SHOW") == 0)
          COMPLETE_WITH_LIST(pgsql_variables);
      /* Complete "SET TRANSACTION" */
!     else if ((strcasecmp(prev2_wd, "SET") == 0 &&
!               strcasecmp(prev_wd, "TRANSACTION") == 0)
               || (strcasecmp(prev2_wd, "START") == 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(prev3_wd, "CHARACTERISTICS") == 0

В списке pgsql-patches по дате отправления:

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: fork/exec patch: pre-CreateProcess finalization
Следующее
От: Bruce Momjian
Дата:
Сообщение: pg_ctl "starting" postmaster