コード例 #1
0
        public void SerializeBlock()
        {
            var block = new CodeBlockStatement();

            Assert.NotNull(block.Statements);
            Assert.Empty(block.Statements);
            Assert.Null(block.Label);

            block.Statements.Add(new EmptyStatement());

            Assert.NotEmpty(block.Statements);
            Assert.Equal(1, block.Statements.Count);

            var child = block.Statements.First();

            Assert.IsType <EmptyStatement>(child);
            Assert.NotNull(child);

            var parent = typeof(SqlStatement).GetTypeInfo().GetProperty("Parent", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(child);

            Assert.NotNull(parent);

            var result = BinarySerializeUtil.Serialize(block);

            Assert.NotNull(result);
            Assert.NotEmpty(result.Statements);
            Assert.Equal(1, result.Statements.Count);
        }
コード例 #2
0
        protected override SqlStatement PrepareStatement(IContext context)
        {
            var block = new CodeBlockStatement(Label);

            foreach (var statement in Statements)
            {
                var prepared = statement.Prepare(context);
                block.Statements.Add(prepared);
            }

            return(block);
        }
コード例 #3
0
        protected virtual SqlStatement VisitCodeBlock(CodeBlockStatement statement)
        {
            if (statement is LoopStatement)
            {
                return(VisitLoop((LoopStatement)statement));
            }
            if (statement is PlSqlBlockStatement)
            {
                return(VisitPlSqlBlock((PlSqlBlockStatement)statement));
            }

            return(statement);
        }
コード例 #4
0
        public void GetString()
        {
            var block = new CodeBlockStatement();

            block.Statements.Add(new NullStatement());

            var sql = new StringBuilder();

            sql.AppendLine("BEGIN");
            sql.AppendLine("  NULL;");
            sql.Append("END;");

            Assert.Equal(sql.ToString(), block.ToString());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public void AddAndRemoveStatements()
        {
            var block     = new CodeBlockStatement("block");
            var statement = new EmptyStatement();

            block.Statements.Add(statement);
            block.Statements.Add(new EmptyStatement());

            Assert.Null(statement.Previous);
            Assert.NotNull(statement.Next);
            var parent = typeof(SqlStatement).GetTypeInfo().GetProperty("Parent", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(statement);

            Assert.NotNull(parent);

            Assert.Equal(2, block.Statements.Count);
            block.Statements.Remove(statement);

            Assert.Null(statement.Next);

            Assert.Equal(1, block.Statements.Count);

            block.Statements.Clear();
            Assert.Equal(0, block.Statements.Count);
        }
コード例 #7
0
 public StatementCollection(CodeBlockStatement block)
 {
     this.block = block;
 }
コード例 #8
0
 public StatementCollection(CodeBlockStatement codeBlock)
 {
     this.codeBlock = codeBlock;
 }