From a37a9459502564ab2ab9de4bafc746e9b5cc93d7 Mon Sep 17 00:00:00 2001
From: sunkaixuan <610262374@qq.com>
Date: Sun, 4 Dec 2022 05:12:04 +0800
Subject: [PATCH] Update MySqlConnector
---
.../MySql/CodeFirst/MySqlCodeFirst.cs | 35 ++++++++-
.../MySql/DbMaintenance/MySqlDbMaintenance.cs | 48 ++++++++++--
.../MySql/SqlBuilder/MySqlBlukCopy.cs | 15 +++-
.../SqlBuilder/MySqlExpressionContext.cs | 78 ++++++++++++++++++-
.../MySql/SqlBuilder/MySqlFastBuilder.cs | 13 +++-
.../MySql/SqlBuilder/MySqlInsertBuilder.cs | 34 ++++++--
.../MySql/SqlBuilder/MySqlQueryBuilder.cs | 18 ++++-
.../MySql/SqlBuilder/MySqlUpdateBuilder.cs | 34 ++++++--
.../Tools/UtilExtensions.cs | 16 ++++
9 files changed, 262 insertions(+), 29 deletions(-)
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/CodeFirst/MySqlCodeFirst.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/CodeFirst/MySqlCodeFirst.cs
index bd45e64f9..74d702195 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/CodeFirst/MySqlCodeFirst.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/CodeFirst/MySqlCodeFirst.cs
@@ -25,6 +25,10 @@ namespace SqlSugar.MySqlConnector
DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item);
columns.Add(dbColumnInfo);
}
+ if (entityInfo.IsCreateTableFiledSort)
+ {
+ columns = columns.OrderBy(c => c.CreateTableFieldSort).ToList();
+ }
}
this.Context.DbMaintenance.CreateTable(tableName, columns,true);
}
@@ -42,7 +46,8 @@ namespace SqlSugar.MySqlConnector
DefaultValue = item.DefaultValue,
ColumnDescription = item.ColumnDescription,
Length = item.Length,
- DecimalDigits=item.DecimalDigits
+ DecimalDigits=item.DecimalDigits,
+ CreateTableFieldSort = item.CreateTableFieldSort
};
GetDbType(item, propertyType, result);
if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0)
@@ -76,5 +81,33 @@ namespace SqlSugar.MySqlConnector
{
return EntityColumnToDbColumn(entity,dbTableName,item);
}
+
+ protected override void GetDbType(EntityColumnInfo item, Type propertyType, DbColumnInfo result)
+ {
+ if (!string.IsNullOrEmpty(item.DataType))
+ {
+ result.DataType = item.DataType;
+ }
+ else if (propertyType.IsEnum())
+ {
+ result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length > 9 ? UtilConstants.LongType.Name : UtilConstants.IntType.Name);
+ }
+ else
+ {
+ var name = GetType(propertyType.Name);
+ if (name == "Boolean")
+ {
+ result.DataType = "tinyint";
+ result.Length = 1;
+ result.Scale = 0;
+ result.DecimalDigits = 0;
+ }
+ else
+ {
+ result.DataType = this.Context.Ado.DbBind.GetDbTypeName(name);
+ }
+ }
+ }
+
}
}
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs
index de473bc7b..cf09d222d 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/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
@@ -269,16 +276,35 @@ namespace SqlSugar.MySqlConnector
{
get
{
- return "SELECT count(*) FROM information_schema.statistics WHERE index_name = '{0}'";
+ return "SELECT count(*) FROM information_schema.statistics WHERE index_name = '{0}' and index_schema = '{1}'";
}
}
#endregion
#region Methods
+ public override bool IsAnyTable(string tableName, bool isCache = true)
+ {
+ try
+ {
+ return base.IsAnyTable(tableName, isCache);
+ }
+ catch (Exception ex)
+ {
+ if (SugarCompatible.IsFramework && ex.Message == "Invalid attempt to Read when reader is closed.")
+ {
+ Check.ExceptionEasy($"To upgrade the MySql.Data. Error:{ex.Message}", $" 请先升级MySql.Data 。 详细错误:{ex.Message}");
+ return true;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
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)
@@ -299,6 +325,12 @@ namespace SqlSugar.MySqlConnector
///
public override bool CreateDatabase(string databaseName, string databaseDirectory = null)
{
+
+ if (this.Context.Ado.IsValidConnection())
+ {
+ return true;
+ }
+
if (databaseDirectory != null)
{
if (!FileHelper.IsExistDirectory(databaseDirectory))
@@ -308,7 +340,9 @@ namespace SqlSugar.MySqlConnector
}
var oldDatabaseName = this.Context.Ado.Connection.Database;
var connection = this.Context.CurrentConnectionConfig.ConnectionString;
- Check.Exception(Regex.Split(connection,oldDatabaseName).Length > 2, "The user name and password cannot be the same as the database name ");
+ Check.ExceptionEasy(Regex.Split(connection,oldDatabaseName).Length > 2
+ , "The user name and password cannot be the same as the database name ",
+ " 创建数据库失败, 请换一个库名,库名不能 password 或者 username 有重叠 ");
connection = connection.Replace(oldDatabaseName, "mysql");
var newDb = new SqlSugarClient(new ConnectionConfig()
{
@@ -384,6 +418,10 @@ namespace SqlSugar.MySqlConnector
string primaryKey = null;
string identity = item.IsIdentity ? this.CreateTableIdentity : null;
string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName), dataType, dataSize, nullType, primaryKey, identity);
+ if (!string.IsNullOrEmpty(item.ColumnDescription))
+ {
+ addItem += " COMMENT '"+item.ColumnDescription.ToSqlFilter()+"' ";
+ }
columnArray.Add(addItem);
}
string tableString = string.Format(this.CreateTableSql, this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray));
@@ -461,9 +499,9 @@ namespace SqlSugar.MySqlConnector
this.Context.Ado.ExecuteCommand(sql);
return true;
}
- else if (defaultValue=="0"|| defaultValue == "1")
+ else if (defaultValue == "0" || defaultValue == "1")
{
- string sql = string.Format(AddDefaultValueSql.Replace("'",""), tableName, columnName, defaultValue);
+ string sql = string.Format(AddDefaultValueSql.Replace("'", ""), tableName, columnName, defaultValue);
this.Context.Ado.ExecuteCommand(sql);
return true;
}
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlBlukCopy.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlBlukCopy.cs
index f7a4219bf..f4df4ea43 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlBlukCopy.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlBlukCopy.cs
@@ -131,7 +131,7 @@ namespace SqlSugar.MySqlConnector
{
if (this.Chara == null)
{
- return "UTF8";
+ return "utf8mb4";
}
else
{
@@ -170,12 +170,23 @@ namespace SqlSugar.MySqlConnector
}
else if (colum.DataType == typeof(bool))
{
- sb.Append(row[colum].ObjToBool() ? 1 : 0);
+ if (row[colum] == DBNull.Value)
+ {
+ sb.Append("NULL");
+ }
+ else
+ {
+ sb.Append(row[colum].ObjToBool() ? 1 : 0);
+ }
}
else if (colum.DataType == UtilConstants.DateType&& row[colum] != null && row[colum] != DBNull.Value)
{
sb.Append(row[colum].ObjToDate().ToString("yyyy-MM-dd HH:mm:ss.fff"));
}
+ else if (row[colum] == null || row[colum] == DBNull.Value)
+ {
+ sb.Append("NULL");
+ }
else sb.Append(row[colum].ToString());
}
sb.AppendLine();
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlExpressionContext.cs
index 7427b1173..cd49ea64c 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlExpressionContext.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/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,12 +69,16 @@ 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];
var parameter2 = model.Args[1];
var parameter3 = model.Args[2];
+ if (parameter3.MemberValue.ObjToString() == DateType.Weekday.ObjToString())
+ {
+ parameter3.MemberValue = "Week";
+ }
return string.Format(" (TIMESTAMPDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberValue);
}
@@ -150,7 +157,14 @@ namespace SqlSugar.MySqlConnector
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
- return string.Format("IFNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
+ if (parameter1.MemberValue is bool)
+ {
+ return string.Format("IFNULL(CAST({0} as SIGNED),{1})", parameter.MemberName, parameter1.MemberName);
+ }
+ else
+ {
+ return string.Format("IFNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
+ }
}
public override string GetDate()
{
@@ -162,9 +176,69 @@ 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);
}
+
+ public override string JsonField(MethodCallExpressionModel model)
+ {
+ var parameter = model.Args[0];
+ var parameter1 = model.Args[1];
+ //var parameter2 = model.Args[2];
+ //var parameter3= model.Args[3];
+ var result = GetJson(parameter.MemberName, parameter1.MemberValue, model.Args.Count() == 2);
+ if (model.Args.Count > 2)
+ {
+ result = GetJson(result, model.Args[2].MemberValue, model.Args.Count() == 3);
+ }
+ if (model.Args.Count > 3)
+ {
+ result = GetJson(result, model.Args[3].MemberValue, model.Args.Count() == 4);
+ }
+ if (model.Args.Count > 4)
+ {
+ result = GetJson(result, model.Args[4].MemberValue, model.Args.Count() == 5);
+ }
+ if (model.Args.Count > 5)
+ {
+ result = GetJson(result, model.Args[5].MemberValue, model.Args.Count() == 6);
+ }
+ return result;
+ }
+
+ private string GetJson(object memberName1, object memberName2, bool isLast)
+ {
+ 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.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs
index 5d652ec7b..1698d78f5 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs
@@ -17,7 +17,7 @@ namespace SqlSugar.MySqlConnector
public async Task ExecuteBulkCopyAsync(DataTable dt)
{
- var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "failFiles");
+ var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bulkcopyfiles");
DirectoryInfo dir = new DirectoryInfo(dllPath);
if (!dir.Exists)
{
@@ -34,7 +34,7 @@ namespace SqlSugar.MySqlConnector
// IsolationLevel.Parse
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
{
- CharacterSet = "UTF8",
+ CharacterSet = "utf8mb4",
FieldTerminator = ",",
FieldQuotationCharacter = '"',
EscapeCharacter = '"',
@@ -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.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs
index c7bce8d2e..532f5e9e6 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs
@@ -44,12 +44,11 @@ namespace SqlSugar.MySqlConnector
var type = UtilMethods.GetUnderType(value.GetType());
if (type == UtilConstants.DateType)
{
- var date = value.ObjToDate();
- if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
- {
- date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
- }
- return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ return GetDateTimeString(value);
+ }
+ else if (value is DateTimeOffset)
+ {
+ return GetDateTimeOffsetString(value);
}
else if (type == UtilConstants.ByteArrayType)
{
@@ -74,7 +73,7 @@ namespace SqlSugar.MySqlConnector
else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
{
++i;
- var parameterName = this.Builder.SqlParameterKeyWord + name + i;
+ var parameterName = this.Builder.SqlParameterKeyWord + name +"_"+ i;
this.Parameters.Add(new SugarParameter(parameterName, value));
return parameterName;
}
@@ -84,6 +83,27 @@ namespace SqlSugar.MySqlConnector
}
}
}
+
+ private object GetDateTimeOffsetString(object value)
+ {
+ var date = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)value);
+ if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
+ {
+ date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
+ }
+ return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ }
+
+ private object GetDateTimeString(object value)
+ {
+ var date = value.ObjToDate();
+ if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
+ {
+ date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
+ }
+ return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ }
+
private string GetString(object value)
{
var result = value.ToString();
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlQueryBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlQueryBuilder.cs
index c69226ff6..fd474d4e6 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlQueryBuilder.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlQueryBuilder.cs
@@ -53,6 +53,10 @@ namespace SqlSugar.MySqlConnector
}
else if (Skip != null && Take != null)
{
+ if (Skip == 0 && Take == 1 && this.OrderByValue == "ORDER BY NOW() ")
+ {
+ this.OrderByValue = null;
+ }
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, Skip.ObjToInt() > 0 ? Skip.ObjToInt() : 0, Take);
}
@@ -62,6 +66,14 @@ namespace SqlSugar.MySqlConnector
}
this.OrderByValue = oldOrderValue;
result = GetSqlQuerySql(result);
+ if (result.IndexOf("-- No table") > 0)
+ {
+ return "-- No table";
+ }
+ if (TranLock != null)
+ {
+ result = result + TranLock;
+ }
return result;
}
private string ToCountSqlString()
@@ -103,7 +115,7 @@ namespace SqlSugar.MySqlConnector
}
public override string ToCountSql(string sql)
{
- if (this.GroupByValue.HasValue())
+ if (this.GroupByValue.HasValue()||this.IsDistinct)
{
return base.ToCountSql(sql);
}
@@ -136,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.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs
index f4cb51c15..2f6968a2b 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs
@@ -106,12 +106,11 @@ namespace SqlSugar.MySqlConnector
var type = UtilMethods.GetUnderType(value.GetType());
if (type == UtilConstants.DateType)
{
- var date = value.ObjToDate();
- if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
- {
- date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
- }
- return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ return GetDateTimeString(value);
+ }
+ else if (value is DateTimeOffset)
+ {
+ return GetDateTimeOffsetString(value);
}
else if (type == UtilConstants.ByteArrayType)
{
@@ -144,7 +143,7 @@ namespace SqlSugar.MySqlConnector
else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
{
++i;
- var parameterName = this.Builder.SqlParameterKeyWord + name + i;
+ var parameterName = this.Builder.SqlParameterKeyWord + name +"_"+ i;
this.Parameters.Add(new SugarParameter(parameterName, value));
return parameterName;
}
@@ -154,6 +153,27 @@ namespace SqlSugar.MySqlConnector
}
}
}
+
+ private object GetDateTimeString(object value)
+ {
+ var date = value.ObjToDate();
+ if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
+ {
+ date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
+ }
+ return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ }
+
+ private object GetDateTimeOffsetString(object value)
+ {
+ var date = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)value);
+ if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
+ {
+ date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
+ }
+ return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
+ }
+
private string GetString(object value)
{
var result = value.ToString();
diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilExtensions.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilExtensions.cs
index 645eccc9c..da20ffece 100644
--- a/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilExtensions.cs
+++ b/Src/Asp.Net/SqlSugar.MySqlConnector/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;