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; } }