Merge branch 'master' of gitee.com:dotnetchina/SqlSugar

This commit is contained in:
sunkaixuan 2025-05-06 10:57:38 +08:00
commit 7c47ea4984
12 changed files with 1915 additions and 209 deletions

View File

@ -72,14 +72,14 @@ namespace SqlSugar.OceanBaseForOracle
} }
} }
} }
public override string GetLimit()
{
return "AND ROWNUM=1";
}
} }
public partial class OceanBaseForOracleMethod : DefaultDbMethod, IDbMethods public partial class OceanBaseForOracleMethod : DefaultDbMethod, IDbMethods
{ {
public override string IsNullOrEmpty(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
return string.Format("( {0} IS NULL )", parameter.MemberName);
}
public override string WeekOfYear(MethodCallExpressionModel mode) public override string WeekOfYear(MethodCallExpressionModel mode)
{ {
var parameterNameA = mode.Args[0].MemberName; var parameterNameA = mode.Args[0].MemberName;
@ -104,7 +104,14 @@ namespace SqlSugar.OceanBaseForOracle
} }
public override string GetStringJoinSelector(string result, string separator) public override string GetStringJoinSelector(string result, string separator)
{ {
return $"listagg(to_char({result}),'{separator}') within group(order by {result}) "; if (result.Contains(","))
{
return $"listagg(to_char({result.Split(',').First()}),'{separator}') within group(order by {result.Split(',').Last()}) ";
}
else
{
return $"listagg(to_char({result}),'{separator}') within group(order by {result}) ";
}
} }
public override string HasValue(MethodCallExpressionModel model) public override string HasValue(MethodCallExpressionModel model)
{ {
@ -211,8 +218,10 @@ namespace SqlSugar.OceanBaseForOracle
return string.Format("(CAST(TO_CHAR({0},'mi') AS NUMBER))", parameter.MemberName); return string.Format("(CAST(TO_CHAR({0},'mi') AS NUMBER))", parameter.MemberName);
case DateType.Millisecond: case DateType.Millisecond:
return string.Format("(CAST(TO_CHAR({0},'ff3') AS NUMBER))", parameter.MemberName); return string.Format("(CAST(TO_CHAR({0},'ff3') AS NUMBER))", parameter.MemberName);
case DateType.Quarter:
return string.Format("(CAST(TO_CHAR({0},'q') AS NUMBER))", parameter.MemberName);
case DateType.Weekday: case DateType.Weekday:
return $" to_char({parameter.MemberName},'day') "; return $" (TO_NUMBER(TO_CHAR({parameter.MemberName}, 'D'))-1) ";
case DateType.Day: case DateType.Day:
default: default:
return string.Format("(CAST(TO_CHAR({0},'dd') AS NUMBER))", parameter.MemberName); return string.Format("(CAST(TO_CHAR({0},'dd') AS NUMBER))", parameter.MemberName);
@ -275,6 +284,7 @@ namespace SqlSugar.OceanBaseForOracle
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format(" TO_TIMESTAMP({0}, 'YYYY-MM-DD HH24:MI:SS.FF') ", parameter.MemberName); return string.Format(" TO_TIMESTAMP({0}, 'YYYY-MM-DD HH24:MI:SS.FF') ", parameter.MemberName);
} }
public override string ToDateShort(MethodCallExpressionModel model) public override string ToDateShort(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
@ -311,7 +321,47 @@ namespace SqlSugar.OceanBaseForOracle
} }
public override string DateIsSameByType(MethodCallExpressionModel model) public override string DateIsSameByType(MethodCallExpressionModel model)
{ {
throw new NotSupportedException("Oracle NotSupportedException DateIsSameDay"); var parameter = model.Args[0];
var parameter2 = model.Args[1];
var parameter3 = model.Args[2];
var dateType = parameter3.MemberValue.ObjToString().ToLower();
var date1 = parameter.MemberName;
var date2 = parameter2.MemberName;
if (dateType == "year")
{
return string.Format("(EXTRACT(YEAR FROM {0}) = EXTRACT(YEAR FROM {1}))", date1, date2);
}
else if (dateType == "month")
{
return string.Format("(EXTRACT(YEAR FROM {0}) = EXTRACT(YEAR FROM {1}) AND EXTRACT(MONTH FROM {0}) = EXTRACT(MONTH FROM {1}))", date1, date2);
}
else if (dateType == "day")
{
return string.Format("(TRUNC({0}) = TRUNC({1}))", date1, date2);
}
else if (dateType == "hour")
{
return string.Format("(TRUNC({0}, 'HH24') = TRUNC({1}, 'HH24'))", date1, date2);
}
else if (dateType == "minute")
{
return string.Format("(TRUNC({0}, 'MI') = TRUNC({1}, 'MI'))", date1, date2);
}
else if (dateType == "second")
{
return string.Format("(TRUNC({0}, 'SS') = TRUNC({1}, 'SS'))", date1, date2);
}
else if (dateType == "week" || dateType == "weekday")
{
return string.Format("(TRUNC({0}, 'IW') = TRUNC({1}, 'IW'))", date1, date2);
}
else
{
// 默认按天比较
return string.Format("(TRUNC({0}) = TRUNC({1}))", date1, date2);
}
} }
public override string Length(MethodCallExpressionModel model) public override string Length(MethodCallExpressionModel model)
{ {
@ -380,7 +430,28 @@ namespace SqlSugar.OceanBaseForOracle
{ {
var parameterNameA = mode.Args[0].MemberName; var parameterNameA = mode.Args[0].MemberName;
var parameterNameB = mode.Args[1].MemberName; var parameterNameB = mode.Args[1].MemberName;
return $" SUBSTR({parameterNameA}, -2, {parameterNameB}) "; return $" SUBSTR({parameterNameA}, (LENGTH({parameterNameA})-2), {parameterNameB}) ";
}
public override string Ceil(MethodCallExpressionModel mode)
{
var parameterNameA = mode.Args[0].MemberName;
return $" CEIL({parameterNameA}) ";
}
public override string NewUid(MethodCallExpressionModel mode)
{
return " SUBSTR(LOWER(RAWTOHEX(SYS_GUID())), 1, 8) ||\r\n '-' ||\r\n SUBSTR(LOWER(RAWTOHEX(SYS_GUID())), 9, 4) ||\r\n '-' ||\r\n SUBSTR(LOWER(RAWTOHEX(SYS_GUID())), 13, 4) ||\r\n '-' ||\r\n SUBSTR(LOWER(RAWTOHEX(SYS_GUID())), 17, 4) ||\r\n '-' ||\r\n SUBSTR(LOWER(RAWTOHEX(SYS_GUID())), 21) ";
}
public override string FullTextContains(MethodCallExpressionModel mode)
{
var columns = mode.Args[0].MemberName;
if (mode.Args[0].MemberValue is List<string>)
{
columns = "(" + string.Join(",", mode.Args[0].MemberValue as List<string>) + ")";
}
var searchWord = mode.Args[1].MemberName;
return $" CONTAINS({columns}, {searchWord}, 1) ";
} }
} }
} }

View File

@ -37,7 +37,7 @@ namespace SqlSugar.OceanBaseForOracle
{ {
var isFirst = pkList.First() == item; var isFirst = pkList.First() == item;
var whereString = isFirst ? " " : " AND "; var whereString = isFirst ? " " : " AND ";
whereString += GetOracleUpdateColums(item); whereString += GetOracleUpdateColums(item, true);
whereList.Add(whereString); whereList.Add(whereString);
} }
return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("", whereList)); return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("", whereList));
@ -46,9 +46,15 @@ namespace SqlSugar.OceanBaseForOracle
return sb.ToString(); return sb.ToString();
} }
private string GetOracleUpdateColums(DbColumnInfo m) private string GetOracleUpdateColums(DbColumnInfo m, bool isWhere = false)
{ {
return string.Format("\"{0}\"={1} ", m.DbColumnName.ToUpper(IsUppper), base.GetDbColumn(m, FormatValue(m.Value, m.IsPrimarykey, m.PropertyName)));
var result = string.Format("\"{0}\"={1} ", m.DbColumnName.ToUpper(IsUppper), base.GetDbColumn(m, FormatValue(m.Value, m.IsPrimarykey, m.PropertyName)));
if (isWhere && m.Value == null)
{
result = result.Replace("=NULL ", " is NULL ");
}
return result;
} }
int i = 0; int i = 0;
public object FormatValue(object value, bool isPrimaryKey, string name) public object FormatValue(object value, bool isPrimaryKey, string name)

View File

@ -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.OceanBaseForOracle
{
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; }
}
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Dynamic; using System.Dynamic;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Text; using System.Text;
namespace SqlSugar.OceanBaseForOracle namespace SqlSugar.OceanBaseForOracle
{ {
@ -10,17 +11,22 @@ namespace SqlSugar.OceanBaseForOracle
public const string Dot = "."; public const string Dot = ".";
public const char DotChar = '.'; public const char DotChar = '.';
internal const string Space = " "; internal const string Space = " ";
internal const char SpaceChar =' '; internal const char SpaceChar = ' ';
internal const string AssemblyName = "SqlSugar"; internal const string AssemblyName = "SqlSugar.OceanBaseForOracle";
internal const string ReplaceKey = "{662E689B-17A1-4D06-9D27-F29EAB8BC3D6}"; internal static string ReplaceKey = "{" + Guid.NewGuid() + "}";
internal const string ReplaceCommaKey = "{112A689B-17A1-4A06-9D27-A39EAB8BC3D5}"; internal const string ReplaceCommaKey = "{112A689B-17A1-4A06-9D27-A39EAB8BC3D5}";
internal const string GroupReplaceKey = "{GroupReplaceKey_l33asdysaas1231s}";
internal static Type UShortType = typeof(ushort);
internal static Type ULongType = typeof(ulong);
internal static Type UIntType = typeof(uint);
internal static Type IntType = typeof(int); internal static Type IntType = typeof(int);
internal static Type LongType = typeof(long); internal static Type LongType = typeof(long);
internal static Type GuidType = typeof(Guid); internal static Type GuidType = typeof(Guid);
internal static Type BoolType = typeof(bool); internal static Type BoolType = typeof(bool);
internal static Type BoolTypeNull = typeof(bool?); internal static Type BoolTypeNull = typeof(bool?);
internal static Type ByteType = typeof(Byte); internal static Type ByteType = typeof(Byte);
internal static Type SByteType = typeof(sbyte);
internal static Type ObjType = typeof(object); internal static Type ObjType = typeof(object);
internal static Type DobType = typeof(double); internal static Type DobType = typeof(double);
internal static Type FloatType = typeof(float); internal static Type FloatType = typeof(float);
@ -31,7 +37,7 @@ namespace SqlSugar.OceanBaseForOracle
internal static Type DateTimeOffsetType = typeof(DateTimeOffset); internal static Type DateTimeOffsetType = typeof(DateTimeOffset);
internal static Type TimeSpanType = typeof(TimeSpan); internal static Type TimeSpanType = typeof(TimeSpan);
internal static Type ByteArrayType = typeof(byte[]); internal static Type ByteArrayType = typeof(byte[]);
internal static Type ModelType= typeof(ModelContext); internal static Type ModelType = typeof(ModelContext);
internal static Type DynamicType = typeof(ExpandoObject); internal static Type DynamicType = typeof(ExpandoObject);
internal static Type Dicii = typeof(KeyValuePair<int, int>); internal static Type Dicii = typeof(KeyValuePair<int, int>);
internal static Type DicIS = typeof(KeyValuePair<int, string>); internal static Type DicIS = typeof(KeyValuePair<int, string>);
@ -42,6 +48,8 @@ namespace SqlSugar.OceanBaseForOracle
internal static Type DicArraySS = typeof(Dictionary<string, string>); internal static Type DicArraySS = typeof(Dictionary<string, string>);
internal static Type DicArraySO = typeof(Dictionary<string, object>); internal static Type DicArraySO = typeof(Dictionary<string, object>);
public static Type SqlConvertType = typeof(SqlSugar.DbConvert.NoParameterCommonPropertyConvert);
public static Type SugarType = typeof(SqlSugarProvider); public static Type SugarType = typeof(SqlSugarProvider);
@ -56,7 +64,7 @@ namespace SqlSugar.OceanBaseForOracle
typeof(short), typeof(short),
typeof(ushort), typeof(ushort),
}; };
//internal static CultureInfo EnCultureInfo = new CultureInfo("en");
internal static string[] DateTypeStringList = new string[] internal static string[] DateTypeStringList = new string[]
{ {
@ -69,5 +77,8 @@ namespace SqlSugar.OceanBaseForOracle
"Millisecond", "Millisecond",
"Date" "Date"
}; };
public static ConstantExpression ExpTrue = Expression.Constant(true);
public static ConstantExpression ExpFalse = Expression.Constant(false);
} }
} }

View File

