Ejemplo n.º 1
0
//static
void Command::parseUpdate( Tokens& tokens, bool helpMode, Command*& result )
{
    if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"update\" command" );

    CreateUpdateMode mode;

    tokens.erase( tokens.begin() );
    if ( checkString( tokens.front(), "or") ) {
        if (tokens[1].m_angen != ANGEN_CREATE) THROW( CWDB_ERR_PARSER, "Bad syntax: expected keyword \"create\"" );
        tokens.erase( tokens.begin() );
        mode = CRM_CREATE_UPDATE;
    }
    else {
        Token dummy;
        dummy.m_angen = ANGEN_CREATE;
        tokens.insert( tokens.begin(), dummy );
        mode = CRM_UPDATE;
    }

    switch( checkAngen(tokens, 1) ) {
        case ANGEN_DATASPACE:  result = new CreateDataspaceCommand( mode ); break;
        case ANGEN_COLLECTION: result = new CreateCollectionCommand( mode ); break;
        case ANGEN_METRIC:     result = new CreateMetricCommand( mode ); break;
        /*************************
            if (tokens.size() < 3 && !helpMode) THROW( CWDB_ERR_PARSER, "Bad syntax: missing options in \"create metric\" command" );
            if (checkAngen( tokens, 3) == ANGEN_ASSIGN && !helpMode)
                result = new CreateAggregationCommand( mode );
            else
                result = new CreateMetricCommand( mode );
            break;
         **************************/
        default: THROW( CWDB_ERR_PARSER, "Bad syntax: unrecognized option in \"create\" command" );
    }

    if (result != 0 && !helpMode) {
        result->parse( tokens );
    }
}