]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Update xact.c comments for clarity.
authorBruce Momjian <bruce@momjian.us>
Wed, 13 Nov 2002 03:12:05 +0000 (03:12 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 13 Nov 2002 03:12:05 +0000 (03:12 +0000)
src/backend/access/transam/xact.c
src/include/access/xact.h

index 7586ee8a46a6d72868d64556a5e0dd47bd8334da..4711c091c78f906accf753228a02be0153a1adc8 100644 (file)
@@ -8,13 +8,13 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.137 2002/11/11 22:19:20 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.138 2002/11/13 03:12:05 momjian Exp $
  *
  * NOTES
  *             Transaction aborts can now occur two ways:
  *
- *             1)      system dies from some internal cause  (Assert, etc..)
- *             2)      user types abort
+ *             1)      system dies from some internal cause  (syntax error, etc..)
+ *             2)      user types ABORT
  *
  *             These two cases used to be treated identically, but now
  *             we need to distinguish them.  Why?      consider the following
@@ -30,8 +30,8 @@
  *             In case 1, we want to abort the transaction and return to the
  *             default state.  In case 2, there may be more commands coming
  *             our way which are part of the same transaction block and we have
- *             to ignore these commands until we see an END transaction.
- *             (or an ABORT! --djm)
+ *             to ignore these commands until we see a COMMIT transaction or
+ *             ROLLBACK.
  *
  *             Internal aborts are now handled by AbortTransactionBlock(), just as
  *             they always have been, and user aborts are now handled by
  *               TransactionCommandContext until this point.
  *
  *      NOTES
- *             This file is an attempt at a redesign of the upper layer
- *             of the V1 transaction system which was too poorly thought
- *             out to describe.  This new system hopes to be both simpler
- *             in design, simpler to extend and needs to contain added
- *             functionality to solve problems beyond the scope of the V1
- *             system.  (In particuler, communication of transaction
- *             information between parallel backends has to be supported)
- *
  *             The essential aspects of the transaction system are:
  *
  *                             o  transaction id generation
@@ -69,7 +61,7 @@
  *                             o  lock cleanup
  *
  *             Hence, the functional division of the transaction code is
- *             based on what of the above things need to be done during
+ *             based on which of the above things need to be done during
  *             a start/commit/abort transaction.  For instance, the
  *             routine AtCommit_Memory() takes care of all the memory
  *             cleanup stuff done at commit time.
  *                             CommitTransactionBlock
  *                             AbortTransactionBlock
  *
- *             These are invoked only in responce to a user "BEGIN", "END",
- *             or "ABORT" command.  The tricky part about these functions
+ *             These are invoked only in responce to a user "BEGIN WORK", "COMMIT",
+ *             or "ROLLBACK" command.  The tricky part about these functions
  *             is that they are called within the postgres main loop, in between
  *             the StartTransactionCommand() and CommitTransactionCommand().
  *
  *             For example, consider the following sequence of user commands:
  *
  *             1)              begin
- *             2)              retrieve (foo.all)
- *             3)              append foo (bar = baz)
- *             4)              end
+ *             2)              select * from foo
+ *             3)              insert into foo (bar = baz)
+ *             4)              commit
  *
  *             in the main processing loop, this results in the following
  *             transaction sequence:
  *                     \       CommitTransactionCommand();
  *
  *                     /       StartTransactionCommand();
- *             2) <    ProcessQuery();                                 << retrieve (foo.all)
+ *             2) <    ProcessQuery();                                 << select * from foo
  *                     \       CommitTransactionCommand();
  *
  *                     /       StartTransactionCommand();
- *             3) <    ProcessQuery();                                 << append foo (bar = baz)
+ *             3) <    ProcessQuery();                                 << insert into foo (bar = baz)
  *                     \       CommitTransactionCommand();
  *
  *                     /       StartTransactionCommand();
- *             4) /    ProcessUtility();                               << end
+ *             4) /    ProcessUtility();                               << commit
  *                \            CommitTransactionBlock();
  *                     \       CommitTransactionCommand();
  *
  *             outside these calls they need to do normal start/commit
  *             processing.
  *
- *             Furthermore, suppose the "retrieve (foo.all)" caused an abort
+ *             Furthermore, suppose the "select * from foo" caused an abort
  *             condition.      We would then want to abort the transaction and
- *             ignore all subsequent commands up to the "end".
+ *             ignore all subsequent commands up to the "commit".
  *             -cim 3/23/90
  *
  *-------------------------------------------------------------------------
  */
 
-/*
- * Large object clean up added in CommitTransaction() to prevent buffer leaks.
- * [PA, 7/17/98]
- * [PA] is Pascal AndrĂ© <andre@via.ecp.fr>
- */
 #include "postgres.h"
 
 #include <unistd.h>
