Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
        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);
        }
Example #6
0
 public static void CreateAsync_GivenNullLoggingContext_ThrowsArgNullException()
 {
     Assert.That(() => QueryContext.CreateAsync(Mock.Of <IDbConnectionFactory>(), null), Throws.ArgumentNullException);
 }