Пример #1
0
        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);
        }
 public ForwardGenerator(string databaseName, MigrationDelta difference)
 {
     _databaseName = databaseName;
     _difference   = difference;
 }
Пример #4
0
 public RollbackGenerator(string databaseName, MigrationDelta ahead)
 {
     _databaseName = databaseName;
     _ahead        = ahead;
 }