From b97e5ce8b7e5b9fbdf990b05e117f8920b7eca21 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 5 Jul 2024 14:08:37 +0800 Subject: [PATCH] Synchronization code --- .../DbBindProvider/DbBindAccessory.cs | 7 ++++++- .../SugarProvider/SqlSugarAccessory.cs | 9 +++++++++ .../UpdateProvider/UpdateMethodInfo.cs | 15 ++++++++++++++ .../UpdateProvider/UpdateableProviderT3.cs | 1 + .../UpdateProvider/UpdateableProviderT4.cs | 1 + Src/Asp.Net/SqlSugar/Enum/DbType.cs | 2 ++ .../ResolveItems/MemberExpressionResolve.cs | 12 +++++++++++ .../MethodCallExpressionResolve_Helper.cs | 2 ++ .../SqlBuilder/KdbndpExpressionContext.cs | 12 +++++++++++ .../SqlBuilder/PostgreSQLFastBuilder.cs | 8 ++++---- .../SqlBuilder/PostgreSQLUpdateBuilder.cs | 20 +++++++++++++++++++ 11 files changed, 84 insertions(+), 5 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index 372e4e8b5..d42c23924 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -160,7 +160,12 @@ namespace SqlSugar } else { - item.PropertyInfo.SetValue(parentObj, dataReader.GetValue(itemIndex)); + var setValue = dataReader.GetValue(itemIndex); + if (setValue == DBNull.Value) + { + setValue = null; + } + item.PropertyInfo.SetValue(parentObj, setValue); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 140d81fb8..633e84033 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs @@ -528,6 +528,15 @@ namespace SqlSugar Check.Exception(SugarCompatible.IsFramework, "TDengine only support .net core"); InstanceFactory.CustomDllName = SugarCompatible.IsFramework ? "SqlSugar.TDengine" : "SqlSugar.TDengineCore"; break; + case DbType.Xugu: + Check.Exception(SugarCompatible.IsFramework, "Xugu only support .net core"); + //InstanceFactory.CustomDbName = "Xugu"; + InstanceFactory.CustomDllName = "SqlSugar.XuguCore"; + //InstanceFactory.CustomNamespace = "SqlSugar.Xugu"; + break; + case DbType.GoldenDB: + config.DbType = DbType.MySql; + break; default: throw new Exception("ConnectionConfig.DbType is null"); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs index c2b366dbc..576d32e01 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateMethodInfo.cs @@ -13,6 +13,21 @@ namespace SqlSugar internal MethodInfo MethodInfo { get; set; } internal object objectValue { get; set; } + public int ExecuteCommandWithOptLock(bool isThrowError = false) + { + if (Context == null) return 0; + var inertable = MethodInfo.Invoke(Context, new object[] { objectValue }); + var result = inertable.GetType().GetMyMethod("ExecuteCommandWithOptLock",1,typeof(bool)).Invoke(inertable, new object[] { isThrowError }); + return (int)result; + } + + public async Task ExecuteCommandWithOptLockAsync(bool isThrowError = false) + { + if (Context == null) return 0; + var inertable = MethodInfo.Invoke(Context, new object[] { objectValue }); + var result = inertable.GetType().GetMyMethod("ExecuteCommandWithOptLockAsync", 1, typeof(bool)).Invoke(inertable, new object[] { isThrowError }); + return await(Task)result; + } public int ExecuteCommand() { if (Context == null) return 0; diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs index 9113a9eac..54b3d6ef5 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT3.cs @@ -39,6 +39,7 @@ namespace SqlSugar var SqlBuilder = UpdateBuilder.Builder; foreach (var item in items) { + updateableObj.UpdateBuilder.LambdaExpressions.IsSingle = false; var dbColumnName = updateableObj.UpdateBuilder.Context.EntityMaintenance.GetDbColumnName(item.Key); var value = updateableObj.UpdateBuilder.GetExpressionValue(ExpressionTool.RemoveConvert(item.Value), ResolveExpressType.WhereMultiple).GetString(); this.updateableObj.UpdateBuilder.SetValues.Add(new KeyValuePair(dbColumnName, value)); diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs index 678095ea6..bb084c8df 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProviderT4.cs @@ -28,6 +28,7 @@ namespace SqlSugar var SqlBuilder = UpdateBuilder.Builder; foreach (var item in items) { + updateableObj.UpdateBuilder.LambdaExpressions.IsSingle = false; var dbColumnName = updateableObj.UpdateBuilder.Context.EntityMaintenance.GetDbColumnName(item.Key); var value = updateableObj.UpdateBuilder.GetExpressionValue(ExpressionTool.RemoveConvert(item.Value), ResolveExpressType.WhereMultiple).GetString(); this.updateableObj.UpdateBuilder.SetValues.Add(new KeyValuePair(dbColumnName, value)); diff --git a/Src/Asp.Net/SqlSugar/Enum/DbType.cs b/Src/Asp.Net/SqlSugar/Enum/DbType.cs index 38913005e..969a4eac3 100644 --- a/Src/Asp.Net/SqlSugar/Enum/DbType.cs +++ b/Src/Asp.Net/SqlSugar/Enum/DbType.cs @@ -31,6 +31,8 @@ namespace SqlSugar Vastbase, PolarDB, Doris, + Xugu, + GoldenDB, Custom =900 } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index 4d8122843..f4c64f629 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -786,7 +786,19 @@ namespace SqlSugar { string fieldName = expression.Member.Name; fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName); + + var isSpace = fieldName.Contains(UtilConstants.Space); + var guid = string.Empty; + if (isSpace) + { + guid = SnowFlakeSingle.Instance.NextId().ToString(); + fieldName = fieldName.Replace(UtilConstants.Space, guid); + } fieldName = Context.GetTranslationColumnName(fieldName); + if (isSpace) + { + fieldName = fieldName.Replace(guid, UtilConstants.Space); + } return fieldName; } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs index 1918a78a9..45fee783a 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs @@ -749,6 +749,7 @@ namespace SqlSugar return dsResult; } case "DateAdd": + model.Conext = this.Context; if (model.Args.Count == 2) return this.Context.DbMehtods.DateAddDay(model); else @@ -808,6 +809,7 @@ namespace SqlSugar MemberValue= "100000", }); } + model.Conext = this.Context; return this.Context.DbMehtods.Substring(model); case "Replace": return this.Context.DbMehtods.Replace(model); diff --git a/Src/Asp.Net/SqlSugar/Realization/Kdbndp/SqlBuilder/KdbndpExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Kdbndp/SqlBuilder/KdbndpExpressionContext.cs index e717b400a..9badd6e81 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Kdbndp/SqlBuilder/KdbndpExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Kdbndp/SqlBuilder/KdbndpExpressionContext.cs @@ -167,6 +167,14 @@ namespace SqlSugar } return string.Format("( CASE WHEN {0} THEN {1} ELSE {2} END )", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); } + public override string Substring(MethodCallExpressionModel model) + { + if (model?.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.MySql) + { + return base.Substring(model).Replace(" + ", " operator(pg_catalog.+) "); + } + return base.Substring(model); + } public override string DateValue(MethodCallExpressionModel model) { var parameter = model.Args[0]; @@ -295,6 +303,10 @@ namespace SqlSugar var parameter = model.Args[0]; var parameter2 = model.Args[1]; var parameter3 = model.Args[2]; + if (model?.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.MySql) + { + return string.Format(" ({1} + ({2} operator(pg_catalog.||) '{0}')::INTERVAL) ", parameter3.MemberValue, parameter.MemberName, parameter2.MemberName); + } return string.Format(" ({1} + ({2}||'{0}')::INTERVAL) ", parameter3.MemberValue, parameter.MemberName, parameter2.MemberName); } diff --git a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs index d7a6a8809..d453254a8 100644 --- a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLFastBuilder.cs @@ -123,10 +123,10 @@ namespace SqlSugar { value = DBNull.Value; } - else if (value is double&&this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel==null) - { - column.Type = NpgsqlDbType.Double; - } + //else if (value is double&&this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel==null) + //{ + // column.Type = NpgsqlDbType.Double; + //} if (column.Type == null) { writer.Write(value); diff --git a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLUpdateBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLUpdateBuilder.cs index f395e3259..85f16113b 100644 --- a/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLUpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/PostgreSQL/SqlBuilder/PostgreSQLUpdateBuilder.cs @@ -237,6 +237,10 @@ namespace SqlSugar } protected override string GetJoinUpdate(string columnsString, ref string whereString) { + if (this.JoinInfos?.Count > 1) + { + return this.GetJoinUpdateMany(columnsString,whereString); + } var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} "; var joinString = ""; foreach (var item in this.JoinInfos) @@ -248,6 +252,22 @@ namespace SqlSugar columnsString = columnsString.Replace(Builder.GetTranslationColumnName(this.ShortName)+".","")+joinString; return string.Format(SqlTemplate, tableName, columnsString, whereString); } + private string GetJoinUpdateMany(string columnsString,string where) + { + var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} "; + var joinString = ""; + var i = 0; + foreach (var item in this.JoinInfos) + { + var whereString = " ON " + item.JoinWhere; + joinString += $"\r\n JOIN {Builder.GetTranslationColumnName(item.TableName)} {Builder.GetTranslationColumnName(item.ShortName)} "; + joinString = joinString + whereString; + i++; + } + var tableName = Builder.GetTranslationColumnName(this.TableName) + "\r\n "; + columnsString = columnsString.Replace(Builder.GetTranslationColumnName(this.ShortName) + ".", "") + $" FROM {Builder.GetTranslationColumnName(this.TableName)} {Builder.GetTranslationColumnName(this.ShortName)}\r\n " + joinString; + return string.Format(SqlTemplate, tableName, columnsString, where); + } public override string FormatDateTimeOffset(object value) { return "'" + ((DateTimeOffset)value).ToString("o") + "'";