namespace EnvelopeGenerator.Application.Common.Interfaces.SQLExecutor;
///
/// Defines methods for executing raw SQL queries or custom SQL query classes and returning query executors for further operations.
/// Provides abstraction for raw SQL execution as well as mapping the results to objects.
///
/// The entity type to which the SQL query results will be mapped.
public interface ISQLExecutor: ISQLExecutor
{
///
/// Executes a raw SQL query and returns an for further querying operations on the result.
///
/// The raw SQL query to execute.
/// Optional cancellation token for the operation.
/// Optional parameters for the SQL query.
/// An instance for further query operations on the result.
IQuery Execute(string sql, CancellationToken cancellation = default, params object[] parameters);
///
/// Executes a custom SQL query defined by a class that implements and returns an for further querying operations on the result.
///
/// The type of the custom SQL query class implementing .
/// Optional cancellation token for the operation.
/// Optional parameters for the SQL query.
/// An instance for further query operations on the result.
IQuery Execute(CancellationToken cancellation = default, params object[] parameters) where TSQL : ISQL;
}