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); }
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); }
public TSqlWalker(ParseTreeWalker walker, TSqlParserListenerExtended loader, IParseTree tree) { _walker = new ParseTreeWalker(); _loader = loader; _tree = tree; }