- 增加 ICodeFirst.IsGenerateCommandParameterWithLambda 选项,开启表达式解析的命令参数化;

- 增加 ExpressionCallContext 自定义函数上下文档 DbParameter 属性;
- 修复 IncludeMany(a => a.x1.x2.Childs) 当 x1, x2 为 null 的报 null 错误;
This commit is contained in:
28810
2019-11-22 21:55:36 +08:00
parent 12be7f0051
commit e9a8ad70a1
54 changed files with 518 additions and 746 deletions

View File

@ -725,15 +725,15 @@ namespace FreeSql.Tests.Odbc.Default
[Fact]
public void Sum()
{
var subquery = select.ToSql(a => new
var subquery = select.Where(a => a.Id < 200).ToSql(a => new
{
all = a,
count = select.Sum(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
var subqueryList = select.ToList(a => new
var subqueryList = select.Where(a => a.Id < 200).ToList(a => new
{
all = a,
count = select.Sum(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
}
[Fact]
@ -767,15 +767,15 @@ namespace FreeSql.Tests.Odbc.Default
[Fact]
public void Avg()
{
var subquery = select.ToSql(a => new
var subquery = select.Where(a => a.Id < 200).ToSql(a => new
{
all = a,
count = select.Avg(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
var subqueryList = select.ToList(a => new
var subqueryList = select.Where(a => a.Id < 200).ToList(a => new
{
all = a,
count = select.Avg(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
}
[Fact]

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.Odbc.DefaultMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1100,30 +1100,5 @@ namespace FreeSql.Tests.Odbc.DefaultMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.Odbc.OracleMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.Odbc.OracleMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.Odbc.PostgreSQLMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.Odbc.PostgreSQLMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -706,15 +706,15 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Fact]
public void Sum()
{
var subquery = select.ToSql(a => new
var subquery = select.Where(a => a.Id < 200).ToSql(a => new
{
all = a,
count = select.Sum(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
var subqueryList = select.ToList(a => new
var subqueryList = select.Where(a => a.Id < 200).ToList(a => new
{
all = a,
count = select.Sum(b => b.Id)
count = select.Where(b => b.Id < 200).Sum(b => b.Id)
});
}
[Fact]
@ -748,15 +748,15 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Fact]
public void Avg()
{
var subquery = select.ToSql(a => new
var subquery = select.Where(a => a.Id < 100).ToSql(a => new
{
all = a,
count = select.Avg(b => b.Id)
count = select.Where(b => b.Id < 100).Avg(b => b.Id)
});
var subqueryList = select.ToList(a => new
var subqueryList = select.Where(a => a.Id < 100).ToList(a => new
{
all = a,
count = select.Avg(b => b.Id)
count = select.Where(b => b.Id < 100).Avg(b => b.Id)
});
}
[Fact]

View File

@ -1568,30 +1568,5 @@ namespace FreeSql.Tests.Odbc.SqlServerMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.Odbc.SqlServerMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -204,6 +204,14 @@
回复的文本内容
</summary>
</member>
<member name="M:FreeSql.Tests.DbFunc.SetDbParameter(System.String,System.Int32)">
<summary>
设置表达式中的 string 参数化长度,优化执行计划
</summary>
<param name="that"></param>
<param name="size"></param>
<returns></returns>
</member>
<member name="T:SaleIDO.Entity.Storeage.AdjustPriceOrder">
<summary>
调价单

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.OracleMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.OracleMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.PostgreSQLMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.PostgreSQLMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1577,30 +1577,5 @@ namespace FreeSql.Tests.SqlServerMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1110,30 +1110,5 @@ namespace FreeSql.Tests.SqlServerMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1567,30 +1567,5 @@ namespace FreeSql.Tests.SqliteMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -1101,30 +1101,5 @@ namespace FreeSql.Tests.SqliteMapType
public void GuidNullable()
{
}
[Fact]
public void MygisPoint()
{
}
[Fact]
public void MygisLineString()
{
}
[Fact]
public void MygisPolygon()
{
}
[Fact]
public void MygisMultiPoint()
{
}
[Fact]
public void MygisMultiLineString()
{
}
[Fact]
public void MygisMultiPolygon()
{
}
}
}

View File

@ -185,8 +185,6 @@ namespace FreeSql.Tests
[Fact]
public void Test02()
{
var testparmSelect = g.sqlserver.Select<TestMySqlStringIsNullable>().Where(a => a.nvarchar == "11" && a.nvarchar_notnull == "22" && a.nvarchar_null == "33" && a.varchar == "11" && a.varchar_notnull == "22" && a.varchar_null == "33");
var slsksd = g.mysql.Update<UserLike>().SetSource(new UserLike { Id = Guid.NewGuid(), CreateUserId = 1000, SubjectId = Guid.NewGuid() })
.UpdateColumns(a => new
{
@ -291,6 +289,57 @@ namespace FreeSql.Tests
var sql = g.sqlite.Select<SysModule>()
.ToSql(a => a.CreateTime.FormatDateTime("yyyy-MM-dd"));
var parm1 = "11";
var parm2 = "22";
var parm3 = "33";
var testparmSelect = g.sqlserver.Select<TestMySqlStringIsNullable>()
.Where(a =>
a.nvarchar == "11" &&
a.nvarchar_notnull == "22" &&
a.nvarchar_null == "33" &&
a.varchar == "11" &&
a.varchar_notnull == "22" &&
a.varchar_null == "33" &&
a.nvarchar == parm1 &&
a.nvarchar_notnull == parm2 &&
a.nvarchar_null == parm3 &&
a.varchar == parm3 &&
a.varchar_notnull == parm2 &&
a.varchar_null == parm3 &&
a.nvarchar == parm1.SetDbParameter(10) &&
a.nvarchar_notnull == parm2.SetDbParameter(11) &&
a.nvarchar_null == parm3.SetDbParameter(12) &&
a.varchar == parm3.SetDbParameter(13) &&
a.varchar_notnull == parm2.SetDbParameter(14) &&
a.varchar_null == parm3.SetDbParameter(15) &&
"11" == a.nvarchar &&
"22" == a.nvarchar_notnull &&
"33" == a.nvarchar_null &&
"11" == a.varchar &&
"22" == a.varchar_notnull &&
"33" == a.varchar_null &&
parm1 == a.nvarchar &&
parm2 == a.nvarchar_notnull &&
parm3 == a.nvarchar_null &&
parm1 == a.varchar &&
parm2 == a.varchar_notnull &&
parm3 == a.varchar_null &&
parm1.SetDbParameter(10) == a.nvarchar &&
parm2.SetDbParameter(11) == a.nvarchar_notnull &&
parm3.SetDbParameter(12) == a.nvarchar_null &&
parm1.SetDbParameter(13) == a.varchar &&
parm2.SetDbParameter(14) == a.varchar_notnull &&
parm3.SetDbParameter(15) == a.varchar_null
);
}
}
@ -301,7 +350,20 @@ namespace FreeSql.Tests
public static string FormatDateTime(this DateTime that, string arg1)
{
return $"date_format({context.Value.Values["arg1"]})";
return $"date_format({context.Value.Values["that"]}, {context.Value.Values["arg1"]})";
}
/// <summary>
/// 设置表达式中的 string 参数化长度,优化执行计划
/// </summary>
/// <param name="that"></param>
/// <param name="size"></param>
/// <returns></returns>
public static string SetDbParameter(this string that, int size)
{
if (context.Value.DbParameter != null)
context.Value.DbParameter.Size = size;
return context.Value.Values["that"];
}
}
}