Mercurial > lbo > hg > leveldb-rs
changeset 579:e5fe33adb1f3
Allow iteration over DB when key is empty byte slice
`truncate_to_userkey` contained an off-by-one error.
The added test fails without this change.
This closes #16.
author | Thorkil Vaerge <thor@neptune.cash> |
---|---|
date | Wed, 24 Aug 2022 17:16:30 +0200 |
parents | 4276ae011066 |
children | cbe7574ed46b |
files | src/db_iter.rs src/key_types.rs |
diffstat | 2 files changed, 11 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/db_iter.rs Sat Aug 20 09:41:39 2022 +0200 +++ b/src/db_iter.rs Wed Aug 24 17:16:30 2022 +0200 @@ -289,6 +289,7 @@ use super::*; use crate::db_impl::testutil::*; use crate::db_impl::DB; + use crate::options; use crate::test_util::LdbIteratorIter; use crate::types::{current_key_val, Direction}; @@ -485,4 +486,13 @@ } } } + + #[test] + fn db_iter_allow_empty_key() { + let opt = options::for_test(); + let mut db = DB::open("db", opt).unwrap(); + assert!(db.new_iter().unwrap().next().is_none()); + db.put(&[], &[]).unwrap(); + assert!(db.new_iter().unwrap().next().is_some()); + } }
--- a/src/key_types.rs Sat Aug 20 09:41:39 2022 +0200 +++ b/src/key_types.rs Wed Aug 24 17:16:30 2022 +0200 @@ -209,7 +209,7 @@ /// truncate_to_userkey performs an in-place conversion from InternalKey to UserKey format. pub fn truncate_to_userkey(ikey: &mut Vec<u8>) { let len = ikey.len(); - assert!(len > 8); + assert!(len >= 8); ikey.truncate(len - 8); }