From 91e79bd9f4ce34a692a80149771d02ef4d95c929 Mon Sep 17 00:00:00 2001 From: Tglman Date: Fri, 18 Jun 2021 19:00:22 +0100 Subject: [PATCH] minor fix in the integration with persy --- src/database/abstraction.rs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/database/abstraction.rs b/src/database/abstraction.rs index 56557e1..de63301 100644 --- a/src/database/abstraction.rs +++ b/src/database/abstraction.rs @@ -80,7 +80,7 @@ impl DatabaseEngine for PersyEngine { let persy = persy::OpenOptions::new() .create(true) .config(cfg) - .open(&config.database_path)?; + .open(&format!("{}/db.persy", config.database_path))?; Ok(Arc::new(PersyEngine(persy))) } @@ -179,19 +179,31 @@ impl Tree for PersyTree { from: &[u8], backwards: bool, ) -> Box, Box<[u8]>)> + 'a> { - Box::new( + let iter = if backwards { + self.db + .range::( + &self.name, + ..persy::ByteVec(from.to_owned()), + ) + .unwrap() + } else { self.db .range::( &self.name, persy::ByteVec(from.to_owned()).., ) .unwrap() - .filter_map(|(k, v)| { - v.into_iter() - .map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) - .next() - }), - ) + }; + let map = iter.filter_map(|(k, v)| { + v.into_iter() + .map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) + .next() + }); + if backwards { + Box::new(map.rev()) + } else { + Box::new(map) + } } fn increment(&self, key: &[u8]) -> Result> { @@ -210,9 +222,10 @@ impl Tree for PersyTree { self.db .range::( &self.name, - range_prefix.clone()..=range_prefix, + range_prefix.., ) .unwrap() + .take_while(move |(k, _)| k.0.starts_with(&prefix)) .filter_map(|(k, v)| { v.into_iter() .map(|val| (k.0.to_owned().into(), val.0.to_owned().into()))