If put(NOOVERWRITE) exists, return existing data

vmware
Howard Chu 13 years ago committed by Howard Chu
parent a7edb95e64
commit acdc248f57
  1. 4
      libraries/libmdb/mdb.c
  2. 5
      libraries/libmdb/mdb.h

@ -3283,9 +3283,11 @@ mdb_cursor_put(MDB_cursor *mc, MDB_val *key, MDB_val *data,
goto top; goto top;
} else { } else {
int exact = 0; 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) { if (flags == MDB_NOOVERWRITE && rc == 0) {
DPRINTF("duplicate key [%s]", DKEY(key)); DPRINTF("duplicate key [%s]", DKEY(key));
*data = d2;
return MDB_KEYEXIST; return MDB_KEYEXIST;
} }
if (rc && rc != MDB_NOTFOUND) if (rc && rc != MDB_NOTFOUND)

@ -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] txn A transaction handle returned by #mdb_txn_begin()
* @param[in] dbi A database handle returned by #mdb_open() * @param[in] dbi A database handle returned by #mdb_open()
* @param[in] key The key to store in the database * @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 * @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 * must be set to 0 or by bitwise OR'ing together one or more of the
* values described here. * 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 * <li>#MDB_NOOVERWRITE - enter the new key/data pair only if the key
* does not already appear in the database. The function will return * does not already appear in the database. The function will return
* #MDB_KEYEXIST if the key already appears in the database, even if * #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> * </ul>
* @return A non-zero error value on failure and 0 on success. Some possible * @return A non-zero error value on failure and 0 on success. Some possible
* errors are: * errors are:

Loading…
Cancel
Save