public static List <T> ExecuteReader <T>(this IDbCommandExecutor executor, ExecuteReaderRequest request, Func <IDataRecord, T> read) { List <T> rows = null; executor.ExecuteReader(request, dataReader => rows = dataReader.ReadResult(() => read(dataReader))); return(rows); }
public static ExecuteReaderResponse <T1, T2> ExecuteReader <T1, T2>(this IDbCommandExecutor executor, ExecuteReaderRequest request, Func <IDataRecord, T1> read1, Func <IDataRecord, T2> read2) { ExecuteReaderResponse <T1, T2> response = null; executor.ExecuteReader(request, dataReader => response = dataReader.Read(() => read1(dataReader), () => read2(dataReader))); return(response); }
public static ReadOnlySegmentLinkedList <T> ExecuteReader <T>(this IDbCommandExecutor executor, ExecuteReaderRequest request, int segmentLength, Func <IDataRecord, T> readRecord) { Assert.IsNotNull(executor); ReadOnlySegmentLinkedList <T> rows = null; executor.ExecuteReader(request, dataReader => rows = dataReader.ReadResult(segmentLength, readRecord)); return(rows); }
/// <summary> /// Runs ADO.NET test suite for the specified <see cref="IDbCommandExecutor"/>. /// </summary> /// <param name="connection">The <see cref="IDbConnection"/> to use to connect to the database.</param> /// <param name="commandFactory">A <see cref="DbCommandFactory"/> implementation specific to an ADO.NET provider, e.g. SqlCommand, NpgsqlCommand.</param> /// <param name="commandExecutor">A <see cref="IDbCommandExecutor"/> used to call DbCommand methods.</param> /// <param name="cancellationToken">A cancellation token passed into downstream async methods.</param> /// <returns>A task representing the asynchronous operation.</returns> private static async Task RunAsync( IDbConnection connection, DbCommandFactory commandFactory, IDbCommandExecutor commandExecutor, CancellationToken cancellationToken) { string commandName = commandExecutor.CommandTypeName; Console.WriteLine(commandName); using (var parentScope = Tracer.Instance.StartActive("command")) { parentScope.Span.ResourceName = commandName; IDbCommand command; using (var scope = Tracer.Instance.StartActive("sync")) { scope.Span.ResourceName = commandName; Console.WriteLine(" Synchronous"); Console.WriteLine(); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(connection); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetInsertRowCommand(connection); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetSelectScalarCommand(connection); commandExecutor.ExecuteScalar(command); command = commandFactory.GetUpdateRowCommand(connection); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetSelectRowCommand(connection); commandExecutor.ExecuteReader(command); command = commandFactory.GetSelectRowCommand(connection); commandExecutor.ExecuteReader(command, CommandBehavior.Default); command = commandFactory.GetDeleteRowCommand(connection); commandExecutor.ExecuteNonQuery(command); } if (commandExecutor.SupportsAsyncMethods) { await Task.Delay(100, cancellationToken); using (var scope = Tracer.Instance.StartActive("async")) { scope.Span.ResourceName = commandName; Console.WriteLine(" Asynchronous"); Console.WriteLine(); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetInsertRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetSelectScalarCommand(connection); await commandExecutor.ExecuteScalarAsync(command); command = commandFactory.GetUpdateRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetSelectRowCommand(connection); await commandExecutor.ExecuteReaderAsync(command); command = commandFactory.GetSelectRowCommand(connection); await commandExecutor.ExecuteReaderAsync(command, CommandBehavior.Default); command = commandFactory.GetDeleteRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command); } await Task.Delay(100, cancellationToken); using (var scope = Tracer.Instance.StartActive("async-with-cancellation")) { scope.Span.ResourceName = commandName; Console.WriteLine(" Asynchronous with cancellation"); Console.WriteLine(); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetInsertRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetSelectScalarCommand(connection); await commandExecutor.ExecuteScalarAsync(command, cancellationToken); command = commandFactory.GetUpdateRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetSelectRowCommand(connection); await commandExecutor.ExecuteReaderAsync(command, cancellationToken); command = commandFactory.GetSelectRowCommand(connection); await commandExecutor.ExecuteReaderAsync(command, CommandBehavior.Default, cancellationToken); command = commandFactory.GetDeleteRowCommand(connection); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); } } } await Task.Delay(100, cancellationToken); }
private static async Task RunAsync( ITransaction transaction, DbCommandFactory commandFactory, IDbCommandExecutor commandExecutor, CancellationToken cancellationToken ) { var commandName = commandExecutor.CommandTypeName; Console.WriteLine(commandName); await transaction.CaptureSpan($"{commandName} command", "command", async span => { IDbCommand command; await span.CaptureSpan($"{commandName} sync", "sync", async childSpan => { Console.WriteLine(" synchronous"); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetInsertRowCommand(); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetSelectScalarCommand(); commandExecutor.ExecuteScalar(command); command = commandFactory.GetUpdateRowCommand(); commandExecutor.ExecuteNonQuery(command); command = commandFactory.GetSelectRowCommand(); commandExecutor.ExecuteReader(command); command = commandFactory.GetSelectRowCommand(); commandExecutor.ExecuteReader(command, CommandBehavior.Default); command = commandFactory.GetDeleteRowCommand(); commandExecutor.ExecuteNonQuery(command); }); if (commandExecutor.SupportsAsyncMethods) { await Task.Delay(100, cancellationToken); await span.CaptureSpan($"{commandName} async", "async", async childSpan => { Console.WriteLine(" asynchronous"); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetInsertRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetSelectScalarCommand(); await commandExecutor.ExecuteScalarAsync(command); command = commandFactory.GetUpdateRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command); command = commandFactory.GetSelectRowCommand(); await commandExecutor.ExecuteReaderAsync(command); command = commandFactory.GetSelectRowCommand(); await commandExecutor.ExecuteReaderAsync(command, CommandBehavior.Default); command = commandFactory.GetDeleteRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command); }); await Task.Delay(100, cancellationToken); await span.CaptureSpan($"{commandName} async with cancellation", "async-cancellation", async childSpan => { Console.WriteLine(" asynchronous with cancellation"); await Task.Delay(100, cancellationToken); command = commandFactory.GetCreateTableCommand(); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetInsertRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetSelectScalarCommand(); await commandExecutor.ExecuteScalarAsync(command, cancellationToken); command = commandFactory.GetUpdateRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); command = commandFactory.GetSelectRowCommand(); await commandExecutor.ExecuteReaderAsync(command, cancellationToken); command = commandFactory.GetSelectRowCommand(); await commandExecutor.ExecuteReaderAsync(command, CommandBehavior.Default, cancellationToken); command = commandFactory.GetDeleteRowCommand(); await commandExecutor.ExecuteNonQueryAsync(command, cancellationToken); }); } }); await Task.Delay(100, cancellationToken); }