2016-08-06 12:22:11 +03:00
|
|
|
module Hasql.Private.Encoders.Params where
|
2015-11-08 21:09:42 +03:00
|
|
|
|
2017-03-20 23:13:21 +03:00
|
|
|
import qualified Database.PostgreSQL.LibPQ as A
|
|
|
|
import qualified Hasql.Private.Encoders.Value as C
|
|
|
|
import qualified Hasql.Private.PTI as D
|
2022-06-20 13:54:54 +03:00
|
|
|
import Hasql.Private.Prelude
|
|
|
|
import qualified PostgreSQL.Binary.Encoding as B
|
2021-11-02 10:26:35 +03:00
|
|
|
import qualified Text.Builder as E
|
2015-11-08 21:09:42 +03:00
|
|
|
|
|
|
|
-- |
|
2015-11-21 13:36:01 +03:00
|
|
|
-- Encoder of some representation of a parameters product.
|
2022-06-20 13:54:54 +03:00
|
|
|
newtype Params a
|
|
|
|
= Params (Op (DList (A.Oid, A.Format, Bool -> Maybe ByteString, Text)) a)
|
2018-06-06 12:23:18 +03:00
|
|
|
deriving (Contravariant, Divisible, Decidable, Semigroup, Monoid)
|
2016-02-23 09:39:57 +03:00
|
|
|
|
2017-03-20 23:13:21 +03:00
|
|
|
value :: C.Value a -> Params a
|
2015-11-08 21:09:42 +03:00
|
|
|
value =
|
|
|
|
contramap Just . nullableValue
|
|
|
|
|
2017-03-20 23:13:21 +03:00
|
|
|
nullableValue :: C.Value a -> Params (Maybe a)
|
2018-05-23 12:15:34 +03:00
|
|
|
nullableValue (C.Value valueOID arrayOID encode render) =
|
2022-06-20 13:54:54 +03:00
|
|
|
Params $
|
|
|
|
Op $ \input ->
|
|
|
|
let D.OID _ pqOid format =
|
|
|
|
valueOID
|
|
|
|
encoder env =
|
|
|
|
fmap (B.encodingBytes . encode env) input
|
|
|
|
rendering =
|
|
|
|
maybe "null" (E.run . render) input
|
|
|
|
in pure (pqOid, format, encoder, rendering)
|