diff options
author | Alex Auvolat <alex@adnab.me> | 2024-03-12 11:15:26 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2024-03-12 11:15:26 +0100 |
commit | 2795b53b8b3ebd162df6b0244b73889e72f67ce0 (patch) | |
tree | 2e785973a01f2000ba50bfc489a4c2004bfbc164 | |
parent | 32aa2463001c0af9f87633a1ff78858dd4157eb9 (diff) | |
download | garage-2795b53b8b3ebd162df6b0244b73889e72f67ce0.tar.gz garage-2795b53b8b3ebd162df6b0244b73889e72f67ce0.zip |
[rm-sled] factorize some code in sqlite backend
-rw-r--r-- | src/db/sqlite_adapter.rs | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/src/db/sqlite_adapter.rs b/src/db/sqlite_adapter.rs index 2c6a4159..6c556c97 100644 --- a/src/db/sqlite_adapter.rs +++ b/src/db/sqlite_adapter.rs @@ -485,20 +485,7 @@ impl<'a> Iterator for DbValueIteratorPin<'a> { let mut_ref = Pin::as_mut(&mut self.0); // This unsafe allows us to mutably access the iterator field let next = unsafe { Pin::get_unchecked_mut(mut_ref).iter.as_mut()?.next() }; - let row = match next { - Err(e) => return Some(Err(e.into())), - Ok(None) => return None, - Ok(Some(r)) => r, - }; - let k = match row.get::<_, Vec<u8>>(0) { - Err(e) => return Some(Err(e.into())), - Ok(x) => x, - }; - let v = match row.get::<_, Vec<u8>>(1) { - Err(e) => return Some(Err(e.into())), - Ok(y) => y, - }; - Some(Ok((k, v))) + iter_next_row(next) } } @@ -557,20 +544,7 @@ impl<'a> Iterator for TxValueIteratorPin<'a> { let mut_ref = Pin::as_mut(&mut self.0); // This unsafe allows us to mutably access the iterator field let next = unsafe { Pin::get_unchecked_mut(mut_ref).iter.as_mut()?.next() }; - let row = match next { - Err(e) => return Some(Err(e.into())), - Ok(None) => return None, - Ok(Some(r)) => r, - }; - let k = match row.get::<_, Vec<u8>>(0) { - Err(e) => return Some(Err(e.into())), - Ok(x) => x, - }; - let v = match row.get::<_, Vec<u8>>(1) { - Err(e) => return Some(Err(e.into())), - Ok(y) => y, - }; - Some(Ok((k, v))) + iter_next_row(next) } } @@ -614,3 +588,25 @@ fn bounds_sql<'r>(low: Bound<&'r [u8]>, high: Bound<&'r [u8]>) -> (String, Vec<V (sql, params) } + +fn iter_next_row<E>( + next_row: rusqlite::Result<Option<&rusqlite::Row>>, +) -> Option<std::result::Result<(Value, Value), E>> +where + E: From<rusqlite::Error>, +{ + let row = match next_row { + Err(e) => return Some(Err(e.into())), + Ok(None) => return None, + Ok(Some(r)) => r, + }; + let k = match row.get::<_, Vec<u8>>(0) { + Err(e) => return Some(Err(e.into())), + Ok(x) => x, + }; + let v = match row.get::<_, Vec<u8>>(1) { + Err(e) => return Some(Err(e.into())), + Ok(y) => y, + }; + Some(Ok((k, v))) +} |