mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 优化 表达式对整数除法的处理,解析为整除;
This commit is contained in:
parent
d51aef2aa9
commit
d105041858
@ -17,6 +17,22 @@ namespace FreeSql.Tests.MySqlConnectorExpression
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.testFieldInt / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.testFieldLong / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.testFieldShort / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.testFieldInt / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.testFieldLong / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.testFieldShort / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.testFieldDouble / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.testFieldDecimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.testFieldFloat / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,22 @@ namespace FreeSql.Tests.MySqlExpression
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.testFieldInt / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.testFieldLong / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.testFieldShort / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.testFieldInt / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.testFieldLong / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.testFieldShort / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.testFieldDouble / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.testFieldDecimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.testFieldFloat / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,22 @@ namespace FreeSql.Tests.OracleExpression
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.Int / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.Long / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.Short / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.Int / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.Long / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.Short / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.Double / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.Decimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.Float / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,22 @@ namespace FreeSql.Tests.PostgreSQLExpression
|
|||||||
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
|
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.testFieldInt / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.testFieldLong / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.testFieldShort / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.testFieldInt / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.testFieldLong / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.testFieldShort / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.testFieldDouble / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.testFieldDecimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.testFieldFloat / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -20,6 +20,22 @@ namespace FreeSql.Tests.SqlServerExpression
|
|||||||
|
|
||||||
ISelect<TableAllType> select => _sqlserverFixture.SqlServer.Select<TableAllType>();
|
ISelect<TableAllType> select => _sqlserverFixture.SqlServer.Select<TableAllType>();
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.testFieldInt / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.testFieldLong / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.testFieldShort / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.testFieldInt / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.testFieldLong / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.testFieldShort / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.testFieldDouble / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.testFieldDecimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.testFieldFloat / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,22 @@ namespace FreeSql.Tests.SqliteExpression
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Div()
|
||||||
|
{
|
||||||
|
var t1 = select.Where(a => a.Int / 3 > 3).Limit(10).ToList();
|
||||||
|
var t2 = select.Where(a => a.Long / 3 > 3).Limit(10).ToList();
|
||||||
|
var t3 = select.Where(a => a.Short / 3 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t4 = select.Where(a => a.Int / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t5 = select.Where(a => a.Long / 3.0 > 3).Limit(10).ToList();
|
||||||
|
var t6 = select.Where(a => a.Short / 3.0 > 3).Limit(10).ToList();
|
||||||
|
|
||||||
|
var t7 = select.Where(a => a.Double / 3 > 3).Limit(10).ToList();
|
||||||
|
var t8 = select.Where(a => a.Decimal / 3 > 3).Limit(10).ToList();
|
||||||
|
var t9 = select.Where(a => a.Float / 3 > 3).Limit(10).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Boolean()
|
public void Boolean()
|
||||||
{
|
{
|
||||||
|
@ -405,7 +405,8 @@ namespace FreeSql.Tests
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void Test1()
|
public void Test1()
|
||||||
{
|
{
|
||||||
var floorSql = g.sqlite.Select<TaskBuild>().Where(a => a.OptionsEntity04 / 10000 == 121212 / 10000).ToSql();
|
var floorSql1 = g.mysql.Select<TaskBuild>().Where(a => a.OptionsEntity04 / 10000 == 121212 / 10000).ToSql();
|
||||||
|
var floorSql2 = g.mysql.Select<TaskBuild>().Where(a => a.OptionsEntity04 / 10000.0 == 121212 / 10000).ToSql();
|
||||||
|
|
||||||
var testBoolSql1 = g.sqlserver.Select<TaskBuild>().Where(a => a.OptionsEntity01).ToSql();
|
var testBoolSql1 = g.sqlserver.Select<TaskBuild>().Where(a => a.OptionsEntity01).ToSql();
|
||||||
var testBoolSql2 = g.sqlserver.Select<TaskBuild>().Where(a => a.Id == Guid.NewGuid() && a.OptionsEntity01).ToSql();
|
var testBoolSql2 = g.sqlserver.Select<TaskBuild>().Where(a => a.Id == Guid.NewGuid() && a.OptionsEntity01).ToSql();
|
||||||
|
@ -483,6 +483,9 @@ namespace FreeSql.Internal
|
|||||||
switch (oper)
|
switch (oper)
|
||||||
{
|
{
|
||||||
case "%": return _common.Mod(left, right, leftExp.Type, rightExp.Type);
|
case "%": return _common.Mod(left, right, leftExp.Type, rightExp.Type);
|
||||||
|
case "/":
|
||||||
|
if (leftExp.Type.IsIntegerType() && rightExp.Type.IsIntegerType()) return _common.Div(left, right, leftExp.Type, rightExp.Type);
|
||||||
|
break;
|
||||||
case "AND":
|
case "AND":
|
||||||
case "OR":
|
case "OR":
|
||||||
left = GetBoolString(left);
|
left = GetBoolString(left);
|
||||||
@ -490,10 +493,6 @@ namespace FreeSql.Internal
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tsc.mapType = null;
|
tsc.mapType = null;
|
||||||
//switch(oper)
|
|
||||||
//{
|
|
||||||
// case "/": return ExpressionLambdaToSqlCallMath(Expression.Call(MethodMathFloor, Expression.Constant(1213.1d, typeof(double))), tsc)?.Replace("1213.1", $"{left} {oper} {right}");
|
|
||||||
//}
|
|
||||||
return $"{left} {oper} {right}";
|
return $"{left} {oper} {right}";
|
||||||
}
|
}
|
||||||
public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
|
public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
|
||||||
|
@ -32,6 +32,7 @@ namespace FreeSql.Internal
|
|||||||
public abstract string IsNull(string sql, object value);
|
public abstract string IsNull(string sql, object value);
|
||||||
public abstract string StringConcat(string[] objs, Type[] types);
|
public abstract string StringConcat(string[] objs, Type[] types);
|
||||||
public abstract string Mod(string left, string right, Type leftType, Type rightType);
|
public abstract string Mod(string left, string right, Type leftType, Type rightType);
|
||||||
|
public abstract string Div(string left, string right, Type leftType, Type rightType);
|
||||||
public abstract string QuoteWriteParamter(Type type, string paramterName);
|
public abstract string QuoteWriteParamter(Type type, string paramterName);
|
||||||
public abstract string QuoteReadColumn(Type type, string columnName);
|
public abstract string QuoteReadColumn(Type type, string columnName);
|
||||||
|
|
||||||
|
@ -74,6 +74,8 @@ namespace FreeSql.MySql
|
|||||||
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
||||||
public override string StringConcat(string[] objs, Type[] types) => $"concat({string.Join(", ", objs)})";
|
public override string StringConcat(string[] objs, Type[] types) => $"concat({string.Join(", ", objs)})";
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName)
|
public override string QuoteWriteParamter(Type type, string paramterName)
|
||||||
{
|
{
|
||||||
switch (type.FullName)
|
switch (type.FullName)
|
||||||
@ -87,7 +89,6 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
return paramterName;
|
return paramterName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string QuoteReadColumn(Type type, string columnName)
|
public override string QuoteReadColumn(Type type, string columnName)
|
||||||
{
|
{
|
||||||
switch (type.FullName)
|
switch (type.FullName)
|
||||||
|
@ -82,6 +82,8 @@ namespace FreeSql.MySql
|
|||||||
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
||||||
public override string StringConcat(string[] objs, Type[] types) => $"concat({string.Join(", ", objs)})";
|
public override string StringConcat(string[] objs, Type[] types) => $"concat({string.Join(", ", objs)})";
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName)
|
public override string QuoteWriteParamter(Type type, string paramterName)
|
||||||
{
|
{
|
||||||
switch (type.FullName)
|
switch (type.FullName)
|
||||||
@ -95,7 +97,6 @@ namespace FreeSql.MySql
|
|||||||
}
|
}
|
||||||
return paramterName;
|
return paramterName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string QuoteReadColumn(Type type, string columnName)
|
public override string QuoteReadColumn(Type type, string columnName)
|
||||||
{
|
{
|
||||||
switch (type.FullName)
|
switch (type.FullName)
|
||||||
|
@ -64,6 +64,7 @@ namespace FreeSql.Oracle
|
|||||||
public override string IsNull(string sql, object value) => $"nvl({sql}, {value})";
|
public override string IsNull(string sql, object value) => $"nvl({sql}, {value})";
|
||||||
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"mod({left}, {right})";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"mod({left}, {right})";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"trunc({left} / {right})";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||||
|
@ -126,6 +126,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
public override string IsNull(string sql, object value) => $"coalesce({sql}, {value})";
|
public override string IsNull(string sql, object value) => $"coalesce({sql}, {value})";
|
||||||
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} / {right}";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||||
|
@ -66,6 +66,7 @@ namespace FreeSql.SqlServer
|
|||||||
return string.Join(" + ", news);
|
return string.Join(" + ", news);
|
||||||
}
|
}
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} / {right}";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||||
|
@ -79,6 +79,7 @@ namespace FreeSql.Sqlite
|
|||||||
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
public override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
|
||||||
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
public override string StringConcat(string[] objs, Type[] types) => $"{string.Join(" || ", objs)}";
|
||||||
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
public override string Mod(string left, string right, Type leftType, Type rightType) => $"{left} % {right}";
|
||||||
|
public override string Div(string left, string right, Type leftType, Type rightType) => $"{left} / {right}";
|
||||||
|
|
||||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user