Example #1
0
  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);
    }
  }
Example #2
0
 /** 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);
 }