From 392dce7af6ffce2755a0dff64b288c038ec3141c Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 12 Jan 2025 15:21:43 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/AdoProvider/AdoProvider.cs | 88 ++++++++++++++++++- .../Abstract/AopProvider/AopProvider.cs | 5 ++ .../DbBindProvider/DbBindAccessory.cs | 1 + .../Abstract/FastestProvider/SplitFastest.cs | 8 ++ .../InsertableProvider/InsertablePage.cs | 4 +- .../InsertableProvider/InsertableProvider.cs | 16 +++- .../QueryableProvider/QueryMethodInfo.cs | 13 ++- .../QueryableProvider/QueryableExecuteSql.cs | 6 +- .../QueryableProvider/QueryableHelper.cs | 12 ++- .../SqlBuilderProvider/QueryBuilder.cs | 20 ++++- .../SqlBuilderProvider/UpdateBuilder.cs | 5 ++ .../SqlSugar/Entities/ConnectionConfig.cs | 4 + .../SqlSugar/Infrastructure/StaticConfig.cs | 1 + Src/Asp.Net/SqlSugar/Interface/IAdo.cs | 29 +++--- Src/Asp.Net/SqlSugar/Interface/Insertable.cs | 1 + .../SqlSugar/Utilities/UtilConstants.cs | 3 +- Src/Asp.Net/SqlSugar/Utilities/UtilConvert.cs | 4 + Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 6 +- 18 files changed, 201 insertions(+), 25 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index b452294e4..196da4339 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -39,6 +39,8 @@ namespace SqlSugar internal bool OldClearParameters { get; set; } public IDataParameterCollection DataReaderParameters { get; set; } public TimeSpan SqlExecutionTime { get { return AfterTime - BeforeTime; } } + public TimeSpan ConnectionExecutionTime { get { return CheckConnectionAfterTime - CheckConnectionBeforeTime; } } + public TimeSpan GetDataExecutionTime { get { return GetDataAfterTime - GetDataBeforeTime; } } /// /// Add, delete and modify: the number of affected items; /// @@ -47,6 +49,10 @@ namespace SqlSugar public bool IsDisableMasterSlaveSeparation { get; set; } internal DateTime BeforeTime = DateTime.MinValue; internal DateTime AfterTime = DateTime.MinValue; + internal DateTime GetDataBeforeTime = DateTime.MinValue; + internal DateTime GetDataAfterTime = DateTime.MinValue; + internal DateTime CheckConnectionBeforeTime = DateTime.MinValue; + internal DateTime CheckConnectionAfterTime = DateTime.MinValue; public virtual IDbBind DbBind { get @@ -66,6 +72,10 @@ namespace SqlSugar public virtual bool IsClearParameters { get; set; } public virtual Action LogEventStarting => this.Context.CurrentConnectionConfig.AopEvents?.OnLogExecuting; public virtual Action LogEventCompleted => this.Context.CurrentConnectionConfig.AopEvents?.OnLogExecuted; + public virtual Action CheckConnectionExecuting => this.Context.CurrentConnectionConfig.AopEvents?.CheckConnectionExecuting; + public virtual Action CheckConnectionExecuted => this.Context.CurrentConnectionConfig.AopEvents?.CheckConnectionExecuted; + public virtual Action OnGetDataReadering => this.Context.CurrentConnectionConfig.AopEvents?.OnGetDataReadering; + public virtual Action OnGetDataReadered => this.Context.CurrentConnectionConfig.AopEvents?.OnGetDataReadered; public virtual Func> ProcessingEventStartingSQL => this.Context.CurrentConnectionConfig.AopEvents?.OnExecutingChangeSql; protected virtual Func FormatSql { get; set; } public virtual Action ErrorEvent => this.Context.CurrentConnectionConfig.AopEvents?.OnError; @@ -175,6 +185,7 @@ namespace SqlSugar } public virtual void CheckConnection() { + this.CheckConnectionBefore(this.Connection); if (this.Connection.State != ConnectionState.Open) { try @@ -190,10 +201,12 @@ namespace SqlSugar Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message+$"DbType=\"{this.Context.CurrentConnectionConfig.DbType}\";ConfigId=\"{this.Context.CurrentConnectionConfig.ConfigId}\""); } } + this.CheckConnectionAfter(this.Connection); } public virtual async Task CheckConnectionAsync() { + this.CheckConnectionBefore(this.Connection); if (this.Connection.State != ConnectionState.Open) { try @@ -205,6 +218,31 @@ namespace SqlSugar Check.Exception(true, ErrorMessage.ConnnectionOpen, ex.Message + $"DbType=\"{this.Context.CurrentConnectionConfig.DbType}\";ConfigId=\"{this.Context.CurrentConnectionConfig.ConfigId}\""); } } + this.CheckConnectionAfter(this.Connection); + } + public virtual void CheckConnectionBefore(IDbConnection Connection) + { + this.CheckConnectionBeforeTime = DateTime.Now; + if (this.IsEnableLogEvent) + { + Action action = CheckConnectionExecuting; + if (action != null) + { + action(Connection); + } + } + } + public virtual void CheckConnectionAfter(IDbConnection Connection) + { + this.CheckConnectionAfterTime = DateTime.Now; + if (this.IsEnableLogEvent) + { + Action action = CheckConnectionExecuted; + if (action != null) + { + action(Connection,this.ConnectionExecutionTime); + } + } } #endregion @@ -1015,7 +1053,10 @@ namespace SqlSugar builder.SqlQueryBuilder.sql.Append(sql); if (parsmeterArray != null && parsmeterArray.Any()) builder.SqlQueryBuilder.Parameters.AddRange(parsmeterArray); - using (var dataReader = this.GetDataReader(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray())) + string sqlString = builder.SqlQueryBuilder.ToSqlString(); + SugarParameter[] Parameters = builder.SqlQueryBuilder.Parameters.ToArray(); + this.GetDataBefore(sqlString, Parameters); + using (var dataReader = this.GetDataReader(sqlString, Parameters)) { DbDataReader DbReader = (DbDataReader)dataReader; List result = new List(); @@ -1076,6 +1117,7 @@ namespace SqlSugar } this.Context.Ado.DataReaderParameters = null; } + this.GetDataAfter(sqlString, Parameters); return Tuple.Create, List, List, List, List, List, List>(result, result2, result3, result4, result5, result6, result7); } } @@ -1140,7 +1182,10 @@ namespace SqlSugar builder.SqlQueryBuilder.sql.Append(sql); if (parsmeterArray != null && parsmeterArray.Any()) builder.SqlQueryBuilder.Parameters.AddRange(parsmeterArray); - using (var dataReader = await this.GetDataReaderAsync(builder.SqlQueryBuilder.ToSqlString(), builder.SqlQueryBuilder.Parameters.ToArray())) + string sqlString = builder.SqlQueryBuilder.ToSqlString(); + SugarParameter[] Parameters = builder.SqlQueryBuilder.Parameters.ToArray(); + this.GetDataBefore(sqlString, Parameters); + using (var dataReader = await this.GetDataReaderAsync(sqlString, Parameters)) { DbDataReader DbReader = (DbDataReader)dataReader; List result = new List(); @@ -1197,6 +1242,7 @@ namespace SqlSugar } this.Context.Ado.DataReaderParameters = null; } + this.GetDataAfter(sqlString, Parameters); return Tuple.Create, List, List, List, List, List, List>(result, result2, result3, result4, result5, result6, result7); } } @@ -1551,6 +1597,44 @@ namespace SqlSugar this.OldClearParameters = false; } } + public virtual void GetDataBefore(string sql, SugarParameter[] parameters) + { + this.GetDataBeforeTime = DateTime.Now; + if (this.IsEnableLogEvent) + { + Action action = OnGetDataReadering; + if (action != null) + { + if (parameters == null || parameters.Length == 0) + { + action(sql, new SugarParameter[] { }); + } + else + { + action(sql, parameters); + } + } + } + } + public virtual void GetDataAfter(string sql, SugarParameter[] parameters) + { + this.GetDataAfterTime = DateTime.Now; + if (this.IsEnableLogEvent) + { + Action action = OnGetDataReadered; + if (action != null) + { + if (parameters == null || parameters.Length == 0) + { + action(sql, new SugarParameter[] { }, GetDataExecutionTime); + } + else + { + action(sql, parameters, GetDataExecutionTime); + } + } + } + } public virtual SugarParameter[] GetParameters(object parameters, PropertyInfo[] propertyInfo = null) { if (parameters == null) return null; diff --git a/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs index 01949351d..aee0d3e54 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/AopProvider/AopProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; @@ -22,5 +23,9 @@ namespace SqlSugar public virtual Action DataExecuting { set { this.Context.CurrentConnectionConfig.AopEvents.DataExecuting = value; } } public Action DataChangesExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.DataChangesExecuted = value; } } public virtual Action DataExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.DataExecuted = value; } } + public Action CheckConnectionExecuting { set { this.Context.CurrentConnectionConfig.AopEvents.CheckConnectionExecuting = value; } } + public Action CheckConnectionExecuted { set { this.Context.CurrentConnectionConfig.AopEvents.CheckConnectionExecuted = value; } } + public Action OnGetDataReadering { set { this.Context.CurrentConnectionConfig.AopEvents.OnGetDataReadering = value; } } + public Action OnGetDataReadered { set { this.Context.CurrentConnectionConfig.AopEvents.OnGetDataReadered = value; } } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index b8d695c85..ab2235de9 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -204,6 +204,7 @@ namespace SqlSugar { if (dataAfterFunc != null) { + ((AdoProvider)context.Ado).AfterTime = DateTime.Now; var entity = context.EntityMaintenance.GetEntityInfo(); foreach (var item in result) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs index 5b3759e0c..48c1c2d12 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/SplitFastest.cs @@ -14,6 +14,10 @@ namespace SqlSugar public EntityInfo EntityInfo { get { return this.Context.EntityMaintenance.GetEntityInfo(); } } public int BulkCopy(List datas) { + if (StaticConfig.SplitTableCreateTableFunc != null) + { + StaticConfig.SplitTableCreateTableFunc(typeof(T), datas?.Cast()?.ToArray()); + } List groupModels; int result; GroupDataList(datas, out groupModels, out result); @@ -28,6 +32,10 @@ namespace SqlSugar } public async Task BulkCopyAsync(List datas) { + if (StaticConfig.SplitTableCreateTableFunc != null) + { + StaticConfig.SplitTableCreateTableFunc(typeof(T), datas?.Cast()?.ToArray()); + } List groupModels; int result; GroupDataList(datas, out groupModels, out result); diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertablePage.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertablePage.cs index b58f5632e..63e8da2b1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertablePage.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertablePage.cs @@ -17,7 +17,7 @@ namespace SqlSugar public DiffLogModel DiffModel { get; internal set; } public bool IsOffIdentity { get; internal set; } public bool IsInsertColumnsNull { get; internal set; } - + public bool IsMySqlIgnore { get; internal set; } public int ExecuteCommand() { if (DataList.Count() == 1 && DataList.First() == null) @@ -35,7 +35,7 @@ namespace SqlSugar } this.Context.Utilities.PageEach(DataList, PageSize, pageItem => { - result += this.Context.Insertable(pageItem).AS(TableName).IgnoreColumnsNull(this.IsInsertColumnsNull).OffIdentity(IsOffIdentity).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).InsertColumns(InsertColumns.ToArray()).ExecuteCommand(); + result += this.Context.Insertable(pageItem).AS(TableName).MySqlIgnore(IsMySqlIgnore).IgnoreColumnsNull(this.IsInsertColumnsNull).OffIdentity(IsOffIdentity).EnableDiffLogEventIF(IsEnableDiffLogEvent, DiffModel).InsertColumns(InsertColumns.ToArray()).ExecuteCommand(); }); if (isNoTran) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index afe1eb18d..59681cb98 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -510,6 +510,7 @@ namespace SqlSugar result.TableName = this.InsertBuilder.AsName; result.IsEnableDiffLogEvent = this.IsEnableDiffLogEvent; result.DiffModel = this.diffModel; + result.IsMySqlIgnore = this.InsertBuilder.MySqlIgnore; result.IsOffIdentity = this.InsertBuilder.IsOffIdentity; if(this.InsertBuilder.DbColumnInfoList.Any()) result.InsertColumns = this.InsertBuilder.DbColumnInfoList.GroupBy(it => it.TableId).First().Select(it=>it.DbColumnName).ToList(); @@ -567,7 +568,16 @@ namespace SqlSugar this.InsertBuilder.MySqlIgnore = true; return this; } - + public IInsertable MySqlIgnore(bool isIgnore) { + if (isIgnore) + { + return MySqlIgnore(); + } + else + { + return this; + } + } public IInsertable InsertColumns(Expression> columns) { if (columns == null) return this; @@ -763,6 +773,10 @@ namespace SqlSugar public SplitInsertable SplitTable() { + if (StaticConfig.SplitTableCreateTableFunc != null) + { + StaticConfig.SplitTableCreateTableFunc(typeof(T),this.InsertObjs); + } UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); var splitTableAttribute = typeof(T).GetCustomAttribute(); if (splitTableAttribute != null) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs index 70ef46381..ddcc16d22 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs @@ -323,7 +323,12 @@ namespace SqlSugar var reslt = method.Invoke(QueryableObj, new object[] { }); return Convert.ToBoolean(reslt); } - + public int Count() + { + var method = QueryableObj.GetType().GetMyMethod("Count", 0); + var reslt = method.Invoke(QueryableObj, new object[] { }); + return Convert.ToInt32(reslt); + } public object ToTree(string childPropertyName, string parentIdPropertyName, object rootValue, string primaryKeyPropertyName) { var method = QueryableObj.GetType().GetMyMethod("ToTree", 4,typeof(string),typeof(string),typeof(object),typeof(string)); @@ -379,6 +384,12 @@ namespace SqlSugar var reslt = method.Invoke(QueryableObj, new object[] { }); return await (Task) reslt; } + public async Task CountAsync() + { + var method = QueryableObj.GetType().GetMyMethod("CountAsync", 0); + var reslt = method.Invoke(QueryableObj, new object[] { }); + return await (Task)reslt; + } public async Task InSingleAsync(object pkValue) { var method = QueryableObj.GetType().GetMyMethod("InSingleAsync", 1); diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs index 43335e8d4..56510ddc0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs @@ -121,7 +121,11 @@ namespace SqlSugar this.QueryBuilder.Includes == null && this.QueryBuilder.IsDistinct == false) { - + if (StaticConfig.EnableAot) + { + var sqlobj = this.Clone().Select(" COUNT(1) ").ToSql(); + return this.Context.Ado.GetInt(sqlobj.Key,sqlobj.Value); + } return this.Clone().Select(" COUNT(1) ").ToList().FirstOrDefault(); } MappingTableList expMapping; diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index 89fac2556..05dcdab7e 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1885,8 +1885,12 @@ namespace SqlSugar var entityType = typeof(TResult); bool isChangeQueryableSlave = GetIsSlaveQuery(); bool isChangeQueryableMasterSlave = GetIsMasterQuery(); - var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray()); + string sqlString = sqlObj.Key; + SugarParameter[] parameters = sqlObj.Value.ToArray(); + var dataReader = this.Db.GetDataReader(sqlString, parameters); + this.Db.GetDataBefore(sqlString, parameters); result = GetData(isComplexModel, entityType, dataReader); + this.Db.GetDataAfter(sqlString, parameters); RestChangeMasterQuery(isChangeQueryableMasterSlave); RestChangeSlaveQuery(isChangeQueryableSlave); return result; @@ -1898,8 +1902,12 @@ namespace SqlSugar var entityType = typeof(TResult); bool isChangeQueryableSlave = GetIsSlaveQuery(); bool isChangeQueryableMasterSlave = GetIsMasterQuery(); - var dataReader = await this.Db.GetDataReaderAsync(sqlObj.Key, sqlObj.Value.ToArray()); + string sqlString = sqlObj.Key; + SugarParameter[] parameters = sqlObj.Value.ToArray(); + var dataReader = await this.Db.GetDataReaderAsync(sqlString, parameters); + this.Db.GetDataBefore(sqlString, parameters); result = await GetDataAsync(isComplexModel, entityType, dataReader); + this.Db.GetDataAfter(sqlString, parameters); RestChangeMasterQuery(isChangeQueryableMasterSlave); RestChangeSlaveQuery(isChangeQueryableSlave); return result; diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 83414cd78..f49cc18f2 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -460,15 +460,31 @@ namespace SqlSugar if (isSameName||ChildType.IsInterface) { var mysql = GetSql(exp, isSingle); - if (ChildType.IsInterface) + if (ChildType.IsInterface&&item.IsJoinQuery==true) { foreach (var joinInfoItem in this.JoinQueryInfos.Where(it => it.EntityType.GetInterfaces().Any(z=>z==ChildType))) { var addSql = mysql.Replace(itName, this.Builder.GetTranslationColumnName(joinInfoItem.ShortName) + "."); addSql = ReplaceFilterColumnName(addSql, joinInfoItem.EntityType,joinInfoItem.ShortName); - joinInfoItem.JoinWhere += (" AND " + Regex.Replace(addSql, "^ (WHERE|AND) ", "")); + joinInfoItem.JoinWhere += ( " AND " + Regex.Replace(addSql, "^ (WHERE|AND) ", "")); } } + else if (ChildType.IsInterface && item.IsJoinQuery == false) + { + { + var addSql = mysql.Replace(itName, this.Builder.GetTranslationColumnName(TableShortName) + "."); + addSql = ReplaceFilterColumnName(addSql, EntityType, TableShortName); + var andOrWhere = this.WhereInfos.Any() ? " AND " : "WHERE"; + this.WhereInfos.Add(andOrWhere + Regex.Replace(addSql, "^ (WHERE|AND) ", "")); + } + foreach (var joinInfoItem in this.JoinQueryInfos.Where(it => it.EntityType.GetInterfaces().Any(z => z == ChildType))) + { + var addSql = mysql.Replace(itName, this.Builder.GetTranslationColumnName(joinInfoItem.ShortName) + "."); + addSql = ReplaceFilterColumnName(addSql, joinInfoItem.EntityType, joinInfoItem.ShortName); + this.WhereInfos.Add (" AND " + Regex.Replace(addSql, "^ (WHERE|AND) ", "")); + } + return; + } else { foreach (var joinInfoItem in this.JoinQueryInfos.Where(it => it.TableName == entityInfo.DbTableName)) diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs index 180a5da49..3c5b732ed 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Text; @@ -425,6 +426,10 @@ namespace SqlSugar } else if (UtilMethods.IsNumber(type.Name)) { + if (value is decimal v) + { + return v.ToString(UtilConstants.EnCultureInfo); + } if (value.ObjToString().Contains(",")) { return $"'{value}'"; diff --git a/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs b/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs index d30b4dce4..7c9babcc9 100644 --- a/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs +++ b/Src/Asp.Net/SqlSugar/Entities/ConnectionConfig.cs @@ -94,6 +94,10 @@ namespace SqlSugar public Action DataExecuting { get; set; } public Action DataChangesExecuted { get; set; } public Action DataExecuted { get; set; } + public Action CheckConnectionExecuting { get; set; } + public Action CheckConnectionExecuted { get; set; } + public Action OnGetDataReadering { get; set; } + public Action OnGetDataReadered { get; set; } } public class ConfigureExternalServices { diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/StaticConfig.cs b/Src/Asp.Net/SqlSugar/Infrastructure/StaticConfig.cs index 5cb438a76..2b942e918 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/StaticConfig.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/StaticConfig.cs @@ -29,6 +29,7 @@ namespace SqlSugar public static Action CompleteDbFunc; public static Func> SplitTableGetTablesFunc; + public static Action SplitTableCreateTableFunc; public static bool Check_StringIdentity = true; public static bool EnableAllWhereIF = false; diff --git a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs index 2331712cd..549cc986a 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IAdo.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IAdo.cs @@ -18,11 +18,15 @@ namespace SqlSugar IDataParameter[] ToIDbDataParameter(params SugarParameter[] pars); SugarParameter[] GetParameters(object obj, PropertyInfo[] propertyInfo = null); SqlSugarProvider Context { get; set; } + void CheckConnectionAfter(IDbConnection Connection); + void CheckConnectionBefore(IDbConnection Connection); void ExecuteBefore(string sql, SugarParameter[] pars); void ExecuteAfter(string sql, SugarParameter[] pars); + void GetDataBefore(string sql, SugarParameter[] parameters); + void GetDataAfter(string sql, SugarParameter[] parameters); bool IsAnyTran(); bool IsNoTran(); - bool IsEnableLogEvent{get;set;} + bool IsEnableLogEvent { get; set; } StackTraceInfo SqlStackTrace { get; } IDataParameterCollection DataReaderParameters { get; set; } CommandType CommandType { get; set; } @@ -31,6 +35,7 @@ namespace SqlSugar bool IsClearParameters { get; set; } int CommandTimeOut { get; set; } TimeSpan SqlExecutionTime { get; } + TimeSpan ConnectionExecutionTime { get; } int SqlExecuteCount { get; } IDbBind DbBind { get; } void SetCommandToAdapter(IDataAdapter adapter, DbCommand command); @@ -79,7 +84,7 @@ namespace SqlSugar Task ExecuteCommandAsync(string sql, params SugarParameter[] parameters); Task ExecuteCommandAsync(string sql, object parameters); - Task ExecuteCommandAsync(string sql, object parameters,CancellationToken cancellationToken); + Task ExecuteCommandAsync(string sql, object parameters, CancellationToken cancellationToken); Task ExecuteCommandAsync(string sql, List parameters); string GetString(string sql, object parameters); @@ -99,9 +104,9 @@ namespace SqlSugar Task GetIntAsync(string sql, List parameters); - long GetLong(string sql, object pars=null); + long GetLong(string sql, object pars = null); - Task GetLongAsync(string sql, object pars=null); + Task GetLongAsync(string sql, object pars = null); Double GetDouble(string sql, object parameters); @@ -132,12 +137,12 @@ namespace SqlSugar Task GetDateTimeAsync(string sql, List parameters); - Tuple, List> SqlQuery(string sql, object parameters = null); - Tuple, List, List> SqlQuery(string sql, object parameters = null); - Tuple, List, List,List> SqlQuery(string sql, object parameters = null); - Tuple, List, List, List, List> SqlQuery(string sql, object parameters = null); - Tuple, List, List, List, List, List> SqlQuery(string sql, object parameters = null); - Tuple, List, List, List, List, List, List> SqlQuery(string sql, object parameters = null); + Tuple, List> SqlQuery(string sql, object parameters = null); + Tuple, List, List> SqlQuery(string sql, object parameters = null); + Tuple, List, List, List> SqlQuery(string sql, object parameters = null); + Tuple, List, List, List, List> SqlQuery(string sql, object parameters = null); + Tuple, List, List, List, List, List> SqlQuery(string sql, object parameters = null); + Tuple, List, List, List, List, List, List> SqlQuery(string sql, object parameters = null); Task, List>> SqlQueryAsync(string sql, object parameters = null); Task, List, List>> SqlQueryAsync(string sql, object parameters = null); @@ -153,7 +158,7 @@ namespace SqlSugar List MasterSqlQuery(string sql, object parameters = null); Task> SqlQueryAsync(string sql, object parameters = null); - Task> SqlQueryAsync(string sql, object parameters,CancellationToken token); + Task> SqlQueryAsync(string sql, object parameters, CancellationToken token); Task> SqlQueryAsync(string sql, List parameters); Task> SqlQueryAsync(string sql, params SugarParameter[] parameters); @@ -191,6 +196,6 @@ namespace SqlSugar Task> UseTranAsync(Func action, Action errorCallBack = null); Task> UseTranAsync(Func> action, Action errorCallBack = null); IAdo UseStoredProcedure(); - + } } diff --git a/Src/Asp.Net/SqlSugar/Interface/Insertable.cs b/Src/Asp.Net/SqlSugar/Interface/Insertable.cs index 28c2223ab..8afdd4fec 100644 --- a/Src/Asp.Net/SqlSugar/Interface/Insertable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/Insertable.cs @@ -64,6 +64,7 @@ namespace SqlSugar SplitInsertable SplitTable(SplitType splitType); void AddQueue(); IInsertable MySqlIgnore(); + IInsertable MySqlIgnore(bool isIgnore); IInsertable PostgreSQLConflictNothing(string[] columns); IInsertable OffIdentity(); IInsertable OffIdentity(bool isSetOn); diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs index 000e72d64..3a75f6ab7 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilConstants.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Dynamic; +using System.Globalization; using System.Linq; using System.Text; namespace SqlSugar @@ -62,7 +63,7 @@ namespace SqlSugar typeof(short), typeof(ushort), }; - + internal static CultureInfo EnCultureInfo = new CultureInfo("en"); internal static string[] DateTypeStringList = new string[] { diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilConvert.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilConvert.cs index 3795c0ba0..0c7371468 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilConvert.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilConvert.cs @@ -109,6 +109,10 @@ namespace SqlSugar { return string.Join("|",thisValue as byte[]); } + if (thisValue!=null&&thisValue?.GetType()?.Name == "DateOnly") + { + return Convert.ToDateTime(thisValue.ToString()).ToString("yyyy-MM-dd"); + } if (thisValue != null) return thisValue.ToString().Trim(); return ""; } diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 39970cc80..134f11607 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -662,6 +662,10 @@ namespace SqlSugar OnLogExecuted=it.AopEvents?.OnLogExecuted, OnLogExecuting= it.AopEvents?.OnLogExecuting, DataExecuted = it.AopEvents?.DataExecuted, + CheckConnectionExecuted = it.AopEvents?.CheckConnectionExecuted, + CheckConnectionExecuting = it.AopEvents?.CheckConnectionExecuting, + OnGetDataReadered= it.AopEvents?.OnGetDataReadered, + OnGetDataReadering = it.AopEvents?.OnGetDataReadering, }, ConfigId = it.ConfigId, ConfigureExternalServices =it.ConfigureExternalServices==null?null:new ConfigureExternalServices() { @@ -1579,7 +1583,7 @@ namespace SqlSugar var result = sqlObj.Key; if (sqlObj.Value != null) { - foreach (var item in sqlObj.Value.OrderByDescending(it => it.ParameterName.Length)) + foreach (var item in UtilMethods.CopySugarParameters(sqlObj.Value).OrderByDescending(it => it.ParameterName.Length)) { if (item.ParameterName.StartsWith(":")&&!result.Contains(item.ParameterName)) {