hasql-pool-1.5.0.0: src/integration-tests/Helpers/Sessions.hs
module Helpers.Sessions
( selectOne,
badQuery,
closeConn,
setSetting,
getSetting,
countConnections,
sleep,
)
where
import Data.Tuple.All
import Hasql.Decoders qualified as Decoders
import Hasql.Encoders qualified as Encoders
import Hasql.Session qualified as Session
import Hasql.Statement qualified as Statement
import Pqi qualified
import Prelude
selectOne :: Session.Session Int64
selectOne =
Session.statement () statement
where
statement = Statement.preparable "SELECT 1::int8" Encoders.noParams decoder
decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8))
badQuery :: Session.Session ()
badQuery =
Session.statement () statement
where
statement =
Statement.preparable "zzz" Encoders.noParams Decoders.noResult
closeConn :: Session.Session ()
closeConn =
Session.onLibpqConnection \conn -> do
Pqi.finish conn
pure (Right (), conn)
setSetting :: Text -> Text -> Session.Session ()
setSetting name value = do
Session.statement (name, value) statement
where
statement =
Statement.preparable "SELECT set_config($1, $2, false)" encoder Decoders.noResult
encoder =
mconcat
[ sel1 >$< Encoders.param (Encoders.nonNullable Encoders.text),
sel2 >$< Encoders.param (Encoders.nonNullable Encoders.text)
]
getSetting :: Text -> Session.Session (Maybe Text)
getSetting name = do
Session.statement name statement
where
statement = Statement.preparable "SELECT current_setting($1, true)" encoder decoder
encoder = Encoders.param (Encoders.nonNullable Encoders.text)
decoder = Decoders.singleRow (Decoders.column (Decoders.nullable Decoders.text))
countConnections :: Text -> Session.Session Int64
countConnections appName = do
Session.statement appName statement
where
statement = Statement.preparable "SELECT count(*) FROM pg_stat_activity WHERE application_name = $1" encoder decoder
encoder = Encoders.param (Encoders.nonNullable Encoders.text)
decoder = Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.int8))
sleep :: Double -> Session.Session ()
sleep seconds =
Session.statement seconds statement
where
statement = Statement.preparable "SELECT pg_sleep($1)" encoder Decoders.noResult
encoder = Encoders.param (Encoders.nonNullable Encoders.float8)