aboutsummaryrefslogtreecommitdiff
path: root/src/db/lmdb_adapter.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-06-07 17:05:17 +0200
committerAlex Auvolat <alex@adnab.me>2022-06-07 17:05:17 +0200
commita3a01141ec8f8eefe1a31162bd53fbaa2d37e601 (patch)
tree9363dc84501de391bb59732e721710f47af6974e /src/db/lmdb_adapter.rs
parenta9e79f848b704347601e082c8065c3ce042b283b (diff)
downloadgarage-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.rs32
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<'_>> {