Beispiel #1
0
        private bool checkCondition(TExpression[] expression)
        {
            string expr = expression[0].ToScript();

            if (string.ReferenceEquals(expr, null))
            {
                return(false);
            }

            if (expr.IndexOf("@") == -1)
            {
                return(true);
            }

            TSourceToken     start  = expression[0].startToken;
            TSourceToken     end    = expression[0].endToken;
            TSourceTokenList stlist = start.container;

            //int t = 0;
            for (int k = start.posinlist; k <= end.posinlist; k++)
            {
                if (stlist[k].tokentype == ETokenType.ttsqlvar)
                {
                    return(false);
                }
            }
            return(true);
        }
Beispiel #2
0
        private void checkTryCatchClause(procedureInfo procedureInfo, TMssqlCreateProcedure procedure)
        {
            TSourceTokenList tokenList = procedure.sourcetokenlist;

            for (int i = 0; i < tokenList.size(); i++)
            {
                TSourceToken token = tokenList.get(i);
                if (token.tokentype == ETokenType.ttkeyword && token.astext.Trim().Equals("try", StringComparison.OrdinalIgnoreCase))
                {
                    procedureInfo.hasTryCatch = true;
                }
            }
        }
Beispiel #3
0
        private static bool verifyTokens(TSourceTokenList originalTokens, TSourceTokenList targetTokens, bool partialChecking)
        {
            bool result            = true;
            int  old               = 0;
            bool startParenthesis  = false;
            int  nestedParenthesis = 0;

            for (int i = 0; i < targetTokens.size(); i++)
            {
                if (targetTokens.get(i).tokentype == ETokenType.ttkeyword)
                {
                    // must a space after keyword
                    if (i != targetTokens.size() - 1)
                    {
                        if ((targetTokens.get(i + 1).tokencode == TBaseType.lexnewline) || (targetTokens.get(i + 1).tokencode == TBaseType.lexspace) || (targetTokens.get(i + 1).tokencode < 127))
                        {
                            continue;
                        }
                        else
                        {
                            Console.Write("lack space after keyword:" + targetTokens.get(i).ToString());
                            result = false;
                            break;
                        }
                    }
                }

                if (targetTokens.get(i).tokentype == ETokenType.ttidentifier)
                {
                    // must a space between identifier and keyword/identifier
                    if (i != 0)
                    {
                        if ((targetTokens.get(i - 1).tokentype == ETokenType.ttkeyword) || (targetTokens.get(i - 1).tokentype == ETokenType.ttidentifier))
                        {
                            Console.Write("lack space between identifier and keyword:" + targetTokens.get(i).ToString());
                            result = false;
                            break;
                        }
                        else
                        {
                            continue;
                        }
                    }
                }
            }

            if (!result)
            {
                return(result);
            }

            for (int i = 0; i < originalTokens.size(); i++)
            {
                if ((originalTokens.get(i).tokencode == TBaseType.lexnewline) || (originalTokens.get(i).tokencode == TBaseType.lexspace) ||
                    (originalTokens.get(i).tokentype == ETokenType.ttsimplecomment) || ((originalTokens.get(i).tokentype == ETokenType.ttbracketedcomment) && (!originalTokens.get(i).ToString().StartsWith("/*+", StringComparison.Ordinal))) ||
                    (originalTokens.get(i).tokentype == ETokenType.ttsemicolon))
                {
                    continue;
                }

                if (partialChecking)
                {
                    if (originalTokens.get(i).tokencode == '(')
                    {
                        startParenthesis = true;
                        nestedParenthesis++;
                    }
                    else if (originalTokens.get(i).tokencode == ')')
                    {
                        if (nestedParenthesis > 0)
                        {
                            nestedParenthesis--;
                        }
                        if ((nestedParenthesis == 0) && startParenthesis)
                        {
                            result = true;
                            break;
                        }
                    }
                }

                result = false;
                for (int j = old; j < targetTokens.size(); j++)
                {
                    if ((targetTokens.get(j).tokencode == TBaseType.lexnewline) || (targetTokens.get(j).tokencode == TBaseType.lexspace) ||
                        (targetTokens.get(j).tokentype == ETokenType.ttsimplecomment) || ((targetTokens.get(j).tokentype == ETokenType.ttbracketedcomment) && (!targetTokens.get(i).ToString().StartsWith("/*+", StringComparison.Ordinal))) ||
                        (targetTokens.get(j).tokentype == ETokenType.ttsemicolon))
                    {
                        continue;
                    }

                    if ((originalTokens.get(i).tokencode == TBaseType.outer_join) && (targetTokens.get(j).tokencode == TBaseType.outer_join))
                    {
                        result = true;
                    }
                    else
                    {
                        result = originalTokens.get(i).ToString().Equals(targetTokens.get(j).ToString(), StringComparison.CurrentCultureIgnoreCase);
                    }

                    old = j + 1;
                    break;
                }

                if (!result)
                {
                    Console.Write("source token:" + originalTokens.get(i).ToString() + "(" + originalTokens.get(i).lineNo + "," + originalTokens.get(i).columnNo + ")");
                    Console.Write(", target token:" + targetTokens.get(old - 1).ToString() + "(" + targetTokens.get(old - 1).lineNo + "," + targetTokens.get(old - 1).columnNo + ")");
                    break;
                }
                //            if (! result) break;
            }


            return(result);
        }
