void uncoupleTest() { ups_key_t key = {}; ups_record_t rec = {}; RecnoType recno; ups_cursor_t *cursor, *c2; key.flags = UPS_KEY_USER_ALLOC; key.data = &recno; key.size = sizeof(recno); REQUIRE(0 == ups_cursor_create(&cursor, db, 0, 0)); REQUIRE(0 == ups_cursor_create(&c2, db, 0, 0)); for (int i = 0; i < 5; i++) { REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, 0)); REQUIRE(recno == (RecnoType)i + 1); } Page *page = btree_index()->root_page(context.get()); REQUIRE(page != 0); context->changeset.clear(); // unlock pages BtreeCursor::uncouple_all_cursors(context.get(), page, 0); for (int i = 0; i < 5; i++) { REQUIRE(0 == ups_cursor_move(c2, &key, &rec, UPS_CURSOR_NEXT)); REQUIRE(recno == (RecnoType)i + 1); } }
/** Moves the Cursor, and retrieves the key/record of the new position. */ void move(key *k, record *r, uint32_t flags = 0) { ups_status_t st = ups_cursor_move(m_cursor, k ? k->get_handle() : 0, r ? r->get_handle() : 0, flags); if (st) throw error(st); }