diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec index 00f6f0bf8..18f25e128 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec +++ b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec @@ -2,7 +2,7 @@ sqlSugar - 5.0.0.6 + 5.0.0.7 SqlSugar 5.0+ .Net Framework 4.5+ , SqlSugar 4.0+ .Net Framework 4.0+ sun kaixuan landa diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index 751c72ebe..2d969e7b4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -777,45 +777,39 @@ namespace SqlSugar result = GetData(typeof(T), dataReader); } List result2 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result2 = GetData(typeof(T2), dataReader); } List result3 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result3 = GetData(typeof(T3), dataReader); } List result4 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result4 = GetData(typeof(T4), dataReader); } List result5 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result5 = GetData(typeof(T5), dataReader); } List result6 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result6 = GetData(typeof(T6), dataReader); } List result7 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result7 = GetData(typeof(T7), dataReader); } builder.SqlQueryBuilder.Clear(); @@ -834,7 +828,6 @@ namespace SqlSugar return Tuple.Create, List, List, List, List, List, List>(result, result2, result3, result4, result5, result6, result7); } } - public virtual Task> SqlQueryAsync(string sql, object parameters = null) { var sugarParameters = this.GetParameters(parameters); @@ -898,45 +891,39 @@ namespace SqlSugar result =await GetDataAsync(typeof(T), dataReader); } List result2 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result2 = await GetDataAsync(typeof(T2), dataReader); } List result3 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result3 = await GetDataAsync(typeof(T3), dataReader); } List result4 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result4 = await GetDataAsync(typeof(T4), dataReader); } List result5 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result5 = await GetDataAsync(typeof(T5), dataReader); } List result6 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result6 = await GetDataAsync(typeof(T6), dataReader); } List result7 = null; - if (DbReader.HasRows) + if (NextResult(dataReader)) { this.Context.InitMappingInfo(); - NextResult(dataReader); result7 = await GetDataAsync(typeof(T7), dataReader); } builder.SqlQueryBuilder.Clear(); @@ -1165,17 +1152,29 @@ namespace SqlSugar #endregion #region Helper - private static void NextResult(IDataReader dataReader) + //private static void NextResult(IDataReader dataReader) + //{ + // try + // { + // NextResult(dataReader); + // } + // catch + // { + // // Check.Exception(true, ErrorMessage.GetThrowMessage("Please reduce the number of T. Save Queue Changes queries don't have so many results", "请减少T的数量,SaveQueueChanges 查询没有这么多结果")); + // } + //} + private static bool NextResult(IDataReader dataReader) { try { - dataReader.NextResult(); + return dataReader.NextResult(); } - catch + catch { - // Check.Exception(true, ErrorMessage.GetThrowMessage("Please reduce the number of T. Save Queue Changes queries don't have so many results", "请减少T的数量,SaveQueueChanges 查询没有这么多结果")); + return false; } } + private void ExecuteProcessingSQL(ref string sql, SugarParameter[] parameters) { var result = this.ProcessingEventStartingSQL(sql, parameters); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 796c95d4a..0b02847bd 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -73,6 +73,9 @@ namespace SqlSugar { var queryable = this.Context.Queryable().WithCacheIF(IsCache, CacheTime); CopyQueryBuilder(queryable.QueryBuilder); + ((QueryableProvider)queryable).MapperAction = this.MapperAction; + ((QueryableProvider)queryable).MapperActionWithCache = this.MapperActionWithCache; + ((QueryableProvider)queryable).Mappers = this.Mappers; return queryable; } public virtual ISugarQueryable AS(string tableName) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs index 3ef6a1855..a5319b992 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs @@ -31,6 +31,7 @@ namespace SqlSugar public bool IsNoUpdateDefaultValue { get; set; } public List PrimaryKeys { get; set; } public bool IsOffIdentity { get; set; } + public bool IsWhereColumns { get; set; } public virtual string SqlTemplate { @@ -253,6 +254,15 @@ namespace SqlSugar whereString += Builder.GetTranslationColumnName(item) + "=" + this.Context.Ado.SqlParameterKeyWord + item; } } + if (PrimaryKeys.HasValue()&&IsWhereColumns) + { + foreach (var item in PrimaryKeys) + { + var isFirst = whereString == null; + whereString += (isFirst ? " WHERE " : " AND "); + whereString += Builder.GetTranslationColumnName(item) + "=" + this.Context.Ado.SqlParameterKeyWord + item; + } + } return string.Format(SqlTemplate, GetTableNameString, columnsString, whereString); } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 61dbbe8a1..abe3438a3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -167,6 +167,7 @@ namespace SqlSugar public IUpdateable WhereColumns(Expression> columns) { this.IsWhereColumns = true; + UpdateBuilder.IsWhereColumns = true; Check.Exception(UpdateParameterIsNull == true, "Updateable().Updateable is error,Use Updateable(obj).WhereColumns"); var whereColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); if (this.WhereColumnList == null) this.WhereColumnList = new List(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/MethodCallExpressionModel.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/MethodCallExpressionModel.cs index ffe4a2e06..78f7ab76a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/MethodCallExpressionModel.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/MethodCallExpressionModel.cs @@ -8,8 +8,9 @@ namespace SqlSugar { public class MethodCallExpressionModel { - public List Args { get; set; } - public string Name { get; internal set; } + public List Args { get; set; } + public string Name { get; set; } + public dynamic Data { get; set; } } public class MethodCallExpressionArgs @@ -17,6 +18,6 @@ namespace SqlSugar public bool IsMember { get; set; } public object MemberName { get; set; } public object MemberValue { get; set; } - public Type Type { get; set; } + public Type Type { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index ea8c06048..56f7d8e7c 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -93,6 +93,44 @@ namespace SqlSugar } } + public virtual string ContainsArrayUseSqlParameters(MethodCallExpressionModel model) + { + var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue; + List inValues = new List(); + if (inValueIEnumerable != null) + { + foreach (var item in inValueIEnumerable) + { + if (item != null && item.GetType().IsEnum()) + { + inValues.Add(Convert.ToInt64(item)); + } + else + { + inValues.Add(item); + } + } + } + var value = model.Args[1].MemberName; + string inValueString = null; + if (inValues != null && inValues.Count > 0) + { + for (int i = 0; i < inValues.Count; i++) + { + inValueString += model.Data + "_" + i+","; + } + } + if (inValueString.IsNullOrEmpty()) + { + return " (1=2) "; + } + else + { + inValueString=inValueString.TrimEnd(','); + return string.Format(" ({0} IN ({1})) ", value, inValueString); + } + } + public virtual string Equals(MethodCallExpressionModel model) { var parameter = model.Args[0]; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 5f4845c6f..7d99494de 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -20,6 +20,7 @@ namespace SqlSugar string Trim(MethodCallExpressionModel model); string Contains(MethodCallExpressionModel model); string ContainsArray(MethodCallExpressionModel model); + string ContainsArrayUseSqlParameters(MethodCallExpressionModel model); string Equals(MethodCallExpressionModel model); string DateIsSameDay(MethodCallExpressionModel model); string DateIsSameByType(MethodCallExpressionModel model); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index a3aefd70b..650767050 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -37,9 +37,21 @@ namespace SqlSugar { return thisValue.Contains(parameterValue); } - public static bool ContainsArray(T[] thisValue, object parameterValue) + public static bool ContainsArray(T[] thisValue, object InField) { - return thisValue.Contains((T)parameterValue); + return thisValue.Contains((T)InField); + } + public static bool ContainsArray(List thisValue, object InField) + { + return thisValue.Contains((T)InField); + } + public static bool ContainsArrayUseSqlParameters(List thisValue, object InField) + { + return thisValue.Contains((T)InField); + } + public static bool ContainsArrayUseSqlParameters(T[] thisValue, object InField) + { + return thisValue.Contains((T)InField); } public static bool StartsWith(string thisValue, string parameterValue) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index b70be365f..907a58a25 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -1,5 +1,6 @@ using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; @@ -539,6 +540,30 @@ namespace SqlSugar var caResult = this.Context.DbMehtods.ContainsArray(model); this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString()); return caResult; + case "ContainsArrayUseSqlParameters": + if (model.Args[0].MemberValue == null) + { + var first = this.Context.Parameters.FirstOrDefault(it => it.ParameterName == model.Args[0].MemberName.ObjToString()); + if (first.HasValue()) + { + model.Args[0].MemberValue = first.Value; + } + } + model.Data =this.Context.SqlParameterKeyWord+"INP_"+this.Context.ParameterIndex; + this.Context.ParameterIndex++; + if (model.Args[0].MemberValue.HasValue()) + { + var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue; + int i = 0; + foreach (var item in inValueIEnumerable) + { + this.Context.Parameters.Add(new SugarParameter(model.Data+"_"+i,item)); + i++; + } + } + var caResult2 = this.Context.DbMehtods.ContainsArrayUseSqlParameters(model); + this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString()); + return caResult2; case "Equals": return this.Context.DbMehtods.Equals(model); case "DateIsSame": diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/DbMaintenance/PostgreSQLDbMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/DbMaintenance/PostgreSQLDbMaintenance.cs index d23a10772..83145e8ac 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/DbMaintenance/PostgreSQLDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/DbMaintenance/PostgreSQLDbMaintenance.cs @@ -356,7 +356,7 @@ namespace SqlSugar public override List GetColumnInfosByTableName(string tableName, bool isCache = true) { - return base.GetColumnInfosByTableName(tableName.ToLower(), isCache); + return base.GetColumnInfosByTableName(tableName.TrimEnd('"').TrimStart('"').ToLower(), isCache); } #endregion } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/Insertable/PostgreSQLInserttable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/Insertable/PostgreSQLInserttable.cs index 1a7a97348..06ddf6d04 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/Insertable/PostgreSQLInserttable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/PostgreSQL/Insertable/PostgreSQLInserttable.cs @@ -13,7 +13,7 @@ namespace SqlSugar { InsertBuilder.IsReturnIdentity = true; PreToSql(); - string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()); + string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetIdentityKeys().FirstOrDefault()); RestoreMapping(); var result = Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()).ObjToInt(); return result; @@ -22,7 +22,7 @@ namespace SqlSugar { InsertBuilder.IsReturnIdentity = true; PreToSql(); - string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()); + string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetIdentityKeys().FirstOrDefault()); RestoreMapping(); var obj = await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); var result = obj.ObjToInt(); @@ -38,7 +38,7 @@ namespace SqlSugar { InsertBuilder.IsReturnIdentity = true; PreToSql(); - string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()); + string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetIdentityKeys().FirstOrDefault()); RestoreMapping(); var result = Convert.ToInt64(Ado.GetScalar(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0"); return result; @@ -47,7 +47,7 @@ namespace SqlSugar { InsertBuilder.IsReturnIdentity = true; PreToSql(); - string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetPrimaryKeys().FirstOrDefault()); + string sql = InsertBuilder.ToSqlString().Replace("$PrimaryKey", GetIdentityKeys().FirstOrDefault()); RestoreMapping(); var result = Convert.ToInt64(await Ado.GetScalarAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()) ?? "0"); return result;