/// <summary> /// Deletes all the data from the database. /// </summary> /// <param name="connection">The connection object to be used.</param> /// <param name="request">The actual <see cref="DeleteAllRequest"/> object.</param> /// <param name="commandTimeout">The command timeout in seconds to be used.</param> /// <param name="transaction">The transaction to be used.</param> /// <param name="trace">The trace object to be used.</param> /// <returns>The number of rows affected by the execution.</returns> internal static async Task <int> DeleteAllAsyncInternalBase(this IDbConnection connection, DeleteAllRequest request, int?commandTimeout = null, IDbTransaction transaction = null, ITrace trace = null) { // Validate InvokeValidatorValidateDeleteAllAsync(connection); // Variables var commandType = CommandType.Text; var commandText = CommandTextCache.GetDeleteAllText(request); // Before Execution if (trace != null) { var cancellableTraceLog = new CancellableTraceLog(commandText, null, null); trace.BeforeDeleteAll(cancellableTraceLog); if (cancellableTraceLog.IsCancelled) { if (cancellableTraceLog.IsThrowException) { throw new CancelledExecutionException(commandText); } return(0); } commandText = (cancellableTraceLog.Statement ?? commandText); } // Before Execution Time var beforeExecutionTime = DateTime.UtcNow; // Actual Execution var result = await ExecuteNonQueryAsyncInternal(connection : connection, commandText : commandText, param : null, commandType : commandType, commandTimeout : commandTimeout, transaction : transaction, skipCommandArrayParametersCheck : true); // After Execution if (trace != null) { trace.AfterDeleteAll(new TraceLog(commandText, null, result, DateTime.UtcNow.Subtract(beforeExecutionTime))); } // Result return(result); }