From aa93ec2e30bc2edcb5ce1e6978367b3ac808c7d3 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Sun, 24 Apr 2022 23:35:21 +0800 Subject: [PATCH] delete defined --- src/db/eval.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/db/eval.rs b/src/db/eval.rs index c64b8ce3..1e53b5f2 100644 --- a/src/db/eval.rs +++ b/src/db/eval.rs @@ -104,9 +104,7 @@ impl<'a> Environment for Session<'a> { let k = Tuple::new(tk); if k.starts_with(&tuple) { println!("Resolved to key {:?}", k); - let vt = Tuple::new(vk); - // let v = vt.iter().collect::>(); - Some(vt) + Some(Tuple::new(vk)) } else { None } @@ -115,6 +113,27 @@ impl<'a> Environment for Session<'a> { } fn delete_defined(&mut self, name: &str, in_root: bool) -> Result<()> { - todo!() + let key = self.encode_definable_key(name, in_root); + if in_root { + self.txn.del(true, &self.perm_cf, key)?; + + } else { + let it = self.txn.iterator(false, &self.temp_cf); + it.seek(&key); + if let Some(found_key) = it.key() { + let found_key_tuple = Tuple::new(found_key); + if found_key_tuple.starts_with(&key) { + let mut ikey = Tuple::with_null_prefix(); + ikey.push_value(&found_key_tuple.get(1).unwrap()); + ikey.push_value(&found_key_tuple.get(0).unwrap()); + self.txn.del(false, &self.temp_cf, found_key_tuple)?; + self.txn.del(false, &self.temp_cf, ikey)?; + + } + } + } + // TODO cleanup if the thing deleted is a table + + Ok(()) } } \ No newline at end of file