/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/Curd/KingbaseESInsertOrUpdateTest.cs

https://github.com/2881099/FreeSql
C# | 205 lines | 184 code | 21 blank | 0 comment | 18 complexity | c61212b6bc97312367c4a7d0ad75bf26 MD5 | raw file
  1. using FreeSql.DataAnnotations;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Xunit;
  6. namespace FreeSql.Tests.Odbc.KingbaseES
  7. {
  8. public class KingbaseESInsertOrUpdateTest
  9. {
  10. IFreeSql fsql => g.kingbaseES;
  11. [Fact]
  12. public void InsertOrUpdate_OnlyPrimary()
  13. {
  14. fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
  15. var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
  16. var sql = iou.ToSql();
  17. Assert.Equal(@"INSERT INTO ""TBIOU01""(""ID"") VALUES(1)
  18. ON CONFLICT(""ID"") DO NOTHING", sql);
  19. Assert.Equal(1, iou.ExecuteAffrows());
  20. iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
  21. sql = iou.ToSql();
  22. Assert.Equal(@"INSERT INTO ""TBIOU01""(""ID"") VALUES(1)
  23. ON CONFLICT(""ID"") DO NOTHING", sql);
  24. Assert.Equal(0, iou.ExecuteAffrows());
  25. iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 2 });
  26. sql = iou.ToSql();
  27. Assert.Equal(@"INSERT INTO ""TBIOU01""(""ID"") VALUES(2)
  28. ON CONFLICT(""ID"") DO NOTHING", sql);
  29. Assert.Equal(1, iou.ExecuteAffrows());
  30. iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
  31. sql = iou.ToSql();
  32. Assert.Equal(@"INSERT INTO ""TBIOU01""(""ID"") VALUES(1), (2), (3), (4)
  33. ON CONFLICT(""ID"") DO NOTHING", sql);
  34. Assert.Equal(2, iou.ExecuteAffrows());
  35. iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
  36. sql = iou.ToSql();
  37. Assert.Equal(@"INSERT INTO ""TBIOU01""(""ID"") VALUES(1), (2), (3), (4)
  38. ON CONFLICT(""ID"") DO NOTHING", sql);
  39. Assert.Equal(0, iou.ExecuteAffrows());
  40. }
  41. class tbiou01
  42. {
  43. public int id { get; set; }
  44. }
  45. [Fact]
  46. public void InsertOrUpdate_OnePrimary()
  47. {
  48. fsql.Delete<tbiou02>().Where("1=1").ExecuteAffrows();
  49. var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
  50. var sql = iou.ToSql();
  51. Assert.Equal(@"INSERT INTO ""TBIOU02""(""ID"", ""NAME"") VALUES(1, '01')
  52. ON CONFLICT(""ID"") DO UPDATE SET
  53. ""NAME"" = EXCLUDED.""NAME""", sql);
  54. Assert.Equal(1, iou.ExecuteAffrows());
  55. iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "011" });
  56. sql = iou.ToSql();
  57. Assert.Equal(@"INSERT INTO ""TBIOU02""(""ID"", ""NAME"") VALUES(1, '011')
  58. ON CONFLICT(""ID"") DO UPDATE SET
  59. ""NAME"" = EXCLUDED.""NAME""", sql);
  60. Assert.Equal(1, iou.ExecuteAffrows());
  61. iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 2, name = "02" });
  62. sql = iou.ToSql();
  63. Assert.Equal(@"INSERT INTO ""TBIOU02""(""ID"", ""NAME"") VALUES(2, '02')
  64. ON CONFLICT(""ID"") DO UPDATE SET
  65. ""NAME"" = EXCLUDED.""NAME""", sql);
  66. Assert.Equal(1, iou.ExecuteAffrows());
  67. 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" } });
  68. sql = iou.ToSql();
  69. Assert.Equal(@"INSERT INTO ""TBIOU02""(""ID"", ""NAME"") VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')
  70. ON CONFLICT(""ID"") DO UPDATE SET
  71. ""NAME"" = EXCLUDED.""NAME""", sql);
  72. Assert.Equal(4, iou.ExecuteAffrows());
  73. 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" } });
  74. sql = iou.ToSql();
  75. Assert.Equal(@"INSERT INTO ""TBIOU02""(""ID"", ""NAME"") VALUES(1, '001'), (2, '002'), (3, '003'), (4, '004')
  76. ON CONFLICT(""ID"") DO UPDATE SET
  77. ""NAME"" = EXCLUDED.""NAME""", sql);
  78. Assert.Equal(4, iou.ExecuteAffrows());
  79. var lst = fsql.Select<tbiou02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
  80. Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
  81. }
  82. class tbiou02
  83. {
  84. public int id { get; set; }
  85. public string name { get; set; }
  86. }
  87. [Fact]
  88. public void InsertOrUpdate_TwoPrimary()
  89. {
  90. fsql.Delete<tbiou03>().Where("1=1").ExecuteAffrows();
  91. var iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" });
  92. var sql = iou.ToSql();
  93. Assert.Equal(@"INSERT INTO ""TBIOU03""(""ID1"", ""ID2"", ""NAME"") VALUES(1, '01', '01')
  94. ON CONFLICT(""ID1"", ""ID2"") DO UPDATE SET
  95. ""NAME"" = EXCLUDED.""NAME""", sql);
  96. Assert.Equal(1, iou.ExecuteAffrows());
  97. iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" });
  98. sql = iou.ToSql();
  99. Assert.Equal(@"INSERT INTO ""TBIOU03""(""ID1"", ""ID2"", ""NAME"") VALUES(1, '01', '011')
  100. ON CONFLICT(""ID1"", ""ID2"") DO UPDATE SET
  101. ""NAME"" = EXCLUDED.""NAME""", sql);
  102. Assert.Equal(1, iou.ExecuteAffrows());
  103. iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" });
  104. sql = iou.ToSql();
  105. Assert.Equal(@"INSERT INTO ""TBIOU03""(""ID1"", ""ID2"", ""NAME"") VALUES(2, '02', '02')
  106. ON CONFLICT(""ID1"", ""ID2"") DO UPDATE SET
  107. ""NAME"" = EXCLUDED.""NAME""", sql);
  108. Assert.Equal(1, iou.ExecuteAffrows());
  109. 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" } });
  110. sql = iou.ToSql();
  111. Assert.Equal(@"INSERT INTO ""TBIOU03""(""ID1"", ""ID2"", ""NAME"") VALUES(1, '01', '01'), (2, '02', '02'), (3, '03', '03'), (4, '04', '04')
  112. ON CONFLICT(""ID1"", ""ID2"") DO UPDATE SET
  113. ""NAME"" = EXCLUDED.""NAME""", sql);
  114. Assert.Equal(4, iou.ExecuteAffrows());
  115. 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" } });
  116. sql = iou.ToSql();
  117. Assert.Equal(@"INSERT INTO ""TBIOU03""(""ID1"", ""ID2"", ""NAME"") VALUES(1, '01', '001'), (2, '02', '002'), (3, '03', '003'), (4, '04', '004')
  118. ON CONFLICT(""ID1"", ""ID2"") DO UPDATE SET
  119. ""NAME"" = EXCLUDED.""NAME""", sql);
  120. Assert.Equal(4, iou.ExecuteAffrows());
  121. 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();
  122. Assert.Equal(4, lst.Where(a => a.name == "00" + a.id1).Count());
  123. }
  124. class tbiou03
  125. {
  126. [Column(IsPrimary = true)]
  127. public int id1 { get; set; }
  128. [Column(IsPrimary = true)]
  129. public string id2 { get; set; }
  130. public string name { get; set; }
  131. }
  132. [Fact]
  133. public void InsertOrUpdate_OnePrimaryAndVersionAndCanUpdate()
  134. {
  135. fsql.Delete<tbiou04>().Where("1=1").ExecuteAffrows();
  136. var iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "01" });
  137. var sql = iou.ToSql();
  138. Assert.Equal(@"INSERT INTO ""TBIOU04""(""ID"", ""NAME"", ""VERSION"", ""CREATETIME"") VALUES(1, '01', 0, current_timestamp)
  139. ON CONFLICT(""ID"") DO UPDATE SET
  140. ""NAME"" = EXCLUDED.""NAME"",
  141. ""VERSION"" = ""TBIOU04"".""VERSION"" + 1", sql);
  142. Assert.Equal(1, iou.ExecuteAffrows());
  143. iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "011" });
  144. sql = iou.ToSql();
  145. Assert.Equal(@"INSERT INTO ""TBIOU04""(""ID"", ""NAME"", ""VERSION"", ""CREATETIME"") VALUES(1, '011', 0, current_timestamp)
  146. ON CONFLICT(""ID"") DO UPDATE SET
  147. ""NAME"" = EXCLUDED.""NAME"",
  148. ""VERSION"" = ""TBIOU04"".""VERSION"" + 1", sql);
  149. Assert.Equal(1, iou.ExecuteAffrows());
  150. iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 2, name = "02" });
  151. sql = iou.ToSql();
  152. Assert.Equal(@"INSERT INTO ""TBIOU04""(""ID"", ""NAME"", ""VERSION"", ""CREATETIME"") VALUES(2, '02', 0, current_timestamp)
  153. ON CONFLICT(""ID"") DO UPDATE SET
  154. ""NAME"" = EXCLUDED.""NAME"",
  155. ""VERSION"" = ""TBIOU04"".""VERSION"" + 1", sql);
  156. Assert.Equal(1, iou.ExecuteAffrows());
  157. 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" } });
  158. sql = iou.ToSql();
  159. Assert.Equal(@"INSERT INTO ""TBIOU04""(""ID"", ""NAME"", ""VERSION"", ""CREATETIME"") VALUES(1, '01', 0, current_timestamp), (2, '02', 0, current_timestamp), (3, '03', 0, current_timestamp), (4, '04', 0, current_timestamp)
  160. ON CONFLICT(""ID"") DO UPDATE SET
  161. ""NAME"" = EXCLUDED.""NAME"",
  162. ""VERSION"" = ""TBIOU04"".""VERSION"" + 1", sql);
  163. Assert.Equal(4, iou.ExecuteAffrows());
  164. 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" } });
  165. sql = iou.ToSql();
  166. Assert.Equal(@"INSERT INTO ""TBIOU04""(""ID"", ""NAME"", ""VERSION"", ""CREATETIME"") VALUES(1, '001', 0, current_timestamp), (2, '002', 0, current_timestamp), (3, '003', 0, current_timestamp), (4, '004', 0, current_timestamp)
  167. ON CONFLICT(""ID"") DO UPDATE SET
  168. ""NAME"" = EXCLUDED.""NAME"",
  169. ""VERSION"" = ""TBIOU04"".""VERSION"" + 1", sql);
  170. Assert.Equal(4, iou.ExecuteAffrows());
  171. var lst = fsql.Select<tbiou04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
  172. Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
  173. }
  174. class tbiou04
  175. {
  176. public int id { get; set; }
  177. public string name { get; set; }
  178. [Column(IsVersion = true)]
  179. public int version { get; set; }
  180. [Column(CanUpdate = false, ServerTime = DateTimeKind.Local)]
  181. public DateTime CreateTime { get; set; }
  182. }
  183. }
  184. }