9
9
#include "mach0data.h"
10
10
#include "mtr0mtr.h"
11
11
#include "mtr0log.h"
14
13
#define BTR_MAX_NODE_LEVEL 50 /* used in debug checking */
16
15
/******************************************************************
17
16
Gets a buffer page and declares its latching order level. */
22
21
ulint space, /* in: space id */
23
ulint zip_size, /* in: compressed page size in bytes
24
or 0 for uncompressed pages */
25
22
ulint page_no, /* in: page number */
26
23
ulint mode, /* in: latch mode */
27
24
mtr_t* mtr) /* in: mtr */
31
block = buf_page_get(space, zip_size, page_no, mode, mtr);
28
page = buf_page_get(space, page_no, mode, mtr);
32
29
#ifdef UNIV_SYNC_DEBUG
33
30
if (mode != RW_NO_LATCH) {
35
buf_block_dbg_add_level(block, SYNC_TREE_NODE);
32
buf_page_dbg_add_level(page, SYNC_TREE_NODE);
41
/******************************************************************
42
Gets a buffer page and declares its latching order level. */
47
ulint space, /* in: space id */
48
ulint zip_size, /* in: compressed page size in bytes
49
or 0 for uncompressed pages */
50
ulint page_no, /* in: page number */
51
ulint mode, /* in: latch mode */
52
mtr_t* mtr) /* in: mtr */
54
return(buf_block_get_frame(btr_block_get(space, zip_size, page_no,
58
38
/******************************************************************
62
42
btr_page_set_index_id(
63
43
/*==================*/
64
44
page_t* page, /* in: page to be created */
65
page_zip_des_t* page_zip,/* in: compressed page whose uncompressed
66
part will be updated, or NULL */
67
45
dulint id, /* in: index id */
68
46
mtr_t* mtr) /* in: mtr */
70
if (UNIV_LIKELY_NULL(page_zip)) {
71
mach_write_to_8(page + (PAGE_HEADER + PAGE_INDEX_ID), id);
72
page_zip_write_header(page_zip,
73
page + (PAGE_HEADER + PAGE_INDEX_ID),
76
mlog_write_dulint(page + (PAGE_HEADER + PAGE_INDEX_ID),
48
mlog_write_dulint(page + PAGE_HEADER + PAGE_INDEX_ID, id, mtr);
81
51
/******************************************************************
97
67
btr_page_get_level_low(
98
68
/*===================*/
99
/* out: level, leaf level == 0 */
100
const page_t* page) /* in: index page */
69
/* out: level, leaf level == 0 */
70
page_t* page) /* in: index page */
117
87
btr_page_get_level(
118
88
/*===============*/
119
/* out: level, leaf level == 0 */
120
const page_t* page, /* in: index page */
121
mtr_t* mtr __attribute__((unused)))
122
/* in: mini-transaction handle */
89
/* out: level, leaf level == 0 */
90
page_t* page, /* in: index page */
91
mtr_t* mtr __attribute__((unused))) /* in: mini-transaction handle */
124
93
ut_ad(page && mtr);
133
102
btr_page_set_level(
134
103
/*===============*/
135
page_t* page, /* in: index page */
136
page_zip_des_t* page_zip,/* in: compressed page whose uncompressed
137
part will be updated, or NULL */
138
ulint level, /* in: level, leaf level == 0 */
139
mtr_t* mtr) /* in: mini-transaction handle */
104
page_t* page, /* in: index page */
105
ulint level, /* in: level, leaf level == 0 */
106
mtr_t* mtr) /* in: mini-transaction handle */
141
108
ut_ad(page && mtr);
142
109
ut_ad(level <= BTR_MAX_NODE_LEVEL);
144
if (UNIV_LIKELY_NULL(page_zip)) {
145
mach_write_to_2(page + (PAGE_HEADER + PAGE_LEVEL), level);
146
page_zip_write_header(page_zip,
147
page + (PAGE_HEADER + PAGE_LEVEL),
150
mlog_write_ulint(page + (PAGE_HEADER + PAGE_LEVEL), level,
111
mlog_write_ulint(page + PAGE_HEADER + PAGE_LEVEL, level,
155
115
/************************************************************
159
119
btr_page_get_next(
160
120
/*==============*/
161
/* out: next page number */
162
const page_t* page, /* in: index page */
163
mtr_t* mtr __attribute__((unused)))
164
/* in: mini-transaction handle */
121
/* out: next page number */
122
page_t* page, /* in: index page */
123
mtr_t* mtr __attribute__((unused))) /* in: mini-transaction handle */
166
125
ut_ad(page && mtr);
167
ut_ad(mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_X_FIX)
168
|| mtr_memo_contains_page(mtr, page, MTR_MEMO_PAGE_S_FIX));
126
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
128
|| mtr_memo_contains(mtr, buf_block_align(page),
129
MTR_MEMO_PAGE_S_FIX));
170
131
return(mach_read_from_4(page + FIL_PAGE_NEXT));
177
138
btr_page_set_next(
178
139
/*==============*/
179
page_t* page, /* in: index page */
180
page_zip_des_t* page_zip,/* in: compressed page whose uncompressed
181
part will be updated, or NULL */
182
ulint next, /* in: next page number */
183
mtr_t* mtr) /* in: mini-transaction handle */
140
page_t* page, /* in: index page */
141
ulint next, /* in: next page number */
142
mtr_t* mtr) /* in: mini-transaction handle */
185
144
ut_ad(page && mtr);
187
if (UNIV_LIKELY_NULL(page_zip)) {
188
mach_write_to_4(page + FIL_PAGE_NEXT, next);
189
page_zip_write_header(page_zip, page + FIL_PAGE_NEXT, 4, mtr);
191
mlog_write_ulint(page + FIL_PAGE_NEXT, next, MLOG_4BYTES, mtr);
146
mlog_write_ulint(page + FIL_PAGE_NEXT, next, MLOG_4BYTES, mtr);
195
149
/************************************************************
199
153
btr_page_get_prev(
200
154
/*==============*/
201
/* out: prev page number */
202
const page_t* page, /* in: index page */
155
/* out: prev page number */
156
page_t* page, /* in: index page */
203
157
mtr_t* mtr __attribute__((unused))) /* in: mini-transaction handle */
205
159
ut_ad(page && mtr);
214
168
btr_page_set_prev(
215
169
/*==============*/
216
page_t* page, /* in: index page */
217
page_zip_des_t* page_zip,/* in: compressed page whose uncompressed
218
part will be updated, or NULL */
219
ulint prev, /* in: previous page number */
220
mtr_t* mtr) /* in: mini-transaction handle */
170
page_t* page, /* in: index page */
171
ulint prev, /* in: previous page number */
172
mtr_t* mtr) /* in: mini-transaction handle */
222
174
ut_ad(page && mtr);
224
if (UNIV_LIKELY_NULL(page_zip)) {
225
mach_write_to_4(page + FIL_PAGE_PREV, prev);
226
page_zip_write_header(page_zip, page + FIL_PAGE_PREV, 4, mtr);
228
mlog_write_ulint(page + FIL_PAGE_PREV, prev, MLOG_4BYTES, mtr);
176
mlog_write_ulint(page + FIL_PAGE_PREV, prev, MLOG_4BYTES, mtr);
232
179
/******************************************************************
236
183
btr_node_ptr_get_child_page_no(
237
184
/*===========================*/
238
185
/* out: child node address */
239
const rec_t* rec, /* in: node pointer record */
186
rec_t* rec, /* in: node pointer record */
240
187
const ulint* offsets)/* in: array returned by rec_get_offsets() */
246
193
ut_ad(!rec_offs_comp(offsets) || rec_get_node_ptr_flag(rec));
258
205
"InnoDB: a nonsensical page number 0"
259
206
" in a node ptr record at offset %lu\n",
260
207
(ulong) page_offset(rec));
261
buf_page_print(page_align(rec), 0);
208
buf_page_print(buf_frame_align(rec));
271
218
btr_leaf_page_release(
272
219
/*==================*/
273
buf_block_t* block, /* in: buffer block */
274
ulint latch_mode, /* in: BTR_SEARCH_LEAF or
276
mtr_t* mtr) /* in: mtr */
220
page_t* page, /* in: page */
221
ulint latch_mode, /* in: BTR_SEARCH_LEAF or BTR_MODIFY_LEAF */
222
mtr_t* mtr) /* in: mtr */
278
ut_ad(latch_mode == BTR_SEARCH_LEAF || latch_mode == BTR_MODIFY_LEAF);
279
ut_ad(!mtr_memo_contains(mtr, block, MTR_MEMO_MODIFY));
281
mtr_memo_release(mtr, block,
282
latch_mode == BTR_SEARCH_LEAF
283
? MTR_MEMO_PAGE_S_FIX
284
: MTR_MEMO_PAGE_X_FIX);
224
ut_ad(!mtr_memo_contains(mtr, buf_block_align(page),
226
if (latch_mode == BTR_SEARCH_LEAF) {
227
mtr_memo_release(mtr, buf_block_align(page),
228
MTR_MEMO_PAGE_S_FIX);
230
ut_ad(latch_mode == BTR_MODIFY_LEAF);
231
mtr_memo_release(mtr, buf_block_align(page),
232
MTR_MEMO_PAGE_X_FIX);