@ -8,6 +8,7 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
public override string GetDbTypeName(string csharpTypeName) public override string GetDbTypeName(string csharpTypeName)
{ {
csharpTypeName = GetValidCsharpTypeName(csharpTypeName);
if (csharpTypeName == UtilConstants.ByteArrayType.Name) if (csharpTypeName == UtilConstants.ByteArrayType.Name)
return "bytea"; return "bytea";
if (csharpTypeName.ToLower() == "int32") if (csharpTypeName.ToLower() == "int32")
@ -26,18 +27,38 @@ namespace SqlSugar.TDSQLForPGODBC
else else
return "varchar"; return "varchar";
} }
private string GetValidCsharpTypeName(string csharpTypeName)
{
if (csharpTypeName?.StartsWith("ora") == true && this.Context.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase)
{
csharpTypeName = csharpTypeName.Replace("ora", "");
}
else if (csharpTypeName?.StartsWith("mssql_") == true && this.Context.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase)
{
csharpTypeName = csharpTypeName.Replace("mssql_", "");
}
else if (csharpTypeName?.StartsWith("sys.") == true)
{
csharpTypeName = csharpTypeName.Replace("sys.", "");
}
return csharpTypeName;
}
public override string GetPropertyTypeName(string dbTypeName) public override string GetPropertyTypeName(string dbTypeName)
{ {
dbTypeName = dbTypeName.ToLower(); dbTypeName = dbTypeName.ToLower();
dbTypeName = GetValidCsharpTypeName(dbTypeName);
var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName || it.Key.ToLower() == dbTypeName); var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName || it.Key.ToLower() == dbTypeName);
if (propertyTypes == null) if (propertyTypes == null)
{ {
return "other"; return "other";
} }
else if (dbTypeName == "xml" || dbTypeName == "string"|| dbTypeName == "jsonb"|| dbTypeName == "json") else if (dbTypeName == "xml" || dbTypeName == "string" || dbTypeName == "jsonb" || dbTypeName == "json")
{ {
return "string"; return "string";
}else if (dbTypeName == "bpchar")//数据库char datatype 查询出来的时候是 bpchar }
else if (dbTypeName == "bpchar")//数据库char datatype 查询出来的时候是 bpchar
{ {
return "char"; return "char";
} }
@ -50,7 +71,11 @@ namespace SqlSugar.TDSQLForPGODBC
if (dbTypeName.StartsWith("_")) if (dbTypeName.StartsWith("_"))
{ {
var dbTypeName2 = dbTypeName.TrimStart('_'); var dbTypeName2 = dbTypeName.TrimStart('_');
return MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName2 || it.Key.ToLower() == dbTypeName2).Select(it => it.Value + "[]").First(); return MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName2 || it.Key.ToLower() == dbTypeName2).Select(it => it.Value + "[]").First();
}
else if (dbTypeName.EndsWith("geometry") || dbTypeName.EndsWith("geography"))
{
return CSharpDataType.@string.ToString();
} }
Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName)); Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName));
return null; return null;
@ -146,7 +171,16 @@ namespace SqlSugar.TDSQLForPGODBC
new KeyValuePair<string, CSharpDataType>("time",CSharpDataType.TimeSpan), new KeyValuePair<string, CSharpDataType>("time",CSharpDataType.TimeSpan),
new KeyValuePair<string, CSharpDataType>("public.geometry",CSharpDataType.@object), new KeyValuePair<string, CSharpDataType>("public.geometry",CSharpDataType.@object),
new KeyValuePair<string, CSharpDataType>("public.geography",CSharpDataType.@object), new KeyValuePair<string, CSharpDataType>("public.geography",CSharpDataType.@object),
new KeyValuePair<string, CSharpDataType>("inet",CSharpDataType.@object) new KeyValuePair<string, CSharpDataType>("inet",CSharpDataType.@object),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@int),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@float),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@short),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@byte),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@double),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@long),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@bool),
new KeyValuePair<string, CSharpDataType>("number",CSharpDataType.@decimal),
}; };
public override List<string> StringThrow public override List<string> StringThrow
{ {

View File

@ -30,8 +30,11 @@ namespace SqlSugar.TDSQLForPGODBC
col_description(pclass.oid, pcolumn.ordinal_position) as ColumnDescription, col_description(pclass.oid, pcolumn.ordinal_position) as ColumnDescription,
case when pkey.colname = pcolumn.column_name case when pkey.colname = pcolumn.column_name
then true else false end as IsPrimaryKey, then true else false end as IsPrimaryKey,
case when pcolumn.column_default like 'nextval%' CASE
then true else false end as IsIdentity, WHEN (current_setting('server_version_num')::INT >= 100000 AND pcolumn.is_identity = 'YES') THEN true
WHEN pcolumn.column_default LIKE 'nextval%' THEN true
ELSE false
END AS IsIdentity,
case when pcolumn.is_nullable = 'YES' case when pcolumn.is_nullable = 'YES'
then true else false end as IsNullable then true else false end as IsNullable
from (select * from pg_tables where upper(tablename) = upper('{0}') and schemaname='" + schema + @"') ptables inner join pg_class pclass from (select * from pg_tables where upper(tablename) = upper('{0}') and schemaname='" + schema + @"') ptables inner join pg_class pclass
@ -70,7 +73,7 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
get get
{ {
return @"select table_name as name from information_schema.views where table_schema ='" + GetSchema()+"' "; return @"select table_name as name from information_schema.views where table_schema ='" + GetSchema() + "' ";
} }
} }
#endregion #endregion
@ -247,6 +250,18 @@ namespace SqlSugar.TDSQLForPGODBC
#endregion #endregion
#region Methods #region Methods
public override bool IsAnyTable(string tableName, bool isCache = true)
{
if (isCache == false)
{
var sql = $" SELECT 1 FROM pg_catalog.pg_tables \r\n WHERE schemaname = '" + GetSchema() + "' \r\n AND Lower(tablename) = '" + tableName.ToLower() + "' ";
return this.Context.Ado.GetInt(sql) > 0;
}
else
{
return base.IsAnyTable(tableName, isCache);
}
}
public override List<string> GetDbTypes() public override List<string> GetDbTypes()
{ {
var result = this.Context.Ado.SqlQuery<string>(@"SELECT DISTINCT data_type var result = this.Context.Ado.SqlQuery<string>(@"SELECT DISTINCT data_type
@ -269,7 +284,7 @@ FROM information_schema.columns");
{ {
return this.Context.Ado.SqlQuery<string>(@"SELECT tgname return this.Context.Ado.SqlQuery<string>(@"SELECT tgname
FROM pg_trigger FROM pg_trigger
WHERE tgrelid = '"+tableName+"'::regclass"); WHERE tgrelid = '" + tableName + "'::regclass");
} }
public override List<string> GetFuncList() public override List<string> GetFuncList()
{ {
@ -287,26 +302,26 @@ WHERE tgrelid = '"+tableName+"'::regclass");
} }
public override bool AddDefaultValue(string tableName, string columnName, string defaultValue) public override bool AddDefaultValue(string tableName, string columnName, string defaultValue)
{ {
if (defaultValue?.StartsWith("'")==true&& defaultValue?.EndsWith("'") == true&& defaultValue?.Contains("(") == false if (defaultValue?.StartsWith("'") == true && defaultValue?.EndsWith("'") == true && defaultValue?.Contains("(") == false
&&!defaultValue.EqualCase("'current_timestamp'") && !defaultValue.EqualCase("'current_date'")) && !defaultValue.EqualCase("'current_timestamp'") && !defaultValue.EqualCase("'current_date'"))
{ {
string sql = string.Format(AddDefaultValueSql,this.SqlBuilder.GetTranslationColumnName( tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue); string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue);
return this.Context.Ado.ExecuteCommand(sql) > 0; return this.Context.Ado.ExecuteCommand(sql) > 0;
} }
else if (defaultValue.EqualCase("current_timestamp") || defaultValue.EqualCase("current_date")) else if (defaultValue.EqualCase("current_timestamp") || defaultValue.EqualCase("current_date"))
{ {
string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue ); string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue);
return this.Context.Ado.ExecuteCommand(sql) > 0; return this.Context.Ado.ExecuteCommand(sql) > 0;
} }
else if (defaultValue?.Contains("(") == false else if (defaultValue?.Contains("(") == false
&& !defaultValue.EqualCase("'current_timestamp'") && !defaultValue.EqualCase("'current_date'")) && !defaultValue.EqualCase("'current_timestamp'") && !defaultValue.EqualCase("'current_date'"))
{ {
string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), "'"+defaultValue+"'"); string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), "'" + defaultValue + "'");
return this.Context.Ado.ExecuteCommand(sql) > 0; return this.Context.Ado.ExecuteCommand(sql) > 0;
} }
else if (defaultValue?.ToLower()?.Contains("cast(") == true && defaultValue?.StartsWith("'") == true && defaultValue?.EndsWith("'") == true) else if (defaultValue?.ToLower()?.Contains("cast(") == true && defaultValue?.StartsWith("'") == true && defaultValue?.EndsWith("'") == true)
{ {
string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue.Replace("''","'").TrimEnd('\'').TrimStart('\'')); string sql = string.Format(AddDefaultValueSql, this.SqlBuilder.GetTranslationColumnName(tableName), this.SqlBuilder.GetTranslationColumnName(columnName), defaultValue.Replace("''", "'").TrimEnd('\'').TrimStart('\''));
return this.Context.Ado.ExecuteCommand(sql) > 0; return this.Context.Ado.ExecuteCommand(sql) > 0;
} }
else if (defaultValue?.ToLower()?.Contains("now()") == true) else if (defaultValue?.ToLower()?.Contains("now()") == true)
@ -341,11 +356,11 @@ WHERE tgrelid = '"+tableName+"'::regclass");
{ {
ConvertCreateColumnInfo(columnInfo); ConvertCreateColumnInfo(columnInfo);
tableName = this.SqlBuilder.GetTranslationTableName(tableName); tableName = this.SqlBuilder.GetTranslationTableName(tableName);
var columnName= this.SqlBuilder.GetTranslationColumnName(columnInfo.DbColumnName); var columnName = this.SqlBuilder.GetTranslationColumnName(columnInfo.DbColumnName);
string sql = GetUpdateColumnSql(tableName, columnInfo); string sql = GetUpdateColumnSql(tableName, columnInfo);
this.Context.Ado.ExecuteCommand(sql); this.Context.Ado.ExecuteCommand(sql);
var isnull = columnInfo.IsNullable?" DROP NOT NULL ": " SET NOT NULL "; var isnull = columnInfo.IsNullable ? " DROP NOT NULL " : " SET NOT NULL ";
this.Context.Ado.ExecuteCommand(string.Format("alter table {0} alter {1} {2}",tableName,columnName, isnull)); this.Context.Ado.ExecuteCommand(string.Format("alter table {0} alter {1} {2}", tableName, columnName, isnull));
return true; return true;
} }
@ -382,7 +397,16 @@ WHERE tgrelid = '"+tableName+"'::regclass");
} }
var oldDatabaseName = this.Context.Ado.Connection.Database; var oldDatabaseName = this.Context.Ado.Connection.Database;
var connection = this.Context.CurrentConnectionConfig.ConnectionString; var connection = this.Context.CurrentConnectionConfig.ConnectionString;
connection = connection.Replace(oldDatabaseName, "postgres"); if (Regex.Matches(connection, oldDatabaseName).Count > 1)
{
var builder = new Npgsql.NpgsqlConnectionStringBuilder(connection);
builder.Database = "postgres";
connection = builder.ConnectionString;
}
else
{
connection = connection.Replace(oldDatabaseName, "postgres");
}
var newDb = new SqlSugarClient(new ConnectionConfig() var newDb = new SqlSugarClient(new ConnectionConfig()
{ {
DbType = this.Context.CurrentConnectionConfig.DbType, DbType = this.Context.CurrentConnectionConfig.DbType,
@ -391,13 +415,13 @@ WHERE tgrelid = '"+tableName+"'::regclass");
}); });
if (!GetDataBaseList(newDb).Any(it => it.Equals(databaseName, StringComparison.CurrentCultureIgnoreCase))) if (!GetDataBaseList(newDb).Any(it => it.Equals(databaseName, StringComparison.CurrentCultureIgnoreCase)))
{ {
var isVast = this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel==DbType.Vastbase; var isVast = this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase;
var dbcompatibility = ""; var dbcompatibility = "";
if (isVast) if (isVast)
{ {
dbcompatibility=" dbcompatibility = 'PG'"; dbcompatibility = " dbcompatibility = 'PG'";
} }
newDb.Ado.ExecuteCommand(string.Format(CreateDataBaseSql, this.SqlBuilder.SqlTranslationLeft+databaseName+this.SqlBuilder.SqlTranslationRight, databaseDirectory)+ dbcompatibility); newDb.Ado.ExecuteCommand(string.Format(CreateDataBaseSql, this.SqlBuilder.SqlTranslationLeft + databaseName + this.SqlBuilder.SqlTranslationRight, databaseDirectory) + dbcompatibility);
} }
return true; return true;
} }
@ -475,7 +499,7 @@ WHERE tgrelid = '"+tableName+"'::regclass");
// dataType = "varchar"; // dataType = "varchar";
//} //}
string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null; string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null;
if (item.DecimalDigits > 0&&item.Length>0 && dataType == "numeric") if (item.DecimalDigits > 0 && item.Length > 0 && dataType == "numeric")
{ {
dataSize = $"({item.Length},{item.DecimalDigits})"; dataSize = $"({item.Length},{item.DecimalDigits})";
} }
@ -513,7 +537,7 @@ WHERE tgrelid = '"+tableName+"'::regclass");
public override List<DbColumnInfo> GetColumnInfosByTableName(string tableName, bool isCache = true) public override List<DbColumnInfo> GetColumnInfosByTableName(string tableName, bool isCache = true)
{ {
var result= base.GetColumnInfosByTableName(tableName.TrimEnd('"').TrimStart('"').ToLower(), isCache); var result = base.GetColumnInfosByTableName(tableName.TrimEnd('"').TrimStart('"').ToLower(), isCache);
if (result == null || result.Count() == 0) if (result == null || result.Count() == 0)
{ {
result = base.GetColumnInfosByTableName(tableName, isCache); result = base.GetColumnInfosByTableName(tableName, isCache);
@ -533,17 +557,17 @@ WHERE tgrelid = '"+tableName+"'::regclass");
List<string> pkList = new List<string>(); List<string> pkList = new List<string>();
if (isCache) if (isCache)
{ {
pkList=GetListOrCache<string>("GetColumnInfosByTableName_N_Pk"+tableName, sql); pkList = GetListOrCache<string>("GetColumnInfosByTableName_N_Pk" + tableName, sql);
} }
else else
{ {
pkList = this.Context.Ado.SqlQuery<string>(sql); pkList = this.Context.Ado.SqlQuery<string>(sql);
} }
if (pkList.Count >1) if (pkList.Count > 1)
{ {
foreach (var item in result) foreach (var item in result)
{ {
if (pkList.Select(it=>it.ToUpper()).Contains(item.DbColumnName.ToUpper())) if (pkList.Select(it => it.ToUpper()).Contains(item.DbColumnName.ToUpper()))
{ {
item.IsPrimarykey = true; item.IsPrimarykey = true;
} }
@ -579,28 +603,50 @@ WHERE tgrelid = '"+tableName+"'::regclass");
private string GetSchema() private string GetSchema()
{ {
var schema = "public"; var schema = "public";
if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), "searchpath=")) var pgSqlIsAutoToLowerSchema = this.Context?.CurrentConnectionConfig?.MoreSettings?.PgSqlIsAutoToLowerSchema == false;
if (pgSqlIsAutoToLowerSchema)
{ {
var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), @"searchpath\=(\w+)").Groups[1].Value; if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString, "searchpath=", RegexOptions.IgnoreCase))
if (regValue.HasValue())
{ {
schema = regValue; var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString, @"searchpath\=(\w+)").Groups[1].Value;
if (regValue.HasValue())
{
schema = regValue;
}
}
else if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString, "search path=", RegexOptions.IgnoreCase))
{
var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), @"search path\=(\w+)").Groups[1].Value;
if (regValue.HasValue())
{
schema = regValue;
}
} }
} }
else if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), "search path=")) else
{ {
var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), @"search path\=(\w+)").Groups[1].Value; if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), "searchpath="))
if (regValue.HasValue())
{ {
schema = regValue; var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), @"searchpath\=(\w+)").Groups[1].Value;
if (regValue.HasValue())
{
schema = regValue;
}
}
else if (System.Text.RegularExpressions.Regex.IsMatch(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), "search path="))
{
var regValue = System.Text.RegularExpressions.Regex.Match(this.Context.CurrentConnectionConfig.ConnectionString.ToLower(), @"search path\=(\w+)").Groups[1].Value;
if (regValue.HasValue())
{
schema = regValue;
}
} }
} }
return schema; return schema;
} }
private static void ConvertCreateColumnInfo(DbColumnInfo x) private static void ConvertCreateColumnInfo(DbColumnInfo x)
{ {
string[] array = new string[] { "uuid","int4", "text", "int2", "int8", "date", "bit", "text", "timestamp" }; string[] array = new string[] { "uuid", "int4", "text", "int2", "int8", "date", "bit", "text", "timestamp" };
if (array.Contains(x.DataType?.ToLower())) if (array.Contains(x.DataType?.ToLower()))
{ {

View File

@ -54,7 +54,7 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase)); var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase));
var tableName = mappingInfo?.DbTableName+""; var tableName = mappingInfo?.DbTableName + "";
if (tableName.Contains(".")) if (tableName.Contains("."))
{ {
tableName = string.Join(UtilConstants.Dot, tableName.Split(UtilConstants.DotChar).Select(it => GetTranslationText(it))); tableName = string.Join(UtilConstants.Dot, tableName.Split(UtilConstants.DotChar).Select(it => GetTranslationText(it)));
@ -102,7 +102,7 @@ namespace SqlSugar.TDSQLForPGODBC
} }
} }
public string GetValue(object entityValue) public string GetValue(object entityValue)
{ {
if (entityValue == null) if (entityValue == null)
return null; return null;
@ -237,13 +237,19 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0} like concat('%',{1},'%')) ", parameter.MemberName, parameter2.MemberName ); return string.Format(" ({0} like concat('%',{1},'%')) ", parameter.MemberName, parameter2.MemberName);
} }
public override string StartsWith(MethodCallExpressionModel model) public override string StartsWith(MethodCallExpressionModel model)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
var parameter2Info = model.Parameters?.FirstOrDefault(it => it.ParameterName.EqualCase(parameter2.MemberName + ""));
if (parameter2Info != null && parameter2.MemberName?.ToString()?.StartsWith("@MethodConst") == true)
{
parameter2Info.Value = parameter2.MemberValue + "%";
return string.Format(" ({0} like {1} ) ", parameter.MemberName, parameter2.MemberName);
}
return string.Format(" ({0} like concat({1},'%')) ", parameter.MemberName, parameter2.MemberName); return string.Format(" ({0} like concat({1},'%')) ", parameter.MemberName, parameter2.MemberName);
} }
@ -251,7 +257,13 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
return string.Format(" ({0} like concat('%',{1}))", parameter.MemberName,parameter2.MemberName); var parameter2Info = model.Parameters?.FirstOrDefault(it => it.ParameterName.EqualCase(parameter2.MemberName + ""));
if (parameter2Info != null && parameter2.MemberName?.ToString()?.StartsWith("@MethodConst") == true)
{
parameter2Info.Value = "%" + parameter2.MemberValue;
return string.Format(" ({0} like {1} ) ", parameter.MemberName, parameter2.MemberName);
}
return string.Format(" ({0} like concat('%',{1}))", parameter.MemberName, parameter2.MemberName);
} }
public override string DateIsSameDay(MethodCallExpressionModel model) public override string DateIsSameDay(MethodCallExpressionModel model)
@ -272,11 +284,11 @@ namespace SqlSugar.TDSQLForPGODBC
var parameter = model.Args[0]; var parameter = model.Args[0];
var parameter2 = model.Args[1]; var parameter2 = model.Args[1];
var parameter3 = model.Args[2]; var parameter3 = model.Args[2];
DateType dateType =(DateType)parameter3.MemberValue; DateType dateType = (DateType)parameter3.MemberValue;
var format = "yyyy-MM-dd"; var format = "yyyy-MM-dd";
if (dateType == DateType.Quarter) if (dateType == DateType.Quarter)
{ {
return string.Format(" (date_trunc('quarter',{0})=date_trunc('quarter',{1}) ) ", parameter.MemberName, parameter2.MemberName,format); return string.Format(" (date_trunc('quarter',{0})=date_trunc('quarter',{1}) ) ", parameter.MemberName, parameter2.MemberName, format);
} }
switch (dateType) switch (dateType)
{ {
@ -376,7 +388,7 @@ namespace SqlSugar.TDSQLForPGODBC
public override string IsNullOrEmpty(MethodCallExpressionModel model) public override string IsNullOrEmpty(MethodCallExpressionModel model)
{ {
if ( if (
model.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase|| model.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase ||
model.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.GaussDB) model.Conext?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.GaussDB)
{ {
var parameter = model.Args[0]; var parameter = model.Args[0];
@ -390,7 +402,7 @@ namespace SqlSugar.TDSQLForPGODBC
public override string MergeString(params string[] strings) public override string MergeString(params string[] strings)
{ {
var key = Guid.NewGuid() + ""; var key = Guid.NewGuid() + "";
return " concat("+string.Join(",", strings.Select(it=>it?.Replace("+", key))).Replace("+", "").Replace(key, "+") + ") "; return " concat(" + string.Join(",", strings.Select(it => it?.Replace("+", key))).Replace("+", "").Replace(key, "+") + ") ";
} }
public override string IsNull(MethodCallExpressionModel model) public override string IsNull(MethodCallExpressionModel model)
{ {
@ -418,10 +430,10 @@ namespace SqlSugar.TDSQLForPGODBC
var parameter1 = model.Args[1]; var parameter1 = model.Args[1];
//var parameter2 = model.Args[2]; //var parameter2 = model.Args[2];
//var parameter3= model.Args[3]; //var parameter3= model.Args[3];
var result= GetJson(parameter.MemberName, parameter1.MemberName, model.Args.Count()==2); var result = GetJson(parameter.MemberName, parameter1.MemberName, model.Args.Count() == 2);
if (model.Args.Count > 2) if (model.Args.Count > 2)
{ {
result = GetJson(result, model.Args[2].MemberName, model.Args.Count() == 3); result = GetJson(result, model.Args[2].MemberName, model.Args.Count() == 3);
} }
if (model.Args.Count > 3) if (model.Args.Count > 3)
{ {
@ -445,7 +457,7 @@ namespace SqlSugar.TDSQLForPGODBC
return $"({parameter.MemberName}::jsonb ?{parameter1.MemberName})"; return $"({parameter.MemberName}::jsonb ?{parameter1.MemberName})";
} }
private string GetJson(object memberName1, object memberName2,bool isLast) private string GetJson(object memberName1, object memberName2, bool isLast)
{ {
if (isLast) if (isLast)
{ {
@ -482,6 +494,15 @@ namespace SqlSugar.TDSQLForPGODBC
return $" {model.Args[0].MemberName}::jsonb @> '[\"{model.Args[1].MemberValue}\"]'::jsonb "; return $" {model.Args[0].MemberName}::jsonb @> '[\"{model.Args[1].MemberValue}\"]'::jsonb ";
} }
} }
public override string GetStringJoinSelector(string result, string separator)
{
if (result?.ToLower()?.Contains("distinct") == true)
{
return $"string_agg({result},'{separator}') ";
}
return $"string_agg(({result})::text,'{separator}') ";
}
public override string JsonListObjectAny(MethodCallExpressionModel model) public override string JsonListObjectAny(MethodCallExpressionModel model)
{ {
if (UtilMethods.IsNumber(model.Args[2].MemberValue.GetType().Name)) if (UtilMethods.IsNumber(model.Args[2].MemberValue.GetType().Name))

View File

@ -242,6 +242,10 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
return v.ToString(CultureInfo.InvariantCulture); return v.ToString(CultureInfo.InvariantCulture);
} }
else if (value is double dou)
{
return dou.ToString(CultureInfo.InvariantCulture);
}
else else
{ {
return N + "'" + value.ToString() + "'"; return N + "'" + value.ToString() + "'";

View File

@ -91,6 +91,10 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
return v.ToString(CultureInfo.InvariantCulture); return v.ToString(CultureInfo.InvariantCulture);
} }
else if (value is double dou)
{
return dou.ToString(CultureInfo.InvariantCulture);
}
else else
{ {
return "'" + value.ToString() + "'"; return "'" + value.ToString() + "'";
@ -285,3 +289,4 @@ namespace SqlSugar.TDSQLForPGODBC
} }
} }
} }

View File

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Dynamic; using System.Dynamic;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Text; using System.Text;
namespace SqlSugar.TDSQLForPGODBC namespace SqlSugar.TDSQLForPGODBC
{ {
@ -11,9 +12,10 @@ namespace SqlSugar.TDSQLForPGODBC
public const char DotChar = '.'; public const char DotChar = '.';
internal const string Space = " "; internal const string Space = " ";
internal const char SpaceChar = ' '; internal const char SpaceChar = ' ';
internal const string AssemblyName = "SqlSugar"; internal const string AssemblyName = "SqlSugar.TDSQLForPGODBC";
internal static string ReplaceKey = "{" + Guid.NewGuid() + "}"; internal static string ReplaceKey = "{" + Guid.NewGuid() + "}";
internal const string ReplaceCommaKey = "{112A689B-17A1-4A06-9D27-A39EAB8BC3D5}"; internal const string ReplaceCommaKey = "{112A689B-17A1-4A06-9D27-A39EAB8BC3D5}";
internal const string GroupReplaceKey = "{GroupReplaceKey_l33asdysaas1231s}";
internal static Type UShortType = typeof(ushort); internal static Type UShortType = typeof(ushort);
internal static Type ULongType = typeof(ulong); internal static Type ULongType = typeof(ulong);
@ -62,7 +64,7 @@ namespace SqlSugar.TDSQLForPGODBC
typeof(short), typeof(short),
typeof(ushort), typeof(ushort),
}; };
//internal static CultureInfo EnCultureInfo = new CultureInfo("en");
internal static string[] DateTypeStringList = new string[] internal static string[] DateTypeStringList = new string[]
{ {
@ -75,5 +77,8 @@ namespace SqlSugar.TDSQLForPGODBC
"Millisecond", "Millisecond",
"Date" "Date"
}; };
public static ConstantExpression ExpTrue = Expression.Constant(true);
public static ConstantExpression ExpFalse = Expression.Constant(false);
} }
} }

