From 4cf47488d431f403ed4873cf783a4de445ecbc23 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 29 Mar 2022 20:17:13 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20MySql=20Set=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=A9=BA=E6=A0=BC=E5=A4=84=E7=90=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9B#1059?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Tests/MySql/MySqlCodeFirstTest.cs | 43 +++++++++++++++++++ .../MySqlAdo/MySqlAdo.cs | 2 +- .../MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs | 2 +- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs index 7134cc76..76e2ed88 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlCodeFirstTest.cs @@ -11,6 +11,49 @@ namespace FreeSql.Tests.MySql { public class MySqlCodeFirstTest { + public enum EnumTest009 + { + A, B, C + } + + [Flags] + public enum SetTest009 + { + A = 1, B = 2, C = 4 + } + + public class TestTable009 + { + [Column(IsPrimary = true, IsIdentity = true)] + public int Id { get; set; } + + public EnumTest009 ColEnumTest { get; set; } + + public SetTest009 ColSetTest { get; set; } + } + + [Fact] + public void TestEnumToSet009() + { + var fsql = g.mysql; + //插入 + //insert into TestTable(ColEnumTest,ColSetTest) values('B','A,B'); + //insert into TestTable(ColEnumTest,ColSetTest) values(1,3); + var sql1 = fsql.Insert().NoneParameter().AppendData(new TestTable009 + { + ColEnumTest = EnumTest009.B, + ColSetTest = SetTest009.A | SetTest009.B + }).ToSql(); + Assert.Equal("INSERT INTO `TestTable009`(`ColEnumTest`, `ColSetTest`) VALUES('B', 'A,B')", sql1); + + //查询 扩展方法 contains + //select * from TestTable t where FIND_IN_SET('A',t.ColSetTest)>0 + //select * from TestTable t where t.ColSetTest&1 + var sql2 = fsql.Select().Where(i => (i.ColSetTest & SetTest009.A) == SetTest009.A).ToSql(); + var sql3 = fsql.Select().Where(i => (i.ColSetTest & SetTest009.C) == SetTest009.C).ToSql(); + } + + [Fact] public void InsertUpdateParameter() { diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index bacef5e6..68fa8b2c 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -50,7 +50,7 @@ namespace FreeSql.MySql else if (param is char) return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace('\0', ' '), "'"); else if (param is Enum) - return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64(); + return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace(", ", ","), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; else if (param is DateTime || param is DateTime?) diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 33c32a63..3d017af9 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -46,7 +46,7 @@ namespace FreeSql.Odbc.MySql else if (param is char) return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace('\0', ' '), "'"); else if (param is Enum) - return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); //((Enum)val).ToInt64(); + return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\").Replace(", ", ","), "'"); //((Enum)val).ToInt64(); else if (decimal.TryParse(string.Concat(param), out var trydec)) return param; else if (param is DateTime || param is DateTime?)