OceanBaseForOracle同步Oracle修改

This commit is contained in:
guoshun.du
2025-05-06 10:33:47 +08:00
parent 9858f32706
commit 842e69b733
5 changed files with 1660 additions and 146 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 override string IsNullOrEmpty(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
return string.Format("( {0} IS NULL )", parameter.MemberName);
}
public override string WeekOfYear(MethodCallExpressionModel mode)
{
var parameterNameA = mode.Args[0].MemberName;
@@ -104,7 +104,14 @@ namespace SqlSugar.OceanBaseForOracle
}
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)
{
@@ -211,8 +218,10 @@ namespace SqlSugar.OceanBaseForOracle
return string.Format("(CAST(TO_CHAR({0},'mi') AS NUMBER))", parameter.MemberName);
case DateType.Millisecond:
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:
return $" to_char({parameter.MemberName},'day') ";
return $" (TO_NUMBER(TO_CHAR({parameter.MemberName}, 'D'))-1) ";
case DateType.Day:
default:
return string.Format("(CAST(TO_CHAR({0},'dd') AS NUMBER))", parameter.MemberName);
@@ -275,6 +284,7 @@ namespace SqlSugar.OceanBaseForOracle
var parameter = model.Args[0];
return string.Format(" TO_TIMESTAMP({0}, 'YYYY-MM-DD HH24:MI:SS.FF') ", parameter.MemberName);
}
public override string ToDateShort(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
@@ -311,7 +321,47 @@ namespace SqlSugar.OceanBaseForOracle
}
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)
{
@@ -380,7 +430,28 @@ namespace SqlSugar.OceanBaseForOracle
{
var parameterNameA = mode.Args[0].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 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));
@@ -46,9 +46,15 @@ namespace SqlSugar.OceanBaseForOracle
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)