static void ParseDDLClause(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.ddl_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()); } Console.Write("Press enter key to continue"); Console.ReadLine(); }
private FrostIDDLStatement GetDDLStatement(string input, string databaseName) { FrostIDDLStatement 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.ddl_clause(); ParseTreeWalker walker = new ParseTreeWalker(); loader = new TSqlParserListenerExtended(GetDDLStatementType(sqlStatement), sqlStatement); loader.TokenStream = tokens; walker.Walk(loader, parseTree); if (loader.IsStatementCreateTable()) { result = loader.GetStatementAsCreateTable(); } if (loader.IsStatementCreateDatabase()) { result = loader.GetStatementAsCreateDatabase(); } return(result); }