@@ -45,7 +45,7 @@ import Control.Monad.Trans.Reader
45import Control.Monad.Trans.Class
45import Control.Monad.Trans.Class
46import GHC.IO.Exception
46import GHC.IO.Exception
47#if !defined(mingw32_HOST_OS)
47#if !defined(mingw32_HOST_OS)
48−import Control.Concurrent(threadWaitRead)
48+import Control.Concurrent(threadWaitRead, threadWaitWrite)
51-- | A Field represents metadata about a particular field
51-- | A Field represents metadata about a particular field
@@ -187,7 +187,7 @@ connect = connectPostgreSQL . postgreSQLConnectionString
188connectPostgreSQL :: ByteString -> IO Connection
188connectPostgreSQL :: ByteString -> IO Connection
189connectPostgreSQL connstr = do
189connectPostgreSQL connstr = do
190− conn <- PQ.connectdb connstr
190+ conn <- connectdb connstr
191 stat <- PQ.status conn
191 stat <- PQ.status conn
192 case stat of
192 case stat of
193 PQ.ConnectionOk -> do
193 PQ.ConnectionOk -> do
@@ -205,6 +205,37 @@ connectPostgreSQL connstr = do
205 msg <- maybe "connectPostgreSQL error" id <$> PQ.errorMessage conn
205 msg <- maybe "connectPostgreSQL error" id <$> PQ.errorMessage conn
206 throwIO $ fatalError msg
206 throwIO $ fatalError msg
208+connectdb :: ByteString -> IO PQ.Connection
209+#if defined(mingw32_HOST_OS)
210+connectdb = PQ.connectdb
212+connectdb conninfo = do
213+ conn <- PQ.connectStart conninfo
216+ funcName = "Database.PostgreSQL.Simple.connectPostgreSQL"
218+ status <- PQ.connectPoll conn
220+ PQ.PollingFailed -> throwLibPQError conn "connection failed"
221+ PQ.PollingReading -> do
222+ mfd <- PQ.socket conn
224+ Nothing -> throwIO $! fdError funcName
228+ PQ.PollingWriting -> do
229+ mfd <- PQ.socket conn
231+ Nothing -> throwIO $! fdError funcName
235+ PQ.PollingOk -> return conn
208-- | Turns a 'ConnectInfo' data structure into a libpq connection string.
239-- | Turns a 'ConnectInfo' data structure into a libpq connection string.
210postgreSQLConnectionString :: ConnectInfo -> ByteString
241postgreSQLConnectionString :: ConnectInfo -> ByteString