Ejemplo n.º 1
0
        public override void WriteUpdate(DdlRules rules, TextWriter writer)
        {
            if (Difference == SchemaPatchDifference.Invalid)
            {
                throw new InvalidOperationException($"TableDelta for {Expected.Identifier} is invalid");
            }

            if (Difference == SchemaPatchDifference.Create)
            {
                SchemaObject.WriteCreateStatement(rules, writer);
                return;
            }

            // Extra indexes
            foreach (var extra in Indexes.Extras)
            {
                writer.WriteDropIndex(Expected, extra);
            }

            // Different indexes
            foreach (var change in Indexes.Different)
            {
                writer.WriteDropIndex(Expected, change.Actual);
            }

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


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

            writeForeignKeyUpdates(writer);

            // Missing indexes
            foreach (var indexDefinition in Indexes.Missing)
            {
                writer.WriteLine(indexDefinition.ToDDL(Expected));
            }

            // Different indexes
            foreach (var change in Indexes.Different)
            {
                writer.WriteLine(change.Expected.ToDDL(Expected));
            }


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


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

            case SchemaPatchDifference.Create:
                writer.WriteLine($"alter table {Expected.Identifier} add {Expected.PrimaryKeyDeclaration()};");
                break;
            }
        }