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);
        }