Beispiel #1
0
PARSENODE_PTR SQLParser::parseStatement() {
    if (!startsStatement(nowReading)) {
        syntaxError(nowReading, "expect start token!");
        return nullptr;
    }
    if (startsCreate(nowReading)) {
        return parseCreate();
    }
    else if (startsSelect(nowReading)) {
        return parseSelect();
    }
    else if (startsDelete(nowReading)) {
        return parseDelete();
    }
    else if (startsInsert(nowReading)) {
        return parseInsert();
    }
    else if (startsDrop(nowReading)) {
        return parseDrop();
    }
    else if (nowReading == QUIT) {
        readToken();
        expect(TERMINATOR);
        return PARSENODE_PTR(new ParseNode(QUIT));
    }
    else if (nowReading == EXECFILE) {
        readToken();
        expect(TERMINATOR);
        return PARSENODE_PTR(new ParseNode(EXECFILE));
    }
    else {
        assert(false);
        return nullptr;
    }
}
Beispiel #2
0
//static
Command* Command::parseTokens( Tokens& tokens, bool helpMode )
{
    if (tokens.empty()) THROW( CWDB_ERR_PARSER, "Bad syntax: no tokens to parse");
    Command* result = 0;
    try {
        switch(tokens.front().m_angen) {
            case ANGEN_CREATE:   parseCreate( tokens, helpMode, result ); break;
            case ANGEN_DESCR:    parseDescr( tokens, helpMode, result ); break;
            case ANGEN_DROP:     parseDrop( tokens, helpMode, result ); break;
            case ANGEN_DUMP:     parseDump( tokens, helpMode, result ); break;
            case ANGEN_GET:
            case ANGEN_SET:
            case ANGEN_PUT:      parseInput( tokens, helpMode, result ); break;
            case ANGEN_QUERY:    parseQuery( tokens, helpMode, result ); break;
            case ANGEN_USE:      parseUse( tokens, helpMode, result ); break;
            case ANGEN_GENERATE: parseGenerate( tokens, helpMode, result ); break;
            case ANGEN_VERSION:  parseVersion( tokens, helpMode, result ); break;
            case ANGEN_FORMAT:   parseFormat( tokens, helpMode, result ); break;
            case ANGEN_COMPACT:  parseCompact( tokens, helpMode, result ); break;
            case ANGEN_UPDATE:   parseUpdate( tokens, helpMode, result ); break;
            case ANGEN_START:
            case ANGEN_STOP:     parseStart( tokens, helpMode, result ); break;
            case ANGEN_EXPORT:   parseExport( tokens, helpMode, result ); break;
            case ANGEN_IMPORT:   parseImport( tokens, helpMode, result ); break;
            default: THROW( CWDB_ERR_PARSER, "Bad syntax: unknown command" );
        }
    }
    catch (CWDBException& e) {
        if (result != 0) {
            delete result;
            result = 0;
        }
        throw e;
    }

    return result;
}