Skip to content

Commit

Permalink
#941 Fixes to ensure the silent cancellation of the operations.
Browse files Browse the repository at this point in the history
  • Loading branch information
mikependon committed Sep 14, 2022
1 parent 65eabbd commit 9390343
Show file tree
Hide file tree
Showing 10 changed files with 410 additions and 95 deletions.
Expand Up @@ -31,6 +31,31 @@ private class TraceEntity
public string Name { get; set; }
}

private class RejectorTrace : ITrace
{
public void AfterExecution<TResult>(ResultTraceLog<TResult> log)
{
}

public Task AfterExecutionAsync<TResult>(ResultTraceLog<TResult> log,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}

public void BeforeExecution(CancellableTraceLog log)
{
log.Cancel(true);
}

public Task BeforeExecutionAsync(CancellableTraceLog log,
CancellationToken cancellationToken = default)
{
log.Cancel(true);
return Task.CompletedTask;
}
}

#endregion

#region Average
Expand Down
80 changes: 71 additions & 9 deletions RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs
Expand Up @@ -204,6 +204,12 @@ public static IDbConnection EnsureOpen(this IDbConnection connection)
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Execute
using (var reader = command.ExecuteReader())
{
Expand Down Expand Up @@ -345,12 +351,18 @@ public static IDbConnection EnsureOpen(this IDbConnection connection)
skipCommandArrayParametersCheck: skipCommandArrayParametersCheck);

// Variables
IEnumerable<dynamic> result;
IEnumerable<dynamic> result = null;

// Before Execution
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Execute
using (var reader = await command.ExecuteReaderAsync(cancellationToken))
{
Expand Down Expand Up @@ -639,12 +651,18 @@ await Tracer
skipCommandArrayParametersCheck: skipCommandArrayParametersCheck);

// Variables
var result = (IEnumerable<TResult>)null;
IEnumerable<TResult> result = null;

// Before Execution
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execute
using (var reader = command.ExecuteReader())
{
Expand Down Expand Up @@ -944,12 +962,18 @@ await Tracer
dbFields: dbFields,
skipCommandArrayParametersCheck: skipCommandArrayParametersCheck);

IEnumerable<TResult> result;
IEnumerable<TResult> result = null;

// Before Execution
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Execute
using (var reader = await command.ExecuteReaderAsync(cancellationToken))
{
Expand Down Expand Up @@ -1264,7 +1288,7 @@ await Tracer
Type entityType,
IEnumerable<DbField> dbFields,
bool skipCommandArrayParametersCheck,
Action<DbCommand> beforeExecutionCallback = null)
Func<DbCommand, TraceResult> beforeExecutionCallback = null)
{
// Variables
var setting = DbSettingMapper.Get(connection);
Expand All @@ -1283,12 +1307,18 @@ await Tracer
try
{
// A hacky solution for other operations (i.e.: QueryMultiple)
beforeExecutionCallback?.Invoke(command);
var traceResult = beforeExecutionCallback?.Invoke(command);

// Before Execution
var traceResult = Tracer
traceResult ??= Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execute
var reader = command.ExecuteReader();

Expand Down Expand Up @@ -1390,7 +1420,7 @@ await Tracer
Type entityType,
IEnumerable<DbField> dbFields,
bool skipCommandArrayParametersCheck,
Func<DbCommand, CancellationToken, Task> beforeExecutionCallbackAsync = null)
Func<DbCommand, CancellationToken, Task<TraceResult>> beforeExecutionCallbackAsync = null)
{
// Variables
var setting = connection.GetDbSetting();
Expand All @@ -1409,16 +1439,24 @@ await Tracer
// Ensure the DbCommand disposal
try
{
TraceResult traceResult = null;

// A hacky solution for other operations (i.e.: QueryMultipleAsync)
if (beforeExecutionCallbackAsync != null)
{
await beforeExecutionCallbackAsync(command, cancellationToken);
traceResult = await beforeExecutionCallbackAsync(command, cancellationToken);
}

// Before Execution
var traceResult = await Tracer
traceResult ??= await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execute
var reader = await command.ExecuteReaderAsync(cancellationToken);

Expand Down Expand Up @@ -1529,6 +1567,12 @@ await Tracer
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execution
var result = command.ExecuteNonQuery();

Expand Down Expand Up @@ -1632,6 +1676,12 @@ await Tracer
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execution
var result = await command.ExecuteNonQueryAsync(cancellationToken);

Expand Down Expand Up @@ -1870,6 +1920,12 @@ await Tracer
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execute
var result = Converter.ToType<TResult>(command.ExecuteScalar());

Expand Down Expand Up @@ -2009,6 +2065,12 @@ await Tracer
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return default;
}

// Execution
var result = Converter.ToType<TResult>(await command.ExecuteScalarAsync(cancellationToken));

Expand Down
12 changes: 12 additions & 0 deletions RepoDb.Core/RepoDb/Operations/DbConnection/Insert.cs
Expand Up @@ -678,6 +678,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
result = Converter.ToType<TResult>(command.ExecuteScalar());

Expand Down Expand Up @@ -756,6 +762,12 @@ public static partial class DbConnectionExtension
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
result = Converter.ToType<TResult>(await command.ExecuteScalarAsync(cancellationToken));

Expand Down
24 changes: 24 additions & 0 deletions RepoDb.Core/RepoDb/Operations/DbConnection/InsertAll.cs
Expand Up @@ -497,6 +497,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
var returnValue = Converter.DbNullToNull(command.ExecuteScalar());

Expand Down Expand Up @@ -567,6 +573,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// No identity setters
result += command.ExecuteNonQuery();

Expand Down Expand Up @@ -728,6 +740,12 @@ public static partial class DbConnectionExtension
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
var returnValue = Converter.DbNullToNull(await command.ExecuteScalarAsync(cancellationToken));

Expand Down Expand Up @@ -799,6 +817,12 @@ await Tracer
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// No identity setters
result += await command.ExecuteNonQueryAsync(cancellationToken);

Expand Down
12 changes: 12 additions & 0 deletions RepoDb.Core/RepoDb/Operations/DbConnection/Merge.cs
Expand Up @@ -2155,6 +2155,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
result = Converter.ToType<TResult>(command.ExecuteScalar());

Expand Down Expand Up @@ -2400,6 +2406,12 @@ public static partial class DbConnectionExtension
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
result = Converter.ToType<TResult>(await command.ExecuteScalarAsync(cancellationToken));

Expand Down
24 changes: 24 additions & 0 deletions RepoDb.Core/RepoDb/Operations/DbConnection/MergeAll.cs
Expand Up @@ -1336,6 +1336,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
var returnValue = Converter.DbNullToNull(command.ExecuteScalar());

Expand Down Expand Up @@ -1409,6 +1415,12 @@ public static partial class DbConnectionExtension
var traceResult = Tracer
.InvokeBeforeExecution(traceKey, trace, command);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// No identity setters
result += command.ExecuteNonQuery();

Expand Down Expand Up @@ -1710,6 +1722,12 @@ public static partial class DbConnectionExtension
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// Actual Execution
var returnValue = Converter.DbNullToNull(await command.ExecuteScalarAsync(cancellationToken));

Expand Down Expand Up @@ -1784,6 +1802,12 @@ await Tracer
var traceResult = await Tracer
.InvokeBeforeExecutionAsync(traceKey, trace, command, cancellationToken);

// Silent cancellation
if (traceResult?.CancellableTraceLog?.IsCancelled == true)
{
return result;
}

// No identity setters
result += await command.ExecuteNonQueryAsync(cancellationToken);

Expand Down

0 comments on commit 9390343

Please sign in to comment.