where
-- System imports
-import Control.Monad.IO.Class ( MonadIO )
-import Database.Groundhog ( runMigration )
+import Control.Monad ( forM_ )
+import Control.Monad.IO.Class ( MonadIO( liftIO ) )
+import qualified Data.Map as Map ( elems )
+import Database.Groundhog ( executeRaw )
+import Database.Groundhog.Core ( NamedMigrations )
+import Database.Groundhog.Generic (
+ createMigration,
+ getQueries,
+ mergeMigrations )
import Database.Groundhog.Core ( Migration, PersistBackend )
import Network.Services.TSN.Report ( report_info )
-- | A migration runner that will use our normal info reporting
--- mechanism.
+-- mechanism. The top-level code was stolen from 'runMigration' in
+-- "Data.Groundhog.Generic" and the 'execute_pretty' code was stolen
+-- from 'executeMigration'' in the same module.
--
run_dbmigrate :: (MonadIO m, PersistBackend m) => Migration m -> m ()
-run_dbmigrate =
- runMigration pretty_migration_logger
+run_dbmigrate migration = createMigration migration >>= execute_pretty
where
- pretty_migration_logger x =
- report_info ("Migration: " ++ x ++ ";")
+ execute_pretty :: (PersistBackend m, MonadIO m) => NamedMigrations -> m ()
+ execute_pretty m = do
+ let migs = getQueries False $ mergeMigrations $ Map.elems m
+ case migs of
+ Left errs -> fail $ unlines errs
+ Right qs -> forM_ qs $ \q -> do
+ liftIO $ report_info ("Migration: " ++ q ++ ";")
+ executeRaw False q []