]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Rewrite TSN.DbImport.run_dbmigrate for groundhog-0.7.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 13 Jan 2015 07:24:44 +0000 (02:24 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 13 Jan 2015 07:24:44 +0000 (02:24 -0500)
src/TSN/DbImport.hs

index 4f4c8f2db4324743ebfbbc966544026b93372094..066b5a0c36e7e8ec2a72dfc687224a03ff3b1b79 100644 (file)
@@ -23,8 +23,15 @@ module TSN.DbImport (
 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 )
 
@@ -56,11 +63,18 @@ class DbImport a where
 
 
 -- | 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 []