Exemplo n.º 1
0
        private SqlInfixOperationNode ParseUpdateColumnAssignExpression(ITokenizer t)
        {
            // (<Column> | <Variable>) <CompareOp> ("DEFAULT" | <Expression>)
            var columnName = ParseVariableOrQualifiedIdentifier(t);
            // TODO: Other assignment operators
            var      opToken = t.Expect(SqlTokenType.Symbol, "=", "+=", "-=", "*=", "/=", "%=", "&=", "^=", "|=");
            ISqlNode rvalue;
            var      lookahead = t.Peek();

            if (lookahead.Is(SqlTokenType.Keyword, "DEFAULT"))
            {
                t.GetNext();
                rvalue = new SqlKeywordNode(lookahead);
            }
            else
            {
                rvalue = ParseScalarExpression(t);
            }
            return(new SqlInfixOperationNode
            {
                Left = columnName,
                Location = columnName.Location,
                Operator = new SqlOperatorNode(opToken),
                Right = rvalue
            });
        }
Exemplo n.º 2
0
        public SqlExecuteArgumentNode ParseExecArgument(ITokenizer t)
        {
            // (<parameter> "=")? (<Expression> | "DEFAULT" | <Variable> ("OUT"|"OUTPUT"))
            var next = t.GetNext();

            if (next.IsSymbol(";") || next.IsType(SqlTokenType.EndOfInput))
            {
                return(null);
            }
            if (next.IsKeyword("DEFAULT"))
            {
                var keyword = new SqlKeywordNode(next);
                return(new SqlExecuteArgumentNode
                {
                    Location = keyword.Location,
                    Value = keyword
                });
            }

            if (next.IsType(SqlTokenType.Variable))
            {
                var lookahead = t.Peek();
                if (lookahead.IsSymbol("="))
                {
                    t.GetNext();
                    return(new SqlExecuteArgumentNode
                    {
                        Location = next.Location,
                        AssignVariable = new SqlVariableNode(next),
                        Value = ParseScalarExpression(t),
                        IsOut = t.NextIs(SqlTokenType.Keyword, "OUT", true) || t.NextIs(SqlTokenType.Keyword, "OUTPUT", true)
                    });
                }
            }

            ISqlNode expression = null;

            if (next.IsType(SqlTokenType.Identifier, SqlTokenType.Number, SqlTokenType.QuotedString, SqlTokenType.Variable))
            {
                t.PutBack(next);
                expression = ParseScalarExpression(t);
            }

            else if (next.IsType(SqlTokenType.Keyword))
            {
                if (t.Peek().IsSymbol("("))
                {
                    t.PutBack(next);
                    expression = ParseScalarExpression(t);
                }
            }

            if (expression == null)
            {
                t.PutBack(next);
                return(null);
            }

            return(new SqlExecuteArgumentNode
            {
                Location = next.Location,
                Value = expression,
                IsOut = t.NextIs(SqlTokenType.Keyword, "OUT", true) || t.NextIs(SqlTokenType.Keyword, "OUTPUT", true)
            });
        }
Exemplo n.º 3
0
 public ISqlNode VisitKeyword(SqlKeywordNode n)
 {
     Append(n.Keyword);
     return(n);
 }
Exemplo n.º 4
0
 public virtual ISqlNode VisitKeyword(SqlKeywordNode n) => n;
 public override ISqlNode VisitKeyword(SqlKeywordNode n)
 {
     _result.AssertIsNotNullOrEmpty(n, nameof(n.Keyword), n.Keyword);
     return(base.VisitKeyword(n));
 }