public TSQLUpdateStatement Parse()
        {
            TSQLUpdateClause updateClause = new TSQLUpdateClauseParser().Parse(Tokenizer);

            Statement.Update = updateClause;

            Statement.Tokens.AddRange(updateClause.Tokens);

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.SET))
            {
                TSQLSetClause setClause = new TSQLSetClauseParser().Parse(Tokenizer);

                Statement.Set = setClause;

                Statement.Tokens.AddRange(setClause.Tokens);
            }

            if (Tokenizer.Current.IsFutureKeyword(TSQLFutureKeywords.OUTPUT))
            {
                TSQLOutputClause outputClause = new TSQLOutputClauseParser().Parse(Tokenizer);

                Statement.Output = outputClause;

                Statement.Tokens.AddRange(outputClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.FROM))
            {
                TSQLFromClause fromClause = new TSQLFromClauseParser().Parse(Tokenizer);

                Statement.From = fromClause;

                Statement.Tokens.AddRange(fromClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.WHERE))
            {
                TSQLWhereClause whereClause = new TSQLWhereClauseParser().Parse(Tokenizer);

                Statement.Where = whereClause;

                Statement.Tokens.AddRange(whereClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(Tokenizer);

                Statement.Option = optionClause;

                Statement.Tokens.AddRange(optionClause.Tokens);
            }

            return(Statement);
        }
        public TSQLDeleteStatement Parse()
        {
            TSQLDeleteClause deleteClause = new TSQLDeleteClauseParser().Parse(Tokenizer);

            Statement.Delete = deleteClause;

            Statement.Tokens.AddRange(deleteClause.Tokens);

            if (Tokenizer.Current.IsFutureKeyword(TSQLFutureKeywords.OUTPUT))
            {
                TSQLOutputClause outputClause = new TSQLOutputClauseParser().Parse(Tokenizer);

                Statement.Output = outputClause;

                Statement.Tokens.AddRange(outputClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.FROM))
            {
                TSQLFromClause fromClause = new TSQLFromClauseParser().Parse(Tokenizer);

                Statement.From = fromClause;

                Statement.Tokens.AddRange(fromClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.WHERE))
            {
                TSQLWhereClause whereClause = new TSQLWhereClauseParser().Parse(Tokenizer);

                Statement.Where = whereClause;

                Statement.Tokens.AddRange(whereClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(Tokenizer);

                Statement.Option = optionClause;

                Statement.Tokens.AddRange(optionClause.Tokens);
            }

            if (
                Tokenizer.Current?.AsKeyword != null &&
                Tokenizer.Current.AsKeyword.Keyword.IsStatementStart())
            {
                Tokenizer.Putback();
            }

            return(Statement);
        }
        public TSQLSelectStatement Parse(ITSQLTokenizer tokenizer)
        {
            TSQLSelectStatement select = new TSQLSelectStatement();

            TSQLSelectClause selectClause = new TSQLSelectClauseParser().Parse(tokenizer);

            select.Select = selectClause;

            select.Tokens.AddRange(selectClause.Tokens);

            if (tokenizer.Current.IsKeyword(TSQLKeywords.INTO))
            {
                TSQLIntoClause intoClause = new TSQLIntoClauseParser().Parse(tokenizer);

                select.Into = intoClause;

                select.Tokens.AddRange(intoClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.FROM))
            {
                TSQLFromClause fromClause = new TSQLFromClauseParser().Parse(tokenizer);

                select.From = fromClause;

                select.Tokens.AddRange(fromClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.WHERE))
            {
                TSQLWhereClause whereClause = new TSQLWhereClauseParser().Parse(tokenizer);

                select.Where = whereClause;

                select.Tokens.AddRange(whereClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.GROUP))
            {
                TSQLGroupByClause groupByClause = new TSQLGroupByClauseParser().Parse(tokenizer);

                select.GroupBy = groupByClause;

                select.Tokens.AddRange(groupByClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.HAVING))
            {
                TSQLHavingClause havingClause = new TSQLHavingClauseParser().Parse(tokenizer);

                select.Having = havingClause;

                select.Tokens.AddRange(havingClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.ORDER))
            {
                TSQLOrderByClause orderByClause = new TSQLOrderByClauseParser().Parse(tokenizer);

                select.OrderBy = orderByClause;

                select.Tokens.AddRange(orderByClause.Tokens);
            }

            if (tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(tokenizer);

                select.Option = optionClause;

                select.Tokens.AddRange(optionClause.Tokens);
            }

            if (
                tokenizer.Current != null &&
                tokenizer.Current.Type == TSQLTokenType.Keyword)
            {
                tokenizer.Putback();
            }

            return(select);
        }
Example #4
0
        public TSQLMergeStatement Parse()
        {
            TSQLMergeClause mergeClause = new TSQLMergeClauseParser().Parse(Tokenizer);

            Statement.Merge = mergeClause;

            Statement.Tokens.AddRange(mergeClause.Tokens);

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.INTO))
            {
                TSQLIntoClause intoClause = new TSQLMergeIntoClauseParser().Parse(Tokenizer);

                Statement.Into = intoClause;

                Statement.Tokens.AddRange(intoClause.Tokens);
            }

            if (Tokenizer.Current.IsFutureKeyword(TSQLFutureKeywords.USING))
            {
                TSQLUsingClause usingClause = new TSQLUsingClauseParser().Parse(Tokenizer);

                Statement.Using = usingClause;

                Statement.Tokens.AddRange(usingClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.ON))
            {
                TSQLOnClause onClause = new TSQLOnClauseParser().Parse(Tokenizer);

                Statement.On = onClause;

                Statement.Tokens.AddRange(onClause.Tokens);
            }

            while (Tokenizer.Current.IsKeyword(TSQLKeywords.WHEN))
            {
                TSQLWhenClause whenClause = new TSQLWhenClauseParser().Parse(Tokenizer);

                Statement.When.Add(whenClause);

                Statement.Tokens.AddRange(whenClause.Tokens);
            }

            if (Tokenizer.Current.IsFutureKeyword(TSQLFutureKeywords.OUTPUT))
            {
                TSQLOutputClause outputClause = new TSQLOutputClauseParser().Parse(Tokenizer);

                Statement.Output = outputClause;

                Statement.Tokens.AddRange(outputClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(Tokenizer);

                Statement.Option = optionClause;

                Statement.Tokens.AddRange(optionClause.Tokens);
            }

            return(Statement);
        }
