From 86ff99503263ecc6664fd8b864fcdaaa463e86b0 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Thu, 11 Jun 2020 23:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=20MySql8.0=20CodeFirst=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnector/Curd/MySqlDeleteTest.cs | 18 ++--- .../MySqlConnector/Curd/MySqlInsertTest.cs | 41 +++++++++--- .../Curd/OnDuplicateKeyUpdateTest.cs | 66 +++++++++---------- .../MySql/Curd/MySqlDeleteTest.cs | 18 ++--- .../MySql/Curd/MySqlInsertTest.cs | 20 +++--- .../MySql/Curd/OnDuplicateKeyUpdateTest.cs | 2 +- .../MySql/Curd/MySqlDeleteTest.cs | 18 ++--- .../MySql/Curd/MySqlInsertTest.cs | 18 ++--- .../MySql/Curd/OnDuplicateKeyUpdateTest.cs | 2 +- .../FreeSql.Provider.MySql/MySqlCodeFirst.cs | 9 ++- .../MySql/OdbcMySqlCodeFirst.cs | 9 ++- 11 files changed, 129 insertions(+), 92 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlDeleteTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlDeleteTest.cs index 558613c3..1d711cc4 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlDeleteTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlDeleteTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.MySqlConnector IDelete delete => g.mysql.Delete(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_delete")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -26,16 +26,16 @@ namespace FreeSql.Tests.MySqlConnector { Assert.Null(g.mysql.Delete().ToSql()); var sql = g.mysql.Delete(new[] { 1, 2 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new Topic { Id = 1, Title = "test" }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new { id = 1 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new { Id1 = 1, Id2 = 10 }, new { Id1 = 2, Id2 = 20 } }).ToSql(); Assert.Equal("DELETE FROM `MultiPkTopic` WHERE (`Id1` = 1 AND `Id2` = 10 OR `Id1` = 2 AND `Id2` = 20)", sql); @@ -55,20 +55,20 @@ namespace FreeSql.Tests.MySqlConnector public void Where() { var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = delete.Where("id = @id", new { id = 1 }).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (id = @id)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (id = @id)", sql); var item = new Topic { Id = 1, Title = "newtitle" }; sql = delete.Where(item).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); var items = new List(); for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); sql = delete.Where(items).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); } [Fact] public void ExecuteAffrows() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertTest.cs index f80add2f..73b8e612 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlInsertTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.MySqlConnector IInsert insert => g.mysql.Insert(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_insert")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -36,16 +36,16 @@ namespace FreeSql.Tests.MySqlConnector for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items.First()).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(@Clicks_0, @Title_0, @CreateTime_0)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(@Clicks_0, @Title_0, @CreateTime_0)", sql); sql = insert.AppendData(items).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(@Clicks_0, @Title_0, @CreateTime_0), (@Clicks_1, @Title_1, @CreateTime_1), (@Clicks_2, @Title_2, @CreateTime_2), (@Clicks_3, @Title_3, @CreateTime_3), (@Clicks_4, @Title_4, @CreateTime_4), (@Clicks_5, @Title_5, @CreateTime_5), (@Clicks_6, @Title_6, @CreateTime_6), (@Clicks_7, @Title_7, @CreateTime_7), (@Clicks_8, @Title_8, @CreateTime_8), (@Clicks_9, @Title_9, @CreateTime_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(@Clicks_0, @Title_0, @CreateTime_0), (@Clicks_1, @Title_1, @CreateTime_1), (@Clicks_2, @Title_2, @CreateTime_2), (@Clicks_3, @Title_3, @CreateTime_3), (@Clicks_4, @Title_4, @CreateTime_4), (@Clicks_5, @Title_5, @CreateTime_5), (@Clicks_6, @Title_6, @CreateTime_6), (@Clicks_7, @Title_7, @CreateTime_7), (@Clicks_8, @Title_8, @CreateTime_8), (@Clicks_9, @Title_9, @CreateTime_9)", sql); sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql); sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); sql = g.mysql.Insert().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211, time = DateTime.Now }).ToSql(); Assert.Equal("INSERT INTO `TestEnumInsertTb`(`type`, `time`) VALUES(@type_0, @time_0)", sql); @@ -61,10 +61,10 @@ namespace FreeSql.Tests.MySqlConnector for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES(@Title_0), (@Title_1), (@Title_2), (@Title_3), (@Title_4), (@Title_5), (@Title_6), (@Title_7), (@Title_8), (@Title_9)", sql); sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); } [Fact] public void IgnoreColumns() @@ -73,10 +73,10 @@ namespace FreeSql.Tests.MySqlConnector for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(@Clicks_0, @Title_0), (@Clicks_1, @Title_1), (@Clicks_2, @Title_2), (@Clicks_3, @Title_3), (@Clicks_4, @Title_4), (@Clicks_5, @Title_5), (@Clicks_6, @Title_6), (@Clicks_7, @Title_7), (@Clicks_8, @Title_8), (@Clicks_9, @Title_9)", sql); sql = insert.AppendData(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(@Clicks_0), (@Clicks_1), (@Clicks_2), (@Clicks_3), (@Clicks_4), (@Clicks_5), (@Clicks_6), (@Clicks_7), (@Clicks_8), (@Clicks_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`) VALUES(@Clicks_0), (@Clicks_1), (@Clicks_2), (@Clicks_3), (@Clicks_4), (@Clicks_5), (@Clicks_6), (@Clicks_7), (@Clicks_8), (@Clicks_9)", sql); g.mysql.Delete().Where("1=1").ExecuteAffrows(); var itemsIgnore = new List(); @@ -128,6 +128,29 @@ namespace FreeSql.Tests.MySqlConnector //insert.AppendData(items.First()).ExecuteInserted(); } + [Fact] + public void MySqlIgnoreInto() + { + var items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now }); + + Assert.Equal(1, insert.MySqlIgnoreInto().AppendData(items.First()).ExecuteAffrows()); + Assert.Equal(10, insert.MySqlIgnoreInto().AppendData(items).ExecuteAffrows()); + + Assert.Equal(1, g.mysql.Insert().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteAffrows()); + Assert.Equal(1, g.mysql.Insert().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteAffrows()); + + items = new List(); + for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); + + Assert.NotEqual(0, insert.MySqlIgnoreInto().AppendData(items.First()).ExecuteIdentity()); + + var id = g.mysql.Insert().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).ExecuteIdentity(); + Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select().Where(a => a.id == id).First()?.type); + id = g.mysql.Insert().MySqlIgnoreInto().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211 }).NoneParameter().ExecuteIdentity(); + Assert.Equal(TestEnumInserTbType.sum211, g.mysql.Select().Where(a => a.id == id).First()?.type); + } + [Fact] public void AsTable() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs index 2145dedb..81ad6cab 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/OnDuplicateKeyUpdateTest.cs @@ -13,7 +13,7 @@ namespace FreeSql.Tests.MySqlConnector [Column(IsIdentity = true)] public int id { get; set; } public string title { get; set; } - public DateTime time { get; set; } + public DateTime? time { get; set; } } [Fact] @@ -21,10 +21,10 @@ namespace FreeSql.Tests.MySqlConnector { g.mysql.Delete(new[] { 100, 101, 102 }).ExecuteAffrows(); var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 100, title = "title-100", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = VALUES(`time`)", odku1.ToSql()); +`time` = VALUES(`time`)"); Assert.Equal(1, odku1.ExecuteAffrows()); var odku2 = g.mysql.Insert(new[] { @@ -32,10 +32,10 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 101, title = "title-101", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 102, title = "title-102", time = DateTime.Parse("2000-01-01") } }).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000'), (101, 'title-101', '2000-01-01 00:00:00.000'), (102, 'title-102', '2000-01-01 00:00:00.000') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(100, 'title-100', '2000-01-01 00:00:00.000'), (101, 'title-101', '2000-01-01 00:00:00.000'), (102, 'title-102', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = VALUES(`time`)", odku2.ToSql()); +`time` = VALUES(`time`)"); odku2.ExecuteAffrows(); } @@ -44,10 +44,10 @@ ON DUPLICATE KEY UPDATE { g.mysql.Delete(new[] { 200, 201, 202 }).ExecuteAffrows(); var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 200, title = "title-200", time = DateTime.Parse("2000-01-01") }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = '2000-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2000-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); var odku2 = g.mysql.Insert(new[] { @@ -55,21 +55,21 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 201, title = "title-201", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 202, title = "title-202", time = DateTime.Parse("2000-01-01") } }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), `time` = CASE `id` WHEN 200 THEN '2000-01-01 00:00:00.000' WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +WHEN 202 THEN '2000-01-01 00:00:00.000' END"); odku2.ExecuteAffrows(); g.mysql.Delete(new[] { 200, 201, 202 }).ExecuteAffrows(); odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 200, title = "title-200", time = DateTime.Parse("2000-01-01") }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200') ON DUPLICATE KEY UPDATE -`time` = '2000-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2000-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); odku2 = g.mysql.Insert(new[] { @@ -77,12 +77,12 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 201, title = "title-201", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 202, title = "title-202", time = DateTime.Parse("2000-01-01") } }).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202') ON DUPLICATE KEY UPDATE `time` = CASE `id` WHEN 200 THEN '2000-01-01 00:00:00.000' WHEN 201 THEN '2000-01-01 00:00:00.000' -WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +WHEN 202 THEN '2000-01-01 00:00:00.000' END"); odku2.ExecuteAffrows(); } @@ -91,10 +91,10 @@ WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); { g.mysql.Delete(new[] { 300, 301, 302 }).ExecuteAffrows(); var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 300, title = "title-300", time = DateTime.Parse("2000-01-01") }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), -`time` = '2000-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2000-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); var odku2 = g.mysql.Insert(new[] { @@ -102,21 +102,21 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 301, title = "title-301", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 302, title = "title-302", time = DateTime.Parse("2000-01-01") } }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate(); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `title` = VALUES(`title`), `time` = CASE `id` WHEN 300 THEN '2000-01-01 00:00:00.000' WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +WHEN 302 THEN '2000-01-01 00:00:00.000' END"); odku2.ExecuteAffrows(); g.mysql.Delete(new[] { 300, 301, 302 }).ExecuteAffrows(); odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 300, title = "title-300", time = DateTime.Parse("2000-01-01") }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300') ON DUPLICATE KEY UPDATE -`time` = '2000-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2000-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); odku2 = g.mysql.Insert(new[] { @@ -124,12 +124,12 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 301, title = "title-301", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 302, title = "title-302", time = DateTime.Parse("2000-01-01") } }).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302') ON DUPLICATE KEY UPDATE `time` = CASE `id` WHEN 300 THEN '2000-01-01 00:00:00.000' WHEN 301 THEN '2000-01-01 00:00:00.000' -WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); +WHEN 302 THEN '2000-01-01 00:00:00.000' END"); odku2.ExecuteAffrows(); } @@ -138,9 +138,9 @@ WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql()); { g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows(); var odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time, DateTime.Parse("2020-1-1")); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2020-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); var odku2 = g.mysql.Insert(new[] { @@ -148,18 +148,18 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") } }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time, DateTime.Parse("2020-1-1")); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000'", odku2.ToSql()); +`time` = '2020-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); var dt2020 = DateTime.Parse("2020-1-1"); g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows(); odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time == dt2020); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000'", odku1.ToSql()); +`time` = '2020-01-01 00:00:00.000'"); Assert.Equal(1, odku1.ExecuteAffrows()); odku2 = g.mysql.Insert(new[] { @@ -167,17 +167,17 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") } }).NoneParameter().OnDuplicateKeyUpdate().Set(a => a.time == dt2020); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000'", odku2.ToSql()); +`time` = '2020-01-01 00:00:00.000'"); odku2.ExecuteAffrows(); g.mysql.Delete(new[] { 400, 401, 402 }).ExecuteAffrows(); odku1 = g.mysql.Insert(new TestOnDuplicateKeyUpdateInfo { id = 400, title = "title-400", time = DateTime.Parse("2000-01-01") }).NoneParameter().OnDuplicateKeyUpdate().Set(a => new { time = dt2020, title = a.title + "123" }); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') + Assert.Equal(odku1.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')", odku1.ToSql()); +`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')"); Assert.Equal(1, odku1.ExecuteAffrows()); odku2 = g.mysql.Insert(new[] { @@ -185,9 +185,9 @@ ON DUPLICATE KEY UPDATE new TestOnDuplicateKeyUpdateInfo { id = 401, title = "title-401", time = DateTime.Parse("2000-01-01") }, new TestOnDuplicateKeyUpdateInfo { id = 402, title = "title-402", time = DateTime.Parse("2000-01-01") } }).NoneParameter().OnDuplicateKeyUpdate().Set(a => new { time = dt2020, title = a.title + "123" }); - Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') + Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`, `time`) VALUES(400, 'title-400', '2000-01-01 00:00:00.000'), (401, 'title-401', '2000-01-01 00:00:00.000'), (402, 'title-402', '2000-01-01 00:00:00.000') ON DUPLICATE KEY UPDATE -`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')", odku2.ToSql()); +`time` = '2020-01-01 00:00:00.000', `title` = concat(`title`, '123')"); odku2.ExecuteAffrows(); } diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlDeleteTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlDeleteTest.cs index 277df59a..cbc3303a 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlDeleteTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlDeleteTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.Odbc.MySql IDelete delete => g.mysql.Delete(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_delete")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -26,16 +26,16 @@ namespace FreeSql.Tests.Odbc.MySql { Assert.Null(g.mysql.Delete().ToSql()); var sql = g.mysql.Delete(new[] { 1, 2 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new Topic { Id = 1, Title = "test" }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new { id = 1 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new { Id1 = 1, Id2 = 10 }, new { Id1 = 2, Id2 = 20 } }).ToSql(); Assert.Equal("DELETE FROM `MultiPkTopic` WHERE (`Id1` = 1 AND `Id2` = 10 OR `Id1` = 2 AND `Id2` = 20)", sql); @@ -55,20 +55,20 @@ namespace FreeSql.Tests.Odbc.MySql public void Where() { var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = delete.Where("id = @id", new { id = 1 }).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (id = @id)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (id = @id)", sql); var item = new Topic { Id = 1, Title = "newtitle" }; sql = delete.Where(item).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); var items = new List(); for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); sql = delete.Where(items).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); } [Fact] public void ExecuteAffrows() diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertTest.cs index 9eeecd86..08cd06ad 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlInsertTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.Odbc.MySql IInsert insert => g.mysql.Insert(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_insert")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -36,16 +36,16 @@ namespace FreeSql.Tests.Odbc.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items.First()).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(0, 'newtitle0', '0001-01-01 00:00:00.000')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(0, 'newtitle0', '0001-01-01 00:00:00.000')", sql); sql = insert.AppendData(items).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(0, 'newtitle0', '0001-01-01 00:00:00.000'), (100, 'newtitle1', '0001-01-01 00:00:00.000'), (200, 'newtitle2', '0001-01-01 00:00:00.000'), (300, 'newtitle3', '0001-01-01 00:00:00.000'), (400, 'newtitle4', '0001-01-01 00:00:00.000'), (500, 'newtitle5', '0001-01-01 00:00:00.000'), (600, 'newtitle6', '0001-01-01 00:00:00.000'), (700, 'newtitle7', '0001-01-01 00:00:00.000'), (800, 'newtitle8', '0001-01-01 00:00:00.000'), (900, 'newtitle9', '0001-01-01 00:00:00.000')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(0, 'newtitle0', '0001-01-01 00:00:00.000'), (100, 'newtitle1', '0001-01-01 00:00:00.000'), (200, 'newtitle2', '0001-01-01 00:00:00.000'), (300, 'newtitle3', '0001-01-01 00:00:00.000'), (400, 'newtitle4', '0001-01-01 00:00:00.000'), (500, 'newtitle5', '0001-01-01 00:00:00.000'), (600, 'newtitle6', '0001-01-01 00:00:00.000'), (700, 'newtitle7', '0001-01-01 00:00:00.000'), (800, 'newtitle8', '0001-01-01 00:00:00.000'), (900, 'newtitle9', '0001-01-01 00:00:00.000')", sql); sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES('newtitle0'), ('newtitle1'), ('newtitle2'), ('newtitle3'), ('newtitle4'), ('newtitle5'), ('newtitle6'), ('newtitle7'), ('newtitle8'), ('newtitle9')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES('newtitle0'), ('newtitle1'), ('newtitle2'), ('newtitle3'), ('newtitle4'), ('newtitle5'), ('newtitle6'), ('newtitle7'), ('newtitle8'), ('newtitle9')", sql); sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); sql = g.mysql.Insert().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211, time = DateTime.Parse("2019-09-19 21:26:51.030") }).ToSql(); Assert.Equal("INSERT INTO `TestEnumInsertTb`(`type`, `time`) VALUES('sum211', '2019-09-19 21:26:51.030')", sql); @@ -61,10 +61,10 @@ namespace FreeSql.Tests.Odbc.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES('newtitle0'), ('newtitle1'), ('newtitle2'), ('newtitle3'), ('newtitle4'), ('newtitle5'), ('newtitle6'), ('newtitle7'), ('newtitle8'), ('newtitle9')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES('newtitle0'), ('newtitle1'), ('newtitle2'), ('newtitle3'), ('newtitle4'), ('newtitle5'), ('newtitle6'), ('newtitle7'), ('newtitle8'), ('newtitle9')", sql); sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); } [Fact] public void IgnoreColumns() @@ -73,10 +73,10 @@ namespace FreeSql.Tests.Odbc.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(0, 'newtitle0'), (100, 'newtitle1'), (200, 'newtitle2'), (300, 'newtitle3'), (400, 'newtitle4'), (500, 'newtitle5'), (600, 'newtitle6'), (700, 'newtitle7'), (800, 'newtitle8'), (900, 'newtitle9')", sql); sql = insert.AppendData(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(0), (100), (200), (300), (400), (500), (600), (700), (800), (900)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`) VALUES(0), (100), (200), (300), (400), (500), (600), (700), (800), (900)", sql); g.mysql.Delete().Where("1=1").ExecuteAffrows(); var itemsIgnore = new List(); @@ -85,7 +85,7 @@ namespace FreeSql.Tests.Odbc.MySql Assert.Equal(2072, itemsIgnore.Count); Assert.Equal(2072, g.mysql.Select().Where(a => a.Title == null).Count()); } - [Table(Name = "tb_topicIgnoreColumns")] + [Table(Name = "tb_topic_insertIgnoreColumns")] class TopicIgnore { [Column(IsIdentity = true, IsPrimary = true)] diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs index 1bf715b6..9cbad1ed 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/OnDuplicateKeyUpdateTest.cs @@ -14,7 +14,7 @@ namespace FreeSql.Tests.Odbc.MySql [Column(IsIdentity = true)] public int id { get; set; } public string title { get; set; } - public DateTime time { get; set; } + public DateTime? time { get; set; } } [Fact] diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlDeleteTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlDeleteTest.cs index de9c83a8..3fcb503f 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlDeleteTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlDeleteTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.MySql IDelete delete => g.mysql.Delete(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_delete")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -27,16 +27,16 @@ namespace FreeSql.Tests.MySql { Assert.Null(g.mysql.Delete().ToSql()); var sql = g.mysql.Delete(new[] { 1, 2 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new Topic { Id = 1, Title = "test" }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1 OR `Id` = 2)", sql); sql = g.mysql.Delete(new { id = 1 }).ToSql(); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = g.mysql.Delete(new[] { new { Id1 = 1, Id2 = 10 }, new { Id1 = 2, Id2 = 20 } }).ToSql(); Assert.Equal("DELETE FROM `MultiPkTopic` WHERE (`Id1` = 1 AND `Id2` = 10 OR `Id1` = 2 AND `Id2` = 20)", sql); @@ -56,20 +56,20 @@ namespace FreeSql.Tests.MySql public void Where() { var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); sql = delete.Where("id = @id", new { id = 1 }).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (id = @id)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (id = @id)", sql); var item = new Topic { Id = 1, Title = "newtitle" }; sql = delete.Where(item).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` = 1)", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` = 1)", sql); var items = new List(); for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); sql = delete.Where(items).ToSql().Replace("\r\n", ""); - Assert.Equal("DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); + Assert.Equal("DELETE FROM `tb_topic_delete` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10))", sql); } [Fact] public void ExecuteAffrows() diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertTest.cs index 4e1c40ae..3f4ee371 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlInsertTest.cs @@ -11,7 +11,7 @@ namespace FreeSql.Tests.MySql IInsert insert => g.mysql.Insert(); //�������� - [Table(Name = "tb_topic")] + [Table(Name = "tb_topic_insert")] class Topic { [Column(IsIdentity = true, IsPrimary = true)] @@ -37,16 +37,16 @@ namespace FreeSql.Tests.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items.First()).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(?Clicks_0, ?Title_0, ?CreateTime_0)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(?Clicks_0, ?Title_0, ?CreateTime_0)", sql); sql = insert.AppendData(items).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`, `CreateTime`) VALUES(?Clicks_0, ?Title_0, ?CreateTime_0), (?Clicks_1, ?Title_1, ?CreateTime_1), (?Clicks_2, ?Title_2, ?CreateTime_2), (?Clicks_3, ?Title_3, ?CreateTime_3), (?Clicks_4, ?Title_4, ?CreateTime_4), (?Clicks_5, ?Title_5, ?CreateTime_5), (?Clicks_6, ?Title_6, ?CreateTime_6), (?Clicks_7, ?Title_7, ?CreateTime_7), (?Clicks_8, ?Title_8, ?CreateTime_8), (?Clicks_9, ?Title_9, ?CreateTime_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`, `CreateTime`) VALUES(?Clicks_0, ?Title_0, ?CreateTime_0), (?Clicks_1, ?Title_1, ?CreateTime_1), (?Clicks_2, ?Title_2, ?CreateTime_2), (?Clicks_3, ?Title_3, ?CreateTime_3), (?Clicks_4, ?Title_4, ?CreateTime_4), (?Clicks_5, ?Title_5, ?CreateTime_5), (?Clicks_6, ?Title_6, ?CreateTime_6), (?Clicks_7, ?Title_7, ?CreateTime_7), (?Clicks_8, ?Title_8, ?CreateTime_8), (?Clicks_9, ?Title_9, ?CreateTime_9)", sql); sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql); sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); sql = g.mysql.Insert().AppendData(new TestEnumInsertTb { type = TestEnumInserTbType.sum211, time = DateTime.Now }).ToSql(); Assert.Equal("INSERT INTO `TestEnumInsertTb`(`type`, `time`) VALUES(?type_0, ?time_0)", sql); @@ -62,10 +62,10 @@ namespace FreeSql.Tests.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Title`) VALUES(?Title_0), (?Title_1), (?Title_2), (?Title_3), (?Title_4), (?Title_5), (?Title_6), (?Title_7), (?Title_8), (?Title_9)", sql); sql = insert.AppendData(items).InsertColumns(a => new { a.Title, a.Clicks }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); } [Fact] public void IgnoreColumns() @@ -74,10 +74,10 @@ namespace FreeSql.Tests.MySql for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); var sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`, `Title`) VALUES(?Clicks_0, ?Title_0), (?Clicks_1, ?Title_1), (?Clicks_2, ?Title_2), (?Clicks_3, ?Title_3), (?Clicks_4, ?Title_4), (?Clicks_5, ?Title_5), (?Clicks_6, ?Title_6), (?Clicks_7, ?Title_7), (?Clicks_8, ?Title_8), (?Clicks_9, ?Title_9)", sql); sql = insert.AppendData(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ToSql(); - Assert.Equal("INSERT INTO `tb_topic`(`Clicks`) VALUES(?Clicks_0), (?Clicks_1), (?Clicks_2), (?Clicks_3), (?Clicks_4), (?Clicks_5), (?Clicks_6), (?Clicks_7), (?Clicks_8), (?Clicks_9)", sql); + Assert.Equal("INSERT INTO `tb_topic_insert`(`Clicks`) VALUES(?Clicks_0), (?Clicks_1), (?Clicks_2), (?Clicks_3), (?Clicks_4), (?Clicks_5), (?Clicks_6), (?Clicks_7), (?Clicks_8), (?Clicks_9)", sql); g.mysql.Delete().Where("1=1").ExecuteAffrows(); var itemsIgnore = new List(); diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs index 00ec83ad..8edb9f1c 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/OnDuplicateKeyUpdateTest.cs @@ -13,7 +13,7 @@ namespace FreeSql.Tests.MySql [Column(IsIdentity = true)] public int id { get; set; } public string title { get; set; } - public DateTime time { get; set; } + public DateTime? time { get; set; } } [Fact] diff --git a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs index 76ba3291..673a6220 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlCodeFirst.cs @@ -227,8 +227,15 @@ where a.table_schema in ({0}) and a.table_name in ({1})", tboldname ?? tbname); { var isCommentChanged = tbstructcol.comment != (tbcol.Comment ?? ""); var isDbTypeChanged = tbcol.Attribute.DbType.StartsWith(tbstructcol.sqlType, StringComparison.CurrentCultureIgnoreCase) == false; - if (tbstructcol.sqlType == "datetime(0)" && Regex.IsMatch(tbcol.Attribute.DbType, @"datetime\s+\(", RegexOptions.IgnoreCase) == false) + if (tbstructcol.sqlType == "datetime(0)" && Regex.IsMatch(tbcol.Attribute.DbType, @"datetime\s*\(", RegexOptions.IgnoreCase) == false) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase) == false || + (int.TryParse(Regex.Match(tbcol.Attribute.DbType, @"datetime\s*\((\d*)", RegexOptions.IgnoreCase).Groups[1].Value, out var trydtrd) ? trydtrd : 3) != + (int.TryParse(Regex.Match(tbstructcol.sqlType, @"datetime\s*\((\d*)", RegexOptions.IgnoreCase).Groups[1].Value, out var trydtrd2) ? trydtrd2 : 3); + else if (tbstructcol.sqlType.StartsWith("int", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("int", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("tinyint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("tinyint", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("smallint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("smallint", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("bigint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("bigint", StringComparison.CurrentCultureIgnoreCase) == false; if ((tbcol.Attribute.DbType.IndexOf(" unsigned", StringComparison.CurrentCultureIgnoreCase) != -1) != tbstructcol.is_unsigned || isDbTypeChanged || diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs index 7b976b31..8bc6b09a 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlCodeFirst.cs @@ -220,8 +220,15 @@ where a.table_schema in ({0}) and a.table_name in ({1})", tboldname ?? tbname); { var isCommentChanged = tbstructcol.comment != (tbcol.Comment ?? ""); var isDbTypeChanged = tbcol.Attribute.DbType.StartsWith(tbstructcol.sqlType, StringComparison.CurrentCultureIgnoreCase) == false; - if (tbstructcol.sqlType == "datetime(0)" && Regex.IsMatch(tbcol.Attribute.DbType, @"datetime\s+\(", RegexOptions.IgnoreCase) == false) + if (tbstructcol.sqlType == "datetime(0)" && Regex.IsMatch(tbcol.Attribute.DbType, @"datetime\s*\(", RegexOptions.IgnoreCase) == false) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("datetime", StringComparison.CurrentCultureIgnoreCase) == false || + (int.TryParse(Regex.Match(tbcol.Attribute.DbType, @"datetime\s*\((\d*)", RegexOptions.IgnoreCase).Groups[1].Value, out var trydtrd) ? trydtrd : 3) != + (int.TryParse(Regex.Match(tbstructcol.sqlType, @"datetime\s*\((\d*)", RegexOptions.IgnoreCase).Groups[1].Value, out var trydtrd2) ? trydtrd2 : 3); + else if (tbstructcol.sqlType.StartsWith("int", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("int", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("tinyint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("tinyint", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("smallint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("smallint", StringComparison.CurrentCultureIgnoreCase) == false; + else if (tbstructcol.sqlType.StartsWith("bigint", StringComparison.CurrentCultureIgnoreCase)) isDbTypeChanged = tbcol.Attribute.DbType.StartsWith("bigint", StringComparison.CurrentCultureIgnoreCase) == false; if ((tbcol.Attribute.DbType.IndexOf(" unsigned", StringComparison.CurrentCultureIgnoreCase) != -1) != tbstructcol.is_unsigned || isDbTypeChanged ||