private FrostIDMLStatement GetDMLStatementType(string input) { FrostIDMLStatement result = null; if (input.Contains(QueryKeywords.SELECT)) { result = new SelectStatement(); } if (input.Contains(QueryKeywords.UPDATE)) { result = new UpdateStatement(); } if (input.Contains(QueryKeywords.INSERT)) { result = new InsertStatement(); } if (input.Contains(QueryKeywords.DELETE)) { result = new DeleteStatement(); } return(result); }
public QueryPlan GeneratePlan(FrostIDMLStatement statement) { var plan = new QueryPlan(); if (statement is SelectStatement) { plan = new SelectQueryPlanGenerator(_process).GeneratePlan((statement as SelectStatement)); } if (statement is InsertStatement) { plan = new InsertQueryPlanGenerator(_process).GeneratePlan((statement as InsertStatement)); } if (statement is UpdateStatement) { plan = new UpdateQueryPlanGenerator(_process).GeneratePlan((statement as UpdateStatement)); } if (statement is DeleteStatement) { plan = new DeleteQueryPlanGenerator(_process).GeneratePlan((statement as DeleteStatement)); } return(plan); }
public QueryPlan GeneratePlan(FrostIDMLStatement statement, string databaseName) { QueryPlan plan = GeneratePlan(statement); plan.DatabaseName = databaseName; return(plan); }
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); }
public QueryPlan GetPlan(string input) { var plan = new QueryPlan(); var items = input.Split(';'); var databaseStatement = string.Empty; var commandStatement = string.Empty; if (items.Count() > 0) { databaseStatement = items[0]; commandStatement = items[1]; } var databaseName = GetDatabaseName(databaseStatement); if (IsDDLStatment(input)) { FrostIDDLStatement statement = GetDDLStatement(commandStatement, databaseName); if (string.IsNullOrEmpty(statement.DatabaseName)) { statement.DatabaseName = databaseName; } else { databaseName = statement.DatabaseName; } plan = _planGenerator.GeneratePlan(statement, databaseName); } else { FrostIDMLStatement statement = GetDMLStatement(commandStatement, databaseName); statement.DatabaseName = databaseName; if (!statement.IsValid) { var step = new SearchStep(); step.IsValid = false; plan.Steps.Add(step); } else { plan = _planGenerator.GeneratePlan(statement, databaseName); } } return(plan); }
public TSqlParserListenerExtended(FrostIDMLStatement statement, string input) { _dmlStatement = statement; _input = input; }