From 00e9864bed6169fcbff9f9c0df0cb254a6d0f4b6 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 23 May 2023 19:47:51 +0800 Subject: [PATCH] Synchronization code --- .../SqlSugar/Realization/Dm/DmProvider.cs | 94 +++++++++++-------- .../Realization/Oracle/OracleProvider.cs | 91 +++++++++++------- 2 files changed, 110 insertions(+), 75 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Dm/DmProvider.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Dm/DmProvider.cs index d0fee8eff..b2106e16a 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Dm/DmProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Dm/DmProvider.cs @@ -14,44 +14,44 @@ namespace SqlSugar public partial class DmProvider : AdoProvider { public DmProvider() { - this.FormatSql = sql => - { - sql = sql.Replace("+@", "+:"); - if (sql.HasValue() && sql.Contains("@")) - { - var exceptionalCaseInfo = Regex.Matches(sql, @"\'[^\=]*?\@.*?\'|[\.,\w]+\@[\.,\w]+ | [\.,\w]+\@[\.,\w]+|[\.,\w]+\@[\.,\w]+ |\d+\@\d|\@\@"); - if (exceptionalCaseInfo != null) - { - foreach (var item in exceptionalCaseInfo.Cast()) - { - if (item.Value != null && item.Value.IndexOf(",") == 1 && Regex.IsMatch(item.Value, @"^ \,\@\w+$")) - { - continue; - } - else if (item.Value != null && Regex.IsMatch(item.Value.Trim(), @"^\w+\,\@\w+\,$")) - { - continue; - } - else if (item.Value != null && item.Value.ObjToString().Contains("||") && Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\|\|@\w+\|\|")) - { - continue; - } - else if (item.Value != null && Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\(\@\w+\,")) - { - continue; - } - else if (item.Value != null && item.Value.Contains("=") && Regex.IsMatch(item.Value, @"\w+ \@\w+[ ]{0,1}\=[ ]{0,1}\'")) - { - continue; - } - sql = sql.Replace(item.Value, item.Value.Replace("@", UtilConstants.ReplaceKey)); - } - } - sql = sql.Replace("@", ":"); - sql = sql.Replace(UtilConstants.ReplaceKey, "@"); - } - return sql; - }; + //this.FormatSql = sql => + //{ + // sql = sql.Replace("+@", "+:"); + // if (sql.HasValue() && sql.Contains("@")) + // { + // var exceptionalCaseInfo = Regex.Matches(sql, @"\'[^\=]*?\@.*?\'|[\.,\w]+\@[\.,\w]+ | [\.,\w]+\@[\.,\w]+|[\.,\w]+\@[\.,\w]+ |\d+\@\d|\@\@"); + // if (exceptionalCaseInfo != null) + // { + // foreach (var item in exceptionalCaseInfo.Cast()) + // { + // if (item.Value != null && item.Value.IndexOf(",") == 1 && Regex.IsMatch(item.Value, @"^ \,\@\w+$")) + // { + // continue; + // } + // else if (item.Value != null && Regex.IsMatch(item.Value.Trim(), @"^\w+\,\@\w+\,$")) + // { + // continue; + // } + // else if (item.Value != null && item.Value.ObjToString().Contains("||") && Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\|\|@\w+\|\|")) + // { + // continue; + // } + // else if (item.Value != null && Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\(\@\w+\,")) + // { + // continue; + // } + // else if (item.Value != null && item.Value.Contains("=") && Regex.IsMatch(item.Value, @"\w+ \@\w+[ ]{0,1}\=[ ]{0,1}\'")) + // { + // continue; + // } + // sql = sql.Replace(item.Value, item.Value.Replace("@", UtilConstants.ReplaceKey)); + // } + // } + // sql = sql.Replace("@", ":"); + // sql = sql.Replace(UtilConstants.ReplaceKey, "@"); + // } + // return sql; + //}; } public override string SqlParameterKeyWord { @@ -150,7 +150,7 @@ namespace SqlSugar if (sqlParameter.DbType == System.Data.DbType.Guid) { sqlParameter.DbType = System.Data.DbType.String; - if(sqlParameter.Value != DBNull.Value) + if (sqlParameter.Value != DBNull.Value) sqlParameter.Value = sqlParameter.Value.ToString(); } if (parameter.Direction == 0) @@ -180,6 +180,7 @@ namespace SqlSugar private static string[] KeyWord =new string []{"@order", ":order", "@user", "@level", ":user", ":level",":type","@type"}; private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters) { + sql = ReplaceKeyWordWithAd(sql, parameters); if (parameters.HasValue() && parameters.Count(it => it.ParameterName.ToLower().IsIn(KeyWord))>0) { int i = 0; @@ -197,7 +198,22 @@ namespace SqlSugar return sql; } + private static string ReplaceKeyWordWithAd(string sql, SugarParameter[] parameters) + { + if (parameters != null && sql != null && sql.Contains("@")) + { + foreach (var item in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + if (item.ParameterName.StartsWith("@")) + { + item.ParameterName = ":" + item.ParameterName.TrimStart('@'); + } + sql = Regex.Replace(sql, "@" + item.ParameterName.TrimStart(':'), item.ParameterName, RegexOptions.IgnoreCase); + } + } + return sql; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/OracleProvider.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/OracleProvider.cs index ab101177b..697dc3adc 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/OracleProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Oracle/OracleProvider.cs @@ -13,42 +13,42 @@ namespace SqlSugar { public OracleProvider() { - this.FormatSql = sql => - { - sql = sql.Replace("+@", "+:"); - if (sql.HasValue()&&sql.Contains("@")) { - var exceptionalCaseInfo = Regex.Matches(sql, @"\'[^\=]*?\@.*?\'|[\.,\w]+\@[\.,\w]+ | [\.,\w]+\@[\.,\w]+|[\.,\w]+\@[\.,\w]+ |\d+\@\d|\@\@|\w{1,25}\.""\w{1,25}""\@\w{1,25}"); - if (exceptionalCaseInfo != null) { - foreach (var item in exceptionalCaseInfo.Cast()) - { - if (item.Value != null && item.Value.IndexOf(",") == 1&&Regex.IsMatch(item.Value, @"^ \,\@\w+$")) - { - continue; - } - else if (item.Value != null &&Regex.IsMatch(item.Value.Trim(), @"^\w+\,\@\w+\,$")) - { - continue; - } - else if (item.Value != null && item.Value.ObjToString().Contains("||") && Regex.IsMatch(item.Value.Replace(" ","").Trim(), @"\|\|@\w+\|\|")) - { - continue; - } - else if (item.Value != null&& Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\(\@\w+\,")) - { - continue; - } - else if (item.Value != null &&item.Value.Contains("=")&& Regex.IsMatch(item.Value, @"\w+ \@\w+[ ]{0,1}\=[ ]{0,1}\'")) - { - continue; - } - sql = sql.Replace(item.Value, item.Value.Replace("@", UtilConstants.ReplaceKey)); - } - } - sql = sql .Replace("@",":"); - sql = sql.Replace(UtilConstants.ReplaceKey, "@"); - } - return sql; - }; + //this.FormatSql = sql => + //{ + // sql = sql.Replace("+@", "+:"); + // if (sql.HasValue()&&sql.Contains("@")) { + // var exceptionalCaseInfo = Regex.Matches(sql, @"\'[^\=]*?\@.*?\'|[\.,\w]+\@[\.,\w]+ | [\.,\w]+\@[\.,\w]+|[\.,\w]+\@[\.,\w]+ |\d+\@\d|\@\@|\w{1,25}\.""\w{1,25}""\@\w{1,25}"); + // if (exceptionalCaseInfo != null) { + // foreach (var item in exceptionalCaseInfo.Cast()) + // { + // if (item.Value != null && item.Value.IndexOf(",") == 1&&Regex.IsMatch(item.Value, @"^ \,\@\w+$")) + // { + // continue; + // } + // else if (item.Value != null &&Regex.IsMatch(item.Value.Trim(), @"^\w+\,\@\w+\,$")) + // { + // continue; + // } + // else if (item.Value != null && item.Value.ObjToString().Contains("||") && Regex.IsMatch(item.Value.Replace(" ","").Trim(), @"\|\|@\w+\|\|")) + // { + // continue; + // } + // else if (item.Value != null&& Regex.IsMatch(item.Value.Replace(" ", "").Trim(), @"\(\@\w+\,")) + // { + // continue; + // } + // else if (item.Value != null &&item.Value.Contains("=")&& Regex.IsMatch(item.Value, @"\w+ \@\w+[ ]{0,1}\=[ ]{0,1}\'")) + // { + // continue; + // } + // sql = sql.Replace(item.Value, item.Value.Replace("@", UtilConstants.ReplaceKey)); + // } + // } + // sql = sql .Replace("@",":"); + // sql = sql.Replace(UtilConstants.ReplaceKey, "@"); + // } + // return sql; + //}; } public override string SqlParameterKeyWord { @@ -124,6 +124,7 @@ namespace SqlSugar private static string[] KeyWord = new string[] { "@order", ":order", "@user", "@level", ":user", ":level", ":type", "@type" }; private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters) { + sql = ReplaceKeyWordWithAd(sql, parameters); if (parameters.HasValue()) { foreach (var Parameter in parameters) @@ -146,6 +147,24 @@ namespace SqlSugar return sql; } + + private static string ReplaceKeyWordWithAd(string sql, SugarParameter[] parameters) + { + if (parameters != null && sql != null&&sql.Contains("@")) + { + foreach (var item in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + if (item.ParameterName.StartsWith("@")) + { + item.ParameterName = ":"+item.ParameterName.TrimStart('@'); + } + sql = Regex.Replace(sql,"@" + item.ParameterName.TrimStart(':'),item.ParameterName,RegexOptions.IgnoreCase); + } + } + + return sql; + } + public override Action ErrorEvent => it => { if (base.ErrorEvent != null)