Changeset: 7c3a84de7605 for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=7c3a84de7605
Modified Files:
        src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java
        src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java
        src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBEmbeddedBlob.java
        src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBToJavaMapping.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetBooleanColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetByteColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetDoubleColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetFloatColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetIntColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetLongColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetObjectColumn.java
        
src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetShortColumn.java
        src/main/java/nl/cwi/monetdb/embedded/tables/MonetDBTable.java
Branch: embedded
Log Message:

More cleanup, finished null values mappings.


diffs (truncated from 779 to 300 lines):

diff --git 
a/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java 
b/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java
--- a/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java
@@ -12,8 +12,7 @@ import nl.cwi.monetdb.embedded.resultset
 import nl.cwi.monetdb.embedded.tables.MonetDBTable;
 import nl.cwi.monetdb.embedded.utils.StringEscaper;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * A single connection to a MonetDB database instance
@@ -27,10 +26,12 @@ public class MonetDBEmbeddedConnection {
 
        protected final long connectionPointer;
 
-    private final Set<AbstractConnectionResult> results = new HashSet<>();
+    private final ConcurrentHashMap<Long, AbstractConnectionResult> results = 
new ConcurrentHashMap<>();
 
        protected MonetDBEmbeddedConnection(long connectionPointer) { 
this.connectionPointer = connectionPointer; }
 
+    protected long getConnectionPointer() { return connectionPointer; }
+
     /**
      * Gets the current schema set on the connection.
      *
@@ -95,7 +96,7 @@ public class MonetDBEmbeddedConnection {
             query += ";";
         }
         UpdateResultSet res = this.sendUpdateInternal(this.connectionPointer, 
query, true);
-        results.add(res);
+        results.put(res.getConnectionPointer(), res);
         return res;
     }
 
@@ -122,7 +123,7 @@ public class MonetDBEmbeddedConnection {
             query += ";";
                }
         QueryResultSet res = this.sendQueryInternal(this.connectionPointer, 
query, true);
-        results.add(res);
+        results.put(res.getConnectionPointer(), res);
         return res;
        }
 
@@ -147,7 +148,7 @@ public class MonetDBEmbeddedConnection {
      */
     public MonetDBTable getMonetDBTable(String schemaName, String tableName) 
throws MonetDBEmbeddedException {
         MonetDBTable res = 
this.getMonetDBTableInternal(this.connectionPointer, schemaName, tableName);
-        results.add(res);
+        results.put(res.getConnectionPointer(), res);
         return res;
     }
 
@@ -215,7 +216,7 @@ public class MonetDBEmbeddedConnection {
      * When the database is shuts down, this method is called instead
      */
     protected void closeConnectionImplementation() {
-        for(AbstractConnectionResult res : this.results) {
+        for(AbstractConnectionResult res : this.results.values()) {
             res.closeImplementation();
         }
         this.closeConnectionInternal(this.connectionPointer);
@@ -239,7 +240,7 @@ public class MonetDBEmbeddedConnection {
     /**
      * Removes a query result from this connection.
      */
-    protected void removeQueryResult(AbstractConnectionResult res) { 
this.results.remove(res); }
+    protected void removeQueryResult(AbstractConnectionResult res) { 
this.results.remove(res.getConnectionPointer()); }
 
     /**
      * Internal implementation of sendUpdate.
diff --git 
a/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java 
b/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java
--- a/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java
@@ -8,8 +8,7 @@
 
 package nl.cwi.monetdb.embedded.env;
 
-import java.util.HashSet;
-import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * An embedded version of a MonetDB database.
@@ -68,23 +67,41 @@ public class MonetDBEmbeddedDatabase {
     /**
      * Get the database farm directory.
      *
+     * @throws MonetDBEmbeddedException If the database is not running
      * @return A String representing the farm directory
      */
-    public static String GetDatabaseDirectory() { return 
MonetDBEmbeddedDatabase.databaseDirectory; }
+    public static String GetDatabaseDirectory() throws 
MonetDBEmbeddedException {
+        if(MonetDBEmbeddedDatabase == null) {
+            throw new MonetDBEmbeddedException("The database is not running!");
+        }
+        return MonetDBEmbeddedDatabase.databaseDirectory;
+    }
 
     /**
      * Check if the Silent Flag was set while creating the database.
      *
+     * @throws MonetDBEmbeddedException If the database is not running
      * @return The Silent Flag
      */
-    public static boolean IsSilentFlagSet() { return 
MonetDBEmbeddedDatabase.silentFlag; }
+    public static boolean IsSilentFlagSet() throws MonetDBEmbeddedException {
+        if(MonetDBEmbeddedDatabase == null) {
+            throw new MonetDBEmbeddedException("The database is not running!");
+        }
+        return MonetDBEmbeddedDatabase.silentFlag;
+    }
 
     /**
      * Check if the Sequential Flag was set while creating the database.
      *
+     * @throws MonetDBEmbeddedException If the database is not running
      * @return The Sequential Flag
      */
-    public static boolean IsSequentialFlagSet() { return 
MonetDBEmbeddedDatabase.sequentialFlag; }
+    public static boolean IsSequentialFlagSet() throws 
MonetDBEmbeddedException {
+        if(MonetDBEmbeddedDatabase == null) {
+            throw new MonetDBEmbeddedException("The database is not running!");
+        }
+        return MonetDBEmbeddedDatabase.sequentialFlag;
+    }
 
     /**
      * Stops the database. All the pending connections will be shut down as 
well.
@@ -95,7 +112,7 @@ public class MonetDBEmbeddedDatabase {
         if(MonetDBEmbeddedDatabase == null) {
             throw new MonetDBEmbeddedException("The database is not running!");
         } else {
-            for(MonetDBEmbeddedConnection mdbec : 
MonetDBEmbeddedDatabase.connections) {
+            for(MonetDBEmbeddedConnection mdbec : 
MonetDBEmbeddedDatabase.connections.values()) {
                 mdbec.closeConnectionImplementation();
             }
             MonetDBEmbeddedDatabase.connections.clear();
@@ -119,7 +136,7 @@ public class MonetDBEmbeddedDatabase {
 
     private final boolean sequentialFlag;
 
-    private final Set<MonetDBEmbeddedConnection> connections = new HashSet<>();
+    private final ConcurrentHashMap<Long, MonetDBEmbeddedConnection> 
connections = new ConcurrentHashMap<>();
 
     private MonetDBEmbeddedDatabase(String dbDirectory, boolean silentFlag, 
boolean sequentialFlag) {
         this.databaseDirectory = dbDirectory;
@@ -134,7 +151,13 @@ public class MonetDBEmbeddedDatabase {
      * @throws MonetDBEmbeddedException If the database is not running or an 
error in the database occurred
      */
     public static MonetDBEmbeddedConnection CreateConnection() throws 
MonetDBEmbeddedException {
-        return MonetDBEmbeddedDatabase.createConnectionInternal();
+        if(MonetDBEmbeddedDatabase == null) {
+            throw new MonetDBEmbeddedException("The database is not running!");
+        } else {
+            MonetDBEmbeddedConnection con = 
MonetDBEmbeddedDatabase.createConnectionInternal();
+            
MonetDBEmbeddedDatabase.connections.put(con.getConnectionPointer(), con);
+            return con;
+        }
     }
 
     /**
@@ -151,7 +174,7 @@ public class MonetDBEmbeddedDatabase {
      * Removes a connection from this database.
      */
     protected static void RemoveConnection(MonetDBEmbeddedConnection con) {
-        MonetDBEmbeddedDatabase.connections.remove(con);
+        MonetDBEmbeddedDatabase.connections.remove(con.connectionPointer);
     }
 
     /**
diff --git 
a/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBEmbeddedBlob.java 
b/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBEmbeddedBlob.java
--- a/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBEmbeddedBlob.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBEmbeddedBlob.java
@@ -19,7 +19,7 @@ import java.util.Collections;
  *
  * @author <a href="mailto:pedro.ferre...@monetdbsolutions.com";>Pedro 
Ferreira</a>
  */
-public class MonetDBEmbeddedBlob implements Serializable, Blob {
+public class MonetDBEmbeddedBlob implements Serializable, Blob, 
Comparable<MonetDBEmbeddedBlob> {
 
     /**
      * The BLOB's content as a Java byte array.
@@ -156,4 +156,14 @@ public class MonetDBEmbeddedBlob impleme
         this.checkFreed();
         return new ByteArrayInputStream(Arrays.copyOfRange(this.blob, (int) 
pos, (int) length));
     }
+
+    @Override
+    public int compareTo(MonetDBEmbeddedBlob o) {
+        byte[] first = this.blob, second = o.blob;
+        int len = Math.min(first.length, second.length), res = 0;
+        for(int i = 0; i < len ; i++) {
+            res = res + first[i] - second[i];
+        }
+        return res;
+    }
 }
diff --git 
a/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBToJavaMapping.java 
b/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBToJavaMapping.java
--- a/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBToJavaMapping.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/mapping/MonetDBToJavaMapping.java
@@ -15,6 +15,7 @@ import java.net.URL;
 import java.sql.Date;
 import java.sql.Time;
 import java.sql.Timestamp;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.UUID;
 
@@ -39,6 +40,11 @@ public enum MonetDBToJavaMapping {
      */
     private static final HashMap<String, MonetDBToJavaMapping> MonetDBMappings;
 
+    /**
+     * The mapping between MonetDB data types and enum values.
+     */
+    private static final EnumMap<MonetDBToJavaMapping, Class<?>> 
AppendMappings;
+
     static {
         MonetDBMappings = new HashMap<>();
         MonetDBMappings.put("boolean", Boolean);
@@ -69,6 +75,36 @@ public enum MonetDBToJavaMapping {
         MonetDBMappings.put("inet", Inet);
         MonetDBMappings.put("json", JSON);
         MonetDBMappings.put("uuid", UUID);
+
+        AppendMappings = new EnumMap<>(MonetDBToJavaMapping.class);
+        AppendMappings.put(Boolean, boolean[].class);
+        AppendMappings.put(Char, String[].class);
+        AppendMappings.put(Varchar, String[].class);
+        AppendMappings.put(Clob, String[].class);
+        AppendMappings.put(Oid, long[].class);
+        AppendMappings.put(Tinyint, byte[].class);
+        AppendMappings.put(Smallint, short[].class);
+        AppendMappings.put(Int, int[].class);
+        AppendMappings.put(Wrd, long[].class);
+        AppendMappings.put(Bigint, long[].class);
+        AppendMappings.put(Hugeint, BigInteger[].class);
+        AppendMappings.put(Decimal, BigDecimal[].class);
+        AppendMappings.put(Real, float[].class);
+        AppendMappings.put(Double, double[].class);
+        AppendMappings.put(MonthInterval, int[].class);
+        AppendMappings.put(SecondInterval, long[].class);
+        AppendMappings.put(Time, Time[].class);
+        AppendMappings.put(TimeTz, Time[].class);
+        AppendMappings.put(Date, Date[].class);
+        AppendMappings.put(Timestamp, Timestamp[].class);
+        AppendMappings.put(TimestampTz, Timestamp[].class);
+        AppendMappings.put(Blob, MonetDBEmbeddedBlob[].class);
+        AppendMappings.put(Geometry, MonetDBEmbeddedBlob[].class);
+        AppendMappings.put(GeometryA, MonetDBEmbeddedBlob[].class);
+        AppendMappings.put(URL, URL[].class);
+        AppendMappings.put(Inet, Inet4Address[].class);
+        AppendMappings.put(JSON, MonetDBEmbeddedBlob[].class);
+        AppendMappings.put(UUID, UUID[].class);
     }
 
     /**
@@ -82,11 +118,21 @@ public enum MonetDBToJavaMapping {
     }
 
     /**
+     * Get the corresponding MonetDBToJavaMapping from MonetDB internal data 
type.
+     *
+     * @param value A MonetDBToJavaMapping entry
+     * @return The corresponding Java array class or null if no mapping
+     */
+    public static Class<?> GetArrayMappingFromEnumValue(MonetDBToJavaMapping 
value) {
+        return AppendMappings.get(value);
+    }
+
+    /**
      * The corresponding Java class for the enum value.
      */
     private final Class<?> javaClass;
 
-    MonetDBToJavaMapping(Class<?> javaClass) { this.javaClass = javaClass;}
+    MonetDBToJavaMapping(Class<?> javaClass) { this.javaClass = javaClass; }
 
     /**
      * Gets the corresponding Java class for the enum value.
diff --git 
a/src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetBooleanColumn.java
 
b/src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetBooleanColumn.java
--- 
a/src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetBooleanColumn.java
+++ 
b/src/main/java/nl/cwi/monetdb/embedded/resultset/QueryResultSetBooleanColumn.java
@@ -18,16 +18,20 @@ import nl.cwi.monetdb.embedded.env.Monet
 public class QueryResultSetBooleanColumn extends 
AbstractQueryResultSetColumn<boolean[]> {
 
     /**
-     * MonetDB's boolean null constant.
-     */
-    private static boolean BooleanNullConstant;
-
-    /**
      * Gets MonetDB's boolean null constant
      *
      * @return MonetDB's boolean null constant
      */
-    public static boolean GetBooleanNullConstant() { return 
BooleanNullConstant; }
+    public static native boolean GetBooleanNullConstant();
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to