From 98d120120b603b07b4312b0d7fa2a6cc6f13d6cb Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 20 May 2019 16:54:11 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=A1=A5=E5=85=85=20IUpdate.Set(a=20=3D>?= =?UTF-8?q?=20a.Click=20=3D=3D=2010)=EF=BC=8C=E7=AE=80=E5=8C=96=20Set=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=95=E4=B8=AA=E5=AD=97=E6=AE=B5=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs | 6 ++++++ FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs | 6 ++++++ FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs | 6 ++++++ FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs | 6 ++++++ FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs | 6 ++++++ FreeSql/Internal/CommonProvider/UpdateProvider.cs | 4 ++++ 6 files changed, 34 insertions(+) diff --git a/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs b/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs index 103f0da9..95f65f3f 100644 --- a/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs +++ b/FreeSql.Tests/MySql/Curd/MySqlUpdateTest.cs @@ -115,6 +115,12 @@ namespace FreeSql.Tests.MySql { sql = update.Set(a => a.Id - incrv).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE `tb_topic` SET `Id` = (`Id` - 10) WHERE (`Id` = 1)", sql); + sql = update.Set(a => a.Clicks == a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE `tb_topic` SET `Clicks` = `Clicks` * 10 / 1 WHERE (`Id` = 1)", sql); + + sql = update.Set(a => a.Id == 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE `tb_topic` SET `Id` = 10 WHERE (`Id` = 1)", sql); + var id = g.mysql.Insert().AppendData(new TestEnumUpdateTb { type = TestEnumUpdateTbType.sum211 }).ExecuteIdentity(); Assert.True(id > 0); sql = g.mysql.Update().Where(a => a.id == id).Set(a => a.type, TestEnumUpdateTbType.biggit).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs b/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs index 66b2a730..2fb79001 100644 --- a/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs +++ b/FreeSql.Tests/Oracle/Curd/OracleUpdateTest.cs @@ -73,6 +73,12 @@ namespace FreeSql.Tests.Oracle { sql = update.Set(a => a.Id - incrv).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = (\"ID\" - 10) WHERE (\"ID\" = 1)", sql); + + sql = update.Set(a => a.Clicks == a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = \"CLICKS\" * 10 / 1 WHERE (\"ID\" = 1)", sql); + + sql = update.Set(a => a.Id == 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = 10 WHERE (\"ID\" = 1)", sql); } [Fact] public void SetRaw() { diff --git a/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs b/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs index 70afc5ca..d1e96cc0 100644 --- a/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs +++ b/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLUpdateTest.cs @@ -73,6 +73,12 @@ namespace FreeSql.Tests.PostgreSQL { sql = update.Set(a => a.Id - incrv).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"tb_topic\" SET \"id\" = (\"id\" - 10) WHERE (\"id\" = 1)", sql); + + sql = update.Set(a => a.Clicks == a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"tb_topic\" SET \"clicks\" = \"clicks\" * 10 / 1 WHERE (\"id\" = 1)", sql); + + sql = update.Set(a => a.Id == 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"tb_topic\" SET \"id\" = 10 WHERE (\"id\" = 1)", sql); } [Fact] public void SetRaw() { diff --git a/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs b/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs index acbd2508..7522065d 100644 --- a/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs +++ b/FreeSql.Tests/SqlServer/Curd/SqlServerUpdateTest.cs @@ -84,6 +84,12 @@ namespace FreeSql.Tests.SqlServer { sql = update.Set(a => a.Id - incrv).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE [tb_topic] SET [Id] = ([Id] - 10) WHERE ([Id] = 1)", sql); + + sql = update.Set(a => a.Clicks == a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE [tb_topic] SET [Clicks] = [Clicks] * 10 / 1 WHERE ([Id] = 1)", sql); + + sql = update.Set(a => a.Id == 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE [tb_topic] SET [Id] = 10 WHERE ([Id] = 1)", sql); } [Fact] public void SetRaw() { diff --git a/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs b/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs index e34518c1..05d00ce3 100644 --- a/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs +++ b/FreeSql.Tests/Sqlite/Curd/SqliteUpdateTest.cs @@ -77,6 +77,12 @@ namespace FreeSql.Tests.Sqlite { sql = update.Set(a => a.CreateTime.AddYears(1)).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); Assert.Equal("UPDATE \"tb_topic\" SET \"CreateTime\" = datetime(\"CreateTime\",(1)||' years') WHERE (\"Id\" = 1)", sql); + + sql = update.Set(a => a.Clicks == a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = \"Clicks\" * 10 / 1 WHERE (\"Id\" = 1)", sql); + + sql = update.Set(a => a.Id == 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); + Assert.Equal("UPDATE \"tb_topic\" SET \"Id\" = 10 WHERE (\"Id\" = 1)", sql); } [Fact] public void SetRaw() { diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 9fea958f..57bea6cb 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -341,6 +341,10 @@ namespace FreeSql.Internal.CommonProvider { return this; } public IUpdate Set(Expression> binaryExpression) { + if (binaryExpression?.Body.NodeType == ExpressionType.Equal) { + _set.Append(", ").Append(_commonExpression.ExpressionWhereLambdaNoneForeignObject(null, _table, null, binaryExpression, null)); + return this; + } if (binaryExpression?.Body is BinaryExpression == false && binaryExpression?.Body.NodeType != ExpressionType.Call) return this; var cols = new List();