- 增加 IUpdate.ExecuteUpdated 重载方法返回指定字段;#1681

This commit is contained in:
2881099 2023-12-10 23:19:32 +08:00
parent 1f0fccf977
commit 7ed542d859
29 changed files with 1581 additions and 1681 deletions

View File

@ -733,15 +733,6 @@
<param name="modelBuilder"></param> <param name="modelBuilder"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
<summary>
根据Assembly扫描所有继承IEntityTypeConfiguration&lt;T&gt;的配置类
</summary>
<param name="codeFirst"></param>
<param name="assembly"></param>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)"> <member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary> <summary>
创建普通数据上下文档对象 创建普通数据上下文档对象

View File

@ -350,7 +350,7 @@ namespace FreeSql.Internal.CommonProvider
ret[a] = _source.GetRange(a * takeMax, Math.Min(takeMax, _source.Count - a * takeMax)); ret[a] = _source.GetRange(a * takeMax, Math.Min(takeMax, _source.Count - a * takeMax));
return ret; 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); var ss = SplitSource(valuesLimit, parameterLimit);
if (ss.Length <= 1) if (ss.Length <= 1)
@ -422,7 +422,7 @@ namespace FreeSql.Internal.CommonProvider
ClearData(); ClearData();
} }
protected virtual int SplitExecuteAffrows(int valuesLimit, int parameterLimit) protected int SplitExecuteAffrows(int valuesLimit, int parameterLimit)
{ {
var ret = 0; var ret = 0;
SplitExecute(valuesLimit, parameterLimit, "SplitExecuteAffrows", () => SplitExecute(valuesLimit, parameterLimit, "SplitExecuteAffrows", () =>
@ -430,19 +430,11 @@ namespace FreeSql.Internal.CommonProvider
); );
return ret; return ret;
} }
protected virtual List<T1> SplitExecuteUpdated(int valuesLimit, int parameterLimit) protected List<TReturn> SplitExecuteUpdated<TReturn>(int valuesLimit, int parameterLimit, IEnumerable<ColumnInfo> columns)
{
var ret = new List<T1>();
SplitExecute(valuesLimit, parameterLimit, "SplitExecuteUpdated", () =>
ret.AddRange(this.RawExecuteUpdated())
);
return ret;
}
protected virtual List<TReturn> SplitExecuteUpdated<TReturn>(int valuesLimit, int parameterLimit, Expression<Func<T1, TReturn>> returnColumns)
{ {
var ret = new List<TReturn>(); var ret = new List<TReturn>();
SplitExecute(valuesLimit, parameterLimit, "SplitExecuteUpdated", () => SplitExecute(valuesLimit, parameterLimit, "SplitExecuteUpdated", () =>
ret.AddRange(this.RawExecuteUpdated(returnColumns)) ret.AddRange(this.RawExecuteUpdated<TReturn>(columns ?? _table.ColumnsByPosition))
); );
return ret; return ret;
} }
@ -480,12 +472,18 @@ namespace FreeSql.Internal.CommonProvider
return affrows; return affrows;
} }
protected abstract List<T1> RawExecuteUpdated(); protected abstract List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns);
protected abstract List<TReturn> RawExecuteUpdated<TReturn>(Expression<Func<T1, TReturn>> returnColumns);
public abstract int ExecuteAffrows(); public abstract int ExecuteAffrows();
public abstract List<T1> ExecuteUpdated(); protected abstract List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns);
public abstract List<TReturn> ExecuteUpdated<TReturn>(Expression<Func<T1, TReturn>> returnColumns);
public List<T1> ExecuteUpdated() => ExecuteUpdated<T1>(_table.ColumnsByPosition);
public List<TReturn> ExecuteUpdated<TReturn>(Expression<Func<T1, TReturn>> returnColumns)
{
var cols = new List<SelectColumnInfo>();
_commonExpression.ExpressionSelectColumn_MemberAccess(null, null, cols, SelectTableInfoType.From, returnColumns?.Body, true, null);
return ExecuteUpdated<TReturn>(cols.Select(a => a.Column));
}
public IUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null)); public IUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null));
public IUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns) => UpdateColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null)); public IUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns) => UpdateColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, columns?.Body, false, null));

View File