Beispiel #4
0
 private void checkFunction(spInfo spInfo, TSourceTokenList tokenList)
 {
     for (int i = 0; i < tokenList.size(); i++)
     {
         TSourceToken token = tokenList.get(i);
         if (token.DbObjType == EDbObjectType.function)
         {
             List <TParseTreeNode> list = token.nodesStartFromThisToken;
             for (int j = 0; j < list.Count; j++)
             {
                 TParseTreeNode node = (TParseTreeNode)list[j];
                 if (node is TFunctionCall)
                 {
                     builtInFunctionInfo function = new builtInFunctionInfo();
                     function.function = token.astext;
                     function.lineNo   = token.lineNo;
                     function.columnNo = token.columnNo;
                     TCustomSqlStatement stmt = token.stmt;
                     if (stmt == null)
                     {
                         bool flag = false;
                         for (int k = token.posinlist - 1; k >= 0; k--)
                         {
                             TSourceToken before = node.Gsqlparser.sourcetokenlist.get(k);
                             if (token.nodesStartFromThisToken != null)
                             {
                                 for (int z = 0; z < before.nodesStartFromThisToken.Count; z++)
                                 {
                                     if (before.nodesStartFromThisToken[z] is TCustomSqlStatement)
                                     {
                                         TCustomSqlStatement tempStmt = (TCustomSqlStatement)before.nodesStartFromThisToken[z];
                                         if (tempStmt.startToken.posinlist <= token.posinlist && tempStmt.endToken.posinlist >= token.posinlist)
                                         {
                                             stmt = tempStmt;
                                             flag = true;
                                             break;
                                         }
                                     }
                                 }
                             }
                             if (flag)
                             {
                                 break;
                             }
                         }
                     }
                     if (stmt is TInsertSqlStatement)
                     {
                         function.stmtType = usageType.Insert;
                     }
                     else if (stmt is TSelectSqlStatement)
                     {
                         function.stmtType = usageType.Read;
                     }
                     else if (stmt is TUpdateSqlStatement)
                     {
                         function.stmtType = usageType.Update;
                     }
                     else if (stmt is TDeleteSqlStatement)
                     {
                         function.stmtType = usageType.Delete;
                     }
                     else if (stmt is TMssqlDropTable)
                     {
                         function.stmtType = usageType.Drop;
                     }
                     else if (stmt is TDropTableSqlStatement)
                     {
                         function.stmtType = usageType.Drop;
                     }
                     else if (stmt is TMssqlExecute)
                     {
                         function.stmtType = usageType.Exec;
                     }
                     else if (stmt is TMssqlCreateProcedure)
                     {
                         function.stmtType = usageType.Create;
                     }
                     spInfo.functions.Add(function);
                 }
             }
         }
     }
 }