git.iko.soy/typeable/postgresql-simple
on master help sign in
Merge branch 'master' of github.com:lpsmith/postgresql-simple into 0.1

Conflicts: src/Database/PostgreSQL/Simple.hs src/Database/PostgreSQL/Simple/FromField.hs src/Database/PostgreSQL/Simple/QueryResults.hs

commite93b346e86a3dc04357baf884851b3d8e95bf1e6 authorLeon P Smith <leon@melding-monads.com> dateThu 8 Mar 2012, 15:02 (15 years ago) parent1414e24fdf85c4
7 files changed+46−13
postgresql-simple.cabal+5 src/Database/PostgreSQL/Simple.hs+11−8 src/Database/PostgreSQL/Simple/Compat.hs+25 src/Database/PostgreSQL/Simple/FromField.hs+3−4 src/Database/PostgreSQL/Simple/Internal.hs+1 src/Database/PostgreSQL/Simple/LargeObjects.hs−1 src/Database/PostgreSQL/Simple/Notification.hs+1
postgresql-simple.cabal+5
@@ -32,6 +32,9 @@ Library
3232-- Other-modules:
3333 Database.PostgreSQL.Simple.Internal
3434
35+ Other-modules:
36+ Database.PostgreSQL.Simple.Compat
37+
3538 Build-depends:
3639 attoparsec >= 0.8.5.3,
3740 base < 5,
@@ -51,6 +54,8 @@ Library
5154
5255 extensions: DoAndIfThenElse, OverloadedStrings, BangPatterns, ViewPatterns
5356
57+ ghc-options: -Wall -fno-warn-name-shadowing
58+
5459source-repository head
5560 type: git
5661 location: http://github.com/lpsmith/postgresql-simple
src/Database/PostgreSQL/Simple.hs+11−8
@@ -112,7 +112,6 @@ import Control.Concurrent.MVar
112112import Control.Exception
113113 ( Exception, bracket, onException, throw, throwIO, finally )
114114import Control.Monad (foldM)
115−import Control.Monad.Fix (fix)
116115import Data.ByteString (ByteString)
117116import Data.Char(ord)
118117import Data.Int (Int64)
@@ -203,6 +202,7 @@ formatMany conn q@(Query template) qs = do
203202 \([^?]*)$"
204203 [caseless]
205204
205+escapeStringConn :: Connection -> ByteString -> IO (Maybe ByteString)
206206escapeStringConn conn s = withConnection conn $ \c -> do
207207 PQ.escapeStringConn c s
208208
@@ -250,7 +250,7 @@ executeMany conn q qs = do
250250 finishExecute conn q result
251251
252252finishExecute :: Connection -> Query -> PQ.Result -> IO Int64
253−finishExecute conn q result = do
253+finishExecute _conn q result = do
254254 status <- PQ.resultStatus result
255255 case status of
256256 PQ.CommandOk -> do
@@ -352,6 +352,7 @@ data FoldOptions
352352 transactionMode :: !TransactionMode
353353 }
354354
355+defaultFoldOptions :: FoldOptions
355356defaultFoldOptions = FoldOptions {
356357 fetchQuantity = Automatic,
357358 transactionMode = TransactionMode ReadCommitted ReadOnly
@@ -569,11 +570,12 @@ withTransactionLevel lvl
569570
570571-- | Execute an action inside a SQL transaction with a given transaction mode.
571572withTransactionMode :: TransactionMode -> Connection -> IO a -> IO a
572−withTransactionMode mode conn act = do
573− beginMode mode conn
574− r <- act `onException` rollback conn
575− commit conn
576− return r
573+withTransactionMode mode conn act =
574+ mask $ \restore -> do
575+ beginMode mode conn
576+ r <- restore act `onException` rollback conn
577+ commit conn
578+ return r
577579
578580-- | Rollback a transaction.
579581rollback :: Connection -> IO ()
@@ -594,7 +596,8 @@ beginLevel lvl = beginMode defaultTransactionMode { isolationLevel = lvl }
594596-- | Begin a transaction with a given transaction mode
595597beginMode :: TransactionMode -> Connection -> IO ()
596598beginMode mode conn = do
597− execute_ conn $! case mode of
599+ _ <- execute_ conn $!
600+ case mode of
598601 TransactionMode DefaultIsolationLevel ReadWrite ->
599602 "BEGIN"
600603 TransactionMode DefaultIsolationLevel ReadOnly ->
src/Database/PostgreSQL/Simple/Compat.hsnew file+25
@@ -0,0 +1,25 @@
1+{-# LANGUAGE CPP #-}
2+-- | This is a module of its own, because it uses the CPP extension, which
3+-- doesn't play well with the regex string literal in Simple.hs .
4+module Database.PostgreSQL.Simple.Compat
5+ ( mask
6+ ) where
7+
8+import qualified Control.Exception as E
9+
10+-- | Like 'E.mask', but backported to base before version 4.3.0.
11+--
12+-- Note that the restore callback is monomorphic, unlike in 'E.mask'. This
13+-- could be fixed by changing the type signature, but it would require us to
14+-- enable the RankNTypes extension (since 'E.mask' has a rank-3 type). The
15+-- 'withTransactionMode' function calls the restore callback only once, so we
16+-- don't need that polymorphism.
17+mask :: ((IO a -> IO a) -> IO b) -> IO b
18+#if MIN_VERSION_base(4,3,0)
19+mask io = E.mask $ \restore -> io restore
20+#else
21+mask io = do
22+ b <- E.blocked
23+ E.block $ io $ \m -> if b then m else E.unblock m
24+#endif
25+{-# INLINE mask #-}
src/Database/PostgreSQL/Simple/FromField.hs+3−4
@@ -44,10 +44,9 @@ import Data.Time.Calendar (Day, fromGregorian)
4444import Data.Time.Clock (UTCTime)
4545import Data.Time.Format (parseTime)
4646import Data.Time.LocalTime (TimeOfDay, makeTimeOfDayValid)
47−import Data.Typeable (TypeRep, Typeable, typeOf)
47+import Data.Typeable (Typeable, typeOf)
4848import Data.Word (Word64)
4949import Database.PostgreSQL.Simple.Internal
50−import Database.PostgreSQL.Simple.Field (Field(..), RawResult(..))
5150import Database.PostgreSQL.Simple.BuiltinTypes
5251import Database.PostgreSQL.Simple.Ok
5352import Database.PostgreSQL.Simple.Types (Binary(..), Null(..))
@@ -59,7 +58,6 @@ import qualified Data.ByteString.Char8 as B8
5958import qualified Data.ByteString.Lazy as LB
6059import qualified Data.Text as ST
6160import qualified Data.Text.Encoding as ST
62−import qualified Data.Text.Encoding.Error (UnicodeException)
6361import qualified Data.Text.Lazy as LT
6462
6563-- | Exception thrown if conversion from a SQL value to a Haskell
@@ -139,6 +137,7 @@ instance FromField (Ratio Integer) where
139137 fromField = atto ok rational
140138 where ok = mkCompats [Float4,Float8,Int2,Int4,Numeric]
141139
140+unBinary :: Binary t -> t
142141unBinary (Binary x) = x
143142
144143instance FromField SB.ByteString where
@@ -224,7 +223,7 @@ mkCompat = Compat . shiftL 1 . fromEnum
224223compat :: Compat -> Compat -> Bool
225224compat (Compat a) (Compat b) = a .&. b /= 0
226225
227−okText, okText', ok16, ok32, ok64 :: Compat
226+okText, okText', okBinary, ok16, ok32, ok64, okInt :: Compat
228227okText = mkCompats [Name,Text,Char,Bpchar,Varchar]
229228okText' = mkCompats [Name,Text,Char,Bpchar,Varchar,Unknown]
230229okBinary = mkCompats [Bytea]
src/Database/PostgreSQL/Simple/Internal.hs+1
@@ -198,6 +198,7 @@ exec conn sql =
198198 Just res -> do
199199 return res
200200
201+disconnectedError :: SqlError
201202disconnectedError = SqlError {
202203 sqlNativeError = -1,
203204 sqlErrorMsg = "connection disconnected",
src/Database/PostgreSQL/Simple/LargeObjects.hs−1
@@ -34,7 +34,6 @@ import qualified Data.ByteString as B
3434import Database.PostgreSQL.LibPQ (Oid(..),LoFd(..))
3535import qualified Database.PostgreSQL.LibPQ as PQ
3636import Database.PostgreSQL.Simple.Internal
37−import Foreign.C.Types (CInt)
3837import System.IO (IOMode(..),SeekMode(..))
3938
4039liftPQ :: B.ByteString -> Connection -> (PQ.Connection -> IO (Maybe a)) -> IO a
src/Database/PostgreSQL/Simple/Notification.hs+1
@@ -29,6 +29,7 @@ data Notification = Notification
2929 , notificationData :: B.ByteString
3030 }
3131
32+errfd :: String
3233errfd = "Database.PostgreSQL.Simple.Notification.getNotification: \
3334 \failed to fetch file descriptor"
3435