git.iko.soy/typeable/postgresql-simple
on master help sign in
Consume all results after a COPY
ca3b230Leon P Smith
src/Database/PostgreSQL/Simple/Copy.hs+10
@@ -186,6 +186,7 @@ putCopyEnd conn = withConnection conn $ \pqconn -> do
186putCopyError :: Connection -> B.ByteString -> IO ()
186putCopyError :: Connection -> B.ByteString -> IO ()
187putCopyError conn err = withConnection conn $ \pqconn -> do
187putCopyError conn err = withConnection conn $ \pqconn -> do
188 doCopyIn funcName (\c -> PQ.putCopyEnd c (Just err)) pqconn
188 doCopyIn funcName (\c -> PQ.putCopyEnd c (Just err)) pqconn
189+ consumeResults pqconn
189 where
190 where
190 funcName = "Database.PostgreSQL.Simple.Copy.putCopyError"
191 funcName = "Database.PostgreSQL.Simple.Copy.putCopyError"
191
192
@@ -220,6 +221,7 @@ getCopyCommandTag :: B.ByteString -> PQ.Connection -> IO Int64
220getCopyCommandTag funcName pqconn = do
221getCopyCommandTag funcName pqconn = do
221 result <- maybe (fail errCmdStatus) return =<< PQ.getResult pqconn
222 result <- maybe (fail errCmdStatus) return =<< PQ.getResult pqconn
222 cmdStat <- maybe (fail errCmdStatus) return =<< PQ.cmdStatus result
223 cmdStat <- maybe (fail errCmdStatus) return =<< PQ.cmdStatus result
224+ consumeResults pqconn
223 let rowCount = P.string "COPY " *> (P.decimal <* P.endOfInput)
225 let rowCount = P.string "COPY " *> (P.decimal <* P.endOfInput)
224 case P.parseOnly rowCount cmdStat of
226 case P.parseOnly rowCount cmdStat of
225 Left _ -> fail errCmdStatusFmt
227 Left _ -> fail errCmdStatusFmt
@@ -227,3 +229,11 @@ getCopyCommandTag funcName pqconn = do
227 where
229 where
228 errCmdStatus = B.unpack funcName ++ ": failed to fetch command status"
230 errCmdStatus = B.unpack funcName ++ ": failed to fetch command status"
229 errCmdStatusFmt = B.unpack funcName ++ ": failed to parse command status"
231 errCmdStatusFmt = B.unpack funcName ++ ": failed to parse command status"
232+
233+
234+consumeResults :: PQ.Connection -> IO ()
235+consumeResults pqconn = do
236+ mres <- PQ.getResult pqconn
237+ case mres of
238+ Nothing -> return ()
239+ Just _ -> consumeResults pqconn