Changeset: cb8b14725dc8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cb8b14725dc8 Modified Files: java/embedded/org_monetdb_embedded_MonetDBEmbedded.c java/embedded/org_monetdb_embedded_MonetDBEmbedded.h java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java Branch: embedded-java Log Message:
Throw an expection on db startup failure - Modify method signatures since statupWrapper now returns a boolean diffs (137 lines): diff --git a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c --- a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c +++ b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c @@ -13,13 +13,13 @@ #include "res_table.h" #include "mal_type.h" -JNIEXPORT jstring JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper +JNIEXPORT jboolean JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper (JNIEnv *env, jobject object, jstring directory, jboolean silent) { (void)object; const char *directory_string_tmp = (*env)->GetStringUTFChars(env, directory, 0); char *directory_string = strdup(directory_string_tmp); unsigned char silent_char = 'n'; - jstring result; + char *err; // Release the directory string (*env)->ReleaseStringUTFChars(env, directory, directory_string_tmp); @@ -28,8 +28,21 @@ JNIEXPORT jstring JNICALL Java_org_monet silent_char = 'y'; } - result = (*env)->NewStringUTF(env, monetdb_startup(directory_string, silent_char)); - return result; + err = monetdb_startup(directory_string, silent_char); + // Checking for errors + if (err != NULL) { + jclass exClass = (*env)->FindClass(env, "java/io/IOException"); + + // Clean up the result data + if (exClass == NULL) { + // Cloud not find the exception class, just return empty object + return false; + } + (*env)->ThrowNew(env, exClass, err); + return false; + } + + return true; } JNIEXPORT jobject JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_queryWrapper @@ -64,7 +77,7 @@ JNIEXPORT jobject JNICALL Java_org_monet // Clean up the result data // TODO: creates a segfault, fix later -// monetdb_cleanup_result(output); + // monetdb_cleanup_result(output); if (exClass == NULL) { // Cloud not find the exception class, just return empty object return NULL; diff --git a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h --- a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h +++ b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.h @@ -12,7 +12,7 @@ extern "C" { * Method: startupNative * Signature: (Ljava/lang/String;Z)I */ -JNIEXPORT jstring JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper +JNIEXPORT jboolean JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_startupWrapper (JNIEnv *, jobject, jstring, jboolean); /* diff --git a/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java b/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java --- a/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java +++ b/java/embedded/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java @@ -9,6 +9,7 @@ package org.monetdb.embedded; import java.io.File; +import java.io.IOException; import java.lang.reflect.Array; import java.sql.SQLException; @@ -20,10 +21,6 @@ import org.monetdb.embedded.result.Embed * */ public class MonetDBEmbedded { - static { - System.loadLibrary("embedded_java"); - } - /** * Flag if the embedded database was already started. */ @@ -40,6 +37,7 @@ public class MonetDBEmbedded { * @param directory Database directory */ public MonetDBEmbedded(File directory) { + System.loadLibrary("embedded_java"); if (!directory.isDirectory()) { throw new IllegalArgumentException(directory + " is not a directory"); } @@ -61,10 +59,11 @@ public class MonetDBEmbedded { * * @param silent Silent flag to logging messages * @return {@code True} if the was started successfully or is already running, otherwise {@code False}. + * @throws IOException */ - public boolean startup(boolean silent) { + public boolean startup(boolean silent) throws IOException { if (!running) { - if (startupWrapper(directory.getAbsolutePath(), silent) == null){ + if (startupWrapper(directory.getAbsolutePath(), silent)){ running = true; } } @@ -97,8 +96,15 @@ public class MonetDBEmbedded { * @param silent Silent flag * @return Startup status code */ - private native String startupWrapper(String dir, boolean silent); + private native boolean startupWrapper(String dir, boolean silent) throws IOException; + /** + * Execute an SQL query in an embedded database. + * + * @param query The SQL query string + * @return The query result object, {@code null} if the database is not running + * @throws SQLException + */ private native EmbeddedQueryResult queryWrapper(String query) throws SQLException; private native String appendWrapper(String schema, String table, Array data) throws SQLException; diff --git a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java --- a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java +++ b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java @@ -76,7 +76,7 @@ public class EmbeddedTest { @Test public void newDatabaseTest() throws IOException, SQLException { - final Path tempDirectoryPath = Files.createTempDirectory("new_monetdbtest_new"); + final Path tempDirectoryPath = Files.createTempDirectory("monetdbtest_new"); final File newDirectory = tempDirectoryPath.toFile(); MonetDBEmbedded newDB = new MonetDBEmbedded(newDirectory); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list