diff options
author | Alex Auvolat <alex@adnab.me> | 2022-06-07 17:05:17 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2022-06-07 17:05:17 +0200 |
commit | a3a01141ec8f8eefe1a31162bd53fbaa2d37e601 (patch) | |
tree | 9363dc84501de391bb59732e721710f47af6974e /src/db/lmdb_adapter.rs | |
parent | a9e79f848b704347601e082c8065c3ce042b283b (diff) | |
download | garage-a3a01141ec8f8eefe1a31162bd53fbaa2d37e601.tar.gz garage-a3a01141ec8f8eefe1a31162bd53fbaa2d37e601.zip |
db abstraction: make .insert() and .remove() return the old value
Diffstat (limited to 'src/db/lmdb_adapter.rs')
-rw-r--r-- | src/db/lmdb_adapter.rs | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/db/lmdb_adapter.rs b/src/db/lmdb_adapter.rs index d8e5bcd3..9e4306c8 100644 --- a/src/db/lmdb_adapter.rs +++ b/src/db/lmdb_adapter.rs @@ -108,27 +108,28 @@ impl IDb for LmdbDb { } } - fn remove(&self, tree: usize, key: &[u8]) -> Result<bool> { - let tree = self.get_tree(tree)?; - let mut tx = self.db.write_txn()?; - let deleted = tree.delete(&mut tx, key)?; - tx.commit()?; - Ok(deleted) - } - fn len(&self, tree: usize) -> Result<usize> { let tree = self.get_tree(tree)?; let tx = self.db.read_txn()?; Ok(tree.len(&tx)?.try_into().unwrap()) } - fn insert(&self, tree: usize, key: &[u8], value: &[u8]) -> Result<bool> { + fn insert(&self, tree: usize, key: &[u8], value: &[u8]) -> Result<Option<Value>> { let tree = self.get_tree(tree)?; let mut tx = self.db.write_txn()?; let old_val = tree.get(&tx, key)?.map(Vec::from); tree.put(&mut tx, key, value)?; tx.commit()?; - Ok(old_val.is_none()) + Ok(old_val) + } + + fn remove(&self, tree: usize, key: &[u8]) -> Result<Option<Value>> { + let tree = self.get_tree(tree)?; + let mut tx = self.db.write_txn()?; + let old_val = tree.get(&tx, key)?.map(Vec::from); + tree.delete(&mut tx, key)?; + tx.commit()?; + Ok(old_val) } fn iter(&self, tree: usize) -> Result<ValueIter<'_>> { @@ -222,16 +223,17 @@ impl<'a, 'db> ITx for LmdbTx<'a, 'db> { unimplemented!(".len() in transaction not supported with LMDB backend") } - fn insert(&mut self, tree: usize, key: &[u8], value: &[u8]) -> Result<bool> { + fn insert(&mut self, tree: usize, key: &[u8], value: &[u8]) -> Result<Option<Value>> { let tree = *self.get_tree(tree)?; let old_val = tree.get(&self.tx, key)?.map(Vec::from); tree.put(&mut self.tx, key, value)?; - Ok(old_val.is_none()) + Ok(old_val) } - fn remove(&mut self, tree: usize, key: &[u8]) -> Result<bool> { + fn remove(&mut self, tree: usize, key: &[u8]) -> Result<Option<Value>> { let tree = *self.get_tree(tree)?; - let deleted = tree.delete(&mut self.tx, key)?; - Ok(deleted) + let old_val = tree.get(&self.tx, key)?.map(Vec::from); + tree.delete(&mut self.tx, key)?; + Ok(old_val) } fn iter(&self, _tree: usize) -> Result<ValueIter<'_>> { |