postgresql-tx-squeal-0.1.0.0: src/Database/PostgreSQL/Tx/Squeal.hs
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Database.PostgreSQL.Tx.Squeal
( module Database.PostgreSQL.Tx.Squeal
, module Database.PostgreSQL.Tx.Squeal.Internal.Reexport
) where
import Data.ByteString (ByteString)
import Database.PostgreSQL.Tx (Tx(TxEnv, tx), UnsafeTx(unsafeIOTx), TxM, unsafeRunTxM)
import Database.PostgreSQL.Tx.Squeal.Internal.Reexport
import qualified Database.PostgreSQL.LibPQ as LibPQ
import qualified Generics.SOP as SOP
import qualified Generics.SOP.Record as SOP
import qualified Squeal.PostgreSQL as Squeal
type SquealM db0 db1 = PQ db0 db1 TxM
unsafeSquealIOTx :: PQ db0 db1 IO a -> SquealM db0 db1 a
unsafeSquealIOTx = unsafeIOTx
unsafeSquealIOTx1
:: (x1 -> PQ db0 db1 IO a)
-> x1 -> SquealM db0 db1 a
unsafeSquealIOTx1 f x1 = unsafeSquealIOTx $ f x1
unsafeSquealIOTx2
:: (x1 -> x2 -> PQ db0 db1 IO a)
-> x1 -> x2 -> SquealM db0 db1 a
unsafeSquealIOTx2 f x1 x2 = unsafeSquealIOTx $ f x1 x2
unsafeSquealIOTx3
:: (x1 -> x2 -> x3 -> PQ db0 db1 IO a)
-> x1 -> x2 -> x3 -> SquealM db0 db1 a
unsafeSquealIOTx3 f x1 x2 x3 = unsafeSquealIOTx $ f x1 x2 x3
getRow :: LibPQ.Row -> Result y -> SquealM db db y
getRow = unsafeSquealIOTx2 Squeal.getRow
firstRow :: Result y -> SquealM db db (Maybe y)
firstRow = unsafeSquealIOTx1 Squeal.firstRow
getRows :: Result y -> SquealM db db [y]
getRows = unsafeSquealIOTx1 Squeal.getRows
nextRow :: LibPQ.Row -> Result y -> LibPQ.Row -> SquealM db db (Maybe (LibPQ.Row, y))
nextRow = unsafeSquealIOTx3 Squeal.nextRow
ntuples :: Result y -> SquealM db db LibPQ.Row
ntuples = unsafeSquealIOTx1 Squeal.ntuples
nfields :: Result y -> SquealM db db LibPQ.Column
nfields = unsafeSquealIOTx1 Squeal.nfields
resultStatus :: Result y -> SquealM db db ExecStatus
resultStatus = unsafeSquealIOTx1 Squeal.resultStatus
okResult :: K LibPQ.Result row -> SquealM db db ()
okResult = unsafeSquealIOTx1 Squeal.okResult
resultErrorMessage :: Result y -> SquealM db db (Maybe ByteString)
resultErrorMessage = unsafeSquealIOTx1 Squeal.resultErrorMessage
resultErrorCode :: Result y -> SquealM db db (Maybe ByteString)
resultErrorCode = unsafeSquealIOTx1 Squeal.resultErrorCode
executeParams :: Statement db x y -> x -> SquealM db db (Result y)
executeParams = unsafeSquealIOTx2 Squeal.executeParams
executeParams_ :: Statement db x () -> x -> SquealM db db ()
executeParams_ = unsafeSquealIOTx2 Squeal.executeParams_
execute :: Statement db () y -> SquealM db db (Result y)
execute = unsafeSquealIOTx1 Squeal.execute
execute_ :: Statement db () () -> SquealM db db ()
execute_ = unsafeSquealIOTx1 Squeal.execute_
executePrepared
:: (Traversable list)
=> Statement db x y -> list x -> SquealM db db (list (Result y))
executePrepared = unsafeSquealIOTx2 Squeal.executePrepared
executePrepared_
:: (Foldable list)
=> Statement db x () -> list x -> SquealM db db ()
executePrepared_ = unsafeSquealIOTx2 Squeal.executePrepared_
manipulateParams
:: ( GenericParams db params x xs
, Squeal.GenericRow row y ys
)
=> Manipulation '[] db params row
-> x
-> SquealM db db (Result y)
manipulateParams = unsafeSquealIOTx2 Squeal.manipulateParams
manipulateParams_
:: (GenericParams db params x xs)
=> Manipulation '[] db params '[] -> x -> SquealM db db ()
manipulateParams_ = unsafeSquealIOTx2 Squeal.manipulateParams_
manipulate
:: (Squeal.GenericRow row y ys)
=> Manipulation '[] db '[] row -> SquealM db db (Result y)
manipulate = unsafeSquealIOTx1 Squeal.manipulate
manipulate_
:: Manipulation '[] db '[] '[] -> SquealM db db ()
manipulate_ = unsafeSquealIOTx1 Squeal.manipulate_
runQueryParams
:: ( GenericParams db params x xs
, SOP.IsRecord y ys
, SOP.AllZip Squeal.FromField row ys
)
=> Squeal.Query '[] '[] db params row -> x -> SquealM db db (Result y)
runQueryParams = unsafeSquealIOTx2 Squeal.runQueryParams
runQuery
:: ( SOP.IsRecord y ys
, SOP.AllZip Squeal.FromField row ys
)
=> Squeal.Query '[] '[] db '[] row -> SquealM db db (Result y)
runQuery = unsafeSquealIOTx1 Squeal.runQuery
traversePrepared
:: ( GenericParams db params x xs
, Traversable list
, SOP.IsRecord y ys
, SOP.AllZip Squeal.FromField row ys
)
=> Manipulation '[] db params row
-> list x
-> SquealM db db (list (Result y))
traversePrepared = unsafeSquealIOTx2 Squeal.traversePrepared
forPrepared
:: ( GenericParams db params x xs
, Traversable list
, SOP.IsRecord y ys
, SOP.AllZip Squeal.FromField row ys
)
=> list x
-> Manipulation '[] db params row
-> SquealM db db (list (Result y))
forPrepared = unsafeSquealIOTx2 Squeal.forPrepared
traversePrepared_
:: ( GenericParams db params x xs
, Foldable list
)
=> Manipulation '[] db params '[]
-> list x
-> SquealM db db ()
traversePrepared_ = unsafeSquealIOTx2 Squeal.traversePrepared_
forPrepared_
:: ( GenericParams db params x xs
, Foldable list
)
=> list x
-> Manipulation '[] db params '[]
-> SquealM db db ()
forPrepared_ = unsafeSquealIOTx2 Squeal.forPrepared_
transactionally :: TransactionMode -> Connection -> TxM a -> IO a
transactionally m = unsafeRunSquealTransaction (Squeal.transactionally m)
transactionally_ :: Connection -> TxM a -> IO a
transactionally_ = unsafeRunSquealTransaction Squeal.transactionally_
transactionallyRetry :: TransactionMode -> Connection -> TxM a -> IO a
transactionallyRetry m = unsafeRunSquealTransaction (Squeal.transactionallyRetry m)
ephemerally :: TransactionMode -> Connection -> TxM a -> IO a
ephemerally m = unsafeRunSquealTransaction (Squeal.ephemerally m)
ephemerally_ :: Connection -> TxM a -> IO a
ephemerally_ = unsafeRunSquealTransaction Squeal.ephemerally_
unsafeRunSquealTransaction
:: (PQ db0 db1 IO a -> PQ db0 db1 IO a)
-> Connection
-> TxM a
-> IO a
unsafeRunSquealTransaction f conn x =
flip Squeal.evalPQ (Squeal.K conn)
$ f
$ PQ \_ -> Squeal.K <$> unsafeRunTxM x
instance Tx (SquealM db0 db1) where
type TxEnv (SquealM db0 db1) = Connection
tx conn x = evalPQ x (Squeal.K conn)
instance (UnsafeTx io t) => UnsafeTx (PQ db0 db1 io) (PQ db0 db1 t) where
unsafeIOTx x = PQ \kConn -> unsafeIOTx (Squeal.unPQ x kConn)