using System.Collections.Concurrent; using System.Data.Common; using Microsoft.EntityFrameworkCore.Diagnostics; namespace Tiku.IntegrationTests.Api; internal sealed class RecordingDbCommandInterceptor : DbCommandInterceptor { private readonly ConcurrentQueue commandTexts = new(); public IReadOnlyList Snapshot() { return commandTexts.ToArray(); } public void Reset() { while (commandTexts.TryDequeue(out _)) { } } public override DbDataReader ReaderExecuted( DbCommand command, CommandExecutedEventData eventData, DbDataReader result) { Record(command); return result; } public override ValueTask ReaderExecutedAsync( DbCommand command, CommandExecutedEventData eventData, DbDataReader result, CancellationToken cancellationToken = default) { Record(command); return ValueTask.FromResult(result); } public override int NonQueryExecuted(DbCommand command, CommandExecutedEventData eventData, int result) { Record(command); return result; } public override ValueTask NonQueryExecutedAsync( DbCommand command, CommandExecutedEventData eventData, int result, CancellationToken cancellationToken = default) { Record(command); return ValueTask.FromResult(result); } public override object? ScalarExecuted(DbCommand command, CommandExecutedEventData eventData, object? result) { Record(command); return result; } public override ValueTask ScalarExecutedAsync( DbCommand command, CommandExecutedEventData eventData, object? result, CancellationToken cancellationToken = default) { Record(command); return ValueTask.FromResult(result); } private void Record(DbCommand command) { commandTexts.Enqueue(command.CommandText); } }