Changeset: ba5c972bdd99 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba5c972bdd99
Added Files:
        tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.c
        tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.h
        
tools/embedded/java-package/org_monetdb_embedded_result_EmbeddedQueryResult.h
        tools/embedded/java-package/other.c
        tools/embedded/java-package/pom.xml
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/MonetDBEmbedded.java
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/result/QueryResult.java
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/result/Result.java
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/result/column/Column.java
        
tools/embedded/java-package/src/main/java/org/monetdb/embedded/result/column/IntegerColumn.java
        tools/embedded/java-package/target/apidocs/allclasses-frame.html
        tools/embedded/java-package/target/apidocs/allclasses-noframe.html
        tools/embedded/java-package/target/apidocs/constant-values.html
        tools/embedded/java-package/target/apidocs/deprecated-list.html
        tools/embedded/java-package/target/apidocs/help-doc.html
        tools/embedded/java-package/target/apidocs/index-all.html
        tools/embedded/java-package/target/apidocs/index.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/MonetDBEmbedded.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/class-use/MonetDBEmbedded.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/package-frame.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/package-summary.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/package-tree.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/package-use.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/EmbeddedQueryResult.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/QueryResult.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/Result.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/class-use/EmbeddedQueryResult.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/class-use/QueryResult.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/class-use/Result.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/Column.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/IntegerColumn.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/class-use/Column.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/class-use/IntegerColumn.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/package-frame.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/package-summary.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/package-tree.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/column/package-use.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/package-frame.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/package-summary.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/package-tree.html
        
tools/embedded/java-package/target/apidocs/org/monetdb/embedded/result/package-use.html
        tools/embedded/java-package/target/apidocs/overview-frame.html
        tools/embedded/java-package/target/apidocs/overview-summary.html
        tools/embedded/java-package/target/apidocs/overview-tree.html
        tools/embedded/java-package/target/apidocs/package-list
        tools/embedded/java-package/target/apidocs/script.js
        tools/embedded/java-package/target/apidocs/stylesheet.css
        tools/embedded/java-package/target/classes/META-INF/MANIFEST.MF
        
tools/embedded/java-package/target/classes/META-INF/maven/org.monetdb/monetdb-embedded/pom.xml
        
tools/embedded/java-package/target/classes/org_monetdb_embedded_MonetDBEmbedded.h
        
tools/embedded/java-package/target/classes/org_monetdb_embedded_result_EmbeddedQueryResult.h
        
tools/embedded/java-package/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml
        tools/embedded/java-package/target/javadoc-bundle-options/package-list
        
tools/embedded/java-package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
        
tools/embedded/java-package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
Branch: embedded-java
Log Message:

Very initial work on embedded MonetDB in Java (WIP)!
This will not build it all. Just need keep some ideas around.


diffs (truncated from 7826 to 300 lines):

