Exemplo n.º 1
0
        public SchemaSpecification UseSchema(string schemaName)
        {
            var migration = new UseSchemaMigration(_databaseName, schemaName, Prerequisites);

            MigrationHistoryBuilder.Append(migration);
            migration.AddToParent();
            return(new SchemaSpecification(migration, MigrationHistoryBuilder));
        }
Exemplo n.º 2
0
        public CustomSqlSpecification Execute(string up, string down = null)
        {
            var migration = new CustomSqlMigration(_databaseName, up, down, Prerequisites);

            MigrationHistoryBuilder.Append(migration);
            migration.AddToParent();
            return(new CustomSqlSpecification(migration, MigrationHistoryBuilder));
        }
        public TableSpecification CreateTable(string tableName)
        {
            var migration = new CreateTableMigration(_migration, tableName, Prerequisites);

            MigrationHistoryBuilder.Append(migration);
            migration.AddToParent();
            return(new TableSpecification(migration, MigrationHistoryBuilder));
        }
Exemplo n.º 4
0
        public IndexSpecification CreateIndex(params ColumnSpecification[] columns)
        {
            var childMigration = new CreateIndexMigration(
                _migration,
                columns.Select(c => c.Migration),
                Prerequisites);

            MigrationHistoryBuilder.Append(childMigration);
            childMigration.AddToParent();
            return(new IndexSpecification(childMigration, MigrationHistoryBuilder));
        }
Exemplo n.º 5
0
        public ForeignKeySpecification CreateForeignKey(PrimaryKeySpecification referencing, bool cascadeDelete = false, bool cascadeUpdate = false)
        {
            var childMigration = new CreateForeignKeyMigration(
                _migration,
                referencing.Migration,
                cascadeDelete,
                cascadeUpdate,
                Prerequisites);

            MigrationHistoryBuilder.Append(childMigration);
            childMigration.AddToParent();
            return(new ForeignKeySpecification(MigrationHistoryBuilder));
        }
Exemplo n.º 6
0
        private ColumnSpecification CreateColumn(string columnName, string typeDescriptor, bool nullable)
        {
            var childMigration = new CreateColumnMigration(
                _migration,
                columnName,
                typeDescriptor,
                nullable,
                Prerequisites);

            MigrationHistoryBuilder.Append(childMigration);
            childMigration.AddToParent();
            return(new ColumnSpecification(childMigration, MigrationHistoryBuilder));
        }
Exemplo n.º 7
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);
        }