toPgSql method

String toPgSql({
  1. required List<DatabaseMigrationVersion> installedModules,
  2. 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;
}