Files
jdescopingtool/NEW/src/JdeScoping.DataSync/Etl/Scripts/SqlScriptRunner.cs
T
Joseph Doherty d49330e697 docs: add XML documentation and ConfigManager implementation plans
Add comprehensive XML documentation (param/returns tags) across 132 source
files to improve IntelliSense and API discoverability. Include ConfigManager
design documents and implementation plans for phases 1-9.
2026-01-20 02:26:26 -05:00

62 lines
2.2 KiB
C#

using Dapper;
using JdeScoping.DataAccess.Interfaces;
using JdeScoping.DataSync.Etl.Contracts;
namespace JdeScoping.DataSync.Etl.Scripts;
/// <summary>
/// SQL script runner that executes SQL commands against the database.
/// </summary>
public class SqlScriptRunner : IScriptRunner
{
private readonly IDbConnectionFactory _connectionFactory;
private readonly string _sql;
private readonly object? _parameters;
private readonly int _timeoutSeconds;
/// <summary>
/// The name of this script.
/// </summary>
public string ScriptName { get; }
/// <summary>
/// Initializes a new instance of the <see cref="SqlScriptRunner"/> class.
/// </summary>
/// <param name="connectionFactory">The database connection factory.</param>
/// <param name="sql">The SQL command to execute.</param>
/// <param name="name">The optional name of the script.</param>
/// <param name="parameters">The optional parameters for the SQL command.</param>
/// <param name="timeoutSeconds">The command timeout in seconds.</param>
public SqlScriptRunner(
IDbConnectionFactory connectionFactory,
string sql,
string? name = null,
object? parameters = null,
int timeoutSeconds = 3600)
{
ArgumentNullException.ThrowIfNull(connectionFactory);
ArgumentException.ThrowIfNullOrWhiteSpace(sql);
_connectionFactory = connectionFactory;
_sql = sql;
_parameters = parameters;
_timeoutSeconds = timeoutSeconds;
ScriptName = name ?? "SqlScript";
}
/// <summary>
/// Executes the SQL script asynchronously.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
public async Task ExecuteAsync(CancellationToken cancellationToken = default)
{
await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(cancellationToken);
await connection.ExecuteAsync(
new CommandDefinition(
_sql,
_parameters,
commandTimeout: _timeoutSeconds,
cancellationToken: cancellationToken));
}
}