public void ImportFromFile(TsvFile file, string databaseName) { using var transaction = _mySqlConnection.BeginTransaction(); var tableColumnsTypes = _tableInfoProvider.GetColumnTypes(file.ShortName, transaction); var query = MakeInsertQuery(file.ShortName, file.Headers, databaseName); Log.Information("{Query}", query); foreach (var row in file.Rows) { var parameters = new DynamicParameters(); for (var columnIndex = 0; columnIndex < row.Length; columnIndex++) { var paramName = $"@Value{columnIndex}"; var transformer = DetermineTransformer(tableColumnsTypes, file.Headers[columnIndex]); var transformedValue = transformer.Transform(row[columnIndex]); parameters.Add(paramName, transformedValue); } _mySqlConnection.Execute(query, parameters, transaction); } transaction.Commit(); }
public void Validate_Invalid_Tsv_File() { var invalidFile = new TsvFile( "InvalidFile", new[] { "Id" }, new[] { new[] { "123", "321" }, new[] { "567", "765", "234234" } } ); var tsvValidator = new TsvFileValidator(); void Act() => tsvValidator.Validate(invalidFile); Assert.Throws <TsvValidationException>(Act); }
public void Validate_Valid_Tsv_File() { var validFile = new TsvFile( "ValidFile", new[] { "Id", "Name" }, new[] { new[] { "123", "321" }, new[] { "567", "765" } } ); var tsvValidator = new TsvFileValidator(); tsvValidator.Validate(validFile); // No exceptions - test and validation successful, there is no Assert.Ok() }
public TsvFile Validate(TsvFile file) { var errors = file.Rows .Where(row => row.Length != file.Headers.Length) .Select((row, index) => $"Row {index} has incorrect number of columns, expected {file.Headers.Length}, got {row.Length}") .ToList(); if (errors.Any()) { var allErrors = string.Join("\n\t", errors); throw new TsvValidationException($"TsvFile is invalid. Errors:\n\t{allErrors}"); } return(file); }