From 3cb53df5a56d021f3c95e0cfba8b4c7881fabda4 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 18 Sep 2023 20:26:43 +0800 Subject: [PATCH 01/35] update summary --- FreeSql/FreeSqlBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 8b0854a9..3c3719ac 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -194,7 +194,7 @@ namespace FreeSql } /// - /// 指定映射优先级 + /// 指定映射优先级(从小到大) /// 例如表名:实体类名 < Aop < FluentApi < Attribute < AsTable /// 事件 Aop -------> fsql.Aop.ConfigEntity/fsql.Aop.ConfigEntityProperty /// 方法 FluentApi -> fsql.CodeFirst.ConfigEntity/fsql.CodeFirst.Entity From 6d483a5ad9cf6fdd7b4554531b08cefae5590d03 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 19 Sep 2023 14:54:40 +0800 Subject: [PATCH 02/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20MySql=20AsTreeCt?= =?UTF-8?q?e=20cte=5Fpath=20=E5=8F=AF=E8=83=BD=E9=95=BF=E5=BA=A6=E8=BF=87?= =?UTF-8?q?=E7=9F=AD=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 339470e7..04fc694b 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -733,6 +733,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec } var sql1ctePath = ""; + var wct2ctePath = ""; if (pathSelector != null) { select._tables[0].Parameter = pathSelector?.Parameters[0]; @@ -750,9 +751,18 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec case DataType.Firebird: case DataType.ClickHouse: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null); + wct2ctePath = sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); + break; + case DataType.MySql: + case DataType.OdbcMySql: + case DataType.CustomMySql: + sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); + sql1ctePath = $"CAST({sql1ctePath} as char(2000))"; + wct2ctePath = sql1ctePath; break; default: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); + wct2ctePath = sql1ctePath; break; } sql1ctePath = $"{sql1ctePath} as cte_path, "; @@ -770,7 +780,6 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec if (pathSelector != null) { select._tables[0].Parameter = pathSelector?.Parameters[0]; - var wct2ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); sql2ctePath = select._commonUtils.StringConcat( new string[] { up == false ? "wct1.cte_path" : wct2ctePath, From be6f2fa9c2cc04ce5bf01fc38d2b01a493021088 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 19 Sep 2023 14:58:28 +0800 Subject: [PATCH 03/35] v3.2.801-preview20230919 --- Directory.Build.props | 4 ++-- .../FreeSql.Extensions.AggregateRoot.csproj | 4 ++-- .../FreeSql.Extensions.BaseEntity.csproj | 4 ++-- .../FreeSql.Extensions.JsonMap.csproj | 4 ++-- .../FreeSql.Extensions.LazyLoading.csproj | 4 ++-- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 4 ++-- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 4 ++-- FreeSql.All/FreeSql.All.csproj | 4 ++-- FreeSql.DbContext/FreeSql.DbContext.csproj | 4 ++-- FreeSql.Repository/FreeSql.Repository.csproj | 4 ++-- FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 2 +- FreeSql/FreeSql.csproj | 4 ++-- FreeSql/FreeSql.xml | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 4 ++-- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 4 ++-- .../FreeSql.Provider.Firebird.csproj | 4 ++-- .../FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 4 ++-- .../FreeSql.Provider.KingbaseES.csproj | 4 ++-- .../FreeSql.Provider.MsAccess.csproj | 4 ++-- .../FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 4 ++-- .../FreeSql.Provider.MySqlConnector.csproj | 4 ++-- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 4 ++-- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 4 ++-- .../FreeSql.Provider.OracleOledb.csproj | 4 ++-- .../FreeSql.Provider.PostgreSQL.csproj | 4 ++-- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 4 ++-- .../FreeSql.Provider.ShenTong.csproj | 4 ++-- .../FreeSql.Provider.SqlServer.csproj | 4 ++-- .../FreeSql.Provider.SqlServerForSystem.csproj | 4 ++-- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 4 ++-- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 33 files changed, 61 insertions(+), 61 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 374742b9..e5627cff 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,4 +1,4 @@ - + https://github.com/dotnetcore/FreeSql true @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 548373c9..c897ba83 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index d858d782..9056ee31 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -19,7 +19,7 @@ key.snk false latest - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 4c1b570c..822aacb4 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 3e084d11..dbff96be 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;netstandard2.1;net45;net40 @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 82507299..6cb56526 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 864cee04..78a8d0d4 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -1,4 +1,4 @@ - + Exe @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index ce39d84a..c5db8507 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index b33ab433..7d09b5a7 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net70;net60;net50;netcoreapp31;netcoreapp21;net45;net40 @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 46db453f..639efd1a 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net70;net60;net50;netcoreapp31;netcoreapp21;net45;net40 @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 04fc694b..26445eb9 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -751,7 +751,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec case DataType.Firebird: case DataType.ClickHouse: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null); - wct2ctePath = sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); + wct2ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); break; case DataType.MySql: case DataType.OdbcMySql: diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 137392e3..a2cc8e05 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -1,4 +1,4 @@ - + netstandard2.1;netstandard2.0;net451;net45;net40 @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 368317df..9b5affeb 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1543,7 +1543,7 @@ - 指定映射优先级 + 指定映射优先级(从小到大) 例如表名:实体类名 < Aop < FluentApi < Attribute < AsTable 事件 Aop -------> fsql.Aop.ConfigEntity/fsql.Aop.ConfigEntityProperty 方法 FluentApi -> fsql.CodeFirst.ConfigEntity/fsql.CodeFirst.Entity diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index b3c693a2..513a3f35 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index fe345322..4ddb1ae8 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 821ed25b..ca8686be 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -1,4 +1,4 @@ - + net60;netcoreapp3.1;netstandard2.0;net45;net40 @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index cc57398c..eca42158 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net452 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 84a60e63..5147ec27 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index ddbbd357..f47bea6a 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net461 @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 1a1bf38b..cfa9a500 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index ea83b5c8..283e97ab 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net452;net451;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 05d1d52f..62da3dc7 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net60;net50;net45;netstandard2.1;netcoreapp2.1;netcoreapp3.1; @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index ba3b654a..08f11acd 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 4ba3ed8a..137cfdf1 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;netstandard2.1;net60;net50;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index d9c4eaa3..2f456e0c 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index e30fa0fb..8958f05b 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net461;net452;net451;net45 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 74ef5f22..fa228bae 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -1,4 +1,4 @@ - + netstandard2.0; @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 211e6c68..bed6fcf5 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 9bca4b70..285beb89 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net60;net50;net451;net45;net40 @@ -18,7 +18,7 @@ true false key.snk - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 845e2b3d..5b00d27a 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net60;net50;net451;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 23e2dd95..90849bac 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -1,4 +1,4 @@ - + netstandard2.0;net45;net40 @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 4aa94df7..c82be202 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230917 + 3.2.801-preview20230919 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index cfcba12d..a7c62310 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230917 + 3.2.801-preview20230919 From 9e3b258ffdbd6cdb3840810cf5eaab97ef658775 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 21 Sep 2023 20:08:17 +0800 Subject: [PATCH 04/35] =?UTF-8?q?-=20=E6=81=A2=E5=A4=8D=20MySql=20ServerTi?= =?UTF-8?q?me=20=3D=20Utc=20=EF=BC=9B#1604=20#1624?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 7 ++++++- .../FreeSql.Provider.Custom/MySql/CustomMySqlUtils.cs | 2 +- Providers/FreeSql.Provider.MySql/MySqlUtils.cs | 2 +- .../FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs | 2 +- Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 38513aab..aa95c1cf 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -258,9 +258,14 @@ namespace FreeSql.Internal commonNow = $"{commonNow.TrimEnd('(', ')')}({timeLength})"; commonNowUtc = $"{commonNowUtc.TrimEnd('(', ')')}({timeLength})"; } + //https://github.com/dotnetcore/FreeSql/issues/1604 mysql 不支持默认值 utc_timestamp DDL + if (colattr.ServerTime == DateTimeKind.Local) + col.DbDefaultValue = commonNow; + break; + default: + col.DbDefaultValue = colattr.ServerTime == DateTimeKind.Local ? commonNow : commonNowUtc; break; } - col.DbDefaultValue = colattr.ServerTime == DateTimeKind.Local ? commonNow : commonNowUtc; col.DbInsertValue = colattr.ServerTime == DateTimeKind.Local ? commonNow : commonNowUtc; col.DbUpdateValue = colattr.ServerTime == DateTimeKind.Local ? commonNow : commonNowUtc; } diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlUtils.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlUtils.cs index 41d81cf0..82db8cfc 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlUtils.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlUtils.cs @@ -68,7 +68,7 @@ namespace FreeSql.Custom.MySql public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}"; public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}"; public override string Now => "now()"; - public override string NowUtc => "current_timestamp()"; + public override string NowUtc => "utc_timestamp()"; public override string QuoteWriteParamterAdapter(Type type, string paramterName) { diff --git a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs index f8d17211..a1622cc6 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs @@ -100,7 +100,7 @@ namespace FreeSql.MySql public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}"; public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}"; public override string Now => "now()"; - public override string NowUtc => "current_timestamp()"; + public override string NowUtc => "utc_timestamp()"; public override string QuoteWriteParamterAdapter(Type type, string paramterName) { diff --git a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs index 27374291..ad08572d 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs @@ -118,7 +118,7 @@ namespace FreeSql.MySql public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}"; public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}"; public override string Now => "now()"; - public override string NowUtc => "current_timestamp()"; + public override string NowUtc => "utc_timestamp()"; public override string QuoteWriteParamterAdapter(Type type, string paramterName) { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs index c451aeb2..d78f43ea 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs @@ -64,7 +64,7 @@ namespace FreeSql.Odbc.MySql public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}"; public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}"; public override string Now => "now()"; - public override string NowUtc => "current_timestamp()"; + public override string NowUtc => "utc_timestamp()"; public override string QuoteWriteParamterAdapter(Type type, string paramterName) { From d40036dce8ecdef8d5b618fc5dfc07d3714ce778 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 21 Sep 2023 20:11:19 +0800 Subject: [PATCH 05/35] =?UTF-8?q?=E4=B8=8B=E6=9E=B6=20v3.2.800=20=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=8F=91=E5=B8=83=20v3.2.801=20#1624=20#1615=20#1613?= =?UTF-8?q?=20#1612=20#1604=20#1603=20#1601=20#1595=20#1591=20#1593=20#158?= =?UTF-8?q?7=20#1586=20#1566=20#1492?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj | 2 +- Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj | 2 +- Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index e5627cff..9568e7cc 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index c897ba83..5aa224ce 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 9056ee31..4eb8e1ee 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.801-preview20230919 + 3.2.801 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 822aacb4..c9bb2efc 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index dbff96be..5c335ac7 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230919 + 3.2.801 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 6cb56526..b77650a6 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 78a8d0d4..5cab4df7 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.801-preview20230919 + 3.2.801 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index c5db8507..362a00af 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 7d09b5a7..cfa48a71 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 639efd1a..dac02ef3 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index a2cc8e05..128efd91 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 513a3f35..a9d72c9e 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 4ddb1ae8..cf5ad1f8 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index ca8686be..c61a0fdd 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index eca42158..4b75f25c 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 5147ec27..e5724924 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index f47bea6a..294a5dfc 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index cfa9a500..14966021 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 283e97ab..85bf1ddf 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 62da3dc7..0b52c0a1 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 08f11acd..01933291 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 137cfdf1..72e298e5 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 2f456e0c..a4b7cdc4 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 8958f05b..748092c5 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index fa228bae..102af9f0 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index bed6fcf5..b762f89f 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 285beb89..ffb0c810 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 5b00d27a..014059a4 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 90849bac..8385157b 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index c82be202..eef69bdd 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801-preview20230919 + 3.2.801 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index a7c62310..5c7c53e2 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801-preview20230919 + 3.2.801 From aa56b2bf2fa8999450b71f34092ab2d1226160c3 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 25 Sep 2023 18:50:58 +0800 Subject: [PATCH 06/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20RawJoin=20?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E7=94=9F=E6=88=90=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=20SQL=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommonProvider/SelectProvider/Select0Provider.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 30826ac7..72e6bea2 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -672,9 +672,12 @@ namespace FreeSql.Internal.CommonProvider _join.Append(" \r\n").Append(sql); //fsql.Select().RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId").ToSql((a, b) => new { user = a, group = b }); - foreach (var tb in _tables) + for (var a = 1; a < _tables.Count; a++) + { + var tb = _tables[a]; if (sql.Contains($" {tb.Table.DbName} ") || sql.Contains($" {_commonUtils.QuoteSqlName(tb.Table.DbName)} ")) tb.Type = SelectTableInfoType.RawJoin; + } return this as TSelect; } From 792642939346e59250cf8187c1b2b9123cf89a32 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 25 Sep 2023 18:52:42 +0800 Subject: [PATCH 07/35] v3.2.802-preview20230925 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj | 2 +- Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj | 2 +- Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 9568e7cc..13f80bfe 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 5aa224ce..97a4a850 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 4eb8e1ee..47e1273a 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.801 + 3.2.802-preview20230925 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index c9bb2efc..dc1cf4b8 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 5c335ac7..6cf077b9 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801 + 3.2.802-preview20230925 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index b77650a6..29e75b72 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 5cab4df7..97273745 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.801 + 3.2.802-preview20230925 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 362a00af..30b5543c 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index cfa48a71..8f91db5a 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index dac02ef3..233a335a 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 128efd91..8f74996d 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index a9d72c9e..23905e9f 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index cf5ad1f8..4dd0332c 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index c61a0fdd..e1735a5b 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 4b75f25c..0bffcf5c 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index e5724924..c0a5c781 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 294a5dfc..bf700848 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 14966021..eb5c1aa1 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 85bf1ddf..720d81ef 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 0b52c0a1..658c1b86 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 01933291..585e7388 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 72e298e5..83edff8d 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index a4b7cdc4..7558fd32 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 748092c5..57edd4b1 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 102af9f0..f6badca9 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index b762f89f..29e23233 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index ffb0c810..a355b68e 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 014059a4..f9d2a63f 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 8385157b..0bb5cd3a 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index eef69bdd..2be4f4d9 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.801 + 3.2.802-preview20230925 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 5c7c53e2..84a3eb08 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.801 + 3.2.802-preview20230925 From 922f64524922447eb548d0fcfb734c7d77596a10 Mon Sep 17 00:00:00 2001 From: hyzx86 Date: Tue, 26 Sep 2023 22:54:15 +0800 Subject: [PATCH 08/35] =?UTF-8?q?=E4=B8=BA=E5=A4=9A=E5=AE=9E=E4=BE=8B=20?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E8=A1=A8=E5=90=8D=E8=A7=84=E5=88=99=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E5=BC=80=E6=94=BE=E7=BC=93=E5=AD=98=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=EF=BC=8C=E5=8F=AF=E4=BD=BF=E7=94=A8MemoryCache?= =?UTF-8?q?=E7=AD=89=E5=8A=9F=E8=83=BD=E6=9B=BF=E6=8D=A2=E4=B8=BA=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 避免全局静态缓存表名称无法替换 --- FreeSql/Internal/UtilsExpressionTree.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index aa95c1cf..683406f6 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -19,8 +19,10 @@ namespace FreeSql.Internal { public class Utils { - - static ConcurrentDictionary> _cacheGetTableByEntity = new ConcurrentDictionary>(); + public static ConcurrentDictionary> _cacheGetTableByEntity + { + get; set; + } = new ConcurrentDictionary>(); internal static void RemoveTableByEntity(Type entity, CommonUtils common) { if (entity.IsAnonymousType() || @@ -534,7 +536,7 @@ namespace FreeSql.Internal { col.Attribute.IsNullable = false; col.Attribute.DbType = col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(); - switch(common._orm.Ado.DataType) + switch (common._orm.Ado.DataType) { case DataType.Sqlite: col.Attribute.DbType += " NOT NULL"; //sqlite 主键也可以插入 null From 3c7d67fcc2d85b0facdf80ef35d406838f1b1ae8 Mon Sep 17 00:00:00 2001 From: hyzx86 Date: Wed, 27 Sep 2023 00:54:43 +0800 Subject: [PATCH 09/35] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=A4=9A=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E6=83=85=E5=86=B5=E4=B8=8B=E7=9A=84=E9=9D=99=E6=80=81?= =?UTF-8?q?=E9=9B=86=E5=90=88=E7=BC=93=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 38 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 683406f6..352ca6d4 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -19,10 +19,24 @@ namespace FreeSql.Internal { public class Utils { + /// + /// 用于解决多实例情况下的静态集合缓存问题 + /// + public static Func>> ChacheTableEntityFactory = null; + private static ConcurrentDictionary> __cacheGetTableByEntity; public static ConcurrentDictionary> _cacheGetTableByEntity { - get; set; - } = new ConcurrentDictionary>(); + get + { + + if (ChacheTableEntityFactory != null) + { + return ChacheTableEntityFactory.Invoke(); + } + __cacheGetTableByEntity ??= new ConcurrentDictionary>(); + return __cacheGetTableByEntity; + } + } internal static void RemoveTableByEntity(Type entity, CommonUtils common) { if (entity.IsAnonymousType() || @@ -1782,16 +1796,16 @@ namespace FreeSql.Internal Expression.IfThenElse(Expression.Equal(read2ExpValue, Expression.Constant(null)), Expression.Assign(Expression.MakeMemberAccess(ret2Exp, field), Expression.Default(field.FieldType)), Expression.Assign(Expression.MakeMemberAccess(ret2Exp, field), Expression.Convert(read2ExpValue, field.FieldType))) - //), - //Expression.Catch(typeof(Exception), Expression.Block( - // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(0)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 0)))), - // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(1)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 1)))), - // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(2)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 2)))), - // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(3)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 3)))), - // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(4)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 4)))) - // ) - //)) - }); + //), + //Expression.Catch(typeof(Exception), Expression.Block( + // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(0)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 0)))), + // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(1)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 1)))), + // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(2)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 2)))), + // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(3)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 3)))), + // Expression.IfThen(Expression.Equal(read2ExpDataIndex, Expression.Constant(4)), Expression.Throw(Expression.Constant(new Exception(field.Name + "," + 4)))) + // ) + //)) + }); } block2Exp.AddRange(new Expression[] { Expression.Return(returnTarget, Expression.New(RowInfo.Constructor, Expression.Convert(ret2Exp, typeof(object)), dataIndexExp)), From 456c09152c512593a3bc865fe60962928cb0b1a6 Mon Sep 17 00:00:00 2001 From: hyzx86 Date: Wed, 27 Sep 2023 00:56:37 +0800 Subject: [PATCH 10/35] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 352ca6d4..ebd6d9ea 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -28,7 +28,6 @@ namespace FreeSql.Internal { get { - if (ChacheTableEntityFactory != null) { return ChacheTableEntityFactory.Invoke(); From be5b2cc044457836ddd7c82a2f6c8310aded910a Mon Sep 17 00:00:00 2001 From: hyzx86 Date: Wed, 27 Sep 2023 01:03:14 +0800 Subject: [PATCH 11/35] =?UTF-8?q?=E5=90=91FreeSqlBuilder=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E8=A1=A8=E4=BF=A1=E6=81=AF=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSqlBuilder.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 3c3719ac..37fad903 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -11,6 +11,7 @@ using System.Linq.Expressions; using System.Runtime; using FreeSql.Internal.Model.Interface; using System.Threading; +using FreeSql.Internal.Model; namespace FreeSql { @@ -50,6 +51,18 @@ namespace FreeSql _providerType = providerType; return this; } + + /// + /// 用于指定自定义实现TableEntiy 的缓存集合 + /// 解决多实例下相同类型映射到不同表的问题 + /// + /// + /// + public FreeSqlBuilder UseCustomTableEntityCacheFactory(Func>> factory) + { + Utils.ChacheTableEntityFactory = factory; + return this; + } /// /// 使用原始连接池(ado.net、odbc、oledb) /// 默认:false @@ -63,7 +76,7 @@ namespace FreeSql /// public FreeSqlBuilder UseAdoConnectionPool(bool value) { - _isAdoConnectionPool = value ; + _isAdoConnectionPool = value; return this; } /// @@ -577,7 +590,8 @@ namespace FreeSql { FreeSql.Internal.Utils.GetDataReaderValueBlockExpressionSwitchTypeFullName.Add((LabelTarget returnTarget, Expression valueExp, Type type2) => { - if (FreeSql.Internal.Utils.TypeHandlers.TryGetValue(type2, out var typeHandler)) { + if (FreeSql.Internal.Utils.TypeHandlers.TryGetValue(type2, out var typeHandler)) + { var valueExpRet = Expression.Call( Expression.Constant(typeHandler, typeof(ITypeHandler)), typeof(ITypeHandler).GetMethod(nameof(typeHandler.Deserialize)), From a278578daf50b8cbe59be87224e8584a840cab8e Mon Sep 17 00:00:00 2001 From: hyzx86 Date: Wed, 27 Sep 2023 01:22:37 +0800 Subject: [PATCH 12/35] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=8E=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 13 +++++++++++++ FreeSql/Internal/UtilsExpressionTree.cs | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 9b5affeb..88245752 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1445,6 +1445,14 @@ 提供者的类型,一般不需要指定,如果一直提示“缺少 FreeSql 数据库实现包:FreeSql.Provider.MySql.dll,可前往 nuget 下载”的错误,说明反射获取不到类型,此时该参数可排上用场例如:typeof(FreeSql.SqlServer.SqlServerProvider<>) + + + 用于指定自定义实现TableEntiy 的缓存集合 + 解决多实例下相同类型映射到不同表的问题 + + + + 使用原始连接池(ado.net、odbc、oledb) @@ -5002,6 +5010,11 @@ + + + 用于解决多实例情况下的静态集合缓存问题 + + diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index ebd6d9ea..03155a2e 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -23,7 +23,7 @@ namespace FreeSql.Internal /// 用于解决多实例情况下的静态集合缓存问题 /// public static Func>> ChacheTableEntityFactory = null; - private static ConcurrentDictionary> __cacheGetTableByEntity; + private static ConcurrentDictionary> __cacheGetTableByEntity = new ConcurrentDictionary>(); public static ConcurrentDictionary> _cacheGetTableByEntity { get @@ -32,7 +32,6 @@ namespace FreeSql.Internal { return ChacheTableEntityFactory.Invoke(); } - __cacheGetTableByEntity ??= new ConcurrentDictionary>(); return __cacheGetTableByEntity; } } From 7122485899d2dab7ee4c82f3ac402e7baf229b20 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 27 Sep 2023 21:33:26 +0800 Subject: [PATCH 13/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Reposition.Inser?= =?UTF-8?q?tOrUpdate=20=E6=9B=B4=E6=96=B0=E6=9C=AA=E5=8F=98=E5=8C=96?= =?UTF-8?q?=E6=97=B6=E7=9A=84=20SQL=20=E9=94=99=E8=AF=AF=EF=BC=9B#1630?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 253 +++++++++++++++++++++++++- FreeSql.DbContext/DbSet/DbSetAsync.cs | 2 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 2 +- 3 files changed, 254 insertions(+), 3 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index b09362ba..f4177221 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -561,7 +561,7 @@ namespace base_entity .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") - //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") + .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") @@ -600,6 +600,12 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var risWorkListRepo = fsql.GetRepository(); + risWorkListRepo.InsertOrUpdate(new EBH_RisWorkList + { + RequisitionID = "xxx" + }); + var tqq01 = fsql.Select().Where(a => a.IsDeleted || a.IsDeleted || a.IsDeleted).ToSql(); fsql.GlobalFilter.Apply("test01", a => a.IsDeleted == false); @@ -2678,4 +2684,249 @@ class FormLocking { public string Value { get; set; } public string Text { get; set; } +} +[JsonObject(MemberSerialization.OptIn), Table(Name = "RIS_WORKLIST")] +public class EBH_RisWorkList +{ + [JsonProperty, Column(DbType = "varchar(64)", IsPrimary = true)] + public string RequisitionID { get; set; } + + [JsonProperty, Column(Name = "accession_number", DbType = "varchar(32)")] + public string Accession_number { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string Address { get; set; } + + [JsonProperty] + public int? AFCID { get; set; } + + [JsonProperty, Column(IsIdentity = true)] + public int AutoIndex { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string Birthday { get; set; } + + [JsonProperty, Column(DbType = "varchar(8)")] + public string BirthTime { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string CertificateID { get; set; } + + [JsonProperty, Column(DbType = "varchar(512)")] + public string CheckSTDescribed { get; set; } + + [JsonProperty, Column(DbType = "varchar(2048)")] + public string ClinicDiagnose { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ClinicID { get; set; } + + [JsonProperty] + public int? Confidentiality { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string CustomCheckNumber { get; set; } + + [JsonProperty] + public int DepartmentID { get; set; } + + [JsonProperty] + public int EmergencyID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string EndoscopyType { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string ExamBodyPart { get; set; } + + [JsonProperty] + public int? ExamBodyPartNum { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ExamDate { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string ExamMethod { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ExamParameter { get; set; } + + [JsonProperty, Column(Name = "exampath", DbType = "varchar(50)")] + public string Exampath { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ExamTime { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string FamilyTelephe { get; set; } + + [JsonProperty, Column(DbType = "varchar(64)")] + public string FeeTypeName { get; set; } + + [JsonProperty] + public int? FollowFlag { get; set; } + + [JsonProperty] + public int? HaveImage { get; set; } + + [JsonProperty] + public int? HaveRemark { get; set; } + + [JsonProperty, Column(DbType = "varchar(50)")] + public string HospitalAreaName { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string HospitalID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ImageName { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string ImagePath { get; set; } + + [JsonProperty, Column(Name = "imagequality", DbType = "varchar(32)")] + public string Imagequality { get; set; } + + [JsonProperty] + public int? InAdvanceQueue { get; set; } + + [JsonProperty] + public int? InDeedQueue { get; set; } + + [JsonProperty, Column(Name = "isAddPatient", DbType = "varchar(2)")] + public string IsAddPatient { get; set; } + + [JsonProperty, Column(Name = "isChangeDate", DbType = "varchar(2)")] + public string IsChangeDate { get; set; } + + [JsonProperty, Column(Name = "isIBD", DbType = "varchar(2)")] + public string IsIBD { get; set; } + + [JsonProperty] + public int? IsNotCallNumber { get; set; } + + [JsonProperty] + public int? IsNotNOScreen { get; set; } + + [JsonProperty, Column(Name = "isOverTime", DbType = "varchar(2)")] + public string IsOverTime { get; set; } + + [JsonProperty] + public int? IsPaSSNumber { get; set; } + + [JsonProperty, Column(Name = "isSEZCJ", DbType = "varchar(2)")] + public string IsSEZCJ { get; set; } + + [JsonProperty] + public int IsSpePatientSign { get; set; } + + [JsonProperty] + public int? IsTexu { get; set; } + + [JsonProperty, Column(Name = "isZhiLiao", DbType = "varchar(2)")] + public string IsZhiLiao { get; set; } + + [JsonProperty] + public DateTime? LastTryForImage { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string MedicalCardNumber { get; set; } + + [JsonProperty, Column(DbType = "varchar(4096)")] + public string MedicalHistory { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string MIcardNumber { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ModalityAE { get; set; } + + [JsonProperty] + public int? ModalityID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ModalityName { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ModalityRemark { get; set; } + + [JsonProperty] + public int? ModalityRoomID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ModalityType { get; set; } + + [JsonProperty] + public int? NurseStationFlag { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string PathologicID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string PatientID { get; set; } + + [JsonProperty] + public int PatientTypeID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string PhysicalExamID { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string PhysicianRequirements { get; set; } + + [JsonProperty] + public int PrintFlag { get; set; } + + [JsonProperty] + public int? PrintNoticeFlag { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string PTN_NAME { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string PY { get; set; } + + [JsonProperty] + public int QueueStateID { get; set; } + + [JsonProperty, Column(DbType = "varchar(2048)")] + public string Remarks { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ReqDepartment { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ReqHospital { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string ReqPhysician { get; set; } + + [JsonProperty] + public int? ResourceID { get; set; } + + [JsonProperty] + public int? SendRepFlag { get; set; } + + [JsonProperty, Column(Name = "SEX", DbType = "varchar(32)")] + public string Sex { get; set; } + + [JsonProperty, Column(DbType = "varchar(50)")] + public string SickbedID { get; set; } + + [JsonProperty] + public int? StateID { get; set; } + + [JsonProperty] + public int? StationID { get; set; } + + [JsonProperty, Column(DbType = "varchar(32)")] + public string Telephone { get; set; } + + [JsonProperty] + public double? Weight { get; set; } + + [JsonProperty, Column(DbType = "varchar(128)")] + public string WorkStationAddress { get; set; } + + } \ No newline at end of file diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index 18763e4e..aa35bdf8 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -404,7 +404,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count) + if (cuig.Length == _table.Columns.Count - _table.Primarys.Length) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 19bcc519..50bef5a2 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -438,7 +438,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count) + if (cuig.Length == _table.Columns.Count - _table.Primarys.Length) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); From 18d610cffb0e753e7f768b5136b51ca7415314ec Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 27 Sep 2023 21:55:55 +0800 Subject: [PATCH 14/35] =?UTF-8?q?-=20=E7=94=BB=E8=9B=87=E6=B7=BB=E4=B8=8B?= =?UTF-8?q?=E8=B6=B3=20#1627?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Internal/UtilsExpressionTree.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 03155a2e..572dcc4a 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -24,17 +24,7 @@ namespace FreeSql.Internal /// public static Func>> ChacheTableEntityFactory = null; private static ConcurrentDictionary> __cacheGetTableByEntity = new ConcurrentDictionary>(); - public static ConcurrentDictionary> _cacheGetTableByEntity - { - get - { - if (ChacheTableEntityFactory != null) - { - return ChacheTableEntityFactory.Invoke(); - } - return __cacheGetTableByEntity; - } - } + public static ConcurrentDictionary> _cacheGetTableByEntity => ChacheTableEntityFactory?.Invoke() ?? __cacheGetTableByEntity; internal static void RemoveTableByEntity(Type entity, CommonUtils common) { if (entity.IsAnonymousType() || From 831c13bc96e7fa4a7f0071245bbee1b110a41662 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 27 Sep 2023 21:57:47 +0800 Subject: [PATCH 15/35] v3.2.802-preview20230927 #1627 #1626 #1630 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj | 2 +- Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj | 2 +- Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 13f80bfe..ea7b551d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 97a4a850..d2e817b7 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 47e1273a..d28d6448 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index dc1cf4b8..ba2dbfec 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 6cf077b9..9c86261f 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 29e75b72..3fbc5468 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 97273745..6a337a36 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 30b5543c..175e318f 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 8f91db5a..08b27a91 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 233a335a..59eccf8a 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 8f74996d..5db1c2fe 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 23905e9f..69ca4422 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 4dd0332c..3a0d64ab 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index e1735a5b..7b9e4fda 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 0bffcf5c..bace2382 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index c0a5c781..917e034f 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index bf700848..462d12c8 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index eb5c1aa1..ae5318dc 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 720d81ef..c2f58247 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 658c1b86..4baebbdc 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 585e7388..888763a5 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 83edff8d..73353125 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 7558fd32..7672f913 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 57edd4b1..fcf454ef 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index f6badca9..e035850d 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 29e23233..7a06dbd7 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index a355b68e..5d8ca4ec 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index f9d2a63f..8770f876 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 0bb5cd3a..90f7278b 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 2be4f4d9..5028467e 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230925 + 3.2.802-preview20230927 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 84a3eb08..b4a90a56 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230925 + 3.2.802-preview20230927 From 1f3f60f6fa3ec3ef32cede2ae96ce13588af31d2 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 28 Sep 2023 12:47:43 +0800 Subject: [PATCH 16/35] v3.2.802-preview20230928 #1630 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/DbSet/DbSetAsync.cs | 2 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj | 2 +- Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj | 2 +- Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index ea7b551d..491b532b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index d2e817b7..bb280be9 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index d28d6448..3692b76f 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index ba2dbfec..fd1a17b7 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 9c86261f..170649b4 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 3fbc5468..c3bc1621 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 6a337a36..45039b59 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 175e318f..5b1899c3 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index aa35bdf8..a8967488 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -404,7 +404,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count - _table.Primarys.Length) + if (cuig.Length >= _table.Columns.Count - _table.Primarys.Length) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 50bef5a2..04016961 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -438,7 +438,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length == _table.Columns.Count - _table.Primarys.Length) + if (cuig.Length >= _table.Columns.Count - _table.Primarys.Length) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 08b27a91..5321c1a4 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 59eccf8a..63a5c5c4 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 5db1c2fe..4db0f34f 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 69ca4422..993b2675 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 3a0d64ab..11d956b7 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 7b9e4fda..8ca6ef8a 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index bace2382..4ac8ff3d 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 917e034f..8a1d08d9 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 462d12c8..a4dcf801 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index ae5318dc..2459fbec 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index c2f58247..f767209c 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 4baebbdc..bdce0a9d 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 888763a5..64676f95 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 73353125..fc30107c 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 7672f913..367a53ea 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index fcf454ef..3f85aa1d 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index e035850d..2119a328 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 7a06dbd7..d19bc12a 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 5d8ca4ec..a020a60a 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 8770f876..15021436 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 90f7278b..68b61a51 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 5028467e..7efb0660 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230927 + 3.2.802-preview20230928 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index b4a90a56..fb8d0ba9 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230927 + 3.2.802-preview20230928 From 58f261b5e5f7a5921ffa42967f6e2966290255e7 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 10 Oct 2023 02:07:29 +0800 Subject: [PATCH 17/35] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20TypeHandlers=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20DateTime=20=E6=98=A0=E5=B0=84=E8=A7=84?= =?UTF-8?q?=E5=88=99=EF=BC=9B#1634?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSqlBuilder.cs | 5 +++-- FreeSql/Internal/UtilsExpressionTree.cs | 8 ++++++++ .../ClickHouseAdo/ClickHouseAdo.cs | 12 +++++++++++- Providers/FreeSql.Provider.Custom/CustomAdapter.cs | 3 +++ .../MySql/CustomMySqlAdo/CustomMySqlAdo.cs | 12 +++++++++++- .../Oracle/CustomOracleAdo/CustomOracleAdo.cs | 12 +++++++++++- Providers/FreeSql.Provider.Custom/OracleAdapter.cs | 3 +++ .../CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs | 12 +++++++++++- .../CustomSqlServerAdo/CustomSqlServerAdo.cs | 11 +++++++++-- .../FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs | 12 +++++++++++- .../FirebirdAdo/FirebirdAdo.cs | 12 +++++++++++- .../FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs | 12 +++++++++++- Providers/FreeSql.Provider.GBase/GBaseUtils.cs | 10 +++++++++- .../KingbaseESAdo/KingbaseESAdo.cs | 12 +++++++++++- .../MsAccessAdo/MsAccessAdo.cs | 11 ++++++++++- .../FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs | 12 +++++++++++- .../Dameng/OdbcDamengAdo/OdbcDamengAdo.cs | 12 +++++++++++- .../FreeSql.Provider.Odbc/Default/OdbcAdapter.cs | 3 +++ .../OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs | 12 +++++++++++- .../MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs | 12 +++++++++++- .../Oracle/OdbcOracleAdo/OdbcOracleAdo.cs | 12 +++++++++++- .../OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs | 12 +++++++++++- .../SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs | 11 ++++++++++- .../FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs | 12 +++++++++++- .../PostgreSQLAdo/PostgreSQLAdo.cs | 12 +++++++++++- .../QuestDbAdo/QuestDbAdo.cs | 12 +++++++++++- .../ShenTongAdo/ShenTongAdo.cs | 12 +++++++++++- .../SqlServerAdo/SqlServerAdo.cs | 11 ++++++++++- .../FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs | 12 +++++++++++- Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs | 12 +++++++++++- 30 files changed, 288 insertions(+), 28 deletions(-) diff --git a/FreeSql/FreeSqlBuilder.cs b/FreeSql/FreeSqlBuilder.cs index 37fad903..6508933f 100644 --- a/FreeSql/FreeSqlBuilder.cs +++ b/FreeSql/FreeSqlBuilder.cs @@ -612,9 +612,10 @@ namespace FreeSql { if (e.Property.PropertyType == typeHandler.Type) { - if (_dicTypeHandlerTypes.ContainsKey(e.Property.PropertyType) == false && + if (_dicTypeHandlerTypes.ContainsKey(e.Property.PropertyType)) return; + if (e.Property.PropertyType.NullableTypeOrThis() != typeof(DateTime) && FreeSql.Internal.Utils.dicExecuteArrayRowReadClassOrTuple.ContainsKey(e.Property.PropertyType)) - return; //基础类型无效 + return; //基础类型无效,DateTime 除外 if (_dicTypeHandlerTypes.TryAdd(e.Property.PropertyType, true)) { diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 572dcc4a..c64c9ffc 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -2447,6 +2447,14 @@ namespace FreeSql.Internal ); break; case "System.DateTime": + if (TypeHandlers.ContainsKey(type)) + { + foreach (var switchFunc in GetDataReaderValueBlockExpressionSwitchTypeFullName) + { + var switchFuncRet = switchFunc(returnTarget, valueExp, type); + if (switchFuncRet != null) return switchFuncRet; + } + } tryparseExp = Expression.Block( new[] { tryparseVarExp = Expression.Variable(typeof(DateTime)) }, new Expression[] { diff --git a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs index 8018e31e..3ba93410 100644 --- a/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs +++ b/Providers/FreeSql.Provider.ClickHouse/ClickHouseAdo/ClickHouseAdo.cs @@ -57,8 +57,18 @@ namespace FreeSql.ClickHouse return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs index b32c2bfc..70d0db06 100644 --- a/Providers/FreeSql.Provider.Custom/CustomAdapter.cs +++ b/Providers/FreeSql.Provider.Custom/CustomAdapter.cs @@ -51,6 +51,9 @@ namespace FreeSql.Custom { if (value == null) return "NULL"; if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1); + + if (value is DateTime && Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(value)?.ToString(); + if (value is DateTime? && Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler2)) return typeHandler2.Serialize(value)?.ToString(); return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'"); } public virtual string TimeSpanRawSql(object value) => value == null ? "NULL" : ((TimeSpan)value).TotalSeconds.ToString(); diff --git a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs index 2fa8378b..8520980f 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/CustomMySqlAdo/CustomMySqlAdo.cs @@ -42,8 +42,18 @@ namespace FreeSql.Custom.MySql return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace(", ", ","), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs index 9e4e24ae..72bfe249 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleAdo/CustomOracleAdo.cs @@ -56,8 +56,18 @@ namespace FreeSql.Custom.Oracle return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) diff --git a/Providers/FreeSql.Provider.Custom/OracleAdapter.cs b/Providers/FreeSql.Provider.Custom/OracleAdapter.cs index 9d52af36..3cd12cda 100644 --- a/Providers/FreeSql.Provider.Custom/OracleAdapter.cs +++ b/Providers/FreeSql.Provider.Custom/OracleAdapter.cs @@ -51,6 +51,9 @@ namespace FreeSql.Custom { if (value == null) return "NULL"; if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1); + + if (value is DateTime && Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(value)?.ToString(); + if (value is DateTime? && Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler2)) return typeHandler2.Serialize(value)?.ToString(); return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'"); } public virtual string TimeSpanRawSql(object value) => value == null ? "NULL" : ((TimeSpan)value).TotalSeconds.ToString(); diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs index 8fe48386..a76f9ebe 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/CustomPostgreSQLAdo/CustomPostgreSQLAdo.cs @@ -44,8 +44,18 @@ namespace FreeSql.Custom.PostgreSQL return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs index 61e61caa..671d0043 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs @@ -49,11 +49,18 @@ namespace FreeSql.Custom.SqlServer return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) { - if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTimeOffset || param is DateTimeOffset?) { if (param.Equals(DateTimeOffset.MinValue) == true) param = new DateTimeOffset(new DateTime(1970, 1, 1), TimeSpan.Zero); diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index 3b108a8d..f8d65b66 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -58,8 +58,18 @@ namespace FreeSql.Dameng return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index f4121a14..b769ec71 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -79,8 +79,18 @@ namespace FreeSql.Firebird return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("timestamp '", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("timestamp '", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs index 413393c5..fc9d082c 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseAdo/GBaseAdo.cs @@ -57,12 +57,22 @@ namespace FreeSql.GBase return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); if (mapColumn?.DbPrecision > 0) return string.Concat("'", ((DateTime)param).ToString($"yyyy-MM-dd HH:mm:ss.{"f".PadRight(mapColumn.DbPrecision, 'f')}"), "'"); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + if (mapColumn?.DbPrecision > 0) + return string.Concat("'", ((DateTime)param).ToString($"yyyy-MM-dd HH:mm:ss.{"f".PadRight(mapColumn.DbPrecision, 'f')}"), "'"); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) { var ts = (TimeSpan)param; diff --git a/Providers/FreeSql.Provider.GBase/GBaseUtils.cs b/Providers/FreeSql.Provider.GBase/GBaseUtils.cs index c59177f2..a1331a55 100644 --- a/Providers/FreeSql.Provider.GBase/GBaseUtils.cs +++ b/Providers/FreeSql.Provider.GBase/GBaseUtils.cs @@ -100,8 +100,16 @@ namespace FreeSql.GBase var ts = (TimeSpan)value; return $"interval({ts.Days} {ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}) day(9) to fraction"; } - if (type == typeof(DateTime) || type == typeof(DateTime?)) + if (type == typeof(DateTime)) { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(value)?.ToString(); + if (col?.DbPrecision > 0) + return string.Concat("'", ((DateTime)value).ToString($"yyyy-MM-dd HH:mm:ss.{"f".PadRight(col.DbPrecision, 'f')}"), "'"); + return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + if (type == typeof(DateTime?)) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(value)?.ToString(); if (col?.DbPrecision > 0) return string.Concat("'", ((DateTime)value).ToString($"yyyy-MM-dd HH:mm:ss.{"f".PadRight(col.DbPrecision, 'f')}"), "'"); return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'"); diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index b3d16999..f14c1536 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -56,8 +56,18 @@ namespace FreeSql.KingbaseES return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index 5c2b0b67..c10affcb 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -57,11 +57,20 @@ namespace FreeSql.MsAccess return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).TotalSeconds; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 1504f947..6eac3e07 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -61,8 +61,18 @@ namespace FreeSql.MySql return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace(", ", ","), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs index 2b996cf8..50379ff1 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs @@ -59,8 +59,18 @@ namespace FreeSql.Odbc.Dameng return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs index 7a9cbfd4..0613e5b3 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdapter.cs @@ -51,6 +51,9 @@ namespace FreeSql.Odbc.Default { if (value == null) return "NULL"; if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1); + + if (value is DateTime && Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(value)?.ToString(); + if (value is DateTime? && Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler2)) return typeHandler2.Serialize(value)?.ToString(); return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'"); } public virtual string TimeSpanRawSql(object value) => value == null ? "NULL" : ((TimeSpan)value).TotalSeconds.ToString(); diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs index 6aae0a43..f2d91d3f 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs @@ -59,8 +59,18 @@ namespace FreeSql.Odbc.KingbaseES return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index e84bf3c1..e0ec77f3 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -59,8 +59,18 @@ namespace FreeSql.Odbc.MySql return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace(", ", ","), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index 19a482d3..a54c5b2c 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -60,8 +60,18 @@ namespace FreeSql.Odbc.Oracle return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 7a764f7b..83afa20b 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -60,8 +60,18 @@ namespace FreeSql.Odbc.PostgreSQL return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index 070f5272..0fdcf5ac 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -64,11 +64,20 @@ namespace FreeSql.Odbc.SqlServer return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTimeOffset || param is DateTimeOffset?) { if (param.Equals(DateTimeOffset.MinValue) == true) param = new DateTimeOffset(new DateTime(1970, 1, 1), TimeSpan.Zero); diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index 73fe54bf..2126c54e 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -57,8 +57,18 @@ namespace FreeSql.Oracle return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("to_timestamp('", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "','YYYY-MM-DD HH24:MI:SS.FF6')"); + } + else if (param is TimeSpan || param is TimeSpan?) return $"numtodsinterval({((TimeSpan)param).Ticks * 1.0 / 10000000},'second')"; else if (param is IEnumerable) diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index cb8dc80c..4e2c3216 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -61,8 +61,18 @@ namespace FreeSql.PostgreSQL return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs index d5b7071e..81c5c97f 100644 --- a/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs +++ b/Providers/FreeSql.Provider.QuestDb/QuestDbAdo/QuestDbAdo.cs @@ -63,8 +63,18 @@ namespace FreeSql.QuestDb return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return (long)((TimeSpan)param).TotalSeconds; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index bc89fc1e..d217fc3e 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -57,8 +57,18 @@ namespace FreeSql.ShenTong return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).TotalSeconds; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index e42d69f6..98bc119f 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -68,11 +68,20 @@ namespace FreeSql.SqlServer return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); + } + else if (param is DateTimeOffset || param is DateTimeOffset?) { if (param.Equals(DateTimeOffset.MinValue) == true) param = new DateTimeOffset(new DateTime(1970, 1, 1), TimeSpan.Zero); diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index 39e9cefc..fa851020 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -62,8 +62,18 @@ namespace FreeSql.Sqlite return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).TotalSeconds; else if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs index 883a7b5b..8eaba42f 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguAdo/XuguAdo.cs @@ -59,8 +59,18 @@ namespace FreeSql.Xugu return ((Enum)param).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; - else if (param is DateTime || param is DateTime?) + + else if (param is DateTime) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is DateTime?) + { + if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'"); + } + else if (param is TimeSpan || param is TimeSpan?) return ((TimeSpan)param).Ticks / 10; else if (param is byte[]) From 94fa653ec95043ba98fb350ddfe8be8d7ea9ab06 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 10 Oct 2023 03:38:05 +0800 Subject: [PATCH 18/35] =?UTF-8?q?-=20=E6=81=A2=E5=A4=8D=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20preview=20=E6=94=B9=E5=8A=A8=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=A1=A5=E5=85=A8=20CanUpdate=20false=EF=BC=9B#1630?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/DbSet/DbSetAsync.cs | 2 +- FreeSql.DbContext/DbSet/DbSetSync.cs | 2 +- ...liteInsertOrUpdateIfExistsDoNothingTest.cs | 290 ++---------------- .../Sqlite/Curd/SqliteInsertOrUpdateTest.cs | 54 ++-- FreeSql/Internal/UtilsExpressionTree.cs | 9 +- 5 files changed, 56 insertions(+), 301 deletions(-) diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs index a8967488..18763e4e 100644 --- a/FreeSql.DbContext/DbSet/DbSetAsync.cs +++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs @@ -404,7 +404,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length >= _table.Columns.Count - _table.Primarys.Length) + if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs index 04016961..19bcc519 100644 --- a/FreeSql.DbContext/DbSet/DbSetSync.cs +++ b/FreeSql.DbContext/DbSet/DbSetSync.cs @@ -438,7 +438,7 @@ namespace FreeSql if (data?.Count > 0) { - if (cuig.Length >= _table.Columns.Count - _table.Primarys.Length) + if (cuig.Length == _table.Columns.Count) return ups.Length == data.Count ? -998 : -997; var update = this.OrmUpdate(data.Select(a => a.Value)).IgnoreColumns(cuig); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs index 46e0685d..1879055a 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -17,83 +17,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '100001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1) + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO ""tbioudb022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('00 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 2, '02', '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 3 AND a.""id2"" = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 4 AND a.""id2"" = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 3 AND a.""id2"" = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 4 AND a.""id2"" = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '011', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 2, '02', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '001', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateTest.cs index d0e650ad..200aee51 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Sqlite.Data/Sqlite/Curd/SqliteInsertOrUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -16,27 +16,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 1 }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 1 }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 2 }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(2)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(2)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); Assert.Equal(4, iou.ExecuteAffrows()); } class tbiou01 @@ -50,27 +50,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(2, '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou02 { id = 1, name = "01" }, new tbiou02 { id = 2, name = "02" }, new tbiou02 { id = 3, name = "03" }, new tbiou02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou02 { id = 1, name = "001" }, new tbiou02 { id = 2, name = "002" }, new tbiou02 { id = 3, name = "003" }, new tbiou02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); @@ -87,27 +87,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(2, '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "01" }, new tbiou022 { id = 2, name = "02" }, new tbiou022 { id = 3, name = "03" }, new tbiou022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "001" }, new tbiou022 { id = 2, name = "002" }, new tbiou022 { id = 3, name = "003" }, new tbiou022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); @@ -141,7 +141,7 @@ namespace FreeSql.Tests.Sqlite //--no primary and yes iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "100001" }, new tbiou022 { name = "00001" }, new tbiou022 { id = 2, name = "100002" }, new tbiou022 { name = "00002" }, new tbiou022 { id = 3, name = "100003" }, new tbiou022 { name = "00003" }, new tbiou022 { id = 4, name = "100004" }, new tbiou022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -163,27 +163,27 @@ INSERT INTO ""tbiou022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('0000 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "01" }, new tbiou03 { id1 = 2, id2 = "02", name = "02" }, new tbiou03 { id1 = 3, id2 = "03", name = "03" }, new tbiou03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "001" }, new tbiou03 { id1 = 2, id2 = "02", name = "002" }, new tbiou03 { id1 = 3, id2 = "03", name = "003" }, new tbiou03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id1).Count()); @@ -203,27 +203,27 @@ INSERT INTO ""tbiou022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('0000 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou04 { id = 1, name = "01" }, new tbiou04 { id = 2, name = "02" }, new tbiou04 { id = 3, name = "03" }, new tbiou04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou04 { id = 1, name = "001" }, new tbiou04 { id = 2, name = "002" }, new tbiou04 { id = 3, name = "003" }, new tbiou04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index c64c9ffc..fc6b3a20 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -509,10 +509,6 @@ namespace FreeSql.Internal }); } trytb.Indexes = indexesDict.Values.ToArray(); - trytb.ColumnsByPosition = columnsList.Where(a => a.Attribute.Position > 0).OrderBy(a => a.Attribute.Position) - .Concat(columnsList.Where(a => a.Attribute.Position == 0)) - .Concat(columnsList.Where(a => a.Attribute.Position < 0).OrderBy(a => a.Attribute.Position)).ToArray(); - trytb.ColumnsByCanUpdateDbUpdateValue = columnsList.Where(a => a.Attribute.CanUpdate == true && string.IsNullOrEmpty(a.DbUpdateValue) == false).ToArray(); trytb.Primarys = trytb.Columns.Values.Where(a => a.Attribute.IsPrimary == true).ToArray(); if (trytb.Primarys.Any() == false) @@ -547,6 +543,7 @@ namespace FreeSql.Internal } foreach (var col in trytb.Columns.Values) { + if (col.Attribute.IsPrimary == false && col.Attribute.IsIdentity) col.Attribute.CanUpdate = false; var ltp = @"\(([^\)]+)\)"; col.DbTypeText = Regex.Replace(col.Attribute.DbType.Replace("NOT NULL", "").Replace(" NULL", "").Trim(), ltp, ""); var m = Regex.Match(col.Attribute.DbType, ltp); @@ -582,6 +579,10 @@ namespace FreeSql.Internal } } trytb.IsRereadSql = trytb.Columns.Where(a => string.IsNullOrWhiteSpace(a.Value.Attribute.RereadSql) == false).Any(); + trytb.ColumnsByPosition = columnsList.Where(a => a.Attribute.Position > 0).OrderBy(a => a.Attribute.Position) + .Concat(columnsList.Where(a => a.Attribute.Position == 0)) + .Concat(columnsList.Where(a => a.Attribute.Position < 0).OrderBy(a => a.Attribute.Position)).ToArray(); + trytb.ColumnsByCanUpdateDbUpdateValue = columnsList.Where(a => a.Attribute.CanUpdate == true && string.IsNullOrEmpty(a.DbUpdateValue) == false).ToArray(); tbc.AddOrUpdate(entity, trytb, (oldkey, oldval) => trytb); #region 查找导航属性的关系、virtual 属性延时加载,动态产生新的重写类 From 117568178e3097087277fd3c0bfdbaf9773710b8 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 10 Oct 2023 03:39:42 +0800 Subject: [PATCH 19/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=203.2.801=20AsTree?= =?UTF-8?q?Cte=20cte=5Fpath=20=E5=88=AB=E5=90=8D=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index 26445eb9..1890dccc 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -733,7 +733,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec } var sql1ctePath = ""; - var wct2ctePath = ""; + string wct2ctePath = null; if (pathSelector != null) { select._tables[0].Parameter = pathSelector?.Parameters[0]; @@ -751,7 +751,6 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec case DataType.Firebird: case DataType.ClickHouse: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null); - wct2ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); break; case DataType.MySql: case DataType.OdbcMySql: @@ -762,7 +761,6 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec break; default: sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); - wct2ctePath = sql1ctePath; break; } sql1ctePath = $"{sql1ctePath} as cte_path, "; @@ -780,6 +778,8 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec if (pathSelector != null) { select._tables[0].Parameter = pathSelector?.Parameters[0]; + if (wct2ctePath == null) + wct2ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, pathSelector?.Body, select._diymemexpWithTempQuery, null, null); sql2ctePath = select._commonUtils.StringConcat( new string[] { up == false ? "wct1.cte_path" : wct2ctePath, From b9055018a0bcad0110b12bb907e3284ba270fb10 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 10 Oct 2023 03:54:37 +0800 Subject: [PATCH 20/35] update testcode --- ...ySqlInsertOrUpdateIfExistsDoNothingTest.cs | 288 ++--------------- ...ySqlInsertOrUpdateIfExistsDoNothingTest.cs | 290 ++---------------- ...ySqlInsertOrUpdateIfExistsDoNothingTest.cs | 290 ++---------------- FreeSql.Tests/FreeSql.Tests/Issues/663.cs | 6 +- FreeSql.Tests/FreeSql.Tests/Issues/804.cs | 2 +- ...ySqlInsertOrUpdateIfExistsDoNothingTest.cs | 290 ++---------------- ...liteInsertOrUpdateIfExistsDoNothingTest.cs | 290 ++---------------- .../Sqlite/Curd/SqliteInsertOrUpdateTest.cs | 54 ++-- .../CustomSqlServerAdo/CustomSqlServerAdo.cs | 2 + 9 files changed, 140 insertions(+), 1372 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs index a9b9c19e..392aa9af 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs @@ -17,83 +17,27 @@ namespace FreeSql.Tests.Custom.MySql fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1) + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004' fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '011', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(2, '02', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3)), (2, '02', 0, now(3)), (3, '03', 0, now(3)), (4, '04', 0, now(3))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '001', 0, now(3)), (2, '002', 0, now(3)), (3, '003', 0, now(3)), (4, '004', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs index 173fa8eb..f14dc6e8 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -17,83 +17,27 @@ namespace FreeSql.Tests.MySqlConnector fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1) + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004' fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '011', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(2, '02', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3)), (2, '02', 0, now(3)), (3, '03', 0, now(3)), (4, '04', 0, now(3))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '001', 0, now(3)), (2, '002', 0, now(3)), (3, '003', 0, now(3)), (4, '004', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs index 4b72f7e4..4568ee31 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -17,83 +17,27 @@ namespace FreeSql.Tests.Odbc.MySql fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1) + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004' fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '011', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(2, '02', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3)), (2, '02', 0, now(3)), (3, '03', 0, now(3)), (4, '04', 0, now(3))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '001', 0, now(3)), (2, '002', 0, now(3)), (3, '003', 0, now(3)), (4, '004', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/663.cs b/FreeSql.Tests/FreeSql.Tests/Issues/663.cs index 4e4bfe41..e21d9962 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/663.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/663.cs @@ -28,11 +28,7 @@ namespace FreeSql.Tests.Issues .SetSource(new[] { new Song_Tag { SongId = 1, TagId = 1 } }) .IfExistsDoNothing() .ToSql(); - Assert.Equal(@"INSERT INTO `Song_Tag663`(`SongId`, `TagId`) SELECT 1, 1 - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `Song_Tag663` a - WHERE (a.`SongId` = 1 AND a.`TagId` = 1) - limit 0,1)", rst); + Assert.Equal(@"INSERT IGNORE INTO `Song_Tag663`(`SongId`, `TagId`) VALUES(1, 1)", rst); } [Table(Name = "Song663")] diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/804.cs b/FreeSql.Tests/FreeSql.Tests/Issues/804.cs index cf387d81..4735abb7 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/804.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/804.cs @@ -111,7 +111,7 @@ WHERE (strftime('%Y',a."CreateTime") = 2021) Assert.Single(dmonth1); Assert.Single(d1); Assert.Single(d1); - Assert.Single(d5); + //Assert.Single(d5); } } } diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs index 6b6a02d1..e8485174 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertOrUpdateIfExistsDoNothingTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -17,83 +17,27 @@ namespace FreeSql.Tests.MySql fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb02`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb02` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb02`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb022`(`id`, `name`) SELECT 1, '100001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb022` a - WHERE (a.`id` = 4) - limit 0,1) + Assert.Equal(@"INSERT IGNORE INTO `tbioudb022`(`id`, `name`) VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO `tbioudb022`(`name`) VALUES('00001'), ('00002'), ('00003'), ('00004' fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '011' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '01' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb03`(`id1`, `id2`, `name`) SELECT 1, '01', '001' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 1 AND a.`id2` = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 2 AND a.`id2` = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 3 AND a.`id2` = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb03` a - WHERE (a.`id1` = 4 AND a.`id2` = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb03`(`id1`, `id2`, `name`) VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '011', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '011', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(2, '02', 0, now(3))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '01', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3)), (2, '02', 0, now(3)), (3, '03', 0, now(3)), (4, '04', 0, now(3))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) SELECT 1, '001', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, now(3) - FROM dual WHERE NOT EXISTS(SELECT 1 - FROM `tbioudb04` a - WHERE (a.`id` = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT IGNORE INTO `tbioudb04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '001', 0, now(3)), (2, '002', 0, now(3)), (3, '003', 0, now(3)), (4, '004', 0, now(3))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs index 46e0685d..1879055a 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateIfExistsDoNothingTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -17,83 +17,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb02""(""id"", ""name"") SELECT 1, '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb02"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -109,83 +53,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); @@ -219,29 +107,7 @@ UNION ALL //--no primary and yes iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb022""(""id"", ""name"") SELECT 1, '100001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '100002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '100003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '100004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb022"" a - WHERE (a.""id"" = 4) - limit 0,1) + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -263,83 +129,27 @@ INSERT INTO ""tbioudb022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('00 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '011' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 2, '02', '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '01' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '02' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '03' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 3 AND a.""id2"" = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '04' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 4 AND a.""id2"" = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb03""(""id1"", ""id2"", ""name"") SELECT 1, '01', '001' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 1 AND a.""id2"" = '01') - limit 0,1) -UNION ALL - SELECT 2, '02', '002' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 2 AND a.""id2"" = '02') - limit 0,1) -UNION ALL - SELECT 3, '03', '003' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 3 AND a.""id2"" = '03') - limit 0,1) -UNION ALL - SELECT 4, '04', '004' - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb03"" a - WHERE (a.""id1"" = 4 AND a.""id2"" = '04') - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count()); @@ -359,83 +169,27 @@ UNION ALL fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '011', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(0, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 2, '02', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '01', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '02', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '03', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '04', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(2, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"INSERT INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") SELECT 1, '001', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 1) - limit 0,1) -UNION ALL - SELECT 2, '002', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 2) - limit 0,1) -UNION ALL - SELECT 3, '003', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 3) - limit 0,1) -UNION ALL - SELECT 4, '004', 0, datetime(current_timestamp,'localtime') - WHERE NOT EXISTS(SELECT 1 - FROM ""tbioudb04"" a - WHERE (a.""id"" = 4) - limit 0,1)", sql); + Assert.Equal(@"INSERT OR IGNORE INTO ""tbioudb04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(0, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count()); diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateTest.cs index d0e650ad..200aee51 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteInsertOrUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -16,27 +16,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 1 }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 1 }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou01 { id = 2 }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(2)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(2)", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou01""(""id"") VALUES(1), (2), (3), (4)", sql); Assert.Equal(4, iou.ExecuteAffrows()); } class tbiou01 @@ -50,27 +50,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou02 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(2, '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou02 { id = 1, name = "01" }, new tbiou02 { id = 2, name = "02" }, new tbiou02 { id = 3, name = "03" }, new tbiou02 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou02 { id = 1, name = "001" }, new tbiou02 { id = 2, name = "002" }, new tbiou02 { id = 3, name = "003" }, new tbiou02 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou02""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); @@ -87,27 +87,27 @@ namespace FreeSql.Tests.Sqlite fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou022 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(2, '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(2, '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "01" }, new tbiou022 { id = 2, name = "02" }, new tbiou022 { id = 3, name = "03" }, new tbiou022 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "001" }, new tbiou022 { id = 2, name = "002" }, new tbiou022 { id = 3, name = "003" }, new tbiou022 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); @@ -141,7 +141,7 @@ namespace FreeSql.Tests.Sqlite //--no primary and yes iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou022 { id = 1, name = "100001" }, new tbiou022 { name = "00001" }, new tbiou022 { id = 2, name = "100002" }, new tbiou022 { name = "00002" }, new tbiou022 { id = 3, name = "100003" }, new tbiou022 { name = "00003" }, new tbiou022 { id = 4, name = "100004" }, new tbiou022 { name = "00004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou022""(""id"", ""name"") VALUES(1, '100001'), (2, '100002'), (3, '100003'), (4, '100004') ; @@ -163,27 +163,27 @@ INSERT INTO ""tbiou022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('0000 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '011')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(2, '02', '02')", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "01" }, new tbiou03 { id1 = 2, id2 = "02", name = "02" }, new tbiou03 { id1 = 3, id2 = "03", name = "03" }, new tbiou03 { id1 = 4, id2 = "04", name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "001" }, new tbiou03 { id1 = 2, id2 = "02", name = "002" }, new tbiou03 { id1 = 3, id2 = "03", name = "003" }, new tbiou03 { id1 = 4, id2 = "04", name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou03""(""id1"", ""id2"", ""name"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id1).Count()); @@ -203,27 +203,27 @@ INSERT INTO ""tbiou022""(""name"") VALUES('00001'), ('00002'), ('00003'), ('0000 fsql.Delete().Where("1=1").ExecuteAffrows(); var iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 1, name = "01" }); var sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 1, name = "011" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '011', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new tbiou04 { id = 2, name = "02" }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(2, '02', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(1, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou04 { id = 1, name = "01" }, new tbiou04 { id = 2, name = "02" }, new tbiou04 { id = 3, name = "03" }, new tbiou04 { id = 4, name = "04" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '01', 0, datetime(current_timestamp,'localtime')), (2, '02', 0, datetime(current_timestamp,'localtime')), (3, '03', 0, datetime(current_timestamp,'localtime')), (4, '04', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(4, iou.ExecuteAffrows()); iou = fsql.InsertOrUpdate().SetSource(new[] { new tbiou04 { id = 1, name = "001" }, new tbiou04 { id = 2, name = "002" }, new tbiou04 { id = 3, name = "003" }, new tbiou04 { id = 4, name = "004" } }); sql = iou.ToSql(); - Assert.Equal(@"REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); + Assert.Equal(@"INSERT OR REPLACE INTO ""tbiou04""(""id"", ""name"", ""version"", ""CreateTime"") VALUES(1, '001', 0, datetime(current_timestamp,'localtime')), (2, '002', 0, datetime(current_timestamp,'localtime')), (3, '003', 0, datetime(current_timestamp,'localtime')), (4, '004', 0, datetime(current_timestamp,'localtime'))", sql); Assert.Equal(4, iou.ExecuteAffrows()); var lst = fsql.Select().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs index 671d0043..d71ff666 100644 --- a/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Custom/SqlServer/CustomSqlServerAdo/CustomSqlServerAdo.cs @@ -53,11 +53,13 @@ namespace FreeSql.Custom.SqlServer else if (param is DateTime) { if (Utils.TypeHandlers.TryGetValue(typeof(DateTime), out var typeHandler)) return typeHandler.Serialize(param); + if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); } else if (param is DateTime?) { if (Utils.TypeHandlers.TryGetValue(typeof(DateTime?), out var typeHandler)) return typeHandler.Serialize(param); + if (param.Equals(DateTime.MinValue) == true) param = new DateTime(1970, 1, 1); return string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'"); } From c01416ef6fd774b8cf6157417ed90743f9fa4e27 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 10 Oct 2023 04:16:15 +0800 Subject: [PATCH 21/35] v3.2.802-preview20231010 #1634 #1630 #1627 #1626 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj | 2 +- Extensions/FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj | 2 +- Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj | 2 +- Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 491b532b..e25fb62c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index bb280be9..8c7d1ec0 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 3692b76f..79c2adaf 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index fd1a17b7..b32f0d11 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 170649b4..8860e2de 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index c3bc1621..d1739111 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 45039b59..35539673 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index 5b1899c3..daa6bf5c 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 5321c1a4..2b4803b9 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 63a5c5c4..97e7a85e 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 4db0f34f..2f5f99c7 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 993b2675..6faaa9cd 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 11d956b7..d597d31e 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 8ca6ef8a..22544800 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 4ac8ff3d..66be4f99 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 8a1d08d9..dee22ab6 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index a4dcf801..2f71fa63 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 2459fbec..a92b805e 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index f767209c..52dd791a 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index bdce0a9d..24bfa6e0 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 64676f95..200cf3e1 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index fc30107c..6aa33258 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 367a53ea..2ed07473 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 3f85aa1d..83a8ef9b 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 2119a328..1ab8666c 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index d19bc12a..3ffc525e 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index a020a60a..272f658c 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 15021436..932e47b4 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 68b61a51..252fc0e8 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index 7efb0660..e3c8b601 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20230928 + 3.2.802-preview20231010 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index fb8d0ba9..40efaf78 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20230928 + 3.2.802-preview20231010 From 9f4080561eaef3c5c59718d4824302bf09f65f74 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 18 Oct 2023 12:40:45 +0800 Subject: [PATCH 22/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Ado.net=20?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95=20SqliteCore=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=EF=BC=9B#1638?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 24 ++++++++++++++++++++++-- FreeSql/Extensions/AdoNetExtensions.cs | 4 +++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index f4177221..46b88d5b 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -559,9 +559,9 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) - .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") + //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") - .UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") + //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") //.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2") ////.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=toc;Pooling=true;Maximum Pool Size=2") @@ -600,6 +600,14 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + fsql.CodeFirst.Entity(e => + { + e.Help().Navigate(b => b.a, nameof(B11.Id)); + }); + fsql.CodeFirst.Entity(e => { }); + + var a11sql01 = fsql.Select().Where(a => a.Id == 1).ToSql(a => new { a.Name, AName = a.a.Name }); + var risWorkListRepo = fsql.GetRepository(); risWorkListRepo.InsertOrUpdate(new EBH_RisWorkList { @@ -2929,4 +2937,16 @@ public class EBH_RisWorkList public string WorkStationAddress { get; set; } +} +public class A11 +{ + public int Id { get; set; } + public string Name { get; set; } +} + +public class B11 +{ + public int Id { get; set; } + public string Name { get; set; } + public A11 a { get; set; } } \ No newline at end of file diff --git a/FreeSql/Extensions/AdoNetExtensions.cs b/FreeSql/Extensions/AdoNetExtensions.cs index ed46fd09..d38f3522 100644 --- a/FreeSql/Extensions/AdoNetExtensions.cs +++ b/FreeSql/Extensions/AdoNetExtensions.cs @@ -29,7 +29,8 @@ namespace FreeSql break; case "SqlConnection": providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServer")?.MakeGenericType(connType); - if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("SqlServer")); + if (providerType == null) providerType = Type.GetType("FreeSql.SqlServer.SqlServerProvider`1,FreeSql.Provider.SqlServerForSystem")?.MakeGenericType(connType); + if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("SqlServer/SqlServerForSystem")); break; case "NpgsqlConnection": providerType = Type.GetType("FreeSql.PostgreSQL.PostgreSQLProvider`1,FreeSql.Provider.PostgreSQL")?.MakeGenericType(connType); @@ -42,6 +43,7 @@ namespace FreeSql case "SQLiteConnection": case "SqliteConnection": providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.Sqlite")?.MakeGenericType(connType); + if (providerType == null) providerType = Type.GetType("FreeSql.Sqlite.SqliteProvider`1,FreeSql.Provider.SqliteCore")?.MakeGenericType(connType); //Microsoft.Data.Sqlite.Core.dll if (providerType == null) throw new Exception(CoreStrings.Missing_FreeSqlProvider_Package("Sqlite/SqliteCore")); break; case "DmConnection": From a3cb3d37dfa5098dc9167fa6ac1974948e847ff4 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 18 Oct 2023 13:06:47 +0800 Subject: [PATCH 23/35] v3.2.802-preview20231018 #1638 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 98 ------------------- .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 32 files changed, 31 insertions(+), 129 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index e25fb62c..72959c49 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 8c7d1ec0..a712f70f 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 79c2adaf..3d04ad37 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index b32f0d11..5731ee63 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 8860e2de..54fcc9ab 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index d1739111..bd977d99 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 35539673..55b30937 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index daa6bf5c..fe0d13a6 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 2b4803b9..3f34c961 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 97e7a85e..fee7f942 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 2f5f99c7..64497d28 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 88245752..52f69aab 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,82 +1084,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5837,28 +5761,6 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 6faaa9cd..71970f51 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index d597d31e..97ab4316 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 22544800..bb3f45a7 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 66be4f99..ce84c411 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index dee22ab6..8457b69e 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 2f71fa63..0f034be4 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index a92b805e..03572e06 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index 52dd791a..cb6e2e0f 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 24bfa6e0..39f650c6 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 200cf3e1..cf1664d3 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 6aa33258..0d1c1997 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 2ed07473..873f1a0e 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index 83a8ef9b..c04aa309 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 1ab8666c..e8db83f0 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 3ffc525e..54bd1710 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 272f658c..e7d252e4 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 932e47b4..29a31a4d 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 252fc0e8..30682c3b 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index e3c8b601..d690569b 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231010 + 3.2.802-preview20231018 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 40efaf78..ec55bd11 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231010 + 3.2.802-preview20231018 From 5782d6e5173b80324820b604eca7909d8932c7fa Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 18 Oct 2023 20:25:03 +0800 Subject: [PATCH 24/35] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20Aop.AuditDataRea?= =?UTF-8?q?der=20=E5=8F=82=E6=95=B0=E5=B1=9E=E6=80=A7=20PropertyInfo?= =?UTF-8?q?=EF=BC=8C=E5=AE=9E=E7=8E=B0=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 103 ++++++++++++++++++ FreeSql/Interface/IAop.cs | 7 +- FreeSql/Internal/CommonExpression.cs | 2 +- .../SelectProvider/Select0ProviderReader.cs | 15 ++- FreeSql/Internal/UtilsExpressionTree.cs | 32 +++--- 5 files changed, 131 insertions(+), 28 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 52f69aab..0700ca6b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,6 +1084,82 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -3992,6 +4068,11 @@ DataReader 对应的 Index 位置 + + + DataReader 对应的 PropertyInfo + + 获取 Index 对应的值,也可以设置拦截的新值 @@ -5761,6 +5842,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/FreeSql/Interface/IAop.cs b/FreeSql/Interface/IAop.cs index e4c66df7..6efba9ff 100644 --- a/FreeSql/Interface/IAop.cs +++ b/FreeSql/Interface/IAop.cs @@ -360,10 +360,11 @@ namespace FreeSql.Aop #region AuditDataReader public class AuditDataReaderEventArgs : EventArgs { - public AuditDataReaderEventArgs(DbDataReader dataReader, int index) + public AuditDataReaderEventArgs(DbDataReader dataReader, int index, PropertyInfo property) { this.DataReader = dataReader; this.Index = index; + this.Property = property; } /// @@ -375,6 +376,10 @@ namespace FreeSql.Aop /// public int Index { get; } /// + /// DataReader 对应的 PropertyInfo + /// + public PropertyInfo Property { get; } + /// /// 获取 Index 对应的值,也可以设置拦截的新值 /// public object Value diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 7be3a010..16b5dacc 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -570,7 +570,7 @@ namespace FreeSql.Internal return Utils.GetDataReaderValue(parent.Property.PropertyType, null); return Utils.GetDataReaderValue(parent.CsType, null); } - object objval = Utils.InternalDataReaderGetValue(_common, dr, ++index); // dr.GetValue(++index); + object objval = Utils.InternalDataReaderGetValue(_common, dr, ++index, parent.Property); // dr.GetValue(++index); if (dbValue != null) dbValue.DbValue = objval == DBNull.Value ? null : objval; if (parent.CsType != parent.MapType) objval = Utils.GetDataReaderValue(parent.MapType, objval); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index 3908e4c0..be40ee34 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -600,7 +600,7 @@ namespace FreeSql.Internal.CommonProvider var name = dr.GetName(a); //expando[name] = row2.GetValue(a); if (expandodic.ContainsKey(name)) continue; - expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, dr, a)); + expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, dr, a, null)); } //expando = expandodic; return (T1)((object)expandodic); @@ -682,8 +682,7 @@ namespace FreeSql.Internal.CommonProvider var propGetSetMethod = prop.GetSetMethod(true); Expression readExpAssign = null; //加速缓存 if (prop.PropertyType.IsArray) readExpAssign = Expression.New(Utils.RowInfo.Constructor, - Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, dataIndexExp })), - //Expression.Call(Utils.MethodGetDataReaderValue, new Expression[] { Expression.Constant(prop.PropertyType), Expression.Call(rowExp, Utils.MethodDataReaderGetValue, dataIndexExp) }), + Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, dataIndexExp, Expression.Constant(prop) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ); else @@ -692,8 +691,7 @@ namespace FreeSql.Internal.CommonProvider if (proptypeGeneric.IsNullableType()) proptypeGeneric = proptypeGeneric.GetGenericArguments().First(); if (proptypeGeneric.IsEnum || Utils.dicExecuteArrayRowReadClassOrTuple.ContainsKey(proptypeGeneric)) readExpAssign = Expression.New(Utils.RowInfo.Constructor, - Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, dataIndexExp })), - //Expression.Call(Utils.MethodGetDataReaderValue, new Expression[] { Expression.Constant(prop.PropertyType), Expression.Call(rowExp, Utils.MethodDataReaderGetValue, dataIndexExp) }), + Utils.GetDataReaderValueBlockExpression(prop.PropertyType, Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, dataIndexExp, Expression.Constant(prop) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ); else @@ -739,7 +737,8 @@ namespace FreeSql.Internal.CommonProvider foreach (var col in tb.Table.Columns.Values) { var drvalType = col.Attribute.MapType.NullableTypeOrThis(); - var propGetSetMethod = tb.Table.Properties[col.CsName].GetSetMethod(true); + var colprop = tb.Table.Properties[col.CsName]; + var propGetSetMethod = colprop.GetSetMethod(true); if (col.CsType == col.Attribute.MapType && _orm.Aop.AuditDataReaderHandler == null && _dicMethodDataReaderGetValue.TryGetValue(col.Attribute.MapType.NullableTypeOrThis(), out var drGetValueMethod)) @@ -755,7 +754,7 @@ namespace FreeSql.Internal.CommonProvider { var drvalExpCatch = Utils.GetDataReaderValueBlockExpression( col.CsType, - Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, Expression.Constant(colidx) }) + Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, Expression.Constant(colidx), Expression.Constant(colprop) }) ); blockExp.Add(Expression.TryCatch( Expression.Call(retExp, propGetSetMethod, drvalExp), @@ -780,7 +779,7 @@ namespace FreeSql.Internal.CommonProvider { var drvalExp = Utils.GetDataReaderValueBlockExpression( col.CsType, - Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, Expression.Constant(colidx) }) + Expression.Call(Utils.MethodDataReaderGetValue, new Expression[] { Expression.Constant(_commonUtils), rowExp, Expression.Constant(colidx), Expression.Constant(colprop) }) ); blockExp.Add(Expression.Call(retExp, propGetSetMethod, Expression.Convert(drvalExp, col.CsType))); } diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index fc6b3a20..95180312 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -1683,12 +1683,12 @@ namespace FreeSql.Internal } internal static MethodInfo MethodDataReaderGetValue = typeof(Utils).GetMethod("InternalDataReaderGetValue", BindingFlags.Static | BindingFlags.NonPublic); internal static PropertyInfo PropertyDataReaderFieldCount = typeof(DbDataReader).GetProperty("FieldCount"); - internal static object InternalDataReaderGetValue(CommonUtils commonUtil, DbDataReader dr, int index) + internal static object InternalDataReaderGetValue(CommonUtils commonUtil, DbDataReader dr, int index, PropertyInfo property) { var orm = commonUtil._orm; if (orm.Aop.AuditDataReaderHandler != null) { - var args = new Aop.AuditDataReaderEventArgs(dr, index); + var args = new Aop.AuditDataReaderEventArgs(dr, index, property); orm.Aop.AuditDataReaderHandler(orm, args); return args.Value; } @@ -1725,8 +1725,7 @@ namespace FreeSql.Internal if (type.IsArray) return Expression.Lambda>( Expression.New(RowInfo.Constructor, - GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })), - //Expression.Call(MethodGetDataReaderValue, new Expression[] { typeExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }) }), + GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Default(typeof(PropertyInfo)) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ), new[] { typeExp, indexesExp, rowExp, dataIndexExp, commonUtilExp }).Compile(); @@ -1736,8 +1735,7 @@ namespace FreeSql.Internal dicExecuteArrayRowReadClassOrTuple.ContainsKey(typeGeneric)) return Expression.Lambda>( Expression.New(RowInfo.Constructor, - GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })), - //Expression.Call(MethodGetDataReaderValue, new Expression[] { typeExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }) }), + GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Default(typeof(PropertyInfo)) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ), new[] { typeExp, indexesExp, rowExp, dataIndexExp, commonUtilExp }).Compile(); @@ -1757,8 +1755,7 @@ namespace FreeSql.Internal { Expression read2ExpAssign = null; //加速缓存 if (field.FieldType.IsArray) read2ExpAssign = Expression.New(RowInfo.Constructor, - GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })), - //Expression.Call(MethodGetDataReaderValue, new Expression[] { Expression.Constant(field.FieldType), Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }) }), + GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Default(typeof(PropertyInfo)) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ); else @@ -1767,8 +1764,7 @@ namespace FreeSql.Internal if (fieldtypeGeneric.IsNullableType()) fieldtypeGeneric = fieldtypeGeneric.GetGenericArguments().First(); if (fieldtypeGeneric.IsEnum || dicExecuteArrayRowReadClassOrTuple.ContainsKey(fieldtypeGeneric)) read2ExpAssign = Expression.New(RowInfo.Constructor, - GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })), - //Expression.Call(MethodGetDataReaderValue, new Expression[] { Expression.Constant(field.FieldType), Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }) }), + GetDataReaderValueBlockExpression(field.FieldType, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Default(typeof(PropertyInfo)) })), Expression.Add(dataIndexExp, Expression.Constant(1)) ); else @@ -1809,8 +1805,7 @@ namespace FreeSql.Internal Expression.IfThen( Expression.LessThan(dataIndexExp, rowLenExp), Expression.Return(returnTarget, Expression.New(RowInfo.Constructor, - GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })), - //Expression.Call(MethodGetDataReaderValue, new Expression[] { typeExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }) }), + GetDataReaderValueBlockExpression(type, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Default(typeof(PropertyInfo)) })), Expression.Add(dataIndexExp, Expression.Constant(1)))) ), Expression.Label(returnTarget, Expression.Default(typeof(RowInfo))) @@ -1829,7 +1824,7 @@ namespace FreeSql.Internal var name = row2.GetName(a); //expando[name] = row2.GetValue(a); if (expandodic.ContainsKey(name)) continue; - expandodic.Add(name, Utils.InternalDataReaderGetValue(commonUtils2, row2, a)); + expandodic.Add(name, Utils.InternalDataReaderGetValue(commonUtils2, row2, a, null)); } //expando = expandodic; return new RowInfo(expandodic, fc); @@ -1864,9 +1859,10 @@ namespace FreeSql.Internal { if (typetb.ColumnsByCsIgnore.ContainsKey(ctorParm.Name)) continue; var readType = typetb.ColumnsByCs.TryGetValue(ctorParm.Name, out var trycol) ? trycol.Attribute.MapType : ctorParm.ParameterType; + var colprop = trycol != null ? typetb.Table.Properties[trycol.CsName] : null; var ispkExp = new List(); - Expression readVal = Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp })); + Expression readVal = Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Constant(colprop) })); Expression readExpAssign = null; //加速缓存 if (readType.IsArray) readExpAssign = Expression.New(RowInfo.Constructor, GetDataReaderValueBlockExpression(readType, readpkvalExp), @@ -1882,7 +1878,7 @@ namespace FreeSql.Internal { //判断主键为空,则整个对象不读取 - //blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }))); + //blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Constant(colprop) }))); if (trycol?.Attribute.IsPrimary == true) { ispkExp.Add( @@ -1985,7 +1981,7 @@ namespace FreeSql.Internal } var ispkExp = new List(); var propGetSetMethod = prop.GetSetMethod(true); - Expression readVal = Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, tryidxExp })); + Expression readVal = Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, tryidxExp, Expression.Constant(prop) })); Expression readExpAssign = null; //加速缓存 if (readType.IsArray) readExpAssign = Expression.New(RowInfo.Constructor, GetDataReaderValueBlockExpression(readType, readpkvalExp), @@ -2001,7 +1997,7 @@ namespace FreeSql.Internal { //判断主键为空,则整个对象不读取 - //blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp }))); + //blockExp.Add(Expression.Assign(readpkvalExp, Expression.Call(MethodDataReaderGetValue, new Expression[] { commonUtilExp, rowExp, dataIndexExp, Expression.Constant(prop) }))); if (flagStr.StartsWith("adoQuery") == false && //Ado.Query 的时候不作此判断 trycol?.Attribute.IsPrimary == true) //若主键值为 null,则整行读取出来的对象为 null { @@ -2088,7 +2084,7 @@ namespace FreeSql.Internal indexes2 = ctor.GetParameters().Select(c => row2.GetOrdinal(c.Name)).ToArray(); for (var c = 0; c < ctorParms.Length; c++) - ctorParms[c] = Utils.InternalDataReaderGetValue(commonUtils2, row2, indexes2[c]); + ctorParms[c] = Utils.InternalDataReaderGetValue(commonUtils2, row2, indexes2[c], null); return new RowInfo(ctor.Invoke(ctorParms), ctorParms.Length); } From 801ba148d6233d9076f4ad6ef5baa9dbbcb47235 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 19 Oct 2023 14:42:52 +0800 Subject: [PATCH 25/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20UpdateJoin=20IsV?= =?UTF-8?q?ersion=20=E5=AD=97=E6=AE=B5=E7=9A=84=E5=88=AB=E5=90=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Internal/CommonProvider/UpdateProvider.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 27059ad1..50388446 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -1216,6 +1216,24 @@ namespace FreeSql.Internal.CommonProvider if (_versionColumn != null && _versionColumn.Attribute.CanUpdate) { var vcname = _commonUtils.QuoteSqlName(_versionColumn.Attribute.Name); + var vcvalue = vcname; + if (string.IsNullOrWhiteSpace(_tableAlias) == false) + { + switch (_orm.Ado.DataType) + { + case DataType.PostgreSQL: + case DataType.OdbcPostgreSQL: + case DataType.CustomPostgreSQL: + case DataType.KingbaseES: + case DataType.OdbcKingbaseES: + case DataType.ShenTong: + vcvalue = $"{_tableAlias}.{vcname}"; //set name = b.name + break; + default: + vcname = vcvalue = $"{_tableAlias}.{vcname}"; //set a.name = b.name + break; + } + } if (_versionColumn.Attribute.MapType == typeof(byte[])) { _updateVersionValue = Utils.GuidToBytes(Guid.NewGuid()); @@ -1227,7 +1245,7 @@ namespace FreeSql.Internal.CommonProvider sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "uv", _versionColumn, _versionColumn.Attribute.MapType, _updateVersionValue)); } else - sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcname, 0)).Append(" + 1"); + sb.Append(", ").Append(vcname).Append(" = ").Append(_commonUtils.IsNull(vcvalue, 0)).Append(" + 1"); } ToSqlWhere(sb); _interceptSql?.Invoke(sb); From c8bdd5e7411a2490429e81e64a29cbd50b9c32e9 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 19 Oct 2023 15:36:48 +0800 Subject: [PATCH 26/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20IncludeMany=20?= =?UTF-8?q?=E5=8F=98=E5=BC=82=20Where=20+=20ToList=20dto=20=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E7=BA=A7=E8=81=94=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 98 ------------------- .../SelectProvider/Select0Provider.cs | 2 +- .../SelectProvider/Select1Provider.cs | 39 +++++--- Providers/FreeSql.Provider.Xugu/XuguUtils.cs | 2 +- 4 files changed, 28 insertions(+), 113 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 0700ca6b..fcc01603 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,82 +1084,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5842,28 +5766,6 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index 72e6bea2..bd6e2e13 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -40,7 +40,7 @@ namespace FreeSql.Internal.CommonProvider #else public List> _includeToListAsync = new List>(); #endif - public Dictionary _includeInfo = new Dictionary(); + public Dictionary> _includeInfo = new Dictionary>(); public bool _distinct; public Expression _selectExpression; public List _whereGlobalFilter; diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index d33d7c1c..3a513597 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -287,6 +287,7 @@ namespace FreeSql.Internal.CommonProvider public Dictionary Childs { get; } = new Dictionary(); public Expression CurrentExpression { get; } public bool IsOutputPrimary { get; set; } + public List OutputColumns { get; } = new List(); public IncludeManyNewInit(TableInfo table, Expression currentExpression) { this.Table = table; @@ -313,20 +314,26 @@ namespace FreeSql.Internal.CommonProvider { var curIncNewInit = incNewInit; Expression curParmExp = parmExp; - for (var a = 0; a < inc.Value.Length - 1; a++) + for (var a = 0; a < inc.Value.Item1.Length - 1; a++) { - curParmExp = Expression.MakeMemberAccess(parmExp, inc.Value[a].Member); - if (curIncNewInit.Childs.ContainsKey(inc.Value[a].Member.Name) == false) - curIncNewInit.Childs.Add(inc.Value[a].Member.Name, curIncNewInit = new IncludeManyNewInit(_orm.CodeFirst.GetTableByEntity(inc.Value[a].Type), curParmExp)); + curParmExp = Expression.MakeMemberAccess(parmExp, inc.Value.Item1[a].Member); + if (curIncNewInit.Childs.ContainsKey(inc.Value.Item1[a].Member.Name) == false) + curIncNewInit.Childs.Add(inc.Value.Item1[a].Member.Name, curIncNewInit = new IncludeManyNewInit(_orm.CodeFirst.GetTableByEntity(inc.Value.Item1[a].Type), curParmExp)); else - curIncNewInit = curIncNewInit.Childs[inc.Value[a].Member.Name]; + curIncNewInit = curIncNewInit.Childs[inc.Value.Item1[a].Member.Name]; } curIncNewInit.IsOutputPrimary = true; + var outcols = inc.Value.Item2.Columns.Where(a => a.Attribute.IsPrimary == false).ToArray(); + if (outcols.Any()) curIncNewInit.OutputColumns.AddRange(outcols); } MemberInitExpression GetIncludeManyNewInitExpression(IncludeManyNewInit imni) { var bindings = new List(); - if (imni.IsOutputPrimary) bindings.AddRange(imni.Table.Primarys.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + if (imni.IsOutputPrimary) + { + bindings.AddRange(imni.Table.Primarys.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + if (imni.OutputColumns.Any()) bindings.AddRange(imni.OutputColumns.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + } if (imni.Childs.Any()) bindings.AddRange(imni.Childs.Select(a => Expression.Bind(imni.Table.Properties[a.Key], GetIncludeManyNewInitExpression(a.Value)))); var pgarrayToManys = imni.Table.GetAllTableRef().Select(tr => { @@ -1514,7 +1521,7 @@ namespace FreeSql.Internal.CommonProvider for (var a = 0; a < members.Count; a++) includeValue[a] = members[a]; includeValue[includeValue.Length - 1] = expBody as MemberExpression; var includeKey = $"{string.Join(".", includeValue.Select(a => a.Member.Name))}"; - if (_includeInfo.ContainsKey(includeKey) == false) _includeInfo.Add(includeKey, includeValue); + if (_includeInfo.ContainsKey(includeKey) == false) _includeInfo.Add(includeKey, NativeTuple.Create(includeValue, tbref)); return this; } @@ -1577,20 +1584,26 @@ namespace FreeSql.Internal.CommonProvider { var curIncNewInit = incNewInit; Expression curParmExp = parmExp; - for (var a = 0; a < inc.Value.Length - 1; a++) + for (var a = 0; a < inc.Value.Item1.Length - 1; a++) { - curParmExp = Expression.MakeMemberAccess(parmExp, inc.Value[a].Member); - if (curIncNewInit.Childs.ContainsKey(inc.Value[a].Member.Name) == false) - curIncNewInit.Childs.Add(inc.Value[a].Member.Name, curIncNewInit = new IncludeManyNewInit(_orm.CodeFirst.GetTableByEntity(inc.Value[a].Type), curParmExp)); + curParmExp = Expression.MakeMemberAccess(parmExp, inc.Value.Item1[a].Member); + if (curIncNewInit.Childs.ContainsKey(inc.Value.Item1[a].Member.Name) == false) + curIncNewInit.Childs.Add(inc.Value.Item1[a].Member.Name, curIncNewInit = new IncludeManyNewInit(_orm.CodeFirst.GetTableByEntity(inc.Value.Item1[a].Type), curParmExp)); else - curIncNewInit = curIncNewInit.Childs[inc.Value[a].Member.Name]; + curIncNewInit = curIncNewInit.Childs[inc.Value.Item1[a].Member.Name]; } curIncNewInit.IsOutputPrimary = true; + var outcols = inc.Value.Item2.Columns.Where(a => a.Attribute.IsPrimary == false).ToArray(); + if (outcols.Any()) curIncNewInit.OutputColumns.AddRange(outcols); } MemberInitExpression GetIncludeManyNewInitExpression(IncludeManyNewInit imni) { var bindings = new List(); - if (imni.IsOutputPrimary) bindings.AddRange(imni.Table.Primarys.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + if (imni.IsOutputPrimary) + { + bindings.AddRange(imni.Table.Primarys.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + if (imni.OutputColumns.Any()) bindings.AddRange(imni.OutputColumns.Select(a => Expression.Bind(imni.Table.Properties[a.CsName], Expression.MakeMemberAccess(imni.CurrentExpression, imni.Table.Properties[a.CsName])))); + } if (imni.Childs.Any()) bindings.AddRange(imni.Childs.Select(a => Expression.Bind(imni.Table.Properties[a.Key], GetIncludeManyNewInitExpression(a.Value)))); var pgarrayToManys = imni.Table.GetAllTableRef().Select(tr => { diff --git a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs index 573536b8..e6f8702f 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs @@ -129,7 +129,7 @@ namespace FreeSql.Xugu return $"{nametrim.Trim('"').Replace("\".\"", ".").Replace(".\"", ".")}"; } public override string[] SplitTableName(string name) => GetSplitTableNames(name, '"', '"', 2); - public override string QuoteParamterName(string name) => $"@{name}"; + public override string QuoteParamterName(string name) => $":{name}"; public override string IsNull(string sql, object value) => $"coalesce({sql}, {value})"; public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}"; public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}"; From 632c5cabf46a3086c1cc8b2bf76fef744083d61d Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 19 Oct 2023 15:41:15 +0800 Subject: [PATCH 27/35] v3.2.802-preview20231019 --- Directory.Build.props | 2 +- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- FreeSql/FreeSql.xml | 98 +++++++++++++++++++ .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- ...FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 32 files changed, 129 insertions(+), 31 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 72959c49..f3a3ef06 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index a712f70f..045eb8db 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 3d04ad37..00e2415e 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index 5731ee63..d0b44142 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index 54fcc9ab..e4a4e09b 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index bd977d99..959fd328 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 55b30937..989c6cc5 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index fe0d13a6..a2a9de97 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index 3f34c961..a23cd75b 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index fee7f942..345d012a 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 64497d28..1e1356d7 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index fcc01603..0700ca6b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,6 +1084,82 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5766,6 +5842,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index 71970f51..d31d59c4 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index 97ab4316..f76c916e 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index bb3f45a7..781a5cba 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index ce84c411..081e35c9 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 8457b69e..4464b03c 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 0f034be4..6e820873 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index 03572e06..ae89890c 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index cb6e2e0f..c0b757a1 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index 39f650c6..e6979518 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index cf1664d3..52b667d5 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 0d1c1997..0cb440eb 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 873f1a0e..21c74844 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index c04aa309..c48d4982 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index e8db83f0..29f4edcc 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index 54bd1710..cbeb6763 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index e7d252e4..087e6428 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 29a31a4d..6db1a96a 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index 30682c3b..ef9897a1 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index d690569b..ca65167e 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231018 + 3.2.802-preview20231019 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index ec55bd11..fc56c830 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231018 + 3.2.802-preview20231019 From 09225ffd1262df8ad90bff1122a8d9385c55de2c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 24 Oct 2023 12:52:09 +0800 Subject: [PATCH 28/35] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20IUpdateJoin=20As?= =?UTF-8?q?Table=20=E5=90=8C=E6=97=B6=E5=AF=B9=E5=A4=9A=E8=A1=A8=E5=90=8D?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 13 +++++++------ FreeSql.DbContext/FreeSql.DbContext.xml | 9 --------- FreeSql/FreeSql.xml | 3 ++- FreeSql/Interface/Curd/IUpdateJoin.cs | 3 ++- .../Internal/CommonProvider/UpdateJoinProvider.cs | 8 +++++++- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 46b88d5b..c0aa4d01 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -559,7 +559,7 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) - //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") + .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") @@ -600,6 +600,12 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var updatejoin031sql = fsql.Update() + .Join((a, b) => a.GroupId == b.Id) + .AsTable("t1", "t2") + .Set((a, b) => b.GroupName == a.Username + "b.groupname") + .ToSql(); + fsql.CodeFirst.Entity(e => { e.Help().Navigate(b => b.a, nameof(B11.Id)); @@ -618,11 +624,6 @@ namespace base_entity fsql.GlobalFilter.Apply("test01", a => a.IsDeleted == false); - var updatejoin031sql = fsql.Update() - .Join((a, b) => a.GroupId == b.Id) - .Set((a, b) => b.GroupName == a.Username + "b.groupname") - .ToSql(); - fsql.UseJsonMap(); fsql.Select().Where(a => a.FormLocking == null).Count(); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 26522f10..537315e2 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -800,14 +800,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 0700ca6b..9843c757 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -3412,11 +3412,12 @@ 零个或多个过滤器名字 - + 设置表名 + diff --git a/FreeSql/Interface/Curd/IUpdateJoin.cs b/FreeSql/Interface/Curd/IUpdateJoin.cs index 1ebecf36..fef72130 100644 --- a/FreeSql/Interface/Curd/IUpdateJoin.cs +++ b/FreeSql/Interface/Curd/IUpdateJoin.cs @@ -106,8 +106,9 @@ namespace FreeSql /// 设置表名 /// /// + /// /// - IUpdateJoin AsTable(string tableName); + IUpdateJoin AsTable(string tableName, string joinTableName); /// /// 返回即将执行的SQL语句 /// diff --git a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs index ce7e9241..82fcf6cf 100644 --- a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs @@ -98,9 +98,15 @@ namespace FreeSql.Internal.CommonProvider } #region proxy IUpdate - public IUpdateJoin AsTable(string tableName) + public IUpdateJoin AsTable(string tableName, string joinTableName) { _update.AsTable(tableName); + _query2Provider._tableRules.Clear(); + _query2Provider._tableRules.Add((t, old) => + { + if (t == typeof(T2)) return joinTableName; + return old; + }); return this; } public IUpdateJoin WithConnection(DbConnection connection) From 9004ff095f172908a6734a29ab27c2411a152851 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 24 Oct 2023 13:03:46 +0800 Subject: [PATCH 29/35] v3.2.802-preview20231024 --- Directory.Build.props | 2 +- Examples/base_entity/Program.cs | 4 ++-- .../FreeSql.Extensions.AggregateRoot.csproj | 2 +- .../FreeSql.Extensions.BaseEntity.csproj | 2 +- .../FreeSql.Extensions.JsonMap.csproj | 2 +- .../FreeSql.Extensions.LazyLoading.csproj | 2 +- .../FreeSql.Extensions.Linq.csproj | 2 +- .../FreeSql.Generator/FreeSql.Generator.csproj | 2 +- FreeSql.All/FreeSql.All.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 9 +++++++++ FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql/FreeSql.csproj | 2 +- .../CommonProvider/UpdateJoinProvider.cs | 16 ++++++++++------ .../FreeSql.Provider.ClickHouse.csproj | 2 +- .../FreeSql.Provider.Custom.csproj | 2 +- .../FreeSql.Provider.Dameng.csproj | 2 +- .../FreeSql.Provider.Firebird.csproj | 2 +- .../FreeSql.Provider.GBase.csproj | 2 +- .../FreeSql.Provider.KingbaseES.csproj | 2 +- .../FreeSql.Provider.MsAccess.csproj | 2 +- .../FreeSql.Provider.MySql.csproj | 2 +- .../FreeSql.Provider.MySqlConnector.csproj | 2 +- .../FreeSql.Provider.Odbc.csproj | 2 +- .../FreeSql.Provider.Oracle.csproj | 2 +- .../FreeSql.Provider.OracleOledb.csproj | 2 +- .../FreeSql.Provider.PostgreSQL.csproj | 2 +- .../FreeSql.Provider.QuestDb.csproj | 2 +- .../FreeSql.Provider.ShenTong.csproj | 2 +- .../FreeSql.Provider.SqlServer.csproj | 2 +- .../FreeSql.Provider.SqlServerForSystem.csproj | 2 +- .../FreeSql.Provider.Sqlite.csproj | 2 +- .../FreeSql.Provider.SqliteCore.csproj | 2 +- .../FreeSql.Provider.Xugu.csproj | 2 +- 34 files changed, 52 insertions(+), 39 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index f3a3ef06..70925ede 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,7 +11,7 @@ diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index c0aa4d01..4efbf7d9 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -601,8 +601,8 @@ namespace base_entity #endregion var updatejoin031sql = fsql.Update() - .Join((a, b) => a.GroupId == b.Id) - .AsTable("t1", "t2") + .Join(fsql.Select().Where(a => a.GroupName == "xxx"), (a, b) => a.GroupId == b.Id) + .AsTable("t1", null) .Set((a, b) => b.GroupName == a.Username + "b.groupname") .ToSql(); diff --git a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj index 045eb8db..0e78ff0e 100644 --- a/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj +++ b/Extensions/FreeSql.Extensions.AggregateRoot/FreeSql.Extensions.AggregateRoot.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj index 00e2415e..37162206 100644 --- a/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj +++ b/Extensions/FreeSql.Extensions.BaseEntity/FreeSql.Extensions.BaseEntity.csproj @@ -19,7 +19,7 @@ key.snk false latest - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj index d0b44142..3fa2ba05 100644 --- a/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj +++ b/Extensions/FreeSql.Extensions.JsonMap/FreeSql.Extensions.JsonMap.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj index e4a4e09b..cf0f3958 100644 --- a/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj +++ b/Extensions/FreeSql.Extensions.LazyLoading/FreeSql.Extensions.LazyLoading.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj index 959fd328..c29ab312 100644 --- a/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj +++ b/Extensions/FreeSql.Extensions.Linq/FreeSql.Extensions.Linq.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 989c6cc5..891e2116 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -13,7 +13,7 @@ https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql FreeSql DbFirst 实体生成器 - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/FreeSql.All/FreeSql.All.csproj b/FreeSql.All/FreeSql.All.csproj index a2a9de97..ec070df3 100644 --- a/FreeSql.All/FreeSql.All.csproj +++ b/FreeSql.All/FreeSql.All.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/FreeSql.DbContext/FreeSql.DbContext.csproj b/FreeSql.DbContext/FreeSql.DbContext.csproj index a23cd75b..d07beb1c 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.csproj +++ b/FreeSql.DbContext/FreeSql.DbContext.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 537315e2..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -800,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 345d012a..cbe49bb1 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 1e1356d7..9cdf6492 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -17,7 +17,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs index 82fcf6cf..c4d51f3a 100644 --- a/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateJoinProvider.cs @@ -100,13 +100,17 @@ namespace FreeSql.Internal.CommonProvider #region proxy IUpdate public IUpdateJoin AsTable(string tableName, string joinTableName) { - _update.AsTable(tableName); - _query2Provider._tableRules.Clear(); - _query2Provider._tableRules.Add((t, old) => + if (string.IsNullOrWhiteSpace(tableName) == false) + _update.AsTable(tableName); + if (string.IsNullOrWhiteSpace(joinTableName) == false) { - if (t == typeof(T2)) return joinTableName; - return old; - }); + _query2Provider._tableRules.Clear(); + _query2Provider._tableRules.Add((t, old) => + { + if (t == typeof(T2)) return joinTableName; + return old; + }); + } return this; } public IUpdateJoin WithConnection(DbConnection connection) diff --git a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj index d31d59c4..119d7d9c 100644 --- a/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj +++ b/Providers/FreeSql.Provider.ClickHouse/FreeSql.Provider.ClickHouse.csproj @@ -19,7 +19,7 @@ False key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj index f76c916e..f418c095 100644 --- a/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj +++ b/Providers/FreeSql.Provider.Custom/FreeSql.Provider.Custom.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj index 781a5cba..ab7c851a 100644 --- a/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj +++ b/Providers/FreeSql.Provider.Dameng/FreeSql.Provider.Dameng.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj index 081e35c9..1e3ef25d 100644 --- a/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj +++ b/Providers/FreeSql.Provider.Firebird/FreeSql.Provider.Firebird.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj index 4464b03c..6567e5ee 100644 --- a/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj +++ b/Providers/FreeSql.Provider.GBase/FreeSql.Provider.GBase.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj index 6e820873..59053fd9 100644 --- a/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj +++ b/Providers/FreeSql.Provider.KingbaseES/FreeSql.Provider.KingbaseES.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj index ae89890c..fe131ff9 100644 --- a/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj +++ b/Providers/FreeSql.Provider.MsAccess/FreeSql.Provider.MsAccess.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj index c0b757a1..f8fdadcc 100644 --- a/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj +++ b/Providers/FreeSql.Provider.MySql/FreeSql.Provider.MySql.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj index e6979518..eb9de138 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSql.Provider.MySqlConnector.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj index 52b667d5..9dc24e0b 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj +++ b/Providers/FreeSql.Provider.Odbc/FreeSql.Provider.Odbc.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj index 0cb440eb..59fd85d3 100644 --- a/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj +++ b/Providers/FreeSql.Provider.Oracle/FreeSql.Provider.Oracle.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj index 21c74844..b8d63cba 100644 --- a/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj +++ b/Providers/FreeSql.Provider.OracleOledb/FreeSql.Provider.OracleOledb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj index c48d4982..72833000 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj +++ b/Providers/FreeSql.Provider.PostgreSQL/FreeSql.Provider.PostgreSQL.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj index 29f4edcc..d623cbb2 100644 --- a/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj +++ b/Providers/FreeSql.Provider.QuestDb/FreeSql.Provider.QuestDb.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj index cbeb6763..85e27d80 100644 --- a/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj +++ b/Providers/FreeSql.Provider.ShenTong/FreeSql.Provider.ShenTong.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj index 087e6428..111db651 100644 --- a/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj +++ b/Providers/FreeSql.Provider.SqlServer/FreeSql.Provider.SqlServer.csproj @@ -18,7 +18,7 @@ true false key.snk - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj index 6db1a96a..5e2bbae3 100644 --- a/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj +++ b/Providers/FreeSql.Provider.SqlServerForSystem/FreeSql.Provider.SqlServerForSystem.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj index ef9897a1..d76f77ad 100644 --- a/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj +++ b/Providers/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj index ca65167e..6bcce1cf 100644 --- a/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj +++ b/Providers/FreeSql.Provider.SqliteCore/FreeSql.Provider.SqliteCore.csproj @@ -18,7 +18,7 @@ true key.snk false - 3.2.802-preview20231019 + 3.2.802-preview20231024 diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index fc56c830..7b574332 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231019 + 3.2.802-preview20231024 From a0b3d14b4b33430f8bc9e050cfa555168f3e125c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 25 Oct 2023 15:06:14 +0800 Subject: [PATCH 30/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Xugu=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=8C=96=E5=89=8D=E8=BE=8D=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Providers/FreeSql.Provider.Xugu/XuguUtils.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs index e6f8702f..6e750256 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs @@ -109,10 +109,10 @@ namespace FreeSql.Xugu } public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => - Utils.GetDbParamtersByObject(sql, obj, "@", (name, type, value) => + Utils.GetDbParamtersByObject(sql, obj, ":", (name, type, value) => { if (value != null) value = getParamterValue(type, value); - var ret = new XGParameters { ParameterName = $"@{name}", Value = value }; + var ret = new XGParameters { ParameterName = $":{name}", Value = value }; var tp = _orm.CodeFirst.GetDbInfo(type)?.type; From 4518dc654834197ff332af11eb74a221d67d1f3e Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 25 Oct 2023 15:09:45 +0800 Subject: [PATCH 31/35] =?UTF-8?q?-=20=E8=A1=A5=E5=85=85=20XGDbType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 98 ------------------- .../FreeSql.Provider.Xugu/XuguDbFirst.cs | 4 +- 2 files changed, 2 insertions(+), 100 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 9843c757..7e96ab0a 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,82 +1084,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5843,28 +5767,6 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs b/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs index b58e90e7..19df6f89 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs @@ -70,7 +70,7 @@ namespace FreeSql.Xugu case "VARCHAR": ret = XGDbType.VarChar; break; case "CLOB": ret = XGDbType.LongVarChar; break; - //case "timestamp": ret = XGDbType.DateTime; break; + case "DATETIME": ret = XGDbType.DateTime; break; //case "timestamptz": ret = XGDbType.DateTime; break; //case "date": ret = XGDbType.Date; break; //case "time": ret = XGDbType.Time; break; @@ -78,7 +78,7 @@ namespace FreeSql.Xugu //case "interval": ret = XGDbType.Interval; break; case "BOOLEAN": ret = XGDbType.Bool; break; - //case "bytea": ret = XGDbType.Bytea; break; + case "BLOB": ret = XGDbType.LongVarBinary; break; //case "bit": ret = XGDbType.Bool; break; //case "varbit": ret = XGDbType.Varbit; break; From c9a05f91bb333cb5444a9a1c04c44749f8eba6b3 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 25 Oct 2023 16:10:37 +0800 Subject: [PATCH 32/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Xugu=20=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=8C=96=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Providers/FreeSql.Provider.Xugu/XuguUtils.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs index 6e750256..d73ef89f 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguUtils.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguUtils.cs @@ -92,7 +92,7 @@ namespace FreeSql.Xugu { if (string.IsNullOrEmpty(parameterName)) parameterName = $"p_{_params?.Count}"; if (value != null) value = getParamterValue(type, value); - var ret = new XGParameters { ParameterName = QuoteParamterName(parameterName), Value = value }; + var ret = new XGParameters { ParameterName = parameterName, Value = value }; var tp = _orm.CodeFirst.GetDbInfo(type)?.type; if (col != null) @@ -112,7 +112,7 @@ namespace FreeSql.Xugu Utils.GetDbParamtersByObject(sql, obj, ":", (name, type, value) => { if (value != null) value = getParamterValue(type, value); - var ret = new XGParameters { ParameterName = $":{name}", Value = value }; + var ret = new XGParameters { ParameterName = name, Value = value }; var tp = _orm.CodeFirst.GetDbInfo(type)?.type; From 6c1087b043f8638204dda23e09d90e632d3c8b81 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 27 Oct 2023 10:35:33 +0800 Subject: [PATCH 33/35] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Xugu=20=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20Enum=20=E6=98=A0=E5=B0=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Oracle/CustomOracleCodeFirst.cs | 4 +- .../DamengCodeFirst.cs | 4 +- .../Dameng/OdbcDamengCodeFirst.cs | 4 +- .../Oracle/OdbcOracleCodeFirst.cs | 4 +- .../OracleCodeFirst.cs | 4 +- .../FreeSql.Provider.Xugu.csproj | 2 +- .../FreeSql.Provider.Xugu/XuguCodeFirst.cs | 71 ++++++++++++------- 7 files changed, 57 insertions(+), 36 deletions(-) diff --git a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs index fc03a10c..4877de4b 100644 --- a/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Custom/Oracle/CustomOracleCodeFirst.cs @@ -59,8 +59,8 @@ namespace FreeSql.Custom.Oracle if (enumType != null) { var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? - CsToDb.New(DbType.Int32, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : - CsToDb.New(DbType.Int64, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + CsToDb.New(DbType.Int32, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(DbType.Int64, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); if (_dicCsToDb.ContainsKey(type.FullName) == false) { lock (_dicCsToDbLock) diff --git a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs index 0724ba61..2ac88b6e 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengCodeFirst.cs @@ -60,8 +60,8 @@ namespace FreeSql.Dameng if (enumType != null) { var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? - CsToDb.New(DmDbType.Int32, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : - CsToDb.New(DmDbType.Int64, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + CsToDb.New(DmDbType.Int32, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(DmDbType.Int64, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); if (_dicCsToDb.ContainsKey(type.FullName) == false) { lock (_dicCsToDbLock) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs index 2de3d900..52fb7a4d 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengCodeFirst.cs @@ -61,8 +61,8 @@ namespace FreeSql.Odbc.Dameng if (enumType != null) { var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? - CsToDb.New(OdbcType.Int, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : - CsToDb.New(OdbcType.BigInt, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + CsToDb.New(OdbcType.Int, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(OdbcType.BigInt, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); if (_dicCsToDb.ContainsKey(type.FullName) == false) { lock (_dicCsToDbLock) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs index 0ce0c843..12ad0db3 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleCodeFirst.cs @@ -61,8 +61,8 @@ namespace FreeSql.Odbc.Oracle if (enumType != null) { var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? - CsToDb.New(OdbcType.Int, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : - CsToDb.New(OdbcType.BigInt, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + CsToDb.New(OdbcType.Int, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(OdbcType.BigInt, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); if (_dicCsToDb.ContainsKey(type.FullName) == false) { lock (_dicCsToDbLock) diff --git a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs index 80f32817..358b0c19 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleCodeFirst.cs @@ -96,8 +96,8 @@ namespace FreeSql.Oracle if (enumType != null) { var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? - CsToDb.New(_dicCsToDb[typeof(int)].type, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : - CsToDb.New(_dicCsToDb[typeof(long)].type, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + CsToDb.New(_dicCsToDb[typeof(int)].type, "number", $"number(32){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(_dicCsToDb[typeof(long)].type, "number", $"number(16){(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); if (_dicCsToDb.ContainsKey(type) == false) { lock (_dicCsToDbLock) diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index 7b574332..f1243f98 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231024 + 3.2.802-preview20231027 diff --git a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs index 06641b8e..6f6a5e9e 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs @@ -22,39 +22,35 @@ namespace FreeSql.Xugu } static object _dicCsToDbLock = new object(); - static Dictionary> _dicCsToDb = new Dictionary>() { + static Dictionary> _dicCsToDb = new Dictionary>() { - { - typeof(byte).FullName, - CsToDb.New(XGDbType.SmallInt, "TINYINT","TINYINT NOT NULL", false, false, 0) - }, - - { typeof(byte?).FullName, CsToDb.New(XGDbType.SmallInt, "TINYINT", "TINYINT", false, true, null) }, - { typeof(short).FullName, CsToDb.New(XGDbType.SmallInt, "SMALLINT","SMALLINT NOT NULL", false, false, 0) },{ typeof(short?).FullName, CsToDb.New(XGDbType.SmallInt, "SMALLINT", "SMALLINT", false, true, null) }, - { typeof(int).FullName, CsToDb.New(XGDbType.Int, "INTEGER","INTEGER NOT NULL", false, false, 0) },{ typeof(int?).FullName, CsToDb.New(XGDbType.Int, "INTEGER", "INTEGER", false, true, null) }, - { typeof(long).FullName, CsToDb.New(XGDbType.BigInt, "BIGINT","BIGINT NOT NULL", false, false, 0) },{ typeof(long?).FullName, CsToDb.New(XGDbType.BigInt, "BIGINT", "BIGINT", false, true, null) }, + { typeof(byte), CsToDb.New(XGDbType.SmallInt, "TINYINT","TINYINT NOT NULL", false, false, 0) }, + { typeof(byte?), CsToDb.New(XGDbType.SmallInt, "TINYINT", "TINYINT", false, true, null) }, + { typeof(short), CsToDb.New(XGDbType.SmallInt, "SMALLINT","SMALLINT NOT NULL", false, false, 0) },{ typeof(short?), CsToDb.New(XGDbType.SmallInt, "SMALLINT", "SMALLINT", false, true, null) }, + { typeof(int), CsToDb.New(XGDbType.Int, "INTEGER","INTEGER NOT NULL", false, false, 0) },{ typeof(int?), CsToDb.New(XGDbType.Int, "INTEGER", "INTEGER", false, true, null) }, + { typeof(long), CsToDb.New(XGDbType.BigInt, "BIGINT","BIGINT NOT NULL", false, false, 0) },{ typeof(long?), CsToDb.New(XGDbType.BigInt, "BIGINT", "BIGINT", false, true, null) }, - { typeof(ushort).FullName, CsToDb.New(XGDbType.Int, "INT","INT NOT NULL", false, false, 0) },{ typeof(ushort?).FullName, CsToDb.New(XGDbType.Int, "INT", "INT", false, true, null) }, - { typeof(uint).FullName, CsToDb.New(XGDbType.BigInt, "BIGINT","BIGINT NOT NULL", false, false, 0) },{ typeof(uint?).FullName, CsToDb.New(XGDbType.BigInt, "BIGINT", "BIGINT", false, true, null) }, - { typeof(ulong).FullName, CsToDb.New(XGDbType.Numeric, "NUMERIC","NUMERIC(20,0) NOT NULL", false, false, 0) },{ typeof(ulong?).FullName, CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(20,0)", false, true, null) }, + { typeof(ushort), CsToDb.New(XGDbType.Int, "INT","INT NOT NULL", false, false, 0) },{ typeof(ushort?), CsToDb.New(XGDbType.Int, "INT", "INT", false, true, null) }, + { typeof(uint), CsToDb.New(XGDbType.BigInt, "BIGINT","BIGINT NOT NULL", false, false, 0) },{ typeof(uint?), CsToDb.New(XGDbType.BigInt, "BIGINT", "BIGINT", false, true, null) }, + { typeof(ulong), CsToDb.New(XGDbType.Numeric, "NUMERIC","NUMERIC(20,0) NOT NULL", false, false, 0) },{ typeof(ulong?), CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(20,0)", false, true, null) }, - { typeof(float).FullName, CsToDb.New(XGDbType.Real, "FLOAT","FLOAT NOT NULL", false, false, 0) },{ typeof(float?).FullName, CsToDb.New(XGDbType.Real, "FLOAT", "FLOAT", false, true, null) }, - { typeof(double).FullName, CsToDb.New(XGDbType.Double, "DOUBLE","DOUBLE NOT NULL", false, false, 0) },{ typeof(double?).FullName, CsToDb.New(XGDbType.Double, "DOUBLE", "DOUBLE", false, true, null) }, - { typeof(decimal).FullName, CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?).FullName, CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(10,2)", false, true, null) }, + { typeof(float), CsToDb.New(XGDbType.Real, "FLOAT","FLOAT NOT NULL", false, false, 0) },{ typeof(float?), CsToDb.New(XGDbType.Real, "FLOAT", "FLOAT", false, true, null) }, + { typeof(double), CsToDb.New(XGDbType.Double, "DOUBLE","DOUBLE NOT NULL", false, false, 0) },{ typeof(double?), CsToDb.New(XGDbType.Double, "DOUBLE", "DOUBLE", false, true, null) }, + { typeof(decimal), CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(10,2) NOT NULL", false, false, 0) },{ typeof(decimal?), CsToDb.New(XGDbType.Numeric, "NUMERIC", "NUMERIC(10,2)", false, true, null) }, - { typeof(string).FullName, CsToDb.New(XGDbType.VarChar, "VARCHAR", "VARCHAR(255)", false, null, "") }, + { typeof(string), CsToDb.New(XGDbType.VarChar, "VARCHAR", "VARCHAR(255)", false, null, "") }, - { typeof(char).FullName, CsToDb.New(XGDbType.Char, "CHAR", "CHAR(1)", false, null, '\0') }, + { typeof(char), CsToDb.New(XGDbType.Char, "CHAR", "CHAR(1)", false, null, '\0') }, - //{ typeof(TimeSpan).FullName, CsToDb.New(XGDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?).FullName, CsToDb.New(XGDbType.Time, "time", "time",false, true, null) }, - { typeof(DateTime).FullName, CsToDb.New(XGDbType.DateTime, "DATETIME", "DATETIME NOT NULL", false, false, new DateTime(1970,1,1)) }, - { typeof(DateTime?).FullName, CsToDb.New(XGDbType.DateTime, "DATETIME", "DATETIME", false, true, null) }, + //{ typeof(TimeSpan), CsToDb.New(XGDbType.Time, "time","time NOT NULL", false, false, 0) },{ typeof(TimeSpan?), CsToDb.New(XGDbType.Time, "time", "time",false, true, null) }, + { typeof(DateTime), CsToDb.New(XGDbType.DateTime, "DATETIME", "DATETIME NOT NULL", false, false, new DateTime(1970,1,1)) }, + { typeof(DateTime?), CsToDb.New(XGDbType.DateTime, "DATETIME", "DATETIME", false, true, null) }, - { typeof(bool).FullName, CsToDb.New(XGDbType.Bool, "BOOLEAN","BOOLEAN NOT NULL", null, false, false) },{ typeof(bool?).FullName, CsToDb.New(XGDbType.Bool, "BOOLEAN","BOOLEAN", null, true, null) }, + { typeof(bool), CsToDb.New(XGDbType.Bool, "BOOLEAN","BOOLEAN NOT NULL", null, false, false) },{ typeof(bool?), CsToDb.New(XGDbType.Bool, "BOOLEAN","BOOLEAN", null, true, null) }, - { typeof(byte[]).FullName, CsToDb.New(XGDbType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) }, - { typeof(Guid).FullName, CsToDb.New(XGDbType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?).FullName, CsToDb.New(XGDbType.Char, "char", "char(36) NULL", false, true, null) }, + { typeof(byte[]), CsToDb.New(XGDbType.VarBinary, "blob", "blob NULL", false, null, new byte[0]) }, + { typeof(Guid), CsToDb.New(XGDbType.Char, "char", "char(36) NOT NULL", false, false, Guid.Empty) },{ typeof(Guid?), CsToDb.New(XGDbType.Char, "char", "char(36) NULL", false, true, null) }, @@ -65,9 +61,34 @@ namespace FreeSql.Xugu public override DbInfoResult GetDbInfo(Type type) { - _dicCsToDb.TryGetValue(type.FullName, out var info); + _dicCsToDb.TryGetValue(type, out var info); if (info == null) return null; return new DbInfoResult((int)info.type, info.dbtype, info.dbtypeFull, info.isnullable, info.defaultValue); + + if (_dicCsToDb.TryGetValue(type, out var trydc)) return new DbInfoResult((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue); + if (type.IsArray) return null; + var enumType = type.IsEnum ? type : null; + if (enumType == null && type.IsNullableType()) + { + var genericTypes = type.GetGenericArguments(); + if (genericTypes.Length == 1 && genericTypes.First().IsEnum) enumType = genericTypes.First(); + } + if (enumType != null) + { + var newItem = enumType.GetCustomAttributes(typeof(FlagsAttribute), false).Any() ? + CsToDb.New(_dicCsToDb[typeof(int)].type, "INT", $"INT{(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()) : + CsToDb.New(_dicCsToDb[typeof(long)].type, "BIGINT", $"BIGINT{(type.IsEnum ? " NOT NULL" : "")}", false, type.IsEnum ? false : true, enumType.CreateInstanceGetDefaultValue()); + if (_dicCsToDb.ContainsKey(type) == false) + { + lock (_dicCsToDbLock) + { + if (_dicCsToDb.ContainsKey(type) == false) + _dicCsToDb.Add(type, newItem); + } + } + return new DbInfoResult((int)newItem.type, newItem.dbtype, newItem.dbtypeFull, newItem.isnullable, newItem.defaultValue); + } + return null; } internal static string GetXuguSqlTypeFullName(object[] row) { From 8c33d5ab70b66fdf4141da466096e39b67f7fa5d Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 27 Oct 2023 10:36:15 +0800 Subject: [PATCH 34/35] co --- Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj index f1243f98..7b574332 100644 --- a/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj +++ b/Providers/FreeSql.Provider.Xugu/FreeSql.Provider.Xugu.csproj @@ -15,7 +15,7 @@ $(AssemblyName) true true - 3.2.802-preview20231027 + 3.2.802-preview20231024 From 16e5f8b199d3f11ec99002e4b6585ff1904d41dd Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 27 Oct 2023 11:01:38 +0800 Subject: [PATCH 35/35] co --- FreeSql/FreeSql.xml | 98 +++++++++++++++++++ .../FreeSql.Provider.Xugu/XuguCodeFirst.cs | 4 - 2 files changed, 98 insertions(+), 4 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 7e96ab0a..9843c757 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1084,6 +1084,82 @@ + + + 动态创建实体类型 + + + + + 配置Class + + 类名 + 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] + + + + + 配置属性 + + 属性名称 + 属性类型 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性标记的特性-支持多个 + + + + + 配置属性 + + 属性名称 + 属性类型 + 该属性是否重写父类属性 + 属性默认值 + 属性标记的特性-支持多个 + + + + + 配置父类 + + 父类类型 + + + + + Override属性 + + + + + + Emit动态创建出Class - Type + + + + + + 首字母小写 + + + + + + + 首字母大写 + + + + 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null @@ -5767,6 +5843,28 @@ 请使用 fsql.InsertDict(dict) 方法插入字典数据 + + + 动态构建Class Type + + + + + + 根据字典,创建 table 对应的实体对象 + + + + + + + + 根据实体对象,创建 table 对应的字典 + + + + + C#: that >= between && that <= and diff --git a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs index 6f6a5e9e..4ecded02 100644 --- a/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs +++ b/Providers/FreeSql.Provider.Xugu/XuguCodeFirst.cs @@ -61,10 +61,6 @@ namespace FreeSql.Xugu public override DbInfoResult GetDbInfo(Type type) { - _dicCsToDb.TryGetValue(type, out var info); - if (info == null) return null; - return new DbInfoResult((int)info.type, info.dbtype, info.dbtypeFull, info.isnullable, info.defaultValue); - if (_dicCsToDb.TryGetValue(type, out var trydc)) return new DbInfoResult((int)trydc.type, trydc.dbtype, trydc.dbtypeFull, trydc.isnullable, trydc.defaultValue); if (type.IsArray) return null; var enumType = type.IsEnum ? type : null;