From f1733039d24a7a85620b286f171f3372cdb53859 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 17 Mar 2025 19:55:05 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/DbMaintenanceProvider/Methods.cs | 2 +- .../Abstract/QueryableProvider/QueryableProvider.cs | 4 ++++ .../Abstract/SugarProvider/SqlSugarAccessory.cs | 6 +++++- Src/Asp.Net/SqlSugar/Enum/DbType.cs | 1 + .../ResolveItems/BaseResolve_Item.cs | 10 ++++++++++ .../ResolveItems/BinaryExpressionResolve.cs | 4 ++++ .../ResolveItems/MemberExpressionResolve.cs | 9 ++++++++- .../SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs | 12 +++++++++++- .../SqlSugar/Infrastructure/InstanceFactory.cs | 8 ++++++++ Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs | 5 +++++ 10 files changed, 57 insertions(+), 4 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 7959f3f46..a7d9fda51 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -384,7 +384,7 @@ namespace SqlSugar { value = columnInfo.DefaultValue; } - else if (columnInfo.DataType.ObjToString().ToLower().IsIn("int","int4","bigint","int8","int2")&& columnInfo.DefaultValue.IsInt()) + else if (columnInfo.DataType.ObjToString().ToLower().IsIn("float","double","decimal","int","int4","bigint","int8","int2")&& columnInfo.DefaultValue.IsInt()) { value = columnInfo.DefaultValue; } diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 2d2c3abd3..d09acf6d0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -211,19 +211,23 @@ namespace SqlSugar } public ISugarQueryable LeftJoinIF(bool isLeftJoin, Expression> joinExpression) { + var oldAsName = this.QueryBuilder.AsTables?.ToDictionary(it=>it.Key,it=>it.Value); var result = LeftJoin(joinExpression); if (isLeftJoin == false) { result.QueryBuilder.JoinQueryInfos.Remove(result.QueryBuilder.JoinQueryInfos.Last()); + result.QueryBuilder.AsTables = oldAsName; } return result; } public ISugarQueryable InnerJoinIF(bool isJoin, Expression> joinExpression) { + var oldAsName = this.QueryBuilder.AsTables?.ToDictionary(it => it.Key, it => it.Value); var result = InnerJoin(joinExpression); if (isJoin == false) { result.QueryBuilder.JoinQueryInfos.Remove(result.QueryBuilder.JoinQueryInfos.Last()); + result.QueryBuilder.AsTables = oldAsName; } return result; } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs index 25face406..081a3c35d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarAccessory.cs @@ -538,7 +538,7 @@ namespace SqlSugar break; case DbType.HANA: Check.Exception(SugarCompatible.IsFramework, "NANA only support .net core"); - InstanceFactory.CustomDllName = "SqlSugar.HanaConnector"; + InstanceFactory.CustomDllName = "SqlSugar.HANAConnector"; break; case DbType.Xugu: Check.Exception(SugarCompatible.IsFramework, "Xugu only support .net core"); @@ -549,6 +549,10 @@ namespace SqlSugar case DbType.GoldenDB: config.DbType = DbType.MySql; break; + case DbType.DB2: + Check.Exception(SugarCompatible.IsFramework, "Db2 only support .net core"); + InstanceFactory.CustomDllName = "SqlSugar.Db2Core"; + break; default: throw new Exception("ConnectionConfig.DbType is null"); } diff --git a/Src/Asp.Net/SqlSugar/Enum/DbType.cs b/Src/Asp.Net/SqlSugar/Enum/DbType.cs index e65f8ad49..ba2865cd3 100644 --- a/Src/Asp.Net/SqlSugar/Enum/DbType.cs +++ b/Src/Asp.Net/SqlSugar/Enum/DbType.cs @@ -36,6 +36,7 @@ namespace SqlSugar TDSQLForPGODBC, TDSQL, HANA, + DB2, Custom =900 } } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs index a3ee8798b..b759913a1 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs @@ -262,6 +262,16 @@ namespace SqlSugar var value = GetNewExpressionValue(item); parameter.Context.Result.Append($" {value} AS {asName} "); } + else if (item is ConditionalExpression) + { + var value = GetNewExpressionValue(item); + parameter.Context.Result.Append($" {value} AS {asName} "); + } + else if (ExpressionTool.GetMethodName(item)==nameof(SqlFunc.IIF)) + { + var value = GetNewExpressionValue(item); + parameter.Context.Result.Append($" {value} AS {asName} "); + } else { asName = GetAsNameResolveAnObject(parameter, item, asName, isSameType); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index da0ff9630..8915eb591 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -144,6 +144,10 @@ namespace SqlSugar var leftString = GetNewExpressionValue(expression.Left); var RightString = GetNewExpressionValue(expression.Right); var joinString = this.Context.DbMehtods.MergeString(leftString, RightString); + if (this.Context is KdbndpExpressionContext&&this.Context?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel==DbType.SqlServer) + { + joinString = new SqlServerMethod().MergeString(leftString, RightString); + } if (this.Context.Result.Contains(ExpressionConst.FormatSymbol)) { base.Context.Result.Replace("{0}", $" {joinString} "); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index cb57ce5f3..80c18c307 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -780,7 +780,14 @@ namespace SqlSugar string shortName = expression.Expression.ToString(); string fieldName = expression.Member.Name; fieldName = this.Context.GetDbColumnName(expression.Expression.Type.Name, fieldName); - fieldName = Context.GetTranslationColumnName(shortName + UtilConstants.Dot + fieldName); + if (UtilMethods.GetMoreSetting(this.Context).IsCorrectErrorSqlParameterName) + { + fieldName = Context.GetTranslationColumnName(shortName) + UtilConstants.Dot + Context.GetTranslationColumnName(fieldName); + } + else + { + fieldName = Context.GetTranslationColumnName(shortName + UtilConstants.Dot + fieldName); + } return fieldName; } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs index 58e2cdccb..89e8eeef5 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs @@ -186,6 +186,10 @@ namespace SqlSugar { var asName = this.context.GetTranslationTableName(asItems.First().Replace(subKey, ""), false); var repKey = $"\\{this.context.SqlTranslationLeft}.+\\{this.context.SqlTranslationRight}"; + if (this.context.IsSingle&&this.context.JoinIndex==0&&this.context.CurrentShortName.HasValue()&& isAsAttr&& !asName.Contains(this.context.CurrentShortName)) + { + asName = asName + " " + this.context.CurrentShortName+" "; + } sqlItems[i] = Regex.Replace(sqlItems[i], repKey, asName); } } @@ -196,7 +200,13 @@ namespace SqlSugar { if (sqlItems[i].StartsWith("FROM " + this.context.SqlTranslationLeft)) { - sqlItems[i] = sqlItems[i]+" "+this.context.CurrentShortName +" "; + if (isAsAttr&&sqlItems[i].EndsWith(this.context.CurrentShortName + " ")) + { + } + else + { + sqlItems[i] = sqlItems[i] + " " + this.context.CurrentShortName + " "; + } } } } diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs b/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs index 891ad9b03..d05de1e9f 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/InstanceFactory.cs @@ -436,6 +436,14 @@ namespace SqlSugar { return CustomNamespace + "."+CustomDbName + name; } + else if (type == "HANA") + { + return InstanceFactory.CustomDllName + "." + type + name; + } + else if (type == "DB2") + { + return "SqlSugar.DB2."+ type+ name; + } else { //if (!string.IsNullOrEmpty(CustomDllName)) diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index a893027cf..959edc256 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -1821,5 +1821,10 @@ namespace SqlSugar } return true; } + + internal static ConnMoreSettings GetMoreSetting(ExpressionContext context) + { + return context?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings ?? new ConnMoreSettings(); + } } }