@ -98,19 +98,11 @@ namespace FreeSql.Internal.CommonProvider
); );
return ret; return ret;
} }
async protected virtual Task<List<T1>> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default) async protected virtual Task<List<TReturn>> SplitExecuteUpdatedAsync<TReturn>(int valuesLimit, int parameterLimit, IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{
var ret = new List<T1>();
await SplitExecuteAsync(valuesLimit, parameterLimit, "SplitExecuteUpdatedAsync", async () =>
ret.AddRange(await this.RawExecuteUpdatedAsync(cancellationToken))
);
return ret;
}
async protected virtual Task<List<TReturn>> SplitExecuteUpdatedAsync<TReturn>(int valuesLimit, int parameterLimit, Expression<Func<T1, TReturn>> returnColumns, CancellationToken cancellationToken = default)
{ {
var ret = new List<TReturn>(); var ret = new List<TReturn>();
await SplitExecuteAsync(valuesLimit, parameterLimit, "SplitExecuteUpdatedAsync", async () => await SplitExecuteAsync(valuesLimit, parameterLimit, "SplitExecuteUpdatedAsync", async () =>
ret.AddRange(await this.RawExecuteUpdatedAsync(returnColumns, cancellationToken)) ret.AddRange(await this.RawExecuteUpdatedAsync<TReturn>(columns ?? _table.ColumnsByPosition))
); );
return ret; return ret;
} }
@ -145,13 +137,19 @@ namespace FreeSql.Internal.CommonProvider
} }
}); });
return affrows; return affrows;
} }
protected abstract Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default); protected abstract Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default);
protected abstract Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(Expression<Func<T1, TReturn>> returnColumns, CancellationToken cancellationToken = default);
public abstract Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default); public abstract Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default);
public abstract Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default); protected abstract Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default);
public abstract Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(Expression<Func<T1, TReturn>> returnColumns, CancellationToken cancellationToken = default);
public Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => ExecuteUpdatedAsync<T1>(_table.ColumnsByPosition, cancellationToken);
public Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(Expression<Func<T1, TReturn>> returnColumns, CancellationToken cancellationToken = default)
{
var cols = new List<SelectColumnInfo>();
_commonExpression.ExpressionSelectColumn_MemberAccess(null, null, cols, SelectTableInfoType.From, returnColumns?.Body, true, null);
return ExecuteUpdatedAsync<TReturn>(cols.Select(a => a.Column), cancellationToken);
}
#endif #endif
} }
} }

View File

@ -27,8 +27,10 @@ namespace FreeSql.ClickHouse.Curd
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
@ -228,167 +230,84 @@ namespace FreeSql.ClickHouse.Curd
return; return;
} }
protected override int SplitExecuteAffrows(int valuesLimit, int parameterLimit) protected override void SplitExecute(int valuesLimit, int parameterLimit, string traceName, Action execute)
{ {
var ss = base.SplitSource(valuesLimit, parameterLimit); var ss = SplitSource(valuesLimit, parameterLimit);
var ret = 0; if (ss.Length <= 1)
if (ss.Length <= 1) {
{ if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, 1, 1));
if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, 1, 1)); execute();
ret = this.RawExecuteAffrows(); ClearData();
ClearData(); return;
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<T1>(_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<T1> SplitExecuteUpdated(int valuesLimit, int parameterLimit)
{
var ss = SplitSource(valuesLimit, parameterLimit);
var ret = new List<T1>();
if (ss.Length <= 1)
{
if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_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<T1>(_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;
}
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<T1>(_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 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
async protected override Task<int> SplitExecuteAffrowsAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default) protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.ClickHouse {CoreStrings.S_Not_Implemented_Feature}");
{
var ss = SplitSource(valuesLimit, parameterLimit);
var ret = 0;
if (ss.Length <= 1)
{
if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, 1, 1));
await this.RawExecuteAffrowsAsync(cancellationToken);
ret = _source.Count;
ClearData();
return ret;
}
async protected override Task SplitExecuteAsync(int valuesLimit, int parameterLimit, string traceName, Func<Task> executeAsync, CancellationToken cancellationToken = default)
{
var ss = SplitSource(valuesLimit, parameterLimit);
if (ss.Length <= 1)
{
if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, 1, 1));
await executeAsync();
ClearData();
return;
}
var before = new Aop.TraceBeforeEventArgs("SplitExecuteAffrowsAsync", null); var before = new Aop.TraceBeforeEventArgs(traceName, null);
_orm.Aop.TraceBeforeHandler?.Invoke(this, before); _orm.Aop.TraceBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
for (var a = 0; a < ss.Length; a++) for (var a = 0; a < ss.Length; a++)
{ {
_source = ss[a]; _source = ss[a];
_batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, a + 1, ss.Length)); _batchProgress?.Invoke(new BatchProgressStatus<T1>(_source, a + 1, ss.Length));
await this.RawExecuteAffrowsAsync(cancellationToken); await executeAsync();
ret += _source.Count; }
} }
} catch (Exception ex)
catch (Exception ex) {
{ exception = ex;
exception = ex; throw;
throw; }
} finally
finally {
{ var after = new Aop.TraceAfterEventArgs(before, null, exception);
var after = new Aop.TraceAfterEventArgs(before, null, exception); _orm.Aop.TraceAfterHandler?.Invoke(this, after);
_orm.Aop.TraceAfterHandler?.Invoke(this, after); }
} ClearData();
ClearData(); }
return ret;
}
async protected override Task<List<T1>> SplitExecuteUpdatedAsync(int valuesLimit, int parameterLimit, CancellationToken cancellationToken = default)
{
var ss = SplitSource(valuesLimit, parameterLimit);
var ret = new List<T1>();
if (ss.Length <= 1)
{
if (_source?.Any() == true) _batchProgress?.Invoke(new BatchProgressStatus<T1>(_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<T1>(_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;
}
#endif #endif
} }
} }

