コード例 #1
0
        public void WriteStartFrom_WhenSelectStatement_WritesWhere()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartWhere();
                Assert.AreEqual(SqlWriterState.StartWhere, writer.WriteState);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Id");
                writer.WriteOperator(SqlBinaryOperator.Or);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.LessThan);
                writer.WriteValue(100);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] WHERE ([Id] = @Id) OR ([Id] < 100)", builder.ToString());
        }
コード例 #2
0
        public void WriteUnion_WhenSelectWithWhere_WritesUnionStatement()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("u", "Id", null);
                writer.WriteColumn("u", "Name", null);
                writer.WriteStartFrom();
                writer.WriteTable("Users", "u");
                writer.WriteStartWhere();
                writer.WriteColumn("u", "Age", null);
                writer.WriteOperator(SqlBinaryOperator.LessThanOrEqual);
                writer.WriteValue(18);
                writer.WriteEndSelect();

                Assert.AreEqual(SqlWriterState.EndSelect, writer.WriteState);
                writer.WriteUnion();
                Assert.AreEqual(SqlWriterState.Union, writer.WriteState);

                writer.WriteStartSelect();
                writer.WriteColumn("p", "Id", null);
                writer.WriteColumn("p", "Name", null);
                writer.WriteStartFrom();
                writer.WriteTable("Profiles", "p");
                writer.WriteStartWhere();
                writer.WriteColumn("p", "Age", null);
                writer.WriteOperator(SqlBinaryOperator.GreaterThanOrEqual);
                writer.WriteValue(30);
                writer.WriteEndSelect();
            }

            Assert.AreEqual("SELECT [u].[Id], [u].[Name] FROM [Users] [u] WHERE ([u].[Age] <= 18) UNION SELECT [p].[Id], [p].[Name] FROM [Profiles] [p] WHERE ([p].[Age] >= 30)", builder.ToString());
        }
コード例 #3
0
        public void WriteUnion_WhenSelectWithOrderBy_WritesUnionStatement()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("u", "Id", null);
                writer.WriteColumn("u", "Name", null);
                writer.WriteColumn("p", "Age", null);
                writer.WriteStartFrom();
                writer.WriteTable("Users", "u");
                writer.WriteStartJoin(SqlJoinType.Inner);
                writer.WriteTable("Profiles", "p");
                writer.WriteStartOn();
                writer.WriteColumn("u", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("p", "UserId", null);
                writer.WriteStartWhere();
                writer.WriteColumn("p", "Age", null);
                writer.WriteOperator(SqlBinaryOperator.LessThanOrEqual);
                writer.WriteValue(18);
                writer.WriteStartOrderBy();
                writer.WriteColumn("p", "Age", null);
                writer.WriteSortOrder(SqlSortOrder.Descending);
                writer.WriteColumn("u", "Name", null);
                writer.WriteSortOrder(SqlSortOrder.Ascending);
                writer.WriteEndSelect();

                Assert.AreEqual(SqlWriterState.EndSelect, writer.WriteState);
                writer.WriteUnion();
                Assert.AreEqual(SqlWriterState.Union, writer.WriteState);

                writer.WriteStartSelect();
                writer.WriteColumn("u", "Id", null);
                writer.WriteColumn("u", "Name", null);
                writer.WriteColumn("p", "Age", null);
                writer.WriteStartFrom();
                writer.WriteTable("Users", "u");
                writer.WriteStartJoin(SqlJoinType.Inner);
                writer.WriteTable("Profiles", "p");
                writer.WriteStartOn();
                writer.WriteColumn("u", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("p", "UserId", null);
                writer.WriteStartWhere();
                writer.WriteColumn("p", "Age", null);
                writer.WriteOperator(SqlBinaryOperator.GreaterThanOrEqual);
                writer.WriteValue(30);
                writer.WriteStartOrderBy();
                writer.WriteColumn("p", "Age", null);
                writer.WriteSortOrder(SqlSortOrder.Descending);
                writer.WriteColumn("u", "Name", null);
                writer.WriteSortOrder(SqlSortOrder.Ascending);
                writer.WriteEndSelect();
            }

            Assert.AreEqual("SELECT [u].[Id], [u].[Name], [p].[Age] FROM [Users] [u] INNER JOIN [Profiles] [p] ON ([u].[Id] = [p].[UserId]) WHERE ([p].[Age] <= 18) ORDER BY [p].[Age] DESC, [u].[Name] ASC UNION SELECT [u].[Id], [u].[Name], [p].[Age] FROM [Users] [u] INNER JOIN [Profiles] [p] ON ([u].[Id] = [p].[UserId]) WHERE ([p].[Age] >= 30) ORDER BY [p].[Age] DESC, [u].[Name] ASC", builder.ToString());
        }
