on dev help sign in
transaction stuff
084ab05Eitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Migration.hs+3−7
@@ -165,9 +165,7 @@ migrateUp
165migrateUp migration =
165migrateUp migration =
166 define createMigrations
166 define createMigrations
167 & pqBind okResult
167 & pqBind okResult
168− & pqThen (begin defaultMode)
169− & pqBind okResult
170− & pqThen (upMigrations migration & rollbackOrCommit)
168+ & pqThen (transactionallySchema_ (upMigrations migration))
171 where
169 where
172
170
173 upMigrations
171 upMigrations
@@ -220,12 +218,10 @@ migrateDown
220 ("schema_migrations" ::: MigrationsTable ': schema1)
218 ("schema_migrations" ::: MigrationsTable ': schema1)
221 ("schema_migrations" ::: MigrationsTable ': schema0)
219 ("schema_migrations" ::: MigrationsTable ': schema0)
222 io ()
220 io ()
223−migrateDown migration =
221+migrateDown migrations =
224 define createMigrations
222 define createMigrations
225 & pqBind okResult
223 & pqBind okResult
226− & pqThen (begin defaultMode)
224+ & pqThen (transactionallySchema_ (downMigrations migrations))
227− & pqBind okResult
228− & pqThen (downMigrations migration & rollbackOrCommit)
229 where
225 where
230
226
231 downMigrations
227 downMigrations
squeal-postgresql/src/Squeal/PostgreSQL/Transaction.hs+18−6
@@ -28,7 +28,8 @@ module Squeal.PostgreSQL.Transaction
28 , begin
28 , begin
29 , commit
29 , commit
30 , rollback
30 , rollback
31− , rollbackOrCommit
31+ , transactionallySchema
32+ , transactionallySchema_
32 -- * Transaction Mode
33 -- * Transaction Mode
33 , TransactionMode (..)
34 , TransactionMode (..)
34 , defaultMode
35 , defaultMode
@@ -45,11 +46,13 @@ import Control.Exception.Lifted
45import Control.Monad.Base
46import Control.Monad.Base
46import Control.Monad.Trans.Control
47import Control.Monad.Trans.Control
47import Data.ByteString
48import Data.ByteString
49+import Data.Function
48import Data.Monoid
50import Data.Monoid
49import Generics.SOP
51import Generics.SOP
50
52
51import qualified Database.PostgreSQL.LibPQ as LibPQ
53import qualified Database.PostgreSQL.LibPQ as LibPQ
52
54
55+import Squeal.PostgreSQL.Definition
53import Squeal.PostgreSQL.Manipulation
56import Squeal.PostgreSQL.Manipulation
54import Squeal.PostgreSQL.Prettyprint
57import Squeal.PostgreSQL.Prettyprint
55import Squeal.PostgreSQL.PQ
58import Squeal.PostgreSQL.PQ
@@ -87,17 +90,26 @@ commit = manipulate $ UnsafeManipulation "COMMIT;"
87rollback :: MonadPQ schema tx => tx (K Result NilRelation)
90rollback :: MonadPQ schema tx => tx (K Result NilRelation)
88rollback = manipulate $ UnsafeManipulation "ROLLBACK;"
91rollback = manipulate $ UnsafeManipulation "ROLLBACK;"
89
92
90−-- | @ROLLBACK@ a transaction upon `Exception`, otherwise @COMMIT@.
93+-- | Run a schema changing computation `transactionallySchema`.
91−rollbackOrCommit
94+transactionallySchema
92− :: MonadBaseControl IO io
95+ :: MonadBaseControl IO io
96+ => TransactionMode
93− => PQ schema0 schema1 io x
97+ -> PQ schema0 schema1 io x
94 -> PQ schema0 schema1 io x
98 -> PQ schema0 schema1 io x
95−rollbackOrCommit u = PQ $ \ conn -> mask $ \ restore -> do
99+transactionallySchema mode u = PQ $ \ conn -> mask $ \ restore -> do
100+ liftBase (LibPQ.exec (unK conn) ("BEGIN" <+> renderTransactionMode mode <> ";"))
96 x <- restore (unPQ u conn)
101 x <- restore (unPQ u conn)
97 `onException` (liftBase (LibPQ.exec (unK conn) "ROLLBACK"))
102 `onException` (liftBase (LibPQ.exec (unK conn) "ROLLBACK"))
98 _ <- liftBase (LibPQ.exec (unK conn) "COMMIT")
103 _ <- liftBase (LibPQ.exec (unK conn) "COMMIT")
99 return x
104 return x
100
105
106+-- | Run a schema changing computation `transactionallySchema_` in `DefaultMode`.
107+transactionallySchema_
108+ :: MonadBaseControl IO io
109+ => PQ schema0 schema1 io x
110+ -> PQ schema0 schema1 io x
111+transactionallySchema_ = transactionallySchema defaultMode
112+
101-- | The available transaction characteristics are the transaction `IsolationLevel`,
113-- | The available transaction characteristics are the transaction `IsolationLevel`,
102-- the transaction access mode (`ReadWrite` or `ReadOnly`), and the `DeferrableMode`.
114-- the transaction access mode (`ReadWrite` or `ReadOnly`), and the `DeferrableMode`.
103data TransactionMode = TransactionMode
115data TransactionMode = TransactionMode