PostgreSQL Source Code git master
Loading...
Searching...
No Matches
spgxlog.h File Reference
#include "access/xlogreader.h"
#include "lib/stringinfo.h"
#include "storage/off.h"
Include dependency graph for spgxlog.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  spgxlogState
 
struct  spgxlogAddLeaf
 
struct  spgxlogMoveLeafs
 
struct  spgxlogAddNode
 
struct  spgxlogSplitTuple
 
struct  spgxlogPickSplit
 
struct  spgxlogVacuumLeaf
 
struct  spgxlogVacuumRoot
 
struct  spgxlogVacuumRedirect
 

Macros

#define XLOG_SPGIST_ADD_LEAF   0x10
 
#define XLOG_SPGIST_MOVE_LEAFS   0x20
 
#define XLOG_SPGIST_ADD_NODE   0x30
 
#define XLOG_SPGIST_SPLIT_TUPLE   0x40
 
#define XLOG_SPGIST_PICKSPLIT   0x50
 
#define XLOG_SPGIST_VACUUM_LEAF   0x60
 
#define XLOG_SPGIST_VACUUM_ROOT   0x70
 
#define XLOG_SPGIST_VACUUM_REDIRECT   0x80
 
#define SizeOfSpgxlogMoveLeafs   offsetof(spgxlogMoveLeafs, offsets)
 
#define SizeOfSpgxlogPickSplit   offsetof(spgxlogPickSplit, offsets)
 
#define SizeOfSpgxlogVacuumLeaf   offsetof(spgxlogVacuumLeaf, offsets)
 
#define SizeOfSpgxlogVacuumRoot   offsetof(spgxlogVacuumRoot, offsets)
 
#define SizeOfSpgxlogVacuumRedirect   offsetof(spgxlogVacuumRedirect, offsets)
 

Typedefs

typedef struct spgxlogState spgxlogState
 
typedef struct spgxlogAddLeaf spgxlogAddLeaf
 
typedef struct spgxlogMoveLeafs spgxlogMoveLeafs
 
typedef struct spgxlogAddNode spgxlogAddNode
 
typedef struct spgxlogSplitTuple spgxlogSplitTuple
 
typedef struct spgxlogPickSplit spgxlogPickSplit
 
typedef struct spgxlogVacuumLeaf spgxlogVacuumLeaf
 
typedef struct spgxlogVacuumRoot spgxlogVacuumRoot
 
typedef struct spgxlogVacuumRedirect spgxlogVacuumRedirect
 

Functions

void spg_redo (XLogReaderState *record)
 
void spg_desc (StringInfo buf, XLogReaderState *record)
 
const charspg_identify (uint8 info)
 
void spg_xlog_startup (void)
 
void spg_xlog_cleanup (void)
 
void spg_mask (char *pagedata, BlockNumber blkno)
 

Macro Definition Documentation

◆ SizeOfSpgxlogMoveLeafs

#define SizeOfSpgxlogMoveLeafs   offsetof(spgxlogMoveLeafs, offsets)

Definition at line 91 of file spgxlog.h.

◆ SizeOfSpgxlogPickSplit

#define SizeOfSpgxlogPickSplit   offsetof(spgxlogPickSplit, offsets)

Definition at line 199 of file spgxlog.h.

◆ SizeOfSpgxlogVacuumLeaf

#define SizeOfSpgxlogVacuumLeaf   offsetof(spgxlogVacuumLeaf, offsets)

Definition at line 223 of file spgxlog.h.

◆ SizeOfSpgxlogVacuumRedirect

#define SizeOfSpgxlogVacuumRedirect   offsetof(spgxlogVacuumRedirect, offsets)

Definition at line 250 of file spgxlog.h.

◆ SizeOfSpgxlogVacuumRoot

#define SizeOfSpgxlogVacuumRoot   offsetof(spgxlogVacuumRoot, offsets)

Definition at line 236 of file spgxlog.h.

◆ XLOG_SPGIST_ADD_LEAF

#define XLOG_SPGIST_ADD_LEAF   0x10

Definition at line 22 of file spgxlog.h.

◆ XLOG_SPGIST_ADD_NODE

