From 55c6c91658ce22050a6f8f5b0bd816cd1201a119 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 4 Dec 2022 05:18:45 +0800 Subject: [PATCH] Update MySqlConnector --- .../MySql/DbMaintenance/MySqlDbMaintenance.cs | 9 ++++- .../MySql/MySqlProvider.cs | 2 +- .../SqlBuilder/MySqlExpressionContext.cs | 34 ++++++++++++++++++- .../MySql/SqlBuilder/MySqlFastBuilder.cs | 9 +++-- .../MySql/SqlBuilder/MySqlQueryBuilder.cs | 4 +++ .../Tools/UtilExtensions.cs | 16 +++++++++ 6 files changed, 69 insertions(+), 5 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs index 10237f2a9..cf09d222d 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs @@ -153,6 +153,13 @@ namespace SqlSugar.MySqlConnector return "alter table {0} change column {1} {2}"; } } + protected override string IsAnyProcedureSql + { + get + { + return "select count(*) from information_schema.Routines where ROUTINE_NAME='{0}' and ROUTINE_TYPE='PROCEDURE'"; + } + } #endregion #region Check @@ -297,7 +304,7 @@ namespace SqlSugar.MySqlConnector public override bool IsAnyColumnRemark(string columnName, string tableName) { var isAny=this.Context.DbMaintenance.GetColumnInfosByTableName(tableName, false) - .Any(it => it.ColumnDescription.HasValue() && it.DbColumnName.ToLower()==columnName.ToLower()); + .Any(it => it.ColumnDescription.HasValue() && it.DbColumnName.EqualCase(columnName)); return isAny; } public override bool AddColumnRemark(string columnName, string tableName, string description) diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/MySqlProvider.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/MySqlProvider.cs index 8530527d3..5499cd0e7 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/MySqlProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/MySqlProvider.cs @@ -20,7 +20,7 @@ namespace SqlSugar.MySqlConnector try { var mySqlConnectionString = base.Context.CurrentConnectionConfig.ConnectionString; - if (!mySqlConnectionString.ToLower().Contains("charset")) + if (!mySqlConnectionString.ToLower().Contains("charset") && !mySqlConnectionString.ToLower().Contains("character")) { mySqlConnectionString = mySqlConnectionString.Trim().TrimEnd(';') + ";charset=utf8;"; } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs index f79fa01f5..cd49ea64c 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -1,5 +1,8 @@ using System; +using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; + namespace SqlSugar.MySqlConnector { public class MySqlExpressionContext : ExpressionContext, ILambdaExpressions @@ -66,7 +69,7 @@ namespace SqlSugar.MySqlConnector var parameter2 = model.Args[1]; return string.Format(" (TIMESTAMPDIFF(day,date({0}),date({1}))=0) ", parameter.MemberName, parameter2.MemberName); ; } - + public override string DateIsSameByType(MethodCallExpressionModel model) { var parameter = model.Args[0]; @@ -173,6 +176,12 @@ namespace SqlSugar.MySqlConnector return "rand()"; } + public override string Collate(MethodCallExpressionModel model) + { + var name = model.Args[0].MemberName; + return $" binary {name} "; + } + public override string CharIndex(MethodCallExpressionModel model) { return string.Format("instr ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName); @@ -208,5 +217,28 @@ namespace SqlSugar.MySqlConnector { return $"{memberName1}->\"$.{memberName2}\""; } + + public override string JsonArrayAny(MethodCallExpressionModel model) + { + if (SqlSugar.UtilMethods.IsNumber(model.Args[1].MemberValue.GetType().Name)) + { + return $"JSON_CONTAINS({model.Args[0].MemberName}, '{model.Args[1].MemberValue}')"; + } + else + { + return $"JSON_CONTAINS({model.Args[0].MemberName}, '\"{model.Args[1].MemberValue.ObjToStringNoTrim().ToSqlFilter()}\"')"; + } + } + public override string JsonListObjectAny(MethodCallExpressionModel model) + { + if (SqlSugar.UtilMethods.IsNumber(model.Args[2].MemberValue.GetType().Name)) + { + return $"JSON_CONTAINS({model.Args[0].MemberName},'{{\"{model.Args[1].MemberValue}\":{model.Args[2].MemberValue}}}')"; + } + else + { + return $"JSON_CONTAINS({model.Args[0].MemberName},'{{\"{model.Args[1].MemberValue}\":\"{model.Args[2].MemberValue.ObjToStringNoTrim().ToSqlFilter()}\"}}')"; + } + } } } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs index ddd0aa9c1..1698d78f5 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs @@ -62,9 +62,14 @@ namespace SqlSugar.MySqlConnector { Check.ExceptionEasy("connection string add : AllowLoadLocalInfile=true", "BulkCopy MySql连接字符串需要添加 AllowLoadLocalInfile=true; 添加后如果还不行Mysql数据库执行一下 SET GLOBAL local_infile=1 "); } - else + else if (ex.Message == "Loading local data is disabled; this must be enabled on both the client and server sides") { - throw ex; + this.Context.Ado.ExecuteCommand("SET GLOBAL local_infile=1"); + Check.ExceptionEasy(ex.Message, " 检测到你没有开启文件,已自动执行 SET GLOBAL local_infile=1 在试一次"); + } + else + { + throw; } } finally diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlQueryBuilder.cs index 86c9810ef..fd474d4e6 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlQueryBuilder.cs @@ -148,6 +148,10 @@ namespace SqlSugar.MySqlConnector { result = " DISTINCT " + result; } + if (this.SubToListParameters != null && this.SubToListParameters.Any()) + { + result = SubToListMethod(result); + } return result; } } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/Tools/UtilExtensions.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/Tools/UtilExtensions.cs index 645eccc9c..da20ffece 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/Tools/UtilExtensions.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/Tools/UtilExtensions.cs @@ -9,6 +9,22 @@ namespace SqlSugar.MySqlConnector /// public static class UtilExtensions { + public static bool EqualCase(this string thisValue, string equalValue) + { + if (thisValue != null && equalValue != null) + { + return thisValue.ToLower() == equalValue.ToLower(); + } + else + { + return thisValue == equalValue; + } + } + public static string ObjToStringNoTrim(this object thisValue) + { + if (thisValue != null) return thisValue.ToString(); + return ""; + } public static int ObjToInt(this object thisValue) { int reval = 0;