diff options
-rw-r--r-- | src/db_iterator.rs | 12 | ||||
-rw-r--r-- | tests/test_raw_iterator.rs | 14 |
2 files changed, 22 insertions, 4 deletions
diff --git a/src/db_iterator.rs b/src/db_iterator.rs index 51b00ab..a1b66fa 100644 --- a/src/db_iterator.rs +++ b/src/db_iterator.rs @@ -289,15 +289,19 @@ impl<'a, D: DBAccess> DBRawIteratorWithThreadMode<'a, D> { /// Seeks to the next key. pub fn next(&mut self) { - unsafe { - ffi::rocksdb_iter_next(self.inner.as_ptr()); + if self.valid() { + unsafe { + ffi::rocksdb_iter_next(self.inner.as_ptr()); + } } } /// Seeks to the previous key. pub fn prev(&mut self) { - unsafe { - ffi::rocksdb_iter_prev(self.inner.as_ptr()); + if self.valid() { + unsafe { + ffi::rocksdb_iter_prev(self.inner.as_ptr()); + } } } diff --git a/tests/test_raw_iterator.rs b/tests/test_raw_iterator.rs index 311ad23..442958f 100644 --- a/tests/test_raw_iterator.rs +++ b/tests/test_raw_iterator.rs @@ -136,3 +136,17 @@ pub fn test_seek_for_prev() { assert_item(&iter, b"k2", b"v2"); } } + +#[test] +pub fn test_next_without_seek() { + let n = DBPath::new("test_forgot_seek"); + { + let db = DB::open_default(&n).unwrap(); + db.put(b"k1", b"v1").unwrap(); + db.put(b"k2", b"v2").unwrap(); + db.put(b"k4", b"v4").unwrap(); + + let mut iter = db.raw_iterator(); + iter.next(); + } +} |