mirror of
https://github.com/nikita-volkov/hasql.git
synced 2024-11-22 01:52:45 +03:00
Factor out the reusable pieces
This commit is contained in:
parent
e366b3feba
commit
117ebc3d0e
@ -12,6 +12,26 @@ renderReadable (Params _ _ _ printer) params =
|
||||
printer params
|
||||
& toList
|
||||
|
||||
compilePreparedStatementData :: Params a -> Bool -> a -> ([A.Oid], [Maybe (ByteString, A.Format)])
|
||||
compilePreparedStatementData (Params _ columnsMetadata serializer _) integerDatetimes input =
|
||||
(oidList, valueAndFormatList)
|
||||
where
|
||||
(oidList, formatList) =
|
||||
columnsMetadata & toList & unzip
|
||||
valueAndFormatList =
|
||||
serializer integerDatetimes input
|
||||
& toList
|
||||
& zipWith (\format encoding -> (,format) <$> encoding) formatList
|
||||
|
||||
compileUnpreparedStatementData :: Params a -> Bool -> a -> [Maybe (A.Oid, ByteString, A.Format)]
|
||||
compileUnpreparedStatementData (Params _ columnsMetadata serializer printer) integerDatetimes input =
|
||||
zipWith
|
||||
( \(oid, format) encoding ->
|
||||
(,,) <$> pure oid <*> encoding <*> pure format
|
||||
)
|
||||
(toList columnsMetadata)
|
||||
(toList (serializer integerDatetimes input))
|
||||
|
||||
-- |
|
||||
-- Encoder of some representation of a parameters product.
|
||||
data Params a = Params
|
||||
|
@ -111,17 +111,13 @@ sendPreparedParametricStatement ::
|
||||
ParamsEncoders.Params a ->
|
||||
a ->
|
||||
IO (Either CommandError ())
|
||||
sendPreparedParametricStatement connection registry integerDatetimes template (ParamsEncoders.Params size columnsMetadata serializer _) input =
|
||||
sendPreparedParametricStatement connection registry integerDatetimes template encoder input =
|
||||
runExceptT $ do
|
||||
key <- ExceptT $ getPreparedStatementKey connection registry template oidList
|
||||
ExceptT $ checkedSend connection $ LibPQ.sendQueryPrepared connection key valueAndFormatList LibPQ.Binary
|
||||
where
|
||||
(oidList, formatList) =
|
||||
columnsMetadata & toList & unzip
|
||||
valueAndFormatList =
|
||||
serializer integerDatetimes input
|
||||
& toList
|
||||
& zipWith (\format encoding -> (,format) <$> encoding) formatList
|
||||
(oidList, valueAndFormatList) =
|
||||
ParamsEncoders.compilePreparedStatementData encoder integerDatetimes input
|
||||
|
||||
{-# INLINE sendUnpreparedParametricStatement #-}
|
||||
sendUnpreparedParametricStatement ::
|
||||
@ -131,15 +127,13 @@ sendUnpreparedParametricStatement ::
|
||||
ParamsEncoders.Params a ->
|
||||
a ->
|
||||
IO (Either CommandError ())
|
||||
sendUnpreparedParametricStatement connection integerDatetimes template (ParamsEncoders.Params _ columnsMetadata serializer printer) input =
|
||||
let params =
|
||||
zipWith
|
||||
( \(oid, format) encoding ->
|
||||
(,,) <$> pure oid <*> encoding <*> pure format
|
||||
)
|
||||
(toList columnsMetadata)
|
||||
(toList (serializer integerDatetimes input))
|
||||
in checkedSend connection $ LibPQ.sendQueryParams connection template params LibPQ.Binary
|
||||
sendUnpreparedParametricStatement connection integerDatetimes template encoder input =
|
||||
checkedSend connection
|
||||
$ LibPQ.sendQueryParams
|
||||
connection
|
||||
template
|
||||
(ParamsEncoders.compileUnpreparedStatementData encoder integerDatetimes input)
|
||||
LibPQ.Binary
|
||||
|
||||
{-# INLINE sendParametricStatement #-}
|
||||
sendParametricStatement ::
|
||||
|
Loading…
Reference in New Issue
Block a user