From 71ea8cd018767d1f1d048e39647d17bd01290d5c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 11 Apr 2023 13:33:49 +0800 Subject: [PATCH] Update clickhose array type --- .../ClickHouse/ClickHouseProvider.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/ClickHouseProvider.cs b/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/ClickHouseProvider.cs index 331eac0d1..42005b052 100644 --- a/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/ClickHouseProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar.ClickHouseCore/ClickHouse/ClickHouseProvider.cs @@ -116,6 +116,7 @@ namespace SqlSugar.ClickHouse CheckConnection(); ClickHouseCommand sqlCommand =connection.CreateCommand(); var pars = ToIDbDataParameter(parameters); + var arrayPars = parameters?.Where(it =>it.IsArray)?.Where(it=>it.ParameterName!=null)?.Select(it=>it.ParameterName); foreach (var param in pars.OrderByDescending(it=>it.ParameterName.Length)) { var newName = param.ParameterName.TrimStart('@'); @@ -136,18 +137,22 @@ namespace SqlSugar.ClickHouse { dbtype = ClickHouseDbBind.MappingTypesConst.First(it => it.Value == CSharpDataType.@sbyte).Key; } - if (param.Value!=null&¶m.Value!=DBNull.Value&&dbtype.ObjToString() == System.Data.DbType.Boolean.ToString()) + if (param.Value != null && param.Value != DBNull.Value && dbtype.ObjToString() == System.Data.DbType.Boolean.ToString()) { - sql = sql.Replace(param.ParameterName, param.Value.ObjToBool()?"1":"0"); + sql = sql.Replace(param.ParameterName, param.Value.ObjToBool() ? "1" : "0"); } else if (dbtype.ObjToString() == System.Data.DbType.Boolean.ToString()) { sql = sql.Replace(param.ParameterName, "null"); } + else if (arrayPars != null&& arrayPars.Contains(param.ParameterName)) + { + sql= sql.Replace(param.ParameterName, "'" +this.Context.Utilities.SerializeObject(param.Value).ToSqlFilter() + "'"); + } else { sql = sql.Replace(param.ParameterName, "{" + newName + ":" + dbtype + "}"); - if (dbtype.ObjToString() == "DateTime"&¶m.Value==DBNull.Value) + if (dbtype.ObjToString() == "DateTime" && param.Value == DBNull.Value) { param.Value = Convert.ToDateTime("1900-01-01"); }