view src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiStartOfHeaderParser.java @ 67:87ba760038b6 embedded

More cleanup. About to start the tuple conversions.
author Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
date Tue, 06 Dec 2016 18:13:54 +0100 (2016-12-06)
parents 7307caacc2d5
children 86967be24645
line wrap: on
line source
package nl.cwi.monetdb.mcl.protocol.oldmapi;

import nl.cwi.monetdb.mcl.protocol.MCLParseException;
import nl.cwi.monetdb.mcl.protocol.StarterHeaders;

/**
 * Created by ferreira on 12/6/16.
 */
final class OldMapiStartOfHeaderParser {

    static StarterHeaders GetNextStartHeaderOnOldMapi(OldMapiProtocol protocol) {
        StarterHeaders res;
        switch (protocol.builder.charAt(protocol.currentPointer)) {
            case '0':
                res = StarterHeaders.Q_PARSE;
                break;
            case '1':
                res = StarterHeaders.Q_TABLE;
                break;
            case '2':
                res = StarterHeaders.Q_UPDATE;
                break;
            case '3':
                res = StarterHeaders.Q_SCHEMA;
                break;
            case '4':
                res = StarterHeaders.Q_TRANS;
                break;
            case '5':
                res = StarterHeaders.Q_PREPARE;
                break;
            case '6':
                res = StarterHeaders.Q_BLOCK;
                break;
            default:
                res = StarterHeaders.Q_UNKNOWN;
        }
        return res;
    }

    static int GetNextResponseDataAsInt(OldMapiProtocol protocol) throws MCLParseException {
        protocol.currentPointer++;
        if (!protocol.hasRemaining()) {
            throw new MCLParseException("unexpected end of string", protocol.currentPointer - 1);
        }
        int tmp;
        char chr = protocol.builder.charAt(protocol.currentPointer);
        // note: don't use Character.isDigit() here, because
        // we only want ISO-LATIN-1 digits
        if (chr >= '0' && chr <= '9') {
            tmp = (int)chr - (int)'0';
        } else {
            throw new MCLParseException("expected a digit", protocol.currentPointer - 1);
        }

        while (protocol.hasRemaining()) {
            chr = protocol.builder.charAt(protocol.currentPointer);
            protocol.currentPointer++;
            if(chr == ' ') {
                break;
            }
            tmp *= 10;
            if (chr >= '0' && chr <= '9') {
                tmp += (int)chr - (int)'0';
            } else {
                throw new MCLParseException("expected a digit", protocol.currentPointer - 1);
            }
        }
        return tmp;
    }

    static String GetNextResponseDataAsString(OldMapiProtocol protocol) throws MCLParseException {
        protocol.currentPointer++;
        if (!protocol.hasRemaining()) {
            throw new MCLParseException("unexpected end of string", protocol.currentPointer - 1);
        }
        int cnt = 0, mark = protocol.currentPointer;
        char chr;

        while (protocol.hasRemaining()) {
            chr = protocol.builder.charAt(protocol.currentPointer);
            protocol.currentPointer++;
            if(chr == ' ') {
                break;
            }
            cnt++;
        }

        protocol.currentPointer = mark;
        return protocol.builder.subSequence(0, cnt).toString();
    }
}