mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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]
|
||||
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]
|
||||
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]
|
||||
public void Boolean()
|
||||
{
|
||||
|
@ -24,6 +24,22 @@ namespace FreeSql.Tests.PostgreSQLExpression
|
||||
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]
|
||||
public void Boolean()
|
||||
{
|
||||
|
@ -20,6 +20,22 @@ namespace FreeSql.Tests.SqlServerExpression
|
||||
|
||||
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]
|
||||
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]
|
||||
public void Boolean()
|
||||
{
|
||||
|
@ -405,7 +405,8 @@ namespace FreeSql.Tests
|
||||
[Fact]
|
||||
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 testBoolSql2 = g.sqlserver.Select<TaskBuild>().Where(a => a.Id == Guid.NewGuid() && a.OptionsEntity01).ToSql();
|
||||
|
@ -483,6 +483,9 @@ namespace FreeSql.Internal
|
||||
switch (oper)
|
||||
{
|
||||
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 "OR":
|
||||
left = GetBoolString(left);
|
||||
@ -490,10 +493,6 @@ namespace FreeSql.Internal
|
||||
break;
|
||||
}
|
||||
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}";
|
||||
}
|
||||
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 StringConcat(string[] objs, Type[] types);
|
||||
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 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 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 Div(string left, string right, Type leftType, Type rightType) => $"{left} div {right}";
|
||||
|
||||
public override string QuoteWriteParamter(Type type, string paramterName)
|
||||
{
|
||||
switch (type.FullName)
|
||||
@ -87,7 +89,6 @@ namespace FreeSql.MySql
|
||||
}
|
||||
return paramterName;
|
||||
}
|
||||
|
||||
public override string QuoteReadColumn(Type type, string columnName)
|
||||
{
|
||||
switch (type.FullName)
|
||||
|
@ -82,6 +82,8 @@ namespace FreeSql.MySql
|
||||
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 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)
|
||||
{
|
||||
switch (type.FullName)
|
||||
@ -95,7 +97,6 @@ namespace FreeSql.MySql
|
||||
}
|
||||
return paramterName;
|
||||
}
|
||||
|
||||
public override string QuoteReadColumn(Type type, string columnName)
|
||||
{
|
||||
switch (type.FullName)
|
||||
|
@ -64,6 +64,7 @@ namespace FreeSql.Oracle
|
||||
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 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 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 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 Div(string left, string right, Type leftType, Type rightType) => $"{left} / {right}";
|
||||
|
||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||
|
@ -66,6 +66,7 @@ namespace FreeSql.SqlServer
|
||||
return string.Join(" + ", news);
|
||||
}
|
||||
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 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 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 Div(string left, string right, Type leftType, Type rightType) => $"{left} / {right}";
|
||||
|
||||
public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
|
||||
public override string QuoteReadColumn(Type type, string columnName) => columnName;
|
||||
|
Loading…
x
Reference in New Issue
Block a user