From 3e26e7ebc5d941127bfb8d047d591b20be9e6b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Fri, 10 Jan 2025 14:58:35 +0900 Subject: [PATCH] Remove newSQLException and add throwLimboException in the LimboDB.java --- bindings/java/rs_src/limbo_db.rs | 23 +++-------- .../github/tursodatabase/core/AbstractDB.java | 31 --------------- .../github/tursodatabase/core/LimboDB.java | 38 +++++++++++++++---- 3 files changed, 37 insertions(+), 55 deletions(-) diff --git a/bindings/java/rs_src/limbo_db.rs b/bindings/java/rs_src/limbo_db.rs index 4357b7a8a..b6b4bf848 100644 --- a/bindings/java/rs_src/limbo_db.rs +++ b/bindings/java/rs_src/limbo_db.rs @@ -56,12 +56,14 @@ fn set_err_msg_and_throw_exception<'local>( err_code: i32, err_msg: String, ) { - let error_message_pointer = Box::into_raw(Box::new(err_msg)) as i64; + 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, - "newSQLException", - "(IJ)Lorg/github/tursodatabase/exceptions/LimboException;", - &[err_code.into(), error_message_pointer.into()], + "throwLimboException", + "(I[B)V", + &[err_code.into(), (&error_message_bytes).into()], ) { Ok(_) => { // do nothing because above method will always return Err @@ -71,16 +73,3 @@ fn set_err_msg_and_throw_exception<'local>( } } } - -#[no_mangle] -pub unsafe extern "system" fn Java_org_github_tursodatabase_core_LimboDB_getErrorMessageUtf8< - 'local, ->( - env: JNIEnv<'local>, - _obj: JObject<'local>, - error_message_ptr: jlong, -) -> JByteArray<'local> { - let error_message = Box::from_raw(error_message_ptr as *mut String); - let error_message_bytes = error_message.as_bytes(); - env.byte_array_from_slice(error_message_bytes).unwrap() -} diff --git a/bindings/java/src/main/java/org/github/tursodatabase/core/AbstractDB.java b/bindings/java/src/main/java/org/github/tursodatabase/core/AbstractDB.java index adea4cb20..62bd86de3 100644 --- a/bindings/java/src/main/java/org/github/tursodatabase/core/AbstractDB.java +++ b/bindings/java/src/main/java/org/github/tursodatabase/core/AbstractDB.java @@ -172,35 +172,4 @@ public abstract class AbstractDB { // TODO: add implementation throw new SQLFeatureNotSupportedException(); } - - /** - * Throws SQL Exception with error code. - * - * @param errorCode Error code to be passed. - * @throws SQLException Formatted SQLException with error code - */ - @NativeInvocation - private LimboException newSQLException(int errorCode, long errorMessagePointer) throws SQLException { - throw newSQLException(errorCode, getErrorMessage(errorMessagePointer)); - } - - /** - * Throws formatted SQLException with error code and message. - * - * @param errorCode Error code to be passed. - * @param errorMessage throw newSQLException(errorCode);Error message to be passed. - * @return Formatted SQLException with error code and message. - */ - public static LimboException newSQLException(int errorCode, String errorMessage) { - LimboErrorCode code = LimboErrorCode.getErrorCode(errorCode); - String msg; - if (code == LimboErrorCode.UNKNOWN_ERROR) { - msg = String.format("%s:%s (%s)", code, errorCode, errorMessage); - } else { - msg = String.format("%s (%s)", code, errorMessage); - } - return new LimboException(msg, code); - } - - protected abstract String getErrorMessage(long errorMessagePointer); } diff --git a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboDB.java b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboDB.java index 2ed082ce6..2b6c387cb 100644 --- a/bindings/java/src/main/java/org/github/tursodatabase/core/LimboDB.java +++ b/bindings/java/src/main/java/org/github/tursodatabase/core/LimboDB.java @@ -2,6 +2,8 @@ package org.github.tursodatabase.core; import org.github.tursodatabase.LimboErrorCode; +import org.github.tursodatabase.NativeInvocation; +import org.github.tursodatabase.exceptions.LimboException; import java.nio.charset.StandardCharsets; import java.sql.SQLException; @@ -30,8 +32,7 @@ public final class LimboDB extends AbstractDB { // url example: "jdbc:sqlite:{fileName} /** - * - * @param url e.g. "jdbc:sqlite:fileName + * @param url e.g. "jdbc:sqlite:fileName * @param fileName e.g. path to file */ public static LimboDB create(String url, String fileName) throws SQLException { @@ -83,7 +84,7 @@ public final class LimboDB extends AbstractDB { @Override protected void _open(String fileName, int openFlags) throws SQLException { if (isOpen) { - throw newSQLException(LimboErrorCode.UNKNOWN_ERROR.code, "Already opened"); + throwLimboException(LimboErrorCode.UNKNOWN_ERROR.code, "Already opened"); } dbPtr = _open_utf8(stringToUtf8ByteArray(fileName), openFlags); isOpen = true; @@ -103,12 +104,35 @@ public final class LimboDB extends AbstractDB { @Override public synchronized native int step(long stmt); - @Override - protected String getErrorMessage(long errorMessagePointer) { - return utf8ByteBufferToString(getErrorMessageUtf8(errorMessagePointer)); + /** + * Throws formatted SQLException with error code and message. + * + * @param errorCode Error code. + * @param errorMessageBytes Error message. + */ + @NativeInvocation + private void throwLimboException(int errorCode, byte[] errorMessageBytes) throws SQLException { + String errorMessage = utf8ByteBufferToString(errorMessageBytes); + throwLimboException(errorCode, errorMessage); } - private native byte[] getErrorMessageUtf8(long errorMessagePointer); + /** + * Throws formatted SQLException with error code and message. + * + * @param errorCode Error code. + * @param errorMessage Error message. + */ + public void throwLimboException(int errorCode, String errorMessage) throws SQLException { + LimboErrorCode code = LimboErrorCode.getErrorCode(errorCode); + String msg; + if (code == LimboErrorCode.UNKNOWN_ERROR) { + msg = String.format("%s:%s (%s)", code, errorCode, errorMessage); + } else { + msg = String.format("%s (%s)", code, errorMessage); + } + + throw new LimboException(msg, code); + } private static String utf8ByteBufferToString(byte[] buffer) { if (buffer == null) {