public void TestGapsAreFound() { var migration = A.Fake <IMigration>(); ImportedMigration[] importedMigrations = { new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null), false), new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null), false), new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null), false), }; IMigrationMetadata[] executedMigrations = { new MigrationMetadata(1, DefaultModuleName, null), new MigrationMetadata(3, DefaultModuleName, null), }; var selector = new MigrationSelector(importedMigrations, executedMigrations); IEnumerable <ApplicableMigration> applicableMigrations; IEnumerable <IMigrationMetadata> unidentifiedMigrations; selector.GetMigrationsTo(long.MaxValue, m => true, out applicableMigrations, out unidentifiedMigrations); Assert.AreEqual(1, applicableMigrations.Count()); Assert.AreEqual(2, applicableMigrations.First().Migration.Metadata.Timestamp); Assert.AreEqual(MigrationDirection.Up, applicableMigrations.First().Direction); CollectionAssert.IsEmpty(unidentifiedMigrations); }
public void TestReverting() { var migration = MockRepository.GenerateStub <IReversibleMigration>(); ImportedMigration[] importedMigrations = { new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)), new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null)), new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null)), }; IMigrationMetadata[] executedMigrations = { new MigrationMetadata(1, DefaultModuleName, null), new MigrationMetadata(2, DefaultModuleName, null), new MigrationMetadata(3, DefaultModuleName, null), }; var selector = new MigrationSelector(importedMigrations, executedMigrations); IEnumerable <ApplicableMigration> applicableMigrations; IEnumerable <IMigrationMetadata> unidentifiedMigrations; selector.GetMigrationsTo(2, s => true, out applicableMigrations, out unidentifiedMigrations); Assert.AreEqual(1, applicableMigrations.Count()); Assert.AreEqual(3, applicableMigrations.First().Metadata.Timestamp); Assert.AreEqual(MigrationDirection.Down, applicableMigrations.First().Metadata.Direction); CollectionAssert.IsEmpty(unidentifiedMigrations); }
private IMigrationBatch FetchMigrationsTo(ComposablePartCatalog catalog, long timestamp) { // import all migrations DateTime start = DateTime.Now; var timestampProviders = InitializeTimestampProviders(catalog, _options.ModuleSelector); IEnumerable <ImportedMigration> availableMigrations = ImportAllMigrations(catalog, timestampProviders); Log.Verbose(LogCategory.Performance, "Importing migrations took {0}s", (DateTime.Now - start).TotalSeconds); // initialize command execution/scripting dispatching ISqlDispatcher dispatcher = new SqlDispatcher(_options.ScriptingOptions, _provider, _providerMetadata); // initialize versioning component and get executed migrations IVersioning versioning = InitializeVersioning(catalog, dispatcher); var executedMigrations = new List <IMigrationMetadata>(versioning.ExecutedMigrations); // create migration batch var migrationSelector = new MigrationSelector(availableMigrations, executedMigrations); IEnumerable <ApplicableMigration> applicableMigrations; IEnumerable <IMigrationMetadata> unidentifiedMigrations; migrationSelector.GetMigrationsTo(timestamp, _options.ModuleSelector, out applicableMigrations, out unidentifiedMigrations); return(new MigrationBatch( // ReSharper disable RedundantEnumerableCastCall applicableMigrations.Select(m => new MigrationStep(m.Implementation, m.Metadata, _connectionInfo, _provider, _providerMetadata, _dbConnectionFactory, dispatcher)).Cast <IMigrationStep>(), // ReSharper restore RedundantEnumerableCastCall unidentifiedMigrations, versioning, _options)); }
private static void MigrateAssembly(string connectionString, Assembly assembly) { var migrationSelector = new MigrationSelector(connectionString); var migrator = new Migrator(connectionString, DbPlatform.SqlServer2014, new MigrationOptions { MigrationSelector = migrationSelector.Select }); Console.WriteLine($"Updating to latest db version, assembly: {assembly.GetName().Name}"); var migrations = migrator.FetchMigrations(assembly); Console.WriteLine($"{migrations.Steps.Count} pending migrations"); migrator.MigrateAll(assembly); Console.WriteLine("Done"); }
public void TestDuplicateMigrationsThrowInvalidMigrationException() { var migration = MockRepository.GenerateStub <IMigration>(); ImportedMigration[] importedMigrations = { new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)), new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)), }; IMigrationMetadata[] executedMigrations = { }; var selector = new MigrationSelector(importedMigrations, executedMigrations); Assert.IsNotNull(selector, "Just to satisfy R# and FxCop."); }
public void TestRevertingThrowsWhenImpossible() { var migration = MockRepository.GenerateStub <IMigration>(); ImportedMigration[] importedMigrations = { new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null)), new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null)), new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null)), }; IMigrationMetadata[] executedMigrations = { new MigrationMetadata(1, DefaultModuleName, null), new MigrationMetadata(2, DefaultModuleName, null), new MigrationMetadata(3, DefaultModuleName, null), }; var selector = new MigrationSelector(importedMigrations, executedMigrations); IEnumerable <ApplicableMigration> applicableMigrations; IEnumerable <IMigrationMetadata> unidentifiedMigrations; selector.GetMigrationsTo(2, s => true, out applicableMigrations, out unidentifiedMigrations); }
public void TestRevertingThrowsWhenImpossible() { var migration = A.Fake <IMigration>(); ImportedMigration[] importedMigrations = { new ImportedMigration(migration, new MigrationMetadata(1, DefaultModuleName, null), false), new ImportedMigration(migration, new MigrationMetadata(2, DefaultModuleName, null), false), new ImportedMigration(migration, new MigrationMetadata(3, DefaultModuleName, null), false), }; IMigrationMetadata[] executedMigrations = { new MigrationMetadata(1, DefaultModuleName, null), new MigrationMetadata(2, DefaultModuleName, null), new MigrationMetadata(3, DefaultModuleName, null), }; var selector = new MigrationSelector(importedMigrations, executedMigrations); IEnumerable <ApplicableMigration> applicableMigrations; IEnumerable <IMigrationMetadata> unidentifiedMigrations; Assert.Throws <IrreversibleMigrationException>(() => selector.GetMigrationsTo(2, m => true, out applicableMigrations, out unidentifiedMigrations)); }