on dev help sign in
transaction stuff
commit084ab058f5185797191734c8daa151bc9e682db9 authorEitan Chatav <eitan.chatav@gmail.com> dateMon 19 Mar 2018, 18:03 (9 years ago) parentae60c7b
2 files changed+21−13
squeal-postgresql/src/Squeal/PostgreSQL/Migration.hs+3−7 squeal-postgresql/src/Squeal/PostgreSQL/Transaction.hs+18−6
squeal-postgresql/src/Squeal/PostgreSQL/Migration.hs+3−7
@@ -165,9 +165,7 @@ migrateUp
165165migrateUp migration =
166166 define createMigrations
167167 & pqBind okResult
168− & pqThen (begin defaultMode)
169− & pqBind okResult
170− & pqThen (upMigrations migration & rollbackOrCommit)
168+ & pqThen (transactionallySchema_ (upMigrations migration))
171169 where
172170
173171 upMigrations
@@ -220,12 +218,10 @@ migrateDown
220218 ("schema_migrations" ::: MigrationsTable ': schema1)
221219 ("schema_migrations" ::: MigrationsTable ': schema0)
222220 io ()
223−migrateDown migration =
221+migrateDown migrations =
224222 define createMigrations
225223 & pqBind okResult
226− & pqThen (begin defaultMode)
227− & pqBind okResult
228− & pqThen (downMigrations migration & rollbackOrCommit)
224+ & pqThen (transactionallySchema_ (downMigrations migrations))
229225 where
230226
231227 downMigrations
squeal-postgresql/src/Squeal/PostgreSQL/Transaction.hs+18−6
@@ -28,7 +28,8 @@ module Squeal.PostgreSQL.Transaction
2828 , begin
2929 , commit
3030 , rollback
31− , rollbackOrCommit
31+ , transactionallySchema
32+ , transactionallySchema_
3233 -- * Transaction Mode
3334 , TransactionMode (..)
3435 , defaultMode
@@ -45,11 +46,13 @@ import Control.Exception.Lifted
4546import Control.Monad.Base
4647import Control.Monad.Trans.Control
4748import Data.ByteString
49+import Data.Function
4850import Data.Monoid
4951import Generics.SOP
5052
5153import qualified Database.PostgreSQL.LibPQ as LibPQ
5254
55+import Squeal.PostgreSQL.Definition
5356import Squeal.PostgreSQL.Manipulation
5457import Squeal.PostgreSQL.Prettyprint
5558import Squeal.PostgreSQL.PQ
@@ -87,17 +90,26 @@ commit = manipulate $ UnsafeManipulation "COMMIT;"
8790rollback :: MonadPQ schema tx => tx (K Result NilRelation)
8891rollback = manipulate $ UnsafeManipulation "ROLLBACK;"
8992
90−-- | @ROLLBACK@ a transaction upon `Exception`, otherwise @COMMIT@.
91−rollbackOrCommit
92− :: MonadBaseControl IO io
93− => PQ schema0 schema1 io x
93+-- | Run a schema changing computation `transactionallySchema`.
94+transactionallySchema
95+ :: MonadBaseControl IO io
96+ => TransactionMode
97+ -> PQ schema0 schema1 io x
9498 -> 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 <> ";"))
96101 x <- restore (unPQ u conn)
97102 `onException` (liftBase (LibPQ.exec (unK conn) "ROLLBACK"))
98103 _ <- liftBase (LibPQ.exec (unK conn) "COMMIT")
99104 return x
100105
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+
101113-- | The available transaction characteristics are the transaction `IsolationLevel`,
102114-- the transaction access mode (`ReadWrite` or `ReadOnly`), and the `DeferrableMode`.
103115data TransactionMode = TransactionMode