Changeset: b66003555560 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/b66003555560
Added Files:
src/main/java/nl/cwi/monetdb/mcl/io/AbstractMCLReader.java
src/main/java/nl/cwi/monetdb/mcl/io/AbstractMCLWriter.java
src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLReader.java
src/main/java/nl/cwi/monetdb/mcl/io/BufferedMCLWriter.java
src/main/java/nl/cwi/monetdb/mcl/io/EmbeddedMCLReader.java
src/main/java/nl/cwi/monetdb/mcl/io/EmbeddedMCLWriter.java
src/main/java/nl/cwi/monetdb/mcl/net/AbstractMCLConnection.java
src/main/java/nl/cwi/monetdb/mcl/net/EmbeddedMonetDB.java
src/main/java/nl/cwi/monetdb/mcl/parser/embedded/EmbeddedHeaderLineParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/embedded/EmbeddedStartOfHeaderParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/embedded/EmbeddedTupleLineParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/socket/SocketHeaderLineParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/socket/SocketStartOfHeaderParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/socket/SocketTupleLineParser.java
Removed Files:
src/main/java/nl/cwi/monetdb/mcl/connection/AbstractBufferedReader.java
src/main/java/nl/cwi/monetdb/mcl/connection/AbstractBufferedWriter.java
src/main/java/nl/cwi/monetdb/mcl/connection/AbstractMonetDBConnection.java
src/main/java/nl/cwi/monetdb/mcl/embedded/EmbeddedConnection.java
src/main/java/nl/cwi/monetdb/mcl/embedded/EmbeddedReader.java
src/main/java/nl/cwi/monetdb/mcl/embedded/EmbeddedWriter.java
src/main/java/nl/cwi/monetdb/mcl/net/BufferedMCLReader.java
src/main/java/nl/cwi/monetdb/mcl/net/BufferedMCLWriter.java
Modified Files:
example/SQLcopyinto.java
src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedDatabase.java
src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
src/main/java/nl/cwi/monetdb/mcl/net/MapiSocket.java
src/main/java/nl/cwi/monetdb/mcl/parser/HeaderLineParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/MCLParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/StartOfHeaderParser.java
src/main/java/nl/cwi/monetdb/mcl/parser/TupleLineParser.java
src/main/java/nl/cwi/monetdb/merovingian/Control.java
src/main/java/nl/cwi/monetdb/util/SQLRestore.java
Branch: embedded
Log Message:
Split parsers and cleaned the MCL layer.
diffs (truncated from 1864 to 300 lines):
diff --git a/example/SQLcopyinto.java b/example/SQLcopyinto.java
--- a/example/SQLcopyinto.java
+++ b/example/SQLcopyinto.java
@@ -10,8 +10,8 @@ import java.sql.*;
import java.io.*;
import java.util.*;
-import nl.cwi.monetdb.mcl.connection.AbstractBufferedReader;
-import nl.cwi.monetdb.mcl.connection.AbstractBufferedWriter;
+import nl.cwi.monetdb.mcl.io.AbstractMCLReader;
+import nl.cwi.monetdb.mcl.io.AbstractMCLWriter;
import nl.cwi.monetdb.mcl.net.*;
/**
@@ -61,8 +61,8 @@ public class SQLcopyinto {
}
}
- AbstractBufferedReader in = server.getReader();
- AbstractBufferedWriter out = server.getWriter();
+ AbstractMCLReader in = server.getReader();
+ AbstractMCLWriter out = server.getWriter();
String error = in.waitForPrompt();
if (error != null)
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,7 +8,7 @@
package nl.cwi.monetdb.embedded.env;
-import nl.cwi.monetdb.mcl.embedded.EmbeddedConnection;
+import nl.cwi.monetdb.mcl.net.EmbeddedMonetDB;
import java.util.concurrent.ConcurrentHashMap;
@@ -172,7 +172,7 @@ public class MonetDBEmbeddedDatabase {
return CompletableFuture.supplyAsync(() ->
this.createConnectionInternal());
}*/
- public static void AddJDBCEmbeddedConnection(EmbeddedConnection con)
throws MonetDBEmbeddedException {
+ public static void AddJDBCEmbeddedConnection(EmbeddedMonetDB con) throws
MonetDBEmbeddedException {
if(MonetDBEmbeddedDatabase == null) {
throw new MonetDBEmbeddedException("The database is not running!");
} else {
@@ -208,5 +208,5 @@ public class MonetDBEmbeddedDatabase {
/**
* Internal implementation to create a JDBC embeddded connection on this
database.
*/
- private native void createJDBCConnectionInternal(EmbeddedConnection emc)
throws MonetDBEmbeddedException;
+ private native void createJDBCConnectionInternal(EmbeddedMonetDB emc)
throws MonetDBEmbeddedException;
}
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
@@ -44,14 +44,14 @@ import java.util.concurrent.locks.Reentr
import nl.cwi.monetdb.jdbc.types.INET;
import nl.cwi.monetdb.jdbc.types.URL;
import nl.cwi.monetdb.mcl.MCLException;
-import nl.cwi.monetdb.mcl.connection.AbstractBufferedReader;
-import nl.cwi.monetdb.mcl.connection.AbstractBufferedWriter;
-import nl.cwi.monetdb.mcl.embedded.EmbeddedConnection;
+import nl.cwi.monetdb.mcl.io.AbstractMCLReader;
+import nl.cwi.monetdb.mcl.io.AbstractMCLWriter;
+import nl.cwi.monetdb.mcl.net.EmbeddedMonetDB;
import nl.cwi.monetdb.mcl.net.MapiSocket;
-import nl.cwi.monetdb.mcl.connection.AbstractMonetDBConnection;
+import nl.cwi.monetdb.mcl.net.AbstractMCLConnection;
import nl.cwi.monetdb.mcl.parser.HeaderLineParser;
+import nl.cwi.monetdb.mcl.parser.StartOfHeaderParser;
import nl.cwi.monetdb.mcl.parser.MCLParseException;
-import nl.cwi.monetdb.mcl.parser.StartOfHeaderParser;
/**
* A {@link Connection} suitable for the MonetDB database.
@@ -81,14 +81,13 @@ import nl.cwi.monetdb.mcl.parser.StartOf
public class MonetConnection extends MonetWrapper implements Connection {
/** A connection to mserver5 either through MAPI with TCP or embedded */
- private final AbstractMonetDBConnection server;
+ private final AbstractMCLConnection server;
/** The Reader from the server */
- private final AbstractBufferedReader in;
+ private final AbstractMCLReader in;
/** The Writer to the server */
- private final AbstractBufferedWriter out;
-
- /** A StartOfHeaderParser declared for reuse. */
- private StartOfHeaderParser sohp = new StartOfHeaderParser();
+ private final AbstractMCLWriter out;
+ /** A StartOfHeaderParser declared for reuse. */
+ private final StartOfHeaderParser sohp;
/** Whether this Connection is closed (and cannot be used anymore) */
private boolean closed;
@@ -150,7 +149,7 @@ public class MonetConnection extends Mon
if (directory == null || directory.trim().isEmpty())
throw new IllegalArgumentException("directory
should not be null or empty");
- server = new EmbeddedConnection("localhost", -1,
database, username, debug, "sql", null, directory);
+ server = new EmbeddedMonetDB("localhost", -1, database,
username, debug, "sql", null, directory);
} else {
String hostname = props.getProperty("host");
String hash = props.getProperty("hash");
@@ -220,9 +219,11 @@ public class MonetConnection extends Mon
in = server.getReader();
out = server.getWriter();
- String error = in.waitForPrompt(); //TODO CHECK THIS
+ String error = in.waitForPrompt();
if (error != null)
throw new SQLException(error.substring(6),
"08001");
+
+ sohp = server.getStartOfHeaderParser();
} catch (IOException e) {
throw new SQLException("Unable to connect (" +
server.getHostname() + ":" + server.getPort() + "): " + e.getMessage(),
"08006");
} catch (MCLParseException e) {
@@ -238,7 +239,7 @@ public class MonetConnection extends Mon
// the following initialisers are only valid when the language
// is SQL...
- if (server.getLang() == AbstractMonetDBConnection.LANG_SQL) {
+ if (server.getLang() == AbstractMCLConnection.LANG_SQL) {
// enable auto commit
setAutoCommit(true);
// set our time zone on the server
@@ -253,7 +254,7 @@ public class MonetConnection extends Mon
}
}
- protected AbstractMonetDBConnection getServer() {
+ protected AbstractMCLConnection getServer() {
return server;
}
@@ -626,7 +627,7 @@ public class MonetConnection extends Mon
*/
@Override
public DatabaseMetaData getMetaData() throws SQLException {
- if (server.getLang() != AbstractMonetDBConnection.LANG_SQL)
+ if (server.getLang() != AbstractMCLConnection.LANG_SQL)
throw new SQLException("This method is only supported
in SQL mode", "M0M04");
return new MonetDatabaseMetaData(this);
@@ -1634,7 +1635,7 @@ public class MonetConnection extends Mon
this.resultBlocks =
new DataBlockResponse[(tuplecount / cacheSize)
+ 1];
- hlp = new HeaderLineParser(columncount);
+ hlp = server.getHeaderLineParser(columncount);
resultBlocks[0] = new DataBlockResponse(
rowcount,
@@ -1658,7 +1659,7 @@ public class MonetConnection extends Mon
return resultBlocks[0].addLine(tmpLine,
linetype);
}
- if (linetype != AbstractBufferedReader.HEADER)
+ if (linetype != AbstractMCLReader.HEADER)
return "header expected, got: " + tmpLine;
// depending on the name of the header, we continue
@@ -1992,7 +1993,7 @@ public class MonetConnection extends Mon
*/
@Override
public String addLine(String line, int linetype) {
- if (linetype != AbstractBufferedReader.RESULT)
+ if (linetype != AbstractMCLReader.RESULT)
return "protocol violation: unexpected line in
data block: " + line;
// add to the backing array
data[++pos] = line;
@@ -2321,7 +2322,7 @@ public class MonetConnection extends Mon
int size = cachesize == 0 ?
DEF_FETCHSIZE : cachesize;
size = maxrows != 0 ? Math.min(maxrows,
size) : size;
// don't do work if it's not needed
- if (server.getLang() ==
AbstractMonetDBConnection.LANG_SQL && size != curReplySize && templ !=
server.getCommandHeaderTemplates()) {
+ if (server.getLang() ==
AbstractMCLConnection.LANG_SQL && size != curReplySize && templ !=
server.getCommandHeaderTemplates()) {
sendControlCommand("reply_size
" + size);
// store the reply size after a
successful change
@@ -2354,11 +2355,11 @@ public class MonetConnection extends Mon
String tmpLine = in.readLine();
int linetype = in.getLineType();
Response res = null;
- while (linetype !=
AbstractBufferedReader.PROMPT) {
+ while (linetype !=
AbstractMCLReader.PROMPT) {
// each response should start
with a start of header
// (or error)
switch (linetype) {
- case
AbstractBufferedReader.SOHEADER:
+ case
AbstractMCLReader.SOHEADER:
// make the
response object, and fill it
try {
switch
(sohp.parse(tmpLine)) {
@@ -2487,7 +2488,7 @@ public class MonetConnection extends Mon
tmpLine =
in.readLine();
linetype =
in.getLineType();
break;
- case
AbstractBufferedReader.INFO:
+ case
AbstractMCLReader.INFO:
addWarning(tmpLine.substring(1), "01000");
// read the
next line (can be prompt, new
@@ -2502,7 +2503,7 @@ public class MonetConnection extends Mon
// message
tmpLine =
"!M0M10!protocol violation, unexpected line: " + tmpLine;
// don't break;
fall through...
- case
AbstractBufferedReader.ERROR:
+ case
AbstractMCLReader.ERROR:
// read
everything till the prompt (should be
// error) we
don't know if we ignore some
// garbage
here... but the log should reveal
@@ -2579,7 +2580,7 @@ public class MonetConnection extends Mon
private String[] templ;
private String query;
- private AbstractBufferedWriter out;
+ private AbstractMCLWriter out;
private String error;
private int state = WAIT;
@@ -2593,7 +2594,7 @@ public class MonetConnection extends Mon
*
* @param out the socket to write to
*/
- public SendThread(AbstractBufferedWriter out) {
+ public SendThread(AbstractMCLWriter out) {
super("SendThread");
setDaemon(true);
this.out = out;
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
@@ -10,6 +10,7 @@ package nl.cwi.monetdb.jdbc;
import nl.cwi.monetdb.mcl.parser.MCLParseException;
import nl.cwi.monetdb.mcl.parser.TupleLineParser;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
@@ -134,7 +135,7 @@ public class MonetResultSet extends Mone
tupleCount = header.tuplecount;
// create result array
- tlp = new TupleLineParser(columns.length);
+ tlp =
((MonetConnection)statement.getConnection()).getServer().getTupleLineParser(columns.length);
JdbcSQLTypes = new int[types.length];
populateJdbcSQLtypesArray();
@@ -178,7 +179,11 @@ public class MonetResultSet extends Mone
this.types = types;
this.tupleCount = results;
- this.tlp = new TupleLineParser(columns.length);
+ try {
+ this.tlp =
((MonetConnection)statement.getConnection()).getServer().getTupleLineParser(columns.length);
+ } catch (SQLException e) {
+ throw new IllegalArgumentException(e);
+ }
JdbcSQLTypes = new int[types.length];
populateJdbcSQLtypesArray();
diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
b/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetStatement.java
@@ -8,7 +8,7 @@
package nl.cwi.monetdb.jdbc;
-import nl.cwi.monetdb.mcl.connection.AbstractMonetDBConnection;
+import nl.cwi.monetdb.mcl.net.AbstractMCLConnection;
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.Statement;
@@ -202,7 +202,7 @@ public class MonetStatement extends Mone
boolean first = true;
boolean error = false;
- AbstractMonetDBConnection server =
connection.getServer();
+ AbstractMCLConnection server = connection.getServer();
BatchUpdateException e = new
BatchUpdateException("Error(s) occurred while executing the batch, see next
SQLExceptions for details", "22000", counts);
StringBuilder tmpBatch = new
StringBuilder(server.getBlockSize());
diff --git
a/src/main/java/nl/cwi/monetdb/mcl/connection/AbstractBufferedReader.java
b/src/main/java/nl/cwi/monetdb/mcl/io/AbstractMCLReader.java
rename from
src/main/java/nl/cwi/monetdb/mcl/connection/AbstractBufferedReader.java
rename to src/main/java/nl/cwi/monetdb/mcl/io/AbstractMCLReader.java
--- a/src/main/java/nl/cwi/monetdb/mcl/connection/AbstractBufferedReader.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/io/AbstractMCLReader.java
@@ -1,4 +1,4 @@
-package nl.cwi.monetdb.mcl.connection;
+package nl.cwi.monetdb.mcl.io;
import java.io.BufferedReader;
import java.io.IOException;
@@ -7,7 +7,7 @@ import java.io.Reader;
/**
* Created by ferreira on 11/24/16.
*/
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list