module Hasql.Session
  ( Session.Session,
    Session.pipeline,
    script,
    statement,
    Session.onLibpqConnection,
  )
where

import Hasql.Engine.Contexts.Session qualified as Session
import Hasql.Engine.Statement qualified as Statement
import Hasql.Platform.Prelude

-- |
-- Possibly a multi-statement query,
-- which however cannot be parameterized or prepared,
-- nor can any results of it be collected.
script :: Text -> Session.Session ()
script :: Text -> Session ()
script Text
sql = ByteString -> Session ()
Session.script (Text -> ByteString
encodeUtf8 Text
sql)

-- |
-- Execute a statement by providing parameters to it.
statement :: params -> Statement.Statement params result -> Session.Session result
statement :: forall params result.
params -> Statement params result -> Session result
statement params
params (Statement.Statement Text
sql Params params
encoder Result result
decoder Bool
preparable) =
  ByteString
-> Params params
-> Result result
-> Bool
-> params
-> Session result
forall params result.
ByteString
-> Params params
-> Result result
-> Bool
-> params
-> Session result
Session.statement
    (Text -> ByteString
encodeUtf8 Text
sql)
    Params params
encoder
    Result result
decoder
    Bool
preparable
    params
params