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 }); }
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) }); }
public ISqlNode VisitKeyword(SqlKeywordNode n) { Append(n.Keyword); return(n); }
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)); }