From dab4f29a19ff83fc6c29da0231e33aae8b00607f Mon Sep 17 00:00:00 2001
From: sunkaixuan <610262374@qq.com>
Date: Wed, 7 May 2025 15:17:24 +0800
Subject: [PATCH] Synchronous code
---
.../Dm/DbMaintenance/DmDbMaintenance.cs | 22 +++++-----
.../Dm/SqlBuilder/DmExpressionContext.cs | 42 ++++++++++++++++++-
.../DbMaintenance/OracleDbMaintenance.cs | 24 +++++++----
.../Realization/Oracle/OracleProvider.cs | 10 ++---
.../SqlBuilder/OracleExpressionContext.cs | 42 ++++++++++++++++++-
.../Oracle/SqlBuilder/OracleUpdateBuilder.cs | 20 +++++++--
6 files changed, 130 insertions(+), 30 deletions(-)
diff --git a/Src/Asp.Net/SqlSugar/Realization/Dm/DbMaintenance/DmDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Realization/Dm/DbMaintenance/DmDbMaintenance.cs
index 3787e1b61..e03dde7b3 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Dm/DbMaintenance/DmDbMaintenance.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Dm/DbMaintenance/DmDbMaintenance.cs
@@ -29,17 +29,16 @@ namespace SqlSugar
{
get
{
- return @"SELECT
- table_name name,
- (select TOP 1 COMMENTS from user_tab_comments where t.table_name=table_name ) as Description
- from user_tables t where
- table_name!='HELP'
- AND table_name NOT LIKE '%$%'
- AND table_name NOT LIKE 'LOGMNRC_%'
- AND table_name!='LOGMNRP_CTAS_PART_MAP'
- AND table_name!='LOGMNR_LOGMNR_BUILDLOG'
- AND table_name!='SQLPLUS_PRODUCT_PROFILE'
- ";
+ return @"SELECT a.TABLE_NAME AS Name,b.COMMENTS AS Description
+FROM USER_TABLES a
+LEFT JOIN (SELECT DISTINCT TABLE_NAME,COMMENTS FROM USER_TAB_COMMENTS WHERE COMMENTS IS NOT NULL) b ON a.TABLE_NAME=b.TABLE_NAME
+WHERE
+a.table_name!='HELP'
+AND a.table_name NOT LIKE '%$%'
+AND a.table_name NOT LIKE 'LOGMNRC_%'
+AND a.table_name!='LOGMNRP_CTAS_PART_MAP'
+AND a.table_name!='LOGMNR_LOGMNR_BUILDLOG'
+AND a.table_name!='SQLPLUS_PRODUCT_PROFILE'";
}
}
protected override string GetViewInfoListSql
@@ -329,6 +328,7 @@ WHERE table_name = '" + tableName + "'");
columnInfo.DataType = "varchar2";
columnInfo.Length = 50;
}
+ ConvertCreateColumnInfo(columnInfo);
return base.AddColumn(tableName, columnInfo);
}
public override bool CreateIndex(string tableName, string[] columnNames, bool isUnique = false)
diff --git a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs
index 005e27e63..e97dcf298 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmExpressionContext.cs
@@ -192,7 +192,47 @@ namespace SqlSugar
}
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)
{
diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs
index c6028232c..e4c1cf4f9 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
-using System.Text;
+using System.Text;
namespace SqlSugar
{
@@ -358,6 +358,7 @@ WHERE table_name = '"+tableName+"'");
columnInfo.DataType = "varchar2";
columnInfo.Length = 50;
}
+ ConvertCreateColumnInfo(columnInfo);
return base.AddColumn(tableName,columnInfo);
}
public override bool CreateIndex(string tableName, string[] columnNames, bool isUnique=false)
@@ -503,6 +504,10 @@ WHERE table_name = '"+tableName+"'");
column.Length = 22;
}
}
+ if (current.DefaultValue != null)
+ {
+ column.DefaultValue = current.DefaultValue.TrimEnd('\'').TrimStart('\'');
+ }
}
result.Add(column);
}
@@ -523,7 +528,8 @@ WHERE table_name = '"+tableName+"'");
t1.char_length,
t1.data_precision,
t1.data_scale,
- t1.nullable,
+ t1.nullable,
+ t1.data_default as DefaultValue,
t4.index_name,
t4.column_position,
t4.descend
@@ -594,7 +600,7 @@ WHERE table_name = '"+tableName+"'");
this.Context.Ado.IsEnableLogEvent = oldIsEnableLog;
return pks;
});
- return comments.HasValue() ? comments.First(it => it.DbColumnName.Equals(filedName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription : "";
+ return comments.HasValue() ? comments.FirstOrDefault(it => it.DbColumnName.EqualCase(filedName))?.ColumnDescription : "";
}
@@ -680,17 +686,17 @@ WHERE table_name = '"+tableName+"'");
}
private static void ConvertCreateColumnInfo(DbColumnInfo x)
{
- string[] array = new string[] { "int","date"};
+ string[] array = new string[] { "int","date"};
+ if (x.OracleDataType.HasValue())
+ {
+ x.DataType = x.OracleDataType;
+ }
if (array.Contains(x.DataType?.ToLower()))
{
x.Length = 0;
x.DecimalDigits = 0;
}
- if (x.OracleDataType.HasValue())
- {
- x.DataType = x.OracleDataType;
- }
- if(x.DecimalDigits>0&& x.DataType?.ToLower().IsIn("varchar", "clob", "varchar2", "nvarchar2", "nvarchar")==true)
+ if(x.DecimalDigits>0&& x.DataType?.ToLower()?.IsIn("varchar", "clob", "varchar2", "nvarchar2", "nvarchar")==true)
{
x.DecimalDigits = 0;
}
diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs
index 5fc8e4e2f..b48580a7c 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs
@@ -3,7 +3,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
-using System.Linq;
+using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@@ -87,7 +87,7 @@ namespace SqlSugar
public override void BeginTran(string transactionName)
{
((OracleConnection)this.Connection).BeginTransaction();
- }
+ }
///
/// Only SqlServer
///
@@ -107,7 +107,7 @@ namespace SqlSugar
{
return base.ProcessingEventStartingSQL(sql, parameter);
}
- else
+ else
{
return new KeyValuePair(sql, parameter);
}
@@ -142,10 +142,10 @@ namespace SqlSugar
return sqlCommand;
}
private static string[] KeyWord = new string[] { "@month",":month",":day", "@day","@group",":group",":index","@index","@order", ":order", "@user", "@level", ":user", ":level", ":type", "@type",":year","@year","@date",":date" };
- private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters)
+ private string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters)
{
sql = ReplaceKeyWordWithAd(sql, parameters);
- if (parameters.HasValue())
+ if (parameters.HasValue()&&this.CommandType!=CommandType.StoredProcedure)
{
foreach (var Parameter in parameters.OrderByDescending(x=>x.ParameterName?.Length))
{
diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs
index e50b8c561..f96149614 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleExpressionContext.cs
@@ -322,7 +322,47 @@ namespace SqlSugar
}
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)
{
diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs
index adc092434..85ba9d970 100644
--- a/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs
+++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/SqlBuilder/OracleUpdateBuilder.cs
@@ -22,12 +22,20 @@ namespace SqlSugar
var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith);
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)
{
var isFirst = pkList.First() == item;
var whereString = isFirst ? " " : " AND ";
- whereString += GetOracleUpdateColums(item);
+ whereString += GetOracleUpdateColums(item,true);
whereList.Add(whereString);
}
return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("",whereList));
@@ -36,9 +44,15 @@ namespace SqlSugar
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;
public object FormatValue(object value,bool isPrimaryKey,string name)