From 7ed542d8590e04f3ce7c5ed32784057ac7285619 Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@qq.com>
Date: Sun, 10 Dec 2023 23:19:32 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IUpdate.ExecuteUpdated?=
=?UTF-8?q?=20=E9=87=8D=E8=BD=BD=E6=96=B9=E6=B3=95=E8=BF=94=E5=9B=9E?=
=?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=AD=97=E6=AE=B5=EF=BC=9B#1681?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 9 -
.../Internal/CommonProvider/UpdateProvider.cs | 30 +-
.../CommonProvider/UpdateProviderAsync.cs | 28 +-
.../Curd/ClickHouseUpdate.cs | 231 +++++---------
.../Curd/CustomUpdate.cs | 8 +-
.../MySql/Curd/CustomMySqlUpdate.cs | 188 +++++------
.../Oracle/Curd/CustomOracleUpdate.cs | 86 ++---
.../PostgreSQL/Curd/CustomPostgreSQLUpdate.cs | 218 ++++++-------
.../SqlServer/Curd/CustomSqlServerUpdate.cs | 184 +++++------
.../Curd/DamengUpdate.cs | 84 ++---
.../Curd/FirebirdUpdate.cs | 24 +-
.../Curd/GBaseUpdate.cs | 8 +-
.../Curd/KingbaseESUpdate.cs | 298 ++++++++---------
.../Curd/MsAccessUpdate.cs | 16 +-
.../Curd/MySqlUpdate.cs | 24 +-
.../Dameng/Curd/OdbcDamengUpdate.cs | 84 ++---
.../Default/Curd/OdbcUpdate.cs | 8 +-
.../KingbaseES/Curd/OdbcKingbaseESUpdate.cs | 298 ++++++++---------
.../MySql/Curd/OdbcMySqlUpdate.cs | 268 ++++++++--------
.../Oracle/Curd/OdbcOracleUpdate.cs | 88 ++---
.../PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs | 298 ++++++++---------
.../SqlServer/Curd/OdbcSqlServerUpdate.cs | 272 ++++++++--------
.../Curd/OracleUpdate.cs | 8 +-
.../Curd/PostgreSQLUpdate.cs | 26 +-
.../Curd/QuestDbUpdate.cs | 29 +-
.../Curd/ShenTongUpdate.cs | 300 +++++++++---------
.../Curd/SqlServerUpdate.cs | 113 ++++---
.../Curd/SqliteUpdate.cs | 8 +-
.../FreeSql.Provider.Xugu/Curd/XuguUpdate.cs | 26 +-
29 files changed, 1581 insertions(+), 1681 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 537315e2..594fbad3 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -733,15 +733,6 @@
-
-
- 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
-
-
-
-
-
-
创建普通数据上下文档对象
diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
index bc423555..7b775724 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs
@@ -350,7 +350,7 @@ namespace FreeSql.Internal.CommonProvider
ret[a] = _source.GetRange(a * takeMax, Math.Min(takeMax, _source.Count - a * takeMax));
return ret;
}
- void SplitExecute(int valuesLimit, int parameterLimit, string traceName, Action execute)
+ protected virtual void SplitExecute(int valuesLimit, int parameterLimit, string traceName, Action execute)
{
var ss = SplitSource(valuesLimit, parameterLimit);
if (ss.Length <= 1)
@@ -422,7 +422,7 @@ namespace FreeSql.Internal.CommonProvider
ClearData();
}
- protected virtual int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
+ protected int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
{
var ret = 0;
SplitExecute(valuesLimit, parameterLimit, "SplitExecuteAffrows", () =>
@@ -430,19 +430,11 @@ namespace FreeSql.Internal.CommonProvider
);
return ret;
}
- protected virtual List SplitExecuteUpdated(int valuesLimit, int parameterLimit)
- {
- var ret = new List();
- SplitExecute(valuesLimit, parameterLimit, "SplitExecuteUpdated", () =>
- ret.AddRange(this.RawExecuteUpdated())
- );
- return ret;
- }
- protected virtual List SplitExecuteUpdated(int valuesLimit, int parameterLimit, Expression> returnColumns)
+ protected List SplitExecuteUpdated(int valuesLimit, int parameterLimit, IEnumerable columns)
{
var ret = new List();
SplitExecute(valuesLimit, parameterLimit, "SplitExecuteUpdated", () =>
- ret.AddRange(this.RawExecuteUpdated(returnColumns))
+ ret.AddRange(this.RawExecuteUpdated(columns ?? _table.ColumnsByPosition))
);
return ret;
}
@@ -480,12 +472,18 @@ namespace FreeSql.Internal.CommonProvider
return affrows;
}
- protected abstract List RawExecuteUpdated();
- protected abstract List RawExecuteUpdated(Expression> returnColumns);
+ protected abstract List RawExecuteUpdated(IEnumerable columns);
public abstract int ExecuteAffrows();
- public abstract List ExecuteUpdated();
- public abstract List ExecuteUpdated(Expression> returnColumns);
+ protected abstract List ExecuteUpdated(IEnumerable columns);
+
+ public List ExecuteUpdated() => ExecuteUpdated(_table.ColumnsByPosition);
+ public List ExecuteUpdated(Expression> returnColumns)
+ {
+ var cols = new List();
+ _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, cols, SelectTableInfoType.From, returnColumns?.Body, true, null);
+ return ExecuteUpdated(cols.Select(a => a.Column));
+ }
public IUpdate IgnoreColumns(Expression> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null));
public IUpdate UpdateColumns(Expression> columns) => UpdateColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null));
diff --git a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
index 1538f08b..f2e67a92 100644
--- a/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
+++ b/FreeSql/Internal/CommonProvider/UpdateProviderAsync.cs
@@ -98,19 +98,11 @@ namespace FreeSql.Internal.CommonProvider
);
return ret;
}
- async protected virtual Task> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
- {
- var ret = new List();
- await SplitExecuteAsync(valuesLimit, parameterLimit, "SplitExecuteUpdatedAsync", async () =>
- ret.AddRange(await this.RawExecuteUpdatedAsync(cancellationToken))
- );
- return ret;
- }
- async protected virtual Task> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, Expression> returnColumns, CancellationToken cancellationToken = default)
+ async protected virtual Task> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, IEnumerable columns, CancellationToken cancellationToken = default)
{
var ret = new List();
await SplitExecuteAsync(valuesLimit, parameterLimit, "SplitExecuteUpdatedAsync", async () =>
- ret.AddRange(await this.RawExecuteUpdatedAsync(returnColumns, cancellationToken))
+ ret.AddRange(await this.RawExecuteUpdatedAsync(columns ?? _table.ColumnsByPosition))
);
return ret;
}
@@ -145,13 +137,19 @@ namespace FreeSql.Internal.CommonProvider
}
});
return affrows;
- }
- protected abstract Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default);
- protected abstract Task> RawExecuteUpdatedAsync(Expression> returnColumns, CancellationToken cancellationToken = default);
+ }
+ protected abstract Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default);
public abstract Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default);
- public abstract Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default);
- public abstract Task> ExecuteUpdatedAsync(Expression> returnColumns, CancellationToken cancellationToken = default);
+ protected abstract Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default);
+
+ public Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => ExecuteUpdatedAsync(_table.ColumnsByPosition, cancellationToken);
+ public Task> ExecuteUpdatedAsync(Expression> returnColumns, CancellationToken cancellationToken = default)
+ {
+ var cols = new List();
+ _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, cols, SelectTableInfoType.From, returnColumns?.Body, true, null);
+ return ExecuteUpdatedAsync(cols.Select(a => a.Column), cancellationToken);
+ }
#endif
}
}
diff --git a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs
index 88582c31..3714bc27 100644
--- a/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs
+++ b/Providers/FreeSql.Provider.ClickHouse/Curd/ClickHouseUpdate.cs
@@ -27,8 +27,10 @@ namespace FreeSql.ClickHouse.Curd
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
public override int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
- public override List ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
- protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
+
+ protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
+
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{
if (primarys.Length == 1)
@@ -228,167 +230,84 @@ namespace FreeSql.ClickHouse.Curd
return;
}
- protected override int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
- {
- var ss = base.SplitSource(valuesLimit, parameterLimit);
- var ret = 0;
- if (ss.Length <= 1)
- {
- if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
- ret = this.RawExecuteAffrows();
- ClearData();
- return ret;
- }
-
- var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrows", null);
- _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- for (var a = 0; a < ss.Length; a++)
- {
- _source = ss[a];
- _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
- ret += this.RawExecuteAffrows();
- }
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.TraceAfterEventArgs(before, null, exception);
- _orm.Aop.TraceAfterHandler?.Invoke(this, after);
- }
- ClearData();
- return ret;
- }
- protected override List SplitExecuteUpdated(int valuesLimit, int parameterLimit)
- {
- var ss = SplitSource(valuesLimit, parameterLimit);
- var ret = new List();
- if (ss.Length <= 1)
- {
- if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
- ret = this.RawExecuteUpdated();
- ClearData();
- return ret;
- }
-
- var before = new Aop.TraceBeforeEventArgs("SplitExecuteUpdated", null);
- _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- for (var a = 0; a < ss.Length; a++)
- {
- _source = ss[a];
- _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
- ret.AddRange(this.RawExecuteUpdated());
- }
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.TraceAfterEventArgs(before, null, exception);
- _orm.Aop.TraceAfterHandler?.Invoke(this, after);
- }
- ClearData();
- return ret;
- }
+ protected override void SplitExecute(int valuesLimit, int parameterLimit, string traceName, Action execute)
+ {
+ var ss = SplitSource(valuesLimit, parameterLimit);
+ if (ss.Length <= 1)
+ {
+ if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
+ execute();
+ ClearData();
+ return;
+ }
+ var before = new Aop.TraceBeforeEventArgs(traceName, null);
+ _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
+ Exception exception = null;
+ try
+ {
+ for (var a = 0; a < ss.Length; a++)
+ {
+ _source = ss[a];
+ _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
+ execute();
+ }
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ throw;
+ }
+ finally
+ {
+ var after = new Aop.TraceAfterEventArgs(before, null, exception);
+ _orm.Aop.TraceAfterHandler?.Invoke(this, after);
+ }
+ ClearData();
+ }
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
- protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
- async protected override Task SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
-
- {
- var ss = SplitSource(valuesLimit, parameterLimit);
- var ret = 0;
- if (ss.Length <= 1)
- {
- if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
- await this.RawExecuteAffrowsAsync(cancellationToken);
- ret = _source.Count;
- ClearData();
- return ret;
- }
+ protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
+ async protected override Task SplitExecuteAsync(int valuesLimit, int parameterLimit, string traceName, Func executeAsync, CancellationToken cancellationToken = default)
+ {
+ var ss = SplitSource(valuesLimit, parameterLimit);
+ if (ss.Length <= 1)
+ {
+ if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
+ await executeAsync();
+ ClearData();
+ return;
+ }
- var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrowsAsync", null);
- _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- for (var a = 0; a < ss.Length; a++)
- {
- _source = ss[a];
- _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
- await this.RawExecuteAffrowsAsync(cancellationToken);
- ret += _source.Count;
- }
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.TraceAfterEventArgs(before, null, exception);
- _orm.Aop.TraceAfterHandler?.Invoke(this, after);
- }
- ClearData();
- return ret;
- }
- async protected override Task> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
- {
- var ss = SplitSource(valuesLimit, parameterLimit);
- var ret = new List();
- if (ss.Length <= 1)
- {
- if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus(_source, 1, 1));
- ret = await this.RawExecuteUpdatedAsync(cancellationToken);
- ClearData();
- return ret;
- }
-
- var before = new Aop.TraceBeforeEventArgs("SplitExecuteUpdatedAsync", null);
- _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- for (var a = 0; a < ss.Length; a++)
- {
- _source = ss[a];
- _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
- ret.AddRange(await this.RawExecuteUpdatedAsync(cancellationToken));
- }
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.TraceAfterEventArgs(before, null, exception);
- _orm.Aop.TraceAfterHandler?.Invoke(this, after);
- }
- ClearData();
- return ret;
- }
-
+ var before = new Aop.TraceBeforeEventArgs(traceName, null);
+ _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
+ Exception exception = null;
+ try
+ {
+ for (var a = 0; a < ss.Length; a++)
+ {
+ _source = ss[a];
+ _batchProgress?.Invoke(new BatchProgressStatus(_source, a + 1, ss.Length));
+ await executeAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ throw;
+ }
+ finally
+ {
+ var after = new Aop.TraceAfterEventArgs(before, null, exception);
+ _orm.Aop.TraceAfterHandler?.Invoke(this, after);
+ }
+ ClearData();
+ }
#endif
- }
+ }
}
diff --git a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs
index 1c4119ac..ee0f30d3 100644
--- a/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs
+++ b/Providers/FreeSql.Provider.Custom/Curd/CustomUpdate.cs
@@ -21,9 +21,9 @@ namespace FreeSql.Custom
}
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
- public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns);
- protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
+ protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{
@@ -63,9 +63,9 @@ namespace FreeSql.Custom
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken);
- protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
+ protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#endif
}
}
diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs
index 8a1900f4..c9fc717e 100644
--- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs
+++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs
@@ -20,108 +20,108 @@ namespace FreeSql.Custom.MySql
{
}
- internal StringBuilder InternalSbSet => _set;
- internal StringBuilder InternalSbSetIncr => _setIncr;
- internal Dictionary InternalIgnore => _ignore;
- internal void InternalResetSource(List source) => _source = source;
- internal string InternalWhereCaseSource(string CsName, Func thenValue) => WhereCaseSource(CsName, thenValue);
- internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
+ internal StringBuilder InternalSbSet => _set;
+ internal StringBuilder InternalSbSetIncr => _setIncr;
+ internal Dictionary InternalIgnore => _ignore;
+ internal void InternalResetSource(List source) => _source = source;
+ 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(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
- public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
+ public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
- protected override List RawExecuteUpdated()
- {
- var ret = new List();
- DbParameter[] dbParms = null;
- StringBuilder sbret = null;
- ToSqlFetch(sb =>
- {
- if (dbParms == null)
- {
- dbParms = _params.Concat(_paramsSource).ToArray();
- sbret = new StringBuilder();
- sbret.Append(" RETURNING ");
+ protected override List RawExecuteUpdated(IEnumerable columns)
+ {
+ var ret = new List();
+ DbParameter[] dbParms = null;
+ StringBuilder sbret = null;
+ ToSqlFetch(sb =>
+ {
+ if (dbParms == null)
+ {
+ dbParms = _params.Concat(_paramsSource).ToArray();
+ sbret = new StringBuilder();
+ sbret.Append(" RETURNING ");
- var colidx = 0;
- foreach (var col in _table.Columns.Values)
- {
- if (colidx > 0) sbret.Append(", ");
- sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
- ++colidx;
- }
- }
- var sql = sb.Append(sbret).ToString();
- var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
- _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
+ var colidx = 0;
+ foreach (var col in columns)
+ {
+ if (colidx > 0) sbret.Append(", ");
+ sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
+ ++colidx;
+ }
+ }
+ var sql = sb.Append(sbret).ToString();
+ var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
+ _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
- ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
- ret.AddRange(rettmp);
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.CurdAfterEventArgs(before, exception, ret);
- _orm.Aop.CurdAfterHandler?.Invoke(this, after);
- }
- });
- sbret?.Clear();
- return ret;
- }
+ Exception exception = null;
+ try
+ {
+ var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
+ ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
+ ret.AddRange(rettmp);
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ throw;
+ }
+ finally
+ {
+ var after = new Aop.CurdAfterEventArgs(before, exception, ret);
+ _orm.Aop.CurdAfterHandler?.Invoke(this, after);
+ }
+ });
+ sbret?.Clear();
+ return ret;
+ }
- protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
- {
- if (primarys.Length == 1)
- {
- var pk = primarys.First();
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- return;
- }
- caseWhen.Append("CONCAT(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) caseWhen.Append(", '+', ");
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- ++pkidx;
- }
- caseWhen.Append(")");
- }
+ protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
+ {
+ if (primarys.Length == 1)
+ {
+ var pk = primarys.First();
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ return;
+ }
+ caseWhen.Append("CONCAT(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) caseWhen.Append(", '+', ");
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ ++pkidx;
+ }
+ caseWhen.Append(")");
+ }
- protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
- {
- if (primarys.Length == 1)
- {
- sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
- return;
- }
- sb.Append("CONCAT(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) sb.Append(", '+', ");
- sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
- ++pkidx;
- }
- sb.Append(")");
- }
+ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
+ {
+ if (primarys.Length == 1)
+ {
+ sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
+ return;
+ }
+ sb.Append("CONCAT(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) sb.Append(", '+', ");
+ sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
+ ++pkidx;
+ }
+ sb.Append(")");
+ }
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
- async protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
- {
- var ret = new List();
+ async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default)
+ {
+ var ret = new List();
DbParameter[] dbParms = null;
StringBuilder sbret = null;
await ToSqlFetchAsync(async sb =>
@@ -133,7 +133,7 @@ namespace FreeSql.Custom.MySql
sbret.Append(" RETURNING ");
var colidx = 0;
- foreach (var col in _table.Columns.Values)
+ foreach (var col in columns)
{
if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@@ -147,7 +147,7 @@ namespace FreeSql.Custom.MySql
Exception exception = null;
try
{
- var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
+ var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp);
}
@@ -166,5 +166,5 @@ namespace FreeSql.Custom.MySql
return ret;
}
#endif
- }
+ }
}
diff --git a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs
index 4b692249..73cbdd2c 100644
--- a/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs
+++ b/Providers/FreeSql.Provider.Custom/Oracle/Curd/CustomOracleUpdate.cs
@@ -19,56 +19,56 @@ namespace FreeSql.Custom.Oracle
{
}
- 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);
+ public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
- protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
+ protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}");
- protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
- {
- if (primarys.Length == 1)
- {
- var pk = primarys.First();
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- return;
- }
- caseWhen.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) caseWhen.Append(" || '+' || ");
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- ++pkidx;
- }
- caseWhen.Append(")");
- }
+ protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
+ {
+ if (primarys.Length == 1)
+ {
+ var pk = primarys.First();
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ return;
+ }
+ caseWhen.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) caseWhen.Append(" || '+' || ");
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ ++pkidx;
+ }
+ caseWhen.Append(")");
+ }
- protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
- {
- if (primarys.Length == 1)
- {
- if (primarys[0].Attribute.DbType.Contains("NVARCHAR2"))
- sb.Append("N");
- sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
- return;
- }
- sb.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) sb.Append(" || '+' || ");
- sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
- ++pkidx;
- }
- sb.Append(")");
- }
+ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
+ {
+ if (primarys.Length == 1)
+ {
+ if (primarys[0].Attribute.DbType.Contains("NVARCHAR2"))
+ sb.Append("N");
+ sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
+ return;
+ }
+ sb.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) sb.Append(" || '+' || ");
+ sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
+ ++pkidx;
+ }
+ sb.Append(")");
+ }
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
- protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
+ protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif
- }
+ }
}
diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLUpdate.cs
index cef51caa..0a7bf74d 100644
--- a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLUpdate.cs
+++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLUpdate.cs
@@ -20,125 +20,125 @@ namespace FreeSql.Custom.PostgreSQL
{
}
- internal string InternalTableAlias { get; set; }
- internal StringBuilder InternalSbSet => _set;
- internal StringBuilder InternalSbSetIncr => _setIncr;
- internal Dictionary InternalIgnore => _ignore;
- internal void InternalResetSource(List source) => _source = source;
- internal string InternalWhereCaseSource(string CsName, Func thenValue) => WhereCaseSource(CsName, thenValue);
- internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
+ internal string InternalTableAlias { get; set; }
+ internal StringBuilder InternalSbSet => _set;
+ internal StringBuilder InternalSbSetIncr => _setIncr;
+ internal Dictionary InternalIgnore => _ignore;
+ internal void InternalResetSource(List source) => _source = source;
+ 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(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
- public override List ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
+ public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
- protected override List RawExecuteUpdated()
- {
- var ret = new List();
- DbParameter[] dbParms = null;
- StringBuilder sbret = null;
- ToSqlFetch(sb =>
- {
- if (dbParms == null)
- {
- dbParms = _params.Concat(_paramsSource).ToArray();
- sbret = new StringBuilder();
- sbret.Append(" RETURNING ");
+ protected override List RawExecuteUpdated(IEnumerable columns)
+ {
+ var ret = new List();
+ DbParameter[] dbParms = null;
+ StringBuilder sbret = null;
+ ToSqlFetch(sb =>
+ {
+ if (dbParms == null)
+ {
+ dbParms = _params.Concat(_paramsSource).ToArray();
+ sbret = new StringBuilder();
+ sbret.Append(" RETURNING ");
- var colidx = 0;
- foreach (var col in _table.Columns.Values)
- {
- if (colidx > 0) sbret.Append(", ");
- sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
- ++colidx;
- }
- }
- var sql = sb.Append(sbret).ToString();
- var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
- _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
+ var colidx = 0;
+ foreach (var col in columns)
+ {
+ if (colidx > 0) sbret.Append(", ");
+ sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
+ ++colidx;
+ }
+ }
+ var sql = sb.Append(sbret).ToString();
+ var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
+ _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
- ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
- ret.AddRange(rettmp);
- }
- catch (Exception ex)
- {
- exception = ex;
- throw;
- }
- finally
- {
- var after = new Aop.CurdAfterEventArgs(before, exception, ret);
- _orm.Aop.CurdAfterHandler?.Invoke(this, after);
- }
- });
- sbret?.Clear();
- return ret;
- }
+ Exception exception = null;
+ try
+ {
+ var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
+ ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
+ ret.AddRange(rettmp);
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ throw;
+ }
+ finally
+ {
+ var after = new Aop.CurdAfterEventArgs(before, exception, ret);
+ _orm.Aop.CurdAfterHandler?.Invoke(this, after);
+ }
+ });
+ sbret?.Clear();
+ return ret;
+ }
- protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
- {
- if (primarys.Length == 1)
- {
- var pk = primarys.First();
- if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- return;
- }
- caseWhen.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) caseWhen.Append(" || '+' || ");
- if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
- ++pkidx;
- }
- caseWhen.Append(")");
- }
+ protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
+ {
+ if (primarys.Length == 1)
+ {
+ var pk = primarys.First();
+ if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ return;
+ }
+ caseWhen.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) caseWhen.Append(" || '+' || ");
+ if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
+ ++pkidx;
+ }
+ caseWhen.Append(")");
+ }
- protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
- {
- if (primarys.Length == 1)
- {
- sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
- return;
- }
- sb.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) sb.Append(" || '+' || ");
- sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
- ++pkidx;
- }
- sb.Append(")");
- }
+ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
+ {
+ if (primarys.Length == 1)
+ {
+ sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
+ return;
+ }
+ sb.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) sb.Append(" || '+' || ");
+ sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
+ ++pkidx;
+ }
+ sb.Append(")");
+ }
- protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
- {
- if (_noneParameter == false) return;
- if (col.Attribute.MapType == typeof(string))
- {
- sb.Append("::text");
- return;
- }
- var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
- if (dbtype == null) return;
+ protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
+ {
+ if (_noneParameter == false) return;
+ if (col.Attribute.MapType == typeof(string))
+ {
+ sb.Append("::text");
+ return;
+ }
+ var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
+ if (dbtype == null) return;
- sb.Append("::").Append(dbtype);
- }
+ sb.Append("::").Append(dbtype);
+ }
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
- async protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
- {
- var ret = new List();
+ async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default)
+ {
+ var ret = new List();
DbParameter[] dbParms = null;
StringBuilder sbret = null;
await ToSqlFetchAsync(async sb =>
@@ -150,7 +150,7 @@ namespace FreeSql.Custom.PostgreSQL
sbret.Append(" RETURNING ");
var colidx = 0;
- foreach (var col in _table.Columns.Values)
+ foreach (var col in columns)
{
if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@@ -164,7 +164,7 @@ namespace FreeSql.Custom.PostgreSQL
Exception exception = null;
try
{
- var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
+ var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp);
}
@@ -183,5 +183,5 @@ namespace FreeSql.Custom.PostgreSQL
return ret;
}
#endif
- }
+ }
}
diff --git a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs
index 567dcf72..bc261bde 100644
--- a/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs
+++ b/Providers/FreeSql.Provider.Custom/SqlServer/Curd/CustomSqlServerUpdate.cs
@@ -20,105 +20,105 @@ namespace FreeSql.Custom.SqlServer
{
}
- 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);
+ public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns);
- protected override List RawExecuteUpdated()
- {
- var ret = new List();
- DbParameter[] dbParms = null;
- StringBuilder sbret = null;
- ToSqlFetch(sb =>
- {
- if (dbParms == null)
- {
- dbParms = _params.Concat(_paramsSource).ToArray();
- sbret = new StringBuilder();
- sbret.Append(" OUTPUT ");
+ protected override List RawExecuteUpdated(IEnumerable columns)
+ {
+ var ret = new List();
+ DbParameter[] dbParms = null;
+ StringBuilder sbret = null;
+ ToSqlFetch(sb =>
+ {
+ if (dbParms == null)
+ {
+ dbParms = _params.Concat(_paramsSource).ToArray();
+ sbret = new StringBuilder();
+ sbret.Append(" OUTPUT ");
- var colidx = 0;
- foreach (var col in _table.Columns.Values)
- {
- if (colidx > 0) sbret.Append(", ");
- sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
- ++colidx;
- }
- }
- var sql = sb.ToString();
- var validx = sql.IndexOf(" \r\nWHERE ");
- if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
- sql = sb.Clear().Append(sql.Substring(0, validx))
- .Append(sbret)
- .Append(sql.Substring(validx)).ToString();
+ var colidx = 0;
+ foreach (var col in columns)
+ {
+ if (colidx > 0) sbret.Append(", ");
+ sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
+ ++colidx;
+ }
+ }
+ var sql = sb.ToString();
+ var validx = sql.IndexOf(" \r\nWHERE ");
+ if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
+ sql = sb.Clear().Append(sql.Substring(0, validx))
+ .Append(sbret)
+ .Append(sql.Substring(validx)).ToString();
- var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
- _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
+ var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
+ _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
- Exception exception = null;
- try
- {
- var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
- ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
- ret.AddRange(rettmp);
- }
- catch (Exception ex)
- {
- exception = ex;
- throw ex;
- }
- finally
- {
- var after = new Aop.CurdAfterEventArgs(before, exception, ret);
- _orm.Aop.CurdAfterHandler?.Invoke(this, after);
- }
- });
- sbret?.Clear();
- return ret;
- }
+ Exception exception = null;
+ try
+ {
+ var rettmp = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
+ ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
+ ret.AddRange(rettmp);
+ }
+ catch (Exception ex)
+ {
+ exception = ex;
+ throw;
+ }
+ finally
+ {
+ var after = new Aop.CurdAfterEventArgs(before, exception, ret);
+ _orm.Aop.CurdAfterHandler?.Invoke(this, after);
+ }
+ });
+ sbret?.Clear();
+ return ret;
+ }
- protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
- {
- if (primarys.Length == 1)
- {
- var pk = primarys.First();
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- return;
- }
- caseWhen.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) caseWhen.Append(" + '+' + ");
- caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)");
- ++pkidx;
- }
- caseWhen.Append(")");
- }
+ protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
+ {
+ if (primarys.Length == 1)
+ {
+ var pk = primarys.First();
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ return;
+ }
+ caseWhen.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) caseWhen.Append(" + '+' + ");
+ caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)");
+ ++pkidx;
+ }
+ caseWhen.Append(")");
+ }
- protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
- {
- if (primarys.Length == 1)
- {
- sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
- return;
- }
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) sb.Append(" + '+' + ");
- sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)");
- ++pkidx;
- }
- }
+ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
+ {
+ if (primarys.Length == 1)
+ {
+ sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
+ return;
+ }
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) sb.Append(" + '+' + ");
+ sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)");
+ ++pkidx;
+ }
+ }
#if net40
#else
public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns, cancellationToken);
- async protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
- {
- var ret = new List();
+ async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default)
+ {
+ var ret = new List();
DbParameter[] dbParms = null;
StringBuilder sbret = null;
await ToSqlFetchAsync(async sb =>
@@ -130,7 +130,7 @@ namespace FreeSql.Custom.SqlServer
sbret.Append(" OUTPUT ");
var colidx = 0;
- foreach (var col in _table.Columns.Values)
+ foreach (var col in columns)
{
if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@@ -150,14 +150,14 @@ namespace FreeSql.Custom.SqlServer
Exception exception = null;
try
{
- var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
+ var rettmp = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp);
}
catch (Exception ex)
{
exception = ex;
- throw ex;
+ throw;
}
finally
{
@@ -169,5 +169,5 @@ namespace FreeSql.Custom.SqlServer
return ret;
}
#endif
- }
+ }
}
diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs
index 317125c7..17c0afd0 100644
--- a/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs
+++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengUpdate.cs
@@ -18,54 +18,54 @@ namespace FreeSql.Dameng.Curd
{
}
- 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);
+ public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
+ protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
- protected override List RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
+ protected override List RawExecuteUpdated(IEnumerable columns) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
- protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
- {
- if (primarys.Length == 1)
- {
- var pk = primarys.First();
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- return;
- }
- caseWhen.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) caseWhen.Append(" || '+' || ");
- caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
- ++pkidx;
- }
- caseWhen.Append(")");
- }
+ protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
+ {
+ if (primarys.Length == 1)
+ {
+ var pk = primarys.First();
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ return;
+ }
+ caseWhen.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) caseWhen.Append(" || '+' || ");
+ caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
+ ++pkidx;
+ }
+ caseWhen.Append(")");
+ }
- protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
- {
- if (primarys.Length == 1)
- {
- sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
- return;
- }
- sb.Append("(");
- var pkidx = 0;
- foreach (var pk in primarys)
- {
- if (pkidx > 0) sb.Append(" || '+' || ");
- sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
- ++pkidx;
- }
- sb.Append(")");
- }
+ protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
+ {
+ if (primarys.Length == 1)
+ {
+ sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
+ return;
+ }
+ sb.Append("(");
+ var pkidx = 0;
+ foreach (var pk in primarys)
+ {
+ if (pkidx > 0) sb.Append(" || '+' || ");
+ sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
+ ++pkidx;
+ }
+ sb.Append(")");
+ }
#if net40
#else
- public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
- public override Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
+ public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
+ protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
- protected override Task> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
+ protected override Task