mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 IUpdate.ExecuteUpdated 重载方法返回指定字段;#1681
This commit is contained in:
parent
1f0fccf977
commit
7ed542d859
@ -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<T>的配置类
|
|
||||||
</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>
|
||||||
创建普通数据上下文档对象
|
创建普通数据上下文档对象
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user