]> granicus.if.org Git - postgresql/blob - src/backend/access/rmgrdesc/nbtdesc.c
Update copyright for 2014
[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-2014, 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 static void
20 out_target(StringInfo buf, xl_btreetid *target)
21 {
22         appendStringInfo(buf, "rel %u/%u/%u; tid %u/%u",
23                          target->node.spcNode, target->node.dbNode, target->node.relNode,
24                                          ItemPointerGetBlockNumber(&(target->tid)),
25                                          ItemPointerGetOffsetNumber(&(target->tid)));
26 }
27
28 void
29 btree_desc(StringInfo buf, uint8 xl_info, char *rec)
30 {
31         uint8           info = xl_info & ~XLR_INFO_MASK;
32
33         switch (info)
34         {
35                 case XLOG_BTREE_INSERT_LEAF:
36                         {
37                                 xl_btree_insert *xlrec = (xl_btree_insert *) rec;
38
39                                 appendStringInfoString(buf, "insert: ");
40                                 out_target(buf, &(xlrec->target));
41                                 break;
42                         }
43                 case XLOG_BTREE_INSERT_UPPER:
44                         {
45                                 xl_btree_insert *xlrec = (xl_btree_insert *) rec;
46
47                                 appendStringInfoString(buf, "insert_upper: ");
48                                 out_target(buf, &(xlrec->target));
49                                 break;
50                         }
51                 case XLOG_BTREE_INSERT_META:
52                         {
53                                 xl_btree_insert *xlrec = (xl_btree_insert *) rec;
54
55                                 appendStringInfoString(buf, "insert_meta: ");
56                                 out_target(buf, &(xlrec->target));
57                                 break;
58                         }
59                 case XLOG_BTREE_SPLIT_L:
60                         {
61                                 xl_btree_split *xlrec = (xl_btree_split *) rec;
62
63                                 appendStringInfo(buf, "split_l: rel %u/%u/%u ",
64                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
65                                                                  xlrec->node.relNode);
66                                 appendStringInfo(buf, "left %u, right %u, next %u, level %u, firstright %d",
67                                                            xlrec->leftsib, xlrec->rightsib, xlrec->rnext,
68                                                                  xlrec->level, xlrec->firstright);
69                                 break;
70                         }
71                 case XLOG_BTREE_SPLIT_R:
72                         {
73                                 xl_btree_split *xlrec = (xl_btree_split *) rec;
74
75                                 appendStringInfo(buf, "split_r: rel %u/%u/%u ",
76                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
77                                                                  xlrec->node.relNode);
78                                 appendStringInfo(buf, "left %u, right %u, next %u, level %u, firstright %d",
79                                                            xlrec->leftsib, xlrec->rightsib, xlrec->rnext,
80                                                                  xlrec->level, xlrec->firstright);
81                                 break;
82                         }
83                 case XLOG_BTREE_SPLIT_L_ROOT:
84                         {
85                                 xl_btree_split *xlrec = (xl_btree_split *) rec;
86
87                                 appendStringInfo(buf, "split_l_root: rel %u/%u/%u ",
88                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
89                                                                  xlrec->node.relNode);
90                                 appendStringInfo(buf, "left %u, right %u, next %u, level %u, firstright %d",
91                                                            xlrec->leftsib, xlrec->rightsib, xlrec->rnext,
92                                                                  xlrec->level, xlrec->firstright);
93                                 break;
94                         }
95                 case XLOG_BTREE_SPLIT_R_ROOT:
96                         {
97                                 xl_btree_split *xlrec = (xl_btree_split *) rec;
98
99                                 appendStringInfo(buf, "split_r_root: rel %u/%u/%u ",
100                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
101                                                                  xlrec->node.relNode);
102                                 appendStringInfo(buf, "left %u, right %u, next %u, level %u, firstright %d",
103                                                            xlrec->leftsib, xlrec->rightsib, xlrec->rnext,
104                                                                  xlrec->level, xlrec->firstright);
105                                 break;
106                         }
107                 case XLOG_BTREE_VACUUM:
108                         {
109                                 xl_btree_vacuum *xlrec = (xl_btree_vacuum *) rec;
110
111                                 appendStringInfo(buf, "vacuum: rel %u/%u/%u; blk %u, lastBlockVacuumed %u",
112                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
113                                                                  xlrec->node.relNode, xlrec->block,
114                                                                  xlrec->lastBlockVacuumed);
115                                 break;
116                         }
117                 case XLOG_BTREE_DELETE:
118                         {
119                                 xl_btree_delete *xlrec = (xl_btree_delete *) rec;
120
121                                 appendStringInfo(buf, "delete: index %u/%u/%u; iblk %u, heap %u/%u/%u;",
122                                 xlrec->node.spcNode, xlrec->node.dbNode, xlrec->node.relNode,
123                                                                  xlrec->block,
124                                                                  xlrec->hnode.spcNode, xlrec->hnode.dbNode, xlrec->hnode.relNode);
125                                 break;
126                         }
127                 case XLOG_BTREE_DELETE_PAGE:
128                 case XLOG_BTREE_DELETE_PAGE_META:
129                 case XLOG_BTREE_DELETE_PAGE_HALF:
130                         {
131                                 xl_btree_delete_page *xlrec = (xl_btree_delete_page *) rec;
132
133                                 appendStringInfoString(buf, "delete_page: ");
134                                 out_target(buf, &(xlrec->target));
135                                 appendStringInfo(buf, "; dead %u; left %u; right %u",
136                                                         xlrec->deadblk, xlrec->leftblk, xlrec->rightblk);
137                                 break;
138                         }
139                 case XLOG_BTREE_NEWROOT:
140                         {
141                                 xl_btree_newroot *xlrec = (xl_btree_newroot *) rec;
142
143                                 appendStringInfo(buf, "newroot: rel %u/%u/%u; root %u lev %u",
144                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
145                                                                  xlrec->node.relNode,
146                                                                  xlrec->rootblk, xlrec->level);
147                                 break;
148                         }
149                 case XLOG_BTREE_REUSE_PAGE:
150                         {
151                                 xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec;
152
153                                 appendStringInfo(buf, "reuse_page: rel %u/%u/%u; latestRemovedXid %u",
154                                                                  xlrec->node.spcNode, xlrec->node.dbNode,
155                                                            xlrec->node.relNode, xlrec->latestRemovedXid);
156                                 break;
157                         }
158                 default:
159                         appendStringInfoString(buf, "UNKNOWN");
160                         break;
161         }
162 }