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