Lines Matching refs:cbt

28 #define	PREV_INS(cbt, i)						\  argument
29 PREV_ITEM((cbt)->ins_head, (cbt)->ins_stack[(i)], (i))
36 __cursor_skip_prev(WT_CURSOR_BTREE *cbt) in __cursor_skip_prev() argument
43 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_skip_prev()
50 while ((current = cbt->ins) != PREV_INS(cbt, 0)) { in __cursor_skip_prev()
51 if (cbt->btree->type == BTREE_ROW) { in __cursor_skip_prev()
55 session, cbt, cbt->ins_head, &key)); in __cursor_skip_prev()
57 cbt->ins = __col_insert_search(cbt->ins_head, in __cursor_skip_prev()
58 cbt->ins_stack, cbt->next_stack, in __cursor_skip_prev()
74 if ((ins = PREV_INS(cbt, i + 1)) != current) in __cursor_skip_prev()
88 cbt->ins_stack[i] = NULL; in __cursor_skip_prev()
89 cbt->next_stack[i] = NULL; in __cursor_skip_prev()
90 ins = cbt->ins_head->head[i]; in __cursor_skip_prev()
102 cbt->ins_stack[0] = NULL; in __cursor_skip_prev()
103 cbt->next_stack[0] = NULL; in __cursor_skip_prev()
109 cbt->ins_stack[i] = &ins->next[i]; in __cursor_skip_prev()
110 cbt->next_stack[i] = ins->next[i]; in __cursor_skip_prev()
116 if (cbt->ins_stack[0] != NULL && *cbt->ins_stack[0] != current) in __cursor_skip_prev()
119 cbt->ins = PREV_INS(cbt, 0); in __cursor_skip_prev()
128 __cursor_fix_append_prev(WT_CURSOR_BTREE *cbt, bool newpage) in __cursor_fix_append_prev() argument
133 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_fix_append_prev()
136 if ((cbt->ins = WT_SKIP_LAST(cbt->ins_head)) == NULL) in __cursor_fix_append_prev()
140 if (cbt->ins != NULL && in __cursor_fix_append_prev()
141 cbt->recno <= WT_INSERT_RECNO(cbt->ins)) in __cursor_fix_append_prev()
142 WT_RET(__cursor_skip_prev(cbt)); in __cursor_fix_append_prev()
174 if (cbt->ins == NULL && in __cursor_fix_append_prev()
175 (cbt->recno == cbt->ref->ref_recno || in __cursor_fix_append_prev()
176 __col_fix_last_recno(cbt->ref) != 0)) in __cursor_fix_append_prev()
188 __cursor_set_recno(cbt, WT_INSERT_RECNO(cbt->ins)); in __cursor_fix_append_prev()
190 __cursor_set_recno(cbt, cbt->recno - 1); in __cursor_fix_append_prev()
202 if (cbt->ins == NULL || cbt->recno > WT_INSERT_RECNO(cbt->ins)) { in __cursor_fix_append_prev()
203 cbt->v = 0; in __cursor_fix_append_prev()
204 cbt->iface.value.data = &cbt->v; in __cursor_fix_append_prev()
207 WT_RET(__wt_txn_read(session, cbt->ins->upd, &upd)); in __cursor_fix_append_prev()
209 cbt->v = 0; in __cursor_fix_append_prev()
210 cbt->iface.value.data = &cbt->v; in __cursor_fix_append_prev()
212 cbt->iface.value.data = upd->data; in __cursor_fix_append_prev()
214 cbt->iface.value.size = 1; in __cursor_fix_append_prev()
223 __cursor_fix_prev(WT_CURSOR_BTREE *cbt, bool newpage) in __cursor_fix_prev() argument
230 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_fix_prev()
231 page = cbt->ref->page; in __cursor_fix_prev()
236 cbt->last_standard_recno = __col_fix_last_recno(cbt->ref); in __cursor_fix_prev()
237 if (cbt->last_standard_recno == 0) in __cursor_fix_prev()
239 __cursor_set_recno(cbt, cbt->last_standard_recno); in __cursor_fix_prev()
244 if (cbt->recno == cbt->ref->ref_recno) in __cursor_fix_prev()
246 __cursor_set_recno(cbt, cbt->recno - 1); in __cursor_fix_prev()
250 cbt->ins_head = WT_COL_UPDATE_SINGLE(page); in __cursor_fix_prev()
251 cbt->ins = __col_insert_search( in __cursor_fix_prev()
252 cbt->ins_head, cbt->ins_stack, cbt->next_stack, cbt->recno); in __cursor_fix_prev()
253 if (cbt->ins != NULL && cbt->recno != WT_INSERT_RECNO(cbt->ins)) in __cursor_fix_prev()
254 cbt->ins = NULL; in __cursor_fix_prev()
256 if (cbt->ins != NULL) in __cursor_fix_prev()
257 WT_RET(__wt_txn_read(session, cbt->ins->upd, &upd)); in __cursor_fix_prev()
259 cbt->v = __bit_getv_recno(cbt->ref, cbt->recno, btree->bitcnt); in __cursor_fix_prev()
260 cbt->iface.value.data = &cbt->v; in __cursor_fix_prev()
262 cbt->iface.value.data = upd->data; in __cursor_fix_prev()
263 cbt->iface.value.size = 1; in __cursor_fix_prev()
272 __cursor_var_append_prev(WT_CURSOR_BTREE *cbt, bool newpage) in __cursor_var_append_prev() argument
277 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_var_append_prev()
280 cbt->ins = WT_SKIP_LAST(cbt->ins_head); in __cursor_var_append_prev()
285 WT_RET(__cursor_skip_prev(cbt)); in __cursor_var_append_prev()
286 new_page: if (cbt->ins == NULL) in __cursor_var_append_prev()
289 __cursor_set_recno(cbt, WT_INSERT_RECNO(cbt->ins)); in __cursor_var_append_prev()
290 WT_RET(__wt_txn_read(session, cbt->ins->upd, &upd)); in __cursor_var_append_prev()
296 ++cbt->page_deleted_count; in __cursor_var_append_prev()
299 return (__wt_value_return(cbt, upd)); in __cursor_var_append_prev()
309 __cursor_var_prev(WT_CURSOR_BTREE *cbt, bool newpage) in __cursor_var_prev() argument
320 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_var_prev()
321 page = cbt->ref->page; in __cursor_var_prev()
327 cbt->last_standard_recno = __col_var_last_recno(cbt->ref); in __cursor_var_prev()
328 if (cbt->last_standard_recno == 0) in __cursor_var_prev()
330 __cursor_set_recno(cbt, cbt->last_standard_recno); in __cursor_var_prev()
331 cbt->cip_saved = NULL; in __cursor_var_prev()
337 __cursor_set_recno(cbt, cbt->recno - 1); in __cursor_var_prev()
339 new_page: if (cbt->recno < cbt->ref->ref_recno) in __cursor_var_prev()
344 __col_var_search(cbt->ref, cbt->recno, &rle_start)) == NULL) in __cursor_var_prev()
346 cbt->slot = WT_COL_SLOT(page, cip); in __cursor_var_prev()
349 cbt->ins_head = WT_COL_UPDATE_SLOT(page, cbt->slot); in __cursor_var_prev()
350 cbt->ins = __col_insert_search_match(cbt->ins_head, cbt->recno); in __cursor_var_prev()
352 if (cbt->ins != NULL) in __cursor_var_prev()
353 WT_RET(__wt_txn_read(session, cbt->ins->upd, &upd)); in __cursor_var_prev()
358 ++cbt->page_deleted_count; in __cursor_var_prev()
361 return (__wt_value_return(cbt, upd)); in __cursor_var_prev()
371 if (cbt->cip_saved != cip) { in __cursor_var_prev()
389 cbt->ins_head, cbt->recno); in __cursor_var_prev()
400 cbt->recno = rle_start - 1; in __cursor_var_prev()
402 WT_INSERT_RECNO(ins) > cbt->recno) in __cursor_var_prev()
403 cbt->recno = WT_INSERT_RECNO(ins); in __cursor_var_prev()
406 ++cbt->recno; in __cursor_var_prev()
410 session, page, &unpack, cbt->tmp)); in __cursor_var_prev()
412 cbt->cip_saved = cip; in __cursor_var_prev()
414 cbt->iface.value.data = cbt->tmp->data; in __cursor_var_prev()
415 cbt->iface.value.size = cbt->tmp->size; in __cursor_var_prev()
426 __cursor_row_prev(WT_CURSOR_BTREE *cbt, bool newpage) in __cursor_row_prev() argument
435 session = (WT_SESSION_IMPL *)cbt->iface.session; in __cursor_row_prev()
436 page = cbt->ref->page; in __cursor_row_prev()
437 key = &cbt->iface.key; in __cursor_row_prev()
459 cbt->ins_head = WT_ROW_INSERT_SMALLEST(page); in __cursor_row_prev()
461 cbt->ins_head = in __cursor_row_prev()
463 cbt->ins = WT_SKIP_LAST(cbt->ins_head); in __cursor_row_prev()
464 cbt->row_iteration_slot = page->entries * 2 + 1; in __cursor_row_prev()
465 cbt->rip_saved = NULL; in __cursor_row_prev()
476 if (cbt->ins != NULL) in __cursor_row_prev()
477 WT_RET(__cursor_skip_prev(cbt)); in __cursor_row_prev()
479 new_insert: if ((ins = cbt->ins) != NULL) { in __cursor_row_prev()
486 ++cbt->page_deleted_count; in __cursor_row_prev()
491 return (__wt_value_return(cbt, upd)); in __cursor_row_prev()
495 if (cbt->row_iteration_slot == 1) in __cursor_row_prev()
497 --cbt->row_iteration_slot; in __cursor_row_prev()
503 if (cbt->row_iteration_slot & 0x01) { in __cursor_row_prev()
504 cbt->ins_head = cbt->row_iteration_slot == 1 ? in __cursor_row_prev()
507 page, cbt->row_iteration_slot / 2 - 1); in __cursor_row_prev()
508 cbt->ins = WT_SKIP_LAST(cbt->ins_head); in __cursor_row_prev()
511 cbt->ins_head = NULL; in __cursor_row_prev()
512 cbt->ins = NULL; in __cursor_row_prev()
514 cbt->slot = cbt->row_iteration_slot / 2 - 1; in __cursor_row_prev()
515 rip = &page->pg_row[cbt->slot]; in __cursor_row_prev()
520 ++cbt->page_deleted_count; in __cursor_row_prev()
523 return (__cursor_row_slot_return(cbt, rip, upd)); in __cursor_row_prev()
533 __wt_btcur_prev(WT_CURSOR_BTREE *cbt, bool truncating) in __wt_btcur_prev() argument
543 cursor = &cbt->iface; in __wt_btcur_prev()
544 session = (WT_SESSION_IMPL *)cbt->iface.session; in __wt_btcur_prev()
558 F_CLR(cbt, WT_CBT_RETRY_NEXT); in __wt_btcur_prev()
559 if (F_ISSET(cbt, WT_CBT_RETRY_PREV)) { in __wt_btcur_prev()
560 WT_RET(__wt_cursor_valid(cbt, &upd, &valid)); in __wt_btcur_prev()
561 F_CLR(cbt, WT_CBT_RETRY_PREV); in __wt_btcur_prev()
567 return (__cursor_kv_return(cbt, upd)); in __wt_btcur_prev()
571 WT_RET(__cursor_func_init(cbt, false)); in __wt_btcur_prev()
577 if (!F_ISSET(cbt, WT_CBT_ITERATE_PREV)) in __wt_btcur_prev()
578 __wt_btcur_iterate_setup(cbt); in __wt_btcur_prev()
590 page = cbt->ref == NULL ? NULL : cbt->ref->page; in __wt_btcur_prev()
598 (cbt->ins_head = WT_COL_APPEND(page)) != NULL) in __wt_btcur_prev()
599 F_SET(cbt, WT_CBT_ITERATE_APPEND); in __wt_btcur_prev()
601 if (F_ISSET(cbt, WT_CBT_ITERATE_APPEND)) { in __wt_btcur_prev()
604 ret = __cursor_fix_append_prev(cbt, newpage); in __wt_btcur_prev()
607 ret = __cursor_var_append_prev(cbt, newpage); in __wt_btcur_prev()
613 F_CLR(cbt, WT_CBT_ITERATE_APPEND); in __wt_btcur_prev()
621 ret = __cursor_fix_prev(cbt, newpage); in __wt_btcur_prev()
624 ret = __cursor_var_prev(cbt, newpage); in __wt_btcur_prev()
627 ret = __cursor_row_prev(cbt, newpage); in __wt_btcur_prev()
644 (cbt->page_deleted_count > WT_BTREE_DELETE_THRESHOLD || in __wt_btcur_prev()
645 (newpage && cbt->page_deleted_count > 0))) in __wt_btcur_prev()
646 __wt_page_evict_soon(session, cbt->ref); in __wt_btcur_prev()
647 cbt->page_deleted_count = 0; in __wt_btcur_prev()
649 if (F_ISSET(cbt, WT_CBT_READ_ONCE)) in __wt_btcur_prev()
651 WT_ERR(__wt_tree_walk(session, &cbt->ref, flags)); in __wt_btcur_prev()
652 WT_ERR_TEST(cbt->ref == NULL, WT_NOTFOUND); in __wt_btcur_prev()
656 WT_ERR(__wt_cursor_key_order_check(session, cbt, false)); in __wt_btcur_prev()
668 F_SET(cbt, WT_CBT_RETRY_PREV); in __wt_btcur_prev()
671 WT_TRET(__cursor_reset(cbt)); in __wt_btcur_prev()