Example #5
0
        public TSQLSelectStatement Parse()
        {
            // (SELECT 1)
            int level = 0;

            while (Tokenizer.Current.IsCharacter(TSQLCharacters.OpenParentheses))
            {
                Statement.Tokens.Add(Tokenizer.Current);

                level++;

                Tokenizer.MoveNext();

                TSQLTokenParserHelper.ReadCommentsAndWhitespace(
                    Tokenizer,
                    Statement);
            }

            TSQLSelectClause selectClause = new TSQLSelectClauseParser().Parse(Tokenizer);

            Statement.Select = selectClause;

            Statement.Tokens.AddRange(selectClause.Tokens);

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.INTO))
            {
                TSQLIntoClause intoClause = new TSQLIntoClauseParser().Parse(Tokenizer);

                Statement.Into = intoClause;

                Statement.Tokens.AddRange(intoClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.FROM))
            {
                TSQLFromClause fromClause = new TSQLFromClauseParser().Parse(Tokenizer);

                Statement.From = fromClause;

                Statement.Tokens.AddRange(fromClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.WHERE))
            {
                TSQLWhereClause whereClause = new TSQLWhereClauseParser().Parse(Tokenizer);

                Statement.Where = whereClause;

                Statement.Tokens.AddRange(whereClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.GROUP))
            {
                TSQLGroupByClause groupByClause = new TSQLGroupByClauseParser().Parse(Tokenizer);

                Statement.GroupBy = groupByClause;

                Statement.Tokens.AddRange(groupByClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.HAVING))
            {
                TSQLHavingClause havingClause = new TSQLHavingClauseParser().Parse(Tokenizer);

                Statement.Having = havingClause;

                Statement.Tokens.AddRange(havingClause.Tokens);
            }

            while (level > 0 && Tokenizer.Current.IsCharacter(TSQLCharacters.CloseParentheses))
            {
                Statement.Tokens.Add(Tokenizer.Current);

                level--;

                Tokenizer.MoveNext();
            }

            while (Tokenizer.Current?.AsKeyword != null &&
                   Tokenizer.Current.AsKeyword.Keyword.In(
                       TSQLKeywords.UNION,
                       TSQLKeywords.EXCEPT,
                       TSQLKeywords.INTERSECT))
            {
                TSQLSetOperatorClause set = new TSQLSetOperatorClauseParser().Parse(Tokenizer);

                Statement.SetOperators.Add(set);

                Statement.Tokens.AddRange(set.Tokens);
            }

            while (level > 0 && Tokenizer.Current.IsCharacter(TSQLCharacters.CloseParentheses))
            {
                Statement.Tokens.Add(Tokenizer.Current);

                level--;

                Tokenizer.MoveNext();
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.ORDER))
            {
                TSQLOrderByClause orderByClause = new TSQLOrderByClauseParser().Parse(Tokenizer);

                Statement.OrderBy = orderByClause;

                Statement.Tokens.AddRange(orderByClause.Tokens);
            }

            // order for OPTION and FOR doesn't seem to matter
            while (
                Tokenizer.Current.IsKeyword(TSQLKeywords.FOR) ||
                Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                if (Tokenizer.Current.IsKeyword(TSQLKeywords.FOR))
                {
                    TSQLForClause forClause = new TSQLForClauseParser().Parse(Tokenizer);

                    Statement.For = forClause;

                    Statement.Tokens.AddRange(forClause.Tokens);
                }

                if (Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
                {
                    TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(Tokenizer);

                    Statement.Option = optionClause;

                    Statement.Tokens.AddRange(optionClause.Tokens);
                }
            }

            return(Statement);
        }
