Skip to content

Commit 8e33d80

Browse files
2881028810
authored andcommitted
- 修复 Pgsql 批量更新使用 NoneParameter 后日期类型的语法 bug;
1 parent 858e3d3 commit 8e33d80

File tree

7 files changed

+52
-1
lines changed

7 files changed

+52
-1
lines changed

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlUpdateTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FreeSql.DataAnnotations;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Xunit;
56

67
namespace FreeSql.Tests.MySqlConnector
@@ -180,7 +181,14 @@ public void WhereExists()
180181
[Fact]
181182
public void ExecuteAffrows()
182183
{
184+
var items = new List<Topic>();
185+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
186+
187+
var time = DateTime.Now;
188+
var items222 = g.mysql.Select<Topic>().Where(a => a.CreateTime > time).Limit(10).ToList();
183189

190+
update.SetSource(items.First()).NoneParameter().ExecuteAffrows();
191+
update.SetSource(items).NoneParameter().ExecuteAffrows();
184192
}
185193
[Fact]
186194
public void ExecuteUpdated()

FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FreeSql.DataAnnotations;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Xunit;
56

67
namespace FreeSql.Tests.MySql
@@ -181,7 +182,14 @@ public void WhereExists()
181182
[Fact]
182183
public void ExecuteAffrows()
183184
{
185+
var items = new List<Topic>();
186+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
187+
188+
var time = DateTime.Now;
189+
var items222 = g.mysql.Select<Topic>().Where(a => a.CreateTime > time).Limit(10).ToList();
184190

191+
update.SetSource(items.First()).NoneParameter().ExecuteAffrows();
192+
update.SetSource(items).NoneParameter().ExecuteAffrows();
185193
}
186194
[Fact]
187195
public void ExecuteUpdated()

FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FreeSql.DataAnnotations;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Xunit;
56

67
namespace FreeSql.Tests.PostgreSQL
@@ -120,7 +121,11 @@ public void WhereExists()
120121
[Fact]
121122
public void ExecuteAffrows()
122123
{
124+
var items = new List<Topic>();
125+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
123126

127+
update.SetSource(items.First()).NoneParameter().ExecuteAffrows();
128+
update.SetSource(items).NoneParameter().ExecuteAffrows();
124129
}
125130
[Fact]
126131
public void ExecuteUpdated()

FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using FreeSql.Tests.DataContext.SqlServer;
33
using System;
44
using System.Collections.Generic;
5+
using System.Linq;
56
using Xunit;
67

78
namespace FreeSql.Tests.SqlServer
@@ -131,7 +132,14 @@ public void WhereExists()
131132
[Fact]
132133
public void ExecuteAffrows()
133134
{
135+
var items = new List<Topic>();
136+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
137+
138+
var time = DateTime.Now;
139+
var items222 = g.sqlserver.Select<Topic>().Where(a => a.CreateTime > time).Limit(10).ToList();
134140

141+
update.SetSource(items.First()).NoneParameter().ExecuteAffrows();
142+
update.SetSource(items).NoneParameter().ExecuteAffrows();
135143
}
136144
[Fact]
137145
public void ExecuteUpdated()

FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FreeSql.DataAnnotations;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Xunit;
56

67
namespace FreeSql.Tests.Sqlite
@@ -124,7 +125,14 @@ public void WhereExists()
124125
[Fact]
125126
public void ExecuteAffrows()
126127
{
128+
var items = new List<Topic>();
129+
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
130+
131+
var time = DateTime.Now;
132+
var items222 = g.sqlite.Select<Topic>().Where(a => a.CreateTime > time).Limit(10).ToList();
127133

134+
update.SetSource(items.First()).NoneParameter().ExecuteAffrows();
135+
update.SetSource(items).NoneParameter().ExecuteAffrows();
128136
}
129137
[Fact]
130138
public void ExecuteUpdated()

FreeSql/Internal/CommonProvider/UpdateProvider.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ protected string WhereCaseSource(string CsName, Func<string, string> thenValue)
566566

567567
protected abstract void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys);
568568
protected abstract void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d);
569+
protected virtual void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) { }
569570

570571
public IUpdate<T1> AsTable(Func<string, string> tableRule)
571572
{
@@ -658,7 +659,11 @@ public string ToSql()
658659
if (isnull == false) isnull = value == null || value == DBNull.Value;
659660
}
660661
cwsb.Append(" END");
661-
if (isnull == false) sb.Append(cwsb.ToString());
662+
if (isnull == false)
663+
{
664+
ToSqlCaseWhenEnd(cwsb, col);
665+
sb.Append(cwsb.ToString());
666+
}
662667
else sb.Append("NULL");
663668
cwsb.Clear();
664669

Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,5 +136,14 @@ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, objec
136136
}
137137
sb.Append(")");
138138
}
139+
140+
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
141+
{
142+
if (_noneParameter == false) return;
143+
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
144+
if (dbtype == null) return;
145+
146+
sb.Append("::").Append(dbtype);
147+
}
139148
}
140149
}

0 commit comments

Comments
 (0)