diff --git a/src/Database/PostgreSQL/LibPQ.hsc b/src/Database/PostgreSQL/LibPQ.hsc index 3f8a00d..2ab9f25 100644 --- a/src/Database/PostgreSQL/LibPQ.hsc +++ b/src/Database/PostgreSQL/LibPQ.hsc @@ -756,13 +756,11 @@ withParams params action = withMany (maybeWith B.useAsCString) values $ \c_values -> withArray c_values $ \vs -> withArray c_lengths $ \ls -> - withArray formats $ \fs -> - action n ts vs ls fs + withArrayLen formats $ \n fs -> + action (toEnum n) ts vs ls fs where - (oids, values, lengths, formats) = + (oids, values, c_lengths, formats) = foldl' accum ([],[],[],[]) $ reverse params - !c_lengths = map toEnum lengths :: [CInt] - !n = toEnum $ length params accum (!a,!b,!c,!d) Nothing = ( invalidOid:a , Nothing:b @@ -771,7 +769,7 @@ withParams params action = ) accum (!a,!b,!c,!d) (Just (t,v,f)) = ( t:a , (Just v):b - , (B.length v):c + , (toEnum $ B.length v):c , (toEnum $ fromEnum f):d ) @@ -784,19 +782,17 @@ withParamsPrepared params action = withMany (maybeWith B.useAsCString) values $ \c_values -> withArray c_values $ \vs -> withArray c_lengths $ \ls -> - withArray formats $ \fs -> - action n vs ls fs + withArrayLen formats $ \n fs -> + action (toEnum n) vs ls fs where - (values, lengths, formats) = foldl' accum ([],[],[]) $ reverse params - !c_lengths = map toEnum lengths :: [CInt] - !n = toEnum $ length params + (values, c_lengths, formats) = foldl' accum ([],[],[]) $ reverse params accum (!a,!b,!c) Nothing = ( Nothing:a , 0:b , 0:c ) accum (!a,!b,!c) (Just (v, f)) = ( (Just v):a - , (B.length v):b + , (toEnum $ B.length v):b , (toEnum $ fromEnum f):c )