module Hasql.Engine.Statement
( Statement (..),
preparable,
unpreparable,
refineResult,
toSql,
)
where
import Hasql.Decoders qualified as Decoders
import Hasql.Encoders qualified as Encoders
import Hasql.Engine.Decoders.Result qualified
import Hasql.Platform.Prelude
data Statement params result
= Statement
Text
(Encoders.Params params)
(Decoders.Result result)
Bool
preparable ::
Text ->
Encoders.Params params ->
Decoders.Result result ->
Statement params result
preparable :: forall params result.
Text -> Params params -> Result result -> Statement params result
preparable Text
sql Params params
encoder Result result
decoder = Text
-> Params params
-> Result result
-> Bool
-> Statement params result
forall params result.
Text
-> Params params
-> Result result
-> Bool
-> Statement params result
Statement Text
sql Params params
encoder Result result
decoder Bool
True
unpreparable ::
Text ->
Encoders.Params params ->
Decoders.Result result ->
Statement params result
unpreparable :: forall params result.
Text -> Params params -> Result result -> Statement params result
unpreparable Text
sql Params params
encoder Result result
decoder = Text
-> Params params
-> Result result
-> Bool
-> Statement params result
forall params result.
Text
-> Params params
-> Result result
-> Bool
-> Statement params result
Statement Text
sql Params params
encoder Result result
decoder Bool
False
instance Functor (Statement params) where
{-# INLINE fmap #-}
fmap :: forall a b. (a -> b) -> Statement params a -> Statement params b
fmap = (a -> b) -> Statement params a -> Statement params b
forall b c a. (b -> c) -> Statement a b -> Statement a c
forall (p :: * -> * -> *) b c a.
Profunctor p =>
(b -> c) -> p a b -> p a c
rmap
instance Filterable (Statement params) where
{-# INLINE mapMaybe #-}
mapMaybe :: forall a b.
(a -> Maybe b) -> Statement params a -> Statement params b
mapMaybe a -> Maybe b
filtrator (Statement Text
template Params params
encoder Result a
decoder Bool
preparable) =
Text -> Params params -> Result b -> Bool -> Statement params b
forall params result.
Text
-> Params params
-> Result result
-> Bool
-> Statement params result
Statement Text
template Params params
encoder ((a -> Maybe b) -> Result a -> Result b
forall a b. (a -> Maybe b) -> Result a -> Result b
forall (f :: * -> *) a b.
Filterable f =>
(a -> Maybe b) -> f a -> f b
mapMaybe a -> Maybe b
filtrator Result a
decoder) Bool
preparable
instance Profunctor Statement where
{-# INLINE dimap #-}
dimap :: forall a b c d.
(a -> b) -> (c -> d) -> Statement b c -> Statement a d
dimap a -> b
f1 c -> d
f2 (Statement Text
template Params b
encoder Result c
decoder Bool
preparable) =
Text -> Params a -> Result d -> Bool -> Statement a d
forall params result.
Text
-> Params params
-> Result result
-> Bool
-> Statement params result
Statement Text
template ((a -> b) -> Params b -> Params a
forall a' a. (a' -> a) -> Params a -> Params a'
forall (f :: * -> *) a' a.
Contravariant f =>
(a' -> a) -> f a -> f a'
contramap a -> b
f1 Params b
encoder) ((c -> d) -> Result c -> Result d
forall a b. (a -> b) -> Result a -> Result b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap c -> d
f2 Result c
decoder) Bool
preparable
refineResult :: (a -> Either Text b) -> Statement params a -> Statement params b
refineResult :: forall a b params.
(a -> Either Text b) -> Statement params a -> Statement params b
refineResult a -> Either Text b
refiner (Statement Text
template Params params
encoder Result a
decoder Bool
preparable) =
Text -> Params params -> Result b -> Bool -> Statement params b
forall params result.
Text
-> Params params
-> Result result
-> Bool
-> Statement params result
Statement Text
template Params params
encoder ((a -> Either Text b) -> Result a -> Result b
forall a b. (a -> Either Text b) -> Result a -> Result b
Hasql.Engine.Decoders.Result.refineResult a -> Either Text b
refiner Result a
decoder) Bool
preparable
toSql :: Statement params result -> Text
toSql :: forall params result. Statement params result -> Text
toSql (Statement Text
sql Params params
_ Result result
_ Bool
_) = Text
sql