mirror of
https://github.com/dotnetcore/Util.git
synced 2026-10-29 03:26:31 +08:00
398 lines
12 KiB
C#
398 lines
12 KiB
C#
using Util.Datas.Dapper.SqlServer;
|
|
using Util.Datas.Sql;
|
|
using Util.Datas.Sql.Matedatas;
|
|
using Util.Datas.Tests.Samples;
|
|
using Util.Helpers;
|
|
using Xunit;
|
|
|
|
namespace Util.Datas.Tests.Sql.Builders.SqlServer {
|
|
/// <summary>
|
|
/// Sql Server Sql生成器测试 - Select子句
|
|
/// </summary>
|
|
public partial class SqlServerBuilderTest {
|
|
/// <summary>
|
|
/// 设置Distinct
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestDistinct() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Distinct [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Distinct().Select( "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求总行数
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestCount_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Count(*) " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Count()
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求总行数 - 加列别名
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestCount_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Count([DoubleValue]) As [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Count<Sample>( t => t.DoubleValue, "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求和
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSum_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Sum([a]) As [b] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Sum( "a", "b" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求和 - lambda表达式
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSum_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Sum([DoubleValue]) As [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Sum<Sample>( t => t.DoubleValue, "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求平均值
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestAvg_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Avg([a]) As [b] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Avg( "a", "b" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求平均值 - lambda表达式
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestAvg_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Avg([DoubleValue]) As [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Avg<Sample>( t => t.DoubleValue, "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求最大值
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestMax_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Max([a]) As [b] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Max( "a", "b" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求最大值 - lambda表达式
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestMax_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Max([DoubleValue]) As [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Max<Sample>( t => t.DoubleValue, "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求最小值
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestMin_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Min([a]) As [b] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Min( "a", "b" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 求最小值 - lambda表达式
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestMin_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select Min([DoubleValue]) As [a] " );
|
|
result.Append( "From [b]" );
|
|
|
|
//执行
|
|
_builder.Min<Sample>( t => t.DoubleValue, "a" )
|
|
.From( "b" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_1() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select [b].[a] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Select( "a", "b" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列 - lambda表达式
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_2() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select [Email],[IntValue] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Select<Sample>( t => new object[] { t.Email, t.IntValue } )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列 - lambda表达式 - 设置单个列名和列别名
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_3() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select [Email] As [e] " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.Select<Sample>( t => t.Email, "e" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置子查询列
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_4() {
|
|
//结果
|
|
var result = new String();
|
|
result.Append( "Select *," );
|
|
result.AppendLine( "(Select Count(*) " );
|
|
result.AppendLine( "From [Test2] " );
|
|
result.AppendLine( "Where [Name]=@_p_0) As [testCount] " );
|
|
result.AppendLine( "From [Test] " );
|
|
result.Append( "Where [Age]=@_p_1" );
|
|
|
|
//执行
|
|
var builder2 = _builder.New().Count().From( "Test2" ).Where( "Name", "a" );
|
|
_builder.Select( "*" ).Select( builder2, "testCount" ).From( "Test" ).Where( "Age", 1 );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
Assert.Equal( 2, _builder.GetParams().Count );
|
|
Assert.Equal( "a", _builder.GetParams()["@_p_0"] );
|
|
Assert.Equal( 1, _builder.GetParams()["@_p_1"] );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置子查询列 - 委托
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_5() {
|
|
//结果
|
|
var result = new String();
|
|
result.Append( "Select *," );
|
|
result.AppendLine( "(Select Count(*) " );
|
|
result.AppendLine( "From [Test2] " );
|
|
result.AppendLine( "Where [Name]=@_p_0) As [testCount] " );
|
|
result.AppendLine( "From [Test] " );
|
|
result.Append( "Where [Age]=@_p_1" );
|
|
|
|
//执行
|
|
_builder.Select( "*" ).Select( builder => {
|
|
builder.Count().From( "Test2" ).Where( "Name", "a" );
|
|
}, "testCount" )
|
|
.From( "Test" ).Where( "Age", 1 );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
Assert.Equal( 2, _builder.GetParams().Count );
|
|
Assert.Equal( "a", _builder.GetParams()["@_p_0"] );
|
|
Assert.Equal( 1, _builder.GetParams()["@_p_1"] );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置列 - 添加select子句,不进行修改
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_6() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select a " );
|
|
result.Append( "From [c]" );
|
|
|
|
//执行
|
|
_builder.AppendSelect( "a" )
|
|
.From( "c" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置子查询列 - 别名为空
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_7() {
|
|
//结果
|
|
var result = new String();
|
|
result.Append( "Select *," );
|
|
result.AppendLine( "(Select Count(*) " );
|
|
result.AppendLine( "From [Test2] " );
|
|
result.AppendLine( "Where [Name]=@_p_0) As testCount " );
|
|
result.AppendLine( "From [Test] " );
|
|
result.Append( "Where [Age]=@_p_1" );
|
|
|
|
//执行
|
|
var builder2 = _builder.New().Count().From( "Test2" ).Where( "Name", "a" );
|
|
_builder.Select( "*" ).AppendSelect( "(" ).Select( builder2, "" ).AppendSelect( ") As testCount" ).From( "Test" ).Where( "Age", 1 );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
Assert.Equal( 2, _builder.GetParams().Count );
|
|
Assert.Equal( "a", _builder.GetParams()["@_p_0"] );
|
|
Assert.Equal( 1, _builder.GetParams()["@_p_1"] );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 将类型上所有属性设置为列名 - 忽略Ignore特性的属性
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_8() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select [s].[StringValue],[s].[IsDeleted] " );
|
|
result.Append( "From [Sample3] As [s]" );
|
|
|
|
//执行
|
|
_builder = new SqlServerBuilder( new DefaultEntityMatedata() );
|
|
_builder.Select<Sample3>().From<Sample3>( "s" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
|
|
/// <summary>
|
|
/// 覆盖已设置列名
|
|
/// </summary>
|
|
[Fact]
|
|
public void TestSelect_9() {
|
|
//结果
|
|
var result = new String();
|
|
result.AppendLine( "Select [s].[IsDeleted],[s].[StringValue] As [a] " );
|
|
result.Append( "From [Sample3] As [s]" );
|
|
|
|
//执行
|
|
_builder = new SqlServerBuilder( new DefaultEntityMatedata() );
|
|
_builder.Select<Sample3>()
|
|
.Select<Sample3>( t => t.StringValue,"a" )
|
|
.From<Sample3>( "s" );
|
|
|
|
//验证
|
|
Assert.Equal( result.ToString(), _builder.ToSql() );
|
|
}
|
|
}
|
|
} |