📄 xact.h
字号:
/*------------------------------------------------------------------------- * * xact.h * postgres transaction system definitions * * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.79 2005/10/15 02:49:42 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef XACT_H#define XACT_H#include "access/xlog.h"#include "storage/relfilenode.h"#include "nodes/pg_list.h"#include "utils/timestamp.h"/* * Xact isolation levels */#define XACT_READ_UNCOMMITTED 0#define XACT_READ_COMMITTED 1#define XACT_REPEATABLE_READ 2#define XACT_SERIALIZABLE 3extern int DefaultXactIsoLevel;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)/* Xact read-only state */extern bool DefaultXactReadOnly;extern bool XactReadOnly;/* * start- and end-of-transaction callbacks for dynamically loaded modules */typedef enum{ XACT_EVENT_COMMIT, XACT_EVENT_ABORT, XACT_EVENT_PREPARE} XactEvent;typedef void (*XactCallback) (XactEvent event, void *arg);typedef enum{ SUBXACT_EVENT_START_SUB, SUBXACT_EVENT_COMMIT_SUB, SUBXACT_EVENT_ABORT_SUB} SubXactEvent;typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid, void *arg);/* ---------------- * transaction-related XLOG entries * ---------------- *//* * XLOG allows to store some information in high 4 bits of log * record xl_info field */#define XLOG_XACT_COMMIT 0x00#define XLOG_XACT_PREPARE 0x10#define XLOG_XACT_ABORT 0x20#define XLOG_XACT_COMMIT_PREPARED 0x30#define XLOG_XACT_ABORT_PREPARED 0x40typedef struct xl_xact_commit{ time_t xtime; int nrels; /* number of RelFileNodes */ int nsubxacts; /* number of subtransaction XIDs */ /* Array of RelFileNode(s) to drop at commit */ RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */ /* ARRAY OF COMMITTED SUBTRANSACTION XIDs FOLLOWS */} xl_xact_commit;#define MinSizeOfXactCommit offsetof(xl_xact_commit, xnodes)typedef struct xl_xact_abort{ time_t xtime; int nrels; /* number of RelFileNodes */ int nsubxacts; /* number of subtransaction XIDs */ /* Array of RelFileNode(s) to drop at abort */ RelFileNode xnodes[1]; /* VARIABLE LENGTH ARRAY */ /* ARRAY OF ABORTED SUBTRANSACTION XIDs FOLLOWS */} xl_xact_abort;#define MinSizeOfXactAbort offsetof(xl_xact_abort, xnodes)/* * COMMIT_PREPARED and ABORT_PREPARED are identical to COMMIT/ABORT records * except that we have to store the XID of the prepared transaction explicitly * --- the XID in the record header will be for the transaction doing the * COMMIT PREPARED or ABORT PREPARED command. */typedef struct xl_xact_commit_prepared{ TransactionId xid; /* XID of prepared xact */ xl_xact_commit crec; /* COMMIT record */ /* MORE DATA FOLLOWS AT END OF STRUCT */} xl_xact_commit_prepared;#define MinSizeOfXactCommitPrepared offsetof(xl_xact_commit_prepared, crec.xnodes)typedef struct xl_xact_abort_prepared{ TransactionId xid; /* XID of prepared xact */ xl_xact_abort arec; /* ABORT record */ /* MORE DATA FOLLOWS AT END OF STRUCT */} xl_xact_abort_prepared;#define MinSizeOfXactAbortPrepared offsetof(xl_xact_abort_prepared, arec.xnodes)/* ---------------- * extern definitions * ---------------- */extern bool IsTransactionState(void);extern bool IsAbortedTransactionBlockState(void);extern TransactionId GetTopTransactionId(void);extern TransactionId GetCurrentTransactionId(void);extern TransactionId GetCurrentTransactionIdIfAny(void);extern SubTransactionId GetCurrentSubTransactionId(void);extern CommandId GetCurrentCommandId(void);extern TimestampTz GetCurrentTransactionStartTimestamp(void);extern int GetCurrentTransactionNestLevel(void);extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);extern void CommandCounterIncrement(void);extern void StartTransactionCommand(void);extern void CommitTransactionCommand(void);extern void AbortCurrentTransaction(void);extern void BeginTransactionBlock(void);extern bool EndTransactionBlock(void);extern bool PrepareTransactionBlock(char *gid);extern void UserAbortTransactionBlock(void);extern void ReleaseSavepoint(List *options);extern void DefineSavepoint(char *name);extern void RollbackToSavepoint(List *options);extern void BeginInternalSubTransaction(char *name);extern void ReleaseCurrentSubTransaction(void);extern void RollbackAndReleaseCurrentSubTransaction(void);extern bool IsSubTransaction(void);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 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);extern void xact_desc(char *buf, uint8 xl_info, char *rec);#endif /* XACT_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -