@@ -130,18 +130,15 @@ import Data.Monoid (mconcat)
130130import Database.PostgreSQL.Simple.Compat ( (<>), toByteString )
131131import Database.PostgreSQL.Simple.FromField (ResultError(..))
132132import Database.PostgreSQL.Simple.FromRow (FromRow(..))
133−import Database.PostgreSQL.Simple.Ok
134133import Database.PostgreSQL.Simple.ToField (Action(..))
135134import Database.PostgreSQL.Simple.ToRow (ToRow(..))
136135import Database.PostgreSQL.Simple.Types
137136 ( Binary(..), In(..), Only(..), Query(..), (:.)(..) )
138137import Database.PostgreSQL.Simple.Internal as Base
138+import Database.PostgreSQL.Simple.Internal.PQResultUtils
139139import Database.PostgreSQL.Simple.Transaction
140−import Database.PostgreSQL.Simple.TypeInfo
141140import qualified Database.PostgreSQL.LibPQ as PQ
142141import qualified Data.ByteString.Char8 as B
143−import Control.Monad.Trans.Reader
144−import Control.Monad.Trans.State.Strict
145142
146143
147144-- | Format a query string.
@@ -644,16 +641,6 @@ forEachWith_ :: RowParser r
644641forEachWith_ parser conn template = foldWith_ parser conn template () . const
645642{-# INLINE forEachWith_ #-}
646643
647−forM' :: (Ord n, Num n) => n -> n -> (n -> IO a) -> IO [a]
648−forM' lo hi m = loop hi []
649− where
650− loop !n !as
651− | n < lo = return as
652− | otherwise = do
653− a <- m n
654− loop (n-1) (a:as)
655−{-# INLINE forM' #-}
656−
657644foldM' :: (Ord n, Num n) => (a -> n -> IO a) -> a -> n -> n -> IO a
658645foldM' f a lo hi = loop a lo
659646 where
@@ -664,56 +651,6 @@ foldM' f a lo hi = loop a lo
664651 loop a' (n+1)
665652{-# INLINE foldM' #-}
666653
667−finishQueryWith :: RowParser r -> Connection -> Query -> PQ.Result -> IO [r]
668−finishQueryWith parser conn q result = do
669− status <- PQ.resultStatus result
670− case status of
671− PQ.EmptyQuery ->
672− throwIO $ QueryError "query: Empty query" q
673− PQ.CommandOk ->
674− throwIO $ QueryError "query resulted in a command response" q
675− PQ.TuplesOk -> do
676− nrows <- PQ.ntuples result
677− ncols <- PQ.nfields result
678− forM' 0 (nrows-1) $ \row ->
679− getRowWith parser row ncols conn result
680− PQ.CopyOut ->
681− throwIO $ QueryError "query: COPY TO is not supported" q
682− PQ.CopyIn ->
683− throwIO $ QueryError "query: COPY FROM is not supported" q
684− PQ.BadResponse -> throwResultError "query" result status
685− PQ.NonfatalError -> throwResultError "query" result status
686− PQ.FatalError -> throwResultError "query" result status
687−
688−getRowWith :: RowParser r -> PQ.Row -> PQ.Column -> Connection -> PQ.Result -> IO r
689−getRowWith parser row ncols conn result = do
690− let rw = Row row result
691− let unCol (PQ.Col x) = fromIntegral x :: Int
692− okvc <- runConversion (runStateT (runReaderT (unRP parser) rw) 0) conn
693− case okvc of
694− Ok (val,col) | col == ncols -> return val
695− | otherwise -> do
696− vals <- forM' 0 (ncols-1) $ \c -> do
697− tinfo <- getTypeInfo conn =<< PQ.ftype result c
698− v <- PQ.getvalue result row c
699− return ( tinfo
700− , fmap ellipsis v )
701− throw (ConversionFailed
702− (show (unCol ncols) ++ " values: " ++ show vals)
703− Nothing
704− ""
705− (show (unCol col) ++ " slots in target type")
706− "mismatch between number of columns to \
707− \convert and number in target type")
708− Errors [] -> throwIO $ ConversionFailed "" Nothing "" "" "unknown error"
709− Errors [x] -> throwIO x
710− Errors xs -> throwIO $ ManyErrors xs
711−
712−ellipsis :: ByteString -> ByteString
713−ellipsis bs
714− | B.length bs > 15 = B.take 10 bs `B.append` "[...]"
715− | otherwise = bs
716−
717654
718655-- $use
719656--