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()