view src/main/java/nl/cwi/monetdb/mcl/protocol/oldmapi/OldMapiServerResponseParser.java @ 120:02f560eb3cf2 embedded

Major change in the Datablock response. Removed the arrays creation in the Embedded connection, so it will run much faster now. It can be possible to do it as well in the MAPI connection, but in the way the Old Mapi Protocol is designed, it will be very complicated (ByteBuffers are designed to work with binary data instead of textual data :S). I think it's better to wait for the new protocol, which will be much faster and easier to parse.
author Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
date Tue, 28 Feb 2017 16:57:27 +0100 (2017-02-28)
parents 1dcb51573c89
children 6c74540a8e6b
line wrap: on
line source
/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0.  If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * Copyright 1997 - July 2008 CWI, August 2008 - 2017 MonetDB B.V.
 */

package nl.cwi.monetdb.mcl.protocol.oldmapi;

import nl.cwi.monetdb.mcl.protocol.ServerResponses;

/**
 * This class parses the next server response on a MAPI connection using the next ASCII character on the stream.
 *
 * @author Fabian Groffen, Pedro Ferreira
 */
final class OldMapiServerResponseParser {

    private OldMapiServerResponseParser() {}

    /**
     * Retrieves the next server response from an old MAPI protocol instance.
     *
     * @param protocol An Old MAPI protocol instance from which the next server response will be retrieved
     * @return The integer representation of the next server response
     */
    static int ParseOldMapiServerResponse(OldMapiProtocol protocol) {
        int res;
        switch (protocol.lineBuffer.get()) {
            case '!':
                res = ServerResponses.ERROR;
                break;
            case '&':
                res = ServerResponses.SOHEADER;
                break;
            case '%':
                res = ServerResponses.HEADER;
                break;
            case '[':
                res = ServerResponses.RESULT;
                break;
            case '=':
                res = ServerResponses.RESULT;
                break;
            case '^':
                res = ServerResponses.REDIRECT;
                break;
            case '#':
                res = ServerResponses.INFO;
                break;
            case '.':
                res = ServerResponses.PROMPT;
                break;
            case ',':
                res = ServerResponses.MORE;
                break;
            default:
                res = ServerResponses.UNKNOWN;
        }
        return res;
    }
}