View File

@ -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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -63,9 +63,9 @@ namespace FreeSql.Custom
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Custom {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -20,108 +20,108 @@ namespace FreeSql.Custom.MySql
{ {
} }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("CONCAT("); caseWhen.Append("CONCAT(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(", '+', "); if (pkidx > 0) caseWhen.Append(", '+', ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("CONCAT("); sb.Append("CONCAT(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(", '+', "); if (pkidx > 0) sb.Append(", '+', ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -133,7 +133,7 @@ namespace FreeSql.Custom.MySql
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); 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; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -166,5 +166,5 @@ namespace FreeSql.Custom.MySql
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -19,56 +19,56 @@ namespace FreeSql.Custom.Oracle
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
if (primarys[0].Attribute.DbType.Contains("NVARCHAR2")) if (primarys[0].Attribute.DbType.Contains("NVARCHAR2"))
sb.Append("N"); sb.Append("N");
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Custom.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -20,125 +20,125 @@ namespace FreeSql.Custom.PostgreSQL
{ {
} }
internal string InternalTableAlias { get; set; } internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text"); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text"); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
{ {
if (_noneParameter == false) return; if (_noneParameter == false) return;
if (col.Attribute.MapType == typeof(string)) if (col.Attribute.MapType == typeof(string))
{ {
sb.Append("::text"); sb.Append("::text");
return; return;
} }
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
if (dbtype == null) return; if (dbtype == null) return;
sb.Append("::").Append(dbtype); sb.Append("::").Append(dbtype);
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -150,7 +150,7 @@ namespace FreeSql.Custom.PostgreSQL
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); 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; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -183,5 +183,5 @@ namespace FreeSql.Custom.PostgreSQL
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -20,105 +20,105 @@ namespace FreeSql.Custom.SqlServer
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" OUTPUT "); sbret.Append(" OUTPUT ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" \r\nWHERE "); var validx = sql.IndexOf(" \r\nWHERE ");
if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw ex; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" + '+' + "); if (pkidx > 0) caseWhen.Append(" + '+' + ");
caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)"); caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" + '+' + "); if (pkidx > 0) sb.Append(" + '+' + ");
sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)"); sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)");
++pkidx; ++pkidx;
} }
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -130,7 +130,7 @@ namespace FreeSql.Custom.SqlServer
sbret.Append(" OUTPUT "); sbret.Append(" OUTPUT ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); 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; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw ex; throw;
} }
finally finally
{ {
@ -169,5 +169,5 @@ namespace FreeSql.Custom.SqlServer
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -18,54 +18,54 @@ namespace FreeSql.Dameng.Curd
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -21,11 +21,11 @@ namespace FreeSql.Firebird.Curd
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
@ -37,7 +37,7 @@ namespace FreeSql.Firebird.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -51,7 +51,7 @@ namespace FreeSql.Firebird.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -110,11 +110,11 @@ namespace FreeSql.Firebird.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -126,7 +126,7 @@ namespace FreeSql.Firebird.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"new.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -140,7 +140,7 @@ namespace FreeSql.Firebird.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }

View File

@ -20,9 +20,9 @@ namespace FreeSql.GBase.Curd
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -64,9 +64,9 @@ namespace FreeSql.GBase.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.GBase {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -20,168 +20,168 @@ namespace FreeSql.KingbaseES
{ {
} }
internal string InternalTableAlias { get; set; } internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text"); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text"); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
{ {
if (_noneParameter == false) return; if (_noneParameter == false) return;
if (col.Attribute.MapType == typeof(string)) if (col.Attribute.MapType == typeof(string))
{ {
sb.Append("::text"); sb.Append("::text");
return; return;
} }
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
if (dbtype == null) return; if (dbtype == null) return;
sb.Append("::").Append(dbtype); sb.Append("::").Append(dbtype);
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -20,14 +20,12 @@ namespace FreeSql.MsAccess.Curd
_batchAutoTransaction = false; _batchAutoTransaction = false;
} }
//蛋疼的 access 更新只能一条一条执行,不支持 case .. when .. then .. end也不支持事务 public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) => throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime);
public override int ExecuteAffrows() => base.SplitExecuteAffrows(1, 1000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(1, 1000);
public override IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true) => //蛋疼的 access 更新只能一条一条执行,不支持 case .. when .. then .. end也不支持事务
throw new NotImplementedException(CoreStrings.S_Access_InsertOnlyOneAtTime); public override int ExecuteAffrows() => base.SplitExecuteAffrows(1, 1000);
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(1, 1000, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -67,9 +65,9 @@ namespace FreeSql.MsAccess.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(1, 1000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(1, 1000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(1, 1000, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.MsAccess {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -28,11 +28,11 @@ namespace FreeSql.MySql.Curd
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
@ -44,7 +44,7 @@ namespace FreeSql.MySql.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -58,7 +58,7 @@ namespace FreeSql.MySql.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -117,11 +117,11 @@ namespace FreeSql.MySql.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -133,7 +133,7 @@ namespace FreeSql.MySql.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -147,7 +147,7 @@ namespace FreeSql.MySql.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }

View File

@ -19,54 +19,54 @@ namespace FreeSql.Odbc.Dameng
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Dameng {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -21,9 +21,9 @@ namespace FreeSql.Odbc.Default
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -63,9 +63,9 @@ namespace FreeSql.Odbc.Default
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : _utils.Adapter.UpdateBatchSplitLimit, _batchParameterLimit > 0 ? _batchParameterLimit : 255, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Default {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -20,168 +20,168 @@ namespace FreeSql.Odbc.KingbaseES
{ {
} }
internal string InternalTableAlias { get; set; } internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text"); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text"); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
{ {
if (_noneParameter == false) return; if (_noneParameter == false) return;
if (col.Attribute.MapType == typeof(string)) if (col.Attribute.MapType == typeof(string))
{ {
sb.Append("::text"); sb.Append("::text");
return; return;
} }
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
if (dbtype == null) return; if (dbtype == null) return;
sb.Append("::").Append(dbtype); sb.Append("::").Append(dbtype);
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -20,151 +20,151 @@ namespace FreeSql.Odbc.MySql
{ {
} }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("CONCAT("); caseWhen.Append("CONCAT(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(", '+', "); if (pkidx > 0) caseWhen.Append(", '+', ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("CONCAT("); sb.Append("CONCAT(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(", '+', "); if (pkidx > 0) sb.Append(", '+', ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -19,56 +19,56 @@ namespace FreeSql.Odbc.Oracle
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
if (primarys[0].Attribute.DbType.Contains("NVARCHAR2")) if (primarys[0].Attribute.DbType.Contains("NVARCHAR2"))
sb.Append("N"); sb.Append("N");
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d)));
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Odbc.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -20,168 +20,168 @@ namespace FreeSql.Odbc.PostgreSQL
{ {
} }
internal string InternalTableAlias { get; set; } internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text"); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text"); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
{ {
if (_noneParameter == false) return; if (_noneParameter == false) return;
if (col.Attribute.MapType == typeof(string)) if (col.Attribute.MapType == typeof(string))
{ {
sb.Append("::text"); sb.Append("::text");
return; return;
} }
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
if (dbtype == null) return; if (dbtype == null) return;
sb.Append("::").Append(dbtype); sb.Append("::").Append(dbtype);
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -20,154 +20,154 @@ namespace FreeSql.Odbc.SqlServer
{ {
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" OUTPUT "); sbret.Append(" OUTPUT ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" \r\nWHERE "); var validx = sql.IndexOf(" \r\nWHERE ");
if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw ex; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" + '+' + "); if (pkidx > 0) caseWhen.Append(" + '+' + ");
caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)"); caseWhen.Append("cast(").Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append(" as varchar)");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" + '+' + "); if (pkidx > 0) sb.Append(" + '+' + ");
sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)"); sb.Append("cast(").Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append(" as varchar)");
++pkidx; ++pkidx;
} }
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" OUTPUT "); sbret.Append(" OUTPUT ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.ToString(); var sql = sb.ToString();
var validx = sql.IndexOf(" \r\nWHERE "); var validx = sql.IndexOf(" \r\nWHERE ");
if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE")); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sql = sb.Clear().Append(sql.Substring(0, validx)) sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret) .Append(sbret)
.Append(sql.Substring(validx)).ToString(); .Append(sql.Substring(validx)).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw ex; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
#endif #endif
} }
} }

View File

@ -20,9 +20,9 @@ namespace FreeSql.Oracle.Curd
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -66,9 +66,9 @@ namespace FreeSql.Oracle.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Oracle {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -29,11 +29,11 @@ namespace FreeSql.PostgreSQL.Curd
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
@ -45,7 +45,7 @@ namespace FreeSql.PostgreSQL.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -59,7 +59,7 @@ namespace FreeSql.PostgreSQL.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -134,11 +134,11 @@ namespace FreeSql.PostgreSQL.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -150,7 +150,7 @@ namespace FreeSql.PostgreSQL.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -164,7 +164,7 @@ namespace FreeSql.PostgreSQL.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }

View File

@ -63,12 +63,11 @@ namespace FreeSql.QuestDb.Curd
return InternelExecuteAffrows(); return InternelExecuteAffrows();
} }
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated( protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
@ -80,7 +79,7 @@ namespace FreeSql.QuestDb.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))) sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)))
@ -96,7 +95,7 @@ namespace FreeSql.QuestDb.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction,
CommandType.Text, sql, _commandTimeout, dbParms); CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
@ -187,15 +186,13 @@ namespace FreeSql.QuestDb.Curd
return Task.FromResult(InternelExecuteAffrows()); return Task.FromResult(InternelExecuteAffrows());
} }
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) =>
base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
{
var ret = new List<T1>(); async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{
var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -207,7 +204,7 @@ namespace FreeSql.QuestDb.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))) sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)))
@ -223,7 +220,7 @@ namespace FreeSql.QuestDb.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection,
_transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);

