From d94eb3a6d2686d5bf9009d1fb37e0533d6c28c52 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 7 Jan 2024 18:14:06 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/DbMaintenanceProvider/Methods.cs | 2 +- .../SugarProvider/SqlSugarProvider.cs | 18 +++++++++++-- .../SqlSugar/Utilities/CommonExtensions.cs | 25 +++++++++++++++++++ Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 19 ++++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 5e00816ff..96c9831ea 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -232,7 +232,7 @@ namespace SqlSugar string sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", this.SqlBuilder.GetNoTranslationColumnName(tableName), this.SqlBuilder.GetNoTranslationColumnName(columnName)), columnName); if ((tableName+columnName).Length>25 &&this.Context?.CurrentConnectionConfig?.MoreSettings?.MaxParameterNameLength > 0) { - sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", this.SqlBuilder.GetNoTranslationColumnName(tableName).Substring(0,20), "Id"), columnName); + sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", this.SqlBuilder.GetNoTranslationColumnName(tableName).SafeSubstring(0,20), "Id"), columnName); } this.Context.Ado.ExecuteCommand(sql); return true; diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index 574256337..39e1ed70b 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -631,7 +631,14 @@ namespace SqlSugar { var sqlObj = item.ToSql(); string sql = sqlObj.Key; - UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "UnionAll"); + if (this.CurrentConnectionConfig?.MoreSettings?.MaxParameterNameLength > 0) + { + UtilMethods.RepairReplicationParameters(this.Context,ref sql, sqlObj.Value.ToArray(), i, "UnionAll"); + } + else + { + UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "UnionAll"); + } if (sqlObj.Value.HasValue()) allItems.Add(new KeyValuePair>(sqlBuilder.GetUnionFomatSql(sql), sqlObj.Value)); else @@ -668,7 +675,14 @@ namespace SqlSugar item.QueryBuilder.DisableTop = true; var sqlObj = item.ToSql(); string sql = sqlObj.Key; - UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "Union"); + if (this.CurrentConnectionConfig?.MoreSettings?.MaxParameterNameLength > 0) + { + UtilMethods.RepairReplicationParameters(this.Context, ref sql, sqlObj.Value.ToArray(), i, "Union"); + } + else + { + UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "Union"); + } if (sqlObj.Value.HasValue()) allItems.Add(new KeyValuePair>(sqlBuilder.GetUnionFomatSql(sql), sqlObj.Value)); else diff --git a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs index ceb0602b9..bcc3793ba 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs @@ -11,6 +11,31 @@ namespace SqlSugar { public static class CommonExtensions { + public static string SafeSubstring(this string str, int startIndex, int length) + { + if (str == null) + { + throw new ArgumentNullException(nameof(str)); + } + + if (startIndex < 0) + { + startIndex = 0; + } + + if (startIndex >= str.Length) + { + return string.Empty; // 返回空字符串,因为起始索引超过字符串长度 + } + + if (length < 0) + { + length = 0; + } + + // 截取字符串时,确保不超过字符串的长度 + return str.Substring(startIndex, Math.Min(length, str.Length - startIndex)); + } public static Dictionary ToDictionary(this List list, string keyPropertyName, string valuePropertyName) { var keyProperty = typeof(T).GetProperty(keyPropertyName); diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 3a6c5e9c0..c9388f704 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -809,6 +809,25 @@ namespace SqlSugar } } } + internal static void RepairReplicationParameters(ISqlSugarClient db,ref string appendSql, SugarParameter[] parameters, int addIndex, string append = null) + { + if (appendSql.HasValue() && parameters.HasValue()) + { + foreach (var parameter in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + //Compatible with.NET CORE parameters case + var name = parameter.ParameterName; + string newName = name + append + addIndex; + var maxLength = db.CurrentConnectionConfig.MoreSettings.MaxParameterNameLength; + if (newName.Length > maxLength) + { + newName = name.SafeSubstring(0,20) + "_" + addIndex; + } + appendSql = ReplaceSqlParameter(appendSql, parameter, newName); + parameter.ParameterName = newName; + } + } + } internal static string GetPackTable(string sql, string shortName) {