Update MySqlConnector

This commit is contained in:
sunkaixuan
2022-12-04 05:12:04 +08:00
parent 57375c5b14
commit a37a945950
9 changed files with 262 additions and 29 deletions

View File

@@ -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();

View File

@@ -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()}\"}}')";
}
}
}
}

View File

@@ -17,7 +17,7 @@ namespace SqlSugar.MySqlConnector
public async Task<int> 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

View File

@@ -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();

View File

@@ -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;
}
}

View File

@@ -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();