String generateUpgradeSource({List<String> changeList })

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