示例#1
0
        static void ParseUsingDrummer(string input)
        {
            AntlrInputStream  inputStream = new AntlrInputStream(input);
            TSqlLexer         lexer       = new TSqlLexer(inputStream);
            CommonTokenStream tokens      = new CommonTokenStream(lexer);
            TSqlParser        parser      = new TSqlParser(tokens);

            var errorHandler = new SyntaxErrorListener();

            parser.AddErrorListener(errorHandler);


            var             parseTree = parser.dml_clause();
            ParseTreeWalker walker    = new ParseTreeWalker();
            var             loader    = new Drum.SQLParser();

            loader.TokenStream = tokens;
            walker.Walk(loader, parseTree);
            Console.WriteLine("Parse Tree:");
            Console.WriteLine(parseTree.ToStringTree(parser));

            Console.WriteLine("Errors:");
            foreach (var error in errorHandler.Errors)
            {
                Console.WriteLine(error.Message + " at position " + error.Line.ToString() + ":" + error.CharPositionInLine.ToString());
            }

            Console.Write("Press enter key to read predicate bucket");
            Console.ReadLine();

            loader.DebugBucket();

            Console.Write("Press enter key to continue");
            Console.ReadLine();
        }
示例#2
0
        private FrostIDMLStatement GetDMLStatement(string input, string databaseName)
        {
            FrostIDMLStatement         result = null;
            TSqlParserListenerExtended loader;
            var sqlStatement = string.Empty;

            if (HasParticipant(input))
            {
                sqlStatement = RemoveParticipantKeyword(input);
            }
            else
            {
                sqlStatement = input;
            }

            AntlrInputStream  inputStream = new AntlrInputStream(sqlStatement);
            TSqlLexer         lexer       = new TSqlLexer(inputStream);
            CommonTokenStream tokens      = new CommonTokenStream(lexer);
            TSqlParser        parser      = new TSqlParser(tokens);
            var             parseTree     = parser.dml_clause();
            ParseTreeWalker walker        = new ParseTreeWalker();

            loader             = new TSqlParserListenerExtended(GetDMLStatementType(sqlStatement), sqlStatement);
            loader.TokenStream = tokens;
            walker.Walk(loader, parseTree);

            if (loader.DMLStatement is InsertStatement)
            {
                var item = loader.DMLStatement as InsertStatement;
                item.Participant       = GetParticipant(GetParticipantString(input));
                item.ParticipantString = GetParticipantString(input);
                item.DatabaseName      = databaseName;
                if (item.Participant is null)
                {
                    item.Participant = new Participant(_process.GetLocation());
                }
                result = item;
            }
            else if (loader.DMLStatement is UpdateStatement)
            {
                var item = loader.DMLStatement as UpdateStatement;
                item.DatabaseName = databaseName;
                item.SetProcess(_process);
                result = item as FrostIDMLStatement;
            }
            else
            {
                result = loader.DMLStatement;
            }

            return(result);
        }
示例#3
0
        static void ParseInput(string input)
        {
            AntlrInputStream  inputStream = new AntlrInputStream(input);
            TSqlLexer         lexer       = new TSqlLexer(inputStream);
            CommonTokenStream tokens      = new CommonTokenStream(lexer);
            TSqlParser        parser      = new TSqlParser(tokens);

            var errorHandler = new SyntaxErrorListener();

            parser.AddErrorListener(errorHandler);


            var                        parseTree = parser.dml_clause();
            ParseTreeWalker            walker    = new ParseTreeWalker();
            TSqlParserListenerExtended loader    = new TSqlParserListenerExtended(new SelectStatement());

            loader.TokenStream = tokens;
            walker.Walk(loader, parseTree);
            Console.WriteLine("Parse Tree:");
            Console.WriteLine(parseTree.ToStringTree(parser));

            Console.WriteLine("Errors:");
            foreach (var error in errorHandler.Errors)
            {
                Console.WriteLine(error.Message + " at position " + error.Line.ToString() + ":" + error.CharPositionInLine.ToString());
            }

            if (input.Contains("SELECT"))
            {
                var selectStatement = loader.GetStatementAsSelect();
                var text            = JsonConvert.SerializeObject(selectStatement);
                Console.WriteLine("Review Parse. Press any key to continue.");
                Console.ReadLine();
                Console.WriteLine(text);

                Console.WriteLine("Executing Generated Plan");
                GeneratePlan(selectStatement);
            }

            Console.Write("Press enter key to continue");
            Console.ReadLine();
        }
示例#4
0
        private void Boom(string input)
        {
            Debug.WriteLine("Boom");
            AntlrInputStream  inputStream = new AntlrInputStream(input);
            TSqlLexer         lexer       = new TSqlLexer(inputStream);
            CommonTokenStream tokens      = new CommonTokenStream(lexer);
            TSqlParser        parser      = new TSqlParser(tokens);
            // these all appear to work in some way
            var parseTree = parser.dml_clause();
            //var parseTree = parser.query_specification();
            //var parseTree = parser.query_expression();
            ParseTreeWalker            walker = new ParseTreeWalker();
            TSqlParserListenerExtended loader = new TSqlParserListenerExtended();

            walker.Walk(loader, parseTree);
            Debug.WriteLine("---");
            Debug.WriteLine(parseTree.ToStringTree(parser));

            var item = lexer.Vocabulary;

            Debug.WriteLine("");
        }