static void testOomScan( OomTest *pOom, lsm_db *pDb, int bReverse, const void *pKey, int nKey, int nScan, int *pRc ){ if( *pRc==0 ){ int rc; int iScan = 0; lsm_cursor *pCsr; int (*xAdvance)(lsm_cursor *); rc = lsm_csr_open(pDb, &pCsr); testOomAssertRc(pOom, rc); if( rc==LSM_OK ){ if( bReverse ){ rc = lsm_csr_seek(pCsr, pKey, nKey, LSM_SEEK_LE); xAdvance = lsm_csr_prev; }else{ rc = lsm_csr_seek(pCsr, pKey, nKey, LSM_SEEK_GE); xAdvance = lsm_csr_next; } } testOomAssertRc(pOom, rc); while( rc==LSM_OK && lsm_csr_valid(pCsr) && iScan<nScan ){ const void *p; int n; rc = lsm_csr_key(pCsr, &p, &n); testOomAssertRc(pOom, rc); if( rc==LSM_OK ){ rc = lsm_csr_value(pCsr, &p, &n); testOomAssertRc(pOom, rc); } if( rc==LSM_OK ){ rc = xAdvance(pCsr); testOomAssertRc(pOom, rc); } iScan++; } lsm_csr_close(pCsr); *pRc = rc; } }
void TestLsmMainWindow::on_actionTest1_triggered() { int rc; lsm_db *db; /* Allocate a new database handle */ rc = lsm_new(0, &db); if( rc!=LSM_OK ) return; // rc = lsm_config(db, LSM_CONFIG_PAGE_SIZE,); // rc = lsm_config(db, LSM_CONFIG_BLOCK_SIZE, 1024); /* Connect the database handle to database "test.db" */ rc = lsm_open(db, "d:\\test.db"); if( rc!=LSM_OK ) return; lsm_insert(db, "testkey", 7, "testval", 7); lsm_insert(db, "testkey", 7, "testval", 7); lsm_insert(db, "testkey", 7, "testval", 7); lsm_insert(db, "testkey", 7, "testval", 7); lsm_cursor* csr; rc = lsm_csr_open(db, &csr); rc = lsm_csr_seek(csr, "testkey", 7, LSM_SEEK_EQ); if( lsm_csr_valid(csr) ) { const char *pVal; int nVal; rc = lsm_csr_value(csr, (const void **)&pVal, &nVal); if( rc==LSM_OK ) { QString test = QString::fromLatin1(pVal, nVal); qDebug(test.toLatin1().constData()); /* pVal now points to a buffer nVal bytes in size containing the ** value associated with database key "b". */ } } lsm_csr_close(csr); rc = lsm_close(db); }
static void testOomFetch( OomTest *pOom, lsm_db *pDb, void *pKey, int nKey, void *pVal, int nVal, int *pRc ){ testOomAssertRc(pOom, *pRc); if( *pRc==LSM_OK ){ lsm_cursor *pCsr; int rc; rc = lsm_csr_open(pDb, &pCsr); if( rc==LSM_OK ) rc = lsm_csr_seek(pCsr, pKey, nKey, 0); testOomAssertRc(pOom, rc); if( rc==LSM_OK ){ const void *p; int n; testOomAssert(pOom, lsm_csr_valid(pCsr)); rc = lsm_csr_key(pCsr, &p, &n); testOomAssertRc(pOom, rc); testOomAssert(pOom, rc!=LSM_OK || (n==nKey && memcmp(pKey, p, nKey)==0) ); } if( rc==LSM_OK ){ const void *p; int n; testOomAssert(pOom, lsm_csr_valid(pCsr)); rc = lsm_csr_value(pCsr, &p, &n); testOomAssertRc(pOom, rc); testOomAssert(pOom, rc!=LSM_OK || (n==nVal && memcmp(pVal, p, nVal)==0) ); } lsm_csr_close(pCsr); *pRc = rc; } }
/* ** Test that the rules for when lsm_csr_next() and lsm_csr_prev() are ** enforced. Specifically: ** ** * Both functions always return LSM_MISUSE if the cursor is at EOF ** when they are called. ** ** * lsm_csr_next() may only be used after lsm_csr_seek(LSM_SEEK_GE) or ** lsm_csr_first(). ** ** * lsm_csr_prev() may only be used after lsm_csr_seek(LSM_SEEK_LE) or ** lsm_csr_last(). */ static void do_test_api1_lsm(lsm_db *pDb, int *pRc){ int ret; lsm_cursor *pCsr; lsm_cursor *pCsr2; int nKey; const void *pKey; ret = lsm_csr_open(pDb, &pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_seek(pCsr, "jjj", 3, LSM_SEEK_GE); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_seek(pCsr, "jjj", 3, LSM_SEEK_LE); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_seek(pCsr, "jjj", 3, LSM_SEEK_LEFAST); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_key(pCsr, &pKey, &nKey); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_open(pDb, &pCsr2); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_seek(pCsr2, pKey, nKey, LSM_SEEK_EQ); testCompareInt(LSM_OK, ret, pRc); testCompareInt(1, lsm_csr_valid(pCsr2), pRc); ret = lsm_csr_next(pCsr2); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_prev(pCsr2); testCompareInt(LSM_MISUSE, ret, pRc); lsm_csr_close(pCsr2); ret = lsm_csr_first(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_last(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_first(pCsr); while( lsm_csr_valid(pCsr) ){ ret = lsm_csr_next(pCsr); testCompareInt(LSM_OK, ret, pRc); } ret = lsm_csr_next(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_prev(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); ret = lsm_csr_last(pCsr); while( lsm_csr_valid(pCsr) ){ ret = lsm_csr_prev(pCsr); testCompareInt(LSM_OK, ret, pRc); } ret = lsm_csr_prev(pCsr); testCompareInt(LSM_OK, ret, pRc); ret = lsm_csr_next(pCsr); testCompareInt(LSM_MISUSE, ret, pRc); lsm_csr_close(pCsr); }
/* ** Destructor for a lsm1_cursor. */ static int lsm1Close(sqlite3_vtab_cursor *cur){ lsm1_cursor *pCur = (lsm1_cursor*)cur; lsm_csr_close(pCur->pLsmCur); sqlite3_free(pCur); return SQLITE_OK; }