From 7f07b2d42fa1cad1c4556bae468db121a7285b87 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 23 Jun 2025 14:59:47 +0800 Subject: [PATCH] Synchronous code --- .../CodeFirstProvider/CodeFirstProvider.cs | 4 ++ .../FastestProvider/FastestProvider.cs | 18 ++++++-- .../QueryableExecuteSqlAsync.cs | 42 +++++++++---------- .../SqlBuilderProvider_Condition.cs | 6 ++- Src/Asp.Net/SqlSugar/Entities/ConfigQuery.cs | 6 +-- .../SqlSugar/Entities/ConnMoreSettings.cs | 1 + .../ExpressionsToSql/Subquery/Items/SubAvg.cs | 21 +++++++++- Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 3 +- 8 files changed, 71 insertions(+), 30 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 89d70aac1..04acd1a27 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -742,6 +742,10 @@ namespace SqlSugar { return false; } + else if (dataType.EqualCase("timestamp") && properyTypeName.EqualCase("timestamptz")) + { + return false; + } else { return properyTypeName.ToLower() != dataType.ToLower(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs index ed83ae1fe..ad729716f 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/FastestProvider.cs @@ -356,14 +356,16 @@ namespace SqlSugar private async Task _BulkUpdate(List datas, string[] whereColumns, string[] updateColumns) { + var isAuto = this.context.CurrentConnectionConfig.IsAutoCloseConnection; + var isAutoOk = false; + var old = this.context.Ado.IsDisableMasterSlaveSeparation; + var oldOk = false; try { Begin(datas, false); Check.Exception(whereColumns == null || whereColumns.Count() == 0, "where columns count=0 or need primary key"); Check.Exception(updateColumns == null || updateColumns.Count() == 0, "set columns count=0"); - var isAuto = this.context.CurrentConnectionConfig.IsAutoCloseConnection; this.context.CurrentConnectionConfig.IsAutoCloseConnection = false; - var old = this.context.Ado.IsDisableMasterSlaveSeparation; this.context.Ado.IsDisableMasterSlaveSeparation = true; DataTable dt = ToDdateTable(datas); IFastBuilder buider = GetBuider(); @@ -378,8 +380,10 @@ namespace SqlSugar this.context.DbMaintenance.DropTable(dt.TableName); } this.context.CurrentConnectionConfig.IsAutoCloseConnection = isAuto; - buider.CloseDb(); + isAutoOk = true; + buider.CloseDb(); this.context.Ado.IsDisableMasterSlaveSeparation = old; + oldOk = true; End(datas, false); return result; } @@ -388,6 +392,14 @@ namespace SqlSugar this.context.Close(); throw; } + finally + { + if(!isAutoOk) + this.context.CurrentConnectionConfig.IsAutoCloseConnection = isAuto; + if (!oldOk) + this.context.Ado.IsDisableMasterSlaveSeparation = old; + + } } private void ActionIgnoreColums(string[] whereColumns, string[] updateColumns, DataTable dt,bool IsActionUpdateColumns) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs index 441c9566b..d172b6c0d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs @@ -37,7 +37,7 @@ namespace SqlSugar if (list == null) return default(T); else return list.SingleOrDefault(); } - public async Task SingleAsync() + public virtual async Task SingleAsync() { if (QueryBuilder.OrderByValue.IsNullOrEmpty()) { @@ -67,19 +67,19 @@ namespace SqlSugar return result.SingleOrDefault(); } } - public async Task SingleAsync(Expression> expression) + public virtual async Task SingleAsync(Expression> expression) { _Where(expression); var result = await SingleAsync(); this.QueryBuilder.WhereInfos.Remove(this.QueryBuilder.WhereInfos.Last()); return result; } - public Task FirstAsync(CancellationToken token) + public virtual Task FirstAsync(CancellationToken token) { this.Context.Ado.CancellationToken = token; return FirstAsync(); } - public async Task FirstAsync() + public virtual async Task FirstAsync() { if (QueryBuilder.OrderByValue.IsNullOrEmpty()) { @@ -102,12 +102,12 @@ namespace SqlSugar return default(T); } } - public Task FirstAsync(Expression> expression, CancellationToken token) + public virtual Task FirstAsync(Expression> expression, CancellationToken token) { this.Context.Ado.CancellationToken = token; return FirstAsync(expression); } - public async Task FirstAsync(Expression> expression) + public virtual async Task FirstAsync(Expression> expression) { _Where(expression); var result = await FirstAsync(); @@ -115,7 +115,7 @@ namespace SqlSugar return result; } - public async Task AnyAsync(Expression> expression) + public virtual async Task AnyAsync(Expression> expression) { _Where(expression); var result = await AnyAsync(); @@ -123,23 +123,23 @@ namespace SqlSugar return result; } - public Task AnyAsync(Expression> expression, CancellationToken token) + public virtual Task AnyAsync(Expression> expression, CancellationToken token) { this.Context.Ado.CancellationToken = token; return AnyAsync(expression); } - public async Task AnyAsync() + public virtual async Task AnyAsync() { return (await this.Clone().Take(1).Select("1").ToListAsync()).Count() > 0; ; } - public Task CountAsync(CancellationToken token) + public virtual Task CountAsync(CancellationToken token) { this.Context.Ado.CancellationToken = token; return CountAsync(); } - public async Task CountAsync() + public virtual async Task CountAsync() { if (this.QueryBuilder.Skip == null && this.QueryBuilder.Take == null && @@ -181,7 +181,7 @@ namespace SqlSugar return CountAsync(expression); } - public async Task MaxAsync(string maxField) + public virtual async Task MaxAsync(string maxField) { this.Select(string.Format(QueryBuilder.MaxTemplate, maxField)); var list = await this._ToListAsync(); @@ -189,55 +189,55 @@ namespace SqlSugar return result; } - public Task MaxAsync(string maxField, CancellationToken token) + public virtual Task MaxAsync(string maxField, CancellationToken token) { this.Context.Ado.CancellationToken= token; return MaxAsync(maxField); } - public Task MaxAsync(Expression> expression) + public virtual Task MaxAsync(Expression> expression) { return _MaxAsync(expression); } - public Task MaxAsync(Expression> expression, CancellationToken token) + public virtual Task MaxAsync(Expression> expression, CancellationToken token) { this.Context.Ado.CancellationToken = token; return MaxAsync(expression); } - public async Task MinAsync(string minField) + public virtual async Task MinAsync(string minField) { this.Select(string.Format(QueryBuilder.MinTemplate, minField)); var list = await this._ToListAsync(); var result = list.SingleOrDefault(); return result; } - public Task MinAsync(Expression> expression) + public virtual Task MinAsync(Expression> expression) { return _MinAsync(expression); } - public async Task SumAsync(string sumField) + public virtual async Task SumAsync(string sumField) { this.Select(string.Format(QueryBuilder.SumTemplate, sumField)); var list = await this._ToListAsync(); var result = list.SingleOrDefault(); return result; } - public Task SumAsync(Expression> expression) + public virtual Task SumAsync(Expression> expression) { return _SumAsync(expression); } - public async Task AvgAsync(string avgField) + public virtual async Task AvgAsync(string avgField) { this.Select(string.Format(QueryBuilder.AvgTemplate, avgField)); var list = await this._ToListAsync(); var result = list.SingleOrDefault(); return result; } - public Task AvgAsync(Expression> expression) + public virtual Task AvgAsync(Expression> expression) { return _AvgAsync(expression); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs index 67a712727..b6c2f1a4a 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider_Condition.cs @@ -401,10 +401,14 @@ namespace SqlSugar } builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "=", parameterName); var p = new SugarParameter(parameterName, GetFieldValue(item)); - if (item.CSharpTypeName == "DateOnly") + if (item.CSharpTypeName .EqualCase("DateOnly")) { p.DbType = System.Data.DbType.Date; } + if (item.CSharpTypeName.EqualCase("Char")) + { + p.DbType = System.Data.DbType.StringFixedLength; + } parameters.Add(p); } } diff --git a/Src/Asp.Net/SqlSugar/Entities/ConfigQuery.cs b/Src/Asp.Net/SqlSugar/Entities/ConfigQuery.cs index 6b5db90a3..c00dae986 100644 --- a/Src/Asp.Net/SqlSugar/Entities/ConfigQuery.cs +++ b/Src/Asp.Net/SqlSugar/Entities/ConfigQuery.cs @@ -9,7 +9,7 @@ namespace SqlSugar public class ConfigQuery { public SqlSugarProvider Context { get; set; } - public void SetTable(Expression> keyExpression, Expression> valueTextExpression, string uniqueCode = null, Expression> whereExpression=null) + public void SetTable(Expression> keyExpression, Expression> valueTextExpression, string uniqueCode = null, Expression> whereExpression=null,string asTableName=null) { lock (SqlFuncExtendsion.TableInfos) { @@ -29,13 +29,13 @@ namespace SqlSugar SqlFuncExtendsion.TableInfos.Add(new ConfigTableInfo() { Type = typeof(T), - TableName = entity.DbTableName, + TableName =asTableName??entity.DbTableName, Key = keyValue, Value = ValueValue, Where = where, Parameter = query.Parameters, Code = uniqueCode - }); + }); } else { diff --git a/Src/Asp.Net/SqlSugar/Entities/ConnMoreSettings.cs b/Src/Asp.Net/SqlSugar/Entities/ConnMoreSettings.cs index 17ece3ae5..9fefbb350 100644 --- a/Src/Asp.Net/SqlSugar/Entities/ConnMoreSettings.cs +++ b/Src/Asp.Net/SqlSugar/Entities/ConnMoreSettings.cs @@ -38,5 +38,6 @@ namespace SqlSugar public bool DisableQueryWhereColumnRemoveTrim { get; set; } public DbType? DatabaseModel { get;set; } public bool ClickHouseEnableFinal { get; set; } + public bool EnableJsonb { get; set; } } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAvg.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAvg.cs index 00187392a..52bf2b189 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAvg.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubAvg.cs @@ -43,7 +43,26 @@ namespace SqlSugar public string GetValue(Expression expression = null) { var exp = expression as MethodCallExpression; - return "AVG(" + SubTools.GetMethodValue(this.Context, exp.Arguments[0], ResolveExpressType.FieldSingle) + ")"; + var argExp = exp.Arguments[0]; + var parametres = (argExp as LambdaExpression).Parameters; + if ((argExp as LambdaExpression).Body is UnaryExpression) + { + argExp = ((argExp as LambdaExpression).Body as UnaryExpression).Operand; + } + var argLambda = argExp as LambdaExpression; + if (this.Context.InitMappingInfo != null && argLambda != null && argLambda.Parameters.Count > 0) + { + foreach (var item in argLambda.Parameters) + { + this.Context.InitMappingInfo(item.Type); + } + this.Context.RefreshMapping(); + } + var result = "AVG(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple) + ")"; + var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot; + if (this.Context.JoinIndex == 0) + result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context)); + return result; } } } diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 847e84251..c5d214d04 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -848,7 +848,8 @@ namespace SqlSugar DatabaseModel=it.MoreSettings.DatabaseModel, EnableILike=it.MoreSettings.EnableILike, ClickHouseEnableFinal=it.MoreSettings.ClickHouseEnableFinal, - PgSqlIsAutoToLowerSchema=it.MoreSettings.PgSqlIsAutoToLowerSchema + PgSqlIsAutoToLowerSchema=it.MoreSettings.PgSqlIsAutoToLowerSchema, + EnableJsonb=it.MoreSettings.EnableJsonb }, SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle