public int Count <T>(QueryExpression queryExpression) { var tableName = _conventionReader.GetTableName <T>(); var command = _sqlGenerator.CreateCountCommand(tableName, queryExpression.Translate(_conventionReader)); return(_dbCommandExecutor.ExecuteScalar <int>(command, ConnectionString)); }
/// <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); }
public TScalar ExecuteScalar <TScalar>() { return(_dbCommandExecutor.ExecuteScalar <TScalar>(Command, ConnectionString)); }
public TScalar FindScalar <T, TScalar>(SqlQuery sqlQuery) { var command = CreateCommand(sqlQuery); return(_dbCommandExecutor.ExecuteScalar <TScalar>(command, ConnectionString)); }
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); }