Here is a quick example of what I mean.
MDB_cursor *cursor;
MDB_val first_key, key, data;
MDB_val last_key1, last_key2, last_data;
int rc;
//Get the last key
rc = mdb_cursor_get (cursor, &last_key1, &last_data, MDB_SET_RANGE);
//If the current position is not equal move back one spot
if (rc == MDB_SUCCESS && mdb_cmp (mdb_cursor_txn (cursor), mdb_cursor_dbi
(cursor), &last_key1, &last_key2)) {
rc = mdb_cursor_get (cursor, &last_key1, &last_data, MDB_PREV);
}
//This means that nothing is equal or greater than the last key or the last
key is at the first position
if (rc) {
last_data.mv_data = NULL;
}
//Get the first key
rc = mdb_cursor_get (cursor, &first_key, &data, MDB_SET_RANGE);
if(rc == MDB_SUCCESS) {
do {
} while (mdb_cursor_get (cursor, &key, &data, MDB_NEXT) == MDB_SUCCESS &&
data.mv_data != last_data.mv_data);
}
> Hi all!
> Is there a way to iterate with all key-value pairs in LMDB database, where
all keys is in specified range?
> I'm trying to use mdb_cursor_get() with MDB_SET_RANGE to search first pair.
> Then I see only one way - use mdb_cursor_get() with MDB_NEXT and compare
key by memcmp().
> But it seems absolutely not effective.
>
> Is there another solution for my task?
>
> Thanks!