From 03a94888a87b8ae4bbb7c7b0a11e230f497599b2 Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Fri, 8 May 2020 10:38:39 +0800
Subject: [PATCH] - fix 1.5.0-preview0502 bug
---
FreeSql.DbContext/FreeSql.DbContext.xml | 16 ----------------
FreeSql.Tests/FreeSql.Tests/UnitTest2.cs | 5 ++++-
FreeSql/Internal/CommonExpression.cs | 15 +++++++++------
.../Internal/CommonProvider/DeleteProvider.cs | 2 +-
.../SelectProvider/Select1Provider.cs | 2 +-
.../Internal/CommonProvider/UpdateProvider.cs | 2 +-
.../FreeSql.Provider.Dameng/Curd/DamengSelect.cs | 2 +-
.../Curd/MsAccessSelect.cs | 2 +-
.../FreeSql.Provider.MySql/Curd/MySqlSelect.cs | 2 +-
.../Dameng/Curd/OdbcDamengSelect.cs | 2 +-
.../Default/Curd/OdbcSelect.cs | 2 +-
.../MySql/Curd/OdbcMySqlSelect.cs | 2 +-
.../Oracle/Curd/OdbcOracleSelect.cs | 2 +-
.../PostgreSQL/Curd/OdbcPostgreSQLSelect.cs | 2 +-
.../SqlServer/Curd/OdbcSqlServerSelect.cs | 4 ++--
.../FreeSql.Provider.Oracle/Curd/OracleSelect.cs | 2 +-
.../Curd/PostgreSQLSelect.cs | 2 +-
.../Curd/SqlServerSelect.cs | 4 ++--
.../FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs | 2 +-
19 files changed, 31 insertions(+), 41 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 4854f49c..132d875e 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -125,13 +125,6 @@
清空状态数据
-
-
- 根据 lambda 条件删除数据
-
-
-
-
添加
@@ -486,14 +479,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
index 7f0d97fc..3d0d109b 100644
--- a/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
+++ b/FreeSql.Tests/FreeSql.Tests/UnitTest2.cs
@@ -281,17 +281,20 @@ namespace FreeSql.Tests
g.sqlite.GlobalFilter.Apply("gft1", a => a.rowstate > -1 && g.sqlite.Select().Any(b => b.id == a.id))
.Apply("gft2", a => a.rowstate > -2)
- .Apply("gft3", a => a.rowstate > -3);
+ .Apply("gft3", a => a.rowstate > -3)
+ .Apply("gft11", a => a.rowstate > -1);
var tksk1 = g.sqlite.Select()
.InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10)
.ToList();
+ g.sqlite.Update().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var tksk2 = g.sqlite.Select()
.InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10)
.ToList();
+ g.sqlite.Update().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var dtot2 = g.sqlite.Select().ToList(a => new gfDto
{
diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs
index 8bb2196e..d328c134 100644
--- a/FreeSql/Internal/CommonExpression.cs
+++ b/FreeSql/Internal/CommonExpression.cs
@@ -1433,8 +1433,8 @@ namespace FreeSql.Internal
}
}
- static ConcurrentDictionary _dicGetWhereCascadeSqlError = new ConcurrentDictionary();
- public string GetWhereCascadeSql(SelectTableInfo tb, List _whereCascadeExpression)
+ static ConcurrentDictionary> _dicGetWhereCascadeSqlError = new ConcurrentDictionary>();
+ public string GetWhereCascadeSql(SelectTableInfo tb, List _whereCascadeExpression, bool isMultitb)
{
if (_whereCascadeExpression.Any())
{
@@ -1445,8 +1445,9 @@ namespace FreeSql.Internal
foreach (var fl in _whereCascadeExpression)
{
- var errorKey = FreeUtil.Sha1($"{tb.Table.Type.FullName},{fl.ToString()}");
- if (_dicGetWhereCascadeSqlError.ContainsKey(errorKey)) continue;
+ var dicSqlError = _dicGetWhereCascadeSqlError.GetOrAdd(tb.Table.Type, tp => new ConcurrentDictionary());
+ var errorKey = FreeUtil.Sha1($"{(isMultitb ? 1 : 0)},{fl.ToString()}");
+ if (dicSqlError.ContainsKey(errorKey)) continue;
var visitor = new ReplaceVisitor();
try
@@ -1456,7 +1457,9 @@ namespace FreeSql.Internal
new ReplaceVisitor().Modify(fl, newParameter),
newParameter
);
- var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC { _tables = new List(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(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);
if (isEmpty == false)
sb.Append(" AND ");
@@ -1466,7 +1469,7 @@ namespace FreeSql.Internal
}
catch
{
- _dicGetWhereCascadeSqlError.TryAdd(errorKey, true);
+ dicSqlError.TryAdd(errorKey, true);
continue;
}
}
diff --git a/FreeSql/Internal/CommonProvider/DeleteProvider.cs b/FreeSql/Internal/CommonProvider/DeleteProvider.cs
index 516b75f0..f4179e1d 100644
--- a/FreeSql/Internal/CommonProvider/DeleteProvider.cs
+++ b/FreeSql/Internal/CommonProvider/DeleteProvider.cs
@@ -151,7 +151,7 @@ namespace FreeSql.Internal.CommonProvider
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)
sb.Append(" AND ").Append(globalFilterCondi);
}
diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
index f75af392..c9bd0f50 100644
--- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
+++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs
@@ -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)}");
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)
sbJoin.Append(" AND (").Append(cascade).Append(")");
}
diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
index e3cdd898..4f85e510 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
@@ -726,7 +726,7 @@ namespace FreeSql.Internal.CommonProvider
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)
sb.Append(" AND ").Append(globalFilterCondi);
}
diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengSelect.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengSelect.cs
index e93a68f6..c9087dff 100644
--- a/Providers/FreeSql.Provider.Dameng/Curd/DamengSelect.cs
+++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Dameng.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
index dde8525e..b692561a 100644
--- a/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
+++ b/Providers/FreeSql.Provider.MsAccess/Curd/MsAccessSelect.cs
@@ -20,7 +20,7 @@ namespace FreeSql.MsAccess.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
index c29cc5e7..802bc791 100644
--- a/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
+++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.MySql.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
index fdba488e..b876790a 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Dameng
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
index 1611f4f7..7479b256 100644
--- a/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Default/Curd/OdbcSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Default
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
index 13790134..078ec66f 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Odbc.MySql
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
index 6dafdef1..ccefb0f7 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Odbc.Oracle
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
index 0ef6c116..86d3e7de 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Odbc.PostgreSQL
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
index 09b2cd46..9a6d2cde 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerSelect.cs
@@ -25,7 +25,7 @@ namespace FreeSql.Odbc.SqlServer
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
@@ -140,7 +140,7 @@ namespace FreeSql.Odbc.SqlServer
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
index f73aaaa5..7a725285 100644
--- a/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
+++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Oracle.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
index 4485b2be..80b28769 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.PostgreSQL.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
index 459f96f5..024bc957 100644
--- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
+++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerSelect.cs
@@ -25,7 +25,7 @@ namespace FreeSql.SqlServer.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
@@ -140,7 +140,7 @@ namespace FreeSql.SqlServer.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;
diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
index f2cf82db..bf2af50d 100644
--- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
+++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteSelect.cs
@@ -19,7 +19,7 @@ namespace FreeSql.Sqlite.Curd
if (_whereCascadeExpression.Any())
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 tbUnionsGt0 = tbUnions.Count > 1;