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(); }
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); }
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(); }
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(""); }