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

Reply via email to