Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        public QueryPlan GeneratePlan(FrostIDMLStatement statement, string databaseName)
        {
            QueryPlan plan = GeneratePlan(statement);

            plan.DatabaseName = databaseName;
            return(plan);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public TSqlParserListenerExtended(FrostIDMLStatement statement, string input)
 {
     _dmlStatement = statement;
     _input        = input;
 }