{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
module Opaleye.RunSelect
(module Opaleye.RunSelect,
IRQ.Cursor,
IRQ.FromFields,
IRQ.FromField,
IRQ.DefaultFromField,
IRQ.defaultFromField,
IRQ.fromPGSFromField,
IRQ.fromPGSFieldParser) where
import qualified Data.Profunctor as P
import qualified Database.PostgreSQL.Simple as PGS
import qualified Opaleye.Column as C
import qualified Opaleye.Select as S
import qualified Opaleye.RunQuery as RQ
import qualified Opaleye.TypeFamilies as TF
import Opaleye.Internal.RunQuery (FromFields)
import qualified Opaleye.Internal.RunQuery as IRQ
import qualified Data.Profunctor.Product.Default as D
runSelect :: D.Default FromFields fields haskells
=> PGS.Connection
-> S.Select fields
-> IO [haskells]
runSelect = RQ.runQuery
runSelectTF :: D.Default FromFields (rec TF.O) (rec TF.H)
=> PGS.Connection
-> S.Select (rec TF.O)
-> IO [rec TF.H]
runSelectTF = RQ.runQuery
runSelectFold
:: D.Default FromFields fields haskells
=> PGS.Connection
-> S.Select fields
-> b
-> (b -> haskells -> IO b)
-> IO b
runSelectFold = RQ.runQueryFold
declareCursor
:: D.Default FromFields fields haskells
=> PGS.Connection
-> S.Select fields
-> IO (IRQ.Cursor haskells)
declareCursor = RQ.declareCursor
closeCursor :: IRQ.Cursor fields -> IO ()
closeCursor = RQ.closeCursor
foldForward
:: IRQ.Cursor haskells
-> Int
-> (a -> haskells -> IO a)
-> a
-> IO (Either a a)
foldForward = RQ.foldForward
unsafeFromField :: (b -> b')
-> IRQ.FromField sqlType b
-> IRQ.FromField sqlType' b'
unsafeFromField haskellF qrc = IRQ.QueryRunnerColumn (P.lmap colF u)
(fmapFP haskellF fp)
where IRQ.QueryRunnerColumn u fp = qrc
fmapFP = fmap . fmap . fmap
colF = C.unsafeCoerceColumn
runSelectExplicit :: FromFields fields haskells
-> PGS.Connection
-> S.Select fields
-> IO [haskells]
runSelectExplicit = RQ.runQueryExplicit
runSelectFoldExplicit
:: FromFields fields haskells
-> PGS.Connection
-> S.Select fields
-> b
-> (b -> haskells -> IO b)
-> IO b
runSelectFoldExplicit = RQ.runQueryFoldExplicit
declareCursorExplicit
:: FromFields fields haskells
-> PGS.Connection
-> S.Select fields
-> IO (IRQ.Cursor haskells)
declareCursorExplicit = RQ.declareCursorExplicit