@@ -201,9 +188,8 @@ static void CommitTransaction(void);
 static void RecordTransactionAbort(void);
 static void StartTransaction(void);
 
-/* ----------------
- *             global variables holding the current transaction state.
- * ----------------
+/*
+ *     global variables holding the current transaction state.
  */
 static TransactionStateData CurrentTransactionStateData = {
        0,                                                      /* transaction id */
@@ -211,13 +197,13 @@ static TransactionStateData CurrentTransactionStateData = {
        0,                                                      /* scan command id */
        0x0,                                            /* start time */
        TRANS_DEFAULT,                          /* transaction state */
-       TBLOCK_DEFAULT                          /* transaction block state */
+       TBLOCK_DEFAULT                          /* transaction block state of client queries */
 };
 
 TransactionState CurrentTransactionState = &CurrentTransactionStateData;
 
 /*
- * User-tweakable parameters
+ *     User-tweakable parameters
  */
 int                    DefaultXactIsoLevel = XACT_READ_COMMITTED;
 int                    XactIsoLevel;
@@ -236,22 +222,22 @@ static void *_RollbackData = NULL;
 
 
 /* ----------------------------------------------------------------
- *                                      transaction state accessors
+ *     transaction state accessors
  * ----------------------------------------------------------------
  */
 
 #ifdef NOT_USED
 
 /* --------------------------------
- *             TransactionFlushEnabled()
- *             SetTransactionFlushEnabled()
+ *     TransactionFlushEnabled()
+ *     SetTransactionFlushEnabled()
  *
- *             These are used to test and set the "TransactionFlushState"
- *             varable.  If this variable is true (the default), then
- *             the system will flush all dirty buffers to disk at the end
- *             of each transaction.   If false then we are assuming the
- *             buffer pool resides in stable main memory, in which case we
- *             only do writes as necessary.
+ *     These are used to test and set the "TransactionFlushState"
+ *     varable.  If this variable is true (the default), then
+ *     the system will flush all dirty buffers to disk at the end
+ *     of each transaction.   If false then we are assuming the
+ *     buffer pool resides in stable main memory, in which case we
+ *     only do writes as necessary.
  * --------------------------------
  */
 static int     TransactionFlushState = 1;
@@ -271,10 +257,10 @@ SetTransactionFlushEnabled(bool state)
 
 
 /* --------------------------------
- *             IsTransactionState
+ *     IsTransactionState
  *
- *             This returns true if we are currently running a query
- *             within an executing transaction.
+ *     This returns true if we are currently running a query
+ *     within an executing transaction.
  * --------------------------------
  */
 bool
@@ -303,10 +289,10 @@ IsTransactionState(void)
 }
 
 /* --------------------------------
- *             IsAbortedTransactionBlockState
+ *     IsAbortedTransactionBlockState
  *
- *             This returns true if we are currently running a query
- *             within an aborted transaction block.
+ *     This returns true if we are currently running a query
+ *     within an aborted transaction block.
  * --------------------------------
  */
 bool
@@ -322,7 +308,7 @@ IsAbortedTransactionBlockState(void)
 
 
 /* --------------------------------
- *             GetCurrentTransactionId
+ *     GetCurrentTransactionId
  * --------------------------------
  */
 TransactionId
@@ -335,7 +321,7 @@ GetCurrentTransactionId(void)
 
 
 /* --------------------------------
- *             GetCurrentCommandId
+ *     GetCurrentCommandId
  * --------------------------------
  */
 CommandId
@@ -348,7 +334,7 @@ GetCurrentCommandId(void)
 
 
 /* --------------------------------
- *             GetCurrentTransactionStartTime
+ *     GetCurrentTransactionStartTime
  * --------------------------------
  */
 AbsoluteTime
@@ -361,7 +347,7 @@ GetCurrentTransactionStartTime(void)
 
 
 /* --------------------------------
- *             GetCurrentTransactionStartTimeUsec
+ *     GetCurrentTransactionStartTimeUsec
  * --------------------------------
  */
 AbsoluteTime
@@ -376,12 +362,12 @@ GetCurrentTransactionStartTimeUsec(int *msec)
 
 
 /* --------------------------------
- *             TransactionIdIsCurrentTransactionId
+ *     TransactionIdIsCurrentTransactionId
  *
- * During bootstrap, we cheat and say "it's not my transaction ID" even though
- * it is.  Along with transam.c's cheat to say that the bootstrap XID is
- * already committed, this causes the tqual.c routines to see previously
- * inserted tuples as committed, which is what we need during bootstrap.
+ *     During bootstrap, we cheat and say "it's not my transaction ID" even though
+ *     it is.  Along with transam.c's cheat to say that the bootstrap XID is
+ *     already committed, this causes the tqual.c routines to see previously
+ *     inserted tuples as committed, which is what we need during bootstrap.
  * --------------------------------
  */
 bool
