view src/main/java/nl/cwi/monetdb/mcl/protocol/AbstractProtocol.java @ 68:86967be24645 embedded

Ready to start testing the old mapi connection. After passing the tests. The embedded integration will be very straightforward.
author Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
date Wed, 07 Dec 2016 15:59:27 +0100 (2016-12-07)
parents 87ba760038b6
children 4e2a2a81cc6a
line wrap: on
line source
package nl.cwi.monetdb.mcl.protocol;

import nl.cwi.monetdb.jdbc.MonetConnection;
import nl.cwi.monetdb.mcl.responses.AutoCommitResponse;
import nl.cwi.monetdb.mcl.responses.SchemaResponse;
import nl.cwi.monetdb.mcl.responses.UpdateResponse;
import nl.cwi.monetdb.mcl.responses.DataBlockResponse;
import nl.cwi.monetdb.mcl.responses.ResultSetResponse;

import java.io.IOException;
import java.util.Map;

/**
 * Created by ferreira on 11/30/16.
 */
public abstract class AbstractProtocol<T> {

    protected ServerResponses currentServerResponseHeader = ServerResponses.UNKNOWN;

    public ServerResponses waitUntilPrompt() {
        while(this.currentServerResponseHeader != ServerResponses.PROMPT) {
           this.fetchNextResponseData();
        }
        return this.currentServerResponseHeader;
    }

    public abstract void fetchNextResponseData(); //UPDATE currentData!!!

    public ServerResponses getCurrentServerResponseHeader() {
        return currentServerResponseHeader;
    }

    public abstract T getCurrentData();

    public abstract StarterHeaders getNextStarterHeader();

    public abstract ResultSetResponse getNextResultSetResponse(MonetConnection con, MonetConnection.ResponseList list,
                                                               int seqnr) throws ProtocolException;

    public abstract UpdateResponse getNextUpdateResponse() throws ProtocolException;

    public SchemaResponse getNextSchemaResponse() {
        return new SchemaResponse();
    }

    public abstract AutoCommitResponse getNextAutoCommitResponse() throws ProtocolException;

    public abstract DataBlockResponse getNextDatablockResponse(Map<Integer, ResultSetResponse> rsresponses)
            throws ProtocolException;

    public abstract TableResultHeaders getNextTableHeader(Object line, String[] stringValues, int[] intValues)
            throws ProtocolException;

    public abstract int parseTupleLine(Object line, Object[] values, int[] typesMap) throws ProtocolException;

    public abstract String getRemainingStringLine(int startIndex);

    public abstract void writeNextCommand(byte[] prefix, byte[] query, byte[] suffix) throws IOException;
}