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

Reply via email to