修复构建多常量参数语法异常问题

This commit is contained in:
Kenton 2025-04-17 17:08:57 +08:00
parent 686c3d249f
commit 501deb47cf
2 changed files with 46 additions and 28 deletions

File diff suppressed because one or more lines are too long

View File

@ -8,9 +8,9 @@ namespace SqlSugar.DB2
public partial class DB2QueryBuilder : QueryBuilder public partial class DB2QueryBuilder : QueryBuilder
{ {
/// <summary> /// <summary>
/// 静态常量标志 /// 静态常量正则表达式
/// </summary> /// </summary>
private string[] constanFlag = new string[] { "@const", "@constan" }; private const string constRegex = "@.*const.*";
#region Sql Template #region Sql Template
public override string PageTempalte public override string PageTempalte
@ -153,23 +153,28 @@ namespace SqlSugar.DB2
{ {
var selectParams = selectSql.Split(",").Select(p => var selectParams = selectSql.Split(",").Select(p =>
{ {
if (!constanFlag.Any(t => p.ToLower().Contains(t))) return p; if (!Regex.IsMatch(p, constRegex)) return p;
var parameter = this.Parameters.FirstOrDefault(t => p.Contains(t.ParameterName)); var parameterItems = this.Parameters.Where(t => p.Contains(t.ParameterName)).ToList();
if (parameter == null) return p; if (!parameterItems.Any()) return p;
var paramSql = p;
parameterItems.ForEach(parameter =>
{
var dbType = DB2DbBind.MappingDbTypesConst.FirstOrDefault(t => parameter.DbType == t.Value); var dbType = DB2DbBind.MappingDbTypesConst.FirstOrDefault(t => parameter.DbType == t.Value);
if (default(KeyValuePair<string, System.Data.DbType>).Equals(dbType)) return p; if (default(KeyValuePair<string, System.Data.DbType>).Equals(dbType)) return;
var parameterized = string.Empty; var parameterized = string.Empty;
if (dbType.Value == System.Data.DbType.String) if (dbType.Value == System.Data.DbType.String)
{ {
var size = string.IsNullOrEmpty(parameter.Value?.ToString()) ? 1 : System.Text.Encoding.Default.GetBytes(parameter.Value?.ToString()).Length;; var size = string.IsNullOrEmpty(parameter.Value?.ToString()) ? 1 : System.Text.Encoding.Default.GetBytes(parameter.Value?.ToString()).Length;
parameterized = $"{dbType.Key.ToUpper()}({size})"; parameterized = $"{dbType.Key.ToUpper()}({size})";
} }
else else
{ {
parameterized = $"{dbType.Key.ToUpper()}"; parameterized = $"{dbType.Key.ToUpper()}";
} }
return p.Replace(parameter.ParameterName, $" CAST({parameter.ParameterName} AS {parameterized}) "); paramSql = paramSql.Replace(parameter.ParameterName, $" CAST({parameter.ParameterName} AS {parameterized}) ");
});
return paramSql;
}); });
return string.Join(",", selectParams); return string.Join(",", selectParams);
} }