diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateTest.cs index 0bb8f628..a2ffc382 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/MySqlInsertOrUpdateTest.cs @@ -87,7 +87,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `tbiou022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04') ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)", sql); - Assert.Equal(4, iou.ExecuteAffrows()); + Assert.Equal(5, 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(); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/OnDuplicateKeyUpdateTest.cs index bc1dc8b1..29d689af 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/Curd/OnDuplicateKeyUpdateTest.cs @@ -59,10 +59,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -80,10 +77,7 @@ ON DUPLICATE KEY UPDATE }).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } @@ -106,10 +100,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -127,10 +118,7 @@ ON DUPLICATE KEY UPDATE }).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/MySqlAdo/MySqlAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/MySqlAdo/MySqlAdoTest.cs index d3acac24..ad924380 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/MySqlAdo/MySqlAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/MySql/MySqlAdo/MySqlAdoTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Data.Odbc; using Xunit; @@ -58,7 +58,7 @@ namespace FreeSql.Tests.Custom.MySql [Fact] public void QueryMultipline() { - Assert.Throws(() => g.mysql.Ado.Query("select * from song; select * from song; select * from song")); + g.mysql.Ado.Query("select * from song; select * from song; select * from song"); } class xxx diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/PostgreSQL/Curd/OnConflictDoUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/PostgreSQL/Curd/OnConflictDoUpdateTest.cs index c24a1f41..aa839142 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Custom/PostgreSQL/Curd/OnConflictDoUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Custom/PostgreSQL/Curd/OnConflictDoUpdateTest.cs @@ -59,10 +59,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -80,10 +77,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title); Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); } @@ -106,10 +100,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -127,10 +118,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time); Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs index e3fa639d..9b1989e1 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -58,10 +58,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -79,10 +76,7 @@ ON DUPLICATE KEY UPDATE }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } @@ -105,10 +99,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -126,10 +117,7 @@ ON DUPLICATE KEY UPDATE }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs index 9cbad1ed..9b38b074 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using FreeSql.Odbc.MySql; using System; using System.Collections.Generic; @@ -59,10 +59,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -80,10 +77,7 @@ ON DUPLICATE KEY UPDATE }).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } @@ -106,10 +100,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -127,10 +118,7 @@ ON DUPLICATE KEY UPDATE }).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time); Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +`time` = '2000-01-01 00:00:00.000'", odku2.ToSql()); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/OnConflictDoUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/OnConflictDoUpdateTest.cs index 9ce29662..4b504c4e 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/OnConflictDoUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/OnConflictDoUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using FreeSql.Odbc.PostgreSQL; using System; using System.Collections.Generic; @@ -59,10 +59,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -80,10 +77,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title); Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); } @@ -106,10 +100,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); @@ -127,10 +118,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time); Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql()); +""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql()); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs index 8edb9f1c..71b2de94 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs @@ -1,4 +1,4 @@ -using FreeSql.DataAnnotations; +using FreeSql.DataAnnotations; using System; using System.Collections.Generic; using System.Linq; @@ -58,10 +58,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END"); +`time` = '2000-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); @@ -79,10 +76,7 @@ ON DUPLICATE KEY UPDATE }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title); Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 200 THEN '2000-01-01 00:00:00.000' -WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END"); +`time` = '2000-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); } @@ -105,10 +99,7 @@ ON DUPLICATE KEY UPDATE Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END"); +`time` = '2000-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); @@ -126,10 +117,7 @@ ON DUPLICATE KEY UPDATE }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time); Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE -`time` = CASE `id` -WHEN 300 THEN '2000-01-01 00:00:00.000' -WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END"); +`time` = '2000-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/OnConflictDoUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/OnConflictDoUpdateTest.cs index 098d29b8..7aa4518a 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/OnConflictDoUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/OnConflictDoUpdateTest.cs @@ -120,12 +120,7 @@ ON CONFLICT(""name"") DO UPDATE SET ON CONFLICT(""name"") DO UPDATE SET ""name"" = EXCLUDED.""name"", ""desc"" = EXCLUDED.""desc"", -""modified_id"" = CASE EXCLUDED.""name"" -WHEN 'Name1' THEN 1 -WHEN 'Name2' THEN 1 -WHEN 'Name3' THEN 1 -WHEN 'Name4' THEN 1 -WHEN 'Name5' THEN 1 END::int4, +""modified_id"" = 1, ""modified_time"" = current_timestamp", sql); //sql = g.pgsql.Insert(data) @@ -178,10 +173,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp"); +""time"" = '2000-01-01 00:00:00.000000'"); odku2.ExecuteAffrows(); @@ -199,10 +191,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).IgnoreColumns(a => a.time).NoneParameter().OnConflictDoUpdate().IgnoreColumns(a => a.title); Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 200 THEN '2000-01-01 00:00:00.000000' -WHEN 201 THEN '2000-01-01 00:00:00.000000' -WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp"); +""time"" = '2000-01-01 00:00:00.000000'"); odku2.ExecuteAffrows(); } @@ -225,10 +214,7 @@ ON CONFLICT(""id"") DO UPDATE SET Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET ""title"" = EXCLUDED.""title"", -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp"); +""time"" = '2000-01-01 00:00:00.000000'"); odku2.ExecuteAffrows(); @@ -246,10 +232,7 @@ ON CONFLICT(""id"") DO UPDATE SET }).InsertColumns(a => a.title).NoneParameter().OnConflictDoUpdate().UpdateColumns(a => a.time); Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON CONFLICT(""id"") DO UPDATE SET -""time"" = CASE EXCLUDED.""id"" -WHEN 300 THEN '2000-01-01 00:00:00.000000' -WHEN 301 THEN '2000-01-01 00:00:00.000000' -WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp"); +""time"" = '2000-01-01 00:00:00.000000'"); odku2.ExecuteAffrows(); } diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 3ed7697e..431664d2 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -846,7 +846,9 @@ namespace FreeSql.Internal.CommonProvider var sb = new StringBuilder(); sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = "); - var nulls = 0; + string valsqlOld = null; + var valsqlOldStats = 1; //start 1 + var nullStats = 0; var cwsb = new StringBuilder().Append(cw); foreach (var d in _source) { @@ -854,11 +856,15 @@ namespace FreeSql.Internal.CommonProvider ToSqlWhen(cwsb, _tempPrimarys, d); cwsb.Append(" THEN "); var val = col.GetDbValue(d); - cwsb.Append(thenValue(_commonUtils.RewriteColumn(col, _commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val)))); - if (val == null || val == DBNull.Value) nulls++; + var valsql = thenValue(_commonUtils.RewriteColumn(col, _commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val))); + cwsb.Append(valsql); + if (valsqlOld == null) valsqlOld = valsql; + else if (valsqlOld == valsql) valsqlOldStats++; + if (val == null || val == DBNull.Value) nullStats++; } cwsb.Append(" END"); - if (nulls == _source.Count) sb.Append("NULL"); + if (nullStats == _source.Count) sb.Append("NULL"); + else if (valsqlOldStats == _source.Count) sb.Append(valsqlOld); else sb.Append(cwsb); cwsb.Clear();