public bool Verify(LoopStatement statement) { label = statement.Label; VisitStatement(statement); return(breakFound); }
public bool Verify(LoopStatement statement) { label = statement.Label; VisitStatement(statement); return breakFound; }
public async void LabeledLoopAndExit_NotFound() { var loop = new LoopStatement("l1"); loop.Statements.Add(new LoopControlStatement(LoopControlType.Exit, "l2")); var statement = loop.Prepare(context); await Assert.ThrowsAnyAsync <SqlStatementException>(() => statement.ExecuteAsync(context)); }
public void LoopAndExitWithNoReturn() { var loop = new LoopStatement(); loop.Statements.Add(new ReturnStatement(SqlExpression.Constant(45))); var result = AdminQuery.ExecuteStatement(loop); Assert.IsNotNull(result); Assert.AreEqual(StatementResultType.Result, result.Type); }
public async void LabeledLoopAndExit_WasFound() { var loop = new LoopStatement("l1"); loop.Statements.Add(new LoopControlStatement(LoopControlType.Exit, "l1")); var statement = loop.Prepare(context); var result = await statement.ExecuteAsync(context); Assert.Null(result); }
public async void EmptyLoopAndExit() { var loop = new LoopStatement(); loop.Statements.Add(new LoopControlStatement(LoopControlType.Exit)); var statement = loop.Prepare(context); var result = await statement.ExecuteAsync(context); Assert.Null(result); }
public void SerializeEmptyLoop() { var loop = new LoopStatement(); loop.Statements.Add(new LoopControlStatement(LoopControlType.Exit)); var result = BinarySerializeUtil.Serialize(loop); Assert.NotNull(result); Assert.Null(result.Label); Assert.NotEmpty(result.Statements); Assert.Equal(1, result.Statements.Count); }
public async void GoToBreak() { var loop = new LoopStatement(); loop.Statements.Add(new GoToStatement("exitLoop")); var exitLoop = new CodeBlockStatement("exitLoop"); exitLoop.Statements.Add(new ExitStatement()); loop.Statements.Add(exitLoop); var result = await loop.ExecuteAsync(context); Assert.Null(result); }
public void GetLoopString() { var loop = new LoopStatement("l1"); loop.Statements.Add(new ExitStatement(SqlExpression.Constant(SqlObject.Boolean(true)))); var expected = new StringBuilder(); expected.AppendLine("<<l1>>"); expected.AppendLine("LOOP"); expected.AppendLine(" EXIT WHEN TRUE;"); expected.Append("END LOOP;"); var sql = loop.ToString(); Assert.Equal(expected.ToString(), sql); }
public static void Loop_NoLabel() { var loop = new LoopStatement(); loop.Statements.Add(new AssignVariableStatement(SqlExpression.VariableReference("a"), SqlExpression.Constant("two"))); loop.Statements.Add(new ConditionStatement(SqlExpression.Constant(true), new SqlStatement[] { new ExitStatement() })); var sql = loop.ToString(); var expected = new StringBuilder(); expected.AppendLine("LOOP"); expected.AppendLine(" :a := 'two'"); expected.AppendLine(" IF TRUE THEN"); expected.AppendLine(" EXIT"); expected.AppendLine(" END IF"); expected.Append("END LOOP"); Assert.AreEqual(expected.ToString(), sql); }
public static void Loop_NoLabel() { var loop = new LoopStatement(); loop.Statements.Add(new AssignVariableStatement(SqlExpression.VariableReference("a"), SqlExpression.Constant("two"))); loop.Statements.Add(new ConditionStatement(SqlExpression.Constant(true), new SqlStatement[] { new ExitStatement() })); var sql = loop.ToString(); var expected = new StringBuilder(); expected.AppendLine("LOOP"); expected.AppendLine(" :a := 'two'"); expected.AppendLine(" IF TRUE THEN"); expected.AppendLine(" EXIT"); expected.AppendLine(" END IF"); expected.Append("END LOOP"); Assert.AreEqual(expected.ToString(), sql); }
protected virtual SqlStatement VisitLoop(LoopStatement statement) { if (statement is ForLoopStatement) { return(VisitForLoop((ForLoopStatement)statement)); } if (statement is WhileLoopStatement) { return(VisitWhileLoop((WhileLoopStatement)statement)); } if (statement is CursorForLoopStatement) { return(VisitCursorForLoop((CursorForLoopStatement)statement)); } var loop = new LoopStatement(); foreach (var child in statement.Statements) { loop.Statements.Add(VisitStatement(child)); } return(loop); }
protected virtual SqlStatement VisitLoop(LoopStatement statement) { if (statement is ForLoopStatement) return VisitForLoop((ForLoopStatement) statement); if (statement is WhileLoopStatement) return VisitWhileLoop((WhileLoopStatement) statement); if (statement is CursorForLoopStatement) return VisitCursorForLoop((CursorForLoopStatement) statement); var loop = new LoopStatement(); foreach (var child in statement.Statements) { loop.Statements.Add(VisitStatement(child)); } return loop; }
public static bool HasBreak(LoopStatement statement) { var visitor = new LoopBreakChecker(); return visitor.Verify(statement); }
public static bool HasBreak(LoopStatement statement) { var visitor = new LoopBreakChecker(); return(visitor.Verify(statement)); }