
This routine is unsafe as implemented, because it invalidates the page image pointers returned by previous GenericXLogRegister() calls. Rather than complicate the API or the implementation to avoid that, let's just get rid of it; the use-case for having it seems much too thin to justify a lot of work here. While at it, do some wordsmithing on the SGML docs for generic WAL.
42 lines
1.3 KiB
C
42 lines
1.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* generic_xlog.h
|
|
* Generic xlog API definition.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/access/generic_xlog.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef GENERIC_XLOG_H
|
|
#define GENERIC_XLOG_H
|
|
|
|
#include "access/xlog.h"
|
|
#include "access/xlog_internal.h"
|
|
#include "access/xloginsert.h"
|
|
#include "storage/bufpage.h"
|
|
#include "utils/rel.h"
|
|
|
|
#define MAX_GENERIC_XLOG_PAGES XLR_NORMAL_MAX_BLOCK_ID
|
|
|
|
/* state of generic xlog record construction */
|
|
struct GenericXLogState;
|
|
typedef struct GenericXLogState GenericXLogState;
|
|
|
|
/* API for construction of generic xlog records */
|
|
extern GenericXLogState *GenericXLogStart(Relation relation);
|
|
extern Page GenericXLogRegister(GenericXLogState *state, Buffer buffer,
|
|
bool isNew);
|
|
extern XLogRecPtr GenericXLogFinish(GenericXLogState *state);
|
|
extern void GenericXLogAbort(GenericXLogState *state);
|
|
|
|
/* functions defined for rmgr */
|
|
extern void generic_redo(XLogReaderState *record);
|
|
extern const char *generic_identify(uint8 info);
|
|
extern void generic_desc(StringInfo buf, XLogReaderState *record);
|
|
|
|
#endif /* GENERIC_XLOG_H */
|