public ISqlNode VisitIf(SqlIfNode n) { Append("IF ("); Visit(n.Condition); AppendLine(")"); IncreaseIndent(); Visit(n.Then); if (!(n.Then is SqlStatementListNode)) { AppendLine(";"); } AppendLine(); DecreaseIndent(); if (n.Else != null) { AppendLine("ELSE"); IncreaseIndent(); Visit(n.Else); if (!(n.Else is SqlStatementListNode)) { AppendLine(";"); } AppendLine(); DecreaseIndent(); } return(n); }
public virtual ISqlNode VisitIf(SqlIfNode n) { var cond = Visit(n.Condition); var then = Visit(n.Then); var e = Visit(n.Else); return(n.Update(cond, then, e)); }
public void If_ParenConditionThenBlock() { const string s = @" IF (5 = 6) BEGIN SELECT 'TEST1'; SELECT 'TEST2'; END"; var target = new Parser(); var result = target.Parse(Tokenizer.ForPostgreSql(s)); result.Should().PassValidation().And.RoundTrip(); var thenStatementList = new SqlStatementListNode { UseBeginEnd = true }; thenStatementList.Add(new SqlSelectNode { Columns = new SqlListNode <ISqlNode> { Children = new List <ISqlNode> { new SqlStringNode("TEST1") } } }); thenStatementList.Add(new SqlSelectNode { Columns = new SqlListNode <ISqlNode> { Children = new List <ISqlNode> { new SqlStringNode("TEST2") } } }); var expectedAst = new SqlIfNode { Condition = new SqlInfixOperationNode { Left = new SqlNumberNode(5), Operator = new SqlOperatorNode("="), Right = new SqlNumberNode(6) }, Then = thenStatementList }; result.Statements.First().Should().MatchAst(expectedAst); }
private SqlIfNode ParseIf(ITokenizer t) { // "IF" (("(" <Condition> ")") | <Condition>) <Statement> ("ELSE" <Statement>)? var ifToken = t.Expect(SqlTokenType.Keyword, "IF"); var ifNode = new SqlIfNode { Location = ifToken.Location, Condition = ParseMaybeParenthesis(t, ParseBooleanExpression), Then = ParseStatement(t) }; if (t.NextIs(SqlTokenType.Keyword, "ELSE", true)) { ifNode.Else = ParseStatement(t); } return(ifNode); }