on dev help sign in
fixes?
commit12c531a60f6b6502c0894ccae29a970c4783a69e authorEitan Chatav <eitan.chatav@gmail.com> dateTue 6 Mar 2018, 16:25 (9 years ago) parent34ef3a2
3 files changed+17−6
squeal-postgresql/exe/Example.hs+5−1 squeal-postgresql/src/Squeal/PostgreSQL/Pool.hs+5−5 squeal-postgresql/src/Squeal/PostgreSQL/Transaction.hs+7
squeal-postgresql/exe/Example.hs+5−1
@@ -122,7 +122,11 @@ main = do
122122
123123main2 :: IO ()
124124main2 = void $
125− withConnection "host=localhost port=5432 dbname=exampledb" . runPQ $
125+ withConnection "host=localhost port=5432 dbname=exampledb" . goPQ $
126126 define setup
127127 & pqThen session
128128 & thenDefine teardown
129+ where
130+ goPQ pq conn = do
131+ SOP.K x <- runPQ pq conn
132+ return (x, SOP.K (SOP.unK conn))
squeal-postgresql/src/Squeal/PostgreSQL/Pool.hs+5−5
@@ -17,7 +17,7 @@ import Control.Monad.Base
1717import Control.Monad.Trans
1818import Control.Monad.Trans.Control
1919import Data.Pool
20−import Generics.SOP (K)
20+import Generics.SOP (K(..))
2121
2222import Squeal.PostgreSQL.PQ
2323import Squeal.PostgreSQL.Schema
@@ -48,22 +48,22 @@ instance MonadBase b m => MonadBase b (PoolPQ schema m) where
4848instance MonadBaseControl IO io => MonadPQ schema (PoolPQ schema io) where
4949 manipulateParams manipulation params = PoolPQ $ \ pool -> do
5050 withResource pool $ \ conn -> do
51− (K result :: K Result schema) <- flip runPQ conn $
51+ (K result :: K (K Result ys) schema) <- flip runPQ conn $
5252 manipulateParams manipulation params
5353 return result
5454 traversePrepared manipulation params = PoolPQ $ \ pool ->
5555 withResource pool $ \ conn -> do
56− (result :: K Result schema) <- flip runPQ conn $
56+ (K result :: K (list (K Result ys)) schema) <- flip runPQ conn $
5757 traversePrepared manipulation params
5858 return result
5959 traversePrepared_ manipulation params = PoolPQ $ \ pool -> do
6060 withResource pool $ \ conn -> do
61− (_ :: K Result schema) <- flip runPQ conn $
61+ (_ :: K () schema) <- flip runPQ conn $
6262 traversePrepared_ manipulation params
6363 return ()
6464 liftPQ m = PoolPQ $ \ pool ->
6565 withResource pool $ \ conn -> do
66− (result :: K Result schema) <- flip runPQ conn $
66+ (K result :: K result schema) <- flip runPQ conn $
6767 liftPQ m
6868 return result
6969
squeal-postgresql/src/Squeal/PostgreSQL/Transaction.hs+7
@@ -16,6 +16,7 @@ module Squeal.PostgreSQL.Transaction
1616 , begin
1717 , commit
1818 , rollback
19+ , onExceptionRollback
1920 , TransactionMode (..)
2021 , IsolationLevel (..)
2122 , ReadWriteMode (..)
@@ -27,6 +28,8 @@ import Data.ByteString
2728import Data.Monoid
2829import Generics.SOP
2930
31+import qualified Database.PostgreSQL.LibPQ as LibPQ
32+
3033import Squeal.PostgreSQL.Manipulation
3134import Squeal.PostgreSQL.Prettyprint
3235import Squeal.PostgreSQL.PQ
@@ -57,6 +60,10 @@ commit = manipulate $ UnsafeManipulation "COMMIT;"
5760rollback :: MonadPQ schema tx => tx (K Result NilRelation)
5861rollback = manipulate $ UnsafeManipulation "ROLLBACK;"
5962
63+onExceptionRollback :: PQ schema0 schema1 IO x -> PQ schema0 schema1 IO x
64+onExceptionRollback u = PQ $ \ conn -> mask $ \ restore ->
65+ restore (runPQ u conn) `onException` LibPQ.exec (unK conn) "ROLLBACK"
66+
6067data TransactionMode = TransactionMode
6168 { isolationLevel :: IsolationLevel
6269 , readWriteMode :: ReadWriteMode