namespace Omika.Tests.Repositories; /// /// Lecture des paramètres positionnels d'un INSERT capturé par un fake /// IHfsqlConnection : les ? suivent l'ordre de la liste de colonnes, /// ce qui permet d'assertir une colonne précise sans dépendre de son rang. /// internal static class HfsqlInsertParameters { /// /// Retourne la valeur du paramètre correspondant à /// dans l'INSERT décrit par . /// public static object? ValueFor(string sql, IReadOnlyList parameters, string column) { ArgumentNullException.ThrowIfNull(sql); ArgumentNullException.ThrowIfNull(parameters); int open = sql.IndexOf('('); int close = open < 0 ? -1 : sql.IndexOf(')', open); if (open < 0 || close <= open) { throw new InvalidOperationException($"Instruction sans liste de colonnes : {sql}"); } string[] columns = sql[(open + 1)..close] .Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); int index = Array.FindIndex( columns, name => string.Equals(name, column, StringComparison.OrdinalIgnoreCase)); if (index < 0) { throw new InvalidOperationException($"Colonne « {column} » absente de l'instruction : {sql}"); } return parameters[index]; } }