module Hasql.CursorTransaction.Private.Transactions where

import Hasql.CursorTransaction.Private.Prelude
import qualified Hasql.CursorTransaction.Private.Specs as B
import qualified Hasql.CursorTransaction.Private.Statements as A
import qualified Hasql.Decoders as E
import qualified Hasql.Encoders as F
import qualified Hasql.Transaction as C

declareCursor :: ByteString -> ByteString -> F.Params params -> params -> C.Transaction ()
declareCursor :: forall params.
ByteString
-> ByteString -> Params params -> params -> Transaction ()
declareCursor ByteString
cursorName ByteString
template Params params
paramsEncoder params
params =
  params -> Statement params () -> Transaction ()
forall a b. a -> Statement a b -> Transaction b
C.statement params
params (ByteString -> ByteString -> Params params -> Statement params ()
forall a. ByteString -> ByteString -> Params a -> Statement a ()
A.declareCursor ByteString
cursorName ByteString
template Params params
paramsEncoder)

closeCursor :: ByteString -> C.Transaction ()
closeCursor :: ByteString -> Transaction ()
closeCursor ByteString
cursorName =
  () -> Statement () () -> Transaction ()
forall a b. a -> Statement a b -> Transaction b
C.statement () (ByteString -> Statement () ()
A.closeCursor ByteString
cursorName)

fetchFromCursor :: ByteString -> B.BatchSize -> E.Result result -> C.Transaction result
fetchFromCursor :: forall result.
ByteString -> BatchSize -> Result result -> Transaction result
fetchFromCursor ByteString
cursorName BatchSize
batchSize Result result
decoder =
  () -> Statement () result -> Transaction result
forall a b. a -> Statement a b -> Transaction b
C.statement () (ByteString -> BatchSize -> Result result -> Statement () result
forall result.
ByteString -> BatchSize -> Result result -> Statement () result
A.fetchFromCursor ByteString
cursorName BatchSize
batchSize Result result
decoder)