]> granicus.if.org Git - postgresql/blob - src/backend/access/rmgrdesc/nbtdesc.c
Update copyright for 2015
[postgresql] / src / backend / access / rmgrdesc / nbtdesc.c
1 /*-------------------------------------------------------------------------
2  *
3  * nbtdesc.c
4  *        rmgr descriptor routines for access/nbtree/nbtxlog.c
5  *
6  * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
7  * Portions Copyright (c) 1994, Regents of the University of California
8  *
9  *
10  * IDENTIFICATION
11  *        src/backend/access/rmgrdesc/nbtdesc.c
12  *
13  *-------------------------------------------------------------------------
14  */
15 #include "postgres.h"
16
17 #include "access/nbtree.h"
18
19 void
20 btree_desc(StringInfo buf, XLogReaderState *record)
21 {
22         char       *rec = XLogRecGetData(record);
23         uint8           info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
24
25         switch (info)
26         {
27                 case XLOG_BTREE_INSERT_LEAF:
28                 case XLOG_BTREE_INSERT_UPPER:
29                 case XLOG_BTREE_INSERT_META:
30                         {
31                                 xl_btree_insert *xlrec = (xl_btree_insert *) rec;
32
33                                 appendStringInfo(buf, "off %u", xlrec->offnum);
34                                 break;
35                         }
36                 case XLOG_BTREE_SPLIT_L:
37                 case XLOG_BTREE_SPLIT_R:
38                 case XLOG_BTREE_SPLIT_L_ROOT:
39                 case XLOG_BTREE_SPLIT_R_ROOT:
40                         {
41                                 xl_btree_split *xlrec = (xl_btree_split *) rec;
42
43                                 appendStringInfo(buf, "level %u, firstright %d",
44                                                                  xlrec->level, xlrec->firstright);
45                                 break;
46                         }
47                 case XLOG_BTREE_VACUUM:
48                         {
49                                 xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
50
51                                 appendStringInfo(buf, "lastBlockVacuumed %u",
52                                                                  xlrec->lastBlockVacuumed);
53                                 break;
54                         }
55                 case XLOG_BTREE_DELETE:
56                         {
57                                 xl_btree_delete *xlrec = (xl_btree_delete *) rec;
58
59                                 appendStringInfo(buf, "%d items", xlrec->nitems);
60                                 break;
61                         }
62                 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
63                         {
64                                 xl_btree_mark_page_halfdead *xlrec = (xl_btree_mark_page_halfdead *) rec;
65
66                                 appendStringInfo(buf, "topparent %u; leaf %u; left %u; right %u",
67                                                                  xlrec->topparent, xlrec->leafblk, xlrec->leftblk, xlrec->rightblk);
68                                 break;
69                         }
70                 case XLOG_BTREE_UNLINK_PAGE_META:
71                 case XLOG_BTREE_UNLINK_PAGE:
72                         {
73                                 xl_btree_unlink_page *xlrec = (xl_btree_unlink_page *) rec;
74
75                                 appendStringInfo(buf, "left %u; right %u; btpo_xact %u; ",
76                                                                  xlrec->leftsib, xlrec->rightsib,
77                                                                  xlrec->btpo_xact);
78                                 appendStringInfo(buf, "leafleft %u; leafright %u; topparent %u",
79                                                                  xlrec->leafleftsib, xlrec->leafrightsib,
80                                                                  xlrec->topparent);
81                                 break;
82                         }
83                 case XLOG_BTREE_NEWROOT:
84                         {
85                                 xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
86
87                                 appendStringInfo(buf, "lev %u", xlrec->level);
88                                 break;
89                         }
90                 case XLOG_BTREE_REUSE_PAGE:
91                         {
92                                 xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
93
94                                 appendStringInfo(buf, "rel %u/%u/%u; latestRemovedXid %u",
95                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
96                                                            xlrec->node.relNode, xlrec->latestRemovedXid);
97                                 break;
98                         }
99         }
100 }
101
102 const char *
103 btree_identify(uint8 info)
104 {
105         const char *id = NULL;
106
107         switch (info & ~XLR_INFO_MASK)
108         {
109                 case XLOG_BTREE_INSERT_LEAF:
110                         id = "INSERT_LEAF";
111                         break;
112                 case XLOG_BTREE_INSERT_UPPER:
113                         id = "INSERT_UPPER";
114                         break;
115                 case XLOG_BTREE_INSERT_META:
116                         id = "INSERT_META";
117                         break;
118                 case XLOG_BTREE_SPLIT_L:
119                         id = "SPLIT_L";
120                         break;
121                 case XLOG_BTREE_SPLIT_R:
122                         id = "SPLIT_R";
123                         break;
124                 case XLOG_BTREE_SPLIT_L_ROOT:
125                         id = "SPLIT_L_ROOT";
126                         break;
127                 case XLOG_BTREE_SPLIT_R_ROOT:
128                         id = "SPLIT_R_ROOT";
129                         break;
130                 case XLOG_BTREE_VACUUM:
131                         id = "VACUUM";
132                         break;
133                 case XLOG_BTREE_DELETE:
134                         id = "DELETE";
135                         break;
136                 case XLOG_BTREE_MARK_PAGE_HALFDEAD:
137                         id = "MARK_PAGE_HALFDEAD";
138                         break;
139                 case XLOG_BTREE_UNLINK_PAGE:
140                         id = "UNLINK_PAGE";
141                         break;
142                 case XLOG_BTREE_UNLINK_PAGE_META:
143                         id = "UNLINK_PAGE_META";
144                         break;
145                 case XLOG_BTREE_NEWROOT:
146                         id = "NEWROOT";
147                         break;
148                 case XLOG_BTREE_REUSE_PAGE:
149                         id = "REUSE_PAGE";
150                         break;
151         }
152
153         return id;
154 }