public string[] Generate(string databaseName)
        {
            var newMigrations = GetMigrationHistory(databaseName);
            var ahead         = _migrationHistory.Subtract(newMigrations);

            if (ahead.Any)
            {
                throw new InvalidOperationException(
                          "The target database is ahead of the desired migration. You can force a rollback, which may destroy data.");
            }
            var difference = newMigrations.Subtract(_migrationHistory);

            var generator = new ForwardGenerator(databaseName, difference);

            while (generator.Any)
            {
                generator.AddMigration(generator.Head);
            }

            return(generator.Sql.ToArray());
        }