Skip to content

Commit b16a552

Browse files
Fix cozo-core/src/storage/newrocks.rs
Fix thanks to @keitharobertson Co-authored-by: Keith Robertson <2326140+keitharobertson@users.noreply.github.com>
1 parent 115d76e commit b16a552

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

cozo-core/src/storage/newrocks.rs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -359,23 +359,25 @@ impl<'a> Iterator for NewRocksDbSkipIterator<'a> {
359359
type Item = Result<Tuple>;
360360

361361
fn next(&mut self) -> Option<Self::Item> {
362-
for result in &mut self.inner {
363-
match result {
364-
Ok((k, v)) => {
365-
if k.as_ref() >= self.upper_bound.as_slice() {
362+
loop {
363+
self.inner.set_mode(rocksdb::IteratorMode::From(&self.next_bound, rocksdb::Direction::Forward));
364+
match self.inner.next() {
365+
None => return None,
366+
Some(Ok((k_slice, v_slice))) => {
367+
if self.upper_bound.as_slice() <= k_slice.as_ref() {
366368
return None;
367369
}
368-
if let Some(mut tup) =
369-
check_key_for_validity(&k, self.valid_at, None).0
370-
{
371-
extend_tuple_from_v(&mut tup, &v);
370+
371+
let (ret, nxt_bound) = check_key_for_validity(k_slice.as_ref(), self.valid_at, None);
372+
self.next_bound = nxt_bound;
373+
if let Some(mut tup) = ret {
374+
extend_tuple_from_v(&mut tup, v_slice.as_ref());
372375
return Some(Ok(tup));
373376
}
374-
}
375-
Err(e) => return Some(Err(miette!("Iterator error: {}", e))),
377+
},
378+
Some(Err(e)) => return Some(Err(miette!("Iterator Error: {}", e))),
376379
}
377380
}
378-
None
379381
}
380382
}
381383

0 commit comments

Comments
 (0)