packages feed

pgmq-migration-0.1.0.0: src/Pgmq/Migration/Transactions.hs

-- | Transaction-level migration operations
module Pgmq.Migration.Transactions
  ( runMigrationWithSearchPath,
    getMigrationsTransaction,
  )
where

import Control.Monad (void)
import Data.Text (Text)
import Hasql.Migration (MigrationCommand, MigrationError, SchemaMigration)
import Hasql.Migration qualified as Migration
import Hasql.Transaction (Transaction)
import Hasql.Transaction qualified as Transaction
import Pgmq.Migration.Statements qualified as Statements

-- | Run a migration command, preserving and restoring the search path
runMigrationWithSearchPath :: Text -> MigrationCommand -> Transaction (Maybe MigrationError)
runMigrationWithSearchPath searchPath cmd = do
  -- Set the search path for this transaction
  void $ Transaction.statement searchPath Statements.setSearchPath
  -- Run the migration
  Migration.runMigration cmd

-- | Get all applied migrations
getMigrationsTransaction :: Transaction [SchemaMigration]
getMigrationsTransaction = Migration.getMigrations