Ejemplo n.º 1
0
 public virtual void WriteRollback(DdlRules rules, TextWriter writer)
 {
     Expected.WriteDropStatement(rules, writer);
     Actual.WriteCreateStatement(rules, writer);
 }
Ejemplo n.º 2
0
        public override void WriteRollback(DdlRules rules, TextWriter writer)
        {
            if (Actual == null)
            {
                Expected.WriteDropStatement(rules, writer);
                return;
            }

            foreach (var foreignKey in ForeignKeys.Missing)
            {
                foreignKey.WriteDropStatement(Expected, writer);
            }

            foreach (var change in ForeignKeys.Different)
            {
                change.Expected.WriteDropStatement(Expected, writer);
            }

            // Extra columns
            foreach (var column in Columns.Extras)
            {
                writer.WriteLine(column.AddColumnSql(Expected));
            }

            // Different columns
            foreach (var change1 in Columns.Different)
            {
                writer.WriteLine(change1.Actual.AlterColumnTypeSql(Actual, change1.Expected));
            }

            foreach (var change in ForeignKeys.Different)
            {
                change.Actual.WriteAddStatement(Expected, writer);
            }

            rollbackIndexes(writer);

            // Missing columns
            foreach (var column in Columns.Missing)
            {
                writer.WriteLine(column.DropColumnSql(Expected));
            }

            foreach (var foreignKey in ForeignKeys.Extras)
            {
                foreignKey.WriteAddStatement(Expected, writer);
            }



            switch (PrimaryKeyDifference)
            {
            case SchemaPatchDifference.Invalid:
            case SchemaPatchDifference.Update:
                writer.WriteLine($"alter table {Expected.Identifier} drop constraint if exists {Expected.PrimaryKeyName};");
                writer.WriteLine($"alter table {Expected.Identifier} add {Actual.PrimaryKeyDeclaration()};");
                break;

            case SchemaPatchDifference.Create:
                writer.WriteLine($"alter table {Expected.Identifier} drop constraint if exists {Expected.PrimaryKeyName};");
                break;
            }
        }