Example #6
0
        public TSQLSelectStatement Parse()
        {
            TSQLSelectClause selectClause = new TSQLSelectClauseParser().Parse(Tokenizer);

            Statement.Select = selectClause;

            Statement.Tokens.AddRange(selectClause.Tokens);

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.INTO))
            {
                TSQLIntoClause intoClause = new TSQLIntoClauseParser().Parse(Tokenizer);

                Statement.Into = intoClause;

                Statement.Tokens.AddRange(intoClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.FROM))
            {
                TSQLFromClause fromClause = new TSQLFromClauseParser().Parse(Tokenizer);

                Statement.From = fromClause;

                Statement.Tokens.AddRange(fromClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.WHERE))
            {
                TSQLWhereClause whereClause = new TSQLWhereClauseParser().Parse(Tokenizer);

                Statement.Where = whereClause;

                Statement.Tokens.AddRange(whereClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.GROUP))
            {
                TSQLGroupByClause groupByClause = new TSQLGroupByClauseParser().Parse(Tokenizer);

                Statement.GroupBy = groupByClause;

                Statement.Tokens.AddRange(groupByClause.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.HAVING))
            {
                TSQLHavingClause havingClause = new TSQLHavingClauseParser().Parse(Tokenizer);

                Statement.Having = havingClause;

                Statement.Tokens.AddRange(havingClause.Tokens);
            }

            if (Tokenizer.Current?.AsKeyword != null &&
                Tokenizer.Current.AsKeyword.Keyword.In(
                    TSQLKeywords.UNION,
                    TSQLKeywords.EXCEPT,
                    TSQLKeywords.INTERSECT))
            {
                TSQLSetOperatorClause set = new TSQLSetOperatorClauseParser().Parse(Tokenizer);

                Statement.SetOperator = set;

                Statement.Tokens.AddRange(set.Tokens);
            }

            if (Tokenizer.Current.IsKeyword(TSQLKeywords.ORDER))
            {
                TSQLOrderByClause orderByClause = new TSQLOrderByClauseParser().Parse(Tokenizer);

                Statement.OrderBy = orderByClause;

                Statement.Tokens.AddRange(orderByClause.Tokens);
            }

            // order for OPTION and FOR doesn't seem to matter
            while (
                Tokenizer.Current.IsKeyword(TSQLKeywords.FOR) ||
                Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
            {
                if (Tokenizer.Current.IsKeyword(TSQLKeywords.FOR))
                {
                    TSQLForClause forClause = new TSQLForClauseParser().Parse(Tokenizer);

                    Statement.For = forClause;

                    Statement.Tokens.AddRange(forClause.Tokens);
                }

                if (Tokenizer.Current.IsKeyword(TSQLKeywords.OPTION))
                {
                    TSQLOptionClause optionClause = new TSQLOptionClauseParser().Parse(Tokenizer);

                    Statement.Option = optionClause;

                    Statement.Tokens.AddRange(optionClause.Tokens);
                }
            }

            if (
                Tokenizer.Current?.AsKeyword != null &&
                Tokenizer.Current.AsKeyword.Keyword.IsStatementStart())
            {
                Tokenizer.Putback();
            }

            return(Statement);
        }