toPgSql method
String
toPgSql(
- 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;
}