diff --git a/bindings/java/rs_src/limbo_connection.rs b/bindings/java/rs_src/limbo_connection.rs index 3d9cb2ab0..048a798a6 100644 --- a/bindings/java/rs_src/limbo_connection.rs +++ b/bindings/java/rs_src/limbo_connection.rs @@ -3,7 +3,7 @@ use crate::errors::{ LIMBO_FAILED_TO_PREPARE_STATEMENT, }; use crate::limbo_statement::CoreStatement; -use crate::utils::utf8_byte_arr_to_str; +use crate::utils::{set_err_msg_and_throw_exception, utf8_byte_arr_to_str}; use jni::objects::{JByteArray, JClass, JObject}; use jni::sys::jlong; use jni::JNIEnv; @@ -90,46 +90,3 @@ pub extern "system" fn Java_org_github_tursodatabase_core_LimboConnection_prepar } } } - -/// Closes the connection and releases the associated resources. -/// -/// This function is called from the Java side to close the connection -/// and free the memory allocated for the `Connection` object. -/// -/// # Arguments -/// -/// * `_env` - The JNI environment pointer. -/// * `_class` - The Java class calling this function. -/// * `connection_ptr` - A pointer to the `Connection` object to be closed. -#[no_mangle] -pub unsafe extern "system" fn Java_org_github_tursodatabase_limbo_Connection_close<'local>( - _env: JNIEnv<'local>, - _class: JClass<'local>, - connection_ptr: jlong, -) { - LimboConnection::drop(connection_ptr); -} - -fn set_err_msg_and_throw_exception<'local>( - env: &mut JNIEnv<'local>, - obj: JObject<'local>, - err_code: i32, - err_msg: String, -) { - let error_message_bytes = env - .byte_array_from_slice(err_msg.as_bytes()) - .expect("Failed to convert to byte array"); - match env.call_method( - obj, - "throwLimboException", - "(I[B)V", - &[err_code.into(), (&error_message_bytes).into()], - ) { - Ok(_) => { - // do nothing because above method will always return Err - } - Err(_e) => { - // do nothing because our java app will handle Err - } - } -} diff --git a/bindings/java/rs_src/limbo_db.rs b/bindings/java/rs_src/limbo_db.rs index 7f2bd71c6..02765c242 100644 --- a/bindings/java/rs_src/limbo_db.rs +++ b/bindings/java/rs_src/limbo_db.rs @@ -6,6 +6,7 @@ use jni::JNIEnv; use limbo_core::Database; use std::rc::Rc; use std::sync::Arc; +use crate::utils::set_err_msg_and_throw_exception; struct LimboDB { db: Arc, @@ -147,42 +148,3 @@ pub extern "system" fn Java_org_github_tursodatabase_core_LimboDB_throwJavaExcep "throw java exception".to_string(), ); } - -/// Sets the error message and throws a Java exception. -/// -/// This function converts the provided error message to a byte array and calls the -/// `throwLimboException` method on the provided Java object to throw an exception. -/// -/// # Parameters -/// - `env`: The JNI environment. -/// - `obj`: The Java object on which the exception will be thrown. -/// - `err_code`: The error code corresponding to the exception. Refer to `org.github.tursodatabase.core.Codes` for the list of error codes. -/// - `err_msg`: The error message to be included in the exception. -/// -/// # Example -/// ```rust -/// set_err_msg_and_throw_exception(env, obj, Codes::SQLITE_ERROR, "An error occurred".to_string()); -/// ``` -fn set_err_msg_and_throw_exception<'local>( - env: &mut JNIEnv<'local>, - obj: JObject<'local>, - err_code: i32, - err_msg: String, -) { - let error_message_bytes = env - .byte_array_from_slice(err_msg.as_bytes()) - .expect("Failed to convert to byte array"); - match env.call_method( - obj, - "throwLimboException", - "(I[B)V", - &[err_code.into(), (&error_message_bytes).into()], - ) { - Ok(_) => { - // do nothing because above method will always return Err - } - Err(_e) => { - // do nothing because our java app will handle Err - } - } -} diff --git a/bindings/java/rs_src/utils.rs b/bindings/java/rs_src/utils.rs index 222cbd7b1..79c597b39 100644 --- a/bindings/java/rs_src/utils.rs +++ b/bindings/java/rs_src/utils.rs @@ -1,5 +1,5 @@ use crate::errors::LimboError; -use jni::objects::JByteArray; +use jni::objects::{JByteArray, JObject}; use jni::JNIEnv; pub(crate) fn utf8_byte_arr_to_str( @@ -14,3 +14,42 @@ pub(crate) fn utf8_byte_arr_to_str( })?; Ok(str) } + +/// Sets the error message and throws a Java exception. +/// +/// This function converts the provided error message to a byte array and calls the +/// `throwLimboException` method on the provided Java object to throw an exception. +/// +/// # Parameters +/// - `env`: The JNI environment. +/// - `obj`: The Java object on which the exception will be thrown. +/// - `err_code`: The error code corresponding to the exception. Refer to `org.github.tursodatabase.core.Codes` for the list of error codes. +/// - `err_msg`: The error message to be included in the exception. +/// +/// # Example +/// ```rust +/// set_err_msg_and_throw_exception(env, obj, Codes::SQLITE_ERROR, "An error occurred".to_string()); +/// ``` +pub fn set_err_msg_and_throw_exception<'local>( + env: &mut JNIEnv<'local>, + obj: JObject<'local>, + err_code: i32, + err_msg: String, +) { + let error_message_bytes = env + .byte_array_from_slice(err_msg.as_bytes()) + .expect("Failed to convert to byte array"); + match env.call_method( + obj, + "throwLimboException", + "(I[B)V", + &[err_code.into(), (&error_message_bytes).into()], + ) { + Ok(_) => { + // do nothing because above method will always return Err + } + Err(_e) => { + // do nothing because our java app will handle Err + } + } +}