]> granicus.if.org Git - postgresql/blobdiff - src/include/access/xact.h
Remove cvs keywords from all files.
[postgresql] / src / include / access / xact.h
index da2455f68fdf467a616ca8c4785d52d11b1ea99f..ff391726b27beb0f0d7e81caffeee0b406943981 100644 (file)
@@ -4,10 +4,10 @@
  *       postgres transaction system definitions
  *
  *
- * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.81 2006/03/24 04:32:13 tgl Exp $
+ * src/include/access/xact.h
  *
  *-------------------------------------------------------------------------
  */
@@ -15,8 +15,8 @@
 #define XACT_H
 
 #include "access/xlog.h"
-#include "storage/relfilenode.h"
 #include "nodes/pg_list.h"
+#include "storage/relfilenode.h"
 #include "utils/timestamp.h"
 
 
@@ -35,12 +35,18 @@ extern int  XactIsoLevel;
  * We only implement two isolation levels internally.  This macro should
  * be used to check which one is selected.
  */
-#define IsXactIsoLevelSerializable (XactIsoLevel >= XACT_REPEATABLE_READ)
+#define IsolationUsesXactSnapshot() (XactIsoLevel >= XACT_REPEATABLE_READ)
 
 /* Xact read-only state */
 extern bool DefaultXactReadOnly;
 extern bool XactReadOnly;
 
+/* Asynchronous commits */
+extern bool XactSyncCommit;
+
+/* Kluge for 2PC support */
+extern bool MyXactAccessedTempRel;
+
 /*
  *     start- and end-of-transaction callbacks for dynamically loaded modules
  */
@@ -78,22 +84,52 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
 #define XLOG_XACT_ABORT                                0x20
 #define XLOG_XACT_COMMIT_PREPARED      0x30
 #define XLOG_XACT_ABORT_PREPARED       0x40
+#define XLOG_XACT_ASSIGNMENT           0x50
+
+typedef struct xl_xact_assignment
+{
+       TransactionId xtop;                     /* assigned XID's top-level XID */
+       int                     nsubxacts;              /* number of subtransaction XIDs */
+       TransactionId xsub[1];          /* assigned subxids */
+} xl_xact_assignment;
+
+#define MinSizeOfXactAssignment offsetof(xl_xact_assignment, xsub)
 
 typedef struct xl_xact_commit
 {
-       time_t          xtime;
+       TimestampTz xact_time;          /* time of commit */
+       uint32          xinfo;                  /* info flags */
        int                     nrels;                  /* number of RelFileNodes */
        int                     nsubxacts;              /* number of subtransaction XIDs */
+       int                     nmsgs;                  /* number of shared inval msgs */
+       Oid                     dbId;                   /* MyDatabaseId */
+       Oid                     tsId;                   /* MyDatabaseTableSpace */
        /* Array of RelFileNode(s) to drop at commit */
        RelFileNode xnodes[1];          /* VARIABLE LENGTH ARRAY */
        /* ARRAY OF COMMITTED SUBTRANSACTION XIDs FOLLOWS */
+       /* ARRAY OF SHARED INVALIDATION MESSAGES FOLLOWS */
 } xl_xact_commit;
 
 #define MinSizeOfXactCommit offsetof(xl_xact_commit, xnodes)
 
+/*
+ * These flags are set in the xinfo fields of WAL commit records,
+ * indicating a variety of additional actions that need to occur
+ * when emulating transaction effects during recovery.
+ * They are named XactCompletion... to differentiate them from
+ * EOXact... routines which run at the end of the original
+ * transaction completion.
+ */
+#define XACT_COMPLETION_UPDATE_RELCACHE_FILE   0x01
+#define XACT_COMPLETION_FORCE_SYNC_COMMIT              0x02
+
+/* Access macros for above flags */
+#define XactCompletionRelcacheInitFileInval(xlrec)     ((xlrec)->xinfo & XACT_COMPLETION_UPDATE_RELCACHE_FILE)
+#define XactCompletionForceSyncCommit(xlrec)           ((xlrec)->xinfo & XACT_COMPLETION_FORCE_SYNC_COMMIT)
+
 typedef struct xl_xact_abort
 {
-       time_t          xtime;
+       TimestampTz xact_time;          /* time of abort */
        int                     nrels;                  /* number of RelFileNodes */
        int                     nsubxacts;              /* number of subtransaction XIDs */
        /* Array of RelFileNode(s) to drop at abort */
@@ -101,6 +137,8 @@ typedef struct xl_xact_abort
        /* ARRAY OF ABORTED SUBTRANSACTION XIDs FOLLOWS */
 } xl_xact_abort;
 
+/* Note the intentional lack of an invalidation message array c.f. commit */
+
 #define MinSizeOfXactAbort offsetof(xl_xact_abort, xnodes)
 
 /*
@@ -136,14 +174,19 @@ typedef struct xl_xact_abort_prepared
 extern bool IsTransactionState(void);
 extern bool IsAbortedTransactionBlockState(void);
 extern TransactionId GetTopTransactionId(void);
+extern TransactionId GetTopTransactionIdIfAny(void);
 extern TransactionId GetCurrentTransactionId(void);
 extern TransactionId GetCurrentTransactionIdIfAny(void);
 extern SubTransactionId GetCurrentSubTransactionId(void);
-extern CommandId GetCurrentCommandId(void);
+extern CommandId GetCurrentCommandId(bool used);
 extern TimestampTz GetCurrentTransactionStartTimestamp(void);
+extern TimestampTz GetCurrentStatementStartTimestamp(void);
+extern TimestampTz GetCurrentTransactionStopTimestamp(void);
+extern void SetCurrentStatementStartTimestamp(void);
 extern int     GetCurrentTransactionNestLevel(void);
 extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
 extern void CommandCounterIncrement(void);
+extern void ForceSyncCommit(void);
 extern void StartTransactionCommand(void);
 extern void CommitTransactionCommand(void);
 extern void AbortCurrentTransaction(void);
@@ -162,16 +205,14 @@ extern bool IsTransactionBlock(void);
 extern bool IsTransactionOrTransactionBlock(void);
 extern char TransactionBlockStatusCode(void);
 extern void AbortOutOfAnyTransaction(void);
-extern void PreventTransactionChain(void *stmtNode, const char *stmtType);
-extern void RequireTransactionChain(void *stmtNode, const char *stmtType);
-extern bool IsInTransactionChain(void *stmtNode);
+extern void PreventTransactionChain(bool isTopLevel, const char *stmtType);
+extern void RequireTransactionChain(bool isTopLevel, const char *stmtType);
+extern bool IsInTransactionChain(bool isTopLevel);
 extern void RegisterXactCallback(XactCallback callback, void *arg);
 extern void UnregisterXactCallback(XactCallback callback, void *arg);
 extern void RegisterSubXactCallback(SubXactCallback callback, void *arg);
 extern void UnregisterSubXactCallback(SubXactCallback callback, void *arg);
 
-extern void RecordTransactionCommit(void);
-
 extern int     xactGetCommittedChildren(TransactionId **ptr);
 
 extern void xact_redo(XLogRecPtr lsn, XLogRecord *record);