public void AddMigration(Migration migration) { var migrationsAffected = new MigrationHistoryBuilder(); migrationsAffected.Append(migration); string[] rollbackSql = migration.GenerateRollbackSql(migrationsAffected, this); var mementos = migrationsAffected.MigrationHistory.GetMementos().ToList(); string[] deleteStatements = GenerateDeleteStatements(_databaseName, mementos); _sql = _sql.InsertRange(0, deleteStatements); _sql = _sql.InsertRange(0, rollbackSql); _ahead = _ahead.Subtract(migrationsAffected.MigrationHistory); }
public bool AddMigration(Migration migration) { if (_working.Contains(migration)) { return(false); } foreach (var prerequisite in migration.AllPrerequisites .Where(p => _difference.Contains(p))) { if (!AddMigration(prerequisite)) { return(false); } } _working = _working.Push(migration); var migrationsAffected = new MigrationHistoryBuilder(); migrationsAffected.Append(migration); string[] result = migration.GenerateSql(migrationsAffected, this); _sql = _sql.AddRange(result); var mementos = migrationsAffected.MigrationHistory.GetMementos().ToList(); _sql = _sql.Add(GenerateInsertStatement(_databaseName, mementos)); if (mementos.SelectMany(m => m.Prerequisites).SelectMany(p => p.Value).Any()) { _sql = _sql.Add(GeneratePrerequisiteInsertStatements(_databaseName, mementos)); } _difference = _difference.Subtract(migrationsAffected.MigrationHistory); _working = _working.Pop(); return(true); }