29 #include "btr0pcur.ic"
77 cursor->
pos_state = BTR_PCUR_NOT_POSITIONED;
116 block = btr_pcur_get_block(cursor);
119 page_cursor = btr_pcur_get_page_cur(cursor);
121 rec = page_cur_get_rec(page_cursor);
125 ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_S_FIX)
126 || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
143 cursor->
rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE;
145 cursor->
rel_pos = BTR_PCUR_BEFORE_FIRST_IN_TREE;
155 cursor->
rel_pos = BTR_PCUR_AFTER;
161 cursor->
rel_pos = BTR_PCUR_BEFORE;
171 cursor->block_when_stored =
block;
238 ut_ad(mtr->state == MTR_ACTIVE);
242 if (UNIV_UNLIKELY(cursor->
old_stored != BTR_PCUR_OLD_STORED)
243 || UNIV_UNLIKELY(cursor->
pos_state != BTR_PCUR_WAS_POSITIONED
244 && cursor->
pos_state != BTR_PCUR_IS_POSITIONED)) {
255 (cursor->
rel_pos == BTR_PCUR_AFTER_LAST_IN_TREE
256 || cursor->
rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE)) {
261 btr_cur_open_at_index_side(
262 cursor->
rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE,
264 btr_pcur_get_btr_cur(cursor), 0, mtr);
267 cursor->
pos_state = BTR_PCUR_IS_POSITIONED;
268 cursor->block_when_stored = btr_pcur_get_block(cursor);
282 cursor->block_when_stored,
285 cursor->
pos_state = BTR_PCUR_IS_POSITIONED;
287 buf_block_dbg_add_level(
288 btr_pcur_get_block(cursor),
290 ? SYNC_IBUF_TREE_NODE : SYNC_TREE_NODE);
292 if (cursor->
rel_pos == BTR_PCUR_ON) {
300 rec = btr_pcur_get_rec(cursor);
303 offsets1 = rec_get_offsets(
306 offsets2 = rec_get_offsets(
311 rec, offsets1, offsets2,
339 case BTR_PCUR_BEFORE:
348 cursor, 0, file, line, mtr);
357 tuple, btr_pcur_get_rec(cursor),
358 rec_get_offsets(btr_pcur_get_rec(cursor),
360 ULINT_UNDEFINED, &heap))) {
367 cursor->block_when_stored =
368 btr_pcur_get_block(cursor);
371 cursor->block_when_stored);
380 case BTR_PCUR_BEFORE:
425 page = btr_pcur_get_page(cursor);
434 btr_pcur_get_btr_cur(cursor)->
index, mtr);
435 next_page = buf_block_get_frame(next_block);
436 #ifdef UNIV_BTR_DEBUG
499 btr_pcur_restore_position(latch_mode2, cursor, mtr);
501 page = btr_pcur_get_page(cursor);
508 prev_block = btr_pcur_get_btr_cur(cursor)->left_block;
514 btr_pcur_get_page_cur(cursor));
521 prev_block = btr_pcur_get_btr_cur(cursor)->left_block;
590 if ((mode == PAGE_CUR_GE) || (mode == PAGE_CUR_G)) {
597 ut_ad((mode == PAGE_CUR_LE) || (mode == PAGE_CUR_L));