diff --git a/cozo-lib-java/Cargo.toml b/cozo-lib-java/Cargo.toml index 5bd35a63..62328778 100644 --- a/cozo-lib-java/Cargo.toml +++ b/cozo-lib-java/Cargo.toml @@ -12,6 +12,7 @@ description = "Java bindings for CozoDB" crate-type = ["cdylib"] [features] +storage-rocksdb = ["cozo/storage-rocksdb"] jemalloc = ["cozo/jemalloc"] io-uring = ["cozo/io-uring"] @@ -19,5 +20,6 @@ io-uring = ["cozo/io-uring"] [dependencies] robusta_jni = "0.2.0" -cozo = { version = "0.1.3", path = "../cozo-core" } +# , features = ["compact"] +cozo = { version = "0.1.3", path = "../cozo-core", default_features = false } lazy_static = "1.4.0" diff --git a/cozo-lib-java/build.sh b/cozo-lib-java/build.sh new file mode 100755 index 00000000..c90852d9 --- /dev/null +++ b/cozo-lib-java/build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +export ANDROID_HOME=/Users/$USER/Library/Android/sdk +export NDK_HOME=/Users/$USER/Library/Android/sdk/ndk/23.1.7779620/ +export PATH=$PATH:$HOME/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/bin/ +export CC=aarch64-linux-android23-clang +export CXX=aarch64-linux-android23-clang++ +export LD=$HOME/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/bin/ld +export LD_LIBRARY_PATH=/Users/zh217/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/lib/aarch64-linux-android/26 +cargo build --release -p cozo_c --target=aarch64-linux-android \ No newline at end of file diff --git a/cozo-lib-java/src/lib.rs b/cozo-lib-java/src/lib.rs index 18090058..31ce0768 100644 --- a/cozo-lib-java/src/lib.rs +++ b/cozo-lib-java/src/lib.rs @@ -11,23 +11,32 @@ use std::sync::Mutex; use lazy_static::lazy_static; use robusta_jni::bridge; +use robusta_jni::jni::errors::Error as JniError; +use robusta_jni::jni::errors::Result as JniResult; -use cozo::Db; -use cozo::RocksDbStorage; +use cozo::*; #[derive(Default)] -struct Handles { +struct Handles { current: AtomicI32, - dbs: Mutex>>, + dbs: Mutex>, } lazy_static! { - static ref HANDLES: Handles = Handles { + static ref HANDLES: Handles = Handles { current: Default::default(), dbs: Mutex::new(Default::default()) }; } +fn get_db(id: i32) -> JniResult { + let db_ref = { + let dbs = HANDLES.dbs.lock().unwrap(); + dbs.get(&id).cloned() + }; + db_ref.ok_or_else(|| JniError::from("database already closed")) +} + #[bridge] mod jni { use std::sync::atomic::Ordering; @@ -37,9 +46,9 @@ mod jni { use robusta_jni::jni::errors::Result as JniResult; use robusta_jni::jni::objects::AutoLocal; - use cozo::{new_cozo_rocksdb}; + use cozo::*; - use crate::HANDLES; + use crate::{get_db, HANDLES}; #[derive(Signature, TryIntoJavaValue, IntoJavaValue, TryFromJavaValue)] #[package(org.cozodb)] @@ -49,8 +58,8 @@ mod jni { } impl<'env: 'borrow, 'borrow> CozoDb<'env, 'borrow> { - pub extern "jni" fn openDb(path: String) -> JniResult { - match new_cozo_rocksdb(path) { + pub extern "jni" fn openDb(kind: String, path: String) -> JniResult { + match DbInstance::new(&kind, &path, Default::default()) { Ok(db) => { let id = HANDLES.current.fetch_add(1, Ordering::AcqRel); let mut dbs = HANDLES.dbs.lock().unwrap(); @@ -72,15 +81,24 @@ mod jni { script: String, params_str: String, ) -> JniResult { - let db = { - let db_ref = { - let dbs = HANDLES.dbs.lock().unwrap(); - dbs.get(&id).cloned() - }; - let db = db_ref.ok_or_else(|| JniError::from("database already closed"))?; - db - }; + let db = get_db(id)?; Ok(db.run_script_str(&script, ¶ms_str)) } + pub extern "jni" fn exportRelations(id: i32, relations_str: String) -> JniResult { + let db = get_db(id)?; + Ok(db.export_relations_str(&relations_str)) + } + pub extern "jni" fn importRelation(id: i32, data: String) -> JniResult { + let db = get_db(id)?; + Ok(db.import_relation_str(&data)) + } + pub extern "jni" fn backup(id: i32, out_file: String) -> JniResult { + let db = get_db(id)?; + Ok(db.backup_db_str(&out_file)) + } + pub extern "jni" fn restore(id: i32, in_file: String) -> JniResult { + let db = get_db(id)?; + Ok(db.restore_backup_str(&in_file)) + } } } diff --git a/cozo-lib-swift/Cargo.toml b/cozo-lib-swift/Cargo.toml index 7f1c66ce..d2ee49eb 100644 --- a/cozo-lib-swift/Cargo.toml +++ b/cozo-lib-swift/Cargo.toml @@ -10,6 +10,8 @@ crate-type = ["staticlib"] [features] storage-rocksdb = ["cozo/storage-rocksdb"] +jemalloc = ["cozo/jemalloc"] +io-uring = ["cozo/io-uring"] [build-dependencies] swift-bridge-build = "0.1.41"