#define XLOG_SPGIST_ADD_NODE   0x30

Definition at line 24 of file spgxlog.h.

◆ XLOG_SPGIST_MOVE_LEAFS

#define XLOG_SPGIST_MOVE_LEAFS   0x20

Definition at line 23 of file spgxlog.h.

◆ XLOG_SPGIST_PICKSPLIT

#define XLOG_SPGIST_PICKSPLIT   0x50

Definition at line 26 of file spgxlog.h.

◆ XLOG_SPGIST_SPLIT_TUPLE

#define XLOG_SPGIST_SPLIT_TUPLE   0x40

Definition at line 25 of file spgxlog.h.

◆ XLOG_SPGIST_VACUUM_LEAF

#define XLOG_SPGIST_VACUUM_LEAF   0x60

Definition at line 27 of file spgxlog.h.

◆ XLOG_SPGIST_VACUUM_REDIRECT

#define XLOG_SPGIST_VACUUM_REDIRECT   0x80

Definition at line 29 of file spgxlog.h.

◆ XLOG_SPGIST_VACUUM_ROOT

#define XLOG_SPGIST_VACUUM_ROOT   0x70

Definition at line 28 of file spgxlog.h.

Typedef Documentation

◆ spgxlogAddLeaf

◆ spgxlogAddNode

◆ spgxlogMoveLeafs

◆ spgxlogPickSplit

◆ spgxlogSplitTuple

◆ spgxlogState

◆ spgxlogVacuumLeaf

◆ spgxlogVacuumRedirect

◆ spgxlogVacuumRoot

Function Documentation

◆ spg_desc()

void spg_desc ( StringInfo  buf,
XLogReaderState record 
)
extern

Definition at line 20 of file spgdesc.c.

21{
22 char *rec = XLogRecGetData(record);
23 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24
25 switch (info)
26 {
28 {
30
31 appendStringInfo(buf, "off: %u, headoff: %u, parentoff: %u, nodeI: %u",
32 xlrec->offnumLeaf, xlrec->offnumHeadLeaf,
33 xlrec->offnumParent, xlrec->nodeI);
34 if (xlrec->newPage)
35 appendStringInfoString(buf, " (newpage)");
36 if (xlrec->storesNulls)
37 appendStringInfoString(buf, " (nulls)");
38 }
39 break;
41 {
43
44 appendStringInfo(buf, "nmoves: %u, parentoff: %u, nodeI: %u",
45 xlrec->nMoves,
46 xlrec->offnumParent, xlrec->nodeI);
47 if (xlrec->newPage)
48 appendStringInfoString(buf, " (newpage)");
49 if (xlrec->replaceDead)
50 appendStringInfoString(buf, " (replacedead)");
51 if (xlrec->storesNulls)
52 appendStringInfoString(buf, " (nulls)");
53 }
54 break;
56 {
58
59 appendStringInfo(buf, "off: %u, newoff: %u, parentBlk: %d, "
60 "parentoff: %u, nodeI: %u",
61 xlrec->offnum,
62 xlrec->offnumNew,
63 xlrec->parentBlk,
64 xlrec->offnumParent,
65 xlrec->nodeI);
66 if (xlrec->newPage)
67 appendStringInfoString(buf, " (newpage)");
68 }
69 break;
71 {
73
74 appendStringInfo(buf, "prefixoff: %u, postfixoff: %u",
75 xlrec->offnumPrefix,
76 xlrec->offnumPostfix);
77 if (xlrec->newPage)
78 appendStringInfoString(buf, " (newpage)");
79 if (xlrec->postfixBlkSame)
80 appendStringInfoString(buf, " (same)");
81 }
82 break;
84 {
86
87 appendStringInfo(buf, "ndelete: %u, ninsert: %u, inneroff: %u, "
88 "parentoff: %u, nodeI: %u",
89 xlrec->nDelete, xlrec->nInsert,
90 xlrec->offnumInner,
91 xlrec->offnumParent, xlrec->nodeI);
92 if (xlrec->innerIsParent)
93 appendStringInfoString(buf, " (innerIsParent)");
94 if (xlrec->storesNulls)
95 appendStringInfoString(buf, " (nulls)");
96 if (xlrec->isRootSplit)
97 appendStringInfoString(buf, " (isRootSplit)");
98 }
99 break;
101 {
103
104 appendStringInfo(buf, "ndead: %u, nplaceholder: %u, nmove: %u, nchain: %u",
105 xlrec->nDead, xlrec->nPlaceholder,
106 xlrec->nMove, xlrec->nChain);
107 }
108 break;
110 {
112
113 appendStringInfo(buf, "ndelete: %u",
114 xlrec->nDelete);
115 }
116 break;
118 {
120
121 appendStringInfo(buf, "ntoplaceholder: %u, firstplaceholder: %u, snapshotConflictHorizon: %u, isCatalogRel: %c",
122 xlrec->nToPlaceholder,
123 xlrec->firstPlaceholder,
124 xlrec->snapshotConflictHorizon,
125 xlrec->isCatalogRel ? 'T' : 'F');
126 }
127 break;
128 }
129}
uint8_t uint8
Definition c.h:544
static char buf[DEFAULT_XLOG_SEG_SIZE]
static int fb(int x)
#define XLOG_SPGIST_SPLIT_TUPLE
Definition spgxlog.h:25
#define XLOG_SPGIST_VACUUM_ROOT
Definition spgxlog.h:28
#define XLOG_SPGIST_VACUUM_LEAF
Definition spgxlog.h:27
#define XLOG_SPGIST_ADD_NODE
Definition spgxlog.h:24
#define XLOG_SPGIST_ADD_LEAF
Definition spgxlog.h:22
#define XLOG_SPGIST_MOVE_LEAFS
Definition spgxlog.h:23
#define XLOG_SPGIST_PICKSPLIT
Definition spgxlog.h:26
#define XLOG_SPGIST_VACUUM_REDIRECT
Definition spgxlog.h:29
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition stringinfo.c:145
void appendStringInfoString(StringInfo str, const char *s)
Definition stringinfo.c:230
#define XLogRecGetInfo(decoder)
Definition xlogreader.h:409
#define XLogRecGetData(decoder)
Definition xlogreader.h:414

