From 19101caccca3a51eee41881b4c8918e3e22c9663 Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Tue, 6 Feb 2024 20:45:22 -0700 Subject: [PATCH] Really made imports drop the db --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/database.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03f9982..b725160 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -102,7 +102,7 @@ checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "j_db" -version = "0.1.1" +version = "0.1.2" dependencies = [ "byteorder", "json", diff --git a/Cargo.toml b/Cargo.toml index 9e747cc..12e4eac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "j_db" -version = "0.1.1" +version = "0.1.2" authors = ["Joey Hines "] edition = "2021" description = "A good enough (TM) embedded Rust DB* and ORM*" diff --git a/src/database.rs b/src/database.rs index a5d68a1..f7172ec 100644 --- a/src/database.rs +++ b/src/database.rs @@ -217,7 +217,11 @@ impl Database { } pub fn import_db(&self, json: JsonValue) -> Result<()> { + for tree in self.db.tree_names() { + self.db.open_tree(tree)?.clear()?; + } self.db.clear()?; + self.db.flush()?; for model in json["global"].members() { let id_bytes = model["id"].as_u64().unwrap().to_be_bytes(); self.db.insert(id_bytes, model.to_string().as_bytes())?; @@ -245,6 +249,7 @@ mod tests { use crate::model::JdbModel; use crate::test::{cleanup, User, DB, LOCK}; use std::time::Instant; + use json::JsonValue; #[test] fn test_insert() { @@ -371,4 +376,26 @@ mod tests { cleanup(); } + + #[test] + fn test_import_clear() { + let _lock = LOCK.lock().unwrap(); + cleanup(); + + let mut users = vec![]; + for i in 0..10 { + let user = User::new(&format!("User{}", i), 0); + + let u = DB.insert::(user).unwrap(); + + users.push(u); + } + + DB.import_db(JsonValue::Null).unwrap(); + + let count = DB.filter(|_, _user: &User| true).unwrap().count(); + assert_eq!(count, 0); + + cleanup(); + } }