Dart code to upgrade expectedColumn to actualColumn.
Source
String generateUpgradeSource({List<String> changeList}) {
if (actualColumn.isPrimaryKey != expectedColumn.isPrimaryKey) {
throw new SchemaException("Cannot change primary key of '${expectedColumn.table.name}'");
}
if (actualColumn.relatedColumnName != expectedColumn.relatedColumnName) {
throw new SchemaException(
"Cannot change ManagedRelationship inverse of '${expectedColumn.table.name}.${expectedColumn.name}'");
}
if (actualColumn.relatedTableName != expectedColumn.relatedTableName) {
throw new SchemaException("Cannot change type of '${expectedColumn.table.name}.${expectedColumn.name}'");
}
if (actualColumn.type != expectedColumn.type) {
throw new SchemaException("Cannot change type of '${expectedColumn.table.name}.${expectedColumn.name}'");
}
if (actualColumn.autoincrement != expectedColumn.autoincrement) {
throw new SchemaException(
"Cannot change autoincrement behavior of '${expectedColumn.table.name}.${expectedColumn.name}'");
}
var builder = new StringBuffer();
builder.writeln('database.alterColumn("${expectedColumn.table.name}", "${expectedColumn.name}", (c) {');
if (expectedColumn.isIndexed != actualColumn.isIndexed) {
builder.writeln("c.isIndexed = ${actualColumn.isIndexed};");
}
if (expectedColumn.isUnique != actualColumn.isUnique) {
builder.writeln("c.isUnique = ${actualColumn.isUnique};");
}
if (expectedColumn.defaultValue != actualColumn.defaultValue) {
builder.writeln("c.defaultValue = \"${actualColumn.defaultValue}\";");
}
if (expectedColumn.deleteRule != actualColumn.deleteRule) {
builder.writeln("c.deleteRule = ${actualColumn.deleteRule};");
}
if (expectedColumn.isNullable != actualColumn.isNullable) {
builder.writeln("c.isNullable = ${actualColumn.isNullable};");
}
if (expectedColumn.isNullable == true && actualColumn.isNullable == false && actualColumn.defaultValue == null) {
builder.writeln("}, unencodedInitialValue: <<set>>);");
} else {
builder.writeln("});");
}
return builder.toString();
}