private static DatabaseFileResult GetDatabasePairs(string fileName) { if (string.IsNullOrWhiteSpace(fileName)) { fileName = $"{InputFile.DatabasePairs}.supersecret"; } List <string> lines = GetFileLines(fileName); const char separator = ','; List <DatabasePair> databasePairs = lines.Where(line => line.Split(separator).Length == Enum.GetValues(typeof(DatabasePairPart)).Length) .Select(validLine => validLine.Split(separator)) .Select(parts => new DatabasePair(new Database(parts[(int)DatabasePairPart.FriendlyName1], parts[(int)DatabasePairPart.ServerName1], parts[(int)DatabasePairPart.DatabaseName1]), new Database(parts[(int)DatabasePairPart.FriendlyName2], parts[(int)DatabasePairPart.ServerName2], parts[(int)DatabasePairPart.DatabaseName2]))) .ToList(); List <string> errorMessages = GetFileErrors(lines, separator, Enum.GetValues(typeof(DatabasePairPart)).Length, "database pair format"); //TODO: Make sure no database pair has the same server name and same table name if (errorMessages.Any()) { Console.WriteLine($"Error: Invalid database pair format in {InputFile.DatabasePairs} file."); } DatabaseFileResult result = new DatabaseFileResult(databasePairs, errorMessages); return(result); }
private static void CompareDatabasePairs(string databaseFileName, List <Table> tablesToCompare) { DatabaseFileResult result = GetDatabasePairs(databaseFileName); if (result.DatabasePairs.Any()) { foreach (DatabasePair dbPair in result.DatabasePairs) { DisplayProgressMessage($"Comparing {dbPair.Database1.FriendlyName} to {dbPair.Database2.FriendlyName}..."); CompareDatabasePair(tablesToCompare, dbPair); } Console.WriteLine("Done!"); } if (result.Errors.Any()) { HandleTopLevelError(AppendLines(result.Errors), false); } else if (!result.DatabasePairs.Any()) { HandleTopLevelError("No databases to compare!"); } }