TDSQLForPGODBC同步PGSQL修改

This commit is contained in:
guoshun.du
2025-05-06 10:34:06 +08:00
parent 842e69b733
commit 9fb3576bce
7 changed files with 255 additions and 63 deletions

View File

@@ -18,6 +18,66 @@ namespace SqlSugar.TDSQLForPGODBC
{
public class UtilMethods
{
public static string EscapeLikeValue(ISqlSugarClient db, string value, char wildcard = '%')
{
var dbType = db.CurrentConnectionConfig.DbType;
if (db.CurrentConnectionConfig?.MoreSettings?.DatabaseModel != null)
{
dbType = db.CurrentConnectionConfig.MoreSettings.DatabaseModel.Value;
}
if (string.IsNullOrEmpty(value))
return value;
string wildcardStr = wildcard.ToString();
switch (dbType)
{
// 支持标准 SQL LIKE 转义,通常使用中括号 [] 或反斜杠 \ 进行转义
case DbType.SqlServer:
case DbType.Access:
case DbType.Odbc:
case DbType.TDSQLForPGODBC:
// SQL Server 使用中括号转义 %, _ 等
value = value.Replace("[", "[[]")
.Replace("]", "[]]")
.Replace(wildcardStr, $"[{wildcard}]");
break;
// PostgreSQL 风格数据库,使用反斜杠进行 LIKE 转义
case DbType.PostgreSQL:
case DbType.OpenGauss:
case DbType.TDSQL:
case DbType.GaussDB:
case DbType.GaussDBNative:
// MySQL 和兼容库,使用反斜杠进行转义
case DbType.MySql:
case DbType.MySqlConnector:
case DbType.Tidb:
case DbType.PolarDB:
case DbType.OceanBase:
case DbType.Oracle:
case DbType.OceanBaseForOracle:
case DbType.HG:
case DbType.Dm:
case DbType.GBase:
case DbType.DB2:
case DbType.HANA:
case DbType.GoldenDB:
case DbType.Sqlite:
case DbType.DuckDB:
case DbType.QuestDB:
case DbType.Doris:
case DbType.Xugu:
case DbType.Vastbase:
default:
value = value
.Replace(wildcardStr, "\\\\" + wildcard);
break;
}
return value;
}
public static List<SugarParameter> CopySugarParameters(List<SugarParameter> pars)
{
@@ -193,6 +253,14 @@ namespace SqlSugar.TDSQLForPGODBC
var p = ParameterConverter.Invoke(obj, new object[] { value, 100 + index }) as SugarParameter;
return p;
}
internal static object QueryConverter(int index, ISqlSugarClient db, IDataReader dataReader, EntityInfo entity, EntityColumnInfo columnInfo)
{
var type = columnInfo.SqlParameterDbType as Type;
var ParameterConverter = type.GetMethod("QueryConverter").MakeGenericMethod(columnInfo.PropertyInfo.PropertyType);
var obj = Activator.CreateInstance(type);
var p = ParameterConverter.Invoke(obj, new object[] { dataReader, index });
return p;
}
internal static bool IsErrorParameterName(ConnectionConfig connectionConfig, DbColumnInfo columnInfo)
{
return connectionConfig.MoreSettings?.IsCorrectErrorSqlParameterName == true &&
@@ -610,6 +678,14 @@ namespace SqlSugar.TDSQLForPGODBC
{
return (char)(bytes)[0];
}
else if (value is DateTime && destinationType == typeof(TimeSpan))
{
value = Convert.ToDateTime(value).TimeOfDay;
}
else if (value is DateTime && destinationType.FullName == "System.TimeOnly")
{
value = Convert.ToDateTime(value).TimeOfDay;
}
var destinationConverter = TypeDescriptor.GetConverter(destinationType);
if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType()))
return destinationConverter.ConvertFrom(null, culture, value);
@@ -722,7 +798,8 @@ namespace SqlSugar.TDSQLForPGODBC
DisableQueryWhereColumnRemoveTrim = it.MoreSettings.DisableQueryWhereColumnRemoveTrim,
DatabaseModel = it.MoreSettings.DatabaseModel,
EnableILike = it.MoreSettings.EnableILike,
ClickHouseEnableFinal = it.MoreSettings.ClickHouseEnableFinal
ClickHouseEnableFinal = it.MoreSettings.ClickHouseEnableFinal,
PgSqlIsAutoToLowerSchema = it.MoreSettings.PgSqlIsAutoToLowerSchema
},
SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle