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
  [EMAIL PROTECTED]               |  (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
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to