git.iko.soy/typeable/postgresql-simple
on master help sign in
.Internal: Add newTempName
commit2a960be96250d9356af9e3feeee8f981ded19f65 authorJoey Adams <joeyadams3.14159@gmail.com> dateMon 20 May 2013, 02:02 (13 years ago) parenta93a42f
1 file changed+14−1
src/Database/PostgreSQL/Simple/Internal.hs+14−1
src/Database/PostgreSQL/Simple/Internal.hs+14−1
@@ -1,4 +1,7 @@
1−{-# LANGUAGE RecordWildCards, DeriveDataTypeable, GeneralizedNewtypeDeriving #-}
1+{-# LANGUAGE BangPatterns #-}
2+{-# LANGUAGE DeriveDataTypeable #-}
3+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
4+{-# LANGUAGE RecordWildCards #-}
25------------------------------------------------------------------------------
36-- |
47-- Module: Database.PostgreSQL.Simple.Internal
@@ -30,6 +33,7 @@ import qualified Data.ByteString.Char8 as B8
3033import Data.Char (ord)
3134import Data.Int (Int64)
3235import qualified Data.IntMap as IntMap
36+import Data.IORef
3337import Data.Maybe(fromMaybe)
3438import Data.String
3539import Data.Typeable
@@ -62,6 +66,7 @@ type TypeInfoCache = IntMap.IntMap TypeInfo
6266data Connection = Connection {
6367 connectionHandle :: {-# UNPACK #-} !(MVar PQ.Connection)
6468 , connectionObjects :: {-# UNPACK #-} !(MVar TypeInfoCache)
69+ , connectionTempNameCounter :: {-# UNPACK #-} !(IORef Int64)
6570 }
6671
6772data SqlError = SqlError {
@@ -138,6 +143,7 @@ connectPostgreSQL connstr = do
138143 PQ.ConnectionOk -> do
139144 connectionHandle <- newMVar conn
140145 connectionObjects <- newMVar (IntMap.empty)
146+ connectionTempNameCounter <- newIORef 0
141147 let wconn = Connection{..}
142148 version <- PQ.serverVersion conn
143149 let settings
@@ -280,6 +286,7 @@ newNullConnection :: IO Connection
280286newNullConnection = do
281287 connectionHandle <- newMVar =<< PQ.newNullConnection
282288 connectionObjects <- newMVar IntMap.empty
289+ connectionTempNameCounter <- newIORef 0
283290 return Connection{..}
284291
285292data Row = Row {
@@ -328,3 +335,9 @@ conversionMap f m = Conversion $ \conn -> f <$> runConversion m conn
328335
329336conversionError :: Exception err => err -> Conversion a
330337conversionError err = Conversion $ \_ -> return (Errors [SomeException err])
338+
339+newTempName :: Connection -> IO Query
340+newTempName Connection{..} = do
341+ !n <- atomicModifyIORef connectionTempNameCounter
342+ (\n -> let !n' = n+1 in (n', n'))
343+ return $! Query $ B8.pack $ "temp" ++ show n