Inheritance: CodeBlockStatement, IPlSqlStatement
        public bool Verify(LoopStatement statement)
        {
            label = statement.Label;

            VisitStatement(statement);
            return(breakFound);
        }
Beispiel #2
0
        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));
        }
Beispiel #4
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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;
        }
Beispiel #14
0
 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));
        }