import Control.Monad ( forM_ )
import Data.Time ( UTCTime )
import Data.Tuple.Curry ( uncurryN )
-import qualified Data.Vector.HFixed as H ( HVector, cons, convert, tail )
-import qualified Data.Vector.HFixed.Cont as H (ContVec)
+import qualified Data.Vector.HFixed as H (
+ HVector,
+ asCVec,
+ cons,
+ convert,
+ tail )
import Database.Groundhog (
DefaultKey,
countAll,
deleteAll,
- migrate,
- runMigration,
- silentMigrationLogger )
-import Database.Groundhog.Generic ( runDbConn )
+ migrate )
+import Database.Groundhog.Generic ( runDbConn, runMigrationSilent )
import Database.Groundhog.Sqlite ( withSqliteConn )
import Database.Groundhog.TH (
groundhog,
instance FromXmlFk InjuriesDetailListingPlayerListingXml where
-- | To construct a 'InjuriesDetailListingPlayerListing' from a
-- 'InjuriesDetailListingPlayerListingXml' we need to supply a
- -- foreign key to an 'InjuriesDetailListing'.
+ -- foreign key to an 'InjuriesDetailListing' after dropping the
+ -- '_xml_player_team_id'.
--
- from_xml_fk fk = (H.cons fk) . asCont . H.tail
- where
- -- Should be in the library soon.
- asCont :: H.ContVec a -> H.ContVec a
- asCont = id
+ -- The 'H.asCVec' trick allows type inference to proceed in the
+ -- middle of two different magics.
+ --
+ from_xml_fk fk = (H.cons fk) . H.asCVec . H.tail
-- | This lets us insert the XML representation
let b = undefined :: InjuriesDetailListing
let c = undefined :: InjuriesDetailListingPlayerListing
actual <- withSqliteConn ":memory:" $ runDbConn $ do
- runMigration silentMigrationLogger $ do
+ runMigrationSilent $ do
migrate a
migrate b
migrate c