aboutsummaryrefslogtreecommitdiff
path: root/src/include/access/xlog.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/access/xlog.h')
-rw-r--r--src/include/access/xlog.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
new file mode 100644
index 00000000000..5c8c0754246
--- /dev/null
+++ b/src/include/access/xlog.h
@@ -0,0 +1,70 @@
+/*
+ *
+ * xlog.h
+ *
+ * Postgres transaction log manager
+ *
+ */
+#ifndef XLOG_H
+#define XLOG_H
+
+#include "access/rmgr.h"
+#include "access/transam.h"
+
+typedef struct XLogRecPtr
+{
+ uint32 xlogid; /* log file #, 0 based */
+ uint32 xrecoff; /* offset of record in log file */
+} XLogRecPtr;
+
+typedef struct XLogRecord
+{
+ XLogRecPtr xl_prev; /* ptr to previous record in log */
+ XLogRecPtr xl_xact_prev; /* ptr to previous record of this xact */
+ TransactionId xl_xid; /* xact id */
+ uint16 xl_len; /* len of record on this page */
+ uint8 xl_info;
+ RmgrId xl_rmid; /* resource manager inserted this record */
+
+ /* ACTUAL LOG DATA FOLLOWS AT END OF STRUCT */
+
+} XLogRecord;
+
+#define SizeOfXLogRecord DOUBLEALIGN(sizeof(XLogRecord))
+#define MAXLOGRECSZ (2 * BLCKSZ)
+/*
+ * When there is no space on current page we continue on the next
+ * page with subrecord.
+ */
+typedef struct XLogSubRecord
+{
+ uint16 xl_len;
+ uint8 xl_info;
+
+ /* ACTUAL LOG DATA FOLLOWS AT END OF STRUCT */
+
+} XLogSubRecord;
+
+#define SizeOfXLogSubRecord DOUBLEALIGN(sizeof(XLogSubRecord))
+
+#define XLR_TO_BE_CONTINUED 0x01
+
+#define XLOG_PAGE_MAGIC 0x17345168
+
+typedef struct XLogPageHeaderData
+{
+ uint32 xlp_magic;
+ uint16 xlp_info;
+} XLogPageHeaderData;
+
+#define SizeOfXLogPHD DOUBLEALIGN(sizeof(XLogPageHeaderData))
+
+typedef XLogPageHeaderData *XLogPageHeader;
+
+#define XLP_FIRST_IS_SUBRECORD 0x0001
+
+extern XLogRecPtr XLogInsert(RmgrId rmid, char *hdr, uint32 hdrlen,
+ char *buf, uint32 buflen);
+extern void XLogFlush(XLogRecPtr RecPtr);
+
+#endif /* XLOG_H */