From ab1d0a2cb582d551ff0817542faeb88bc98a1275 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Fri, 20 Dec 2019 19:47:43 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IInsert/IUpdate=20Batc?= =?UTF-8?q?hOptions=20=E6=96=B9=E6=B3=95=E6=8C=87=E5=AE=9A=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=8F=92=E5=85=A5=E7=9A=84=E8=AE=BE=E7=BD=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/FreeSql.xml | 163 ++++-------------- FreeSql/Interface/Curd/IInsert.cs | 16 ++ FreeSql/Interface/Curd/IUpdate.cs | 16 ++ .../Internal/CommonProvider/InsertProvider.cs | 18 +- .../Internal/CommonProvider/UpdateProvider.cs | 16 +- .../Curd/MySqlInsert.cs | 6 +- .../Curd/MySqlUpdate.cs | 4 +- .../Dameng/Curd/OdbcDamengInsert.cs | 6 +- .../Dameng/Curd/OdbcDamengUpdate.cs | 4 +- .../GBase/Curd/OdbcGBaseUpdate.cs | 4 +- .../GBase/Curd/__OdbcGBaseInsert.cs | 6 +- .../MySql/Curd/OdbcMySqlInsert.cs | 6 +- .../MySql/Curd/OdbcMySqlUpdate.cs | 4 +- .../Oracle/Curd/OdbcOracleInsert.cs | 6 +- .../Oracle/Curd/OdbcOracleUpdate.cs | 4 +- .../PostgreSQL/Curd/OdbcPostgreSQLInsert.cs | 6 +- .../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 4 +- .../SqlServer/Curd/OdbcSqlServerInsert.cs | 6 +- .../SqlServer/Curd/OdbcSqlServerUpdate.cs | 4 +- .../Curd/OracleInsert.cs | 6 +- .../Curd/OracleUpdate.cs | 4 +- .../Curd/PostgreSQLInsert.cs | 6 +- .../Curd/PostgreSQLUpdate.cs | 4 +- .../Curd/SqlServerInsert.cs | 6 +- .../Curd/SqlServerUpdate.cs | 4 +- .../Curd/SqliteInsert.cs | 6 +- .../Curd/SqliteUpdate.cs | 4 +- 27 files changed, 148 insertions(+), 191 deletions(-) diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 97eb81b3..76a0f62e 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -856,6 +856,22 @@ + + + 批量执行选项设置,一般不需要使用该方法 + 各数据库 values, parameters 限制不一样,默认设置: + MySql 5000 3000 + PostgreSQL 5000 3000 + SqlServer 1000 2100 + Oracle 500 999 + Sqlite 5000 999 + 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 + + 指定根据 values 数量拆分执行 + 指定根据 parameters 数量拆分执行 + 是否自动开启事务 + + 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名; @@ -1818,6 +1834,22 @@ + + + 批量执行选项设置,一般不需要使用该方法 + 各数据库 rows, parameters 限制不一样,默认设置: + MySql 500 3000 + PostgreSQL 500 3000 + SqlServer 500 2100 + Oracle 200 999 + Sqlite 200 999 + 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 + + 指定根据 rows 数量拆分执行 + 指定根据 parameters 数量拆分执行 + 是否自动开启事务 + + 更新数据,设置更新的实体 @@ -2146,137 +2178,6 @@ - - - 查询,若使用读写分离,查询【从库】条件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 }) - - - - - - 可自定义解析表达式 diff --git a/FreeSql/Interface/Curd/IInsert.cs b/FreeSql/Interface/Curd/IInsert.cs index 9a246642..74a77ca5 100644 --- a/FreeSql/Interface/Curd/IInsert.cs +++ b/FreeSql/Interface/Curd/IInsert.cs @@ -66,6 +66,22 @@ namespace FreeSql /// IInsert NoneParameter(); + /// + /// 批量执行选项设置,一般不需要使用该方法 + /// 各数据库 values, parameters 限制不一样,默认设置: + /// MySql 5000 3000 + /// PostgreSQL 5000 3000 + /// SqlServer 1000 2100 + /// Oracle 500 999 + /// Sqlite 5000 999 + /// 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 + /// + /// 指定根据 values 数量拆分执行 + /// 指定根据 parameters 数量拆分执行 + /// 是否自动开启事务 + /// + IInsert BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true); + /// /// 设置表名规则,可用于分库/分表,参数1:默认表名;返回值:新表名; /// diff --git a/FreeSql/Interface/Curd/IUpdate.cs b/FreeSql/Interface/Curd/IUpdate.cs index 9276c68d..8595b648 100644 --- a/FreeSql/Interface/Curd/IUpdate.cs +++ b/FreeSql/Interface/Curd/IUpdate.cs @@ -28,6 +28,22 @@ namespace FreeSql /// IUpdate NoneParameter(); + /// + /// 批量执行选项设置,一般不需要使用该方法 + /// 各数据库 rows, parameters 限制不一样,默认设置: + /// MySql 500 3000 + /// PostgreSQL 500 3000 + /// SqlServer 500 2100 + /// Oracle 200 999 + /// Sqlite 200 999 + /// 若没有事务传入,内部(默认)会自动开启新事务,保证拆包执行的完整性。 + /// + /// 指定根据 rows 数量拆分执行 + /// 指定根据 parameters 数量拆分执行 + /// 是否自动开启事务 + /// + IUpdate BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true); + /// /// 更新数据,设置更新的实体 /// diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index ebfb45c1..a606b4d3 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -23,6 +23,8 @@ namespace FreeSql.Internal.CommonProvider protected TableInfo _table; protected Func _tableRule; protected bool _noneParameter, _insertIdentity; + protected int _batchValuesLimit, _batchParameterLimit; + protected bool _batchAutoTransaction = true; protected DbParameter[] _params; protected DbTransaction _transaction; protected DbConnection _connection; @@ -50,6 +52,8 @@ namespace FreeSql.Internal.CommonProvider } protected void ClearData() { + _batchValuesLimit = _batchParameterLimit = 0; + _batchAutoTransaction = true; _insertIdentity = false; _source.Clear(); _ignore.Clear(); @@ -83,6 +87,14 @@ namespace FreeSql.Internal.CommonProvider return this; } + public IInsert BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true) + { + _batchValuesLimit = valuesLimit; + _batchParameterLimit = parameterLimit; + _batchAutoTransaction = autoTransaction; + return this; + } + public IInsert AppendData(T1 source) { if (source != null) @@ -181,7 +193,7 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + if (_transaction != null || _batchAutoTransaction == false) { for (var a = 0; a < ss.Length; a++) { @@ -233,7 +245,7 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + if (_transaction != null || _batchAutoTransaction == false) { for (var a = 0; a < ss.Length; a++) { @@ -287,7 +299,7 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + if (_transaction != null || _batchAutoTransaction == false) { for (var a = 0; a < ss.Length; a++) { diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index b105a7dc..b84951eb 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -30,6 +30,8 @@ namespace FreeSql.Internal.CommonProvider protected List _params = new List(); protected List _paramsSource = new List(); protected bool _noneParameter; + protected int _batchRowsLimit, _batchParameterLimit; + protected bool _batchAutoTransaction = true; protected DbTransaction _transaction; protected DbConnection _connection; @@ -58,6 +60,8 @@ namespace FreeSql.Internal.CommonProvider } protected void ClearData() { + _batchRowsLimit = _batchParameterLimit = 0; + _batchAutoTransaction = true; _source.Clear(); _ignore.Clear(); _auditValueChangedDict.Clear(); @@ -89,6 +93,14 @@ namespace FreeSql.Internal.CommonProvider return this; } + public IUpdate BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) + { + _batchRowsLimit = rowsLimit; + _batchParameterLimit = parameterLimit; + _batchAutoTransaction = autoTransaction; + return this; + } + protected void ValidateVersionAndThrow(int affrows) { if (_table.VersionColumn != null && _source.Count > 0) @@ -136,7 +148,7 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + if (_transaction != null || _batchAutoTransaction == false) { for (var a = 0; a < ss.Length; a++) { @@ -183,7 +195,7 @@ namespace FreeSql.Internal.CommonProvider if (_transaction == null) this.WithTransaction(_orm.Ado.TransactionCurrentThread); - if (_transaction != null) + if (_transaction != null || _batchAutoTransaction == false) { for (var a = 0; a < ss.Length; a++) { diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs index 20af4f0b..ee25ff2b 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs @@ -29,9 +29,9 @@ namespace FreeSql.MySql.Curd internal Dictionary InternalIgnore => _ignore; internal void InternalClearData() => ClearData(); - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); public override string ToSql() diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index 45ac940f..dcde6b41 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -25,8 +25,8 @@ namespace FreeSql.MySql.Curd internal string InternalWhereCaseSource(string CsName, Func thenValue) => WhereCaseSource(CsName, thenValue); internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List RawExecuteUpdated() { diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs index 3d065911..177f36e8 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs @@ -18,9 +18,9 @@ namespace FreeSql.Odbc.Dameng { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 999); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(500, 999); - public override List ExecuteInserted() => base.SplitExecuteInserted(500, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override string ToSql() { diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs index 944fa5c2..6b15906c 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.Dameng { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(200, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List RawExecuteUpdated() diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs index dc9d3cc7..4a02c36b 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/Curd/OdbcGBaseUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.GBase { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List RawExecuteUpdated() { diff --git a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs b/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs index 496108fa..b017e33d 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/Curd/__OdbcGBaseInsert.cs @@ -16,9 +16,9 @@ namespace FreeSql.Odbc.GBase { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override long RawExecuteIdentity() { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs index 9d973dd4..cfb9bcdb 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs @@ -17,9 +17,9 @@ namespace FreeSql.Odbc.MySql { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override long RawExecuteIdentity() diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index 4194f4f0..d98073d5 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.MySql { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List RawExecuteUpdated() diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs index f728c68c..0e97103b 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs @@ -18,9 +18,9 @@ namespace FreeSql.Odbc.Oracle { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 999); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(500, 999); - public override List ExecuteInserted() => base.SplitExecuteInserted(500, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override string ToSql() { diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs index 51e66622..58c7b20b 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.Oracle { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(200, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List RawExecuteUpdated() diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs index 9ded50ef..f159b95c 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLInsert.cs @@ -16,9 +16,9 @@ namespace FreeSql.Odbc.PostgreSQL { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override long RawExecuteIdentity() { diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs index 8c13d6cf..704da574 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.PostgreSQL { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List RawExecuteUpdated() { diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs index da09a6ab..464c2d37 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerInsert.cs @@ -17,9 +17,9 @@ namespace FreeSql.Odbc.SqlServer { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(1000, 2100); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(1000, 2100); - public override List ExecuteInserted() => base.SplitExecuteInserted(1000, 2100); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override int RawExecuteAffrows() { diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs index 52155aad..57930d57 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/Curd/OdbcSqlServerUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Odbc.SqlServer { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 2100); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 2100); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override List RawExecuteUpdated() { diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index b48404a5..da9c4f0e 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -19,9 +19,9 @@ namespace FreeSql.Oracle.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 999); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(500, 999); - public override List ExecuteInserted() => base.SplitExecuteInserted(500, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override string ToSql() diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs index 57f85150..3cb65446 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Oracle.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(200, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List RawExecuteUpdated() diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs index af39699c..1fbb4892 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLInsert.cs @@ -29,9 +29,9 @@ namespace FreeSql.PostgreSQL.Curd internal Dictionary InternalIgnore => _ignore; internal void InternalClearData() => ClearData(); - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 3000); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 3000); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override long RawExecuteIdentity() { diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs index e2d85ce9..23c53f3e 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs @@ -26,8 +26,8 @@ namespace FreeSql.PostgreSQL.Curd internal string InternalWhereCaseSource(string CsName, Func thenValue) => WhereCaseSource(CsName, thenValue); internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 3000); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 3000); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List RawExecuteUpdated() { diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs index a8432057..df48b84a 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerInsert.cs @@ -18,9 +18,9 @@ namespace FreeSql.SqlServer.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(1000, 2100); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(1000, 2100); - public override List ExecuteInserted() => base.SplitExecuteInserted(1000, 2100); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 1000, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); public override string ToSql() { diff --git a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs index e16c5dec..a8ac9031 100644 --- a/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs +++ b/Providers/FreeSql.Provider.SqlServer/Curd/SqlServerUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.SqlServer.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(500, 2100); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(500, 2100); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override List RawExecuteUpdated() diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs index dd03e1e7..b0209b36 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsert.cs @@ -16,9 +16,9 @@ namespace FreeSql.Sqlite.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(5000, 999); - public override long ExecuteIdentity() => base.SplitExecuteIdentity(5000, 999); - public override List ExecuteInserted() => base.SplitExecuteInserted(5000, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override long ExecuteIdentity() => base.SplitExecuteIdentity(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteInserted() => base.SplitExecuteInserted(_batchValuesLimit > 0 ? _batchValuesLimit : 5000, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override long RawExecuteIdentity() { diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs index 92e9bdc2..c5379695 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteUpdate.cs @@ -18,8 +18,8 @@ namespace FreeSql.Sqlite.Curd { } - public override int ExecuteAffrows() => base.SplitExecuteAffrows(200, 999); - public override List ExecuteUpdated() => base.SplitExecuteUpdated(200, 999); + public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); + public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List RawExecuteUpdated()