module Control.Eff.MySQL
( query
, query_
, execute
, execute_
, executeMany
, insertID
, autocommit
, commit
, rollback
, formatMany
, formatQuery
, runMySQL
, runMySQLWithConnection
, M.ConnectInfo(..)
, M.In(..)
, M.Only(..)
, M.Query
, M.QueryParams(..)
, M.QueryResults(..)
, M.defaultConnectInfo
,
) where
import Control.Eff
import Control.Eff.Lift
import Control.Eff.MySQL.Helper
import Control.Eff.Reader.Strict
import Data.ByteString (ByteString)
import Data.Int (Int64)
import Data.Typeable (Typeable)
import Data.Word (Word64)
import qualified Database.MySQL.Simple as M
import qualified Database.MySQL.Simple.QueryParams as M
import qualified Database.MySQL.Simple.QueryResults as M
type MySQL = Reader M.Connection
deriving instance Typeable M.Connection
runMySQL
:: (SetMember Lift (Lift IO) r)
=> Eff (MySQL :> r) a -> M.ConnectInfo -> Eff r a
runMySQL e c = do
conn <- lift $ M.connect c
let res = runMySQLWithConnection e conn
lift $ M.close conn
res
runMySQLWithConnection :: Eff (MySQL :> r) a -> M.Connection -> Eff r a
runMySQLWithConnection = runReader
query
:: ( SetMember Lift (Lift IO) r, Member MySQL r
, M.QueryResults a, M.QueryParams p)
=> M.Query -> p -> Eff r [a]
query = askLift2 M.query
query_
:: (SetMember Lift (Lift IO) r, Member MySQL r, M.QueryResults a)
=> M.Query -> Eff r [a]
query_ = askLift M.query_
execute
:: (SetMember Lift (Lift IO) r, Member MySQL r, M.QueryParams p)
=> M.Query -> p -> Eff r Int64
execute = askLift2 M.execute
execute_
:: (SetMember Lift (Lift IO) r, Member MySQL r)
=> M.Query -> Eff r Int64
execute_ = askLift M.execute_
executeMany
:: (SetMember Lift (Lift IO) r, Member MySQL r, M.QueryParams p)
=> M.Query -> [p] -> Eff r Int64
executeMany = askLift2 M.executeMany
insertID :: (SetMember Lift (Lift IO) r, Member MySQL r) => Eff r Word64
insertID = askLift0 M.insertID
autocommit :: (SetMember Lift (Lift IO ) r, Member MySQL r) => Bool -> Eff r ()
autocommit = askLift M.autocommit
commit :: (SetMember Lift (Lift IO ) r, Member MySQL r) => Eff r ()
commit = askLift0 M.commit
rollback :: (SetMember Lift (Lift IO ) r, Member MySQL r) => Eff r ()
rollback = askLift0 M.rollback
formatMany
:: (SetMember Lift (Lift IO) r, Member MySQL r, M.QueryParams p)
=> M.Query -> [p] -> Eff r ByteString
formatMany = askLift2 M.formatMany
formatQuery
:: (SetMember Lift (Lift IO) r, Member MySQL r, M.QueryParams p)
=> M.Query -> p -> Eff r ByteString
formatQuery = askLift2 M.formatQuery