private static async Task <Option <T> > QuerySingleOrNoneAsyncCore <T>(IDbConnectionFactory connectionFactory, string sql, object parameters, CancellationToken cancellationToken) where T : notnull { try { var command = new CommandDefinition(sql, parameters, cancellationToken: cancellationToken); var loggingContext = new QueryLoggingContext(connectionFactory, sql, parameters); using var context = await QueryContext.CreateAsync(connectionFactory, loggingContext, cancellationToken).ConfigureAwait(false); var connection = await connectionFactory.OpenConnectionAsync(cancellationToken).ConfigureAwait(false); await using var _ = connection.WithDispose(connectionFactory); var retryPolicy = BuildRetryPolicy(connectionFactory, loggingContext); var result = await retryPolicy.ExecuteAsync(_ => connection.QuerySingleOrDefaultAsync <T>(command), cancellationToken).ConfigureAwait(false); return(result != null ? Option <T> .Some(result) : Option <T> .None); } catch (InvalidOperationException) // for > 1 case { return(Option <T> .None); } }
public static void CreateAsync_WithoutQueryLimitConfigured_ReturnsNewInstance() { var connectionFactory = Mock.Of <IDbConnectionFactory>(); const string sql = "select 1"; var loggingContext = new QueryLoggingContext(connectionFactory, sql, null); Assert.That(async() => await QueryContext.CreateAsync(connectionFactory, loggingContext).ConfigureAwait(false), Throws.Nothing); }
public static void CreateAsync_GivenNullConnectionFactory_ThrowsArgNullException() { var connectionFactory = Mock.Of <IDbConnectionFactory>(); const string sql = "select 1"; var loggingContext = new QueryLoggingContext(connectionFactory, sql, null); Assert.That(() => QueryContext.CreateAsync(null, loggingContext), Throws.ArgumentNullException); }
private static async Task <IEnumerable <T> > QueryAsyncCore <T>(IDbConnectionFactory connectionFactory, string sql, object parameters, CancellationToken cancellationToken) { var command = new CommandDefinition(sql, parameters, cancellationToken: cancellationToken); var loggingContext = new QueryLoggingContext(connectionFactory, sql, parameters); using var context = await QueryContext.CreateAsync(connectionFactory, loggingContext, cancellationToken).ConfigureAwait(false); var connection = await connectionFactory.OpenConnectionAsync(cancellationToken).ConfigureAwait(false); await using var _ = connection.WithDispose(connectionFactory); var retryPolicy = BuildRetryPolicy(connectionFactory, loggingContext); return(await retryPolicy.ExecuteAsync(_ => connection.QueryAsync <T>(command), cancellationToken).ConfigureAwait(false)); }
private static async Task <Option <T> > QueryFirstOrNoneAsyncCore <T>(IDbConnectionFactory connectionFactory, string sql, CancellationToken cancellationToken) where T : notnull { var command = new CommandDefinition(sql, cancellationToken: cancellationToken); var loggingContext = new QueryLoggingContext(connectionFactory, sql, null); using var context = await QueryContext.CreateAsync(connectionFactory, loggingContext, cancellationToken).ConfigureAwait(false); var connection = await connectionFactory.OpenConnectionAsync(cancellationToken).ConfigureAwait(false); await using var _ = connection.WithDispose(connectionFactory); var retryPolicy = BuildRetryPolicy(connectionFactory, loggingContext); var result = await retryPolicy.ExecuteAsync(_ => connection.QueryFirstOrDefaultAsync <T>(command), cancellationToken).ConfigureAwait(false); return(result != null ? Option <T> .Some(result) : Option <T> .None); }
public static void CreateAsync_GivenNullLoggingContext_ThrowsArgNullException() { Assert.That(() => QueryContext.CreateAsync(Mock.Of <IDbConnectionFactory>(), null), Throws.ArgumentNullException); }