Branch data Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * gistdesc.c
4 : : * rmgr descriptor routines for access/gist/gistxlog.c
5 : : *
6 : : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 : : * Portions Copyright (c) 1994, Regents of the University of California
8 : : *
9 : : *
10 : : * IDENTIFICATION
11 : : * src/backend/access/rmgrdesc/gistdesc.c
12 : : *
13 : : *-------------------------------------------------------------------------
14 : : */
15 : : #include "postgres.h"
16 : :
17 : : #include "access/gistxlog.h"
18 : : #include "lib/stringinfo.h"
19 : :
20 : : static void
21 : 0 : out_gistxlogPageUpdate(StringInfo buf, gistxlogPageUpdate *xlrec)
22 : : {
23 : 0 : }
24 : :
25 : : static void
26 : 0 : out_gistxlogPageReuse(StringInfo buf, gistxlogPageReuse *xlrec)
27 : : {
28 : 0 : appendStringInfo(buf, "rel %u/%u/%u; blk %u; snapshotConflictHorizon %u:%u, isCatalogRel %c",
29 : 0 : xlrec->locator.spcOid, xlrec->locator.dbOid,
30 : 0 : xlrec->locator.relNumber, xlrec->block,
31 : 0 : EpochFromFullTransactionId(xlrec->snapshotConflictHorizon),
32 : 0 : XidFromFullTransactionId(xlrec->snapshotConflictHorizon),
33 : 0 : xlrec->isCatalogRel ? 'T' : 'F');
34 : 0 : }
35 : :
36 : : static void
37 : 0 : out_gistxlogDelete(StringInfo buf, gistxlogDelete *xlrec)
38 : : {
39 : 0 : appendStringInfo(buf, "delete: snapshotConflictHorizon %u, nitems: %u, isCatalogRel %c",
40 : 0 : xlrec->snapshotConflictHorizon, xlrec->ntodelete,
41 : 0 : xlrec->isCatalogRel ? 'T' : 'F');
42 : 0 : }
43 : :
44 : : static void
45 : 0 : out_gistxlogPageSplit(StringInfo buf, gistxlogPageSplit *xlrec)
46 : : {
47 : 0 : appendStringInfo(buf, "page_split: splits to %d pages",
48 : 0 : xlrec->npage);
49 : 0 : }
50 : :
51 : : static void
52 : 0 : out_gistxlogPageDelete(StringInfo buf, gistxlogPageDelete *xlrec)
53 : : {
54 : 0 : appendStringInfo(buf, "deleteXid %u:%u; downlink %u",
55 : 0 : EpochFromFullTransactionId(xlrec->deleteXid),
56 : 0 : XidFromFullTransactionId(xlrec->deleteXid),
57 : 0 : xlrec->downlinkOffset);
58 : 0 : }
59 : :
60 : : void
61 : 0 : gist_desc(StringInfo buf, XLogReaderState *record)
62 : : {
63 : 0 : char *rec = XLogRecGetData(record);
64 : 0 : uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
65 : :
66 [ # # # # : 0 : switch (info)
# # ]
67 : : {
68 : : case XLOG_GIST_PAGE_UPDATE:
69 : 0 : out_gistxlogPageUpdate(buf, (gistxlogPageUpdate *) rec);
70 : 0 : break;
71 : : case XLOG_GIST_PAGE_REUSE:
72 : 0 : out_gistxlogPageReuse(buf, (gistxlogPageReuse *) rec);
73 : 0 : break;
74 : : case XLOG_GIST_DELETE:
75 : 0 : out_gistxlogDelete(buf, (gistxlogDelete *) rec);
76 : 0 : break;
77 : : case XLOG_GIST_PAGE_SPLIT:
78 : 0 : out_gistxlogPageSplit(buf, (gistxlogPageSplit *) rec);
79 : 0 : break;
80 : : case XLOG_GIST_PAGE_DELETE:
81 : 0 : out_gistxlogPageDelete(buf, (gistxlogPageDelete *) rec);
82 : 0 : break;
83 : : case XLOG_GIST_ASSIGN_LSN:
84 : : /* No details to write out */
85 : : break;
86 : : }
87 : 0 : }
88 : :
89 : : const char *
90 : 0 : gist_identify(uint8 info)
91 : : {
92 : 0 : const char *id = NULL;
93 : :
94 [ # # # # : 0 : switch (info & ~XLR_INFO_MASK)
# # # ]
95 : : {
96 : : case XLOG_GIST_PAGE_UPDATE:
97 : 0 : id = "PAGE_UPDATE";
98 : 0 : break;
99 : : case XLOG_GIST_DELETE:
100 : 0 : id = "DELETE";
101 : 0 : break;
102 : : case XLOG_GIST_PAGE_REUSE:
103 : 0 : id = "PAGE_REUSE";
104 : 0 : break;
105 : : case XLOG_GIST_PAGE_SPLIT:
106 : 0 : id = "PAGE_SPLIT";
107 : 0 : break;
108 : : case XLOG_GIST_PAGE_DELETE:
109 : 0 : id = "PAGE_DELETE";
110 : 0 : break;
111 : : case XLOG_GIST_ASSIGN_LSN:
112 : 0 : id = "ASSIGN_LSN";
113 : 0 : break;
114 : : }
115 : :
116 : 0 : return id;
117 : 0 : }
|