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:pedro.ferre...@monetdbsolutions.com";>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:pedro.ferre...@monetdbsolutions.com";>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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to