- fix 1.5.0-preview0502 bug

This commit is contained in:
28810 2020-05-08 10:38:39 +08:00
parent d69db2a3b1
commit 03a94888a8
19 changed files with 31 additions and 41 deletions

View File

@ -125,13 +125,6 @@
清空状态数据 清空状态数据
</summary> </summary>
</member> </member>
<member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
<summary>
根据 lambda 条件删除数据
</summary>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSql.DbSet`1.Add(`0)"> <member name="M:FreeSql.DbSet`1.Add(`0)">
<summary> <summary>
添加 添加
@ -486,14 +479,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -281,17 +281,20 @@ namespace FreeSql.Tests
g.sqlite.GlobalFilter.Apply<gf_t1>("gft1", a => a.rowstate > -1 && g.sqlite.Select<gf_t2>().Any(b => b.id == a.id)) g.sqlite.GlobalFilter.Apply<gf_t1>("gft1", a => a.rowstate > -1 && g.sqlite.Select<gf_t2>().Any(b => b.id == a.id))
.Apply<gf_t2>("gft2", a => a.rowstate > -2) .Apply<gf_t2>("gft2", a => a.rowstate > -2)
.Apply<gf_t3>("gft3", a => a.rowstate > -3); .Apply<gf_t3>("gft3", a => a.rowstate > -3)
.Apply<gf_t1>("gft11", a => a.rowstate > -1);
var tksk1 = g.sqlite.Select<gf_t1, gf_t2, gf_t3>() var tksk1 = g.sqlite.Select<gf_t1, gf_t2, gf_t3>()
.InnerJoin((a, b, c) => a.id == b.id) .InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10) .Where((a, b, c) => c.rowstate > 10)
.ToList(); .ToList();
g.sqlite.Update<gf_t1>().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var tksk2 = g.sqlite.Select<gf_t1, gf_t2, gf_t3>() var tksk2 = g.sqlite.Select<gf_t1, gf_t2, gf_t3>()
.InnerJoin((a, b, c) => a.id == b.id) .InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10) .Where((a, b, c) => c.rowstate > 10)
.ToList(); .ToList();
g.sqlite.Update<gf_t1>().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var dtot2 = g.sqlite.Select<gf_t1>().ToList(a => new gfDto var dtot2 = g.sqlite.Select<gf_t1>().ToList(a => new gfDto
{ {

View File

@ -1433,8 +1433,8 @@ namespace FreeSql.Internal
} }
} }
static ConcurrentDictionary<string, bool> _dicGetWhereCascadeSqlError = new ConcurrentDictionary<string, bool>(); static ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>> _dicGetWhereCascadeSqlError = new ConcurrentDictionary<Type, ConcurrentDictionary<string, bool>>();
public string GetWhereCascadeSql(SelectTableInfo tb, List<LambdaExpression> _whereCascadeExpression) public string GetWhereCascadeSql(SelectTableInfo tb, List<LambdaExpression> _whereCascadeExpression, bool isMultitb)
{ {
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
{ {
@ -1445,8 +1445,9 @@ namespace FreeSql.Internal
foreach (var fl in _whereCascadeExpression) foreach (var fl in _whereCascadeExpression)
{ {
var errorKey = FreeUtil.Sha1($"{tb.Table.Type.FullName},{fl.ToString()}"); var dicSqlError = _dicGetWhereCascadeSqlError.GetOrAdd(tb.Table.Type, tp => new ConcurrentDictionary<string, bool>());
if (_dicGetWhereCascadeSqlError.ContainsKey(errorKey)) continue; var errorKey = FreeUtil.Sha1($"{(isMultitb ? 1 : 0)},{fl.ToString()}");
if (dicSqlError.ContainsKey(errorKey)) continue;
var visitor = new ReplaceVisitor(); var visitor = new ReplaceVisitor();
try try
@ -1456,7 +1457,9 @@ namespace FreeSql.Internal
new ReplaceVisitor().Modify(fl, newParameter), new ReplaceVisitor().Modify(fl, newParameter),
newParameter newParameter
); );
var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC { _tables = new List<SelectTableInfo>(new[] { tb }), _selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias }); var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC { _tables =
isMultitb ? new List<SelectTableInfo>(new[] { tb }) : null,
_selectColumnMap = null, getSelectGroupingMapString = null, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, currentTable = tb.Table, alias001 = tb.Alias });
whereSql = GetBoolString(expExp.Body, whereSql); whereSql = GetBoolString(expExp.Body, whereSql);
if (isEmpty == false) if (isEmpty == false)
sb.Append(" AND "); sb.Append(" AND ");
@ -1466,7 +1469,7 @@ namespace FreeSql.Internal
} }
catch catch
{ {
_dicGetWhereCascadeSqlError.TryAdd(errorKey, true); dicSqlError.TryAdd(errorKey, true);
continue; continue;
} }
} }

