PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
spgdesc.c File Reference
#include "postgres.h"
#include "access/spgxlog.h"
Include dependency graph for spgdesc.c:

Go to the source code of this file.

Functions

void spg_desc (StringInfo buf, XLogReaderState *record)
 
const char * spg_identify (uint8 info)
 

Function Documentation

◆ spg_desc()

void spg_desc ( StringInfo  buf,
XLogReaderState record 
)

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 {
29 spgxlogAddLeaf *xlrec = (spgxlogAddLeaf *) rec;
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 {
42 spgxlogMoveLeafs *xlrec = (spgxlogMoveLeafs *) rec;
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 {
57 spgxlogAddNode *xlrec = (spgxlogAddNode *) rec;
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 {
72 spgxlogSplitTuple *xlrec = (spgxlogSplitTuple *) rec;
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 {
85 spgxlogPickSplit *xlrec = (spgxlogPickSplit *) rec;
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 {
102 spgxlogVacuumLeaf *xlrec = (spgxlogVacuumLeaf *) rec;
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 {
111 spgxlogVacuumRoot *xlrec = (spgxlogVacuumRoot *) rec;
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,
125 xlrec->isCatalogRel ? 'T' : 'F');
126 }
127 break;
128 }
129}
uint8_t uint8
Definition: c.h:500
static char * buf
Definition: pg_test_fsync.c:72
#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
uint16 nodeI
Definition: spgxlog.h:54
bool newPage
Definition: spgxlog.h:48
OffsetNumber offnumLeaf
Definition: spgxlog.h:50
bool storesNulls
Definition: spgxlog.h:49
OffsetNumber offnumHeadLeaf
Definition: spgxlog.h:51
OffsetNumber offnumParent
Definition: spgxlog.h:53
OffsetNumber offnumNew
Definition: spgxlog.h:111
bool newPage
Definition: spgxlog.h:112
OffsetNumber offnumParent
Definition: spgxlog.h:126
OffsetNumber offnum
Definition: spgxlog.h:105
uint16 nodeI
Definition: spgxlog.h:128
int8 parentBlk
Definition: spgxlog.h:125
bool replaceDead
Definition: spgxlog.h:68
bool storesNulls
Definition: spgxlog.h:69
uint16 nMoves
Definition: spgxlog.h:66
uint16 nodeI
Definition: spgxlog.h:73
OffsetNumber offnumParent
Definition: spgxlog.h:72
uint16 nInsert
Definition: spgxlog.h:170
bool innerIsParent
Definition: spgxlog.h:181
uint16 nodeI
Definition: spgxlog.h:183
bool storesNulls
Definition: spgxlog.h:178
OffsetNumber offnumParent
Definition: spgxlog.h:182
OffsetNumber offnumInner
Definition: spgxlog.h:175
uint16 nDelete
Definition: spgxlog.h:169
bool isRootSplit
Definition: spgxlog.h:167
OffsetNumber offnumPostfix
Definition: spgxlog.h:147
OffsetNumber offnumPrefix
Definition: spgxlog.h:144
bool postfixBlkSame
Definition: spgxlog.h:149
uint16 nPlaceholder
Definition: spgxlog.h:204
OffsetNumber firstPlaceholder
Definition: spgxlog.h:241
TransactionId snapshotConflictHorizon
Definition: spgxlog.h:242
uint16 nDelete
Definition: spgxlog.h:228
#define XLogRecGetInfo(decoder)
Definition: xlogreader.h:410
#define XLogRecGetData(decoder)
Definition: xlogreader.h:415

References appendStringInfo(), appendStringInfoString(), buf, spgxlogVacuumRedirect::firstPlaceholder, spgxlogPickSplit::innerIsParent, spgxlogVacuumRedirect::isCatalogRel, spgxlogPickSplit::isRootSplit, spgxlogVacuumLeaf::nChain, spgxlogVacuumLeaf::nDead, spgxlogPickSplit::nDelete, spgxlogVacuumRoot::nDelete, spgxlogAddLeaf::newPage, spgxlogMoveLeafs::newPage, spgxlogAddNode::newPage, spgxlogSplitTuple::newPage, spgxlogPickSplit::nInsert, spgxlogVacuumLeaf::nMove, spgxlogMoveLeafs::nMoves, spgxlogAddLeaf::nodeI, spgxlogMoveLeafs::nodeI, spgxlogAddNode::nodeI, spgxlogPickSplit::nodeI, spgxlogVacuumLeaf::nPlaceholder, spgxlogVacuumRedirect::nToPlaceholder, spgxlogAddNode::offnum, spgxlogAddLeaf::offnumHeadLeaf, spgxlogPickSplit::offnumInner, spgxlogAddLeaf::offnumLeaf, spgxlogAddNode::offnumNew, spgxlogAddLeaf::offnumParent, spgxlogMoveLeafs::offnumParent, spgxlogAddNode::offnumParent, spgxlogPickSplit::offnumParent, spgxlogSplitTuple::offnumPostfix, spgxlogSplitTuple::offnumPrefix, spgxlogAddNode::parentBlk, spgxlogSplitTuple::postfixBlkSame, spgxlogMoveLeafs::replaceDead, spgxlogVacuumRedirect::snapshotConflictHorizon, spgxlogAddLeaf::storesNulls, spgxlogMoveLeafs::storesNulls, spgxlogPickSplit::storesNulls, 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)

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 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.