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);
 }