mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 移除 TimeSpan 过度 Lambda 解析;
This commit is contained in:
parent
6525c7000f
commit
5ad0fd8b75
@ -722,5 +722,13 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Reflection.Assembly[])">
|
||||||
|
<summary>
|
||||||
|
批量注入 Repository,可以参考代码自行调整
|
||||||
|
</summary>
|
||||||
|
<param name="services"></param>
|
||||||
|
<param name="assemblies"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -1157,7 +1157,6 @@ namespace FreeSql.Internal
|
|||||||
case "System.String": other3Exp = ExpressionLambdaToSqlCallString(exp3, tsc); break;
|
case "System.String": other3Exp = ExpressionLambdaToSqlCallString(exp3, tsc); break;
|
||||||
case "System.Math": other3Exp = ExpressionLambdaToSqlCallMath(exp3, tsc); break;
|
case "System.Math": other3Exp = ExpressionLambdaToSqlCallMath(exp3, tsc); break;
|
||||||
case "System.DateTime": other3Exp = ExpressionLambdaToSqlCallDateTime(exp3, tsc); break;
|
case "System.DateTime": other3Exp = ExpressionLambdaToSqlCallDateTime(exp3, tsc); break;
|
||||||
case "System.TimeSpan": other3Exp = ExpressionLambdaToSqlCallTimeSpan(exp3, tsc); break;
|
|
||||||
case "System.Convert": other3Exp = ExpressionLambdaToSqlCallConvert(exp3, tsc); break;
|
case "System.Convert": other3Exp = ExpressionLambdaToSqlCallConvert(exp3, tsc); break;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
|
if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
|
||||||
@ -1756,7 +1755,6 @@ namespace FreeSql.Internal
|
|||||||
{
|
{
|
||||||
case "System.String": extRet = ExpressionLambdaToSqlMemberAccessString(exp4, tsc); break;
|
case "System.String": extRet = ExpressionLambdaToSqlMemberAccessString(exp4, tsc); break;
|
||||||
case "System.DateTime": extRet = ExpressionLambdaToSqlMemberAccessDateTime(exp4, tsc); break;
|
case "System.DateTime": extRet = ExpressionLambdaToSqlMemberAccessDateTime(exp4, tsc); break;
|
||||||
case "System.TimeSpan": extRet = ExpressionLambdaToSqlMemberAccessTimeSpan(exp4, tsc); break;
|
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(extRet) == false) return extRet;
|
if (string.IsNullOrEmpty(extRet) == false) return extRet;
|
||||||
var other4Exp = ExpressionLambdaToSqlOther(exp4, tsc);
|
var other4Exp = ExpressionLambdaToSqlOther(exp4, tsc);
|
||||||
@ -2219,11 +2217,9 @@ namespace FreeSql.Internal
|
|||||||
|
|
||||||
public abstract string ExpressionLambdaToSqlMemberAccessString(MemberExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlMemberAccessString(MemberExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlMemberAccessDateTime(MemberExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlMemberAccessDateTime(MemberExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc);
|
|
||||||
public abstract string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlCallMath(MethodCallExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlCallDateTime(MethodCallExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc);
|
|
||||||
public abstract string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc);
|
||||||
public abstract string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc);
|
public abstract string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc);
|
||||||
public string ExpressionConstDateTime(Expression exp) => exp is ConstantExpression operandExpConst ? formatSql(Utils.GetDataReaderValue(typeof(DateTime), operandExpConst.Value), null, null, null) : null;
|
public string ExpressionConstDateTime(Expression exp) => exp is ConstantExpression operandExpConst ? formatSql(Utils.GetDataReaderValue(typeof(DateTime), operandExpConst.Value), null, null, null) : null;
|
||||||
|
@ -36,8 +36,8 @@ namespace FreeSql.ClickHouse
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new ClickHouseConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new ClickHouseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -64,7 +64,10 @@ namespace FreeSql.ClickHouse
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -280,35 +280,6 @@ namespace FreeSql.ClickHouse
|
|||||||
return true;
|
return true;
|
||||||
return DateTime.TryParse(date, out var time);
|
return DateTime.TryParse(date, out var time);
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"intDiv(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"intDiv(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as Int64)*1000)";
|
|
||||||
case "Minutes": return $"intDiv(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(intDiv({left} as Int64)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as Int64)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -477,7 +448,6 @@ namespace FreeSql.ClickHouse
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"addSeconds(toDateTime({left}), {args1})";
|
|
||||||
case "AddDays": return $"addDays(toDateTime({left}), {args1})";
|
case "AddDays": return $"addDays(toDateTime({left}), {args1})";
|
||||||
case "AddHours": return $"addHours(toDateTime({left}), {args1})";
|
case "AddHours": return $"addHours(toDateTime({left}), {args1})";
|
||||||
case "AddMilliseconds": return $"addSeconds(toDateTime({left}), {args1}/1000)";
|
case "AddMilliseconds": return $"addSeconds(toDateTime({left}), {args1}/1000)";
|
||||||
@ -555,42 +525,6 @@ namespace FreeSql.ClickHouse
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as Int64)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as Int64)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as String)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -53,7 +53,12 @@ namespace FreeSql.Custom
|
|||||||
if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1);
|
if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1);
|
||||||
return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
||||||
}
|
}
|
||||||
public virtual string TimeSpanRawSql(object value) => value == null ? "NULL" : ((TimeSpan)value).TotalSeconds.ToString();
|
public virtual string TimeSpanRawSql(object value)
|
||||||
|
{
|
||||||
|
if (value == null) return "NULL";
|
||||||
|
var ts = (TimeSpan)value;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
public virtual string ByteRawSql(object value)
|
public virtual string ByteRawSql(object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
@ -136,7 +141,6 @@ namespace FreeSql.Custom
|
|||||||
|
|
||||||
public virtual string LambdaDateTime_DaysInMonth(string year, string month) => $"datepart(day, dateadd(day, -1, dateadd(month, 1, cast({year} as varchar) + '-' + cast({month} as varchar) + '-1')))";
|
public virtual string LambdaDateTime_DaysInMonth(string year, string month) => $"datepart(day, dateadd(day, -1, dateadd(month, 1, cast({year} as varchar) + '-' + cast({month} as varchar) + '-1')))";
|
||||||
public virtual string LambdaDateTime_IsLeapYear(string year) => $"(({year})%4=0 AND ({year})%100<>0 OR ({year})%400=0)";
|
public virtual string LambdaDateTime_IsLeapYear(string year) => $"(({year})%4=0 AND ({year})%100<>0 OR ({year})%400=0)";
|
||||||
public virtual string LambdaDateTime_Add(string operand, string value) => $"dateadd(second, {value}, {operand})";
|
|
||||||
public virtual string LambdaDateTime_AddDays(string operand, string value) => $"dateadd(day, {value}, {operand})";
|
public virtual string LambdaDateTime_AddDays(string operand, string value) => $"dateadd(day, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_AddHours(string operand, string value) => $"dateadd(hour, {value}, {operand})";
|
public virtual string LambdaDateTime_AddHours(string operand, string value) => $"dateadd(hour, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_AddMilliseconds(string operand, string value) => $"dateadd(second, ({value})/1000, {operand})";
|
public virtual string LambdaDateTime_AddMilliseconds(string operand, string value) => $"dateadd(second, ({value})/1000, {operand})";
|
||||||
|
@ -236,36 +236,6 @@ namespace FreeSql.Custom
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return _utils.Adapter.LambdaMath_Floor($"({left})/{60 * 60 * 24}");
|
|
||||||
case "Hours": return _utils.Adapter.LambdaMath_Floor($"({left})/{60 * 60}%24");
|
|
||||||
case "Milliseconds": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingDbTypeBigInt)}*1000)";
|
|
||||||
case "Minutes": return _utils.Adapter.LambdaMath_Floor($"({left})/60%60");
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingDbTypeBigInt)}*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingDbTypeBigInt)}*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
@ -382,7 +352,6 @@ namespace FreeSql.Custom
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return _utils.Adapter.LambdaDateTime_Add(left, args1);
|
|
||||||
case "AddDays": return _utils.Adapter.LambdaDateTime_AddDays(left, args1);
|
case "AddDays": return _utils.Adapter.LambdaDateTime_AddDays(left, args1);
|
||||||
case "AddHours": return _utils.Adapter.LambdaDateTime_AddHours(left, args1);
|
case "AddHours": return _utils.Adapter.LambdaDateTime_AddHours(left, args1);
|
||||||
case "AddMilliseconds": return _utils.Adapter.LambdaDateTime_AddMilliseconds(left, args1);
|
case "AddMilliseconds": return _utils.Adapter.LambdaDateTime_AddMilliseconds(left, args1);
|
||||||
@ -411,42 +380,6 @@ namespace FreeSql.Custom
|
|||||||
public virtual string LambdaDateSpan_Equals(string oldvalue, string newvalue) => $"({oldvalue} = {newvalue})";
|
public virtual string LambdaDateSpan_Equals(string oldvalue, string newvalue) => $"({oldvalue} = {newvalue})";
|
||||||
public virtual string LambdaDateSpan_CompareTo(string oldvalue, string newvalue) => $"({oldvalue}-({newvalue}))";
|
public virtual string LambdaDateSpan_CompareTo(string oldvalue, string newvalue) => $"({oldvalue}-({newvalue}))";
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return _utils.Adapter.LambdaConvert_ToInt64(exp.Arguments[0].Type, getExp(exp.Arguments[0]));
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return _utils.Adapter.LambdaConvert_ToInt64(exp.Arguments[0].Type, getExp(exp.Arguments[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return _utils.Adapter.LambdaConvert_ToString(exp.Type, left);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -49,7 +49,10 @@ namespace FreeSql.Custom.MySql
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -231,35 +231,6 @@ namespace FreeSql.Custom.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"(({left}) div {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"(({left}) div {(long)1000000 * 60 * 60} mod 24)";
|
|
||||||
case "Milliseconds": return $"(({left}) div 1000 mod 1000)";
|
|
||||||
case "Minutes": return $"(({left}) div {(long)1000000 * 60} mod 60)";
|
|
||||||
case "Seconds": return $"(({left}) div 1000000 mod 60)";
|
|
||||||
case "Ticks": return $"(({left}) * 10)";
|
|
||||||
case "TotalDays": return $"(({left}) / {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left}) / {(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left}) / 1000)";
|
|
||||||
case "TotalMinutes": return $"(({left}) / {(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left}) / 1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -434,7 +405,6 @@ namespace FreeSql.Custom.MySql
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"date_add({left}, interval ({args1}) microsecond)";
|
|
||||||
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
||||||
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
||||||
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
||||||
@ -512,42 +482,6 @@ namespace FreeSql.Custom.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as char)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -235,35 +235,6 @@ namespace FreeSql.Custom.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "numtodsinterval(0,'second')";
|
|
||||||
case "MinValue": return "numtodsinterval(-233720368.5477580,'second')";
|
|
||||||
case "MaxValue": return "numtodsinterval(233720368.5477580,'second')";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"extract(day from {left})";
|
|
||||||
case "Hours": return $"extract(hour from {left})";
|
|
||||||
case "Milliseconds": return $"cast(substr(extract(second from {left})-floor(extract(second from {left})),3,3) as number)";
|
|
||||||
case "Minutes": return $"extract(minute from {left})";
|
|
||||||
case "Seconds": return $"floor(extract(second from {left}))";
|
|
||||||
case "Ticks": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*10000000";
|
|
||||||
case "TotalDays": return $"extract(day from {left})";
|
|
||||||
case "TotalHours": return $"(extract(day from {left})*24+extract(hour from {left}))";
|
|
||||||
case "TotalMilliseconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*1000";
|
|
||||||
case "TotalMinutes": return $"(extract(day from {left})*1440+extract(hour from {left})*60+extract(minute from {left}))";
|
|
||||||
case "TotalSeconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -439,7 +410,6 @@ namespace FreeSql.Custom.Oracle
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "AddDays": return $"({left}+{args1})";
|
case "AddDays": return $"({left}+{args1})";
|
||||||
case "AddHours": return $"({left}+({args1})/24)";
|
case "AddHours": return $"({left}+({args1})/24)";
|
||||||
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
||||||
@ -518,42 +488,6 @@ namespace FreeSql.Custom.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"extract(day from ({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])})))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60 * 24},'second')";
|
|
||||||
case "FromHours": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60},'second')";
|
|
||||||
case "FromMilliseconds": return $"numtodsinterval(({getExp(exp.Arguments[0])})/1000,'second')";
|
|
||||||
case "FromMinutes": return $"numtodsinterval(({getExp(exp.Arguments[0])})*60,'second')";
|
|
||||||
case "FromSeconds": return $"numtodsinterval(({getExp(exp.Arguments[0])}),'second')";
|
|
||||||
case "FromTicks": return $"numtodsinterval(({getExp(exp.Arguments[0])})/10000000,'second')";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"extract(day from ({left}-({args1})))";
|
|
||||||
case "ToString": return $"to_char({left})";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -51,7 +51,10 @@ namespace FreeSql.Custom.PostgreSQL
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -319,35 +319,6 @@ namespace FreeSql.Custom.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{(long)1000000 * 60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(floor(({left})/1000)::int8%1000)";
|
|
||||||
case "Minutes": return $"(floor(({left})/{(long)1000000 * 60})::int8%60)";
|
|
||||||
case "Seconds": return $"(floor(({left})/1000000)::int8%60)";
|
|
||||||
case "Ticks": return $"(({left})*10)";
|
|
||||||
case "TotalDays": return $"(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})/1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/{(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left})/1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -528,7 +499,6 @@ namespace FreeSql.Custom.PostgreSQL
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"(({left})::timestamp+((({args1})/1000)||' milliseconds')::interval)";
|
|
||||||
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
||||||
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
||||||
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
||||||
@ -607,42 +577,6 @@ namespace FreeSql.Custom.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::varchar";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -71,7 +71,10 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'");
|
return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'");
|
||||||
}
|
}
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -241,35 +241,6 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -435,7 +406,6 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd(second, {args1}, {left})";
|
|
||||||
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
||||||
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
||||||
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
||||||
@ -503,42 +473,6 @@ namespace FreeSql.Custom.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(100))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -35,8 +35,8 @@ namespace FreeSql.Dameng
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new DmConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new DmConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new DamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -235,35 +235,6 @@ namespace FreeSql.Dameng
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "numtodsinterval(0,'second')";
|
|
||||||
case "MinValue": return "numtodsinterval(-233720368.5477580,'second')";
|
|
||||||
case "MaxValue": return "numtodsinterval(233720368.5477580,'second')";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"extract(day from {left})";
|
|
||||||
case "Hours": return $"extract(hour from {left})";
|
|
||||||
case "Milliseconds": return $"cast(substr(extract(second from {left})-floor(extract(second from {left})),3,3) as number)";
|
|
||||||
case "Minutes": return $"extract(minute from {left})";
|
|
||||||
case "Seconds": return $"floor(extract(second from {left}))";
|
|
||||||
case "Ticks": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*10000000";
|
|
||||||
case "TotalDays": return $"extract(day from {left})";
|
|
||||||
case "TotalHours": return $"(extract(day from {left})*24+extract(hour from {left}))";
|
|
||||||
case "TotalMilliseconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*1000";
|
|
||||||
case "TotalMinutes": return $"(extract(day from {left})*1440+extract(hour from {left})*60+extract(minute from {left}))";
|
|
||||||
case "TotalSeconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -439,7 +410,6 @@ namespace FreeSql.Dameng
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "AddDays": return $"({left}+{args1})";
|
case "AddDays": return $"({left}+{args1})";
|
||||||
case "AddHours": return $"({left}+({args1})/24)";
|
case "AddHours": return $"({left}+({args1})/24)";
|
||||||
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
||||||
@ -519,42 +489,6 @@ namespace FreeSql.Dameng
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"extract(day from ({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])})))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60 * 24},'second')";
|
|
||||||
case "FromHours": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60},'second')";
|
|
||||||
case "FromMilliseconds": return $"numtodsinterval(({getExp(exp.Arguments[0])})/1000,'second')";
|
|
||||||
case "FromMinutes": return $"numtodsinterval(({getExp(exp.Arguments[0])})*60,'second')";
|
|
||||||
case "FromSeconds": return $"numtodsinterval(({getExp(exp.Arguments[0])}),'second')";
|
|
||||||
case "FromTicks": return $"numtodsinterval(({getExp(exp.Arguments[0])})/10000000,'second')";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(6))";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(6))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"extract(day from ({left}-({args1})))";
|
|
||||||
case "ToString": return $"to_char({left})";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -37,8 +37,8 @@ namespace FreeSql.Firebird
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new FbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new FbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new FirebirdConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -86,7 +86,10 @@ namespace FreeSql.Firebird
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("timestamp '", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("timestamp '", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"x'{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"x'{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -222,35 +222,6 @@ namespace FreeSql.Firebird
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685.477580"; //秒 Ticks / 1000,000,0
|
|
||||||
case "MaxValue": return "922337203685.477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"mod(({left})/{60 * 60},24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"mod(({left})/60,60)";
|
|
||||||
case "Seconds": return $"mod({left},60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -424,7 +395,6 @@ namespace FreeSql.Firebird
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd({args1} second to {left})";
|
|
||||||
case "AddDays": return $"dateadd({args1} day to {left})";
|
case "AddDays": return $"dateadd({args1} day to {left})";
|
||||||
case "AddHours": return $"dateadd({args1} hour to {left})";
|
case "AddHours": return $"dateadd({args1} hour to {left})";
|
||||||
case "AddMilliseconds": return $"dateadd(({args1})/1000 second to {left})";
|
case "AddMilliseconds": return $"dateadd(({args1})/1000 second to {left})";
|
||||||
@ -481,42 +451,6 @@ namespace FreeSql.Firebird
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])}))";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(50))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -37,8 +37,8 @@ namespace FreeSql.GBase
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new GBaseConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -222,35 +222,6 @@ namespace FreeSql.GBase
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "interval(0) day(9) to fraction"; //秒 Ticks / 1000,000,0
|
|
||||||
case "MaxValue": return "interval(99 23:59:59.999) day(9) to fraction";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"({left})::interval day(9) to day::varchar(40)::int8";
|
|
||||||
case "Hours": return $"substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8";
|
|
||||||
case "Milliseconds": return $"substring_index(({left})::varchar(40),'.',-1)::int8";
|
|
||||||
case "Minutes": return $"substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8";
|
|
||||||
case "Seconds": return $"substr(substring_index(({left})::varchar(40),' ',-1),7,2)::int8";
|
|
||||||
case "Ticks": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24*60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8 *60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8 *60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),7,2)::int8 *1000 + substring_index(({left})::varchar(40),'.',-1)::int8) * 10000";
|
|
||||||
case "TotalDays": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8) /24.0";
|
|
||||||
case "TotalHours": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24*60 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8 *60 + substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8) /60.0";
|
|
||||||
case "TotalMilliseconds": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24*60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8 *60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8 *60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),7,2)::int8 *1000 + substring_index(({left})::varchar(40),'.',-1)::int8)";
|
|
||||||
case "TotalMinutes": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24*60*60 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8 *60*60 + substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8 *60 + substr(substring_index(({left})::varchar(40),' ',-1),7,2)::int8) /60.0";
|
|
||||||
case "TotalSeconds": return $"(({left})::interval day(9) to day::varchar(40)::int8 *24*60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),1,2)::int8 *60*60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),4,2)::int8 *60*1000 + substr(substring_index(({left})::varchar(40),' ',-1),7,2)::int8 *1000 + substring_index(({left})::varchar(40),'.',-1)::int8) /1000.0";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -424,7 +395,6 @@ namespace FreeSql.GBase
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left} + ({args1}))";
|
|
||||||
case "AddDays": return $"({left} + ({args1}) units day)";
|
case "AddDays": return $"({left} + ({args1}) units day)";
|
||||||
case "AddHours": return $"({left} + ({args1}) units hour)";
|
case "AddHours": return $"({left} + ({args1}) units hour)";
|
||||||
case "AddMilliseconds": return $"({left} + ({args1})/1000 units fraction)";
|
case "AddMilliseconds": return $"({left} + ({args1})/1000 units fraction)";
|
||||||
@ -513,42 +483,6 @@ namespace FreeSql.GBase
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])} - ({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])}) units day)";
|
|
||||||
case "FromHours": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])}) units hour)";
|
|
||||||
case "FromMilliseconds": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])})/1000 units fraction)";
|
|
||||||
case "FromMinutes": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])}) units minute)";
|
|
||||||
case "FromSeconds": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])}) units second)";
|
|
||||||
case "FromTicks": return $"(interval(0) day(9) to fraction + ({getExp(exp.Arguments[0])})/10000000 units fraction)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to fraction)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to fraction)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left} + {args1})";
|
|
||||||
case "Subtract": return $"({left} - ({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left} - ({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(50))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -35,8 +35,8 @@ namespace FreeSql.KingbaseES
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new KdbndpConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new KdbndpConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new KingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -63,7 +63,10 @@ namespace FreeSql.KingbaseES
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -297,35 +297,6 @@ namespace FreeSql.KingbaseES
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{(long)1000000 * 60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(floor(({left})/1000)::int8%1000)";
|
|
||||||
case "Minutes": return $"(floor(({left})/{(long)1000000 * 60})::int8%60)";
|
|
||||||
case "Seconds": return $"(floor(({left})/1000000)::int8%60)";
|
|
||||||
case "Ticks": return $"(({left})*10)";
|
|
||||||
case "TotalDays": return $"(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})/1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/{(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left})/1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -503,7 +474,6 @@ namespace FreeSql.KingbaseES
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"(({left})::timestamp+((({args1})/1000)||' milliseconds')::interval)";
|
|
||||||
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
||||||
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
||||||
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
||||||
@ -582,42 +552,6 @@ namespace FreeSql.KingbaseES
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::varchar";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -35,8 +35,8 @@ namespace FreeSql.MsAccess
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OleDbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OleDbConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new MsAccessConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -74,7 +74,10 @@ namespace FreeSql.MsAccess
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -205,35 +205,6 @@ namespace FreeSql.MsAccess
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"clng(({left})/{60 * 60 * 24}+1)";
|
|
||||||
case "Hours": return $"clng(({left})/{60 * 60} mod 24+1)";
|
|
||||||
case "Milliseconds": return $"({MsAccessUtils.GetCastSql(left, typeof(long))}*1000)";
|
|
||||||
case "Minutes": return $"clng(({left})/60 mod 60+1)";
|
|
||||||
case "Seconds": return $"(({left}) mod 60)";
|
|
||||||
case "Ticks": return $"({MsAccessUtils.GetCastSql(left, typeof(long))}*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"({MsAccessUtils.GetCastSql(left, typeof(long))}*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -376,7 +347,6 @@ namespace FreeSql.MsAccess
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd('s', {args1}, {left})";
|
|
||||||
case "AddDays": return $"dateadd('d', {args1}, {left})";
|
case "AddDays": return $"dateadd('d', {args1}, {left})";
|
||||||
case "AddHours": return $"dateadd('h', {args1}, {left})";
|
case "AddHours": return $"dateadd('h', {args1}, {left})";
|
||||||
case "AddMilliseconds": return $"dateadd('s', ({args1})/1000, {left})";
|
case "AddMilliseconds": return $"dateadd('s', ({args1})/1000, {left})";
|
||||||
@ -399,42 +369,6 @@ namespace FreeSql.MsAccess
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return MsAccessUtils.GetCastSql(getExp(exp.Arguments[0]), typeof(long));
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return MsAccessUtils.GetCastSql(getExp(exp.Arguments[0]), typeof(long));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return MsAccessUtils.GetCastSql(left, typeof(string));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -40,8 +40,8 @@ namespace FreeSql.MySql
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new MySqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new MySqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new MySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -68,7 +68,10 @@ namespace FreeSql.MySql
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is MygisGeometry)
|
else if (param is MygisGeometry)
|
||||||
|
@ -233,35 +233,6 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"(({left}) div {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"(({left}) div {(long)1000000 * 60 * 60} mod 24)";
|
|
||||||
case "Milliseconds": return $"(({left}) div 1000 mod 1000)";
|
|
||||||
case "Minutes": return $"(({left}) div {(long)1000000 * 60} mod 60)";
|
|
||||||
case "Seconds": return $"(({left}) div 1000000 mod 60)";
|
|
||||||
case "Ticks": return $"(({left}) * 10)";
|
|
||||||
case "TotalDays": return $"(({left}) / {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left}) / {(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left}) / 1000)";
|
|
||||||
case "TotalMinutes": return $"(({left}) / {(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left}) / 1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -436,7 +407,6 @@ namespace FreeSql.MySql
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"date_add({left}, interval ({args1}) microsecond)";
|
|
||||||
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
||||||
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
||||||
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
||||||
@ -514,42 +484,6 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as char)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -36,8 +36,8 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcDamengConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -235,35 +235,6 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "numtodsinterval(0,'second')";
|
|
||||||
case "MinValue": return "numtodsinterval(-233720368.5477580,'second')";
|
|
||||||
case "MaxValue": return "numtodsinterval(233720368.5477580,'second')";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"extract(day from {left})";
|
|
||||||
case "Hours": return $"extract(hour from {left})";
|
|
||||||
case "Milliseconds": return $"cast(substr(extract(second from {left})-floor(extract(second from {left})),3,3) as number)";
|
|
||||||
case "Minutes": return $"extract(minute from {left})";
|
|
||||||
case "Seconds": return $"floor(extract(second from {left}))";
|
|
||||||
case "Ticks": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*10000000";
|
|
||||||
case "TotalDays": return $"extract(day from {left})";
|
|
||||||
case "TotalHours": return $"(extract(day from {left})*24+extract(hour from {left}))";
|
|
||||||
case "TotalMilliseconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*1000";
|
|
||||||
case "TotalMinutes": return $"(extract(day from {left})*1440+extract(hour from {left})*60+extract(minute from {left}))";
|
|
||||||
case "TotalSeconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -439,7 +410,6 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "AddDays": return $"({left}+{args1})";
|
case "AddDays": return $"({left}+{args1})";
|
||||||
case "AddHours": return $"({left}+({args1})/24)";
|
case "AddHours": return $"({left}+({args1})/24)";
|
||||||
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
||||||
@ -519,42 +489,6 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"extract(day from ({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])})))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60 * 24},'second')";
|
|
||||||
case "FromHours": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60},'second')";
|
|
||||||
case "FromMilliseconds": return $"numtodsinterval(({getExp(exp.Arguments[0])})/1000,'second')";
|
|
||||||
case "FromMinutes": return $"numtodsinterval(({getExp(exp.Arguments[0])})*60,'second')";
|
|
||||||
case "FromSeconds": return $"numtodsinterval(({getExp(exp.Arguments[0])}),'second')";
|
|
||||||
case "FromTicks": return $"numtodsinterval(({getExp(exp.Arguments[0])})/10000000,'second')";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(6))";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(6))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"extract(day from ({left}-({args1})))";
|
|
||||||
case "ToString": return $"to_char({left})";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -53,7 +53,12 @@ namespace FreeSql.Odbc.Default
|
|||||||
if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1);
|
if (value.Equals(DateTime.MinValue) == true) value = new DateTime(1970, 1, 1);
|
||||||
return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
return string.Concat("'", ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss"), "'");
|
||||||
}
|
}
|
||||||
public virtual string TimeSpanRawSql(object value) => value == null ? "NULL" : ((TimeSpan)value).TotalSeconds.ToString();
|
public virtual string TimeSpanRawSql(object value)
|
||||||
|
{
|
||||||
|
if (value == null) return "NULL";
|
||||||
|
var ts = (TimeSpan)value;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
public virtual string ByteRawSql(object value)
|
public virtual string ByteRawSql(object value)
|
||||||
{
|
{
|
||||||
if (value == null) return "NULL";
|
if (value == null) return "NULL";
|
||||||
@ -136,7 +141,6 @@ namespace FreeSql.Odbc.Default
|
|||||||
|
|
||||||
public virtual string LambdaDateTime_DaysInMonth(string year, string month) => $"datepart(day, dateadd(day, -1, dateadd(month, 1, cast({year} as varchar) + '-' + cast({month} as varchar) + '-1')))";
|
public virtual string LambdaDateTime_DaysInMonth(string year, string month) => $"datepart(day, dateadd(day, -1, dateadd(month, 1, cast({year} as varchar) + '-' + cast({month} as varchar) + '-1')))";
|
||||||
public virtual string LambdaDateTime_IsLeapYear(string year) => $"(({year})%4=0 AND ({year})%100<>0 OR ({year})%400=0)";
|
public virtual string LambdaDateTime_IsLeapYear(string year) => $"(({year})%4=0 AND ({year})%100<>0 OR ({year})%400=0)";
|
||||||
public virtual string LambdaDateTime_Add(string operand, string value) => $"dateadd(second, {value}, {operand})";
|
|
||||||
public virtual string LambdaDateTime_AddDays(string operand, string value) => $"dateadd(day, {value}, {operand})";
|
public virtual string LambdaDateTime_AddDays(string operand, string value) => $"dateadd(day, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_AddHours(string operand, string value) => $"dateadd(hour, {value}, {operand})";
|
public virtual string LambdaDateTime_AddHours(string operand, string value) => $"dateadd(hour, {value}, {operand})";
|
||||||
public virtual string LambdaDateTime_AddMilliseconds(string operand, string value) => $"dateadd(second, ({value})/1000, {operand})";
|
public virtual string LambdaDateTime_AddMilliseconds(string operand, string value) => $"dateadd(second, ({value})/1000, {operand})";
|
||||||
|
@ -37,8 +37,8 @@ namespace FreeSql.Odbc.Default
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -236,35 +236,6 @@ namespace FreeSql.Odbc.Default
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return _utils.Adapter.LambdaMath_Floor($"({left})/{60 * 60 * 24}");
|
|
||||||
case "Hours": return _utils.Adapter.LambdaMath_Floor($"({left})/{60 * 60}%24");
|
|
||||||
case "Milliseconds": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingOdbcTypeBigInt)}*1000)";
|
|
||||||
case "Minutes": return _utils.Adapter.LambdaMath_Floor($"({left})/60%60");
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingOdbcTypeBigInt)}*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"({_utils.Adapter.CastSql(left, _utils.Adapter.MappingOdbcTypeBigInt)}*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -382,7 +353,6 @@ namespace FreeSql.Odbc.Default
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return _utils.Adapter.LambdaDateTime_Add(left, args1);
|
|
||||||
case "AddDays": return _utils.Adapter.LambdaDateTime_AddDays(left, args1);
|
case "AddDays": return _utils.Adapter.LambdaDateTime_AddDays(left, args1);
|
||||||
case "AddHours": return _utils.Adapter.LambdaDateTime_AddHours(left, args1);
|
case "AddHours": return _utils.Adapter.LambdaDateTime_AddHours(left, args1);
|
||||||
case "AddMilliseconds": return _utils.Adapter.LambdaDateTime_AddMilliseconds(left, args1);
|
case "AddMilliseconds": return _utils.Adapter.LambdaDateTime_AddMilliseconds(left, args1);
|
||||||
@ -411,42 +381,6 @@ namespace FreeSql.Odbc.Default
|
|||||||
public virtual string LambdaDateSpan_Equals(string oldvalue, string newvalue) => $"({oldvalue} = {newvalue})";
|
public virtual string LambdaDateSpan_Equals(string oldvalue, string newvalue) => $"({oldvalue} = {newvalue})";
|
||||||
public virtual string LambdaDateSpan_CompareTo(string oldvalue, string newvalue) => $"({oldvalue}-({newvalue}))";
|
public virtual string LambdaDateSpan_CompareTo(string oldvalue, string newvalue) => $"({oldvalue}-({newvalue}))";
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return _utils.Adapter.LambdaConvert_ToInt64(exp.Arguments[0].Type, getExp(exp.Arguments[0]));
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return _utils.Adapter.LambdaConvert_ToInt64(exp.Arguments[0].Type, getExp(exp.Arguments[0]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return _utils.Adapter.LambdaConvert_ToString(exp.Type, left);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -38,8 +38,8 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcKingbaseESConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -66,7 +66,10 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -297,35 +297,6 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{(long)1000000 * 60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(floor(({left})/1000)::int8%1000)";
|
|
||||||
case "Minutes": return $"(floor(({left})/{(long)1000000 * 60})::int8%60)";
|
|
||||||
case "Seconds": return $"(floor(({left})/1000000)::int8%60)";
|
|
||||||
case "Ticks": return $"(({left})*10)";
|
|
||||||
case "TotalDays": return $"(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})/1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/{(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left})/1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -503,7 +474,6 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"(({left})::timestamp+((({args1})/1000)||' milliseconds')::interval)";
|
|
||||||
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
||||||
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
||||||
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
||||||
@ -582,42 +552,6 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::varchar";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -38,8 +38,8 @@ namespace FreeSql.Odbc.MySql
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcMySqlConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -66,7 +66,10 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.fff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -231,35 +231,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"(({left}) div {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"(({left}) div {(long)1000000 * 60 * 60} mod 24)";
|
|
||||||
case "Milliseconds": return $"(({left}) div 1000 mod 1000)";
|
|
||||||
case "Minutes": return $"(({left}) div {(long)1000000 * 60} mod 60)";
|
|
||||||
case "Seconds": return $"(({left}) div 1000000 mod 60)";
|
|
||||||
case "Ticks": return $"(({left}) * 10)";
|
|
||||||
case "TotalDays": return $"(({left}) / {(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left}) / {(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left}) / 1000)";
|
|
||||||
case "TotalMinutes": return $"(({left}) / {(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left}) / 1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -434,7 +405,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"date_add({left}, interval ({args1}) microsecond)";
|
|
||||||
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
case "AddDays": return $"date_add({left}, interval ({args1}) day)";
|
||||||
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
case "AddHours": return $"date_add({left}, interval ({args1}) hour)";
|
||||||
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
case "AddMilliseconds": return $"date_add({left}, interval ({args1})*1000 microsecond)";
|
||||||
@ -512,42 +482,6 @@ namespace FreeSql.Odbc.MySql
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as signed)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as char)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -37,8 +37,8 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcOracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -235,35 +235,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "numtodsinterval(0,'second')";
|
|
||||||
case "MinValue": return "numtodsinterval(-233720368.5477580,'second')";
|
|
||||||
case "MaxValue": return "numtodsinterval(233720368.5477580,'second')";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"extract(day from {left})";
|
|
||||||
case "Hours": return $"extract(hour from {left})";
|
|
||||||
case "Milliseconds": return $"cast(substr(extract(second from {left})-floor(extract(second from {left})),3,3) as number)";
|
|
||||||
case "Minutes": return $"extract(minute from {left})";
|
|
||||||
case "Seconds": return $"floor(extract(second from {left}))";
|
|
||||||
case "Ticks": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*10000000";
|
|
||||||
case "TotalDays": return $"extract(day from {left})";
|
|
||||||
case "TotalHours": return $"(extract(day from {left})*24+extract(hour from {left}))";
|
|
||||||
case "TotalMilliseconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*1000";
|
|
||||||
case "TotalMinutes": return $"(extract(day from {left})*1440+extract(hour from {left})*60+extract(minute from {left}))";
|
|
||||||
case "TotalSeconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -439,7 +410,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "AddDays": return $"({left}+{args1})";
|
case "AddDays": return $"({left}+{args1})";
|
||||||
case "AddHours": return $"({left}+({args1})/24)";
|
case "AddHours": return $"({left}+({args1})/24)";
|
||||||
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
||||||
@ -518,42 +488,6 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"extract(day from ({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])})))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60 * 24},'second')";
|
|
||||||
case "FromHours": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60},'second')";
|
|
||||||
case "FromMilliseconds": return $"numtodsinterval(({getExp(exp.Arguments[0])})/1000,'second')";
|
|
||||||
case "FromMinutes": return $"numtodsinterval(({getExp(exp.Arguments[0])})*60,'second')";
|
|
||||||
case "FromSeconds": return $"numtodsinterval(({getExp(exp.Arguments[0])}),'second')";
|
|
||||||
case "FromTicks": return $"numtodsinterval(({getExp(exp.Arguments[0])})/10000000,'second')";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"extract(day from ({left}-({args1})))";
|
|
||||||
case "ToString": return $"to_char({left})";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -38,8 +38,8 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcPostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -67,7 +67,10 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -319,35 +319,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{(long)1000000 * 60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(floor(({left})/1000)::int8%1000)";
|
|
||||||
case "Minutes": return $"(floor(({left})/{(long)1000000 * 60})::int8%60)";
|
|
||||||
case "Seconds": return $"(floor(({left})/1000000)::int8%60)";
|
|
||||||
case "Ticks": return $"(({left})*10)";
|
|
||||||
case "TotalDays": return $"(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})/1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/{(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left})/1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -528,7 +499,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"(({left})::timestamp+((({args1})/1000)||' milliseconds')::interval)";
|
|
||||||
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
||||||
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
||||||
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
||||||
@ -607,42 +577,6 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::varchar";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -37,8 +37,8 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OdbcConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OdbcSqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -86,7 +86,10 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'");
|
return string.Concat("'", ((DateTimeOffset)param).ToString("yyyy-MM-dd HH:mm:ss.fff zzzz"), "'");
|
||||||
}
|
}
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -241,35 +241,6 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -435,7 +406,6 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd(second, {args1}, {left})";
|
|
||||||
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
||||||
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
||||||
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
||||||
@ -503,42 +473,6 @@ namespace FreeSql.Odbc.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(100))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -36,8 +36,8 @@ namespace FreeSql.Oracle
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => OracleConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => OracleConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new OracleConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -235,35 +235,6 @@ namespace FreeSql.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "numtodsinterval(0,'second')";
|
|
||||||
case "MinValue": return "numtodsinterval(-233720368.5477580,'second')";
|
|
||||||
case "MaxValue": return "numtodsinterval(233720368.5477580,'second')";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"extract(day from {left})";
|
|
||||||
case "Hours": return $"extract(hour from {left})";
|
|
||||||
case "Milliseconds": return $"cast(substr(extract(second from {left})-floor(extract(second from {left})),3,3) as number)";
|
|
||||||
case "Minutes": return $"extract(minute from {left})";
|
|
||||||
case "Seconds": return $"floor(extract(second from {left}))";
|
|
||||||
case "Ticks": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*10000000";
|
|
||||||
case "TotalDays": return $"extract(day from {left})";
|
|
||||||
case "TotalHours": return $"(extract(day from {left})*24+extract(hour from {left}))";
|
|
||||||
case "TotalMilliseconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))*1000";
|
|
||||||
case "TotalMinutes": return $"(extract(day from {left})*1440+extract(hour from {left})*60+extract(minute from {left}))";
|
|
||||||
case "TotalSeconds": return $"(extract(day from {left})*86400+extract(hour from {left})*3600+extract(minute from {left})*60+extract(second from {left}))";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -439,7 +410,6 @@ namespace FreeSql.Oracle
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "AddDays": return $"({left}+{args1})";
|
case "AddDays": return $"({left}+{args1})";
|
||||||
case "AddHours": return $"({left}+({args1})/24)";
|
case "AddHours": return $"({left}+({args1})/24)";
|
||||||
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
case "AddMilliseconds": return $"({left}+({args1})/86400000)";
|
||||||
@ -518,42 +488,6 @@ namespace FreeSql.Oracle
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"extract(day from ({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])})))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60 * 24},'second')";
|
|
||||||
case "FromHours": return $"numtodsinterval(({getExp(exp.Arguments[0])})*{(long)60 * 60},'second')";
|
|
||||||
case "FromMilliseconds": return $"numtodsinterval(({getExp(exp.Arguments[0])})/1000,'second')";
|
|
||||||
case "FromMinutes": return $"numtodsinterval(({getExp(exp.Arguments[0])})*60,'second')";
|
|
||||||
case "FromSeconds": return $"numtodsinterval(({getExp(exp.Arguments[0])}),'second')";
|
|
||||||
case "FromTicks": return $"numtodsinterval(({getExp(exp.Arguments[0])})/10000000,'second')";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as interval day(9) to second(7))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"extract(day from ({left}-({args1})))";
|
|
||||||
case "ToString": return $"to_char({left})";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -38,8 +38,8 @@ namespace FreeSql.PostgreSQL
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new PostgreSQLConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -68,7 +68,10 @@ namespace FreeSql.PostgreSQL
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is JToken || param is JObject || param is JArray)
|
else if (param is JToken || param is JObject || param is JArray)
|
||||||
|
@ -350,35 +350,6 @@ namespace FreeSql.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{(long)1000000 * 60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(floor(({left})/1000)::int8%1000)";
|
|
||||||
case "Minutes": return $"(floor(({left})/{(long)1000000 * 60})::int8%60)";
|
|
||||||
case "Seconds": return $"(floor(({left})/1000000)::int8%60)";
|
|
||||||
case "Ticks": return $"(({left})*10)";
|
|
||||||
case "TotalDays": return $"(({left})/{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{(long)1000000 * 60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})/1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/{(long)1000000 * 60})";
|
|
||||||
case "TotalSeconds": return $"(({left})/1000000)";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -559,7 +530,6 @@ namespace FreeSql.PostgreSQL
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"(({left})::timestamp+((({args1})/1000)||' milliseconds')::interval)";
|
|
||||||
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
case "AddDays": return $"(({left})::timestamp+(({args1})||' day')::interval)";
|
||||||
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
case "AddHours": return $"(({left})::timestamp+(({args1})||' hour')::interval)";
|
||||||
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
case "AddMilliseconds": return $"(({left})::timestamp+(({args1})||' milliseconds')::interval)";
|
||||||
@ -638,42 +608,6 @@ namespace FreeSql.PostgreSQL
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})*1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*{(long)1000000 * 60})";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])})*1000000)";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::varchar";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -38,8 +38,8 @@ namespace FreeSql.QuestDb
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new NpgsqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new QuestDbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new QuestDbConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -70,7 +70,10 @@ namespace FreeSql.QuestDb
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return (long)((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Floor(ts.TotalHours)}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is JToken || param is JObject || param is JArray)
|
else if (param is JToken || param is JObject || param is JArray)
|
||||||
|
@ -247,39 +247,6 @@ namespace FreeSql.QuestDb
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"0";
|
|
||||||
case "Minutes": return $"(floor(({left})/60)%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(({left})*{(long)1000000 * 10})";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
@ -476,7 +443,6 @@ namespace FreeSql.QuestDb
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd('s',{args1},{left})";
|
|
||||||
case "AddDays": return $"dateadd('d',{args1},{left})";
|
case "AddDays": return $"dateadd('d',{args1},{left})";
|
||||||
case "AddHours": return $"dateadd('h',{args1},{left})";
|
case "AddHours": return $"dateadd('h',{args1},{left})";
|
||||||
case "AddMilliseconds": return $"dateadd('s',{args1}/1000,{left})";
|
case "AddMilliseconds": return $"dateadd('s',{args1}/1000,{left})";
|
||||||
@ -546,44 +512,6 @@ namespace FreeSql.QuestDb
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as long)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as long)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as string)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -35,8 +35,8 @@ namespace FreeSql.ShenTong
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OscarConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new OscarConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new ShenTongConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -64,7 +64,12 @@ namespace FreeSql.ShenTong
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
var hh = Math.Min(24, (int)Math.Floor(ts.TotalHours));
|
||||||
|
if (hh >= 24) hh = 0;
|
||||||
|
return $"'{hh}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -279,35 +279,6 @@ namespace FreeSql.ShenTong
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(({left})::int8*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(({left})::int8*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(({left})::int8*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -483,7 +454,6 @@ namespace FreeSql.ShenTong
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd('second',{args1},{left})";
|
|
||||||
case "AddDays": return $"dateadd('day',{args1},{left})";
|
case "AddDays": return $"dateadd('day',{args1},{left})";
|
||||||
case "AddHours": return $"dateadd('hour',{args1},{left})";
|
case "AddHours": return $"dateadd('hour',{args1},{left})";
|
||||||
case "AddMilliseconds": return $"dateadd('second',({args1})/1000,{left})";
|
case "AddMilliseconds": return $"dateadd('second',({args1})/1000,{left})";
|
||||||
@ -562,42 +532,6 @@ namespace FreeSql.ShenTong
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"({getExp(exp.Arguments[0])})::int8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"({left})::text";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -40,8 +40,8 @@ namespace FreeSql.SqlServer
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new SqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new SqlConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new SqlServerConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -99,7 +99,10 @@ namespace FreeSql.SqlServer
|
|||||||
return ((TimeOnly)param).ToTimeSpan().TotalSeconds;
|
return ((TimeOnly)param).ToTimeSpan().TotalSeconds;
|
||||||
#endif
|
#endif
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).TotalSeconds;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
return $"0x{CommonUtils.BytesSqlRaw(param as byte[])}";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -240,35 +240,6 @@ namespace FreeSql.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -435,7 +406,6 @@ namespace FreeSql.SqlServer
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"dateadd(second, {args1}, {left})";
|
|
||||||
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
case "AddDays": return $"dateadd(day, {args1}, {left})";
|
||||||
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
case "AddHours": return $"dateadd(hour, {args1}, {left})";
|
||||||
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
case "AddMilliseconds": return $"dateadd(second, ({args1})/1000, {left})";
|
||||||
@ -501,42 +471,6 @@ namespace FreeSql.SqlServer
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(100))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -41,8 +41,8 @@ namespace FreeSql.Sqlite
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => SqliteConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => SqliteConnectionPool.CreateConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new SqliteConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -231,35 +231,6 @@ namespace FreeSql.Sqlite
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685.477580"; //秒 Ticks / 1000,000,0
|
|
||||||
case "MaxValue": return "922337203685.477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -451,7 +422,6 @@ namespace FreeSql.Sqlite
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"datetime({left},({args1})||' seconds')";
|
|
||||||
case "AddDays": return $"datetime({left},({args1})||' days')";
|
case "AddDays": return $"datetime({left},({args1})||' days')";
|
||||||
case "AddHours": return $"datetime({left},({args1})||' hours')";
|
case "AddHours": return $"datetime({left},({args1})||' hours')";
|
||||||
case "AddMilliseconds": return $"datetime({left},(({args1})/1000)||' seconds')";
|
case "AddMilliseconds": return $"datetime({left},(({args1})/1000)||' seconds')";
|
||||||
@ -529,42 +499,6 @@ namespace FreeSql.Sqlite
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"(({getExp(exp.Arguments[0])}))";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as character)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
@ -36,8 +36,8 @@ namespace FreeSql.Xugu
|
|||||||
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
slaveConnectionStrings?.ToList().ForEach(slaveConnectionString =>
|
||||||
{
|
{
|
||||||
var slavePool = isAdoPool ?
|
var slavePool = isAdoPool ?
|
||||||
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new XGConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
new DbConnectionStringPool(base.DataType, $"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", () => new XGConnection(slaveConnectionString)) as IObjectPool<DbConnection> :
|
||||||
new XuguConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
new XuguConnectionPool($"{CoreStrings.S_SlaveDatabase}{SlavePools.Count + 1}", slaveConnectionString, () => Interlocked.Decrement(ref slaveUnavailables), () => Interlocked.Increment(ref slaveUnavailables));
|
||||||
SlavePools.Add(slavePool);
|
SlavePools.Add(slavePool);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -48,7 +48,6 @@ namespace FreeSql.Xugu
|
|||||||
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray))
|
if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray))
|
||||||
param = Utils.GetDataReaderValue(mapType, param);
|
param = Utils.GetDataReaderValue(mapType, param);
|
||||||
|
|
||||||
bool isdic;
|
|
||||||
if (param is bool || param is bool?)
|
if (param is bool || param is bool?)
|
||||||
return (bool)param ? "'t'" : "'f'";
|
return (bool)param ? "'t'" : "'f'";
|
||||||
else if (param is string)
|
else if (param is string)
|
||||||
@ -66,7 +65,10 @@ namespace FreeSql.Xugu
|
|||||||
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
return AddslashesTypeHandler(typeof(DateTime?), param) ?? string.Concat("'", ((DateTime)param).ToString("yyyy-MM-dd HH:mm:ss.ffffff"), "'");
|
||||||
|
|
||||||
else if (param is TimeSpan || param is TimeSpan?)
|
else if (param is TimeSpan || param is TimeSpan?)
|
||||||
return ((TimeSpan)param).Ticks / 10;
|
{
|
||||||
|
var ts = (TimeSpan)param;
|
||||||
|
return $"'{Math.Min(24, (int)Math.Floor(ts.TotalHours))}:{ts.Minutes}:{ts.Seconds}'";
|
||||||
|
}
|
||||||
else if (param is byte[])
|
else if (param is byte[])
|
||||||
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
return $"'\\x{CommonUtils.BytesSqlRaw(param as byte[])}'";
|
||||||
else if (param is IEnumerable)
|
else if (param is IEnumerable)
|
||||||
|
@ -277,35 +277,6 @@ namespace FreeSql.Xugu
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlMemberAccessTimeSpan(MemberExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
if (exp.Expression == null)
|
|
||||||
{
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Zero": return "0";
|
|
||||||
case "MinValue": return "-922337203685477580"; //微秒 Ticks / 10
|
|
||||||
case "MaxValue": return "922337203685477580";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
var left = ExpressionLambdaToSql(exp.Expression, tsc);
|
|
||||||
switch (exp.Member.Name)
|
|
||||||
{
|
|
||||||
case "Days": return $"floor(({left})/{60 * 60 * 24})";
|
|
||||||
case "Hours": return $"floor(({left})/{60 * 60}%24)";
|
|
||||||
case "Milliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "Minutes": return $"floor(({left})/60%60)";
|
|
||||||
case "Seconds": return $"(({left})%60)";
|
|
||||||
case "Ticks": return $"(cast({left} as bigint)*10000000)";
|
|
||||||
case "TotalDays": return $"(({left})/{60 * 60 * 24})";
|
|
||||||
case "TotalHours": return $"(({left})/{60 * 60})";
|
|
||||||
case "TotalMilliseconds": return $"(cast({left} as bigint)*1000)";
|
|
||||||
case "TotalMinutes": return $"(({left})/60)";
|
|
||||||
case "TotalSeconds": return $"({left})";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallString(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
@ -484,7 +455,6 @@ namespace FreeSql.Xugu
|
|||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
||||||
switch (exp.Method.Name)
|
switch (exp.Method.Name)
|
||||||
{
|
{
|
||||||
case "Add": return $"date_add({left}, interval '{args1}' microsecond)";
|
|
||||||
case "AddDays": return $"date_add({left}, interval '{args1}' day)";
|
case "AddDays": return $"date_add({left}, interval '{args1}' day)";
|
||||||
case "AddHours": return $"date_add({left}, interval '{args1}' hour)";
|
case "AddHours": return $"date_add({left}, interval '{args1}' hour)";
|
||||||
case "AddMilliseconds": return $"date_add({left}, interval '{args1}'*1000 microsecond)";
|
case "AddMilliseconds": return $"date_add({left}, interval '{args1}'*1000 microsecond)";
|
||||||
@ -562,42 +532,6 @@ namespace FreeSql.Xugu
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public override string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc)
|
|
||||||
{
|
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
|
||||||
if (exp.Object == null)
|
|
||||||
{
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Compare": return $"({getExp(exp.Arguments[0])}-({getExp(exp.Arguments[1])}))";
|
|
||||||
case "Equals": return $"({getExp(exp.Arguments[0])} = {getExp(exp.Arguments[1])})";
|
|
||||||
case "FromDays": return $"(({getExp(exp.Arguments[0])})*{60 * 60 * 24})";
|
|
||||||
case "FromHours": return $"(({getExp(exp.Arguments[0])})*{60 * 60})";
|
|
||||||
case "FromMilliseconds": return $"(({getExp(exp.Arguments[0])})/1000)";
|
|
||||||
case "FromMinutes": return $"(({getExp(exp.Arguments[0])})*60)";
|
|
||||||
case "FromSeconds": return $"({getExp(exp.Arguments[0])})";
|
|
||||||
case "FromTicks": return $"(({getExp(exp.Arguments[0])})/10000000)";
|
|
||||||
case "Parse": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
case "ParseExact":
|
|
||||||
case "TryParse":
|
|
||||||
case "TryParseExact": return $"cast({getExp(exp.Arguments[0])} as bigint)";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var left = getExp(exp.Object);
|
|
||||||
var args1 = exp.Arguments.Count == 0 ? null : getExp(exp.Arguments[0]);
|
|
||||||
switch (exp.Method.Name)
|
|
||||||
{
|
|
||||||
case "Add": return $"({left}+{args1})";
|
|
||||||
case "Subtract": return $"({left}-({args1}))";
|
|
||||||
case "Equals": return $"({left} = {args1})";
|
|
||||||
case "CompareTo": return $"({left}-({args1}))";
|
|
||||||
case "ToString": return $"cast({left} as varchar(100))";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
public override string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc)
|
||||||
{
|
{
|
||||||
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
Func<Expression, string> getExp = exparg => ExpressionLambdaToSql(exparg, tsc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user