Esempio n. 1
0
        private static List <string> GetParameterNames(string sql)
        {
            List <string>             l    = new List <string>();
            Dictionary <string, bool> dict = new Dictionary <string, bool>();
            TokenizedSQL tsql = new TokenizedSQL(sql);
            int          n    = tsql.Tokens.Length;

            for (int i = 0; i < n; i++)
            {
                Token t = tsql.Tokens[i];
                if (t.ID == TokenID.Colon)
                {
                    i++;
                    t = tsql.Tokens[i];
                    Token t0 = t;
                    for (; i < n && tsql.Tokens[i].ID == TokenID.Identifier; t = tsql.Tokens[i++])
                    {
                        ;
                    }
                    string p = DequoteIdentifier(tsql.Extract(t0, t));
                    if (!dict.ContainsKey(p))
                    {
                        l.Add(p);
                        dict.Add(p, true);
                    }
                }
            }
            return(l);
        }
Esempio n. 2
0
        public override SQLParts SplitSQL(string sql)
        {
            List <SQLPart> l    = new List <SQLPart>();
            TokenizedSQL   tsql = new TokenizedSQL(sql);
            int            i    = 0;
            int            n    = tsql.Tokens.Length;

            while (i < n)
            {
                //Token t = tsql.Tokens[i];
                for (; i < n; i++)
                {
                    Token t = tsql.Tokens[i];
                    if (t.Kind != TokenKind.Space && t.Kind != TokenKind.NewLine && t.Kind != TokenKind.Comment)
                    {
                        break;
                    }
                }
                int   i0           = i;
                Token t0           = tsql.Tokens[i0];
                bool  endByNewLine = false;
                if (t0.Kind == TokenKind.Identifier && (string.Compare(t0.Value, "begin") == 0 || string.Compare(t0.Value, "start") == 0))
                {
                    endByNewLine = true;
                }
                for (; i < n && tsql.Tokens[i].Kind != TokenKind.Semicolon && (!endByNewLine || tsql.Tokens[i].Kind != TokenKind.NewLine); i++)
                {
                    ;
                }
                string  s  = tsql.Extract(t0, tsql.Tokens[i - 1]);
                SQLPart sp = new SQLPart()
                {
                    Offset         = t0.Start.Index,
                    SQL            = s,
                    ParameterNames = GetParameterNames(s).ToArray(),
                };
                l.Add(sp);
                i++;
            }

            return(new SQLParts()
            {
                Items = l.ToArray(),
                ParameterNames = GetParameterNames(sql).ToArray()
            });
        }