1 /*-------------------------------------------------------------------------
4 * postgres transaction system definitions
7 * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.70 2004/08/29 04:13:04 momjian Exp $
12 *-------------------------------------------------------------------------
17 #include "access/xlog.h"
18 #include "storage/relfilenode.h"
19 #include "nodes/pg_list.h"
20 #include "utils/nabstime.h"
24 * Xact isolation levels
26 #define XACT_READ_UNCOMMITTED 0
27 #define XACT_READ_COMMITTED 1
28 #define XACT_REPEATABLE_READ 2
29 #define XACT_SERIALIZABLE 3
31 extern int DefaultXactIsoLevel;
32 extern int XactIsoLevel;
35 * We only implement two distinct levels, so this is a convenience to
36 * check which level we're really using internally.
38 #define IsXactIsoLevelSerializable ((XactIsoLevel == XACT_REPEATABLE_READ || XactIsoLevel == XACT_SERIALIZABLE))
40 /* Xact read-only state */
41 extern bool DefaultXactReadOnly;
42 extern bool XactReadOnly;
45 * start- and end-of-transaction callbacks for dynamically loaded modules
56 typedef void (*XactCallback) (XactEvent event, TransactionId parentXid, void *arg);
60 * transaction-related XLOG entries
65 * XLOG allows to store some information in high 4 bits of log
66 * record xl_info field
68 #define XLOG_XACT_COMMIT 0x00
69 #define XLOG_XACT_ABORT 0x20
71 typedef struct xl_xact_commit
74 int nrels; /* number of RelFileNodes */
75 int nsubxacts; /* number of subtransaction XIDs */
76 /* Array of RelFileNode(s) to drop at commit */
77 RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */
78 /* ARRAY OF COMMITTED SUBTRANSACTION XIDs FOLLOWS */
81 #define MinSizeOfXactCommit offsetof(xl_xact_commit, xnodes)
83 typedef struct xl_xact_abort
86 int nrels; /* number of RelFileNodes */
87 int nsubxacts; /* number of subtransaction XIDs */
88 /* Array of RelFileNode(s) to drop at abort */
89 RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */
90 /* ARRAY OF ABORTED SUBTRANSACTION XIDs FOLLOWS */
93 #define MinSizeOfXactAbort offsetof(xl_xact_abort, xnodes)
100 extern bool IsTransactionState(void);
101 extern bool IsAbortedTransactionBlockState(void);
102 extern TransactionId GetTopTransactionId(void);
103 extern TransactionId GetCurrentTransactionId(void);
104 extern CommandId GetCurrentCommandId(void);
105 extern AbsoluteTime GetCurrentTransactionStartTime(void);
106 extern AbsoluteTime GetCurrentTransactionStartTimeUsec(int *usec);
107 extern int GetCurrentTransactionNestLevel(void);
108 extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
109 extern void CommandCounterIncrement(void);
110 extern void StartTransactionCommand(void);
111 extern void CommitTransactionCommand(void);
112 extern void AbortCurrentTransaction(void);
113 extern void BeginTransactionBlock(void);
114 extern bool EndTransactionBlock(void);
115 extern void UserAbortTransactionBlock(void);
116 extern void ReleaseSavepoint(List *options);
117 extern void DefineSavepoint(char *name);
118 extern void RollbackToSavepoint(List *options);
119 extern void BeginInternalSubTransaction(char *name);
120 extern void ReleaseCurrentSubTransaction(void);
121 extern void RollbackAndReleaseCurrentSubTransaction(void);
122 extern bool IsSubTransaction(void);
123 extern bool IsTransactionBlock(void);
124 extern bool IsTransactionOrTransactionBlock(void);
125 extern char TransactionBlockStatusCode(void);
126 extern void AbortOutOfAnyTransaction(void);
127 extern void PreventTransactionChain(void *stmtNode, const char *stmtType);
128 extern void RequireTransactionChain(void *stmtNode, const char *stmtType);
129 extern bool IsInTransactionChain(void *stmtNode);
130 extern void RegisterXactCallback(XactCallback callback, void *arg);
131 extern void UnregisterXactCallback(XactCallback callback, void *arg);
133 extern void RecordTransactionCommit(void);
135 extern int xactGetCommittedChildren(TransactionId **ptr);
137 extern void XactPushRollback(void (*func) (void *), void *data);
138 extern void XactPopRollback(void);
140 extern void xact_redo(XLogRecPtr lsn, XLogRecord *record);
141 extern void xact_undo(XLogRecPtr lsn, XLogRecord *record);
142 extern void xact_desc(char *buf, uint8 xl_info, char *rec);