Skip to content

Commit 7dec932

Browse files
committed
优化QuestDb Insert Update 相关逻辑
1 parent 3b10c5f commit 7dec932

File tree

4 files changed

+56
-35
lines changed

4 files changed

+56
-35
lines changed

Providers/FreeSql.Provider.QuestDb/Curd/QuestDbInsert.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Text;
1111
using System.Threading;
1212
using System.Threading.Tasks;
13+
using FreeSql.Provider.QuestDb;
1314

1415
namespace FreeSql.QuestDb.Curd
1516
{
@@ -32,11 +33,12 @@ public QuestDbInsert(IFreeSql orm, CommonUtils commonUtils, CommonExpression com
3233
internal void InternalClearData() => ClearData();
3334
internal string InternalTableRuleInvoke() => TableRuleInvoke();
3435

35-
private int InternelExecuteAffrows()
36+
private int RestApiExecuteAffrows()
3637
{
3738
//如果设置了RestAPI的Url则走HTTP
39+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
3840
var sql = ToSql();
39-
var execAsync = RestAPIExtension.ExecAsync(sql).GetAwaiter().GetResult();
41+
var execAsync = apiFeatures.ExecAsync(sql).GetAwaiter().GetResult();
4042
var resultHash = new Hashtable();
4143
try
4244
{
@@ -49,18 +51,21 @@ private int InternelExecuteAffrows()
4951
throw new Exception("请确认new FreeSqlBuilder().UseQuestDbRestAPI()中设置的用户名密码是否正确.");
5052
}
5153
}
54+
5255
var ddl = resultHash["ddl"]?.ToString();
5356
return ddl?.ToLower() == "ok" ? 1 : 0;
5457
}
5558

5659
public override int ExecuteAffrows()
5760
{
58-
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
61+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
62+
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
5963
{
6064
return base.SplitExecuteAffrows(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
6165
_batchParameterLimit > 0 ? _batchParameterLimit : 3000);
6266
}
63-
return InternelExecuteAffrows();
67+
68+
return RestApiExecuteAffrows();
6469
}
6570

6671
public override long ExecuteIdentity() => base.SplitExecuteIdentity(
@@ -170,14 +175,16 @@ protected override List<T1> RawExecuteInserted()
170175
#else
171176
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
172177
{
173-
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
178+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
179+
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
174180
{
175181
return base.SplitExecuteAffrowsAsync(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
176182
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
177183
}
178-
return Task.FromResult(InternelExecuteAffrows());
184+
185+
return Task.FromResult(RestApiExecuteAffrows());
179186
}
180-
187+
181188

182189
public override Task<long> ExecuteIdentityAsync(CancellationToken cancellationToken = default) =>
183190
base.SplitExecuteIdentityAsync(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
@@ -187,7 +194,7 @@ public override Task<List<T1>> ExecuteInsertedAsync(CancellationToken cancellati
187194
base.SplitExecuteInsertedAsync(_batchValuesLimit > 0 ? _batchValuesLimit : 5000,
188195
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
189196

190-
async protected override Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
197+
protected override async Task<long> RawExecuteIdentityAsync(CancellationToken cancellationToken = default)
191198
{
192199
var sql = this.ToSql();
193200
if (string.IsNullOrEmpty(sql)) return 0;
@@ -243,7 +250,7 @@ async protected override Task<long> RawExecuteIdentityAsync(CancellationToken ca
243250
return ret;
244251
}
245252

246-
async protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default)
253+
protected override async Task<List<T1>> RawExecuteInsertedAsync(CancellationToken cancellationToken = default)
247254
{
248255
var sql = this.ToSql();
249256
if (string.IsNullOrEmpty(sql)) return new List<T1>();

Providers/FreeSql.Provider.QuestDb/Curd/QuestDbUpdate.cs

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Text;
1111
using System.Threading;
1212
using System.Threading.Tasks;
13+
using FreeSql.Provider.QuestDb;
1314

1415
namespace FreeSql.QuestDb.Curd
1516
{
@@ -31,10 +32,11 @@ internal string InternalWhereCaseSource(string CsName, Func<string, string> then
3132

3233
internal void InternalToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col) => ToSqlCaseWhenEnd(sb, col);
3334

34-
private int InternelExecuteAffrows()
35+
private int RestApiExecuteAffrows()
3536
{
37+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
3638
var sql = ToSql();
37-
var execAsync = RestAPIExtension.ExecAsync(sql).GetAwaiter().GetResult();
39+
var execAsync = apiFeatures.ExecAsync(sql).GetAwaiter().GetResult();
3840
var resultHash = new Hashtable();
3941
try
4042
{
@@ -47,26 +49,31 @@ private int InternelExecuteAffrows()
4749
throw new Exception("请确认new FreeSqlBuilder().UseQuestDbRestAPI()中设置的用户名密码是否正确.");
4850
}
4951
}
52+
5053
var ddl = resultHash["ddl"]?.ToString();
5154
var updated = Convert.ToInt32(resultHash["updated"]);
5255
return ddl?.ToLower() == "ok" ? updated : 0;
5356
}
5457

5558
public override int ExecuteAffrows()
5659
{
57-
//如果设置了RestAPI中Url则走HTTP
58-
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
60+
//如果设置了RestApi 则走HTTP执行Sql
61+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
62+
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
5963
{
6064
return base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
6165
_batchParameterLimit > 0 ? _batchParameterLimit : 3000);
6266
}
63-
return InternelExecuteAffrows();
67+
68+
return RestApiExecuteAffrows();
6469
}
6570

66-
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) => base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
71+
protected override List<TReturn> ExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns) =>
72+
base.SplitExecuteUpdated<TReturn>(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
73+
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns);
6774

68-
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
69-
{
75+
protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnInfo> columns)
76+
{
7077
var ret = new List<TReturn>();
7178
DbParameter[] dbParms = null;
7279
StringBuilder sbret = null;
@@ -94,10 +101,11 @@ protected override List<TReturn> RawExecuteUpdated<TReturn>(IEnumerable<ColumnIn
94101

95102
Exception exception = null;
96103
try
97-
{
98-
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
99-
var rettmp = _orm.Ado.Query<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms);
100-
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
104+
{
105+
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
106+
var rettmp = _orm.Ado.Query<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql,
107+
_commandTimeout, dbParms);
108+
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
101109
ret.AddRange(rettmp);
102110
}
103111
catch (Exception ex)
@@ -178,20 +186,25 @@ protected override void ToSqlCaseWhenEnd(StringBuilder sb, ColumnInfo col)
178186
#else
179187
public override Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default)
180188
{
181-
if (string.IsNullOrWhiteSpace(RestAPIExtension.BaseUrl))
189+
var apiFeatures = ServiceContainer.GetService<QuestResetApiFeatures>();
190+
if (apiFeatures != null && string.IsNullOrWhiteSpace(apiFeatures.BaseAddress))
182191
{
183192
return base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500,
184193
_batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken);
185194
}
186-
187-
return Task.FromResult(InternelExecuteAffrows());
195+
196+
return Task.FromResult(RestApiExecuteAffrows());
188197
}
189198

190199

191-
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);
200+
protected override Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns,
201+
CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync<TReturn>(
202+
_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000,
203+
columns, cancellationToken);
192204

193-
async protected override Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns, CancellationToken cancellationToken = default)
194-
{
205+
protected override async Task<List<TReturn>> RawExecuteUpdatedAsync<TReturn>(IEnumerable<ColumnInfo> columns,
206+
CancellationToken cancellationToken = default)
207+
{
195208
var ret = new List<TReturn>();
196209
DbParameter[] dbParms = null;
197210
StringBuilder sbret = null;
@@ -219,10 +232,11 @@ await ToSqlFetchAsync(async sb =>
219232

220233
Exception exception = null;
221234
try
222-
{
223-
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
224-
var rettmp = await _orm.Ado.QueryAsync<TReturn>(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
225-
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
235+
{
236+
var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null;
237+
var rettmp = await _orm.Ado.QueryAsync<TReturn>(queryType, _connection, _transaction,
238+
CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
239+
ValidateVersionAndThrow(rettmp.Count, sql, dbParms);
226240
ret.AddRange(rettmp);
227241
}
228242
catch (Exception ex)

Providers/FreeSql.Provider.QuestDb/QuestDbGlobalExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ internal static void InternalImpl<T1, TKey>(Expression<Func<T1, DateTime?>> time
351351
}
352352
}
353353

354-
class QuestResetApiFeatures
354+
internal class QuestResetApiFeatures
355355
{
356356
internal string BaseAddress { get; set; }
357357

Providers/FreeSql.Provider.QuestDb/ServiceContainer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ namespace FreeSql.Provider.QuestDb
99
internal class ServiceContainer
1010
{
1111
private static IServiceCollection _services;
12-
internal static IServiceProvider ServiceProvider { get; private set; }
12+
private static IServiceProvider _serviceProvider;
1313

1414
internal static void Initialize(Action<IServiceCollection> service)
1515
{
1616
_services = new ServiceCollection();
1717
service?.Invoke(_services);
18-
ServiceProvider = _services.BuildServiceProvider();
18+
_serviceProvider = _services.BuildServiceProvider();
1919
}
2020

2121
internal static T GetService<T>()
2222
{
23-
return ServiceProvider.GetService<T>();
23+
return _serviceProvider == null ? default : _serviceProvider.GetService<T>();
2424
}
2525
}
2626
}

0 commit comments

Comments
 (0)