コード例 #4
0
		public override void WriteTo(SqlWriter writer) {
			WriteCommentsTo(writer);
			writer.WriteScript(valueExpression, WhitespacePadding.None);
			base.WriteTo(writer);
			writer.WriteOperator(" BETWEEN ");
			writer.WriteScript(lowerBound, WhitespacePadding.None);
			writer.WriteOperator(" AND ");
			writer.WriteScript(upperBound, WhitespacePadding.None);
		}
コード例 #5
0
        public void WriteUnion_WhenSelectWithJoin_WritesUnionStatement()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("u", "Id", null);
                writer.WriteColumn("u", "Name", null);
                writer.WriteColumn("p", "Age", null);
                writer.WriteStartFrom();
                writer.WriteTable("Users", "u");
                writer.WriteStartJoin(SqlJoinType.Inner);
                writer.WriteTable("Profiles", "p");
                writer.WriteStartOn();
                writer.WriteColumn("u", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("p", "UserId", null);
                //writer.WriteStartWhere();
                //writer.WriteColumn("u", "Age", null);
                //writer.WriteOperator(SqlBinaryOperator.LessThanOrEqual);
                //writer.WriteValue(18);
                writer.WriteEndSelect();

                Assert.AreEqual(SqlWriterState.EndSelect, writer.WriteState);
                writer.WriteUnion();
                Assert.AreEqual(SqlWriterState.Union, writer.WriteState);

                writer.WriteStartSelect();
                writer.WriteColumn("u", "Id", null);
                writer.WriteColumn("u", "Name", null);
                writer.WriteColumn("p", "Age", null);
                writer.WriteStartFrom();
                writer.WriteTable("Users", "u");
                writer.WriteStartJoin(SqlJoinType.Inner);
                writer.WriteTable("Profiles", "p");
                writer.WriteStartOn();
                writer.WriteColumn("u", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("p", "UserId", null);
                writer.WriteStartWhere();
                writer.WriteColumn("p", "Age", null);
                writer.WriteOperator(SqlBinaryOperator.GreaterThanOrEqual);
                writer.WriteValue(30);
                writer.WriteEndSelect();
            }

            Assert.AreEqual("SELECT [u].[Id], [u].[Name], [p].[Age] FROM [Users] [u] INNER JOIN [Profiles] [p] ON ([u].[Id] = [p].[UserId]) UNION SELECT [u].[Id], [u].[Name], [p].[Age] FROM [Users] [u] INNER JOIN [Profiles] [p] ON ([u].[Id] = [p].[UserId]) WHERE ([p].[Age] >= 30)", builder.ToString());
        }
コード例 #6
0
 public void WriteOperator_WithInvalidOperator_ThrowsInvalidEnumArgument()
 {
     Assert.Throws <InvalidEnumArgumentException>(() =>
     {
         var builder = new StringBuilder();
         using (var writer = new SqlWriter(builder))
         {
             writer.WriteOperator((SqlBinaryOperator)int.MaxValue);
         }
     });
 }
コード例 #7
0
        public void WriteOperator_WritesOperator()
        {
            var operators = new[] { SqlBinaryOperator.And, SqlBinaryOperator.Equal, SqlBinaryOperator.GreaterThan, SqlBinaryOperator.GreaterThanOrEqual, SqlBinaryOperator.LessThan, SqlBinaryOperator.LessThanOrEqual, SqlBinaryOperator.Like, SqlBinaryOperator.NotEqual, SqlBinaryOperator.Or, SqlBinaryOperator.In };
            var expected  = new[] { "AND", "=", ">", ">=", "<", "<=", "LIKE", "<>", "OR", "IN" };

            for (int index = 0; index < operators.Length; index++)
            {
                var builder = new StringBuilder();
                using (var writer = new SqlWriter(builder))
                {
                    writer.WriteOperator(operators[index]);
                }

                Assert.Equal(expected[index], builder.ToString());
            }
        }
コード例 #8
0
        public void WriteStartJoin_WritesRightJoin()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartJoin(SqlJoinType.Right);
                writer.WriteTable("Profiles");
                writer.WriteStartOn();
                writer.WriteColumn("Users", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("Profiles", "UserId", null);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] RIGHT JOIN [Profiles] ON ([Users].[Id] = [Profiles].[UserId])", builder.ToString());
        }
