From edf6b79fd7ec236c9a1e525af5b883f980c4b68c Mon Sep 17 00:00:00 2001 From: "guoshun.du" Date: Tue, 10 Jun 2025 09:47:47 +0800 Subject: [PATCH] =?UTF-8?q?*=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9OceanBaseF?= =?UTF-8?q?orOracle=E5=92=8CTDSQLForPGODBC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OceanBaseForOracleExpressionContext.cs | 12 ++++++++---- .../OceanBaseForOracleInsertBuilder.cs | 10 ++++++++++ .../OceanBaseForOracleUpdateBuilder.cs | 10 ++++++++++ .../TDSQLForPGODBCExpressionContext.cs | 5 +++++ .../SqlBuilder/TDSQLForPGODBCFastBuilder.cs | 18 +++++++++++------- 5 files changed, 44 insertions(+), 11 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleExpressionContext.cs index e929de115..804981105 100644 --- a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleExpressionContext.cs @@ -75,6 +75,11 @@ namespace SqlSugar.OceanBaseForOracle } public partial class OceanBaseForOracleMethod : DefaultDbMethod, IDbMethods { + public override string UNIX_TIMESTAMP(MethodCallExpressionModel model) + { + var parameterNameA = model.Args[0].MemberName; + return $" (CAST({parameterNameA} AS DATE) - DATE '1970-01-01') * 86400 "; + } public override string IsNullOrEmpty(MethodCallExpressionModel model) { var parameter = model.Args[0]; @@ -237,11 +242,10 @@ namespace SqlSugar.OceanBaseForOracle switch (type) { case DateType.Year: - time = 1 * 365; - break; + // 每年 = 12 个月 + return $"ADD_MONTHS({parameter.MemberName}, ({parameter2.MemberName}) * 12)"; case DateType.Month: - time = 1 * 30; - break; + return $"ADD_MONTHS({parameter.MemberName}, {parameter2.MemberName})"; case DateType.Day: break; case DateType.Hour: diff --git a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs index 02d6526c4..bd30a1a86 100644 --- a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleInsertBuilder.cs @@ -177,6 +177,16 @@ namespace SqlSugar.OceanBaseForOracle { return Convert.ToInt64(value); } + else if (value is TimeSpan ts) + { + return string.Format( + "INTERVAL '{0} {1:D2}:{2:D2}:{3:D2}.{4:D3}' DAY TO SECOND(3)", + ts.Days, + ts.Hours, + ts.Minutes, + ts.Seconds, + ts.Milliseconds); + } else if (type == UtilConstants.ByteArrayType) { ++i; diff --git a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs index 3849d93e9..841d8a65c 100644 --- a/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.OceanBaseForOracle/OceanBase/SqlBuilder/OceanBaseForOracleUpdateBuilder.cs @@ -108,6 +108,16 @@ namespace SqlSugar.OceanBaseForOracle { return value.ObjToBool() ? "1" : "0"; } + else if (value is TimeSpan ts) + { + return string.Format( + "INTERVAL '{0} {1:D2}:{2:D2}:{3:D2}.{4:D3}' DAY TO SECOND(3)", + ts.Days, + ts.Hours, + ts.Minutes, + ts.Seconds, + ts.Milliseconds); + } else if (type == UtilConstants.DateTimeOffsetType) { var date = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)value); diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCExpressionContext.cs index 8342eee35..5d16a29f3 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCExpressionContext.cs @@ -133,6 +133,11 @@ namespace SqlSugar.TDSQLForPGODBC } public class TDSQLForPGODBCMethod : DefaultDbMethod, IDbMethods { + public override string UNIX_TIMESTAMP(MethodCallExpressionModel model) + { + var parameterNameA = model.Args[0].MemberName; + return $" EXTRACT(EPOCH FROM {parameterNameA})::BIGINT "; + } public override string CharIndex(MethodCallExpressionModel model) { return string.Format(" (strpos ({1},{0})-1)", model.Args[0].MemberName, model.Args[1].MemberName); diff --git a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCFastBuilder.cs index aac39a750..f0a5219ea 100644 --- a/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.TDSQLForPGODBC/TDSQLForPG/SqlBuilder/TDSQLForPGODBCFastBuilder.cs @@ -65,7 +65,7 @@ namespace SqlSugar.TDSQLForPGODBC return await Task.FromResult(dt.Rows.Count); } - private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List columns) + private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List columns) { if (conn.State == ConnectionState.Closed) conn.Open(); @@ -75,9 +75,9 @@ namespace SqlSugar.TDSQLForPGODBC ColumnView result = new ColumnView(); result.DbColumnInfo = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); result.DataColumn = item; - result.EntityColumnInfo=this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); + result.EntityColumnInfo = this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName)); var key = result.DbColumnInfo?.DataType?.ToLower(); - if (result.DbColumnInfo == null) + if (result.DbColumnInfo == null) { result.Type = null; } @@ -88,7 +88,7 @@ namespace SqlSugar.TDSQLForPGODBC else if (key?.First() == '_') { if (key == "_int4") - { + { result.Type = NpgsqlDbType.Array | NpgsqlDbType.Integer; } else if (key == "_int2") @@ -99,6 +99,10 @@ namespace SqlSugar.TDSQLForPGODBC { result.Type = NpgsqlDbType.Array | NpgsqlDbType.Bigint; } + else if (key == "_float8") + { + result.Type = NpgsqlDbType.Array | NpgsqlDbType.Double; + } else { var type = PgSqlType[key.Substring(1)]; @@ -131,17 +135,17 @@ namespace SqlSugar.TDSQLForPGODBC { writer.Write(value); } - else + else { writer.Write(value, column.Type.Value); - } + } } } writer.Complete(); } } - + public override async Task UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns) { var sqlquerybulder= this.Context.Queryable().SqlBuilder;