Пример #1
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());
        }
Пример #2
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());
        }
Пример #3
0
 /// <summary>
 /// Writes the specified result set limitation for the current SQL dialect.
 /// Writes the <c>LIMIT <paramref name="offset"/>, <paramref name="count"/></c> clause
 /// to the output <paramref name="writer"/>.
 /// syntax.
 /// </summary>
 /// <param name="writer">
 /// The <see cref="SqlWriter"/> to write to.
 /// </param>
 /// <param name="offset">
 /// The row offset at which to start.
 /// </param>
 /// <param name="count">
 /// The number of rows to fetch.
 /// </param>
 public override void WriteLimit(SqlWriter writer, int?offset, int?count)
 {
     writer.WriteKeyword(MySqlKeywords.Limit);
     if (offset != null)
     {
         writer.WriteValue(offset.GetValueOrDefault());
         writer.WriteRaw(",");
     }
     writer.WriteValue(count.GetValueOrDefault(int.MaxValue));
 }
Пример #4
0
 /// <summary>
 /// Writes the specified result set limitation for the current SQL dialect. 
 /// Writes the <c>LIMIT <paramref name="offset"/>, <paramref name="count"/></c> clause
 /// to the output <paramref name="writer"/>.
 /// syntax.
 /// </summary>
 /// <param name="writer">
 /// The <see cref="SqlWriter"/> to write to.
 /// </param>
 /// <param name="offset">
 /// The row offset at which to start.
 /// </param>
 /// <param name="count">
 /// The number of rows to fetch.
 /// </param>
 public override void WriteLimit(SqlWriter writer, int? offset, int? count)
 {
     writer.WriteKeyword(MySqlKeywords.Limit);
     if (offset != null)
     {
         writer.WriteValue(offset.GetValueOrDefault());
         writer.WriteRaw(",");
     }
     writer.WriteValue(count.GetValueOrDefault(int.MaxValue));
 }
Пример #5
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());
        }
Пример #6
0
        /// <summary>
        /// Writes the specified result set limitation for the current SQL dialect. The default
        /// implementation uses the <c>OFFSET <paramref name="offset"/> ROWS FETCH FIRST <paramref name="count"/> ROWS ONLY</c>
        /// syntax.
        /// </summary>
        /// <param name="writer">
        /// The <see cref="SqlWriter"/> to write to.
        /// </param>
        /// <param name="offset">
        /// The row offset at which to start.
        /// </param>
        /// <param name="count">
        /// The number of rows to fetch.
        /// </param>
        public virtual void WriteLimit(SqlWriter writer, int?offset, int?count)
        {
            if (offset != null)
            {
                writer.WriteKeyword(SqlKeywords.Offset);
                writer.WriteValue(offset.Value);
                writer.WriteKeyword(SqlKeywords.Rows);
            }

            if (count != null)
            {
                writer.WriteKeyword(SqlKeywords.Fetch);
                writer.WriteKeyword(SqlKeywords.First);
                writer.WriteValue(count.Value);
                writer.WriteKeyword(SqlKeywords.Rows);
                writer.WriteKeyword(SqlKeywords.Only);
            }
        }
Пример #7
0
        public void WriteValue_WhenBulkInsertStatement_WritesValues()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartInsert();
                writer.WriteStartInto();
                writer.WriteTable("Users");
                writer.WriteColumn("Id");
                writer.WriteColumn("UserName");
                writer.WriteColumn("Email");

                writer.WriteStartValues();
                writer.WriteOpenParenthesis();
                Assert.AreEqual(SqlWriterState.StartValues, writer.WriteState);
                writer.WriteValue(15);
                writer.WriteValue("My user name.");
                writer.WriteValue("*****@*****.**");
                writer.WriteEndValues();
                Assert.AreEqual(SqlWriterState.EndValues, writer.WriteState);

                writer.WriteStartValues();
                Assert.AreEqual(SqlWriterState.StartValues, writer.WriteState);
                writer.WriteValue(16);
                writer.WriteValue("My second user name.");
                writer.WriteValue("*****@*****.**");
                writer.WriteEndValues();
                Assert.AreEqual(SqlWriterState.EndValues, writer.WriteState);

                writer.WriteCloseParenthesis();
            }

            Assert.AreEqual("INSERT INTO [Users] ([Id], [UserName], [Email]) VALUES ((15, 'My user name.', '*****@*****.**'), (16, 'My second user name.', '*****@*****.**'))", builder.ToString());
        }
