OSDN Git Service

4c2d8a0adfd212603e34ba78bb2c6c72a9531c13
[pg-rex/syncrep.git] / src / include / access / xact.h
1 /*-------------------------------------------------------------------------
2  *
3  * xact.h
4  *        postgres transaction system definitions
5  *
6  *
7  * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.70 2004/08/29 04:13:04 momjian Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef XACT_H
15 #define XACT_H
16
17 #include "access/xlog.h"
18 #include "storage/relfilenode.h"
19 #include "nodes/pg_list.h"
20 #include "utils/nabstime.h"
21
22
23 /*
24  * Xact isolation levels
25  */
26 #define XACT_READ_UNCOMMITTED   0
27 #define XACT_READ_COMMITTED             1
28 #define XACT_REPEATABLE_READ    2
29 #define XACT_SERIALIZABLE               3
30
31 extern int      DefaultXactIsoLevel;
32 extern int      XactIsoLevel;
33
34 /*
35  * We only implement two distinct levels, so this is a convenience to
36  * check which level we're really using internally.
37  */
38 #define IsXactIsoLevelSerializable ((XactIsoLevel == XACT_REPEATABLE_READ || XactIsoLevel == XACT_SERIALIZABLE))
39
40 /* Xact read-only state */
41 extern bool DefaultXactReadOnly;
42 extern bool XactReadOnly;
43
44 /*
45  *      start- and end-of-transaction callbacks for dynamically loaded modules
46  */
47 typedef enum
48 {
49         XACT_EVENT_ABORT,
50         XACT_EVENT_COMMIT,
51         XACT_EVENT_START_SUB,
52         XACT_EVENT_ABORT_SUB,
53         XACT_EVENT_COMMIT_SUB
54 } XactEvent;
55
56 typedef void (*XactCallback) (XactEvent event, TransactionId parentXid, void *arg);
57
58
59 /* ----------------
60  *              transaction-related XLOG entries
61  * ----------------
62  */
63
64 /*
65  * XLOG allows to store some information in high 4 bits of log
66  * record xl_info field
67  */
68 #define XLOG_XACT_COMMIT        0x00
69 #define XLOG_XACT_ABORT         0x20
70
71 typedef struct xl_xact_commit
72 {
73         time_t          xtime;
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 */
79 } xl_xact_commit;
80
81 #define MinSizeOfXactCommit     offsetof(xl_xact_commit, xnodes)
82
83 typedef struct xl_xact_abort
84 {
85         time_t          xtime;
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 */
91 } xl_xact_abort;
92
93 #define MinSizeOfXactAbort offsetof(xl_xact_abort, xnodes)
94
95
96 /* ----------------
97  *              extern definitions
98  * ----------------
99  */
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);
132
133 extern void RecordTransactionCommit(void);
134
135 extern int      xactGetCommittedChildren(TransactionId **ptr);
136
137 extern void XactPushRollback(void (*func) (void *), void *data);
138 extern void XactPopRollback(void);
139
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);
143
144 #endif   /* XACT_H */