diff --git a/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.c 
b/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.c
new file mode 100644
--- /dev/null
+++ b/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.c
@@ -0,0 +1,130 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2008-2015 MonetDB B.V.
+ */
+
+#include "org_monetdb_embedded_MonetDBEmbedded.h"
+#include "embedded.h"
+#include "gdk.h"
+
+JNIEXPORT jint JNICALL Java_org_monetdb_embedded_MonetDBLite_startupWrapper
+(JNIEnv *env, jobject object, jstring directory, jboolean silent) {
+       const char *dir = (*env)->GetStringUTFChars(env, directory, 0);
+       unsigned char silent_char = 'n';
+
+       // Release the directory string
+       (*env)->ReleaseStringUTFChars(env, directory, dir);
+       // Set the silent flag based on passed boolean value
+       if (silent) {
+               silent_char = 'y';
+       }
+       return monetdb_startup(dir, silent_char);
+}
+
+/*
+ * Class:     org_monetdb_embedded_MonetDBEmbedded
+ * Method:    query
+ * Signature: 
(Ljava/lang/String;)Lorg/monetdb/embedded/result/EmbeddedQueryResult;
+ */
+JNIEXPORT jobject JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_query
+(JNIEnv *env, jobject object, jstring query) {
+       res_table* output = NULL;
+       const char *query_string = (*env)->GetStringUTFChars(env, query, 0);
+
+       jobject *result;
+       jclass resultClass = (*env)->FindClass(env, 
"org/monetdb/embedded/result/EmbeddedQueryResult");
+       // from Java EmbeddedQueryResult(String[] columnNames, String[] 
columnTypes, int numberOfColumns, long resultPointer)
+       jmethodID resultConstructor = (*env)->GetMethodID(env, resultClass, 
"<init>", "([Ljava/lang/String;[Ljava/lang/String;IJ)V");
+       // column names and types string arrays
+       jobjectArray columnNames, columnTypes = NULL;
+
+       // In case we can't find the result object class
+       if (resultClass == NULL) {
+               return NULL;
+       }
+
+       char* err = monetdb_query(query_string, (void**)&output);
+       // Release the query string
+       (*env)->ReleaseStringUTFChars(env, query, query_string);
+
+       // Checking for errors
+       if (err != NULL) {
+               jclass exClass = (*env)->FindClass(env, 
"java/sql/SQLException");
+
+               // Clean up the result data
+               monetdb_cleanup_result(output);
+               if (exClass == NULL) {
+                       // Cloud not find the exception class, just return 
empty object
+                       return NULL;
+               }
+               return (*env)->ThrowNew(env, exClass, err);
+       }
+
+       // Collect result column names and types in string arrays
+       // If we have not output, we will return them empty
+       columnNames = (jobjectArray)env->NewObjectArray(output->nr_cols, 
env->FindClass("java/lang/String"), env->NewStringUTF(""));
+       columnTypes = (jobjectArray)env->NewObjectArray(output->nr_cols, 
env->FindClass("java/lang/String"), env->NewStringUTF(""));
+       if (output && output->nr_cols > 0) {
+               int i;
+               for (i = 0; i < output->nr_cols; i++) {
+                       res_col col = output->cols[i];
+                       BAT* b = BATdescriptor(col.b);
+                       char *type;
+
+                       switch (ATOMstorage(getColumnType(b->T->type))) {
+                       case TYPE_sht:
+                               type = "short";
+                               break;
+                       case TYPE_int:
+                               type = "integer";
+                               break;
+                       case TYPE_lng:
+                               type = "long";
+                               break;
+                       case TYPE_flt:
+                               type = "float";
+                               break;
+                       case TYPE_dbl:
+                               type = "double";
+                               break;
+                       case TYPE_str:
+                               type = "string";
+                               break;
+#ifdef HAVE_HGE
+                       case TYPE_hge:
+                               type_string = "huge";
+                               break;
+#endif
+                       default:
+                               type_string = "unknown";
+                       }
+                       // Set the meta fields in the result object
+                       env->SetObjectArrayElement(columnNames, i, 
env->NewStringUTF(env, col.name));
+                       env->SetObjectArrayElement(columnTypes, i, 
env->NewStringUTF(env, type));
+               }
+       }
+       // Also keep a long value with the result pointer in the Java result 
object
+       long resultTablePointer = (long)output;
+       // Create the result object
+       // from Java EmbeddedQueryResult(String[] columnNames, String[] 
columnTypes, int numberOfColumns, long resultPointer)
+       result = (*env)->NewObject(env, resultClass, resultConstructor, 
columnNames, columnTypes, output->nr_cols, resultTablePointer);
+
+       return result;
+}
+
+/*
+ * Class:     org_monetdb_embedded_MonetDBLite
+ * Method:    append
+ * Signature: 
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/reflect/Array;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_monetdb_embedded_MonetDBLite_append
+(JNIEnv *env, jobject object, jstring schema_name, jstring table_name, jobject 
data) {
+       const char *schema_name = (*env)->GetStringUTFChars(env, schema, 0);
+       const char *table_name = (*env)->GetStringUTFChars(env, table, 0);
+
+       (*env)->ReleaseStringUTFChars(env, string, str);
+       return (*env)->NewStringUTF(env, strupr(cap));
+}
diff --git a/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.h 
b/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.h
new file mode 100644
--- /dev/null
+++ b/tools/embedded/java-package/org_monetdb_embedded_MonetDBEmbedded.h
@@ -0,0 +1,37 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_monetdb_embedded_MonetDBEmbedded */
+
+#ifndef _Included_org_monetdb_embedded_MonetDBEmbedded
+#define _Included_org_monetdb_embedded_MonetDBEmbedded
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_monetdb_embedded_MonetDBEmbedded
+ * Method:    startupNative
+ * Signature: (Ljava/lang/String;Z)I
+ */
+JNIEXPORT jint JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_startupNative
+  (JNIEnv *, jobject, jstring, jboolean);
+
+/*
+ * Class:     org_monetdb_embedded_MonetDBEmbedded
+ * Method:    query
+ * Signature: 
(Ljava/lang/String;)Lorg/monetdb/embedded/result/EmbeddedQueryResult;
+ */
+JNIEXPORT jobject JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_query
+  (JNIEnv *, jobject, jstring);
+
+/*
+ * Class:     org_monetdb_embedded_MonetDBEmbedded
+ * Method:    append
+ * Signature: 
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/reflect/Array;)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_append
+  (JNIEnv *, jobject, jstring, jstring, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git 
a/tools/embedded/java-package/org_monetdb_embedded_result_EmbeddedQueryResult.h 
b/tools/embedded/java-package/org_monetdb_embedded_result_EmbeddedQueryResult.h
new file mode 100644
--- /dev/null
+++ 
b/tools/embedded/java-package/org_monetdb_embedded_result_EmbeddedQueryResult.h
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_monetdb_embedded_result_EmbeddedQueryResult */
+
+#ifndef _Included_org_monetdb_embedded_result_EmbeddedQueryResult
+#define _Included_org_monetdb_embedded_result_EmbeddedQueryResult
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_monetdb_embedded_result_EmbeddedQueryResult
+ * Method:    getColumnWrapper
+ * Signature: (JI)Lorg/monetdb/embedded/result/column/Column;
+ */
+JNIEXPORT jobject JNICALL 
Java_org_monetdb_embedded_result_EmbeddedQueryResult_getColumnWrapper
+  (JNIEnv *, jobject, jlong, jint);
+
+/*
+ * Class:     org_monetdb_embedded_result_EmbeddedQueryResult
+ * Method:    cleanupResult
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL 
Java_org_monetdb_embedded_result_EmbeddedQueryResult_cleanupResult
+  (JNIEnv *, jobject, jlong);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/tools/embedded/java-package/other.c 
b/tools/embedded/java-package/other.c
new file mode 100644
--- /dev/null
+++ b/tools/embedded/java-package/other.c
@@ -0,0 +1,135 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2008-2015 MonetDB B.V.
+ */
+
+#include "org_monetdb_embedded_MonetDBEmbedded.h"
+#include "embedded.h"
+#include "gdk.h"
+
+/*
+ * Class:     org_monetdb_embedded_MonetDBEmbedded
+ * Method:    query
+ * Signature: 
(Ljava/lang/String;)Lorg/monetdb/embedded/result/EmbeddedQueryResult;
+ */
+JNIEXPORT jobject JNICALL Java_org_monetdb_embedded_MonetDBEmbedded_query
+(JNIEnv *, jobject, jstring) {
+       const char *query_string = (*env)->GetStringUTFChars(env, query, 0);
+       res_table* output = NULL;
+       jobjectArray *result;
+       jclass resultClass = (*env)->FindClass(env, 
"org/monetdb/embedded/Result");
+
+       // In case we cant find the result object class
+       if (resultClass == NULL) {
+               return NULL;
+       }
+
+       char* err = monetdb_query(query_string, (void**)&output);
+       // Release the query string
+       (*env)->ReleaseStringUTFChars(env, query, query_string);
+
+       if (err != NULL) {
+               jclass exClass = (*env)->FindClass(env, 
"java/sql/SQLException");
+
+               // Clean up the result data
+               monetdb_cleanup_result(output);
+               if (exClass == NULL) {
+                       // Cloud not find the exception class, just return 
empty object
+                       return NULL;
+               }
+               return (*env)->ThrowNew(env, exClass, err);
+       }
+
+       // Create the result object
+       result = (*env)->NewObjectArray(env, output->nr_cols, resultClass, 
NULL);
+       if (output && output->nr_cols > 0) {
+               int i;
+               for (i = 0; i < output->nr_cols; i++) {
+                       res_col col = output->cols[i];
+                       BAT* b = BATdescriptor(col.b);
+                       char *type_string;
+                       int size = BATcount(b);
+                       int j = 0;
+                       jobject *array;
+                       jclass arrayClass = (*env)->FindClass(env, 
"java/lang/reflect/Array");
+
+                       // Set the Java array, depending on its type
+                       varvalue = bat_to_sexp(b);
+                       if (varvalue == NULL) {
+                               switch (ATOMstorage(getColumnType(b->T->type))) 
{
+                               case TYPE_int:
+                                       type_string = "integer";
+                                       jintArray array  = 
(*env)->NewIntArray(env, size);
+                                       for (j = 0; j < size; i++) {
+                                               b->
+                                       }
+                                       // move from the temp structure to the 
java structure
+                                       (*env)->SetIntArrayRegion(env, result, 
0, size, fill);
+                                       break;
+                               case TYPE_lng:
+                                       break;
+                               default:
+                               }
+                               // Set the meta fields in the result object
+                               jstring name = 
(jstring)(*env)->NewStringUTF(env, col.name);
+                               jstring type = 
(jstring)(*env)->NewStringUTF(env, type_string);
+
+                               // Construct a single result object
+                               jmethodID resultConstructor = 
(*env)->GetMethodID(env, resultClass, "<init>", 
"([L;LJAVA/LANG/STRING;LJAVA/LANG/STRING)V");
+                               jobject resultObject = (*env)->NewObject(env, 
resultClass, resultConstructor, array, name, type);
+
+                               // Add the result object to the result array
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to