view src/main/java/nl/cwi/monetdb/embedded/env/JDBCEmbeddedConnection.java @ 84:d82bf33bf8a6 embedded

Why I have to deal with Ant now :( No one uses it anymore :(
author Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
date Thu, 29 Dec 2016 17:35:23 +0000 (2016-12-29)
parents src/main/java/nl/cwi/monetdb/mcl/connection/embedded/JDBCEmbeddedConnection.java@724a0061db63
children
line wrap: on
line source
package nl.cwi.monetdb.embedded.env;

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[4];

    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) {
        this.getNextTableHeaderInternal(this.lastResultSetPointer, columnNames, columnLengths, types, tableNames);
        return TableResultHeaders.ALL;
    }

    public int parseTupleLines(int[] typesMap, Object[] values, boolean[][] nulls) {
        return this.parseTupleLinesInternal(this.lastResultSetPointer, typesMap, values, nulls);
    }

    public String getLastError() {
        return lastError;
    }

    public void processNextQuery(String query) {
        if (!query.endsWith(";")) {
            query += ";";
        }
        this.currentLineResponseState = 0;
        this.sendQueryInternal(this.connectionPointer, query, true);
    }

    public void sendAutocommitCommand(int flag) { //1 or 0
        this.sendAutocommitCommandInternal(this.connectionPointer, flag);
    }

    public void sendReleaseCommand(int commandId) {
        this.sendReleaseCommandInternal(this.connectionPointer, commandId);
    }

    public void sendCloseCommand(int commandId) {
        this.sendCloseCommandInternal(this.connectionPointer, commandId);
    }

    public void sendReplySizeCommand(int size) {
        this.sendReplySizeCommandInternal(this.connectionPointer, size);
    }

    private native void getNextTableHeaderInternal(long resultSetPointer, String[] columnNames, int[] columnLengths,
                                                   String[] types, String[] tableNames);

    private native int parseTupleLinesInternal(long resultSetPointer, int[] typesMap, Object[] values,
                                               boolean[][] nulls);

    private native void sendQueryInternal(long connectionPointer, String query, boolean execute);

    private native void sendAutocommitCommandInternal(long connectionPointer, int flag);

    private native void sendReleaseCommandInternal(long connectionPointer, int commandId);

    private native void sendCloseCommandInternal(long connectionPointer, int commandId);

    private native void sendReplySizeCommandInternal(long connectionPointer, int size);
}