]> git.sur5r.net Git - openldap/commitdiff
Add MDB_INTEGERKEY db flag
authorHoward Chu <hyc@symas.com>
Thu, 11 Aug 2011 18:35:39 +0000 (11:35 -0700)
committerHoward Chu <hyc@symas.com>
Thu, 1 Sep 2011 23:17:07 +0000 (16:17 -0700)
libraries/libmdb/mdb.c
libraries/libmdb/mdb.h

index a1b5b8e7e943e0c3abc7eedbfbf10e70ff25071e..00a5054b3ed4a9c6ff8324c1ce34faf7aaa4a16e 100644 (file)
@@ -440,7 +440,11 @@ mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b)
 static int
 _mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *key1, const MDB_val *key2)
 {
-       if (F_ISSET(txn->mt_dbs[dbi].md_flags, MDB_REVERSEKEY))
+       if (txn->mt_dbs[dbi].md_flags & (MDB_REVERSEKEY
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+               |MDB_INTEGERKEY
+#endif
+       ))
                return memnrcmp(key1->mv_data, key1->mv_size, key2->mv_data, key2->mv_size);
        else
                return memncmp((char *)key1->mv_data, key1->mv_size, key2->mv_data, key2->mv_size);
@@ -990,10 +994,7 @@ mdbenv_init_meta(MDB_env *env, MDB_meta *meta)
        meta->mm_psize = psize;
        meta->mm_last_pg = 1;
        meta->mm_flags = env->me_flags & 0xffff;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-       /* freeDB keys are pgno_t's, must compare in int order */
-       meta->mm_flags |= MDB_REVERSEKEY;
-#endif
+       meta->mm_flags |= MDB_INTEGERKEY;
        meta->mm_dbs[0].md_root = P_INVALID;
        meta->mm_dbs[1].md_root = P_INVALID;
 
@@ -3121,8 +3122,8 @@ int mdb_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *dbi)
        /* main DB? */
        if (!name) {
                *dbi = MAIN_DBI;
-               if (flags & (MDB_DUPSORT|MDB_REVERSEKEY))
-                       txn->mt_dbs[MAIN_DBI].md_flags |= (flags & (MDB_DUPSORT|MDB_REVERSEKEY));
+               if (flags & (MDB_DUPSORT|MDB_REVERSEKEY|MDB_INTEGERKEY))
+                       txn->mt_dbs[MAIN_DBI].md_flags |= (flags & (MDB_DUPSORT|MDB_REVERSEKEY|MDB_INTEGERKEY));
                return MDB_SUCCESS;
        }
 
index 1c111b500f7212947a8b702820f1d96189e7bc34..bfd29f068e17e988c97295173e0a38c420d6b502 100644 (file)
@@ -79,6 +79,7 @@ typedef enum MDB_cursor_op {          /* cursor operations */
 /* DB flags */
 #define MDB_REVERSEKEY 0x02            /* use reverse string keys */
 #define MDB_DUPSORT            0x04            /* use sorted duplicates */
+#define MDB_INTEGERKEY 0x08            /* numeric keys in native byte order */
 
 /* environment flags */
 #define MDB_FIXEDMAP   0x01            /* mmap at a fixed address */