summaryrefslogtreecommitdiff
path: root/src/btree/bt_misc.c
blob: 7f188502a0aead5392745fac31f4566146674e8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*-
 * Copyright (c) 2014-2016 MongoDB, Inc.
 * Copyright (c) 2008-2014 WiredTiger, Inc.
 *	All rights reserved.
 *
 * See the file LICENSE for redistribution information.
 */

#include "wt_internal.h"

/*
 * __wt_page_type_string --
 *	Return a string representing the page type.
 */
const char *
__wt_page_type_string(u_int type)
{
	switch (type) {
	case WT_PAGE_INVALID:
		return ("invalid");
	case WT_PAGE_BLOCK_MANAGER:
		return ("block manager");
	case WT_PAGE_COL_FIX:
		return ("column-store fixed-length leaf");
	case WT_PAGE_COL_INT:
		return ("column-store internal");
	case WT_PAGE_COL_VAR:
		return ("column-store variable-length leaf");
	case WT_PAGE_OVFL:
		return ("overflow");
	case WT_PAGE_ROW_INT:
		return ("row-store internal");
	case WT_PAGE_ROW_LEAF:
		return ("row-store leaf");
	default:
		return ("unknown");
	}
	/* NOTREACHED */
}

/*
 * __wt_cell_type_string --
 *	Return a string representing the cell type.
 */
const char *
__wt_cell_type_string(uint8_t type)
{
	switch (type) {
	case WT_CELL_ADDR_DEL:
		return ("addr/del");
	case WT_CELL_ADDR_INT:
		return ("addr/int");
	case WT_CELL_ADDR_LEAF:
		return ("addr/leaf");
	case WT_CELL_ADDR_LEAF_NO:
		return ("addr/leaf-no");
	case WT_CELL_DEL:
		return ("deleted");
	case WT_CELL_KEY:
		return ("key");
	case WT_CELL_KEY_PFX:
		return ("key/pfx");
	case WT_CELL_KEY_OVFL:
		return ("key/ovfl");
	case WT_CELL_KEY_SHORT:
		return ("key/short");
	case WT_CELL_KEY_SHORT_PFX:
		return ("key/short,pfx");
	case WT_CELL_KEY_OVFL_RM:
		return ("key/ovfl,rm");
	case WT_CELL_VALUE:
		return ("value");
	case WT_CELL_VALUE_COPY:
		return ("value/copy");
	case WT_CELL_VALUE_OVFL:
		return ("value/ovfl");
	case WT_CELL_VALUE_OVFL_RM:
		return ("value/ovfl,rm");
	case WT_CELL_VALUE_SHORT:
		return ("value/short");
	default:
		return ("unknown");
	}
	/* NOTREACHED */
}

/*
 * __wt_page_addr_string --
 *	Figure out a page's "address" and load a buffer with a printable,
 * nul-terminated representation of that address.
 */
const char *
__wt_page_addr_string(WT_SESSION_IMPL *session, WT_REF *ref, WT_ITEM *buf)
{
	size_t addr_size;
	const uint8_t *addr;

	if (__wt_ref_is_root(ref)) {
		buf->data = "[Root]";
		buf->size = strlen("[Root]");
		return (buf->data);
	}

	__wt_ref_info(ref, &addr, &addr_size, NULL);
	return (__wt_addr_string(session, addr, addr_size, buf));
}

/*
 * __wt_addr_string --
 *	Load a buffer with a printable, nul-terminated representation of an
 * address.
 */
const char *
__wt_addr_string(WT_SESSION_IMPL *session,
    const uint8_t *addr, size_t addr_size, WT_ITEM *buf)
{
	WT_BM *bm;
	WT_BTREE *btree;

	btree = S2BT_SAFE(session);

	if (addr == NULL) {
		buf->data = "[NoAddr]";
		buf->size = strlen("[NoAddr]");
	} else if (btree == NULL || (bm = btree->bm) == NULL ||
	    bm->addr_string(bm, session, buf, addr, addr_size) != 0) {
		buf->data = "[Error]";
		buf->size = strlen("[Error]");
	}
	return (buf->data);
}

/*
 * __wt_buf_set_printable --
 *	Set the contents of the buffer to a printable representation of a
 * byte string.
 */
const char *
__wt_buf_set_printable(
    WT_SESSION_IMPL *session, const void *p, size_t size, WT_ITEM *buf)
{
	if (__wt_raw_to_esc_hex(session, p, size, buf)) {
		buf->data = "[Error]";
		buf->size = strlen("[Error]");
	}
	return (buf->data);
}