예제 #1
0
TInt CSCPParamDB :: GetValuesForParameterL(TInt aParamID, RPointerArray <HBufC>& aParamValues, const TInt32 aApp) {
    _SCPDB_LOG(_L("[CSCPParamDB]-> GetValueForParameterL >>>"));

    RDbView lDBView;
    CleanupClosePushL(lDBView);

    HBufC* lSelectQry  = HBufC :: NewLC(KSelectWhereParamIdAppID().Length() + 40);
    lSelectQry->Des().Format (KSelectWhereParamIdAppID, aParamID, aApp);

    __LEAVE_IF_ERROR(lDBView.Prepare(iParameterDB, TDbQuery(*lSelectQry)));
    __LEAVE_IF_ERROR(lDBView.EvaluateAll());
    
    if (lDBView.FirstL())
    {
    	TInt size(0);
    	TInt lRowCount = lDBView.CountL();

    	if(lRowCount == 0) {
        _SCPDB_LOG(_L("[CSCPParamDB]-> No Rows found for this parameter"));
        CleanupStack :: PopAndDestroy(2);
        return KErrNotFound;
    	}
    
    	TInt lErr(KErrNone);
    
    	do {
        lDBView.GetL();
        size = lDBView.ColDes(iColSet->ColNo(KColValueDes)).Size();

        if(size) {
            HBufC* lBuff = HBufC :: NewL(size);
            TPtr lPtr(lBuff->Des());
            lPtr.Copy(lDBView.ColDes(iColSet->ColNo(KColValueDes)));
          
            TRAP(lErr, aParamValues.AppendL(lBuff));
            
            if(lErr != KErrNone) {
                aParamValues.ResetAndDestroy();
                User :: Leave(lErr);
            }
        }
    	}
    	while(lDBView.NextL());
    }

    CleanupStack :: PopAndDestroy(2);
    _SCPDB_LOG(_L("[CSCPParamDB]-> GetValuesForParameterL <<<"));
    return KErrNone;   
}
예제 #2
0
TInt CSCPParamDB :: ListParamsUsedByAppL(RArray <TInt>& aParamIds, const TInt32 aApp) {
    _SCPDB_LOG(_L("[CSCPParamDB]-> ListParamsUsedByApp() >>>"));
    
    RDbView lDBView;
    CleanupClosePushL(lDBView);
    
    HBufC* lSelectQry(NULL);
    
    if(aApp == -1) {
        lSelectQry = HBufC :: NewLC(KSelectAllAscParamID().Length());
        lSelectQry->Des().Append(KSelectAllAscParamID);
    }
    else {
        lSelectQry = HBufC :: NewLC(KSelectWhereAppIdByAscParamID().Length() + 15);
        lSelectQry->Des().Format(KSelectWhereAppIdByAscParamID, aApp);
    }
    
    _SCPDB_LOG(_L("[CSCPParamDB]-> SQL Query: %S"), &lSelectQry->Des());
    _SCPDB_LOG(_L("[CSCPParamDB]-> Executing the query..."));
    __LEAVE_IF_ERROR(lDBView.Prepare(iParameterDB, TDbQuery(lSelectQry->Des())));
    __LEAVE_IF_ERROR(lDBView.EvaluateAll());
    
    TInt lErr(KErrNone);
    TInt lStatus(KErrNone);    
    
    TRAP(lErr, lStatus = lDBView.FirstL());
    _SCPDB_LOG(_L("[CSCPParamDB]-> Fetching values for the column KColParamId"));
    
    if(lErr == KErrNone && lStatus) {
        do {
            lDBView.GetL();
            TInt lPID = lDBView.ColInt(iColSet->ColNo(KColParamId));
            
            if(aParamIds.Find(lPID) == KErrNotFound) {
                aParamIds.AppendL(lPID);
            }
        }
        while(lDBView.NextL());
    }
    
    _SCPDB_LOG(_L("[CSCPParamDB]-> Query execution complete..."));
    CleanupStack :: PopAndDestroy(2);
    _SCPDB_LOG(_L("[CSCPParamDB]-> ListParamsUsedByApp() <<<"));
    return KErrNone;
}
예제 #3
0
int getNextToken(string *attr) {

    int esc = 0;

    int state = 0; //při hledání každého nového tokenu bude počáteční stav 0
    int c;
    strClear(attr);//vyčítím řetězec pro nové použití

    while(1) {
        c = getc(source);
        if (c == EOF && state != 0) lErr();
        switch (state) {

        /***** DEFAULT STATE *****/
        case 0:
            if (isspace(c))
                state = 0;
            else if (c == '<')
                state = 1;
            else if (c == '>')
                state = 2;
            else if (c == '!')
                state = 3;
            else if (c == '=')
                state = 4;
            else if (isdigit(c)) {
                strAddChar(attr, c);
                state = 5;
            }
            else if (isalpha(c) || c == '_') {
                strAddChar(attr, c);
                state = 11;
            }
            else if (c == '"') {
                state = 15;
            }
            else if (c == '/')
                state = 20;
            else {
                switch(c) {
                case ';':
                    return STREDNIK;
                    break;
                case '+':
                    return PLUS;
                    break;
                case '-':
                    return MINUS;
                    break;
                case '*':
                    return NASOBENI;
                    break;
                case ',':
                    return CARKA;
                    break;
                case '(':
                    return L_ZAVORKA;
                    break;
                case ')':
                    return P_ZAVORKA;
                    break;
                case '{':
                    return LS_ZAVORKA;
                    break;
                case '}':
                    return PS_ZAVORKA;
                    break;
                case EOF:
                    return FILEEND;
                    break;
                default:
                    lErr();
                    break;
                }
            }


            break;
        /***** LESS OR LESS_OR_EQUALS *****/
        case 1:
            if (c == '=')
                return MENE_NEBO_ROVNO; // token -> [<=, ]
            else if (c == '<')
                return ZAPIS; // token -> [<<, ]
            else {
                ungetc(c, source);
                return MENE; // token -> [<, ]
            }
            break;
        /***** MORE OR MORE_OR_EQUALS *****/
        case 2:
            if (c == '=')
                return VICE_NEBO_ROVNO; // token -> [>=, ]
            else if (c == '>')
                return CTENI; // token -> [>>, ]
            else {
                ungetc(c, source);
                return VICE; // token -> [>, ]
            }
            break;
        /***** NOT EQUALS *****/
        case 3:
            if (c == '=')
                return NEROVNOST; // token -> [!=, ]
            else
                lErr();
            break;
        /***** EQUALS *****/
        case 4:
            if (c == '=')
                return ROVNA_SE; // token -> [==, ]
            else {
                ungetc(c, source);
                return PRIRAZENI;
            }
            break;

        /***** INT OR DOUBLE *****/
        case 5:
            if (isdigit(c))
                strAddChar(attr, c);
            else if (c == '.') {
                strAddChar(attr, c);
                state = 6;
            }
            else if (c == 'e' || c == 'E') {
                strAddChar(attr, c);
                state = 8;
            }
            else {
                ungetc(c, source);
                return INT_V;
            } // token -> [INT_V, N]
            break;
        case 6:
            if (isdigit(c)) {
                strAddChar(attr, c);
                state = 7;
            }
            else
                lErr();
            break;
        case 7:
            if (isdigit(c))
                strAddChar(attr, c);
            else if (c == 'e' || c == 'E') {
                strAddChar(attr, c);
                state = 8;
            }
            else {
                ungetc(c, source);
                return DOUBLE_V; // token -> [DOUBLE_V, D.D]
            }
            break;
        case 8:
            if (isdigit(c)) {
                strAddChar(attr, c);
                state = 10;
            }
            else if (c == '+' || c == '-') {
                strAddChar(attr, c);
                state = 9;
            }
            else
                lErr();
            break;
        case 9:
            if (isdigit(c)) {
                strAddChar(attr, c);
                state = 10;
            }
            else
                lErr();
            break;
        case 10:
            if (isdigit(c))
                strAddChar(attr, c);
            else {
                ungetc(c, source);
                return DOUBLE_V;
            }
            break;

        /***** ID OR KEYWORD *****/
        case 11:
            if (isalnum(c) || c == '_')
                strAddChar(attr, c);
            else {
                ungetc(c, source);
                if (!strCmpConstStr(attr, "auto"))
                    return AUTO;
                else if (!strCmpConstStr(attr, "cin"))
                    return CIN;
                else if (!strCmpConstStr(attr, "cout"))
                    return COUT;
                else if (!strCmpConstStr(attr, "double"))
                    return DOUBLE;
                else if (!strCmpConstStr(attr, "else"))
                    return ELSE;
                else if (!strCmpConstStr(attr, "for"))
                    return FOR;
                else if (!strCmpConstStr(attr, "if"))
                    return IF;
                else if (!strCmpConstStr(attr, "int"))
                    return INT;
                else if (!strCmpConstStr(attr, "return"))
                    return RETURN;
                else if (!strCmpConstStr(attr, "string"))
                    return STRING;
                else
                    return ID;
            }

            break;

        /***** STRING *****/
        case 15:
            if (c == '\\') {
                state = 16;
            }
            else if (c == '"') {
                return STRING_V;
            }
            else
                strAddChar(attr, c);
            break;
        case 16:
            if (c == '\\') {
                strAddChar(attr, '\\');
                state = 15;
            }
            else if (c == 't') {
                strAddChar(attr, '\t');
                state = 15;
            }
            else if (c == 'n') {
                strAddChar(attr, '\n');
                state = 15;
            }
            else if (c == '"') {
                strAddChar(attr, '"');
                state = 15;
            }
            else if (c == 'x') {
                state = 17;
            }
            else {
                lErr();
            }
            break;
        case 17:
            if (isxdigit(c)) {
                if (c >= 'a' && c <= 'f') {
                    esc = (c - 'a' + 10) * 16;
                }
                else if (c >= 'A' && c <= 'F') {
                    esc = (c - 'A' + 10) * 16;
                }
                else {
                    esc = (c - '0') * 16;
                }
                state = 18;
            }
            else
                lErr();
            break;
        case 18:
            if (isxdigit(c)) {
                if (c == '0' && esc == 0)
                    lErr();
                if (c >= 'a' && c <= 'f') {
                    esc = esc + (c - 'a' + 10);
                }
                else if (c >= 'A' && c <= 'F') {
                    esc = esc + (c - 'A' + 10);
                }
                else {
                    esc = esc + (c - '0');
                }
                strAddChar(attr, esc);
                state = 15;
            }
            else
                lErr();
            break;

        /***** COMMENT *****/
        case 20:
            if (c == '*')
                state = 21;
            else if (c == '/')
                state = 23;
            else {
                ungetc(c, source);
                return DELENI;
            }
            break;
        case 21:
            if (c == '*')
                state = 22;
            break;
        case 22:
            if (c == '/')
                state = 0;
            else
                state = 21;
            break;
        case 23:
            if (c == '\n')
                state = 0;
            break;
        }
    }
}