changeset 352:742cfffd2892

db_impl: Implement delete() and add test
author Lewin Bormann <lbo@spheniscida.de>
date Thu, 05 Oct 2017 19:45:55 +0200
parents b46303bd0520
children c8dade1cb8e1
files src/db_impl.rs
diffstat 1 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/db_impl.rs	Thu Oct 05 19:45:42 2017 +0200
+++ b/src/db_impl.rs	Thu Oct 05 19:45:55 2017 +0200
@@ -353,6 +353,13 @@
         self.write(wb, false)
     }
 
+    /// delete deletes a single entry.
+    fn delete(&mut self, k: &[u8], sync: bool) -> Result<()> {
+        let mut wb = WriteBatch::new();
+        wb.delete(k);
+        self.write(wb, sync)
+    }
+
     /// write writes an entire WriteBatch. sync determines whether the write should be flushed to
     /// disk.
     fn write(&mut self, batch: WriteBatch, sync: bool) -> Result<()> {
@@ -1237,6 +1244,25 @@
     }
 
     #[test]
+    fn test_db_impl_delete() {
+        let mut db = build_db();
+
+        db.put(b"xyy", b"123").unwrap();
+        db.put(b"xyz", b"123").unwrap();
+
+        assert!(db.get(b"xyy").is_some());
+        assert!(db.get(b"gaa").is_some());
+
+        // Delete one memtable entry and one table entry.
+        db.delete(b"xyy", true).unwrap();
+        db.delete(b"gaa", true).unwrap();
+
+        assert!(db.get(b"xyy").is_none());
+        assert!(db.get(b"gaa").is_none());
+        assert!(db.get(b"xyz").is_some());
+    }
+
+    #[test]
     fn test_db_impl_compact_single_file() {
         let mut db = build_db();
         set_file_to_compact(&mut db, 4);