ITS#7598 Tweak MDB_<NEXT/PREV>_NODUP,fix mdb_stat.

MDB_NEXT_NODUP, MDB_PREV_NODUP: Allow for non-MDB_DUPSORT databases.
No mdb.c code changes needed.

mdb_stat.c: Use MDB_NEXT_NODUP, to avoid a crash with a DUPSORT mainDB.
vmware
Hallvard Furuseth 12 years ago
parent 1b6d7ee7e1
commit a1b16ce5f0
  1. 6
      libraries/liblmdb/lmdb.h
  2. 2
      libraries/liblmdb/mdb_stat.c

@ -325,13 +325,11 @@ typedef enum MDB_cursor_op {
Only for #MDB_DUPSORT */ Only for #MDB_DUPSORT */
MDB_NEXT_MULTIPLE, /**< Return all duplicate data items at the next MDB_NEXT_MULTIPLE, /**< Return all duplicate data items at the next
cursor position. Only for #MDB_DUPFIXED */ cursor position. Only for #MDB_DUPFIXED */
MDB_NEXT_NODUP, /**< Position at first data item of next key. MDB_NEXT_NODUP, /**< Position at first data item of next key */
Only for #MDB_DUPSORT */
MDB_PREV, /**< Position at previous data item */ MDB_PREV, /**< Position at previous data item */
MDB_PREV_DUP, /**< Position at previous data item of current key. MDB_PREV_DUP, /**< Position at previous data item of current key.
Only for #MDB_DUPSORT */ Only for #MDB_DUPSORT */
MDB_PREV_NODUP, /**< Position at last data item of previous key. MDB_PREV_NODUP, /**< Position at last data item of previous key */
Only for #MDB_DUPSORT */
MDB_SET, /**< Position at specified key */ MDB_SET, /**< Position at specified key */
MDB_SET_KEY, /**< Position at specified key, return key + data */ MDB_SET_KEY, /**< Position at specified key, return key + data */
MDB_SET_RANGE /**< Position at first key greater than or equal to specified key. */ MDB_SET_RANGE /**< Position at first key greater than or equal to specified key. */

@ -193,7 +193,7 @@ int main(int argc, char *argv[])
printf("mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc)); printf("mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
goto txn_abort; goto txn_abort;
} }
while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT)) == 0) { while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT_NODUP)) == 0) {
char *str = malloc(key.mv_size+1); char *str = malloc(key.mv_size+1);
MDB_dbi db2; MDB_dbi db2;
memcpy(str, key.mv_data, key.mv_size); memcpy(str, key.mv_data, key.mv_size);

Loading…
Cancel
Save