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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list