|
|
|
@ -80,7 +80,7 @@ impl DatabaseEngine for PersyEngine { |
|
|
|
let persy = persy::OpenOptions::new() |
|
|
|
let persy = persy::OpenOptions::new() |
|
|
|
.create(true) |
|
|
|
.create(true) |
|
|
|
.config(cfg) |
|
|
|
.config(cfg) |
|
|
|
.open(&config.database_path)?; |
|
|
|
.open(&format!("{}/db.persy", config.database_path))?; |
|
|
|
Ok(Arc::new(PersyEngine(persy))) |
|
|
|
Ok(Arc::new(PersyEngine(persy))) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -179,19 +179,31 @@ impl Tree for PersyTree { |
|
|
|
from: &[u8], |
|
|
|
from: &[u8], |
|
|
|
backwards: bool, |
|
|
|
backwards: bool, |
|
|
|
) -> Box<dyn Iterator<Item = (Box<[u8]>, Box<[u8]>)> + 'a> { |
|
|
|
) -> Box<dyn Iterator<Item = (Box<[u8]>, Box<[u8]>)> + 'a> { |
|
|
|
Box::new( |
|
|
|
let iter = if backwards { |
|
|
|
|
|
|
|
self.db |
|
|
|
|
|
|
|
.range::<persy::ByteVec, persy::ByteVec, _>( |
|
|
|
|
|
|
|
&self.name, |
|
|
|
|
|
|
|
..persy::ByteVec(from.to_owned()), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
.unwrap() |
|
|
|
|
|
|
|
} else { |
|
|
|
self.db |
|
|
|
self.db |
|
|
|
.range::<persy::ByteVec, persy::ByteVec, _>( |
|
|
|
.range::<persy::ByteVec, persy::ByteVec, _>( |
|
|
|
&self.name, |
|
|
|
&self.name, |
|
|
|
persy::ByteVec(from.to_owned()).., |
|
|
|
persy::ByteVec(from.to_owned()).., |
|
|
|
) |
|
|
|
) |
|
|
|
.unwrap() |
|
|
|
.unwrap() |
|
|
|
.filter_map(|(k, v)| { |
|
|
|
}; |
|
|
|
|
|
|
|
let map = iter.filter_map(|(k, v)| { |
|
|
|
v.into_iter() |
|
|
|
v.into_iter() |
|
|
|
.map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) |
|
|
|
.map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) |
|
|
|
.next() |
|
|
|
.next() |
|
|
|
}), |
|
|
|
}); |
|
|
|
) |
|
|
|
if backwards { |
|
|
|
|
|
|
|
Box::new(map.rev()) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
Box::new(map) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
fn increment(&self, key: &[u8]) -> Result<Vec<u8>> { |
|
|
|
fn increment(&self, key: &[u8]) -> Result<Vec<u8>> { |
|
|
|
@ -210,9 +222,10 @@ impl Tree for PersyTree { |
|
|
|
self.db |
|
|
|
self.db |
|
|
|
.range::<persy::ByteVec, persy::ByteVec, _>( |
|
|
|
.range::<persy::ByteVec, persy::ByteVec, _>( |
|
|
|
&self.name, |
|
|
|
&self.name, |
|
|
|
range_prefix.clone()..=range_prefix, |
|
|
|
range_prefix.., |
|
|
|
) |
|
|
|
) |
|
|
|
.unwrap() |
|
|
|
.unwrap() |
|
|
|
|
|
|
|
.take_while(move |(k, _)| k.0.starts_with(&prefix)) |
|
|
|
.filter_map(|(k, v)| { |
|
|
|
.filter_map(|(k, v)| { |
|
|
|
v.into_iter() |
|
|
|
v.into_iter() |
|
|
|
.map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) |
|
|
|
.map(|val| (k.0.to_owned().into(), val.0.to_owned().into())) |
|
|
|
|