|
|
|
@ -823,6 +823,66 @@ int main(int argc, char** argv) { |
|
|
|
|
rocksdb_cuckoo_options_destroy(cuckoo_options); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
StartPhase("iterate_upper_bound"); |
|
|
|
|
{ |
|
|
|
|
// Create new empty database
|
|
|
|
|
rocksdb_close(db); |
|
|
|
|
rocksdb_destroy_db(options, dbname, &err); |
|
|
|
|
CheckNoError(err); |
|
|
|
|
|
|
|
|
|
rocksdb_options_set_prefix_extractor(options, NULL); |
|
|
|
|
db = rocksdb_open(options, dbname, &err); |
|
|
|
|
CheckNoError(err); |
|
|
|
|
|
|
|
|
|
rocksdb_put(db, woptions, "a", 1, "0", 1, &err); CheckNoError(err); |
|
|
|
|
rocksdb_put(db, woptions, "foo", 3, "bar", 3, &err); CheckNoError(err); |
|
|
|
|
rocksdb_put(db, woptions, "foo1", 4, "bar1", 4, &err); CheckNoError(err); |
|
|
|
|
rocksdb_put(db, woptions, "g1", 2, "0", 1, &err); CheckNoError(err); |
|
|
|
|
|
|
|
|
|
// testing basic case with no iterate_upper_bound and no prefix_extractor
|
|
|
|
|
{ |
|
|
|
|
rocksdb_readoptions_set_iterate_upper_bound(roptions, NULL, 0); |
|
|
|
|
rocksdb_iterator_t* iter = rocksdb_create_iterator(db, roptions); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_seek(iter, "foo", 3); |
|
|
|
|
CheckCondition(rocksdb_iter_valid(iter)); |
|
|
|
|
CheckIter(iter, "foo", "bar"); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_next(iter); |
|
|
|
|
CheckCondition(rocksdb_iter_valid(iter)); |
|
|
|
|
CheckIter(iter, "foo1", "bar1"); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_next(iter); |
|
|
|
|
CheckCondition(rocksdb_iter_valid(iter)); |
|
|
|
|
CheckIter(iter, "g1", "0"); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_destroy(iter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// testing iterate_upper_bound and forward iterator
|
|
|
|
|
// to make sure it stops at bound
|
|
|
|
|
{ |
|
|
|
|
// iterate_upper_bound points beyond the last expected entry
|
|
|
|
|
rocksdb_readoptions_set_iterate_upper_bound(roptions, "foo2", 4); |
|
|
|
|
|
|
|
|
|
rocksdb_iterator_t* iter = rocksdb_create_iterator(db, roptions); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_seek(iter, "foo", 3); |
|
|
|
|
CheckCondition(rocksdb_iter_valid(iter)); |
|
|
|
|
CheckIter(iter, "foo", "bar"); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_next(iter); |
|
|
|
|
CheckCondition(rocksdb_iter_valid(iter)); |
|
|
|
|
CheckIter(iter, "foo1", "bar1"); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_next(iter); |
|
|
|
|
// should stop here...
|
|
|
|
|
CheckCondition(!rocksdb_iter_valid(iter)); |
|
|
|
|
|
|
|
|
|
rocksdb_iter_destroy(iter); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
StartPhase("cleanup"); |
|
|
|
|
rocksdb_close(db); |
|
|
|
|
rocksdb_options_destroy(options); |
|
|
|
|