コード例 #9
0
        public void WriteStartOn_WritesOnClause()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartJoin();
                writer.WriteTable("Profiles");
                writer.WriteStartOn();
                writer.WriteColumn("Users", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("Profiles", "UserId", null);
                writer.WriteOperator(SqlBinaryOperator.And);
                writer.WriteColumn("Users", "Name", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Name");
                writer.WriteStartWhere();
                Assert.AreEqual(SqlWriterState.StartWhere, writer.WriteState);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Id");
                writer.WriteOperator(SqlBinaryOperator.Or);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.LessThan);
                writer.WriteValue(100);
                writer.WriteStartOrderBy();
                writer.WriteColumn("Id");
                writer.WriteSortOrder(SqlSortOrder.Ascending);
                writer.WriteColumn("Name");
                writer.WriteSortOrder(SqlSortOrder.Descending);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] JOIN [Profiles] ON ([Users].[Id] = [Profiles].[UserId]) AND ([Users].[Name] = @Name) WHERE ([Id] = @Id) OR ([Id] < 100) ORDER BY [Id] ASC, [Name] DESC", builder.ToString());
        }
コード例 #10
0
        public void WriteStartFrom_WhenSelectStatement_WritesWhere()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartWhere();
                Assert.AreEqual(SqlWriterState.StartWhere, writer.WriteState);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Id");
                writer.WriteOperator(SqlBinaryOperator.Or);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.LessThan);
                writer.WriteValue(100);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] WHERE ([Id] = @Id) OR ([Id] < 100)", builder.ToString());
        }
コード例 #11
0
        public void WriteStartOn_WritesOnClause()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartJoin();
                writer.WriteTable("Profiles");
                writer.WriteStartOn();
                writer.WriteColumn("Users", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("Profiles", "UserId", null);
                writer.WriteOperator(SqlBinaryOperator.And);
                writer.WriteColumn("Users", "Name", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Name");
                writer.WriteStartWhere();
                Assert.AreEqual(SqlWriterState.StartWhere, writer.WriteState);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteParameter("Id");
                writer.WriteOperator(SqlBinaryOperator.Or);
                writer.WriteColumn("Id");
                writer.WriteOperator(SqlBinaryOperator.LessThan);
                writer.WriteValue(100);
                writer.WriteStartOrderBy();
                writer.WriteColumn("Id");
                writer.WriteSortOrder(SqlSortOrder.Ascending);
                writer.WriteColumn("Name");
                writer.WriteSortOrder(SqlSortOrder.Descending);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] JOIN [Profiles] ON ([Users].[Id] = [Profiles].[UserId]) AND ([Users].[Name] = @Name) WHERE ([Id] = @Id) OR ([Id] < 100) ORDER BY [Id] ASC, [Name] DESC", builder.ToString());
        }
コード例 #12
0
        public void WriteStartJoin_WritesRightJoin()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartSelect();
                writer.WriteColumn("Id");
                writer.WriteColumn("Name", "n");
                writer.WriteColumn("Users", "Email", "e");
                writer.WriteStartFrom();
                writer.WriteTable("Users");
                writer.WriteStartJoin(SqlJoinType.Right);
                writer.WriteTable("Profiles");
                writer.WriteStartOn();
                writer.WriteColumn("Users", "Id", null);
                writer.WriteOperator(SqlBinaryOperator.Equal);
                writer.WriteColumn("Profiles", "UserId", null);
            }

            Assert.AreEqual("SELECT [Id], [Name] AS [n], [Users].[Email] AS [e] FROM [Users] RIGHT JOIN [Profiles] ON ([Users].[Id] = [Profiles].[UserId])", builder.ToString());
        }
コード例 #13
0
		public override void WriteTo(SqlWriter writer) {
			writer.WriteOperator(operation);
		}
コード例 #14
0
 public override void Visit(SqlBinaryOperator @operator)
 {
     _writer.WriteOperator(@operator);
 }
コード例 #15
0
        public void WriteOperator_WritesOperator()
        {
            var operators = new[] { SqlBinaryOperator.And, SqlBinaryOperator.Equal, SqlBinaryOperator.GreaterThan, SqlBinaryOperator.GreaterThanOrEqual, SqlBinaryOperator.LessThan, SqlBinaryOperator.LessThanOrEqual, SqlBinaryOperator.Like, SqlBinaryOperator.NotEqual, SqlBinaryOperator.Or, SqlBinaryOperator.In };
            var expected = new[] { "AND", "=", ">", ">=", "<", "<=", "LIKE", "<>", "OR", "IN" };

            for (int index = 0; index < operators.Length; index++)
            {
                var builder = new StringBuilder();
                using (var writer = new SqlWriter(builder))
                {
                    writer.WriteOperator(operators[index]);
                }

                Assert.Equal(expected[index], builder.ToString());
            }
        }
コード例 #16
0
 public void WriteOperator_WithInvalidOperator_ThrowsInvalidEnumArgument()
 {
     Assert.Throws<InvalidEnumArgumentException>(() =>
     {
         var builder = new StringBuilder();
         using (var writer = new SqlWriter(builder))
         {
             writer.WriteOperator((SqlBinaryOperator)int.MaxValue);
         }
     });
 }