]> git.sur5r.net Git - openldap/commitdiff
Cleanup, add mdb_cursor_count()
authorHoward Chu <hyc@symas.com>
Thu, 11 Aug 2011 11:46:14 +0000 (04:46 -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
libraries/libmdb/mtest.c
libraries/libmdb/mtest2.c

index 6d90db24b5e60d6a6bc3fc1724feecc8657ca4d0..53e5dde8f86359780343a171edf88f21d2339c53 100644 (file)
@@ -1029,7 +1029,8 @@ mdbenv_write_meta(MDB_txn *txn)
        assert(txn != NULL);
        assert(txn->mt_env != NULL);
 
-       DPRINTF("writing meta page for root page %lu", txn->mt_dbs[MAIN_DBI].md_root);
+       DPRINTF("writing meta page %d for root page %lu",
+               !F_ISSET(txn->mt_flags, MDB_TXN_METOGGLE), txn->mt_dbs[MAIN_DBI].md_root);
 
        env = txn->mt_env;
 
@@ -1125,7 +1126,7 @@ mdbenv_get_maxreaders(MDB_env *env, int *readers)
        return MDB_SUCCESS;
 }
 
-int
+static int
 mdbenv_open2(MDB_env *env, unsigned int flags)
 {
        int i, newenv = 0;
@@ -2345,6 +2346,23 @@ mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **ret)
        return MDB_SUCCESS;
 }
 
+/* Return the count of duplicate data items for the current key */
+int
+mdb_cursor_count(MDB_cursor *mc, unsigned long *countp)
+{
+       if (mc == NULL || countp == NULL)
+               return EINVAL;
+
+       if (!(mc->mc_txn->mt_dbs[mc->mc_dbi].md_flags & MDB_DUPSORT))
+               return EINVAL;
+
+       if (!mc->mc_xcursor->mx_cursor.mc_initialized)
+               return EINVAL;
+
+       *countp = mc->mc_xcursor->mx_txn.mt_dbs[mc->mc_xcursor->mx_cursor.mc_dbi].md_entries;
+       return MDB_SUCCESS;
+}
+
 void
 mdb_cursor_close(MDB_cursor *cursor)
 {
index 0ac2e35252f25cf9ac292b920fb82a14783c53e2..1c111b500f7212947a8b702820f1d96189e7bc34 100644 (file)
@@ -131,9 +131,7 @@ int  mdb_cursor_open(MDB_txn *txn, MDB_dbi dbi, MDB_cursor **cursor);
 void mdb_cursor_close(MDB_cursor *cursor);
 int  mdb_cursor_get(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
                            MDB_cursor_op op);
-int  mdb_cursor_put(MDB_cursor *cursor, MDB_val *key, MDB_val *data,
-                           MDB_cursor_op op);
-int  mdb_cursor_del(MDB_cursor *cursor, unsigned int flags);
+int  mdb_cursor_count(MDB_cursor *cursor, unsigned long *countp);
 
 int  mdb_cmp(MDB_txn *txn, MDB_dbi dbi, const MDB_val *a, const MDB_val *b);
 
index 8d08c2472b72f9e8ba4446e0b03c0d50d42ff101..ef8b955f4cd300e856564f6b3ece61d910823bb7 100644 (file)
@@ -25,7 +25,7 @@ int main(int argc,char * argv[])
        MDB_val key, data;
        MDB_txn *txn;
        MDB_stat mst;
-       MDB_cursor *cursor, *cur2;
+       MDB_cursor *cursor;
        int count;
        int *values;
        char sval[32];
index 7576027a987afd9b571f6bf48a03eaf0e890d4b2..ca84dc4a06ebb3fde8c5ea0f213d18e909445d2e 100644 (file)
@@ -25,7 +25,7 @@ int main(int argc,char * argv[])
        MDB_val key, data;
        MDB_txn *txn;
        MDB_stat mst;
-       MDB_cursor *cursor, *cur2;
+       MDB_cursor *cursor;
        int count;
        int *values;
        char sval[32];