mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-23 12:33:44 +08:00
Update core
This commit is contained in:
@@ -98,6 +98,10 @@ namespace SqlSugar
|
|||||||
var tableWithString = inserable.InsertBuilder.TableWithString;
|
var tableWithString = inserable.InsertBuilder.TableWithString;
|
||||||
var removeCacheFunc = inserable.RemoveCacheFunc;
|
var removeCacheFunc = inserable.RemoveCacheFunc;
|
||||||
var objects = inserable.InsertObjs;
|
var objects = inserable.InsertObjs;
|
||||||
|
if (objects == null || objects.Count() == 0 || (objects.Count() == 1 && objects.First() == null))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
var identityList = inserable.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.PropertyName).ToArray();
|
var identityList = inserable.EntityInfo.Columns.Where(it => it.IsIdentity).Select(it => it.PropertyName).ToArray();
|
||||||
if (inserable.IsOffIdentity)
|
if (inserable.IsOffIdentity)
|
||||||
{
|
{
|
||||||
|
@@ -14,6 +14,7 @@ namespace SqlSugar
|
|||||||
Hour = 4,
|
Hour = 4,
|
||||||
Second=5,
|
Second=5,
|
||||||
Minute=6,
|
Minute=6,
|
||||||
Millisecond=7
|
Millisecond=7,
|
||||||
|
Weekday=8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -136,6 +136,7 @@ namespace SqlSugar
|
|||||||
else if (type!=null&&type.IsEnum())
|
else if (type!=null&&type.IsEnum())
|
||||||
{
|
{
|
||||||
this.DbType = System.Data.DbType.Int64;
|
this.DbType = System.Data.DbType.Int64;
|
||||||
|
this.Value = Convert.ToInt64(Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -433,18 +433,18 @@ namespace SqlSugar
|
|||||||
return string.Format("CHARINDEX ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName);
|
return string.Format("CHARINDEX ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ToVarchar(MethodCallExpressionModel model)
|
public virtual string ToVarchar(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
return string.Format(" CAST({0} AS VARCHAR(MAX))", parameter.MemberName);
|
return string.Format(" CAST({0} AS VARCHAR(MAX))", parameter.MemberName);
|
||||||
}
|
}
|
||||||
public string BitwiseAnd(MethodCallExpressionModel model)
|
public virtual string BitwiseAnd(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
var parameter2 = model.Args[1];
|
var parameter2 = model.Args[1];
|
||||||
return string.Format(" ({0} & {1}) ", parameter.MemberName, parameter2.MemberName); ;
|
return string.Format(" ({0} & {1}) ", parameter.MemberName, parameter2.MemberName); ;
|
||||||
}
|
}
|
||||||
public string BitwiseInclusiveOR(MethodCallExpressionModel model)
|
public virtual string BitwiseInclusiveOR(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
var parameter2 = model.Args[1];
|
var parameter2 = model.Args[1];
|
||||||
@@ -471,24 +471,60 @@ namespace SqlSugar
|
|||||||
return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName); ;
|
return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName); ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Format(MethodCallExpressionModel model)
|
public virtual string Format(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var str = model.Args[0].MemberValue.ObjToString();
|
var str = model.Args[0].MemberValue.ObjToString();
|
||||||
var array = model.Args.Skip(1).Select(it => it.IsMember?it.MemberName:it.MemberValue).ToArray();
|
var array = model.Args.Skip(1).Select(it => it.IsMember?it.MemberName:it.MemberValue).ToArray();
|
||||||
return string.Format("'"+str+ "'", array);
|
return string.Format("'"+str+ "'", array);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Abs(MethodCallExpressionModel model)
|
public virtual string Abs(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
return string.Format(" ABS({0}) ", parameter.MemberName);
|
return string.Format(" ABS({0}) ", parameter.MemberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Round(MethodCallExpressionModel model)
|
public virtual string Round(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
var parameter2= model.Args[1];
|
var parameter2= model.Args[1];
|
||||||
return string.Format(" ROUND({0},{1}) ", parameter.MemberName, parameter2.MemberName);
|
return string.Format(" ROUND({0},{1}) ", parameter.MemberName, parameter2.MemberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual string DateDiff(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
var parameter3 = model.Args[2];
|
||||||
|
return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName);
|
||||||
|
}
|
||||||
|
public virtual string GreaterThan(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
//>
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
return string.Format(" ({0} > {1}) ", parameter.MemberName, parameter2.MemberName);
|
||||||
|
}
|
||||||
|
public virtual string GreaterThanOrEqual(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
//>=
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
return string.Format(" ({0} >= {1}) ", parameter.MemberName, parameter2.MemberName);
|
||||||
|
}
|
||||||
|
public virtual string LessThan(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
//<
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
return string.Format(" ({0} < {1}) ", parameter.MemberName, parameter2.MemberName);
|
||||||
|
}
|
||||||
|
public virtual string LessThanOrEqual(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
//<=
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
return string.Format(" ({0} <= {1}) ", parameter.MemberName, parameter2.MemberName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -75,5 +75,11 @@ namespace SqlSugar
|
|||||||
string Format(MethodCallExpressionModel model);
|
string Format(MethodCallExpressionModel model);
|
||||||
string Abs(MethodCallExpressionModel model);
|
string Abs(MethodCallExpressionModel model);
|
||||||
string Round(MethodCallExpressionModel model);
|
string Round(MethodCallExpressionModel model);
|
||||||
|
|
||||||
|
string DateDiff(MethodCallExpressionModel model);
|
||||||
|
string GreaterThan(MethodCallExpressionModel model);
|
||||||
|
string GreaterThanOrEqual(MethodCallExpressionModel model);
|
||||||
|
string LessThan(MethodCallExpressionModel model);
|
||||||
|
string LessThanOrEqual(MethodCallExpressionModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,27 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
public partial class SqlFunc
|
public partial class SqlFunc
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public static int DateDiff(DateType dateType,DateTime littleTime, DateTime bigTime)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Can only be used in expressions");
|
||||||
|
}
|
||||||
|
public static bool GreaterThan(object thisValue,object gtValue)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Can only be used in expressions");
|
||||||
|
}
|
||||||
|
public static bool GreaterThanOrEqual(object thisValue, object gtValue)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Can only be used in expressions");
|
||||||
|
}
|
||||||
|
public static bool LessThan(object thisValue, object ltValue)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Can only be used in expressions");
|
||||||
|
}
|
||||||
|
public static bool LessThanOrEqual(object thisValue, object ltValue)
|
||||||
|
{
|
||||||
|
throw new NotSupportedException("Can only be used in expressions");
|
||||||
|
}
|
||||||
public static bool HasNumber(object thisValue)
|
public static bool HasNumber(object thisValue)
|
||||||
{
|
{
|
||||||
return thisValue.ObjToInt() > 0;
|
return thisValue.ObjToInt() > 0;
|
||||||
|
@@ -20,6 +20,14 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
ResolveLength(parameter, isLeft, expression);
|
ResolveLength(parameter, isLeft, expression);
|
||||||
}
|
}
|
||||||
|
else if (IsDateDiff(expression))
|
||||||
|
{
|
||||||
|
ResolveDateDiff(parameter, isLeft, expression);
|
||||||
|
}
|
||||||
|
else if (expression.Member.Name== "DayOfWeek"&& expression.Type==typeof(DayOfWeek))
|
||||||
|
{
|
||||||
|
ResolveDayOfWeek(parameter, isLeft, expression);
|
||||||
|
}
|
||||||
else if (isHasValue)
|
else if (isHasValue)
|
||||||
{
|
{
|
||||||
ResolveHasValue(parameter, expression);
|
ResolveHasValue(parameter, expression);
|
||||||
@@ -63,6 +71,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region Resolve default
|
#region Resolve default
|
||||||
private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
|
private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
|
||||||
{
|
{
|
||||||
@@ -207,6 +216,65 @@ namespace SqlSugar
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Resolve special member
|
#region Resolve special member
|
||||||
|
private void ResolveDayOfWeek(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
|
||||||
|
{
|
||||||
|
var exp = expression.Expression;
|
||||||
|
var value = GetNewExpressionValue(exp);
|
||||||
|
var result = this.Context.DbMehtods.DateValue(new MethodCallExpressionModel()
|
||||||
|
{
|
||||||
|
Args = new List<MethodCallExpressionArgs>() {
|
||||||
|
|
||||||
|
new MethodCallExpressionArgs(){
|
||||||
|
MemberName=value,
|
||||||
|
MemberValue=value
|
||||||
|
},
|
||||||
|
new MethodCallExpressionArgs(){
|
||||||
|
MemberName=DateType.Weekday,
|
||||||
|
MemberValue=DateType.Weekday
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}); ;
|
||||||
|
base.AppendMember(parameter, isLeft, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void ResolveDateDiff(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
|
||||||
|
{
|
||||||
|
var binaryExp=expression.Expression as BinaryExpression;
|
||||||
|
var beginExp = binaryExp.Right;
|
||||||
|
var endExp = binaryExp.Left;
|
||||||
|
|
||||||
|
var dateType = DateType.Day;
|
||||||
|
var begin = GetNewExpressionValue(beginExp);
|
||||||
|
var end = GetNewExpressionValue(endExp);
|
||||||
|
|
||||||
|
foreach (var item in UtilMethods.EnumToDictionary<DateType>())
|
||||||
|
{
|
||||||
|
if (expression.Member.Name.ToLower().Contains(item.Key.ToLower()))
|
||||||
|
{
|
||||||
|
dateType = item.Value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var result = this.Context.DbMehtods.DateDiff(new MethodCallExpressionModel()
|
||||||
|
{
|
||||||
|
Args = new List<MethodCallExpressionArgs>() {
|
||||||
|
new MethodCallExpressionArgs(){
|
||||||
|
MemberName=dateType,
|
||||||
|
MemberValue=dateType
|
||||||
|
},
|
||||||
|
new MethodCallExpressionArgs(){
|
||||||
|
MemberName=begin,
|
||||||
|
MemberValue=begin
|
||||||
|
},
|
||||||
|
new MethodCallExpressionArgs(){
|
||||||
|
MemberName=end,
|
||||||
|
MemberValue=end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}); ;
|
||||||
|
base.AppendMember(parameter, isLeft, result);
|
||||||
|
}
|
||||||
private void ResolveDateDateByCall(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
|
private void ResolveDateDateByCall(ExpressionParameter parameter, bool? isLeft, MemberExpression expression)
|
||||||
{
|
{
|
||||||
var value = GetNewExpressionValue(expression.Expression);
|
var value = GetNewExpressionValue(expression.Expression);
|
||||||
@@ -441,6 +509,17 @@ namespace SqlSugar
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Helper
|
#region Helper
|
||||||
|
private static bool IsDateDiff(MemberExpression expression)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
expression.Expression!=null&&
|
||||||
|
expression.Expression is BinaryExpression &&
|
||||||
|
expression.Expression.Type == UtilConstants.TimeSpanType&&
|
||||||
|
expression.Member.Name.StartsWith("Total")&&
|
||||||
|
expression.Member.Name.EndsWith("s")
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName)
|
private string AppendMember(ExpressionParameter parameter, bool? isLeft, string fieldName)
|
||||||
{
|
{
|
||||||
if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append)))
|
if (parameter.BaseExpression is BinaryExpression || (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals(CommonTempDataType.Append)))
|
||||||
|
@@ -559,6 +559,10 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
parameter.CommonTempData = item.ToString();
|
parameter.CommonTempData = item.ToString();
|
||||||
}
|
}
|
||||||
|
else if (IsDateItemValue(item))
|
||||||
|
{
|
||||||
|
parameter.CommonTempData = GetNewExpressionValue(item);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
base.Start();
|
base.Start();
|
||||||
@@ -581,7 +585,7 @@ namespace SqlSugar
|
|||||||
methodCallExpressionArgs.IsMember = false;
|
methodCallExpressionArgs.IsMember = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (IsDateDate(item) || IsDateValue(item))
|
if (IsDateDate(item) || IsDateValue(item)|| IsDateItemValue(item))
|
||||||
{
|
{
|
||||||
methodCallExpressionArgs.IsMember = true;
|
methodCallExpressionArgs.IsMember = true;
|
||||||
}
|
}
|
||||||
@@ -604,6 +608,33 @@ namespace SqlSugar
|
|||||||
parameter.ChildExpression = null;
|
parameter.ChildExpression = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsDateItemValue(Expression item)
|
||||||
|
{
|
||||||
|
var result = false;
|
||||||
|
if (item is MemberExpression)
|
||||||
|
{
|
||||||
|
var memberExp = item as MemberExpression;
|
||||||
|
if (memberExp != null && memberExp.Expression != null && memberExp.Expression.Type == UtilConstants.DateType)
|
||||||
|
{
|
||||||
|
foreach (var dateType in UtilMethods.EnumToDictionary<DateType>())
|
||||||
|
{
|
||||||
|
if (memberExp.Member.Name.EqualCase(dateType.Key))
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (memberExp.Member.Name=="DayOfWeek")
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private static bool IsDateDate(Expression item)
|
private static bool IsDateDate(Expression item)
|
||||||
{
|
{
|
||||||
return item.Type == UtilConstants.DateType && item is MemberExpression && (item as MemberExpression).Member.Name == "Date" && item.ToString() != "DateTime.Now.Date";
|
return item.Type == UtilConstants.DateType && item is MemberExpression && (item as MemberExpression).Member.Name == "Date" && item.ToString() != "DateTime.Now.Date";
|
||||||
@@ -856,6 +887,16 @@ namespace SqlSugar
|
|||||||
return this.Context.DbMehtods.Abs(model);
|
return this.Context.DbMehtods.Abs(model);
|
||||||
case "Round":
|
case "Round":
|
||||||
return this.Context.DbMehtods.Round(model);
|
return this.Context.DbMehtods.Round(model);
|
||||||
|
case "DateDiff":
|
||||||
|
return this.Context.DbMehtods.DateDiff(model);
|
||||||
|
case "GreaterThan":
|
||||||
|
return this.Context.DbMehtods.GreaterThan(model);
|
||||||
|
case "GreaterThanOrEqual":
|
||||||
|
return this.Context.DbMehtods.GreaterThanOrEqual(model);
|
||||||
|
case "LessThan":
|
||||||
|
return this.Context.DbMehtods.LessThan(model);
|
||||||
|
case "LessThanOrEqual":
|
||||||
|
return this.Context.DbMehtods.LessThanOrEqual(model);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,13 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
public class MySqlMethod : DefaultDbMethod, IDbMethods
|
public class MySqlMethod : DefaultDbMethod, IDbMethods
|
||||||
{
|
{
|
||||||
|
public override string DateDiff(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = model.Args[0];
|
||||||
|
var parameter2 = model.Args[1];
|
||||||
|
var parameter3 = model.Args[2];
|
||||||
|
return string.Format(" TIMESTAMPDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName);
|
||||||
|
}
|
||||||
public override string DateValue(MethodCallExpressionModel model)
|
public override string DateValue(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
|
@@ -53,6 +53,33 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
public partial class OracleMethod : DefaultDbMethod, IDbMethods
|
public partial class OracleMethod : DefaultDbMethod, IDbMethods
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public override string DateDiff(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = (DateType)(Enum.Parse(typeof(DateType), model.Args[0].MemberValue.ObjToString()));
|
||||||
|
var begin = model.Args[1].MemberName;
|
||||||
|
var end = model.Args[2].MemberName;
|
||||||
|
switch (parameter)
|
||||||
|
{
|
||||||
|
case DateType.Year:
|
||||||
|
return $" ( cast((months_between( {end} , {begin}))/12 as number(9,0) ) )";
|
||||||
|
case DateType.Month:
|
||||||
|
return $" ( cast((months_between( {end} , {begin})) as number(9,0) ) )";
|
||||||
|
case DateType.Day:
|
||||||
|
return $" ( ROUND(TO_NUMBER({end} - {begin})) )";
|
||||||
|
case DateType.Hour:
|
||||||
|
return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24) )";
|
||||||
|
case DateType.Minute:
|
||||||
|
return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60) )";
|
||||||
|
case DateType.Second:
|
||||||
|
return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60 * 60) )";
|
||||||
|
case DateType.Millisecond:
|
||||||
|
return $" ( ROUND(TO_NUMBER({end} - {begin}) * 24 * 60 * 60 * 60) )";
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
throw new Exception(parameter + " datediff no support");
|
||||||
|
}
|
||||||
private void PageEach<T>(IEnumerable<T> pageItems, int pageSize, Action<List<T>> action)
|
private void PageEach<T>(IEnumerable<T> pageItems, int pageSize, Action<List<T>> action)
|
||||||
{
|
{
|
||||||
if (pageItems != null && pageItems.Any())
|
if (pageItems != null && pageItems.Any())
|
||||||
@@ -126,6 +153,8 @@ namespace SqlSugar
|
|||||||
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.Weekday:
|
||||||
|
return $" to_char({parameter.MemberName},'day') ";
|
||||||
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);
|
||||||
|
@@ -133,6 +133,32 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
public class PostgreSQLMethod : DefaultDbMethod, IDbMethods
|
public class PostgreSQLMethod : DefaultDbMethod, IDbMethods
|
||||||
{
|
{
|
||||||
|
public override string DateDiff(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = (DateType)(Enum.Parse(typeof(DateType), model.Args[0].MemberValue.ObjToString()));
|
||||||
|
var begin = model.Args[1].MemberName;
|
||||||
|
var end = model.Args[2].MemberName;
|
||||||
|
switch (parameter)
|
||||||
|
{
|
||||||
|
case DateType.Year:
|
||||||
|
return $" ( DATE_PART('Year', {end} ) - DATE_PART('Year', {begin}) )";
|
||||||
|
case DateType.Month:
|
||||||
|
return $" ( ( DATE_PART('Year', {end} ) - DATE_PART('Year', {begin}) ) * 12 + (DATE_PART('month', {end}) - DATE_PART('month', {begin})) )";
|
||||||
|
case DateType.Day:
|
||||||
|
return $" ( DATE_PART('day', {end} - {begin}) )";
|
||||||
|
case DateType.Hour:
|
||||||
|
return $" ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) )";
|
||||||
|
case DateType.Minute:
|
||||||
|
return $" ( ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} ) )";
|
||||||
|
case DateType.Second:
|
||||||
|
return $" ( ( ( DATE_PART('day', {end} - {begin}) ) * 24 + DATE_PART('hour', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} ) ) * 60 + DATE_PART('minute', {end} - {begin} )";
|
||||||
|
case DateType.Millisecond:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
throw new Exception(parameter + " datediff no support");
|
||||||
|
}
|
||||||
public override string IIF(MethodCallExpressionModel model)
|
public override string IIF(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
@@ -179,6 +205,11 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
format = "ms";
|
format = "ms";
|
||||||
}
|
}
|
||||||
|
if (parameter2.MemberValue.ObjToString() == DateType.Weekday.ToString())
|
||||||
|
{
|
||||||
|
return $" extract(DOW FROM cast({parameter.MemberName} as TIMESTAMP)) ";
|
||||||
|
}
|
||||||
|
|
||||||
return string.Format(" cast( to_char({1},'{0}')as integer ) ", format, parameter.MemberName);
|
return string.Format(" cast( to_char({1},'{0}')as integer ) ", format, parameter.MemberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,6 +14,32 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
public class SqliteMethod : DefaultDbMethod, IDbMethods
|
public class SqliteMethod : DefaultDbMethod, IDbMethods
|
||||||
{
|
{
|
||||||
|
public override string DateDiff(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var parameter = (DateType)(Enum.Parse(typeof(DateType), model.Args[0].MemberValue.ObjToString()));
|
||||||
|
var begin = model.Args[1].MemberName;
|
||||||
|
var end = model.Args[2].MemberName;
|
||||||
|
switch (parameter)
|
||||||
|
{
|
||||||
|
case DateType.Year:
|
||||||
|
return $" ( strftime('%Y',{end}) - strftime('%Y',{begin}) )";
|
||||||
|
case DateType.Month:
|
||||||
|
return $" ( (strftime('%m',{end}) - strftime('%m',{begin}))+(strftime('%Y',{end}) - strftime('%Y',{begin}))*12 )";
|
||||||
|
case DateType.Day:
|
||||||
|
return $" (julianday( strftime('%Y-%m-%d',datetime({end})) )-julianday(strftime('%Y-%m-%d',datetime({begin})))) ";
|
||||||
|
case DateType.Hour:
|
||||||
|
return $" ((julianday( strftime('%Y-%m-%d %H:%M',datetime({end})) )- julianday(strftime('%Y-%m-%d %H:%M',datetime({begin}))))*24 )";
|
||||||
|
case DateType.Minute:
|
||||||
|
return $" ((julianday( strftime('%Y-%m-%d %H:%M',datetime({end})) )- julianday(strftime('%Y-%m-%d %H:%M',datetime({begin}))))*24*60 )";
|
||||||
|
case DateType.Second:
|
||||||
|
return $" ((julianday( strftime('%Y-%m-%d %H:%M:%S',datetime({end})) )- julianday(strftime('%Y-%m-%d %H:%M:%S',datetime({begin}))))*24*60*60 )";
|
||||||
|
case DateType.Millisecond:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
throw new Exception(parameter + " datediff no support");
|
||||||
|
}
|
||||||
public override string Length(MethodCallExpressionModel model)
|
public override string Length(MethodCallExpressionModel model)
|
||||||
{
|
{
|
||||||
var parameter = model.Args[0];
|
var parameter = model.Args[0];
|
||||||
@@ -158,6 +184,8 @@ namespace SqlSugar
|
|||||||
case DateType.Minute:
|
case DateType.Minute:
|
||||||
parameter2 = "%M";
|
parameter2 = "%M";
|
||||||
break;
|
break;
|
||||||
|
case DateType.Weekday:
|
||||||
|
return $" cast (strftime('%w', {parameter.MemberName}) as integer) ";
|
||||||
case DateType.Millisecond:
|
case DateType.Millisecond:
|
||||||
default:
|
default:
|
||||||
Check.ThrowNotSupportedException(typeName);
|
Check.ThrowNotSupportedException(typeName);
|
||||||
|
Reference in New Issue
Block a user