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] 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"), "'"); }