From 8e33d80b5a4a4ef3ff16b9499cc788dfdd8d8fcb Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Fri, 23 Aug 2019 18:17:17 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Pgsql=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E4=BD=BF=E7=94=A8=20NoneParameter?= =?UTF-8?q?=20=E5=90=8E=E6=97=A5=E6=9C=9F=E7=B1=BB=E5=9E=8B=E7=9A=84?= =?UTF-8?q?=E8=AF=AD=E6=B3=95=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnector/Curd/MySqlUpdateTest.cs | 8 ++++++++ .../FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs | 8 ++++++++ .../PostgreSQL/Curd/PostgreSQLUpdateTest.cs | 5 +++++ .../FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs | 8 ++++++++ .../FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs | 8 ++++++++ FreeSql/Internal/CommonProvider/UpdateProvider.cs | 7 ++++++- .../FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs | 9 +++++++++ 7 files changed, 52 insertions(+), 1 deletion(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs index 844e7210..c89f2c76 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.MySqlConnector @@ -180,7 +181,14 @@ namespace FreeSql.Tests.MySqlConnector [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.mysql.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs index 55808901..a1f6758a 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.MySql @@ -181,7 +182,14 @@ namespace FreeSql.Tests.MySql [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.mysql.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs index 8d26b835..ff270d94 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.PostgreSQL @@ -120,7 +121,11 @@ namespace FreeSql.Tests.PostgreSQL [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs index 7d6de208..88ad4cb0 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs @@ -2,6 +2,7 @@ using FreeSql.DataAnnotations; using FreeSql.Tests.DataContext.SqlServer; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.SqlServer @@ -131,7 +132,14 @@ namespace FreeSql.Tests.SqlServer [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.sqlserver.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs index e6ac094e..e6c74398 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs @@ -1,6 +1,7 @@ using FreeSql.DataAnnotations; using System; using System.Collections.Generic; +using System.Linq; using Xunit; namespace FreeSql.Tests.Sqlite @@ -124,7 +125,14 @@ namespace FreeSql.Tests.Sqlite [Fact] public void ExecuteAffrows() { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + var time = DateTime.Now; + var items222 = g.sqlite.Select().Where(a => a.CreateTime > time).Limit(10).ToList(); + + update.SetSource(items.First()).NoneParameter().ExecuteAffrows(); + update.SetSource(items).NoneParameter().ExecuteAffrows(); } [Fact] public void ExecuteUpdated() diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 5b8e1071..049e6cbd 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -566,6 +566,7 @@ namespace FreeSql.Internal.CommonProvider protected abstract void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys); protected abstract void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d); + protected virtual void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) { } public IUpdate AsTable(Func tableRule) { @@ -658,7 +659,11 @@ namespace FreeSql.Internal.CommonProvider if (isnull == false) isnull = value == null || value == DBNull.Value; } cwsb.Append(" END"); - if (isnull == false) sb.Append(cwsb.ToString()); + if (isnull == false) + { + ToSqlCaseWhenEnd(cwsb, col); + sb.Append(cwsb.ToString()); + } else sb.Append("NULL"); cwsb.Clear(); diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index 88554df2..b1fc6740 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -136,5 +136,14 @@ namespace FreeSql.PostgreSQL.Curd } sb.Append(")"); } + + protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) + { + if (_noneParameter == false) return; + var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; + if (dbtype == null) return; + + sb.Append("::").Append(dbtype); + } } }