dbmigrations-0.9: src/Database/Schema/Migrations/Backend.hs
module Database.Schema.Migrations.Backend
( Backend(..)
, rootMigrationName
)
where
import Database.Schema.Migrations.Migration
( Migration(..) )
-- |Backend instances should use this as the name of the migration
-- returned by getBootstrapMigration; this migration is special
-- because it cannot be reverted.
rootMigrationName :: String
rootMigrationName = "root"
-- |A Backend represents a database engine backend such as MySQL or
-- SQLite. A Backend supplies relatively low-level functions for
-- inspecting the backend's state, applying migrations, and reverting
-- migrations. A Backend also supplies the migration necessary to
-- "bootstrap" a backend so that it can track which migrations are
-- installed.
data Backend =
Backend { getBootstrapMigration :: IO Migration
-- ^ The migration necessary to bootstrap a database with
-- this connection interface. This might differ slightly
-- from one backend to another.
, isBootstrapped :: IO Bool
-- ^ Returns whether the backend has been bootstrapped. A
-- backend has been bootstrapped if is capable of tracking
-- which migrations have been installed; the "bootstrap
-- migration" provided by getBootstrapMigration should
-- suffice to bootstrap the backend.
, applyMigration :: Migration -> IO ()
-- ^ Apply the specified migration on the backend.
-- applyMigration does NOT assume control of the
-- transaction, since it expects the transaction to
-- (possibly) cover more than one applyMigration operation.
-- The caller is expected to call commit at the appropriate
-- time. If the application fails, the underlying SqlError
-- is raised and a manual rollback may be necessary; for
-- this, see withTransaction from HDBC.
, revertMigration :: Migration -> IO ()
-- ^ Revert the specified migration from the backend and
-- record this action in the table which tracks installed
-- migrations. revertMigration does NOT assume control of
-- the transaction, since it expects the transaction to
-- (possibly) cover more than one revertMigration operation.
-- The caller is expected to call commit at the appropriate
-- time. If the revert fails, the underlying SqlError is
-- raised and a manual rollback may be necessary; for this,
-- see withTransaction from HDBC. If the specified migration
-- does not supply a revert instruction, this has no effect
-- other than bookkeeping.
, getMigrations :: IO [String]
-- ^ Returns a list of installed migration names from the
-- backend.
, commitBackend :: IO ()
-- ^ Commit changes to the backend.
, rollbackBackend :: IO ()
-- ^ Revert changes made to the backend since the current
-- transaction began.
, disconnectBackend :: IO ()
-- ^ Disconnect from the backend.
}