From c7a04e43cbb1160feeca887684ac885707cea96e Mon Sep 17 00:00:00 2001 From: skx <610262374@qq.com> Date: Wed, 14 Oct 2020 15:09:54 +0800 Subject: [PATCH] Update Core --- .../CodeFirstProvider/CodeFirstProvider.cs | 4 ++ .../IDataReaderEntityBuilder.cs | 17 +++++++ .../DbBindProvider/IDataRecordExtensions.cs | 8 ++++ .../EntityMaintenance/EntityMaintenance.cs | 1 + .../InsertableProvider/InsertableProvider.cs | 8 ++++ .../QueryableProvider/QueryableProvider.cs | 2 +- .../SqlBuilderProvider/SqlBuilderProvider.cs | 8 ++++ .../SugarProvider/SqlSugarProvider.cs | 45 ++++++++++--------- .../UpdateProvider/UpdateableProvider.cs | 20 ++++++++- .../SqlSugar/Entities/DbColumnInfo.cs | 1 + .../SqlSugar/Entities/EntityColumnInfo.cs | 1 + .../Entities/Mapping/SugarMappingAttribute.cs | 7 +++ .../ExpressionsToSql/Common/SugarParameter.cs | 1 + .../SqlSugar/Infrastructure/ContextMethods.cs | 15 ++++++- .../PostgreSQL/PostgreSQLProvider.cs | 39 ++++++++++++++++ .../SqlBuilder/PostgreSQLExpressionContext.cs | 5 +++ .../Sqlite/SqlBuilder/SqliteInsertBuilder.cs | 2 +- .../Sqlite/SqlBuilder/SqliteUpdateBuilder.cs | 2 +- 18 files changed, 159 insertions(+), 27 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 1ec62ee80..2f3273758 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -322,6 +322,10 @@ namespace SqlSugar properyTypeName = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name); } var dataType = dc.DataType; + if (properyTypeName == "boolean" && dataType == "bool") + { + return false; + } return properyTypeName != dataType; } #endregion diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 5016a5ef7..381a606c7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -64,6 +64,7 @@ namespace SqlSugar private static readonly MethodInfo getOtherNull = typeof(IDataRecordExtensions).GetMethod("GetOtherNull"); private static readonly MethodInfo getOther = typeof(IDataRecordExtensions).GetMethod("GetOther"); private static readonly MethodInfo getJson = typeof(IDataRecordExtensions).GetMethod("GetJson"); + private static readonly MethodInfo getArray = typeof(IDataRecordExtensions).GetMethod("GetArray"); private static readonly MethodInfo getEntity = typeof(IDataRecordExtensions).GetMethod("GetEntity", new Type[] { typeof(SqlSugarProvider) }); private delegate T Load(IDataRecord dataRecord); @@ -153,6 +154,22 @@ namespace SqlSugar generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true)); generator.MarkLabel(endIfLabel); } + if (columnInfo.IsArray) + { + MethodInfo arrayMehtod = getArray.MakeGenericMethod(columnInfo.PropertyInfo.PropertyType); + int i = DataRecord.GetOrdinal(fieldName); + Label endIfLabel = generator.DefineLabel(); + generator.Emit(OpCodes.Ldarg_0); + generator.Emit(OpCodes.Ldc_I4, i); + generator.Emit(OpCodes.Callvirt, isDBNullMethod); + generator.Emit(OpCodes.Brtrue, endIfLabel); + generator.Emit(OpCodes.Ldloc, result); + generator.Emit(OpCodes.Ldarg_0); + generator.Emit(OpCodes.Ldc_I4, i); + generator.Emit(OpCodes.Call, arrayMehtod); + generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true)); + generator.MarkLabel(endIfLabel); + } } private void BindField(ILGenerator generator, LocalBuilder result, EntityColumnInfo columnInfo, string fieldName) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs index 0c9277467..7130eee92 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs @@ -248,6 +248,14 @@ namespace SqlSugar var value = obj.ObjToString(); return new SerializeService().DeserializeObject(value); } + public static T GetArray(this IDataReader dr, int i) + { + //pgsql + var obj = dr.GetValue(i); + if (obj == null) + return default(T); + return (T)obj; + } public static Nullable GetConvertEnum_Null(this IDataReader dr, int i) where T : struct { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs index 21016b96f..a2c346430 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs @@ -194,6 +194,7 @@ namespace SqlSugar column.DefaultValue = sugarColumn.DefaultValue; column.IndexGroupNameList = sugarColumn.IndexGroupNameList; column.IsOnlyIgnoreUpdate = sugarColumn.IsOnlyIgnoreUpdate; + column.IsArray = sugarColumn.IsArray; } else { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index a79e807fb..8d5ec9e4c 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -343,6 +343,10 @@ namespace SqlSugar { paramters.IsJson = true; } + if (item.IsArray) + { + paramters.IsArray = true; + } this.InsertBuilder.Parameters.Add(paramters); } } @@ -407,6 +411,10 @@ namespace SqlSugar { columnInfo.IsJson = true; } + if (column.IsArray) + { + columnInfo.IsArray = true; + } if (columnInfo.PropertyType.IsEnum()) { columnInfo.Value = Convert.ToInt64(columnInfo.Value); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index dcb706e37..570837252 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1470,7 +1470,7 @@ namespace SqlSugar { new ConditionalModel() { - FieldName=whereCol.DbColumnName, + FieldName=this.SqlBuilder.GetTranslationColumnName(whereCol.DbColumnName), ConditionalType= ConditionalType.In, FieldValue=string.Join(",",inValues.Distinct()) } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs index a2d5d53b3..cc94db9c8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs @@ -131,6 +131,14 @@ namespace SqlSugar { parameterName = parameterName.Replace(".", "_"); } + if (parameterName.Contains("[")) + { + parameterName = parameterName.Replace("[", "_"); + } + if (parameterName.Contains("]")) + { + parameterName = parameterName.Replace("]", "_"); + } switch (item.ConditionalType) { case ConditionalType.Equal: diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index bb967c552..fe6d47324 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -15,7 +15,7 @@ namespace SqlSugar /// ** date:2017/1/2 /// ** email:610262374@qq.com /// - public partial class SqlSugarProvider: ISqlSugarClient + public partial class SqlSugarProvider : ISqlSugarClient { #region Constructor @@ -139,7 +139,7 @@ namespace SqlSugar this.CreateQueryJoin(joinExpression, types, queryable); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) + public virtual ISugarQueryable Queryable(Expression> joinExpression) { InitMappingInfo(); var types = new Type[] { typeof(T2), typeof(T3) }; @@ -155,7 +155,7 @@ namespace SqlSugar this.CreateQueryJoin(joinExpression, types, queryable); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) + public virtual ISugarQueryable Queryable(Expression> joinExpression) { InitMappingInfo(); var types = new Type[] { typeof(T2), typeof(T3), typeof(T4) }; @@ -171,7 +171,7 @@ namespace SqlSugar this.CreateQueryJoin(joinExpression, types, queryable); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) + public virtual ISugarQueryable Queryable(Expression> joinExpression) { InitMappingInfo(); var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) }; @@ -268,7 +268,7 @@ namespace SqlSugar this.CreateQueryJoin(joinExpression, types, queryable); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) + public virtual ISugarQueryable Queryable(Expression> joinExpression) { InitMappingInfo(); var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) }; @@ -535,7 +535,7 @@ namespace SqlSugar } public virtual IInsertable Insertable(List insertObjs) where T : class, new() { - if (insertObjs == null|| insertObjs.IsNullOrEmpty()) + if (insertObjs == null || insertObjs.IsNullOrEmpty()) { insertObjs = new List(); insertObjs.Add(default(T)); @@ -644,7 +644,7 @@ namespace SqlSugar result.UpdateParameterIsNull = true; return result; } - + public virtual IUpdateable Updateable(Dictionary columnDictionary) where T : class, new() { @@ -810,7 +810,7 @@ namespace SqlSugar public async Task SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.ExecuteCommandAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.ExecuteCommandAsync(sql, parameters); }); } public List SaveQueues(bool isTran = true) { @@ -818,7 +818,7 @@ namespace SqlSugar } public async Task> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List> SaveQueues(bool isTran = true) { @@ -826,7 +826,7 @@ namespace SqlSugar } public async Task, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List> SaveQueues(bool isTran = true) { @@ -834,7 +834,7 @@ namespace SqlSugar } public async Task, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List> SaveQueues(bool isTran = true) { @@ -842,7 +842,7 @@ namespace SqlSugar } public async Task, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List> SaveQueues(bool isTran = true) { @@ -850,7 +850,7 @@ namespace SqlSugar } public async Task, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List, List> SaveQueues(bool isTran = true) { @@ -858,7 +858,7 @@ namespace SqlSugar } public async Task, List, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } public Tuple, List, List, List, List, List, List> SaveQueues(bool isTran = true) { @@ -866,17 +866,17 @@ namespace SqlSugar } public async Task, List, List, List, List, List, List>> SaveQueuesAsync(bool isTran = true) { - return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); + return await SaveQueuesProviderAsync(isTran, (sql, parameters) => { return this.Ado.SqlQueryAsync(sql, parameters); }); } - public void AddQueue(string sql, object parsmeters=null) + public void AddQueue(string sql, object parsmeters = null) { if (Queues == null) { Queues = new QueueList(); } - this.Queues.Add(sql,this.Context.Ado.GetParameters(parsmeters)); + this.Queues.Add(sql, this.Context.Ado.GetParameters(parsmeters)); } - public void AddQueue(string sql, SugarParameter parsmeter) + public void AddQueue(string sql, SugarParameter parsmeter) { if (Queues == null) { @@ -892,7 +892,7 @@ namespace SqlSugar } this.Queues.Add(sql, parsmeters); } - public QueueList Queues { get { if (_Queues == null) { _Queues = new QueueList(); } return _Queues; } set { _Queues = value; } } + public QueueList Queues { get { if (_Queues == null) { _Queues = new QueueList(); } return _Queues; } set { _Queues = value; } } @@ -936,7 +936,7 @@ namespace SqlSugar } } this.Queues.Clear(); - var result =await func(sqlBuilder.ToString(), parsmeters); + var result = await func(sqlBuilder.ToString(), parsmeters); if (isTran) this.Ado.CommitTran(); return result; } @@ -950,7 +950,8 @@ namespace SqlSugar { try { - if (this.CurrentConnectionConfig.DbType == DbType.Oracle) { + if (this.CurrentConnectionConfig.DbType == DbType.Oracle) + { throw new Exception("Oracle no support SaveQueues"); } if (this.Queues == null || this.Queues.Count == 0) return default(T); @@ -984,7 +985,7 @@ namespace SqlSugar .TrimEnd('\n') .TrimEnd('\r') .TrimEnd('\n') - .TrimEnd(';')+";"; + .TrimEnd(';') + ";"; sqlBuilder.AppendLine(itemSql); index++; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 0e84fc242..fb2134a4b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -448,6 +448,10 @@ namespace SqlSugar { Check.Exception(true, ErrorMessage.GetThrowMessage("UpdateColumns no support IsJson", "SetColumns方式更新不支持IsJson,你可以使用db.Updateable(实体)的方式更新")); } + if (this.EntityInfo.Columns.Any(it => it.IsArray)) + { + Check.Exception(true, ErrorMessage.GetThrowMessage("UpdateColumns no support IsArray", "SetColumns方式更新不支持IsArray,你可以使用db.Updateable(实体)的方式更新")); + } } private void SetUpdateItemByDic(int i, T item, List updateItem) { @@ -488,8 +492,13 @@ namespace SqlSugar } if (column.IsJson) { + columnInfo.IsJson = true; columnInfo.Value = this.Context.Utilities.SerializeObject(columnInfo.Value); } + if (column.IsArray) + { + columnInfo.IsArray = true; + } var tranColumn = EntityInfo.Columns.FirstOrDefault(it => it.IsTranscoding && it.DbColumnName.Equals(column.DbColumnName, StringComparison.CurrentCultureIgnoreCase)); if (tranColumn != null && columnInfo.Value.HasValue()) { @@ -530,7 +539,16 @@ namespace SqlSugar { continue; } - this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value, item.PropertyType)); + var parameter = new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value, item.PropertyType); + if (item.IsJson) + { + parameter.IsJson = true; + } + if (item.IsArray) + { + parameter.IsArray = true; + } + this.UpdateBuilder.Parameters.Add(parameter); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DbColumnInfo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DbColumnInfo.cs index 4942d7aa3..d516bc66a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DbColumnInfo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/DbColumnInfo.cs @@ -21,6 +21,7 @@ namespace SqlSugar public object Value { get; set; } public int DecimalDigits { get; set; } public int Scale { get; set; } + public bool IsArray { get; set; } internal bool IsJson { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs index a69a248a7..fa9c45279 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/EntityColumnInfo.cs @@ -33,5 +33,6 @@ namespace SqlSugar public bool IsJson { get; set; } public bool NoSerialize { get; set; } public string[] IndexGroupNameList { get; set; } + public bool IsArray { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index c3bc580c7..994390132 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs @@ -171,6 +171,13 @@ namespace SqlSugar set { _IndexGroupNameList = value; } } + private bool _IsArray; + public bool IsArray + { + get { return _IsArray; } + set { _IsArray = value; } + } + } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs index a04918247..02068ecc3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs @@ -234,5 +234,6 @@ namespace SqlSugar public string TypeName { get; set; } public bool IsJson { get; set; } + public bool IsArray { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs index a8d7ea72a..3776de327 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs @@ -7,6 +7,7 @@ using System.Dynamic; using System.Linq; using System.Reflection; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace SqlSugar { @@ -277,7 +278,19 @@ namespace SqlSugar var typeName = tType.Name; if (item.PropertyType.IsClass()) { - result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval)); + if (readerValues != null && + readerValues.Count == 1 && + readerValues.First().Key == name && + readerValues.First().Value!=null&& + readerValues.First().Value.GetType()==UtilConstants.StringType&& + Regex.IsMatch(readerValues.First().Value.ObjToString(), @"^\{.+\}$")) + { + result.Add(name, DeserializeObject>(readerValues.First().Value.ObjToString())); + } + else + { + result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval)); + } } else { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/PostgreSQLProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/PostgreSQLProvider.cs index 3835762db..d97184328 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/PostgreSQLProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/PostgreSQLProvider.cs @@ -99,6 +99,19 @@ namespace SqlSugar { sqlParameter.NpgsqlDbType = NpgsqlDbType.Json; } + if (parameter.IsArray) + { + // sqlParameter.Value = this.Context.Utilities.SerializeObject(sqlParameter.Value); + var type = sqlParameter.Value.GetType(); + if (ArrayMapping.ContainsKey(type)) + { + sqlParameter.NpgsqlDbType = ArrayMapping[type] | NpgsqlDbType.Array; + } + else + { + Check.Exception(true, sqlParameter.Value.GetType().Name + " No Support"); + } + } if (sqlParameter.Direction == 0) { sqlParameter.Direction = ParameterDirection.Input; @@ -114,5 +127,31 @@ namespace SqlSugar } return result; } + + + static readonly Dictionary ArrayMapping = new Dictionary() + { + { typeof(int[]),NpgsqlDbType.Integer}, + { typeof(short[]),NpgsqlDbType.Smallint}, + { typeof(long[]),NpgsqlDbType.Bigint}, + { typeof(decimal[]),NpgsqlDbType.Numeric}, + { typeof(char[]),NpgsqlDbType.Text}, + { typeof(byte[]),NpgsqlDbType.Bytea}, + { typeof(bool[]),NpgsqlDbType.Boolean}, + {typeof(DateTime[]),NpgsqlDbType.Date}, + + + { typeof(int?[]),NpgsqlDbType.Integer}, + { typeof(short?[]),NpgsqlDbType.Smallint}, + { typeof(long?[]),NpgsqlDbType.Bigint}, + { typeof(decimal?[]),NpgsqlDbType.Numeric}, + { typeof(char?[]),NpgsqlDbType.Text}, + { typeof(byte?[]),NpgsqlDbType.Bytea}, + { typeof(bool?[]),NpgsqlDbType.Boolean}, + {typeof(DateTime?[]),NpgsqlDbType.Date}, + + + { typeof(string[]), NpgsqlDbType.Text}, + }; } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs index 82623421b..33dcf2afb 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLExpressionContext.cs @@ -253,5 +253,10 @@ namespace SqlSugar { return "RANDOM()"; } + + public override string EqualTrue(string fieldName) + { + return "( " + fieldName + "=true )"; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteInsertBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteInsertBuilder.cs index 98841db0f..2443772dc 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteInsertBuilder.cs @@ -101,7 +101,7 @@ namespace SqlSugar } else if (type == UtilConstants.ByteArrayType) { - string bytesString = "0x" + BitConverter.ToString((byte[])value); + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); return bytesString; } else if (type == UtilConstants.BoolType) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteUpdateBuilder.cs index 4f05306bc..c5e278d87 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteUpdateBuilder.cs @@ -56,7 +56,7 @@ namespace SqlSugar } else if (type == UtilConstants.ByteArrayType) { - string bytesString = "0x" + BitConverter.ToString((byte[])value); + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); return bytesString; } else if (type == UtilConstants.BoolType)