From f1625202020f2878dc466bff6bc0483b09b5ef8d Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 14 Dec 2019 12:21:55 +0800 Subject: [PATCH] update ForUpdate tests --- FreeSql.DbContext/FreeSql.DbContext.xml | 7 + .../MySqlConnector/Curd/MySqlSelectTest.cs | 4 + .../Dameng/Curd/DamengSelectTest.cs | 4 + .../Default/Curd/OdbcSelectTest.cs | 4 + .../MySql/Curd/MySqlSelectTest.cs | 4 + .../Oracle/Curd/OracleSelectTest.cs | 4 + .../PostgreSQL/Curd/PostgreSQLSelectTest.cs | 4 + .../SqlServer/Curd/SqlServerSelectTest.cs | 4 + .../MySql/Curd/MySqlSelectTest.cs | 4 + .../Oracle/Curd/OracleSelectTest.cs | 4 + .../PostgreSQL/Curd/PostgreSQLSelectTest.cs | 4 + .../SqlServer/Curd/SqlServerSelectTest.cs | 4 + .../Sqlite/Curd/SqliteSelectTest.cs | 4 + FreeSql/FreeSql.xml | 131 ++++++++++++++++++ 14 files changed, 186 insertions(+) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index dc0203b8a..d9f91124e 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -110,6 +110,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs index c47597374..bd98bc2aa 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs @@ -1603,6 +1603,10 @@ namespace FreeSql.Tests.MySqlConnector public void ForUpdate() { var orm = g.mysql; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs index ceb18b684..57002e1d9 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs @@ -1530,6 +1530,10 @@ namespace FreeSql.Tests.Odbc.Dameng public void ForUpdate() { var orm = g.dameng; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs index 07ab82342..1106202b2 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/Curd/OdbcSelectTest.cs @@ -1341,6 +1341,10 @@ namespace FreeSql.Tests.Odbc.Default public void ForUpdate() { var orm = g.odbc; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs index 51482200c..88da23e62 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs @@ -1614,6 +1614,10 @@ namespace FreeSql.Tests.Odbc.MySql public void ForUpdate() { var orm = g.mysql; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs index 0568f1213..71a9e93d8 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs @@ -1530,6 +1530,10 @@ namespace FreeSql.Tests.Odbc.Oracle public void ForUpdate() { var orm = g.oracle; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs index faf703735..d414956cc 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs @@ -1586,6 +1586,10 @@ namespace FreeSql.Tests.Odbc.PostgreSQL public void ForUpdate() { var orm = g.pgsql; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs index 0d92fd451..2fe461cae 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs @@ -1480,6 +1480,10 @@ namespace FreeSql.Tests.Odbc.SqlServer public void ForUpdate() { var orm = g.sqlserver; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs index 7783236ff..ba3ab4afe 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs @@ -1645,6 +1645,10 @@ namespace FreeSql.Tests.MySql public void ForUpdate() { var orm = g.mysql; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs index bf8cd0a02..2e36d4e89 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/Curd/OracleSelectTest.cs @@ -1530,6 +1530,10 @@ namespace FreeSql.Tests.Oracle public void ForUpdate() { var orm = g.oracle; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs index 9308436d7..662c084dd 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/Curd/PostgreSQLSelectTest.cs @@ -1603,6 +1603,10 @@ namespace FreeSql.Tests.PostgreSQL public void ForUpdate() { var orm = g.pgsql; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index 92be87cb5..9adc89d4e 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -1548,6 +1548,10 @@ namespace FreeSql.Tests.SqlServer public void ForUpdate() { var orm = g.sqlserver; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs index d0008de7d..dfaf65fc6 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs @@ -1678,6 +1678,10 @@ namespace FreeSql.Tests.Sqlite public void ForUpdate() { var orm = g.sqlite; + + Assert.Equal("安全起见,请务必在事务开启之后,再使用 ForUpdate", + Assert.Throws(() => orm.Select().ForUpdate().Limit(1).ToList())?.Message); + orm.Transaction(() => { var sql = orm.Select().ForUpdate().Limit(1).ToSql().Replace("\r\n", ""); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 0bac76296..f9ceda036 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2125,6 +2125,137 @@ + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 }) + + + + + + + 查询 + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 }) + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 }) + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new { age = 25 }) + + + + + + 可自定义解析表达式