diff options
Diffstat (limited to 'src/include/access/xlogdefs.h')
-rw-r--r-- | src/include/access/xlogdefs.h | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h index ce1b3ef8cf6..bc7f9e1a36d 100644 --- a/src/include/access/xlogdefs.h +++ b/src/include/access/xlogdefs.h @@ -1,21 +1,56 @@ /* - * * xlogdefs.h * * Postgres transaction log manager record pointer and - * system stratup number definitions + * system startup number definitions + * + * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California * + * $Id: xlogdefs.h,v 1.2 2001/03/13 01:17:06 tgl Exp $ */ #ifndef XLOG_DEFS_H #define XLOG_DEFS_H +/* + * Pointer to a location in the XLOG. These pointers are 64 bits wide, + * because we don't want them ever to overflow. + * + * NOTE: xrecoff == 0 is used to indicate an invalid pointer. This is OK + * because we use page headers in the XLOG, so no XLOG record can start + * right at the beginning of a file. + * + * NOTE: the "log file number" is somewhat misnamed, since the actual files + * making up the XLOG are much smaller than 4Gb. Each actual file is an + * XLogSegSize-byte "segment" of a logical log file having the indicated + * xlogid. The log file number and segment number together identify a + * physical XLOG file. Segment number and offset within the physical file + * are computed from xrecoff div and mod XLogSegSize. + */ typedef struct XLogRecPtr { uint32 xlogid; /* log file #, 0 based */ - uint32 xrecoff; /* offset of record in log file */ + uint32 xrecoff; /* byte offset of location in log file */ } XLogRecPtr; /* + * Macros for comparing XLogRecPtrs + * + * Beware of passing expressions with side-effects to these macros, + * since the arguments may be evaluated multiple times. + */ +#define XLByteLT(a, b) \ + ((a).xlogid < (b).xlogid || \ + ((a).xlogid == (b).xlogid && (a).xrecoff < (b).xrecoff)) + +#define XLByteLE(a, b) \ + ((a).xlogid < (b).xlogid || \ + ((a).xlogid == (b).xlogid && (a).xrecoff <= (b).xrecoff)) + +#define XLByteEQ(a, b) \ + ((a).xlogid == (b).xlogid && (a).xrecoff == (b).xrecoff) + +/* * StartUpID (SUI) - system startups counter. It's to allow removing * pg_log after shutdown, in future. */ |