toPgSql method
String
toPgSql(
{ - required List<DatabaseMigrationVersion> installedModules,
- required List<DatabaseMigrationVersion> removedModules,
})
Implementation
String toPgSql({
required List<DatabaseMigrationVersion> installedModules,
required List<DatabaseMigrationVersion> removedModules,
}) {
var out = '';
// Start transaction
out += 'BEGIN;\n';
out += '\n';
// Must be declared before any table creation.
if (actions.any((e) =>
(e.createTable != null &&
e.createTable!.columns.any((c) => c.isVectorColumn)) ||
(e.alterTable != null &&
e.alterTable!.addColumns.any((c) => c.isVectorColumn)))) {
out += _sqlCreateVectorExtensionIfAvailable();
out += '\n';
}
// Must be declared at the beginning for the function to be available.
// Only add the function if it is used by any column on the migration.
if (actions.any((e) =>
(e.createTable != null &&
e.createTable!.columns
.any((c) => c.columnDefault == pgsqlFunctionRandomUuidV7)) ||
(e.alterTable != null &&
(e.alterTable!.addColumns
.any((c) => c.columnDefault == pgsqlFunctionRandomUuidV7) ||
e.alterTable!.modifyColumns
.any((c) => c.newDefault == pgsqlFunctionRandomUuidV7))))) {
out += _sqlUuidGenerateV7FunctionDeclaration();
out += '\n';
}
var foreignKeyActions = '';
for (var action in actions) {
out += action.toPgSql();
foreignKeyActions += action.foreignRelationToSql();
}
// Append all foreign key operations at the end
out += foreignKeyActions;
if (installedModules.isNotEmpty) {
out += '\n';
}
for (var module in installedModules) {
out += _sqlStoreMigrationVersion(
module: module.module,
version: module.version,
);
}
if (removedModules.isNotEmpty) {
out += '\n';
out += _sqlRemoveMigrationVersion(removedModules);
}
out += '\n';
out += 'COMMIT;\n';
return out;
}