References appendStringInfo(), appendStringInfoString(), buf, fb(), XLOG_SPGIST_ADD_LEAF, XLOG_SPGIST_ADD_NODE, XLOG_SPGIST_MOVE_LEAFS, XLOG_SPGIST_PICKSPLIT, XLOG_SPGIST_SPLIT_TUPLE, XLOG_SPGIST_VACUUM_LEAF, XLOG_SPGIST_VACUUM_REDIRECT, XLOG_SPGIST_VACUUM_ROOT, XLogRecGetData, and XLogRecGetInfo.

◆ spg_identify()

const char * spg_identify ( uint8  info)
extern

Definition at line 132 of file spgdesc.c.

133{
134 const char *id = NULL;
135
136 switch (info & ~XLR_INFO_MASK)
137 {
139 id = "ADD_LEAF";
140 break;
142 id = "MOVE_LEAFS";
143 break;
145 id = "ADD_NODE";
146 break;
148 id = "SPLIT_TUPLE";
149 break;
151 id = "PICKSPLIT";
152 break;
154 id = "VACUUM_LEAF";
155 break;
157 id = "VACUUM_ROOT";
158 break;
160 id = "VACUUM_REDIRECT";
161 break;
162 }
163
164 return id;
165}
#define XLR_INFO_MASK
Definition xlogrecord.h:62

References fb(), XLOG_SPGIST_ADD_LEAF, XLOG_SPGIST_ADD_NODE, XLOG_SPGIST_MOVE_LEAFS, XLOG_SPGIST_PICKSPLIT, XLOG_SPGIST_SPLIT_TUPLE, XLOG_SPGIST_VACUUM_LEAF, XLOG_SPGIST_VACUUM_REDIRECT, XLOG_SPGIST_VACUUM_ROOT, and XLR_INFO_MASK.

◆ spg_mask()

void spg_mask ( char pagedata,
BlockNumber  blkno 
)
extern

Definition at line 986 of file spgxlog.c.

