String
sourceForSchemaUpgrade(Schema existingSchema, Schema newSchema, int version, { List<String> changeList })
Source
static String sourceForSchemaUpgrade(
Schema existingSchema, Schema newSchema, int version, {List<String> changeList}) {
var builder = new StringBuffer();
builder.writeln("import 'package:aqueduct/aqueduct.dart';");
builder.writeln("import 'dart:async';");
builder.writeln("");
builder.writeln("class Migration$version extends Migration {");
builder.writeln(" Future upgrade() async {");
var diff = existingSchema.differenceFrom(newSchema);
// Grab tables from dependencyOrderedTables to reuse ordering behavior
newSchema.dependencyOrderedTables
.where((t) => diff.tableNamesToAdd.contains(t.name))
.forEach((t) {
changeList?.add("Adding table '${t.name}'");
builder.writeln(MigrationBuilder.createTableString(t, " "));
});
existingSchema.dependencyOrderedTables.reversed
.where((t) => diff.tableNamesToDelete.contains(t.name))
.forEach((t) {
changeList?.add("Deleting table '${t.name}'");
builder.writeln(MigrationBuilder.deleteTableString(t.name, " "));
});
diff.differingTables
.where((tableDiff) => tableDiff.expectedTable != null && tableDiff.actualTable != null)
.forEach((tableDiff) {
tableDiff.columnNamesToAdd
.forEach((columnName) {
changeList?.add("Adding column '$columnName' to table '${tableDiff.actualTable.name}'");
builder.writeln(MigrationBuilder.addColumnString(tableDiff.actualTable.name, tableDiff.actualTable.columnForName(columnName), " "));
});
tableDiff.columnNamesToDelete
.forEach((columnName) {
changeList?.add("Deleting column '$columnName' from table '${tableDiff.actualTable.name}'");
builder.writeln(MigrationBuilder.deleteColumnString(tableDiff.actualTable.name, columnName, " "));
});
tableDiff.differingColumns
.where((columnDiff) => columnDiff.expectedColumn != null && columnDiff.actualColumn != null)
.forEach((columnDiff) {
changeList?.add("Modifying column '${columnDiff.actualColumn.name}' in table '${tableDiff.actualTable.name}'");
builder.writeln(MigrationBuilder.alterColumnString(tableDiff.actualTable.name, columnDiff.expectedColumn, columnDiff.actualColumn, " "));
});
});
builder.writeln(" }");
builder.writeln("");
builder.writeln(" Future downgrade() async {");
builder.writeln(" }");
builder.writeln(" Future seed() async {");
builder.writeln(" }");
builder.writeln("}");
return builder.toString();
}