1
0
Fork 0
mirror of https://github.com/romanz/electrs.git synced 2025-02-23 14:50:45 +01:00

Add scanning DBStore prefix iterator

This commit is contained in:
Roman Zeyde 2018-07-03 14:44:28 +03:00
parent 698156eb6e
commit e300796fc2
No known key found for this signature in database
GPG key ID: 87CAE5FA46917CBB

View file

@ -94,6 +94,39 @@ impl DBStore {
info!("finished full compaction");
store
}
pub fn iter_scan(&self, prefix: &[u8]) -> ScanIterator {
ScanIterator {
prefix: prefix.to_vec(),
iter: self.db.prefix_iterator(prefix),
done: false,
}
}
}
pub struct ScanIterator {
prefix: Vec<u8>,
iter: rocksdb::DBIterator,
done: bool,
}
impl Iterator for ScanIterator {
type Item = Row;
fn next(&mut self) -> Option<Row> {
if self.done {
return None;
}
let (key, value) = self.iter.next()?;
if !key.starts_with(&self.prefix) {
self.done = true;
return None;
}
Some(Row {
key: key.to_vec(),
value: value.to_vec(),
})
}
}
impl ReadStore for DBStore {