@@ -400,7 +386,7 @@ TransactionIdIsCurrentTransactionId(TransactionId xid)
 
 
 /* --------------------------------
- *             CommandIdIsCurrentCommandId
+ *     CommandIdIsCurrentCommandId
  * --------------------------------
  */
 bool
@@ -413,7 +399,7 @@ CommandIdIsCurrentCommandId(CommandId cid)
 
 
 /* --------------------------------
- *             CommandCounterIncrement
+ *     CommandCounterIncrement
  * --------------------------------
  */
 void
@@ -446,7 +432,7 @@ CommandCounterIncrement(void)
  */
 
 /* --------------------------------
- *             AtStart_Cache
+ *     AtStart_Cache
  * --------------------------------
  */
 static void
@@ -471,7 +457,7 @@ AtStart_Locks(void)
 }
 
 /* --------------------------------
- *             AtStart_Memory
+ *     AtStart_Memory
  * --------------------------------
  */
 static void
@@ -512,7 +498,7 @@ AtStart_Memory(void)
  */
 
 /*
- *             RecordTransactionCommit
+ *     RecordTransactionCommit
  */
 void
 RecordTransactionCommit(void)
@@ -620,7 +606,7 @@ RecordTransactionCommit(void)
 
 
 /* --------------------------------
- *             AtCommit_Cache
+ *     AtCommit_Cache
  * --------------------------------
  */
 static void
@@ -638,7 +624,7 @@ AtCommit_Cache(void)
 }
 
 /* --------------------------------
- *             AtCommit_LocalCache
+ *     AtCommit_LocalCache
  * --------------------------------
  */
 static void
@@ -651,7 +637,7 @@ AtCommit_LocalCache(void)
 }
 
 /* --------------------------------
- *             AtCommit_Locks
+ *     AtCommit_Locks
  * --------------------------------
  */
 static void
@@ -666,7 +652,7 @@ AtCommit_Locks(void)
 }
 
 /* --------------------------------
- *             AtCommit_Memory
+ *     AtCommit_Memory
  * --------------------------------
  */
 static void
@@ -694,7 +680,7 @@ AtCommit_Memory(void)
  */
 
 /*
- *             RecordTransactionAbort
+ *     RecordTransactionAbort
  */
 static void
 RecordTransactionAbort(void)
@@ -763,7 +749,7 @@ RecordTransactionAbort(void)
 }
 
 /* --------------------------------
- *             AtAbort_Cache
+ *     AtAbort_Cache
  * --------------------------------
  */
 static void
@@ -774,7 +760,7 @@ AtAbort_Cache(void)
 }
 
 /* --------------------------------
- *             AtAbort_Locks
+ *     AtAbort_Locks
  * --------------------------------
  */
 static void
@@ -790,7 +776,7 @@ AtAbort_Locks(void)
 
 
 /* --------------------------------
- *             AtAbort_Memory
+ *     AtAbort_Memory
  * --------------------------------
  */
 static void
@@ -823,7 +809,7 @@ AtAbort_Memory(void)
  */
 
 /* --------------------------------
- *             AtCleanup_Memory
+ *     AtCleanup_Memory
  * --------------------------------
  */
 static void
@@ -852,8 +838,7 @@ AtCleanup_Memory(void)
  */
 
 /* --------------------------------
- *             StartTransaction
- *
+ *     StartTransaction
  * --------------------------------
  */
 static void
@@ -929,8 +914,7 @@ CurrentXactInProgress(void)
 #endif
 
 /* --------------------------------
- *             CommitTransaction
- *
+ *     CommitTransaction
  * --------------------------------
  */
 static void
@@ -1050,8 +1034,7 @@ CommitTransaction(void)
 }
 
 /* --------------------------------
- *             AbortTransaction
- *
+ *     AbortTransaction
  * --------------------------------
  */
 static void
@@ -1157,8 +1140,7 @@ AbortTransaction(void)
 }
 
 /* --------------------------------
- *             CleanupTransaction
- *
+ *     CleanupTransaction
  * --------------------------------
  */
 static void
@@ -1185,10 +1167,10 @@ CleanupTransaction(void)
 }
 
 /* --------------------------------
- *             StartTransactionCommand
+ *     StartTransactionCommand
  *
- * preventChain, if true, forces autocommit behavior at the next
- * CommitTransactionCommand call.
+ *     preventChain, if true, forces autocommit behavior at the next
+ *     CommitTransactionCommand call.
  * --------------------------------
  */
 void
@@ -1278,9 +1260,9 @@ StartTransactionCommand(bool preventChain)
 }
 
 /* --------------------------------
- *             CommitTransactionCommand
+ *     CommitTransactionCommand
  *
- * forceCommit = true forces autocommit behavior even when autocommit is off.
+ *     forceCommit = true forces autocommit behavior even when autocommit is off.
  * --------------------------------
  */
 void
