Constant ord_lmdb_zero::put::NODUPDATA
source · [−]pub const NODUPDATA: Flags;
Expand description
Enter the new key/data pair only if it does not already appear
in the database. This flag may only be specified if the
database was opened with DUPSORT
. The function will return
KEYEXIST
if the key/data pair already appears in the
database.
Example
let db = lmdb::Database::open(
&env, Some("reversed"),
&lmdb::DatabaseOptions::create_multimap_unsized::<str,str>())
.unwrap();
let txn = lmdb::WriteTransaction::new(&env).unwrap();
{
let mut access = txn.access();
access.put(&db, "Fruit", "Apple", lmdb::put::Flags::empty()).unwrap();
access.put(&db, "Fruit", "Orange", lmdb::put::Flags::empty()).unwrap();
// Duplicate, but that's OK by default
access.put(&db, "Fruit", "Apple", lmdb::put::Flags::empty()).unwrap();
// `NODUPDATA` blocks adding an identical item
assert!(access.put(&db, "Fruit", "Apple", lmdb::put::NODUPDATA).is_err());
// But doesn't affect pairs not already present
access.put(&db, "Fruit", "Durian", lmdb::put::NODUPDATA).unwrap();
}
txn.commit().unwrap();
When used on a cursor, the cursor is positioned at the
conflicting key/value pair if this results in a KEYEXIST
error.
let db = lmdb::Database::open(
&env, Some("reversed"),
&lmdb::DatabaseOptions::create_multimap_unsized::<str,str>())
.unwrap();
let txn = lmdb::WriteTransaction::new(&env).unwrap();
{
let mut access = txn.access();
access.put(&db, "Fruit", "Apple", lmdb::put::Flags::empty()).unwrap();
access.put(&db, "Fruit", "Orange", lmdb::put::Flags::empty()).unwrap();
access.put(&db, "Fruit", "Durian", lmdb::put::Flags::empty()).unwrap();
let mut cursor = txn.cursor(&db).unwrap();
assert_eq!(Err(lmdb::Error::Code(lmdb::error::KEYEXIST)),
cursor.put(&mut access, "Fruit", "Durian",
lmdb::put::NODUPDATA));
assert_eq!(("Fruit", "Durian"), cursor.get_current(&access).unwrap());
}
txn.commit().unwrap();