From 4ccc7fe70a45e130c3be1c64303c4290406aee1e Mon Sep 17 00:00:00 2001 From: "guoshun.du" Date: Tue, 1 Apr 2025 14:00:26 +0800 Subject: [PATCH] =?UTF-8?q?OceanBaseForOracle=E5=92=8CTDSQLForPGODBC?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9Oracle=E5=92=8CPGS?= =?UTF-8?q?QL=E7=9A=84=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OceanBaseForOracleInsertBuilder.cs | 4 +- .../OceanBaseForOracleUpdateBuilder.cs | 12 ++- .../SqlBuilder/TDSQLForPGODBCInsertBuilder.cs | 96 ++++++++++++++++--- .../SqlBuilder/TDSQLForPGODBCUpdateBuilder.cs | 49 ++++++---- .../Tools/QueryableFormat.cs | 19 ++++ .../Tools/UtilMethods.cs | 94 ++++++++++++++++-- 6 files changed, 230 insertions(+), 44 deletions(-) create mode 100644 Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/QueryableFormat.cs diff --git a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs index b62e051e9..02d6526c4 100644 --- a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs @@ -56,7 +56,7 @@ namespace SqlSugar.OceanBaseForOracle else { var bigSize = 500; - if (groupList.Count < bigSize) + if (groupList.Count < bigSize || this.Context?.CurrentConnectionConfig?.MoreSettings?.EnableOracleIdentity == true) { string result = Small(identities, groupList, columnsString); return result; @@ -76,7 +76,7 @@ namespace SqlSugar.OceanBaseForOracle var sql = Small(identities, groupListPasge, columnsString); this.Context.Ado.ExecuteCommand(sql, this.Parameters); }); - if (identities != null & identities.Count > 0 && this.OracleSeqInfoList != null && this.OracleSeqInfoList.Any()) + if (identities != null && identities.Count > 0 && this.OracleSeqInfoList != null && this.OracleSeqInfoList.Any()) { return $"SELECT {this.OracleSeqInfoList.First().Value - 1} FROM DUAL"; } diff --git a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs index f473a9ba8..feed53182 100644 --- a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs @@ -22,8 +22,16 @@ namespace SqlSugar.OceanBaseForOracle sb.AppendLine(string.Join("\r\n", groupList.Select(t => { var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith); - var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(m)).ToArray()); + var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Where(s => OldPrimaryKeys == null || !OldPrimaryKeys.Contains(s.DbColumnName)).Select(m => GetOracleUpdateColums(m)).ToArray()); var pkList = t.Where(s => s.IsPrimarykey).ToList(); + if (this.IsWhereColumns && this.PrimaryKeys?.Any() == true) + { + var whereColumns = pkList.Where(it => this.PrimaryKeys?.Any(p => p.EqualCase(it.PropertyName) || p.EqualCase(it.DbColumnName)) == true).ToList(); + if (whereColumns.Any()) + { + pkList = whereColumns; + } + } List whereList = new List(); foreach (var item in pkList) { @@ -40,7 +48,7 @@ namespace SqlSugar.OceanBaseForOracle private string GetOracleUpdateColums(DbColumnInfo m) { - return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(IsUppper), base.GetDbColumn(m, FormatValue(m.Value, m.IsPrimarykey, m.PropertyName))); + return string.Format("\"{0}\"={1} ", m.DbColumnName.ToUpper(IsUppper), base.GetDbColumn(m, FormatValue(m.Value, m.IsPrimarykey, m.PropertyName))); } int i = 0; public object FormatValue(object value, bool isPrimaryKey, string name) diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCInsertBuilder.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCInsertBuilder.cs index 39dc62a69..fd3e00ce9 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCInsertBuilder.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.Linq; using System.Text; @@ -34,7 +35,7 @@ namespace SqlSugar.TDSQLForPGODBC public override Func ConvertInsertReturnIdFunc { get; set; } = (name, sql) => { - return sql.Trim().TrimEnd(';')+ $"returning {name} "; + return sql.Trim().TrimEnd(';') + $"returning {name} "; }; public override string ToSqlString() { @@ -47,7 +48,7 @@ namespace SqlSugar.TDSQLForPGODBC string columnsString = string.Join(",", groupList.First().Select(it => Builder.GetTranslationColumnName(it.DbColumnName))); if (isSingle) { - string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it =>base.GetDbColumn(it, Builder.SqlParameterKeyWord + it.DbColumnName))); + string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => base.GetDbColumn(it, Builder.SqlParameterKeyWord + it.DbColumnName))); ActionMinDate(); return GetIgnoreSql(string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString)); } @@ -56,7 +57,7 @@ namespace SqlSugar.TDSQLForPGODBC StringBuilder batchInsetrSql = new StringBuilder(); int pageSize = 200; int pageIndex = 1; - if (IsNoPage&&IsReturnPkList) + if (IsNoPage && IsReturnPkList) { pageSize = groupList.Count; } @@ -75,7 +76,7 @@ namespace SqlSugar.TDSQLForPGODBC } batchInsetrSql.Append("\r\n ( " + string.Join(",", columns.Select(it => { - if (it.InsertServerTime || it.InsertSql.HasValue()||it.SqlParameterDbType is Type|| it?.PropertyType?.Name=="DateOnly" || it?.PropertyType?.Name == "TimeOnly") + if (it.InsertServerTime || it.InsertSql.HasValue() || it.SqlParameterDbType is Type || it?.PropertyType?.Name == "DateOnly" || it?.PropertyType?.Name == "TimeOnly") { return GetDbColumn(it, null); } @@ -84,18 +85,22 @@ namespace SqlSugar.TDSQLForPGODBC { var date = ((DateTime)it.Value); value = date.ToString("O"); - if (date==DateTime.MaxValue) + if (date == DateTime.MaxValue) { value = "9999-12-31T23:59:59.999999"; } } - else if (it.Value is DateTimeOffset) + else if (it.Value is DateTimeOffset) { return FormatDateTimeOffset(it.Value); } - else if (it.IsArray&&it.Value!=null) + else if (it.Value is decimal v) { - return FormatValue(it.Value,it.PropertyName,i,it); + return v.ToString(CultureInfo.InvariantCulture); + } + else if (it.IsArray && it.Value != null) + { + return FormatValue(it.Value, it.PropertyName, i, it); } else if (it.Value is byte[]) { @@ -105,7 +110,7 @@ namespace SqlSugar.TDSQLForPGODBC { value = it.Value; } - if (value == null||value==DBNull.Value) + if (value == null || value == DBNull.Value) { return string.Format(SqlTemplateBatchSelect, "NULL"); } @@ -114,7 +119,7 @@ namespace SqlSugar.TDSQLForPGODBC ++i; } pageIndex++; - batchInsetrSql.Remove(batchInsetrSql.Length - 1,1).Append("\r\n;\r\n"); + batchInsetrSql.Remove(batchInsetrSql.Length - 1, 1).Append("\r\n;\r\n"); } return GetIgnoreSql(batchInsetrSql.ToString()); } @@ -129,9 +134,9 @@ namespace SqlSugar.TDSQLForPGODBC else { var type = value.GetType(); - if (type == UtilConstants.ByteArrayType||type == UtilConstants.DateType || columnInfo.IsArray || columnInfo.IsJson) + if (type == UtilConstants.ByteArrayType || type == UtilConstants.DateType || columnInfo.IsArray || columnInfo.IsJson) { - var parameterName = this.Builder.SqlParameterKeyWord + name + i; + var parameterName = this.Builder.SqlParameterKeyWord + name + "_" + i; var paramter = new SugarParameter(parameterName, value); if (columnInfo.IsJson) { @@ -172,17 +177,82 @@ namespace SqlSugar.TDSQLForPGODBC { return "'" + value.ToString().ToSqlFilter() + "'"; } + else if (value is decimal v) + { + return v.ToString(CultureInfo.InvariantCulture); + } else { return "'" + value.ToString() + "'"; } } } + public override object FormatValue(object value) + { + var N = string.Empty; + if (value == null) + { + return "NULL"; + } + else + { + var type = UtilMethods.GetUnderType(value.GetType()); + if (type == UtilConstants.DateType) + { + var date = value.ObjToDate(); + if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig)) + { + date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig); + } + return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; + } + else if (type == UtilConstants.ByteArrayType) + { + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); + return bytesString; + } + else if (type.IsEnum()) + { + if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true) + { + return value.ToSqlValue(); + } + else + { + return Convert.ToInt64(value); + } + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) + { + return N + "'" + value.ToString().ToSqlFilter() + "'"; + } + else if (type == UtilConstants.DateTimeOffsetType) + { + return FormatDateTimeOffset(value); + } + else if (type == UtilConstants.FloatType) + { + return N + "'" + Convert.ToDouble(value).ToString() + "'"; + } + else if (value is decimal v) + { + return v.ToString(CultureInfo.InvariantCulture); + } + else + { + return N + "'" + value.ToString() + "'"; + } + } + } public override string FormatDateTimeOffset(object value) { return "'" + ((DateTimeOffset)value).ToString("o") + "'"; } - + private string GetIgnoreSql(string sql) { if (this.ConflictNothing?.Any() == true) diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCUpdateBuilder.cs index 83e1b4719..f60158385 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCUpdateBuilder.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; @@ -34,7 +35,7 @@ namespace SqlSugar.TDSQLForPGODBC } } - public object FormatValue(object value,string name,int i,DbColumnInfo columnInfo) + public object FormatValue(object value, string name, int i, DbColumnInfo columnInfo) { if (value == null) { @@ -42,16 +43,16 @@ namespace SqlSugar.TDSQLForPGODBC } else { - var type =UtilMethods.GetUnderType(value.GetType()); - if (type == UtilConstants.ByteArrayType||type == UtilConstants.DateType||columnInfo.IsArray||columnInfo.IsJson) + var type = UtilMethods.GetUnderType(value.GetType()); + if (type == UtilConstants.ByteArrayType || type == UtilConstants.DateType || columnInfo.IsArray || columnInfo.IsJson) { - var parameterName = this.Builder.SqlParameterKeyWord + name + i; + var parameterName = this.Builder.SqlParameterKeyWord + name + "_" + i; var paramter = new SugarParameter(parameterName, value); - if (columnInfo.IsJson) + if (columnInfo.IsJson) { paramter.IsJson = true; } - if (columnInfo.IsArray) + if (columnInfo.IsArray) { paramter.IsArray = true; } @@ -86,6 +87,10 @@ namespace SqlSugar.TDSQLForPGODBC { return "'" + value.ToString().ToSqlFilter() + "'"; } + else if (value is decimal v) + { + return v.ToString(CultureInfo.InvariantCulture); + } else { return "'" + value.ToString() + "'"; @@ -133,7 +138,7 @@ namespace SqlSugar.TDSQLForPGODBC batchUpdateSql.AppendFormat(SqlTemplateBatch.ToString(), setValues, GetTableNameStringNoWith, TableWithString); int i = 0; var tableColumnList = this.Context.DbMaintenance.GetColumnInfosByTableName(GetTableNameStringNoWith); - + foreach (var columns in groupList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList()) { var isFirst = i == 0; @@ -145,11 +150,12 @@ namespace SqlSugar.TDSQLForPGODBC { var columnInfo = tableColumnList.FirstOrDefault(x => x.DbColumnName.Equals(it.DbColumnName, StringComparison.OrdinalIgnoreCase)); var dbType = columnInfo?.DataType; - if (dbType == null) { + if (dbType == null) + { var typeName = it.PropertyType.Name.ToLower(); - if (columnInfo==null&&it.PropertyType.IsEnum) + if (columnInfo == null && it.PropertyType.IsEnum) { - if (this.Context.CurrentConnectionConfig?.MoreSettings?.TableEnumIsString!=true) + if (this.Context.CurrentConnectionConfig?.MoreSettings?.TableEnumIsString != true) { typeName = "int"; } @@ -163,20 +169,21 @@ namespace SqlSugar.TDSQLForPGODBC if (typeName == "boolean") typeName = "bool"; - var isAnyType = TDSQLForPGODBCDbBind.MappingTypesConst.Where(x => x.Value.ToString().ToLower() == typeName).Any(); + var isAnyType = PostgreSQLDbBind.MappingTypesConst.Where(x => x.Value.ToString().ToLower() == typeName).Any(); if (isAnyType) { - dbType = TDSQLForPGODBCDbBind.MappingTypesConst.Where(x => x.Value.ToString().ToLower() == typeName).FirstOrDefault().Key; + dbType = PostgreSQLDbBind.MappingTypesConst.Where(x => x.Value.ToString().ToLower() == typeName).FirstOrDefault().Key; } - else { + else + { dbType = "varchar"; } } - if(it?.PropertyType?.FullName == "NetTopologySuite.Geometries.Geometry") + if (it?.PropertyType?.FullName == "NetTopologySuite.Geometries.Geometry") { return string.Format(" {0} ", base.GetDbColumn(it, FormatValue(it.Value, it.DbColumnName, i + (pageIndex - 1) * 100000, it)), dbType); } - return string.Format("CAST({0} AS {1})", base.GetDbColumn(it,FormatValue(it.Value,it.DbColumnName,i+(pageIndex-1)*100000,it)), dbType); + return string.Format("CAST({0} AS {1})", base.GetDbColumn(it, FormatValue(it.Value, it.DbColumnName, i + (pageIndex - 1) * 100000, it)), dbType); })) + ")"); ++i; @@ -224,7 +231,7 @@ namespace SqlSugar.TDSQLForPGODBC } else { - if (item.Value?.Sql?.StartsWith("( CASE WHEN")==true) + if (item.Value?.Sql?.StartsWith("( CASE WHEN") == true) { result = result.Replace($"{dbColumnName}=T.{dbColumnName}", $"{dbColumnName}={item.Value.Sql.Replace(" \"", $" {Builder.GetTranslationColumnName(this.TableName)}.\"")}"); } @@ -241,22 +248,22 @@ namespace SqlSugar.TDSQLForPGODBC } protected override string GetJoinUpdate(string columnsString, ref string whereString) { - if (this.JoinInfos?.Count > 1) + if (this.JoinInfos?.Count > 1) { - return this.GetJoinUpdateMany(columnsString,whereString); + return this.GetJoinUpdateMany(columnsString, whereString); } var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} "; var joinString = ""; foreach (var item in this.JoinInfos) { - whereString += " AND "+item.JoinWhere; + whereString += " AND " + item.JoinWhere; joinString += $"\r\n FROM {Builder.GetTranslationColumnName(item.TableName)} {Builder.GetTranslationColumnName(item.ShortName)} "; } var tableName = formString + "\r\n "; - columnsString = columnsString.Replace(Builder.GetTranslationColumnName(this.ShortName)+".","")+joinString; + columnsString = columnsString.Replace(Builder.GetTranslationColumnName(this.ShortName) + ".", "") + joinString; return string.Format(SqlTemplate, tableName, columnsString, whereString); } - private string GetJoinUpdateMany(string columnsString,string where) + private string GetJoinUpdateMany(string columnsString, string where) { var formString = $" {Builder.GetTranslationColumnName(this.TableName)} AS {Builder.GetTranslationColumnName(this.ShortName)} "; var joinString = ""; diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/QueryableFormat.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/QueryableFormat.cs new file mode 100644 index 000000000..b940cdac2 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/QueryableFormat.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar.TDSQLForPGODBC +{ + internal class QueryableFormat + { + public Type Type { get; set; } + public string TypeString { get; set; } + public string Format { get; set; } + public string PropertyName { get; set; } + public string MethodName { get; set; } + public MethodInfo MethodInfo { get; set; } + } +} diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/UtilMethods.cs index c8e6a3e05..2a8ab2cf2 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/Tools/UtilMethods.cs @@ -253,7 +253,71 @@ namespace SqlSugar.TDSQLForPGODBC value = value.TrimEnd(' ').TrimEnd('1').TrimEnd('='); return value; } + /// + /// Available only in Select,Handles logic that cannot be completed by an expression + /// + /// + /// + /// + internal static object GetFormatValue(object addValue, QueryableFormat valueFomatInfo) + { + if (valueFomatInfo.MethodName == "ToString") + { + if (valueFomatInfo.Type == UtilConstants.GuidType) + { + addValue = Guid.Parse(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.ByteType) + { + addValue = Convert.ToByte(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.IntType) + { + addValue = Convert.ToInt32(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.LongType) + { + addValue = Convert.ToInt64(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.UIntType) + { + addValue = Convert.ToUInt32(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.ULongType) + { + addValue = Convert.ToUInt64(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.DecType) + { + addValue = Convert.ToDecimal(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.Type == UtilConstants.DobType) + { + addValue = Convert.ToDouble(addValue + "").ToString(valueFomatInfo.Format); + } + else if (valueFomatInfo.TypeString == "Enum") + { + addValue = ChangeType2(addValue, valueFomatInfo.Type)?.ToString(); + } + } + else if (valueFomatInfo.MethodName == "OnlyInSelectConvertToString") + { + var methodInfo = valueFomatInfo.MethodInfo; + if (methodInfo != null) + { + // 如果方法是静态的,传递null作为第一个参数,否则传递类的实例 + object instance = methodInfo.IsStatic ? null : Activator.CreateInstance(methodInfo.ReflectedType); + + // 创建一个包含参数值的object数组 + object[] parameters = new object[] { addValue }; + + // 调用方法 + addValue = methodInfo.Invoke(instance, parameters); + } + } + return addValue; + } public static int CountSubstringOccurrences(string mainString, string searchString) { string[] substrings = mainString.Split(new string[] { searchString }, StringSplitOptions.None); @@ -542,6 +606,10 @@ namespace SqlSugar.TDSQLForPGODBC return result; } } + else if (value is byte[] bytes && bytes.Length == 1 && destinationType == typeof(char)) + { + return (char)(bytes)[0]; + } var destinationConverter = TypeDescriptor.GetConverter(destinationType); if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType())) return destinationConverter.ConvertFrom(null, culture, value); @@ -1336,6 +1404,14 @@ namespace SqlSugar.TDSQLForPGODBC { return Convert.ToInt64(item.FieldValue); } + else if (item.CSharpTypeName.EqualCase("float")) + { + return Convert.ToSingle(item.FieldValue); + } + else if (item.CSharpTypeName.EqualCase("single")) + { + return Convert.ToSingle(item.FieldValue); + } else if (item.CSharpTypeName.EqualCase("short")) { return Convert.ToInt16(item.FieldValue); @@ -1511,10 +1587,11 @@ namespace SqlSugar.TDSQLForPGODBC } public static string GetSqlString(ConnectionConfig connectionConfig, KeyValuePair> sqlObj) { + var guid = Guid.NewGuid() + ""; 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)) { @@ -1580,23 +1657,23 @@ namespace SqlSugar.TDSQLForPGODBC result = result.Replace(item.ParameterName, (Convert.ToBoolean(item.Value) ? 1 : 0) + ""); } } - else if (item.Value.GetType() != UtilConstants.StringType && connectionConfig.DbType == DbType.PostgreSQL && TDSQLForPGODBCDbBind.MappingTypesConst.Any(x => x.Value.ToString().EqualCase(item.Value.GetType().Name))) + else if (item.Value.GetType() != UtilConstants.StringType && connectionConfig.DbType == DbType.PostgreSQL && PostgreSQLDbBind.MappingTypesConst.Any(x => x.Value.ToString().EqualCase(item.Value.GetType().Name))) { - var type = TDSQLForPGODBCDbBind.MappingTypesConst.First(x => x.Value.ToString().EqualCase(item.Value.GetType().Name)).Key; + var type = PostgreSQLDbBind.MappingTypesConst.First(x => x.Value.ToString().EqualCase(item.Value.GetType().Name)).Key; var replaceValue = string.Format("CAST('{0}' AS {1})", item.Value, type); result = result.Replace(item.ParameterName, replaceValue); } else if (connectionConfig.MoreSettings?.DisableNvarchar == true || item.DbType == System.Data.DbType.AnsiString || connectionConfig.DbType == DbType.Sqlite) { - result = result.Replace(item.ParameterName, $"'{item.Value.ObjToString().ToSqlFilter()}'"); + result = result.Replace(item.ParameterName, $"'{item.Value.ObjToString().Replace("@", guid).ToSqlFilter()}'"); } else { - result = result.Replace(item.ParameterName, $"N'{item.Value.ObjToString().ToSqlFilter()}'"); + result = result.Replace(item.ParameterName, $"N'{item.Value.ObjToString().Replace("@", guid).ToSqlFilter()}'"); } } } - + result = result.Replace(guid, "@"); return result; } public static string ByteArrayToPostgreByteaLiteral(byte[] data) @@ -1751,5 +1828,10 @@ namespace SqlSugar.TDSQLForPGODBC } return true; } + + internal static ConnMoreSettings GetMoreSetting(ExpressionContext context) + { + return context?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings ?? new ConnMoreSettings(); + } } }