mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-11 19:24:21 +01:00
Remove newSQLException and add throwLimboException in the LimboDB.java
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user