Changeset: 7c3a84de7605 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/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:[email protected]">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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list