From 7f599b79c14ada7c6c83fea01af600b848a56afc Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Thu, 14 Apr 2022 20:19:45 +0800 Subject: [PATCH] change C++ header file location --- cozo-rocks/build.rs | 4 ++-- cozo-rocks/{include => src}/cozorocks.h | 0 cozo-rocks/src/lib.rs | 16 ++++++++-------- src/storage.rs | 10 +++++++--- 4 files changed, 17 insertions(+), 13 deletions(-) rename cozo-rocks/{include => src}/cozorocks.h (100%) diff --git a/cozo-rocks/build.rs b/cozo-rocks/build.rs index ef1c55d9..d8dc8b1a 100644 --- a/cozo-rocks/build.rs +++ b/cozo-rocks/build.rs @@ -2,7 +2,7 @@ fn main() { cxx_build::bridge("src/lib.rs") .file("src/cozorocks.cc") .include("../rocksdb/include") - .include("include") + .include("src") .flag_if_supported("-std=c++17") .compile("cozo-rocks"); @@ -12,5 +12,5 @@ fn main() { println!("cargo:rustc-link-lib=bz2"); println!("cargo:rerun-if-changed=src/main.rs"); println!("cargo:rerun-if-changed=src/cozorocks.cc"); - println!("cargo:rerun-if-changed=include/cozorocks.h"); + println!("cargo:rerun-if-changed=src/cozorocks.h"); } \ No newline at end of file diff --git a/cozo-rocks/include/cozorocks.h b/cozo-rocks/src/cozorocks.h similarity index 100% rename from cozo-rocks/include/cozorocks.h rename to cozo-rocks/src/cozorocks.h diff --git a/cozo-rocks/src/lib.rs b/cozo-rocks/src/lib.rs index 79293a93..0ddcee2c 100644 --- a/cozo-rocks/src/lib.rs +++ b/cozo-rocks/src/lib.rs @@ -59,7 +59,7 @@ mod ffi { } unsafe extern "C++" { - include!("cozo-rocks/include/cozorocks.h"); + include!("cozorocks.h"); type StatusCode; type StatusSubCode; @@ -81,7 +81,7 @@ mod ffi { fn increase_parallelism(self: &OptionsBridge); fn optimize_level_style_compaction(self: &OptionsBridge); fn set_create_if_missing(self: &OptionsBridge, v: bool); - fn set_comparator(self: &OptionsBridge, name: &str, compare: fn(&[u8], &[u8]) -> i8); + fn set_comparator(self: &OptionsBridge, name: &str, compare: fn(&[u8], &[u8]) -> i8); type DBBridge; fn open_db(options: &OptionsBridge, path: &[u8]) -> UniquePtr; @@ -195,7 +195,7 @@ impl DB { ), default_read_options: ReadOptions::default(), default_write_options: WriteOptions::default(), - options + options, } } #[cfg(not(unix))] @@ -222,15 +222,15 @@ impl DB { } #[inline] - pub fn get(&self, key: impl AsRef<[u8]>, options: Option<&ReadOptions>) -> Result { + pub fn get(&self, key: impl AsRef<[u8]>, options: Option<&ReadOptions>) -> Result, Status> { let mut status = Status::default(); let slice = self.bridge.get( &options.unwrap_or(&self.default_read_options).bridge, key.as_ref(), &mut status); - if status.code == StatusCode::kOk { - Ok(PinnableSlice { bridge: slice }) - } else { - Err(status) + match status.code { + StatusCode::kOk => Ok(Some(PinnableSlice { bridge: slice })), + StatusCode::kNotFound => Ok(None), + _ => Err(status) } } } diff --git a/src/storage.rs b/src/storage.rs index 6eebaf4d..e346b277 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -94,16 +94,20 @@ mod tests { builder.build_value(&Value::RefString("Another key")); let key2 = builder.get(); + let val = db.get(&key, None).unwrap(); + // let val = val.as_bytes(); + println!("before anything {}", val.is_none()); + db.put(&key, "A motherfucking value!!! 👋👋👋", None).unwrap(); db.put(&key2, "Another motherfucking value!!! 👋👋👋", None).unwrap(); // db.put("Yes man", "A motherfucking value!!! 👋👋👋", None).unwrap(); - let val = db.get(&key, None).unwrap(); + let val = db.get(&key, None).unwrap().unwrap(); let val = val.as_bytes(); println!("{}", from_utf8(val).unwrap()); - let val = db.get(&key2, None).unwrap(); + let val = db.get(&key2, None).unwrap().unwrap(); let val = val.as_bytes(); println!("{}", from_utf8(val).unwrap()); - let val = db.get(&key, None).unwrap(); + let val = db.get(&key, None).unwrap().unwrap(); let val = val.as_bytes(); println!("{}", from_utf8(val).unwrap()); }