Changeset: 6b2b8b1a4f87 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b2b8b1a4f87 Added Files: java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java Modified Files: java/embedded/org_monetdb_embedded_MonetDBEmbedded.c java/embedded/pom.xml java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java Branch: embedded-java Log Message:
Set the number of rows in the result set as well While there create a dummy MonetResultSet object. diffs (130 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 @@ -69,6 +69,7 @@ JNIEXPORT jobject JNICALL Java_org_monet (void)object; res_table *output = NULL; int numberOfColumns = 0; + int numberOfRows = 0; const char *query_string_tmp = (*env)->GetStringUTFChars(env, query, 0); char *query_string = strdup(query_string_tmp); // Release the query string @@ -76,8 +77,8 @@ JNIEXPORT jobject JNICALL Java_org_monet 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"); + // from Java EmbeddedQueryResult(String[] columnNames, String[] columnTypes, int numberOfColumns, int numberOfRows, long resultPointer) + jmethodID resultConstructor = (*env)->GetMethodID(env, resultClass, "<init>", "([Ljava/lang/String;[Ljava/lang/String;IIJ)V"); // column names and types string arrays jobjectArray columnNames, columnTypes = NULL; jclass stringClass = (*env)->FindClass(env, "java/lang/String"); @@ -120,7 +121,9 @@ JNIEXPORT jobject JNICALL Java_org_monet BAT* b = BATdescriptor(col.b); char *type; - switch (ATOMstorage(getColumnType(b->T->type))) { + numberOfRows = BATcount(b); + + switch (getColumnType(b->T->type)) { case TYPE_bit: type = "boolean"; break; @@ -161,8 +164,8 @@ JNIEXPORT jobject JNICALL Java_org_monet // 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, numberOfColumns, resultTablePointer); + // from Java EmbeddedQueryResult(String[] columnNames, String[] columnTypes, int numberOfColumns, int numberOfRows, long resultPointer) + result = (*env)->NewObject(env, resultClass, resultConstructor, columnNames, columnTypes, numberOfColumns, numberOfRows, resultTablePointer); return result; } diff --git a/java/embedded/pom.xml b/java/embedded/pom.xml --- a/java/embedded/pom.xml +++ b/java/embedded/pom.xml @@ -36,6 +36,11 @@ MonetDB is an analytical database design <dependencies> <dependency> + <groupId>monetdb</groupId> + <artifactId>monetdb-jdbc</artifactId> + <version>2.13</version> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> diff --git a/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java b/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java new file mode 100644 --- /dev/null +++ b/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java @@ -0,0 +1,19 @@ +/* + * 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. + */ + +package nl.cwi.monetdb.jdbc; + +/** + * This class serves only to expose the {@link nl.cwi.monetdb.jdbc.MonetResultSet} constructor + * outside the {@code nl.cwi.monetdb.jdbc}. + */ +public class MonetDBResultSet extends MonetResultSet { + public MonetDBResultSet(String[] columnNames, String[] columnTypes, int numberOfRows) { + super(columnNames, columnTypes, numberOfRows); + } +} diff --git a/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java b/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java --- a/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java +++ b/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java @@ -14,6 +14,9 @@ import java.util.Iterator; import org.monetdb.embedded.result.column.Column; +import nl.cwi.monetdb.jdbc.MonetDBResultSet; +import nl.cwi.monetdb.jdbc.MonetResultSet; + /** * Embedded MonetDB query result. * The query result columns are not eagerly copied from the native code to Java. @@ -35,16 +38,21 @@ public class EmbeddedQueryResult impleme */ private int numberOfColumns; /** + * The number of rows in the query result. + */ + private int numberOfRows; + /** * Pointer to the native result set. * We need to keep it around for getting columns. * The native result set is kept until the {@link close()} is called. */ private long resultPointer; - public EmbeddedQueryResult(String[] columnNames, String[] columnTypes, int numberOfColumns, long resultPointer) { + public EmbeddedQueryResult(String[] columnNames, String[] columnTypes, int numberOfColumns, int numberOfRows, long resultPointer) { this.columnNames = columnNames; this.columnTypes = columnTypes; this.numberOfColumns = numberOfColumns; + this.numberOfRows = numberOfRows; this.resultPointer = resultPointer; } @@ -96,6 +104,10 @@ public class EmbeddedQueryResult impleme */ private native Column<?> getColumnWrapper(long resultPointerWrapper, int index); + public MonetResultSet getJDBCResultSet() { + return new MonetDBResultSet(columnNames, columnTypes, numberOfRows); + } + @Override public Iterator<Column<?>> iterator() { return new Iterator<Column<?>>() { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list