View File

@ -21,168 +21,168 @@ namespace FreeSql.ShenTong.Curd
{ {
} }
internal string InternalTableAlias { get; set; } internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set; internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr; internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore; internal Dictionary<string, bool> InternalIgnore => _ignore;
internal void InternalResetSource(List<T1> source) => _source = source; internal void InternalResetSource(List<T1> source) => _source = source;
internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue); internal string InternalWhereCaseSource(string CsName, Func<string, string> thenValue) => WhereCaseSource(CsName, thenValue);
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
{ {
if (dbParms == null) if (dbParms == null)
{ {
dbParms = _params.Concat(_paramsSource).ToArray(); dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder(); sbret = new StringBuilder();
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx; ++colidx;
} }
} }
var sql = sb.Append(sbret).ToString(); var sql = sb.Append(sbret).ToString();
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
throw; throw;
} }
finally finally
{ {
var after = new Aop.CurdAfterEventArgs(before, exception, ret); var after = new Aop.CurdAfterEventArgs(before, exception, ret);
_orm.Aop.CurdAfterHandler?.Invoke(this, after); _orm.Aop.CurdAfterHandler?.Invoke(this, after);
} }
}); });
sbret?.Clear(); sbret?.Clear();
return ret; return ret;
} }
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
var pk = primarys.First(); var pk = primarys.First();
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name)));
return; return;
} }
caseWhen.Append("("); caseWhen.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) caseWhen.Append(" || '+' || "); if (pkidx > 0) caseWhen.Append(" || '+' || ");
if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append("."); if (string.IsNullOrEmpty(InternalTableAlias) == false) caseWhen.Append(InternalTableAlias).Append(".");
caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text"); caseWhen.Append(_commonUtils.RereadColumn(pk, _commonUtils.QuoteSqlName(pk.Attribute.Name))).Append("::text");
++pkidx; ++pkidx;
} }
caseWhen.Append(")"); caseWhen.Append(")");
} }
protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d) protected override void ToSqlWhen(StringBuilder sb, ColumnInfo[] primarys, object d)
{ {
if (primarys.Length == 1) if (primarys.Length == 1)
{ {
sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d))); sb.Append(_commonUtils.FormatSql("{0}", primarys[0].GetDbValue(d)));
return; return;
} }
sb.Append("("); sb.Append("(");
var pkidx = 0; var pkidx = 0;
foreach (var pk in primarys) foreach (var pk in primarys)
{ {
if (pkidx > 0) sb.Append(" || '+' || "); if (pkidx > 0) sb.Append(" || '+' || ");
sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text"); sb.Append(_commonUtils.FormatSql("{0}", pk.GetDbValue(d))).Append("::text");
++pkidx; ++pkidx;
} }
sb.Append(")"); sb.Append(")");
} }
protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
{ {
if (_noneParameter == false) return; if (_noneParameter == false) return;
if (col.Attribute.MapType == typeof(string)) if (col.Attribute.MapType == typeof(string))
{ {
sb.Append("::text"); sb.Append("::text");
return; return;
} }
var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype; var dbtype = _commonUtils.CodeFirst.GetDbInfo(col.Attribute.MapType)?.dbtype;
if (dbtype == null) return; if (dbtype == null) return;
sb.Append("::").Append(dbtype); sb.Append("::").Append(dbtype);
} }
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 206, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default)
{
var ret = new List<T1>();
DbParameter[] dbParms = null;
StringBuilder sbret = null;
await ToSqlFetchAsync(async sb =>
{
if (dbParms == null)
{
dbParms = _params.Concat(_paramsSource).ToArray();
sbret = new StringBuilder();
sbret.Append(" RETURNING ");
var colidx = 0; async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
foreach (var col in _table.Columns.Values) {
{ var ret = new List<TReturn>();
if (colidx > 0) sbret.Append(", "); DbParameter[] dbParms = null;
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); StringBuilder sbret = null;
++colidx; await ToSqlFetchAsync(async sb =>
} {
} if (dbParms == null)
var sql = sb.Append(sbret).ToString(); {
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); dbParms = _params.Concat(_paramsSource).ToArray();
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); sbret = new StringBuilder();
sbret.Append(" RETURNING ");
Exception exception = null; var colidx = 0;
try foreach (var col in columns)
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); if (colidx > 0) sbret.Append(", ");
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
ret.AddRange(rettmp); ++colidx;
} }
catch (Exception ex) }
{ var sql = sb.Append(sbret).ToString();
exception = ex; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
throw; _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
}
finally Exception exception = null;
{ try
var after = new Aop.CurdAfterEventArgs(before, exception, ret); {
_orm.Aop.CurdAfterHandler?.Invoke(this, after); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
} ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
}); ret.AddRange(rettmp);
sbret?.Clear(); }
return ret; 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;
}
#endif #endif
} }
} }

