Constant lmdb_zero::put::NODUPDATA
[−]
pub const NODUPDATA: Flags=
Flags{bits: ffi::MDB_NODUPDATA,}
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();