Пример #1
0
        public MainWindow()
        {
            InitializeComponent();

            var testQuery1 = @"SELECT COUNT(1) AS Col1, Table1.Column1 AS Col2";
            var testQuery2 = @"SELECT Table1.Column1, Table2.Column2
FROM Table1 INNER JOIN Table2 T2 ON T2.Id = Table1.Id
WHERE T2.Id < 300 AND Table1.Id > 10 AND Table1.Name LIKE '%Svensson' 
ORDER BY T2.Id";

            var test3 = "server.[Databas 1].dbo.[Id Column 2]";

            //var p = new SqlTokenizer(x => new Lexer(x));
            //var result = p.Process(testQuery2);

            //var parser = new sql1();
            //var result = parser.Parse("SELECT COUNT(1) AS Col1, COUNT(1) Col3, Table1.Column1 AS Col2, Table1.Column1 FROM Table1 T2");

            //var parser = new FuzzySqlParser();
            //var result = parser.Parse("SELECT COUNT(1) AS Col1, COUNT(1) Col3, Table1.Column1 AS Col2, Table1.Column1 , (SELECT * FROM SOMETHING) AS T INSERT INTO Table WHERE x = y");

            var lexer = new SqlParser.Lexer("1234.123+456456");

            var result = lexer.Tokenize();


            Console.WriteLine("Antal = " + result.ToString());
        }
Пример #2
0
        public MainWindow()
        {
            InitializeComponent();

            var testQuery1 = @"SELECT COUNT(1) AS Col1, Table1.Column1 AS Col2";
            var testQuery2 = @"SELECT Table1.Column1, Table2.Column2
            FROM Table1 INNER JOIN Table2 T2 ON T2.Id = Table1.Id
            WHERE T2.Id < 300 AND Table1.Id > 10 AND Table1.Name LIKE '%Svensson'
            ORDER BY T2.Id";

            var test3 = "server.[Databas 1].dbo.[Id Column 2]";

            //var p = new SqlTokenizer(x => new Lexer(x));
            //var result = p.Process(testQuery2);

            //var parser = new sql1();
            //var result = parser.Parse("SELECT COUNT(1) AS Col1, COUNT(1) Col3, Table1.Column1 AS Col2, Table1.Column1 FROM Table1 T2");

            //var parser = new FuzzySqlParser();
            //var result = parser.Parse("SELECT COUNT(1) AS Col1, COUNT(1) Col3, Table1.Column1 AS Col2, Table1.Column1 , (SELECT * FROM SOMETHING) AS T INSERT INTO Table WHERE x = y");

            var lexer = new SqlParser.Lexer("1234.123+456456");

            var result = lexer.Tokenize();

            Console.WriteLine("Antal = " + result.ToString());
        }
Пример #3
0
        protected bool IsMatchingString(Lexer lexer, string text)
        {
            if (lexer.Current == text[0])
            {
                if (text.Length == 1)
                {
                    lexer.Next();
                    return true;
                }

                if (lexer.Peek == text[1])
                {
                    if (text.Length == 2)
                    {
                        lexer.Next();
                        lexer.Next();
                        return true;
                    }
                    else
                    {
                        throw new NotImplementedException("Har inte implementerat lämförelse för strängar än två tecken.");
                    }
                }
            }
            return false;
        }
Пример #4
0
        public override bool Match(Lexer lexer, out State result)
        {
            int startPos = lexer.Pos;
            if (IsMatchingString(lexer, MatchString))
            {
                result = new State(Type, startPos, lexer.Pos - startPos);
                return true;
            }

            result = new State();
            return false;
        }
Пример #5
0
        public override bool Match(Lexer lexer, out State result)
        {
            int startPos = lexer.Pos;

            if (IsMatchingString(lexer, Start))
            {
                if (EscapeCharacter == null)
                {
                    do
                    {
                        if (IsMatchingString(lexer, End))
                        {
                            result = new State(Type, startPos, lexer.Pos - startPos);
                            return true;
                        }
                    } while (lexer.Next());

                    // Det här är specialfall som uppstår om man inte har något sluttecken och vi kommer till slutet på texten.
                    // I teorin är det inte en träff, men jag vill ändå räkna det som en träff fast som inte är komplett.
                    result = new State(Type, startPos, lexer.Pos - startPos, true);
                    return true;
                }
                else
                {
                    do
                    {
                        if (lexer.Current == EscapeCharacter)
                        {
                            // Är det nuvarande tecknet samma som escape så hoppa över det och nästa.
                            lexer.Next();
                        }
                        else if (IsMatchingString(lexer, End))
                        {
                            result = new State(Type, startPos, lexer.Pos - startPos);
                            return true;
                        }
                    } while (lexer.Next());

                    // Det här är specialfall som uppstår om man inte har något sluttecken och vi kommer till slutet på texten.
                    // I teorin är det inte en träff, men jag vill ändå räkna det som en träff fast som inte är komplett.
                    result = new State(Type, startPos, lexer.Pos - startPos, true);
                    return true;
                }
            }

            result = new State();
            return false;
        }
Пример #6
0
 public abstract bool Match(Lexer lexer, out State result);
Пример #7
0
        public override bool Match(Lexer lexer, out State result)
        {
            if (!lexer.IsLetter)
            {
                result = new State();
                return false;
            }

            int startPos = lexer.Pos;

            while (lexer.Next())
            {
                if (!(lexer.IsLetterOrDigit || lexer.Current == '_'))
                    break;
            }

            var foundWord = lexer.GetSubArray(startPos, lexer.Pos - startPos).ToString().ToUpper();
            result = new State(SpecialWords.ContainsKey(foundWord) ? SpecialWords[foundWord] : Type, startPos, lexer.Pos - startPos);
            return true;
        }