116 #define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__} 303 #define XLogRecGetTotalLen(decoder) ((decoder)->decoded_record->xl_tot_len) 304 #define XLogRecGetPrev(decoder) ((decoder)->decoded_record->xl_prev) 305 #define XLogRecGetInfo(decoder) ((decoder)->decoded_record->xl_info) 306 #define XLogRecGetRmid(decoder) ((decoder)->decoded_record->xl_rmid) 307 #define XLogRecGetXid(decoder) ((decoder)->decoded_record->xl_xid) 308 #define XLogRecGetOrigin(decoder) ((decoder)->record_origin) 309 #define XLogRecGetTopXid(decoder) ((decoder)->toplevel_xid) 310 #define XLogRecGetData(decoder) ((decoder)->main_data) 311 #define XLogRecGetDataLen(decoder) ((decoder)->main_data_len) 312 #define XLogRecHasAnyBlockRefs(decoder) ((decoder)->max_block_id >= 0) 313 #define XLogRecHasBlockRef(decoder, block_id) \ 314 ((decoder)->blocks[block_id].in_use) 315 #define XLogRecHasBlockImage(decoder, block_id) \ 316 ((decoder)->blocks[block_id].has_image) 317 #define XLogRecBlockImageApply(decoder, block_id) \ 318 ((decoder)->blocks[block_id].apply_image)
bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
struct WALSegmentContext WALSegmentContext
WALSegmentCloseCB segment_close
bool DecodeXLogRecord(XLogReaderState *state, XLogRecord *record, char **errmsg)
struct XLogReaderRoutine XLogReaderRoutine
bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr)
struct WALReadError WALReadError
struct XLogRecord * XLogReadRecord(XLogReaderState *state, char **errormsg)
XLogRecord * decoded_record
struct WALOpenSegment WALOpenSegment
XLogRecPtr currTLIValidUntil
void(* WALSegmentCloseCB)(XLogReaderState *xlogreader)
static XLogReaderState * xlogreader
void(* WALSegmentOpenCB)(XLogReaderState *xlogreader, XLogSegNo nextSegNo, TimeLineID *tli_p)
FullTransactionId XLogRecGetFullXid(XLogReaderState *record)
TransactionId toplevel_xid
bool WALRead(XLogReaderState *state, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo)
void XLogReaderFree(XLogReaderState *state)
bool XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, char *phdr)
XLogReaderState * XLogReaderAllocate(int wal_segment_size, const char *waldir, XLogReaderRoutine *routine, void *private_data)
XLogReaderRoutine * LocalXLogReaderRoutine(void)
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
int errmsg(const char *fmt,...)
WALSegmentOpenCB segment_open
int(* XLogPageReadCB)(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr, char *readBuf)
XLogReaderRoutine routine
RepOriginId record_origin
static XLogRecPtr startptr