View File

@ -21,61 +21,60 @@ namespace FreeSql.SqlServer.Curd
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns);
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{
var ret = new List<TReturn>();
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<T1> RawExecuteUpdated() var colidx = 0;
{ foreach (var col in columns)
var ret = new List<T1>(); {
DbParameter[] dbParms = null; if (colidx > 0) sbret.Append(", ");
StringBuilder sbret = null; sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
ToSqlFetch(sb => ++colidx;
{ }
if (dbParms == null) }
{ var sql = sb.ToString();
dbParms = _params.Concat(_paramsSource).ToArray(); var validx = sql.IndexOf(" \r\nWHERE ");
sbret = new StringBuilder(); if (validx == -1) throw new ArgumentException(CoreStrings.S_NotFound_Name("WHERE"));
sbret.Append(" OUTPUT "); sql = sb.Clear().Append(sql.Substring(0, validx))
.Append(sbret)
.Append(sql.Substring(validx)).ToString();
var colidx = 0; var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
foreach (var col in _table.Columns.Values) _orm.Aop.CurdBeforeHandler?.Invoke(this, before);
{
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); Exception exception = null;
_orm.Aop.CurdBeforeHandler?.Invoke(this, before); try
{
Exception exception = null; var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
try ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
{ ret.AddRange(rettmp);
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); }
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); catch (Exception ex)
ret.AddRange(rettmp); {
} exception = ex;
catch (Exception ex) throw;
{ }
exception = ex; finally
throw; {
} var after = new Aop.CurdAfterEventArgs(before, exception, ret);
finally _orm.Aop.CurdAfterHandler?.Invoke(this, after);
{ }
var after = new Aop.CurdAfterEventArgs(before, exception, ret); });
_orm.Aop.CurdAfterHandler?.Invoke(this, after); sbret?.Clear();
} return ret;
}); }
sbret?.Clear();
return ret;
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -115,11 +114,11 @@ namespace FreeSql.SqlServer.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 2100, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -131,7 +130,7 @@ namespace FreeSql.SqlServer.Curd
sbret.Append(" OUTPUT "); sbret.Append(" OUTPUT ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -151,7 +150,7 @@ namespace FreeSql.SqlServer.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }

View File

@ -20,9 +20,9 @@ namespace FreeSql.Sqlite.Curd
} }
public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns);
protected override List<T1> RawExecuteUpdated() => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}");
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys)
{ {
@ -64,9 +64,9 @@ namespace FreeSql.Sqlite.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 200, _batchParameterLimit > 0 ? _batchParameterLimit : 999, columns, cancellationToken);
protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}"); protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => throw new NotImplementedException($"FreeSql.Provider.Sqlite {CoreStrings.S_Not_Implemented_Feature}");
#endif #endif
} }
} }

