hasql-class-0.0.0.0: src/Hasql/Class.hs
module Hasql.Class
(
-- * Query helpers
--
-- | Utility functions for `Query`s. The @ByteString@ argument is the SQL, and
-- the @Bool@ argument is whether to use prepared statements.
stmtList
, stmtUnit
, stmtVector
, stmtMaybe
-- * Classes
, Encodable(..)
, Decodable(..)
) where
import Hasql.Class.Internal.Encodable
import Hasql.Class.Internal.Decodable
import Data.Vector (Vector)
import Data.ByteString (ByteString)
import Hasql.Query
import Hasql.Decoders (rowsList, unit, maybeRow, rowsVector)
-- | Make a `Query` that returns a `Vector` of values
--
-- Faster than `stmtList`.
stmtVector :: (Encodable a, Decodable b) => ByteString -> Bool -> Query a (Vector b)
stmtVector query isPrepared = statement query encode (rowsVector decode) isPrepared
-- | Make a `Query` that @Maybe@ returns a value
stmtMaybe :: (Encodable a, Decodable b) => ByteString -> Bool -> Query a (Maybe b)
stmtMaybe query isPrepared = statement query encode (maybeRow decode) isPrepared
-- | Make a `Query` that returns a list of values
--
-- > getPeople :: Query () Person
-- > getPeople = stmtList "SELECT * FROM person" True
stmtList :: (Encodable a, Decodable b) => ByteString -> Bool -> Query a [b]
stmtList query isPrepared = statement query encode (rowsList decode) isPrepared
-- | Make a `Query` that returns @()@ (no result).
--
-- > insertVal :: Query Text ()
-- > insertVal = stmtUnit "INSERT INTO tbl VALUES ($1)" True
stmtUnit :: (Encodable a) => ByteString -> Bool -> Query a ()
stmtUnit query isPrepared = statement query encode unit isPrepared