Пример #8
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());
        }
Пример #9
0
        public void WriteStartSet_WhenUpdateStatement_WritesParametersAndValues()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartUpdate();
                writer.WriteTable("Users");
                writer.WriteStartSet();
                writer.WriteColumn("Id");
                writer.WriteValue(15);
                writer.WriteColumn("UserName");
                writer.WriteParameter("UserName");
                writer.WriteColumn("Email");
                writer.WriteParameter("Email");
                Assert.AreEqual(SqlWriterState.Set, writer.WriteState);
            }

            Assert.AreEqual("UPDATE [Users] SET [Id] = 15, [UserName] = @UserName, [Email] = @Email", builder.ToString());
        }
Пример #10
0
        public void WriteStartSet_WhenUpdateStatement_WritesParametersAndValues()
        {
            StringBuilder builder = new StringBuilder();

            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartUpdate();
                writer.WriteTable("Users");
                writer.WriteStartSet();
                writer.WriteColumn("Id");
                writer.WriteValue(15);
                writer.WriteColumn("UserName");
                writer.WriteParameter("UserName");
                writer.WriteColumn("Email");
                writer.WriteParameter("Email");
                Assert.AreEqual(SqlWriterState.Set, writer.WriteState);
            }

            Assert.AreEqual("UPDATE [Users] SET [Id] = 15, [UserName] = @UserName, [Email] = @Email", 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 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());
        }
Пример #13
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());
        }
Пример #14
0
		/// <summary>
		/// Writes the specified result set limitation for the current SQL dialect. The default
		/// implementation uses the <c>OFFSET <paramref name="offset"/> ROWS FETCH FIRST <paramref name="count"/> ROWS ONLY</c>
		/// syntax.
		/// </summary>
		/// <param name="writer">
		/// The <see cref="SqlWriter"/> to write to.
		/// </param>
		/// <param name="offset">
		/// The row offset at which to start.
		/// </param>
		/// <param name="count">
		/// The number of rows to fetch.
		/// </param>
		public virtual void WriteLimit(SqlWriter writer, int? offset, int? count)
		{
			if (offset != null)
			{
				writer.WriteKeyword(SqlKeywords.Offset);
				writer.WriteValue(offset.Value);
				writer.WriteKeyword(SqlKeywords.Rows);
			}

			if (count != null)
			{
				writer.WriteKeyword(SqlKeywords.Fetch);
				writer.WriteKeyword(SqlKeywords.First);
				writer.WriteValue(count.Value);
				writer.WriteKeyword(SqlKeywords.Rows);
				writer.WriteKeyword(SqlKeywords.Only);
			}
		}
Пример #15
0
 public override void Visit(SqlConstant expression)
 {
     _writer.WriteValue(expression.Value);
 }
Пример #16
0
        public void WriteValue_WhenInsertStatement_WritesValues()
        {
            StringBuilder builder = new StringBuilder();
            using (SqlWriter writer = new SqlWriter(builder))
            {
                writer.WriteStartInsert();
                writer.WriteStartInto();
                writer.WriteTable("Users");
                writer.WriteColumn("Id");
                writer.WriteColumn("UserName");
                writer.WriteColumn("Email");
                writer.WriteStartValues();
                Assert.AreEqual(SqlWriterState.StartValues, writer.WriteState);
                writer.WriteValue(15);
                writer.WriteValue("My user name.");
                writer.WriteValue("*****@*****.**");
                writer.WriteEndValues();
                Assert.AreEqual(SqlWriterState.EndValues, writer.WriteState);
            }

            Assert.AreEqual("INSERT INTO [Users] ([Id], [UserName], [Email]) VALUES (15, 'My user name.', '*****@*****.**')", builder.ToString());
        }