View File

@ -29,11 +29,11 @@ namespace FreeSql.Xugu.Curd
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col); 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 int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000);
public override List<T1> ExecuteUpdated() => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
protected override List<T1> RawExecuteUpdated() protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
ToSqlFetch(sb => ToSqlFetch(sb =>
@ -45,7 +45,7 @@ namespace FreeSql.Xugu.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -59,7 +59,7 @@ namespace FreeSql.Xugu.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); var rettmp = _orm.Ado.Query<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }
@ -120,11 +120,11 @@ namespace FreeSql.Xugu.Curd
#if net40 #if net40
#else #else
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
public override Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken);
async protected override Task<List<T1>> RawExecuteUpdatedAsync(CancellationToken cancellationToken = default) async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
{ {
var ret = new List<T1>(); var ret = new List<TReturn>();
DbParameter[] dbParms = null; DbParameter[] dbParms = null;
StringBuilder sbret = null; StringBuilder sbret = null;
await ToSqlFetchAsync(async sb => await ToSqlFetchAsync(async sb =>
@ -136,7 +136,7 @@ namespace FreeSql.Xugu.Curd
sbret.Append(" RETURNING "); sbret.Append(" RETURNING ");
var colidx = 0; var colidx = 0;
foreach (var col in _table.Columns.Values) foreach (var col in columns)
{ {
if (colidx > 0) sbret.Append(", "); if (colidx > 0) sbret.Append(", ");
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
@ -150,7 +150,7 @@ namespace FreeSql.Xugu.Curd
Exception exception = null; Exception exception = null;
try try
{ {
var rettmp = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); var rettmp = await _orm.Ado.QueryAsync<TReturn>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
ret.AddRange(rettmp); ret.AddRange(rettmp);
} }