987{
988 Page page = (Page) pagedata;
990
992
994
995 /*
996 * Mask the unused space, but only if the page's pd_lower appears to have
997 * been set correctly.
998 */
999 if (pagehdr->pd_lower >= SizeOfPageHeaderData)
1000 mask_unused_space(page);
1001}
void mask_page_lsn_and_checksum(Page page)
Definition bufmask.c:31
void mask_unused_space(Page page)
Definition bufmask.c:71
void mask_page_hint_bits(Page page)
Definition bufmask.c:46
PageHeaderData * PageHeader
Definition bufpage.h:173
#define SizeOfPageHeaderData
Definition bufpage.h:216
PageData * Page
Definition bufpage.h:81

References fb(), mask_page_hint_bits(), mask_page_lsn_and_checksum(), mask_unused_space(), and SizeOfPageHeaderData.

◆ spg_redo()

void spg_redo ( XLogReaderState record)
extern

Definition at line 927 of file spgxlog.c.

928{
929 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
931
933 switch (info)
934 {
936 spgRedoAddLeaf(record);
937 break;
939 spgRedoMoveLeafs(record);
940 break;
942 spgRedoAddNode(record);
943 break;
945 spgRedoSplitTuple(record);
946 break;
948 spgRedoPickSplit(record);
949 break;
951 spgRedoVacuumLeaf(record);
952 break;
954 spgRedoVacuumRoot(record);
955 break;
957 spgRedoVacuumRedirect(record);
958 break;
959 default:
960 elog(PANIC, "spg_redo: unknown op code %u", info);
961 }
962
965}
#define PANIC
Definition elog.h:42
#define elog(elevel,...)
Definition elog.h:226
void MemoryContextReset(MemoryContext context)
Definition mcxt.c:403
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
Definition palloc.h:124
static void spgRedoVacuumRoot(XLogReaderState *record)
Definition spgxlog.c:826
static void spgRedoSplitTuple(XLogReaderState *record)
Definition spgxlog.c:448
static void spgRedoVacuumRedirect(XLogReaderState *record)
Definition spgxlog.c:852
static void spgRedoMoveLeafs(XLogReaderState *record)
Definition spgxlog.c:170
static void spgRedoAddNode(XLogReaderState *record)
Definition spgxlog.c:282
static MemoryContext opCtx
Definition spgxlog.c:25
static void spgRedoVacuumLeaf(XLogReaderState *record)
Definition spgxlog.c:743
static void spgRedoPickSplit(XLogReaderState *record)
Definition spgxlog.c:523
static void spgRedoAddLeaf(XLogReaderState *record)
Definition spgxlog.c:74

References elog, fb(), MemoryContextReset(), MemoryContextSwitchTo(), opCtx, PANIC, spgRedoAddLeaf(), spgRedoAddNode(), spgRedoMoveLeafs(), spgRedoPickSplit(), spgRedoSplitTuple(), spgRedoVacuumLeaf(), spgRedoVacuumRedirect(), spgRedoVacuumRoot(), XLOG_SPGIST_ADD_LEAF, XLOG_SPGIST_ADD_NODE, XLOG_SPGIST_MOVE_LEAFS, XLOG_SPGIST_PICKSPLIT, XLOG_SPGIST_SPLIT_TUPLE, XLOG_SPGIST_VACUUM_LEAF, XLOG_SPGIST_VACUUM_REDIRECT, XLOG_SPGIST_VACUUM_ROOT, and XLogRecGetInfo.

◆ spg_xlog_cleanup()

void spg_xlog_cleanup ( void  )
extern

Definition at line 976 of file spgxlog.c.

977{
979 opCtx = NULL;
980}
void MemoryContextDelete(MemoryContext context)
Definition mcxt.c:472

References fb(), MemoryContextDelete(), and opCtx.

◆ spg_xlog_startup()

void spg_xlog_startup ( void  )
extern

Definition at line 968 of file spgxlog.c.

969{
971 "SP-GiST temporary context",
973}
MemoryContext CurrentMemoryContext
Definition mcxt.c:160
#define AllocSetContextCreate
Definition memutils.h:129
#define ALLOCSET_DEFAULT_SIZES
Definition memutils.h:160

References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, CurrentMemoryContext, and opCtx.