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 }
unsigned char uint8
Definition: c.h:516
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:94
void appendStringInfoString(StringInfo str, const char *s)
Definition: stringinfo.c:179
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
#define XLR_INFO_MASK
Definition: xlogrecord.h:62

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, XLogRecGetInfo, and XLR_INFO_MASK.

◆ 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 }

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.