beam-automigrate-0.1.3.0: util/Database/Beam/AutoMigrate/TestUtils.hs
{-# Language OverloadedStrings #-}
module Database.Beam.AutoMigrate.TestUtils where
import Control.Exception (bracket)
import Data.Pool (withResource)
import Data.Typeable
import Database.PostgreSQL.Simple as Pg
import Gargoyle.PostgreSQL.Connect (withDb)
import Test.Tasty.Options
data ConnMethod = ConnMethod_Direct Pg.ConnectInfo | ConnMethod_Gargoyle String
deriving (Typeable)
instance IsOption ConnMethod where
defaultValue = ConnMethod_Direct Pg.defaultConnectInfo
parseValue x = if null x then Nothing else Just $ ConnMethod_Gargoyle x
optionName = "with-gargoyle"
optionHelp = "Whether to use a gargoyle database. Supply the database name."
-- | Connect to a database using gargoyle or connect directly to an already-running
-- postgresql instance
withConnection :: ConnMethod -> (Pg.Connection -> IO a) -> IO a
withConnection c f = case c of
ConnMethod_Gargoyle db -> withDb db $ \pool -> withResource pool $ f
ConnMethod_Direct connInfo -> bracket (Pg.connect connInfo) Pg.close f