{-| Module : Database.Persist.Migration Maintainer : Brandon Chinn Stability : experimental Portability : portable Defines a migration framework for the persistent library. -} module Database.Persist.Migration ( hasMigration , checkMigration -- * Re-exports , module Database.Persist.Migration.Backend , module Database.Persist.Migration.Core , module Database.Persist.Migration.Operation , module Database.Persist.Migration.Operation.Types , module Database.Persist.Migration.Utils.Sql , PersistValue(..) , SqlType(..) , rawSql ) where import Control.Monad (unless) import Control.Monad.IO.Class (MonadIO) import qualified Data.Text as Text import Database.Persist.Migration.Backend import Database.Persist.Migration.Core hiding (getMigration, runMigration) import Database.Persist.Migration.Operation import Database.Persist.Migration.Operation.Types import Database.Persist.Migration.Utils.Sql import Database.Persist.Sql (PersistValue(..), SqlType(..), rawSql) import qualified Database.Persist.Sql as Persistent -- | True if the persistent library detects more migrations unaccounted for. hasMigration :: MonadIO m => Persistent.Migration -> Persistent.SqlPersistT m Bool hasMigration = fmap (not . null) . Persistent.showMigration -- | Fails if the persistent library detects more migrations unaccounted for. checkMigration :: MonadIO m => Persistent.Migration -> Persistent.SqlPersistT m () checkMigration migration = do migrationText <- Persistent.showMigration migration unless (null migrationText) $ error $ unlines $ "More migrations detected:" : bullets migrationText where bullets = map ((" * " ++ ) . Text.unpack)