View File

@ -151,7 +151,7 @@ namespace FreeSql.Internal.CommonProvider
if (_whereGlobalFilter.Any()) if (_whereGlobalFilter.Any())
{ {
var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter.Select(a => a.Where).ToList()); var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter.Select(a => a.Where).ToList(), false);
if (string.IsNullOrEmpty(globalFilterCondi) == false) if (string.IsNullOrEmpty(globalFilterCondi) == false)
sb.Append(" AND ").Append(globalFilterCondi); sb.Append(" AND ").Append(globalFilterCondi);
} }

View File

@ -830,7 +830,7 @@ namespace FreeSql.Internal.CommonProvider
sbJoin.Append($"midtb.{_commonUtils.QuoteSqlName(tbref.MiddleColumns[tbref.Columns.Count + z].Attribute.Name)} = a.{_commonUtils.QuoteSqlName(tbref.RefColumns[z].Attribute.Name)}"); sbJoin.Append($"midtb.{_commonUtils.QuoteSqlName(tbref.MiddleColumns[tbref.Columns.Count + z].Attribute.Name)} = a.{_commonUtils.QuoteSqlName(tbref.RefColumns[z].Attribute.Name)}");
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
{ {
var cascade = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Alias = "midtb", AliasInit = "midtb", Table = tbrefMid, Type = SelectTableInfoType.InnerJoin }, _whereCascadeExpression); var cascade = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Alias = "midtb", AliasInit = "midtb", Table = tbrefMid, Type = SelectTableInfoType.InnerJoin }, _whereCascadeExpression, true);
if (string.IsNullOrEmpty(cascade) == false) if (string.IsNullOrEmpty(cascade) == false)
sbJoin.Append(" AND (").Append(cascade).Append(")"); sbJoin.Append(" AND (").Append(cascade).Append(")");
} }

View File

@ -726,7 +726,7 @@ namespace FreeSql.Internal.CommonProvider
if (_whereGlobalFilter.Any()) if (_whereGlobalFilter.Any())
{ {
var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter.Select(a => a.Where).ToList()); var globalFilterCondi = _commonExpression.GetWhereCascadeSql(new SelectTableInfo { Table = _table }, _whereGlobalFilter.Select(a => a.Where).ToList(), false);
if (string.IsNullOrEmpty(globalFilterCondi) == false) if (string.IsNullOrEmpty(globalFilterCondi) == false)
sb.Append(" AND ").Append(globalFilterCondi); sb.Append(" AND ").Append(globalFilterCondi);
} }

View File

@ -19,7 +19,7 @@ namespace FreeSql.Dameng.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -20,7 +20,7 @@ namespace FreeSql.MsAccess.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.MySql.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Dameng
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Default
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Odbc.MySql
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Oracle
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Odbc.PostgreSQL
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -25,7 +25,7 @@ namespace FreeSql.Odbc.SqlServer
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;
@ -140,7 +140,7 @@ namespace FreeSql.Odbc.SqlServer
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Oracle.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.PostgreSQL.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -25,7 +25,7 @@ namespace FreeSql.SqlServer.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;
@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;

View File

@ -19,7 +19,7 @@ namespace FreeSql.Sqlite.Curd
if (_whereCascadeExpression.Any()) if (_whereCascadeExpression.Any())
foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent)) foreach (var tb in _tables.Where(a => a.Type != SelectTableInfoType.Parent))
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression); tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereCascadeExpression, true);
var sb = new StringBuilder(); var sb = new StringBuilder();
var tbUnionsGt0 = tbUnions.Count > 1; var tbUnionsGt0 = tbUnions.Count > 1;