PostgreSQL Source Code git master
spgdesc.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * spgdesc.c
4 * rmgr descriptor routines for access/spgist/spgxlog.c
5 *
6 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 *
10 * IDENTIFICATION
11 * src/backend/access/rmgrdesc/spgdesc.c
12 *
13 *-------------------------------------------------------------------------
14 */
15#include "postgres.h"
16
17#include "access/spgxlog.h"
18
19void
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}
130
131const char *
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}
uint8_t uint8
Definition: c.h:486
static char * buf
Definition: pg_test_fsync.c:72
const char * spg_identify(uint8 info)
Definition: spgdesc.c:132
void spg_desc(StringInfo buf, XLogReaderState *record)
Definition: spgdesc.c:20
#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
#define XLR_INFO_MASK
Definition: xlogrecord.h:62