Changeset: 18432f31d1e3 for monetdb-java URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=18432f31d1e3 Modified Files: src/main/java/nl/cwi/monetdb/embedded/AbstractColumn.java src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java src/main/java/nl/cwi/monetdb/embedded/MonetDBToJavaMapping.java src/main/java/nl/cwi/monetdb/embedded/QueryResultSet.java src/main/java/nl/cwi/monetdb/embedded/QueryResultSetColumn.java src/main/java/nl/cwi/monetdb/embedded/UpdateResultSet.java Branch: embedded Log Message:
Updated JNI calls diffs (truncated from 307 to 300 lines): diff --git a/src/main/java/nl/cwi/monetdb/embedded/AbstractColumn.java b/src/main/java/nl/cwi/monetdb/embedded/AbstractColumn.java --- a/src/main/java/nl/cwi/monetdb/embedded/AbstractColumn.java +++ b/src/main/java/nl/cwi/monetdb/embedded/AbstractColumn.java @@ -51,7 +51,7 @@ public abstract class AbstractColumn<T> this.resultSetIndex = resultSetIndex; this.numberOfRows = numberOfRows; this.columnName = columnName; - this.mapping = Enum.valueOf(MonetDBToJavaMapping.class, columnType); + this.mapping = MonetDBToJavaMapping.GetJavaMappingFromMonetDBString(columnType); this.columnDigits = columnDigits; this.columnScale = columnScale; } diff --git a/src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java b/src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java --- a/src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java +++ b/src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java @@ -22,15 +22,7 @@ public abstract class AbstractStatementR */ private final MonetDBEmbeddedConnection connection; - /** - * Pointer to the native result set. - * We need to keep it around for getting columns. - * The native result set is kept until the {@link super.close()} is called. - */ - protected long resultPointer; - - protected AbstractStatementResult(MonetDBEmbeddedConnection connection, long resultPointer) { - this.resultPointer = resultPointer; + protected AbstractStatementResult(MonetDBEmbeddedConnection connection) { this.connection = connection; } @@ -41,22 +33,8 @@ public abstract class AbstractStatementR */ public MonetDBEmbeddedConnection getConnection() { return connection; } - /** - * Tells if the connection of this statement result has been closed or not. - * - * @return A boolean indicating if the statement result has been cleaned or not - */ - public boolean isStatementClosed() { return this.resultPointer == 0; } - - /** - * Close the query data so no more new results can be retrieved. - */ @Override public void close() { - this.cleanupResult(this.resultPointer); - this.resultPointer = 0; this.connection.removeQueryResult(this); } - - private native void cleanupResult(long resultPointer); } diff --git a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java --- a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java +++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java @@ -27,7 +27,6 @@ public class MonetDBEmbeddedConnection { private final List<AbstractStatementResult> results = new ArrayList<>(); - //TODO add autocommit protected MonetDBEmbeddedConnection(MonetDBEmbeddedDatabase database, long connectionPointer) { this.database = database; this.connectionPointer = connectionPointer; @@ -96,7 +95,7 @@ public class MonetDBEmbeddedConnection { if (!query.endsWith(";")) { query += ";"; } - UpdateResultSet res = this.createEmptyResultSetInternal(this.connectionPointer, query, true); + UpdateResultSet res = this.sendUpdateInternal(this.connectionPointer, query, true); results.add(res); return res; } @@ -124,7 +123,7 @@ public class MonetDBEmbeddedConnection { if (!query.endsWith(";")) { query += ";"; } - QueryResultSet res = this.createNonEmptyResultSetInternal(this.connectionPointer, query, true); + QueryResultSet res = this.sendQueryInternal(this.connectionPointer, query, true); results.add(res); return res; } @@ -247,10 +246,10 @@ public class MonetDBEmbeddedConnection { this.results.remove(res); } - private native UpdateResultSet createEmptyResultSetInternal(long connectionPointer, String query, boolean execute) + private native UpdateResultSet sendUpdateInternal(long connectionPointer, String query, boolean execute) throws MonetDBEmbeddedException; - private native QueryResultSet createNonEmptyResultSetInternal(long connectionPointer, String query, boolean execute) + private native QueryResultSet sendQueryInternal(long connectionPointer, String query, boolean execute) throws MonetDBEmbeddedException; private native EmbeddedPreparedStatement createPreparedStatementInternal(long connectionPointer, String query) diff --git a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java --- a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java +++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java @@ -50,7 +50,7 @@ public class MonetDBEmbeddedDatabase { */ public static MonetDBEmbeddedDatabase StartDatabaseAsync(String dbDirectory, boolean silentFlag, boolean sequentialFlag) throws MonetDBEmbeddedException { - /* CompletableFuture.supplyAsync(() -> StartDatabase(dbDirectory, silentFlag, sequentialFlag); */ + /* CompletableFuture.supplyAsync(() -> StartDatabase(dbDirectory, silentFlag, sequentialFlag)); */ throw new UnsupportedOperationException("Must wait for Java 8 :("); } @@ -139,7 +139,7 @@ public class MonetDBEmbeddedDatabase { * @throws MonetDBEmbeddedException If the database is not running or an error in the database occurred */ public MonetDBEmbeddedConnection createConnection() throws MonetDBEmbeddedException { - return this.createConnectionOnSchema(null); + return this.createConnectionInternal(); } /** @@ -149,35 +149,7 @@ public class MonetDBEmbeddedDatabase { * @throws MonetDBEmbeddedException If the database is not running or an error in the database occurred */ public MonetDBEmbeddedConnection createConnectionAsync() throws MonetDBEmbeddedException { - return this.createConnectionOnSchemaAsync(null); - } - - /** - * Creates a connection on the database on the given schema. - * - * @param schema A String with the schema to be set - * @return A MonetDBEmbeddedConnection instance - * @throws MonetDBEmbeddedException If the database is not running or an error in the database occurred - */ - public MonetDBEmbeddedConnection createConnectionOnSchema(String schema) throws MonetDBEmbeddedException { - if(this.isRunning) { - MonetDBEmbeddedConnection mdbec = this.createConnectionInternal(schema); - connections.add(mdbec); - return mdbec; - } else { - throw new MonetDBEmbeddedException("The database is not running!"); - } - } - - /** - * Creates a connection on the database on the given schema asynchronously. - * - * @param schema A String with the schema to be set - * @return A MonetDBEmbeddedConnection instance - * @throws MonetDBEmbeddedException If the database is not running or an error in the database occurred - */ - public MonetDBEmbeddedConnection createConnectionOnSchemaAsync(String schema) throws MonetDBEmbeddedException { - /* CompletableFuture.supplyAsync(() -> this.createConnectionOnSchema(schema)); */ + /* CompletableFuture.supplyAsync(() -> this.createConnectionInternal()); */ throw new UnsupportedOperationException("Must wait for Java 8 :("); } @@ -189,9 +161,10 @@ public class MonetDBEmbeddedDatabase { } private static native MonetDBEmbeddedDatabase StartDatabaseInternal(String dbDirectory, boolean silentFlag, - boolean sequentialFlag) throws MonetDBEmbeddedException; + boolean sequentialFlag) + throws MonetDBEmbeddedException; private native void stopDatabaseInternal(); - private native MonetDBEmbeddedConnection createConnectionInternal(String schema) throws MonetDBEmbeddedException; + private native MonetDBEmbeddedConnection createConnectionInternal() throws MonetDBEmbeddedException; } diff --git a/src/main/java/nl/cwi/monetdb/embedded/MonetDBToJavaMapping.java b/src/main/java/nl/cwi/monetdb/embedded/MonetDBToJavaMapping.java --- a/src/main/java/nl/cwi/monetdb/embedded/MonetDBToJavaMapping.java +++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBToJavaMapping.java @@ -25,12 +25,12 @@ import java.util.UUID; */ public enum MonetDBToJavaMapping { - Boolean(Boolean.class), Char(String.class), Varchar(String.class), Clob(String.class), Tinyint(Byte.class), - Smallint(Short.class), Int(Integer.class), Bigint(Long.class), Hugeint(BigInteger.class), Decimal(BigDecimal.class), - Real(Float.class), Double(Double.class), MonthInterval(Integer.class), SecondInterval(Long.class), Time(Time.class), - TimeTz(Time.class), Date(Date.class), Timestamp(Timestamp.class), TimestampTz(Timestamp.class), Blob(Byte[].class), - Geometry(Byte[].class), GeometryA(Byte[].class), URL(URI.class), Inet(InetAddress.class), JSON(Byte[].class), - UUID(UUID.class); + Boolean(Boolean.class), Char(String.class), Varchar(String.class), Clob(String.class), Oid(Long.class), + Tinyint(Byte.class), Smallint(Short.class), Int(Integer.class), Wrd(Long.class), Bigint(Long.class), + Hugeint(BigInteger.class), Decimal(BigDecimal.class), Real(Float.class), Double(Double.class), + MonthInterval(Integer.class), SecondInterval(Long.class), Time(Time.class), TimeTz(Time.class), Date(Date.class), + Timestamp(Timestamp.class), TimestampTz(Timestamp.class), Blob(Byte[].class), Geometry(Byte[].class), + GeometryA(Byte[].class), URL(URI.class), Inet(InetAddress.class), JSON(Byte[].class), UUID(UUID.class); /** * The mapping between MonetDB data types and enum values. @@ -43,9 +43,11 @@ public enum MonetDBToJavaMapping { MonetDBMappings.put("char", Char); MonetDBMappings.put("varchar", Varchar); MonetDBMappings.put("clob", Clob); + MonetDBMappings.put("oid", Oid); MonetDBMappings.put("tinyint", Tinyint); MonetDBMappings.put("smallint", Smallint); MonetDBMappings.put("int", Int); + MonetDBMappings.put("wrd", Wrd); MonetDBMappings.put("bigint", Bigint); MonetDBMappings.put("hugeint", Hugeint); MonetDBMappings.put("decimal", Decimal); diff --git a/src/main/java/nl/cwi/monetdb/embedded/QueryResultSet.java b/src/main/java/nl/cwi/monetdb/embedded/QueryResultSet.java --- a/src/main/java/nl/cwi/monetdb/embedded/QueryResultSet.java +++ b/src/main/java/nl/cwi/monetdb/embedded/QueryResultSet.java @@ -22,6 +22,13 @@ import java.util.ListIterator; public class QueryResultSet extends AbstractStatementResult implements Iterable { /** + * Pointer to the native result set. + * We need to keep it around for getting columns. + * The native result set is kept until the {@link super.close()} is called. + */ + protected long resultPointer; + + /** * The number of columns in the query result. */ protected final int numberOfColumns; @@ -38,13 +45,21 @@ public class QueryResultSet extends Abst protected QueryResultSet(MonetDBEmbeddedConnection connection, long resultPointer, QueryResultSetColumn<?>[] columns, int numberOfRows) { - super(connection, resultPointer); + super(connection); + this.resultPointer = resultPointer; this.numberOfColumns = columns.length; this.numberOfRows = numberOfRows; this.columns = columns; } /** + * Tells if the connection of this statement result has been closed or not. + * + * @return A boolean indicating if the statement result has been cleaned or not + */ + public boolean isStatementClosed() { return this.resultPointer == 0; } + + /** * Returns the number of columns in the result set. * * @return Number of columns @@ -255,4 +270,16 @@ public class QueryResultSet extends Abst return null; } } + + /** + * Close the query data so no more new results can be retrieved. + */ + @Override + public void close() { + this.cleanupResultInternal(this.resultPointer); + this.resultPointer = 0; + super.close(); + } + + private native void cleanupResultInternal(long resultPointer); } diff --git a/src/main/java/nl/cwi/monetdb/embedded/QueryResultSetColumn.java b/src/main/java/nl/cwi/monetdb/embedded/QueryResultSetColumn.java --- a/src/main/java/nl/cwi/monetdb/embedded/QueryResultSetColumn.java +++ b/src/main/java/nl/cwi/monetdb/embedded/QueryResultSetColumn.java @@ -80,8 +80,8 @@ public class QueryResultSetColumn<T> ext throw new MonetDBEmbeddedException("Connection closed!"); } if(startIndex < this.firstRetrievedIndex) { - T[] new_start_batch = this.getValuesBatch(this.resultSetPointer, this.resultSetIndex, - this.mapping.ordinal(), startIndex, this.firstRetrievedIndex); + T[] new_start_batch = this.fetchValuesInternal(this.resultSetPointer, this.resultSetIndex, + this.mapping.getJavaClass(), this.mapping.ordinal(), startIndex, this.firstRetrievedIndex); System.arraycopy(new_start_batch, 0, this.values, startIndex, new_start_batch.length); this.firstRetrievedIndex = startIndex; } @@ -91,8 +91,8 @@ public class QueryResultSetColumn<T> ext throw new MonetDBEmbeddedException("Connection closed!"); } if(endIndex > this.lastRetrievedIndex) { - T[] new_end_batch = this.getValuesBatch(this.resultSetPointer, this.resultSetIndex, - this.mapping.ordinal(), this.lastRetrievedIndex, endIndex); + T[] new_end_batch = this.fetchValuesInternal(this.resultSetPointer, this.resultSetIndex, + this.mapping.getJavaClass(), this.mapping.ordinal(), this.lastRetrievedIndex, endIndex); System.arraycopy(new_end_batch, 0, this.values, this.lastRetrievedIndex, new_end_batch.length); this.lastRetrievedIndex = endIndex; } @@ -235,7 +235,7 @@ public class QueryResultSetColumn<T> ext return Arrays.asList(this.values).listIterator(); } - private native T[] getValuesBatch(long resultPointer, int resultSetIndex, int mappingType, int first, int last) - throws MonetDBEmbeddedException; + private native T[] fetchValuesInternal(long resultPointer, int resultSetIndex, Class<T> jclass, int enumEntry, + int first, int last) throws MonetDBEmbeddedException; } diff --git a/src/main/java/nl/cwi/monetdb/embedded/UpdateResultSet.java b/src/main/java/nl/cwi/monetdb/embedded/UpdateResultSet.java --- a/src/main/java/nl/cwi/monetdb/embedded/UpdateResultSet.java +++ b/src/main/java/nl/cwi/monetdb/embedded/UpdateResultSet.java @@ -15,7 +15,7 @@ package nl.cwi.monetdb.embedded; */ public class UpdateResultSet extends AbstractStatementResult { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list