void createInsertCloseReopenCursorTest(void) { ups_key_t key = {}; ups_record_t rec = {}; ups_cursor_t *cursor; RecnoType recno, value = 1; key.flags = UPS_KEY_USER_ALLOC; key.data = &recno; key.size = sizeof(recno); rec.data = &value; rec.size = sizeof(value); REQUIRE(0 == ups_cursor_create(&cursor, db, 0, 0)); for (int i = 0; i < 5; i++) { REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, 0)); REQUIRE(recno == (RecnoType)i + 1); } REQUIRE(0 == ups_cursor_close(cursor)); reopen(); REQUIRE(0 == ups_cursor_create(&cursor, db, 0, 0)); for (int i = 5; i < 10; i++) { REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, 0)); REQUIRE(recno == (RecnoType)i + 1); } REQUIRE(0 == ups_cursor_close(cursor)); }
void overwriteCursorTest() { ups_key_t key = {}; ups_record_t rec = {}; RecnoType recno, value; ups_cursor_t *cursor; REQUIRE(0 == ups_cursor_create(&cursor, db, 0, 0)); key.data = &recno; key.flags = UPS_KEY_USER_ALLOC; key.size = sizeof(recno); REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, 0)); value = 0x13ull; memset(&rec, 0, sizeof(rec)); rec.data = &value; rec.size = sizeof(value); REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, UPS_OVERWRITE)); memset(&rec, 0, sizeof(rec)); REQUIRE(0 == ups_db_find(db, 0, &key, &rec, 0)); REQUIRE(value == *(RecnoType *)rec.data); REQUIRE(0 == ups_cursor_close(cursor)); }
void insertBadKeyCursorTest() { ups_key_t key = {}; ups_record_t rec = {}; ups_cursor_t *cursor; RecnoType recno; REQUIRE(0 == ups_cursor_create(&cursor, db, 0, 0)); key.flags = 0; key.data = &recno; key.size = sizeof(recno); REQUIRE(UPS_INV_PARAMETER == ups_cursor_insert(cursor, &key, &rec, 0)); key.data = 0; key.size = sizeof(RecnoType); REQUIRE(UPS_INV_PARAMETER == ups_cursor_insert(cursor, &key, &rec, 0)); REQUIRE(UPS_INV_PARAMETER == ups_cursor_insert(cursor, 0, &rec, 0)); key.data = 0; key.size = 0; REQUIRE(0 == ups_cursor_insert(cursor, &key, &rec, 0)); REQUIRE((RecnoType)1ull == *(RecnoType *)key.data); REQUIRE(0 == ups_cursor_close(cursor)); }
/** Closes the Cursor. */ void close() { if (!m_cursor) return; ups_status_t st = ups_cursor_close(m_cursor); if (st) throw error(st); m_cursor = 0; }