]> git.sur5r.net Git - openldap/commitdiff
If put(NOOVERWRITE) exists, return existing data
authorHoward Chu <hyc@openldap.org>
Sat, 10 Sep 2011 04:43:22 +0000 (21:43 -0700)
committerHoward Chu <highlandsun@gmail.com>
Sat, 10 Sep 2011 05:28:07 +0000 (22:28 -0700)
libraries/libmdb/mdb.c
libraries/libmdb/mdb.h

index 1363ca4f2a4722703757809a7df9172a09a36c06..b392826d07effad746b7ecadc8d00271b46b595c 100644 (file)
@@ -3283,9 +3283,11 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
                goto top;
        } else {
                int exact = 0;
-               rc = mdb_cursor_set(mc, key, NULL, MDB_SET, &exact);
+               MDB_val d2;
+               rc = mdb_cursor_set(mc, key, &d2, MDB_SET, &exact);
                if (flags == MDB_NOOVERWRITE && rc == 0) {
                        DPRINTF("duplicate key [%s]", DKEY(key));
+                       *data = d2;
                        return MDB_KEYEXIST;
                }
                if (rc && rc != MDB_NOTFOUND)
index 3b5d74f00e974fa935a5de8b6140646d775335d0..c0d4edcf4af9aa5880241f2ab227f79319e48213 100644 (file)
@@ -683,7 +683,7 @@ int  mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
         * @param[in] txn A transaction handle returned by #mdb_txn_begin()
         * @param[in] dbi A database handle returned by #mdb_open()
         * @param[in] key The key to store in the database
-        * @param[in] data The data to store
+        * @param[in,out] data The data to store
         * @param[in] flags Special options for this operation. This parameter
         * must be set to 0 or by bitwise OR'ing together one or more of the
         * values described here.
@@ -696,7 +696,8 @@ int  mdb_get(MDB_txn *txn, MDB_dbi dbi, MDB_val *key, MDB_val *data);
         *      <li>#MDB_NOOVERWRITE - enter the new key/data pair only if the key
         *              does not already appear in the database. The function will return
         *              #MDB_KEYEXIST if the key already appears in the database, even if
-        *              the database supports duplicates (#MDB_DUPSORT).
+        *              the database supports duplicates (#MDB_DUPSORT). The \b data
+        *              parameter will be set to point to the existing item.
         * </ul>
         * @return A non-zero error value on failure and 0 on success. Some possible
         * errors are: