Changeset: 0ae34196c54e for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=0ae34196c54e
Modified Files:
src/main/java/nl/cwi/monetdb/embedded/env/MonetDBEmbeddedConnection.java
src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedConnection.java
src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedLanguage.java
src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java
src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java
src/main/java/nl/cwi/monetdb/mcl/protocol/StarterHeaders.java
src/main/java/nl/cwi/monetdb/mcl/protocol/embedded/EmbeddedProtocol.java
src/main/java/nl/cwi/monetdb/mcl/protocol/newmapi/NewMapiProtocol.java
src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiProtocol.java
src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiTableHeaderParser.java
src/main/java/nl/cwi/monetdb/mcl/responses/DataBlockResponse.java
src/main/java/nl/cwi/monetdb/mcl/responses/IIncompleteResponse.java
src/main/java/nl/cwi/monetdb/mcl/responses/ResultSetResponse.java
Branch: embedded
Log Message:
Started the embedded connection on the JDBC part. Mostly done by now.
diffs (truncated from 776 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
@@ -30,7 +30,7 @@ public class MonetDBEmbeddedConnection {
protected MonetDBEmbeddedConnection(long connectionPointer) {
this.connectionPointer = connectionPointer; }
- public long getConnectionPointer() { return connectionPointer; }
+ long getConnectionPointer() { return connectionPointer; }
/**
* Gets the current schema set on the connection.
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
@@ -1613,7 +1613,7 @@ public abstract class MonetConnection ex
while (iter.wantsMore()) {
try {
protocol.fetchNextResponseData();
-
iter.addLine(protocol.getCurrentServerResponseHeader(),
protocol.getCurrentData());
+ iter.addLines(protocol);
} catch (ProtocolException ex) {
// right, some protocol violation,
skip the rest of the result
error = "M0M10!" + ex.getMessage();
@@ -1628,8 +1628,8 @@ public abstract class MonetConnection ex
break;
}
- // it is of no use to store DataBlockResponses,
you never want to
- // retrieve them directly anyway
+ // it is of no use to store DataBlockResponses,
you never want to retrieve them directly
+ // anyway
if (!(res instanceof DataBlockResponse)) {
responses.add(res);
}
diff --git
a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedConnection.java
b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedConnection.java
---
a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedConnection.java
+++
b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedConnection.java
@@ -7,6 +7,7 @@ import nl.cwi.monetdb.jdbc.MonetConnecti
import nl.cwi.monetdb.mcl.connection.ControlCommands;
import nl.cwi.monetdb.mcl.connection.MCLException;
import nl.cwi.monetdb.mcl.protocol.ProtocolException;
+import nl.cwi.monetdb.mcl.protocol.ServerResponses;
import nl.cwi.monetdb.mcl.protocol.embedded.EmbeddedProtocol;
import java.io.*;
@@ -79,5 +80,26 @@ public final class EmbeddedConnection ex
@Override
public void sendControlCommand(ControlCommands con, int data) throws
SQLException {
+ try {
+ switch (con) {
+ case AUTO_COMMIT:
+ ((EmbeddedProtocol)protocol).sendAutocommitCommand(data);
+ break;
+ case REPLY_SIZE:
+ ((EmbeddedProtocol)protocol).sendReplySizeCommand(data);
+ break;
+ case RELEASE:
+ ((EmbeddedProtocol)protocol).sendReleaseCommand(data);
+ break;
+ case CLOSE:
+ ((EmbeddedProtocol)protocol).sendCloseCommand(data);
+ }
+ protocol.waitUntilPrompt();
+ if (protocol.getCurrentServerResponseHeader() ==
ServerResponses.ERROR) {
+ throw new SQLException(protocol.getRemainingStringLine(0));
+ }
+ } catch (IOException | ProtocolException ex) {
+ throw new SQLException(ex);
+ }
}
}
diff --git
a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedLanguage.java
b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedLanguage.java
--- a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedLanguage.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/EmbeddedLanguage.java
@@ -8,7 +8,7 @@ import nl.cwi.monetdb.mcl.connection.IMo
public enum EmbeddedLanguage implements IMonetDBLanguage {
/** the SQL language */
- LANG_SQL(new String[]{"", "\n;", "\n;\n"}, "sql"),
+ LANG_SQL(null, "sql"),
/** an unknown language */
LANG_UNKNOWN(null, "unknown");
diff --git
a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java
b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java
---
a/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java
+++
b/src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java
@@ -1,13 +1,100 @@
package nl.cwi.monetdb.mcl.connection.embedded;
import nl.cwi.monetdb.embedded.env.MonetDBEmbeddedConnection;
+import nl.cwi.monetdb.embedded.env.MonetDBEmbeddedException;
+import nl.cwi.monetdb.mcl.protocol.ServerResponses;
+import nl.cwi.monetdb.mcl.protocol.StarterHeaders;
+import nl.cwi.monetdb.mcl.protocol.TableResultHeaders;
+import nl.cwi.monetdb.mcl.responses.IResponse;
/**
* Created by ferreira on 12/1/16.
*/
public class JDBCEmbeddedConnection extends MonetDBEmbeddedConnection {
+ private long lastResultSetPointer;
+
+ private final ServerResponses[] lineResponse = new ServerResponses[8];
+
+ private int currentLineResponseState;
+
+ private StarterHeaders serverHeaderResponse;
+
+ private final int[] lastServerResponseParameters = new int[4]; //for
ResultSetResponse and DataBlockResponse
+
+ private IResponse lastServerResponse; //for Update and Autocommit
+
+ private String lastError;
+
protected JDBCEmbeddedConnection(long connectionPointer) {
super(connectionPointer);
}
+
+ public ServerResponses getNextServerResponse() {
+ return lineResponse[currentLineResponseState++];
+ }
+
+ public StarterHeaders getServerHeaderResponse() {
+ return serverHeaderResponse;
+ }
+
+ public int[] getLastServerResponseParameters() {
+ return lastServerResponseParameters;
+ }
+
+ public IResponse getLastServerResponse() {
+ return lastServerResponse;
+ }
+
+ public TableResultHeaders fillTableHeaders(String[] columnNames, int[]
columnLengths, String[] types,
+ String[] tableNames) throws
MonetDBEmbeddedException {
+ this.getNextTableHeader(this.connectionPointer,
this.lastResultSetPointer, columnNames, columnLengths,
+ types, tableNames);
+ return TableResultHeaders.TABLE;
+ }
+
+ public int parseTupleLines(int[] typesMap, Object[] values, boolean[][]
nulls) throws MonetDBEmbeddedException {
+ return this.parseTupleLines(this.connectionPointer,
this.lastResultSetPointer, typesMap, values, nulls);
+ }
+
+ public String getLastError() {
+ return lastError;
+ }
+
+ public void processNextQuery(String query) throws MonetDBEmbeddedException
{
+ if (!query.endsWith(";")) {
+ query += ";";
+ }
+ this.sendQueryInternal(this.connectionPointer, query, true);
+ }
+
+ public void sendAutocommitCommand(int flag) throws
MonetDBEmbeddedException { //1 or 0
+ this.sendAutocommitCommandInternal(this.connectionPointer, flag);
+ }
+
+ public void sendReleaseCommand(int commandId) throws
MonetDBEmbeddedException {
+ this.sendReleaseCommandInternal(this.connectionPointer, commandId);
+ }
+
+ public void sendCloseCommand(int commandId) throws
MonetDBEmbeddedException {
+ this.sendCloseCommandInternal(this.connectionPointer, commandId);
+ }
+
+ private native void getNextTableHeader(long connectionPointer, long
resultSetPointer, String[] columnNames,
+ int[] columnLengths, String[]
types, String[] tableNames)
+ throws MonetDBEmbeddedException;
+
+ private native int parseTupleLines(long connectionPointer, long
resultSetPointer, int[] typesMap, Object[] values,
+ boolean[][] nulls) throws
MonetDBEmbeddedException;
+
+ private native void sendQueryInternal(long connectionPointer, String
query, boolean execute)
+ throws MonetDBEmbeddedException;
+
+ private native void sendAutocommitCommandInternal(long connectionPointer,
int flag)
+ throws MonetDBEmbeddedException;
+
+ private native void sendReleaseCommandInternal(long connectionPointer, int
commandId)
+ throws MonetDBEmbeddedException;
+
+ private native void sendCloseCommandInternal(long connectionPointer, int
commandId) throws MonetDBEmbeddedException;
}
diff --git a/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java
b/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java
--- a/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java
@@ -15,17 +15,11 @@ import java.util.Map;
*/
public abstract class AbstractProtocol {
- protected ServerResponses currentServerResponseHeader =
ServerResponses.UNKNOWN;
-
- public abstract ServerResponses waitUntilPrompt() throws IOException;
+ public abstract void waitUntilPrompt() throws IOException;
public abstract void fetchNextResponseData() throws IOException; //UPDATE
currentData!!!
- public ServerResponses getCurrentServerResponseHeader() {
- return currentServerResponseHeader;
- }
-
- public abstract Object getCurrentData();
+ public abstract ServerResponses getCurrentServerResponseHeader();
public abstract StarterHeaders getNextStarterHeader();
@@ -43,11 +37,11 @@ public abstract class AbstractProtocol {
public abstract DataBlockResponse getNextDatablockResponse(Map<Integer,
ResultSetResponse> rsresponses)
throws ProtocolException;
- public abstract TableResultHeaders getNextTableHeader(Object line,
String[] stringValues, int[] intValues)
- throws ProtocolException;
+ public abstract TableResultHeaders getNextTableHeader(String[]
columnNames, int[] columnLengths, String[] types,
+ String[] tableNames)
throws ProtocolException;
- public abstract int parseTupleLine(int lineNumber, Object line, int[]
typesMap, Object[] values, boolean[] nulls)
- throws ProtocolException;
+ public abstract int parseTupleLines(int firstLineNumber, int[] typesMap,
Object[] values,
+ boolean[][] nulls) throws
ProtocolException;
public abstract String getRemainingStringLine(int startIndex);
diff --git a/src/main/java/nl/cwi/monetdb/mcl/protocol/StarterHeaders.java
b/src/main/java/nl/cwi/monetdb/mcl/protocol/StarterHeaders.java
--- a/src/main/java/nl/cwi/monetdb/mcl/protocol/StarterHeaders.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/protocol/StarterHeaders.java
@@ -17,8 +17,8 @@ public enum StarterHeaders {
Q_SCHEMA,
/** A response to a transaction statement (start, rollback, abort, commit)
*/
Q_TRANS,
- /** A tabular response in response to a PREPARE statement containing
- * information about the wildcard values that need to be supplied */
+ /** A tabular response in response to a PREPARE statement containing
information about the wildcard values that
+ * need to be supplied */
Q_PREPARE,
/** A tabular continuation response (for a ResultSet) */
Q_BLOCK,
diff --git
a/src/main/java/nl/cwi/monetdb/mcl/protocol/embedded/EmbeddedProtocol.java
b/src/main/java/nl/cwi/monetdb/mcl/protocol/embedded/EmbeddedProtocol.java
--- a/src/main/java/nl/cwi/monetdb/mcl/protocol/embedded/EmbeddedProtocol.java
+++ b/src/main/java/nl/cwi/monetdb/mcl/protocol/embedded/EmbeddedProtocol.java
@@ -1,5 +1,6 @@
package nl.cwi.monetdb.mcl.protocol.embedded;
+import nl.cwi.monetdb.embedded.env.MonetDBEmbeddedException;
import nl.cwi.monetdb.jdbc.MonetConnection;
import nl.cwi.monetdb.mcl.connection.embedded.JDBCEmbeddedConnection;
import nl.cwi.monetdb.mcl.protocol.*;
@@ -27,62 +28,114 @@ public class EmbeddedProtocol extends Ab
}
@Override
- public ServerResponses waitUntilPrompt() throws IOException {
- return null;
+ public ServerResponses getCurrentServerResponseHeader() {
+ return connection.getNextServerResponse();
}
@Override
- public void fetchNextResponseData() throws IOException {
-
- }
+ public void waitUntilPrompt() throws IOException {} //Nothing really :)
@Override
- public Object getCurrentData() {
- return new Object[0];
- }
+ public void fetchNextResponseData() throws IOException {} //Nothing really
:)
@Override
public StarterHeaders getNextStarterHeader() {
- return null;
+ return connection.getServerHeaderResponse();
}
@Override
public ResultSetResponse getNextResultSetResponse(MonetConnection con,
MonetConnection.ResponseList list, int seqnr) throws ProtocolException {
- return null;
+ int[] array = connection.getLastServerResponseParameters();
+ int id = array[0]; //The order cannot be switched!!
+ int tuplecount = array[1];
+ int columncount = array[2];
+ int rowcount = array[3];
+ return new ResultSetResponse(con, list, seqnr, id, rowcount,
tuplecount, columncount);
}
@Override
public UpdateResponse getNextUpdateResponse() throws ProtocolException {
- return null;
+ return (UpdateResponse) connection.getLastServerResponse();
}
@Override
public AutoCommitResponse getNextAutoCommitResponse() throws
ProtocolException {
- return null;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list