Changeset: 8a65996a8dc0 for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=8a65996a8dc0
Added Files:
src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedBlob.java
Modified Files:
src/main/java/nl/cwi/monetdb/embedded/AbstractStatementResult.java
src/main/java/nl/cwi/monetdb/embedded/EmbeddedPreparedStatement.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/UpdateResultSet.java
Branch: embedded
Log Message:
FIxed conversions and closing statements
diffs (214 lines):
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
@@ -33,8 +33,14 @@ public abstract class AbstractStatementR
*/
public MonetDBEmbeddedConnection getConnection() { return connection; }
+ /**
+ * To be called by the connection when is closing, to avoid concurrency
problems on the iteration.
+ */
+ protected abstract void closeImplementation();
+
@Override
public void close() {
+ this.closeImplementation();
this.connection.removeQueryResult(this);
}
}
diff --git
a/src/main/java/nl/cwi/monetdb/embedded/EmbeddedPreparedStatement.java
b/src/main/java/nl/cwi/monetdb/embedded/EmbeddedPreparedStatement.java
--- a/src/main/java/nl/cwi/monetdb/embedded/EmbeddedPreparedStatement.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/EmbeddedPreparedStatement.java
@@ -20,7 +20,7 @@ import java.text.SimpleDateFormat;
import java.util.*;
/**
- * The embedded version of the {@link PreparedStatement} interface from JDBC
(not inheriting for simpler implementation).
+ * The embedded version of the {@link PreparedStatement} interface from JDBC
(not inheriting for easier implementation).
*
* @author <a href="mailto:[email protected]">Pedro
Ferreira</a>, Fabian Groffen, Martin van Dinther
*/
@@ -49,14 +49,14 @@ public class EmbeddedPreparedStatement {
/**
* A list of Java classes that don't need special parsing of values (jsut
call toString() method).
*/
- private static final List<Class<?>> DirectMappingClasses;
+ private static final Set<Class<?>> DirectMappingClasses;
static {
TimeFormatter = new SimpleDateFormat("HH:mm:ss.SSS");
TimeTzFormatter = new SimpleDateFormat("HH:mm:ss.SSSZ");
TimestampFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
TimestampTzFormatter = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss.SSSZ");
- DirectMappingClasses = new ArrayList<>();
+ DirectMappingClasses = new HashSet<>();
DirectMappingClasses.add(Boolean.class);
DirectMappingClasses.add(Byte.class);
DirectMappingClasses.add(Short.class);
@@ -65,7 +65,7 @@ public class EmbeddedPreparedStatement {
DirectMappingClasses.add(BigInteger.class);
DirectMappingClasses.add(Float.class);
DirectMappingClasses.add(Double.class);
- DirectMappingClasses.add(Byte[].class);
+ DirectMappingClasses.add(MonetDBEmbeddedBlob.class);
DirectMappingClasses.add(URI.class);
DirectMappingClasses.add(InetAddress.class);
DirectMappingClasses.add(UUID.class);
diff --git a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedBlob.java
b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedBlob.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedBlob.java
@@ -0,0 +1,24 @@
+package nl.cwi.monetdb.embedded;
+
+/**
+ * A Java representation for Blob data type. Added for more efficient data
mapping when fetching from the database.
+ *
+ * @author <a href="mailto:[email protected]">Pedro
Ferreira</a>
+ */
+public class MonetDBEmbeddedBlob {
+
+ private final byte[] blob;
+
+ public MonetDBEmbeddedBlob(byte[] blob) {
+ this.blob = blob;
+ }
+
+ public byte[] getBlob() {
+ return blob;
+ }
+
+ @Override
+ public String toString() {
+ return new String(this.blob);
+ }
+}
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
@@ -8,8 +8,8 @@
package nl.cwi.monetdb.embedded;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
/**
* A single connection to a MonetDB database instance
@@ -25,7 +25,7 @@ public class MonetDBEmbeddedConnection {
private final long connectionPointer;
- private final List<AbstractStatementResult> results = new ArrayList<>();
+ private final Set<AbstractStatementResult> results = new HashSet<>();
protected MonetDBEmbeddedConnection(MonetDBEmbeddedDatabase database,
long connectionPointer) {
this.database = database;
@@ -213,7 +213,7 @@ public class MonetDBEmbeddedConnection {
*
* @param schemaName The schema of the table
* @param tableName The name of the table
- * @throws MonetDBEmbeddedException
+ * @throws MonetDBEmbeddedException If an error in the database occurred
*/
public void removeTable(String schemaName, String tableName) throws
MonetDBEmbeddedException {
String query = "drop table " + schemaName + "." + tableName + ";";
@@ -221,13 +221,20 @@ public class MonetDBEmbeddedConnection {
}
/**
+ * When the database is shuts down, this method is called instead
+ */
+ protected void closeConnectionImplementation() {
+ for(AbstractStatementResult res : this.results) {
+ res.closeImplementation();
+ }
+ this.closeConnectionInternal(this.connectionPointer);
+ }
+
+ /**
* Shuts down this connection. Any pending queries connections will be
immediately closed as well.
*/
public void closeConnection() {
- for(AbstractStatementResult res : this.results) {
- res.close();
- }
- this.closeConnectionInternal(this.connectionPointer);
+ this.closeConnectionImplementation();
this.database.removeConnection(this);
}
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
@@ -8,8 +8,8 @@
package nl.cwi.monetdb.embedded;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
/**
* An embedded version of a MonetDB database.
@@ -62,7 +62,7 @@ public class MonetDBEmbeddedDatabase {
private boolean isRunning = true;
- private final List<MonetDBEmbeddedConnection> connections = new
ArrayList<>();
+ private final Set<MonetDBEmbeddedConnection> connections = new HashSet<>();
private MonetDBEmbeddedDatabase(String dbDirectory, boolean silentFlag,
boolean sequentialFlag) {
this.databaseDirectory = dbDirectory;
@@ -112,7 +112,7 @@ public class MonetDBEmbeddedDatabase {
public void stopDatabase() throws MonetDBEmbeddedException {
if(this.isRunning) {
for(MonetDBEmbeddedConnection mdbec : connections) {
- mdbec.closeConnection();
+ mdbec.closeConnectionImplementation();
}
this.connections.clear();
this.stopDatabaseInternal();
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
@@ -29,8 +29,9 @@ public enum MonetDBToJavaMapping {
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);
+ Timestamp(Timestamp.class), TimestampTz(Timestamp.class),
Blob(MonetDBEmbeddedBlob.class),
+ Geometry(MonetDBEmbeddedBlob.class), GeometryA(MonetDBEmbeddedBlob.class),
URL(URI.class), Inet(InetAddress.class),
+ JSON(MonetDBEmbeddedBlob.class), UUID(UUID.class);
/**
* The mapping between MonetDB data types and enum values.
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
@@ -275,10 +275,9 @@ public class QueryResultSet extends Abst
* Close the query data so no more new results can be retrieved.
*/
@Override
- public void close() {
+ public void closeImplementation() {
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/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
@@ -18,4 +18,6 @@ public class UpdateResultSet extends Abs
protected UpdateResultSet(MonetDBEmbeddedConnection connection) {
super(connection);
}
+
+ public void closeImplementation() {}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list