From ebcb1d74fa27da9c514ed90a19b0893e5a1c979f Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 8 Oct 2018 08:44:16 +0800 Subject: [PATCH] Update Core --- .../Abstract/AdoProvider/AdoProvider.cs | 30 ++++++++++++++++ .../DeleteProvider/DeleteableProvider.cs | 4 +++ .../InsertableProvider/InsertableProvider.cs | 4 +++ .../QueryableProvider/QueryableProvider.cs | 8 ++++- .../UpdateProvider/UpdateableProvider.cs | 35 +++++++++---------- .../DbMethods/DefaultDbMethod.cs | 5 +++ .../ExpressionsToSql/DbMethods/IDbMethods.cs | 1 + .../ExpressionsToSql/DbMethods/SqlFunc.cs | 1 + .../MethodCallExpressionResolve.cs | 2 ++ .../SqlSeverTest/SqlSugar/Interface/IAdo.cs | 3 ++ .../SqlBuilder/MySqlExpressionContext.cs | 5 +++ .../SqlBuilder/OracleExpressionContext.cs | 5 +++ .../SqlBuilder/SqliteExpressionContext.cs | 7 +++- 13 files changed, 90 insertions(+), 20 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index f89c140d3..a9817f6ec 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -194,6 +194,17 @@ namespace SqlSugar } return result; } + + public Task> UseTranAsync(Action action) + { + Task> result = new Task>(() => + { + return UseTran(action); + }); + TaskStart(result); + return result; + } + public DbResult UseTran(Func action) { var result = new DbResult(); @@ -214,6 +225,17 @@ namespace SqlSugar } return result; } + + public Task> UseTranAsync(Func action) + { + Task> result = new Task>(() => + { + return UseTran(action); + }); + TaskStart(result); + return result; + } + public void UseStoredProcedure(Action action) { var oldCommandType = this.CommandType; @@ -624,6 +646,14 @@ namespace SqlSugar #endregion #region Helper + private void TaskStart(Task result) + { + if (this.Context.CurrentConnectionConfig.IsShardSameThread) + { + Check.Exception(true, "IsShardSameThread=true can't be used async method"); + } + result.Start(); + } private void ExecuteProcessingSQL(ref string sql, SugarParameter[] parameters) { var result = this.ProcessingEventStartingSQL(sql, parameters); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 5ca27c5a0..06b966cef 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -62,6 +62,10 @@ namespace SqlSugar IsAs = true; OldMappingTableList = this.Context.MappingTables; this.Context.MappingTables = this.Context.Utilities.TranslateCopy(this.Context.MappingTables); + if (this.Context.MappingTables.Any(it => it.EntityName == entityName)) + { + this.Context.MappingTables.Add(this.Context.MappingTables.First(it => it.EntityName == entityName).DbTableName, tableName); + } this.Context.MappingTables.Add(entityName, tableName); return this; ; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index bc11b2d30..e8594d9b5 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -145,6 +145,10 @@ namespace SqlSugar IsAs = true; OldMappingTableList = this.Context.MappingTables; this.Context.MappingTables = this.Context.Utilities.TranslateCopy(this.Context.MappingTables); + if (this.Context.MappingTables.Any(it => it.EntityName == entityName)) + { + this.Context.MappingTables.Add(this.Context.MappingTables.First(it => it.EntityName == entityName).DbTableName, tableName); + } this.Context.MappingTables.Add(entityName, tableName); return this; ; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 450f65c02..00a27fadc 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -628,7 +628,7 @@ namespace SqlSugar } public ISugarQueryable WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue) { - if (IsCache) + if (isCache) { this.IsCache = true; this.CacheTime = cacheDurationInSeconds; @@ -1019,6 +1019,10 @@ namespace SqlSugar IsAs = true; OldMappingTableList = this.Context.MappingTables; this.Context.MappingTables = this.Context.Utilities.TranslateCopy(this.Context.MappingTables); + if (this.Context.MappingTables.Any(it => it.EntityName == entityName)) + { + this.Context.MappingTables.Add(this.Context.MappingTables.First(it => it.EntityName == entityName).DbTableName, tableName); + } this.Context.MappingTables.Add(entityName, tableName); this.QueryableMappingTableList = this.Context.MappingTables; return this; @@ -1212,6 +1216,8 @@ namespace SqlSugar asyncQueryableBuilder.TableWithString = this.QueryBuilder.TableWithString; asyncQueryableBuilder.GroupByValue = this.QueryBuilder.GroupByValue; asyncQueryableBuilder.OrderByValue = this.QueryBuilder.OrderByValue; + asyncQueryableBuilder.IsDisabledGobalFilter = this.QueryBuilder.IsDisabledGobalFilter; + asyncQueryableBuilder.PartitionByValue = this.QueryBuilder.PartitionByValue; return asyncQueryable; } #endregion diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 10470c65f..2e14edc01 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -64,6 +64,9 @@ namespace SqlSugar IsAs = true; OldMappingTableList = this.Context.MappingTables; this.Context.MappingTables = this.Context.Utilities.TranslateCopy(this.Context.MappingTables); + if (this.Context.MappingTables.Any(it => it.EntityName == entityName)) { + this.Context.MappingTables.Add(this.Context.MappingTables.First(it => it.EntityName == entityName).DbTableName, tableName); + } this.Context.MappingTables.Add(entityName, tableName); return this; ; } @@ -107,7 +110,7 @@ namespace SqlSugar { var moreSetts = this.Context.CurrentConnectionConfig.MoreSettings; var extService = this.Context.CurrentConnectionConfig.ConfigureExternalServices; - if (moreSetts != null && moreSetts.IsAutoRemoveDataCache && extService != null && extService.DataInfoCacheService != null) + if (moreSetts != null && moreSetts.IsAutoRemoveDataCache && extService!=null&& extService.DataInfoCacheService!=null) { this.RemoveDataCache(); } @@ -147,13 +150,12 @@ namespace SqlSugar return this; } - public IUpdateable UpdateColumns(Expression> columns) - { + public IUpdateable UpdateColumns(Expression> columns) { var binaryExp = columns.Body as BinaryExpression; Check.Exception(!binaryExp.NodeType.IsIn(ExpressionType.Equal), "No support {0}", columns.ToString()); - Check.Exception(!(binaryExp.Left is MemberExpression) && !(binaryExp.Left is UnaryExpression), "No support {0}", columns.ToString()); + Check.Exception(!(binaryExp.Left is MemberExpression)&& !(binaryExp.Left is UnaryExpression), "No support {0}", columns.ToString()); Check.Exception(ExpressionTool.IsConstExpression(binaryExp.Left as MemberExpression), "No support {0}", columns.ToString()); - var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.WhereSingle).GetResultString().Replace("))", ") )").Replace("((", "( (").Trim().TrimStart('(').TrimEnd(')'); + var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.WhereSingle).GetResultString().Replace("))",") )").Replace("((", "( (").Trim().TrimStart('(').TrimEnd(')'); string key = SqlBuilder.GetNoTranslationColumnName(expResult); UpdateBuilder.SetValues.Add(new KeyValuePair(SqlBuilder.GetTranslationColumnName(key), expResult)); this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); @@ -187,7 +189,7 @@ namespace SqlSugar UpdateBuilder.SetValues.Add(new KeyValuePair(SqlBuilder.GetTranslationColumnName(key), item)); } } - this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName,StringComparison.CurrentCultureIgnoreCase)|| SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName,StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); return this; } [Obsolete("Use IUpdateable IgnoreColumns(bool ignoreAllNullColumns, bool isOffIdentity = false);")] @@ -209,22 +211,20 @@ namespace SqlSugar public IUpdateable Where(string whereSql, object parameters = null) { - if (whereSql.HasValue()) - { + if (whereSql.HasValue()) { UpdateBuilder.WhereValues.Add(whereSql); } - if (parameters != null) - { + if (parameters != null) { UpdateBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters)); } return this; } - public IUpdateable Where(string fieldName, string conditionalType, object fieldValue) + public IUpdateable Where(string fieldName,string conditionalType, object fieldValue) { - var whereSql = this.SqlBuilder.GetWhere(fieldName, conditionalType, 0); + var whereSql=this.SqlBuilder.GetWhere(fieldName, conditionalType,0); this.Where(whereSql); - string parameterName = this.SqlBuilder.SqlParameterKeyWord + fieldName + "0"; + string parameterName = this.SqlBuilder.SqlParameterKeyWord + fieldName+ "0"; this.UpdateBuilder.Parameters.Add(new SugarParameter(parameterName, fieldValue)); return this; } @@ -259,7 +259,7 @@ namespace SqlSugar foreach (var item in UpdateObjs) { List updateItem = new List(); - var isDic = item is Dictionary; + var isDic = item is Dictionary; if (isDic) { SetUpdateItemByDic(i, item, updateItem); @@ -273,12 +273,12 @@ namespace SqlSugar } private void SetUpdateItemByDic(int i, T item, List updateItem) { - foreach (var column in item as Dictionary) + foreach (var column in item as Dictionary) { var columnInfo = new DbColumnInfo() { Value = column.Value, - DbColumnName = column.Key, + DbColumnName =column.Key, PropertyName = column.Key, PropertyType = UtilMethods.GetUnderType(column.Value.GetType()), TableId = i @@ -331,8 +331,7 @@ namespace SqlSugar foreach (var item in this.UpdateBuilder.DbColumnInfoList) { if (this.UpdateBuilder.Parameters == null) this.UpdateBuilder.Parameters = new List(); - if (this.UpdateBuilder.SetValues.Any(it => this.SqlBuilder.GetNoTranslationColumnName(it.Key) == item.PropertyName)) - { + if (this.UpdateBuilder.SetValues.Any(it =>this.SqlBuilder.GetNoTranslationColumnName(it.Key) == item.PropertyName)) { continue; } this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item.DbColumnName, item.Value, item.PropertyType)); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index 6b0624d93..b91e925a4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -325,6 +325,11 @@ namespace SqlSugar return "GETDATE()"; } + public virtual string GetRandom() + { + return "NEWID()"; + } + public virtual string CaseWhen(List> sqls) { StringBuilder reslut = new StringBuilder(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 0e800a6ef..5e6c1b752 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -59,5 +59,6 @@ namespace SqlSugar string Pack(string sql); string Null(); string GetDate(); + string GetRandom(); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index 265e3f157..e33cf1b69 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -110,6 +110,7 @@ namespace SqlSugar /// public static TResult GetSelfAndAutoFill(TResult value) { throw new NotSupportedException("Can only be used in expressions"); } public static DateTime GetDate() { throw new NotSupportedException("Can only be used in expressions"); } + public static string GetRandom() { throw new NotSupportedException("Can only be used in expressions"); } /// /// Subquery /// diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index a56e5695a..91f9eda82 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -504,6 +504,8 @@ namespace SqlSugar return this.Context.DbMehtods.GetSelfAndAutoFill(model.Args[0].MemberValue.ObjToString(), this.Context.IsSingle); case "GetDate": return this.Context.DbMehtods.GetDate(); + case "GetRandom": + return this.Context.DbMehtods.GetRandom(); default: break; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs index cc34f9e74..b1efa74a6 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IAdo.cs @@ -86,6 +86,9 @@ namespace SqlSugar DbResult UseTran(Action action); DbResult UseTran(Func action); + Task> UseTranAsync(Action action); + Task> UseTranAsync(Func action); + void UseStoredProcedure(Action action); T UseStoredProcedure(Func action); IAdo UseStoredProcedure(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs index 879bba742..7b79c616a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -133,5 +133,10 @@ namespace SqlSugar { return "NOW()"; } + + public override string GetRandom() + { + return "rand()"; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs index e39e4621e..51013c28a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs @@ -180,5 +180,10 @@ namespace SqlSugar { return "sysdate"; } + + public override string GetRandom() + { + return "dbms_random.value"; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteExpressionContext.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteExpressionContext.cs index f8844eba8..f88510927 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteExpressionContext.cs @@ -157,7 +157,7 @@ namespace SqlSugar var parameter = model.Args[0].MemberName; var parameter2 = model.Args[1].MemberName; int time = 1; - return string.Format(" Cast((JulianDay({0}) - JulianDay({1})) *{2} As INTEGER)", parameter, parameter2, time); + return string.Format(" Cast((JulianDay({0}) - JulianDay({1})) *{2} As INTEGER)=0 ", parameter, parameter2, time); } public override string DateIsSameByType(MethodCallExpressionModel model) { @@ -208,5 +208,10 @@ namespace SqlSugar { return "DATETIME('now')"; } + + public override string GetRandom() + { + return "RANDOM()"; + } } }