@@ -1377,7 +1359,7 @@ CommitTransactionCommand(bool forceCommit)
 }
 
 /* --------------------------------
- *             AbortCurrentTransaction
+ *     AbortCurrentTransaction
  * --------------------------------
  */
 void
@@ -1454,22 +1436,22 @@ AbortCurrentTransaction(void)
 }
 
 /* --------------------------------
- *             PreventTransactionChain
+ *     PreventTransactionChain
  *
- * This routine is to be called by statements that must not run inside
- * a transaction block, typically because they have non-rollback-able
- * side effects or do internal commits.
+ *     This routine is to be called by statements that must not run inside
+ *     a transaction block, typically because they have non-rollback-able
+ *     side effects or do internal commits.
  *
- * If we have already started a transaction block, issue an error; also issue
- * an error if we appear to be running inside a user-defined function (which
- * could issue more commands and possibly cause a failure after the statement
- * completes).  In autocommit-off mode, we allow the statement if a block is
- * not already started, and force the statement to be autocommitted despite
- * the mode.
+ *     If we have already started a transaction block, issue an error; also issue
+ *     an error if we appear to be running inside a user-defined function (which
+ *     could issue more commands and possibly cause a failure after the statement
+ *     completes).  In autocommit-off mode, we allow the statement if a block is
+ *     not already started, and force the statement to be autocommitted despite
+ *     the mode.
  *
- * stmtNode: pointer to parameter block for statement; this is used in
- * a very klugy way to determine whether we are inside a function.
- * stmtType: statement type name for error messages.
+ *     stmtNode: pointer to parameter block for statement; this is used in
+ *     a very klugy way to determine whether we are inside a function.
+ *     stmtType: statement type name for error messages.
  * --------------------------------
  */
 void
@@ -1512,7 +1494,7 @@ PreventTransactionChain(void *stmtNode, const char *stmtType)
  * ----------------------------------------------------------------
  */
 /* --------------------------------
- *             BeginTransactionBlock
+ *     BeginTransactionBlock
  * --------------------------------
  */
 void
@@ -1546,7 +1528,7 @@ BeginTransactionBlock(void)
 }
 
 /* --------------------------------
- *             EndTransactionBlock
+ *     EndTransactionBlock
  * --------------------------------
  */
 void
@@ -1594,7 +1576,7 @@ EndTransactionBlock(void)
 }
 
 /* --------------------------------
- *             AbortTransactionBlock
+ *     AbortTransactionBlock
  * --------------------------------
  */
 #ifdef NOT_USED
@@ -1632,7 +1614,7 @@ AbortTransactionBlock(void)
 #endif
 
 /* --------------------------------
- *             UserAbortTransactionBlock
+ *     UserAbortTransactionBlock
  * --------------------------------
  */
 void
@@ -1678,11 +1660,11 @@ UserAbortTransactionBlock(void)
 }
 
 /* --------------------------------
- *             AbortOutOfAnyTransaction
+ *     AbortOutOfAnyTransaction
  *
- * This routine is provided for error recovery purposes.  It aborts any
- * active transaction or transaction block, leaving the system in a known
- * idle state.
+ *     This routine is provided for error recovery purposes.  It aborts any
+ *     active transaction or transaction block, leaving the system in a known
+ *     idle state.
  * --------------------------------
  */
 void
@@ -1730,6 +1712,11 @@ IsTransactionBlock(void)
        return false;
 }
 
+
+/*
+ *     XLOG support routines
+ */
+
 void
 xact_redo(XLogRecPtr lsn, XLogRecord *record)
 {
index e16771231d3805b70eb092996bf36962d42ffa02..dd609f19a14393a2b63a74006d956ffed9a4a592 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: xact.h,v 1.46 2002/10/21 22:06:20 tgl Exp $
+ * $Id: xact.h,v 1.47 2002/11/13 03:12:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -46,9 +46,11 @@ typedef struct TransactionStateData
 
 typedef TransactionStateData *TransactionState;
 
-/* ----------------
- *             transaction states
- * ----------------
+/*
+ *     transaction states - transaction state from server perspective
+ *     
+ *     Syntax error could cause transaction to abort, but client code thinks
+ *     it is still in a transaction, so we have to wait for COMMIT/ROLLBACK.
  */
 #define TRANS_DEFAULT                  0
 #define TRANS_START                            1
@@ -56,9 +58,8 @@ typedef TransactionStateData *TransactionState;
 #define TRANS_COMMIT                   3
 #define TRANS_ABORT                            4
 
-/* ----------------
- *             transaction block states
- * ----------------
+/*
+ *     transaction block states - transaction state of client queries
  */
 #define TBLOCK_DEFAULT                 0
 #define TBLOCK_BEGIN                   1