bool ValidateQqlRequest::getState()

in src/dxapi/native/tickdb/http/xml/validate_qql_request.cpp [55:113]


bool ValidateQqlRequest::getState(QqlState &state)
{
    state.tokens.reset();
    state.errorLocation.value = -1;

    if (!executeAndParseResponse()) {
        return false;
    }

    XMLElement * rootElement = response_.root();

    if (!nameEquals(rootElement, "validateQQLResponse")) {
        return false;
    }

    XMLElement * resultElement = rootElement->FirstChildElement("result");

    if (NULL == resultElement) {
        DBGLOGERR((string*)NULL, "ERR: 'result' element not found!");
        return false;
    }


    XMLElement * tokensElement = resultElement->FirstChildElement("tokens");

    /*if (NULL == tokensElement) {
        DBGLOGERR((string*)NULL, "ERR: 'tokens' element not found!");
        return false;
    }*/

    auto errorLocationText = getText(resultElement, "errorLocation");
    state.errorLocation.value = -1;
    if (NULL != errorLocationText && !parse(state.errorLocation, errorLocationText)) {
        DBGLOGERR((string*)NULL, "ERR: Unable to parse 'errorLocation' field!");
        return false;
    }

    if (NULL != tokensElement) {
        std::vector<QqlState::Token> tokens;
        for (XMLElement * item = (XMLElement *)tokensElement; NULL != item; item = item->NextSiblingElement("tokens")) {
            QqlState::Token token;
            if (!parse(token, item)) {
                DBGLOGERR((string*)NULL, "ERR: Unable to parse qql state token!");
                return false;
            }

            tokens.push_back(token);
            //tokens.push_back(QqlState::Token());
            /*if (!parse(tokens[tokens.size() - 1], getText(item))) {
                DBGLOGERR((string*)NULL, "ERR: Unable to parse qql state token!");
                return false;
                }*/
        }

        state.tokens = tokens;
    }

    return true;
}