From d105041858363b20706443f83e49841cc0b1f104 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Fri, 6 Sep 2019 14:48:37 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E5=AF=B9=E6=95=B4=E6=95=B0=E9=99=A4=E6=B3=95=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E8=A7=A3=E6=9E=90=E4=B8=BA=E6=95=B4?= =?UTF-8?q?=E9=99=A4=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySqlConnectorExpression/OtherTest.cs | 16 ++++++++++++++++ .../MySql/MySqlExpression/OtherTest.cs | 16 ++++++++++++++++ .../Oracle/OracleExpression/OtherTest.cs | 16 ++++++++++++++++ .../PostgreSQL/PostgreSQLExpression/OtherTest.cs | 16 ++++++++++++++++ .../SqlServer/SqlServerExpression/OtherTest.cs | 16 ++++++++++++++++ .../Sqlite/SqliteExpression/OtherTest.cs | 16 ++++++++++++++++ FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 3 ++- FreeSql/Internal/CommonExpression.cs | 7 +++---- FreeSql/Internal/CommonUtils.cs | 1 + Providers/FreeSql.Provider.MySql/MySqlUtils.cs | 3 ++- .../MySqlConnectorUtils.cs | 3 ++- Providers/FreeSql.Provider.Oracle/OracleUtils.cs | 1 + .../PostgreSQLUtils.cs | 1 + .../FreeSql.Provider.SqlServer/SqlServerUtils.cs | 1 + Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs | 1 + 15 files changed, 110 insertions(+), 7 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs index 8fc9d3eb..361c2c67 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/OtherTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs index 44345f68..83c2c2be 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/OtherTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs index 512c1441..ed6a76d7 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleExpression/OtherTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs index 6a31499a..d1bbdd0d 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLExpression/OtherTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs index ef10ff43..53427c37 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/OtherTest.cs @@ -20,6 +20,22 @@ namespace FreeSql.Tests.SqlServerExpression ISelect select => _sqlserverFixture.SqlServer.Select(); + [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() { diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs index 020d405b..3e2c3e53 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteExpression/OtherTest.cs @@ -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() { diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 3df650fb..a2b00e45 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -405,7 +405,8 @@ namespace FreeSql.Tests [Fact] public void Test1() { - var floorSql = g.sqlite.Select().Where(a => a.OptionsEntity04 / 10000 == 121212 / 10000).ToSql(); + var floorSql1 = g.mysql.Select().Where(a => a.OptionsEntity04 / 10000 == 121212 / 10000).ToSql(); + var floorSql2 = g.mysql.Select().Where(a => a.OptionsEntity04 / 10000.0 == 121212 / 10000).ToSql(); var testBoolSql1 = g.sqlserver.Select().Where(a => a.OptionsEntity01).ToSql(); var testBoolSql2 = g.sqlserver.Select().Where(a => a.Id == Guid.NewGuid() && a.OptionsEntity01).ToSql(); diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index 6e54b362..deada8a9 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -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) diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs index 84c90381..a1bce7e8 100644 --- a/FreeSql/Internal/CommonUtils.cs +++ b/FreeSql/Internal/CommonUtils.cs @@ -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); diff --git a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs index d2b75c78..52804544 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs @@ -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) diff --git a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs index 05a8374f..f5646853 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs @@ -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) diff --git a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs index c9deb887..48a835a7 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs @@ -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; diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs index 3069d618..7f0ed104 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs @@ -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; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs index 5bef8a09..da59f6e0 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs @@ -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; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs index 0ce0b722..f861c6c6 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs @@ -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;