X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fhtsn-import.git;a=blobdiff_plain;f=src%2FTSN%2FDbImport.hs;h=066b5a0c36e7e8ec2a72dfc687224a03ff3b1b79;hp=4f4c8f2db4324743ebfbbc966544026b93372094;hb=cc0fa217e3d1b3505a34642a68950ef40d3b4007;hpb=62f0536b91460db0d6906cae71f29cb79813f9ae diff --git a/src/TSN/DbImport.hs b/src/TSN/DbImport.hs index 4f4c8f2..066b5a0 100644 --- a/src/TSN/DbImport.hs +++ b/src/TSN/DbImport.hs @@ -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 []