View File

@ -18,6 +18,66 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
public class UtilMethods 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) 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; var p = ParameterConverter.Invoke(obj, new object[] { value, 100 + index }) as SugarParameter;
return p; 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) internal static bool IsErrorParameterName(ConnectionConfig connectionConfig, DbColumnInfo columnInfo)
{ {
return connectionConfig.MoreSettings?.IsCorrectErrorSqlParameterName == true && return connectionConfig.MoreSettings?.IsCorrectErrorSqlParameterName == true &&
@ -610,6 +678,14 @@ namespace SqlSugar.TDSQLForPGODBC
{ {
return (char)(bytes)[0]; 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); var destinationConverter = TypeDescriptor.GetConverter(destinationType);
if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType())) if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType()))
return destinationConverter.ConvertFrom(null, culture, value); return destinationConverter.ConvertFrom(null, culture, value);
@ -722,7 +798,8 @@ namespace SqlSugar.TDSQLForPGODBC
DisableQueryWhereColumnRemoveTrim = it.MoreSettings.DisableQueryWhereColumnRemoveTrim, DisableQueryWhereColumnRemoveTrim = it.MoreSettings.DisableQueryWhereColumnRemoveTrim,
DatabaseModel = it.MoreSettings.DatabaseModel, DatabaseModel = it.MoreSettings.DatabaseModel,
EnableILike = it.MoreSettings.EnableILike, EnableILike = it.MoreSettings.EnableILike,
ClickHouseEnableFinal = it.MoreSettings.ClickHouseEnableFinal ClickHouseEnableFinal = it.MoreSettings.ClickHouseEnableFinal,
PgSqlIsAutoToLowerSchema = it.MoreSettings.PgSqlIsAutoToLowerSchema
}, },
SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle