toPgSql method

String toPgSql(
  1. List<ColumnDefinition> targetColumns
)

Implementation

String toPgSql(List<ColumnDefinition> targetColumns) {
  var out = '';

  // Drop indexes
  for (var deleteIndex in deleteIndexes) {
    out += 'DROP INDEX "$deleteIndex";\n';
  }

  // Drop foreign keys. Uses IF EXISTS to avoid a hard failure for constraints
  // of dropped tables or columns.
  for (var deleteKey in deleteForeignKeys) {
    out += 'ALTER TABLE "$name" DROP CONSTRAINT IF EXISTS "$deleteKey";\n';
  }

  // Drop columns
  for (var deleteColumn in deleteColumns) {
    out += 'ALTER TABLE "$name" DROP COLUMN "$deleteColumn";\n';
  }

  // Rename columns (must happen before add/modify to avoid naming conflicts)
  for (var modifiedColumn in modifyColumns) {
    var fromName = modifiedColumn.columnName;
    var toName = modifiedColumn.newColumnName;
    if (toName != null && toName != fromName) {
      out += 'ALTER TABLE "$name" RENAME COLUMN "$fromName" TO "$toName";\n';
    }
  }

  // Add columns
  for (var addColumn in addColumns) {
    out +=
        'ALTER TABLE "$name" ADD COLUMN ${addColumn.toPgSqlFragment(tableName: name)};\n';
  }

  // Modify columns
  for (var alterColumn in modifyColumns) {
    out += alterColumn.toPgSql(
      tableName: name,
      columnDefinition: targetColumns.firstWhere(
        (c) => c.name == alterColumn.physicalName,
      ),
    );
  }

  // Add indexes
  for (var addIndex in addIndexes) {
    out += addIndex.toPgSql(tableName: name);
  }

  return out;
}