mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-06 00:10:55 +08:00
优化QuestDb Insert Update 相关逻辑
This commit is contained in:
@@ -10,6 +10,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FreeSql.Provider.QuestDb;
|
||||
|
||||
namespace FreeSql.QuestDb.Curd
|
||||
{
|
||||
@@ -32,11 +33,12 @@ namespace FreeSql.QuestDb.Curd
|
||||
internal void InternalClearData() => ClearData();
|
||||
internal string InternalTableRuleInvoke() => TableRuleInvoke();
|
||||
|
||||
private int InternelExecuteAffrows()
|
||||
private int RestApiExecuteAffrows()
|
||||
{
|
||||
//如果设置了RestAPI的Url则走HTTP
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
var sql = ToSql();
|
||||
var execAsync = RestAPIExtension.ExecAsync(sql).GetAwaiter().GetResult();
|
||||
var execAsync = apiFeatures.ExecAsync(sql).GetAwaiter().GetResult();
|
||||
var resultHash = new Hashtable();
|
||||
try
|
||||
{
|
||||
@@ -49,18 +51,21 @@ namespace FreeSql.QuestDb.Curd
|
||||
throw new Exception("请确认new FreeSqlBuilder().UseQuestDbRestAPI()中设置的用户名密码是否正确.");
|
||||
}
|
||||
}
|
||||
|
||||
var ddl = resultHash["ddl"]?.ToString();
|
||||
return ddl?.ToLower() == "ok" ? 1 : 0;
|
||||
}
|
||||
|
||||
public override int ExecuteAffrows()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
|
||||
{
|
||||
return base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000);
|
||||
}
|
||||
return InternelExecuteAffrows();
|
||||
|
||||
return RestApiExecuteAffrows();
|
||||
}
|
||||
|
||||
public override long ExecuteIdentity() => base.SplitExecuteIdentity(
|
||||
@@ -170,12 +175,14 @@ namespace FreeSql.QuestDb.Curd
|
||||
#else
|
||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
|
||||
{
|
||||
return base.SplitExecuteAffrowsAsync(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
|
||||
}
|
||||
return Task.FromResult(InternelExecuteAffrows());
|
||||
|
||||
return Task.FromResult(RestApiExecuteAffrows());
|
||||
}
|
||||
|
||||
|
||||
@@ -187,7 +194,7 @@ namespace FreeSql.QuestDb.Curd
|
||||
base.SplitExecuteInsertedAsync(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
|
||||
|
||||
async protected override Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
|
||||
protected override async Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = this.ToSql();
|
||||
if (string.IsNullOrEmpty(sql)) return 0;
|
||||
@@ -243,7 +250,7 @@ namespace FreeSql.QuestDb.Curd
|
||||
return ret;
|
||||
}
|
||||
|
||||
async protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default)
|
||||
protected override async Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = this.ToSql();
|
||||
if (string.IsNullOrEmpty(sql)) return new List<T1>();
|
||||
|
||||
@@ -10,6 +10,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FreeSql.Provider.QuestDb;
|
||||
|
||||
namespace FreeSql.QuestDb.Curd
|
||||
{
|
||||
@@ -31,10 +32,11 @@ namespace FreeSql.QuestDb.Curd
|
||||
|
||||
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
|
||||
|
||||
private int InternelExecuteAffrows()
|
||||
private int RestApiExecuteAffrows()
|
||||
{
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
var sql = ToSql();
|
||||
var execAsync = RestAPIExtension.ExecAsync(sql).GetAwaiter().GetResult();
|
||||
var execAsync = apiFeatures.ExecAsync(sql).GetAwaiter().GetResult();
|
||||
var resultHash = new Hashtable();
|
||||
try
|
||||
{
|
||||
@@ -47,6 +49,7 @@ namespace FreeSql.QuestDb.Curd
|
||||
throw new Exception("请确认new FreeSqlBuilder().UseQuestDbRestAPI()中设置的用户名密码是否正确.");
|
||||
}
|
||||
}
|
||||
|
||||
var ddl = resultHash["ddl"]?.ToString();
|
||||
var updated = Convert.ToInt32(resultHash["updated"]);
|
||||
return ddl?.ToLower() == "ok" ? updated : 0;
|
||||
@@ -54,16 +57,20 @@ namespace FreeSql.QuestDb.Curd
|
||||
|
||||
public override int ExecuteAffrows()
|
||||
{
|
||||
//如果设置了RestAPI中Url则走HTTP
|
||||
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
|
||||
//如果设置了RestApi 则走HTTP执行Sql
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
|
||||
{
|
||||
return base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000);
|
||||
}
|
||||
return InternelExecuteAffrows();
|
||||
|
||||
return RestApiExecuteAffrows();
|
||||
}
|
||||
|
||||
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
|
||||
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) =>
|
||||
base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
|
||||
|
||||
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
|
||||
{
|
||||
@@ -96,7 +103,8 @@ namespace FreeSql.QuestDb.Curd
|
||||
try
|
||||
{
|
||||
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
|
||||
var rettmp = _orm.Ado.Query<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
|
||||
var rettmp = _orm.Ado.Query<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql,
|
||||
_commandTimeout, dbParms);
|
||||
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||
ret.AddRange(rettmp);
|
||||
}
|
||||
@@ -178,19 +186,24 @@ namespace FreeSql.QuestDb.Curd
|
||||
#else
|
||||
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
|
||||
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
|
||||
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
|
||||
{
|
||||
return base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
|
||||
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
|
||||
}
|
||||
|
||||
return Task.FromResult(InternelExecuteAffrows());
|
||||
return Task.FromResult(RestApiExecuteAffrows());
|
||||
}
|
||||
|
||||
|
||||
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<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<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
|
||||
protected override async Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var ret = new List<TReturn>();
|
||||
DbParameter[] dbParms = null;
|
||||
@@ -221,7 +234,8 @@ namespace FreeSql.QuestDb.Curd
|
||||
try
|
||||
{
|
||||
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
|
||||
var rettmp = await _orm.Ado.QueryAsync<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||
var rettmp = await _orm.Ado.QueryAsync<TReturn>(queryType, _connection, _transaction,
|
||||
CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
|
||||
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
|
||||
ret.AddRange(rettmp);
|
||||
}
|
||||
|
||||
@@ -351,7 +351,7 @@ static class LatestOnExtension
|
||||
}
|
||||
}
|
||||
|
||||
class QuestResetApiFeatures
|
||||
internal class QuestResetApiFeatures
|
||||
{
|
||||
internal string BaseAddress { get; set; }
|
||||
|
||||
|
||||
@@ -9,18 +9,18 @@ namespace FreeSql.Provider.QuestDb
|
||||
internal class ServiceContainer
|
||||
{
|
||||
private static IServiceCollection _services;
|
||||
internal static IServiceProvider ServiceProvider { get; private set; }
|
||||
private static IServiceProvider _serviceProvider;
|
||||
|
||||
internal static void Initialize(Action<IServiceCollection> service)
|
||||
{
|
||||
_services = new ServiceCollection();
|
||||
service?.Invoke(_services);
|
||||
ServiceProvider = _services.BuildServiceProvider();
|
||||
_serviceProvider = _services.BuildServiceProvider();
|
||||
}
|
||||
|
||||
internal static T GetService<T>()
|
||||
{
|
||||
return ServiceProvider.GetService<T>();
|
||||
return _serviceProvider == null ? default : _serviceProvider.GetService<T>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user