Source
static String alterColumnString(String tableName, SchemaColumn previousColumn, SchemaColumn updatedColumn, String spaceOffset) {
if (updatedColumn.isPrimaryKey != previousColumn.isPrimaryKey) {
throw new SchemaException("Cannot change primary key of '$tableName'");
}
if (updatedColumn.relatedColumnName != previousColumn.relatedColumnName) {
throw new SchemaException("Cannot change ManagedRelationship inverse of '$tableName.${previousColumn.name}'");
}
if (updatedColumn.relatedTableName != previousColumn.relatedTableName) {
throw new SchemaException("Cannot change type of '$tableName.${previousColumn.name}'");
}
if (updatedColumn.type != previousColumn.type) {
throw new SchemaException("Cannot change type of '$tableName.${previousColumn.name}'");
}
if (updatedColumn.autoincrement != previousColumn.autoincrement) {
throw new SchemaException("Cannot change autoincrement behavior of '$tableName.${previousColumn.name}'");
}
var builder = new StringBuffer();
builder.writeln(
'${spaceOffset}database.alterColumn("$tableName", "${previousColumn.name}", (c) {');
if (previousColumn.isIndexed != updatedColumn.isIndexed) {
builder.writeln("$spaceOffset c.isIndexed = ${updatedColumn.isIndexed};");
}
if (previousColumn.isUnique != updatedColumn.isUnique) {
builder.writeln("$spaceOffset c.isUnique = ${updatedColumn.isUnique};");
}
if (previousColumn.defaultValue != updatedColumn.defaultValue) {
builder.writeln("$spaceOffset c.defaultValue = \"${updatedColumn.defaultValue}\";");
}
if (previousColumn.deleteRule != updatedColumn.deleteRule) {
builder.writeln("$spaceOffset c.deleteRule = ${updatedColumn.deleteRule};");
}
if (previousColumn.isNullable != updatedColumn.isNullable) {
builder.writeln("$spaceOffset c.isNullable = ${updatedColumn.isNullable};");
}
if(previousColumn.isNullable == true && updatedColumn.isNullable == false && updatedColumn.defaultValue == null) {
builder.writeln("$spaceOffset}, unencodedInitialValue: <<set>>);");
} else {
builder.writeln("$spaceOffset});");
}
return builder.toString();
}