Abstract database behind generic interface and implement alternative drivers #322

Merged
lx merged 64 commits from db-abstraction into main 2022-06-08 08:01:56 +00:00
2 changed files with 6 additions and 5 deletions
Showing only changes of commit d41a67c4ee - Show all commits

View file

@ -35,10 +35,11 @@ pub struct Error(pub Cow<'static, str>);
pub type Result<T> = std::result::Result<T, Error>; pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
#[error(display = "{}", _0)]
pub struct TxOpError(pub(crate) Error); pub struct TxOpError(pub(crate) Error);
pub type TxOpResult<T> = std::result::Result<T, TxOpError>; pub type TxOpResult<T> = std::result::Result<T, TxOpError>;
#[derive(Debug)]
pub enum TxError<E> { pub enum TxError<E> {
Abort(E), Abort(E),
Db(Error), Db(Error),

View file

@ -203,12 +203,12 @@ impl IDb for LmdbDb {
// ---- // ----
struct LmdbTx<'a, 'db> { struct LmdbTx<'a> {
trees: &'db [Database], trees: &'a [Database],
tx: RwTxn<'a, 'a>, tx: RwTxn<'a, 'a>,
} }
impl<'a, 'db> LmdbTx<'a, 'db> { impl<'a> LmdbTx<'a> {
fn get_tree(&self, i: usize) -> TxOpResult<&Database> { fn get_tree(&self, i: usize) -> TxOpResult<&Database> {
self.trees.get(i).ok_or_else(|| { self.trees.get(i).ok_or_else(|| {
TxOpError(Error( TxOpError(Error(
@ -218,7 +218,7 @@ impl<'a, 'db> LmdbTx<'a, 'db> {
} }
} }
impl<'a, 'db> ITx for LmdbTx<'a, 'db> { impl<'a> ITx for LmdbTx<'a> {
fn get(&self, tree: usize, key: &[u8]) -> TxOpResult<Option<Value>> { fn get(&self, tree: usize, key: &[u8]) -> TxOpResult<Option<Value>> {
let tree = self.get_tree(tree)?; let tree = self.get_tree(tree)?;
match tree.get(&self.tx, key)? { match tree.get(&self.tx, key)? {