toPgSql method

String toPgSql({
  1. required DatabaseDefinition databaseDefinition,
  2. required List<DatabaseMigrationVersionModel> installedModules,
  3. required List<DatabaseMigrationVersionModel> removedModules,
})

Implementation

String toPgSql({
  required DatabaseDefinition databaseDefinition,
  required List<DatabaseMigrationVersionModel> installedModules,
  required List<DatabaseMigrationVersionModel> 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 ||
                  c.columnDefault == defaultUuidValueRandomV7,
            )) ||
        (e.alterTable != null &&
            (e.alterTable!.addColumns.any(
                  (c) =>
                      c.columnDefault == pgsqlFunctionRandomUuidV7 ||
                      c.columnDefault == defaultUuidValueRandomV7,
                ) ||
                e.alterTable!.modifyColumns.any(
                  (c) => c.newDefault == pgsqlFunctionRandomUuidV7,
                ))),
  )) {
    out += _sqlUuidGenerateV7FunctionDeclaration();
    out += '\n';
  }

  var foreignKeyActions = '';
  for (var action in actions) {
    out += action.toPgSql(databaseDefinition);
    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;
}