-
Notifications
You must be signed in to change notification settings - Fork 863
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- 增加 IFreeSql.InsertOrUpdate 方法 #316
- Loading branch information
28810
authored and
28810
committed
May 20, 2020
1 parent
4b7a49d
commit 6a44362
Showing
57 changed files
with
4,627 additions
and
209 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
167 changes: 167 additions & 0 deletions
167
...ests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertOrUpdateTest.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,167 @@ | ||
using FreeSql.DataAnnotations; | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using Xunit; | ||
|
||
namespace FreeSql.Tests.MySqlConnector | ||
{ | ||
public class MySqlInsertOrUpdateTest | ||
{ | ||
|
||
IFreeSql fsql => g.mysql; | ||
|
||
[Fact] | ||
public void InsertOrUpdate_OnePrimary() | ||
{ | ||
fsql.Delete<tbiou02>().Where("1=1").ExecuteAffrows(); | ||
var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" }); | ||
var sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '01') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "011" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '011') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(2, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 2, name = "02" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(2, '02') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou02>().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(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(5, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou02>().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(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(8, iou.ExecuteAffrows()); | ||
var lst = fsql.Select<tbiou02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); | ||
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); | ||
} | ||
class tbiou02 | ||
{ | ||
public int id { get; set; } | ||
public string name { get; set; } | ||
} | ||
|
||
[Fact] | ||
public void InsertOrUpdate_TwoPrimary() | ||
{ | ||
fsql.Delete<tbiou03>().Where("1=1").ExecuteAffrows(); | ||
var iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" }); | ||
var sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou03`(`id1`, `id2`, `name`) VALUES(1, '01', '01') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou03`(`id1`, `id2`, `name`) VALUES(1, '01', '011') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(2, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou03`(`id1`, `id2`, `name`) VALUES(2, '02', '02') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou03>().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(@"INSERT INTO `tbiou03`(`id1`, `id2`, `name`) VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(5, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou03>().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(@"INSERT INTO `tbiou03`(`id1`, `id2`, `name`) VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004') | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`)", sql); | ||
Assert.Equal(8, iou.ExecuteAffrows()); | ||
var lst = fsql.Select<tbiou03>().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()); | ||
} | ||
class tbiou03 | ||
{ | ||
[Column(IsPrimary = true)] | ||
public int id1 { get; set; } | ||
[Column(IsPrimary = true)] | ||
public string id2 { get; set; } | ||
public string name { get; set; } | ||
} | ||
|
||
[Fact] | ||
public void InsertOrUpdate_OnePrimaryAndVersionAndCanUpdate() | ||
{ | ||
fsql.Delete<tbiou04>().Where("1=1").ExecuteAffrows(); | ||
var iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "01" }); | ||
var sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '01', 0, now(3)) | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`), | ||
`version` = `version` + 1", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "011" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou04`(`id`, `name`, `version`, `CreateTime`) VALUES(1, '011', 0, now(3)) | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`), | ||
`version` = `version` + 1", sql); | ||
Assert.Equal(2, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 2, name = "02" }); | ||
sql = iou.ToSql(); | ||
Assert.Equal(@"INSERT INTO `tbiou04`(`id`, `name`, `version`, `CreateTime`) VALUES(2, '02', 0, now(3)) | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`), | ||
`version` = `version` + 1", sql); | ||
Assert.Equal(1, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou04>().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(@"INSERT INTO `tbiou04`(`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)) | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`), | ||
`version` = `version` + 1", sql); | ||
Assert.Equal(6, iou.ExecuteAffrows()); | ||
|
||
iou = fsql.InsertOrUpdate<tbiou04>().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(@"INSERT INTO `tbiou04`(`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)) | ||
ON DUPLICATE KEY UPDATE | ||
`name` = VALUES(`name`), | ||
`version` = `version` + 1", sql); | ||
Assert.Equal(8, iou.ExecuteAffrows()); | ||
var lst = fsql.Select<tbiou04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList(); | ||
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count()); | ||
} | ||
class tbiou04 | ||
{ | ||
public int id { get; set; } | ||
public string name { get; set; } | ||
[Column(IsVersion = true)] | ||
public int version { get; set; } | ||
[Column(CanUpdate = false, ServerTime = DateTimeKind.Local)] | ||
public DateTime CreateTime { get; set; } | ||
} | ||
} | ||
} |
Oops, something went wrong.