String alterColumnString(String tableName, SchemaColumn previousColumn, SchemaColumn updatedColumn, String spaceOffset)

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