@@ -1,15 +1,20 @@
1+{-# LANGUAGE
2+ ScopedTypeVariables
3+#-}
4+
15module Squeal.PostgreSQL.Migration
26 ( Migration
3−-- , up
7+ , up
48 , MigrationResult
59 ) where
610
711import Control.Category
812-- import Control.Exception.Lifted
913import Data.Function ((&))
14+import Generics.SOP
1015
1116import Squeal.PostgreSQL.PQ
12−-- import Squeal.PostgreSQL.Transaction
17+import Squeal.PostgreSQL.Transaction
1318
1419data Migration schema0 schema1 = Migration
1520 { migrateUp :: PQ schema0 schema1 IO MigrationResult
@@ -23,15 +28,16 @@ instance Category Migration where
2328 , migrateDown = migrateDown migration1 & pqThen (migrateDown migration0)
2429 }
2530
26−-- up
27−-- :: Migration schema0 schema1
28−-- -> Connection schema0
29−-- -> IO (MigrationResult, Connection schema1)
30−-- up (Migration mUp _) conn0 = do
31−-- (begin _conn0) <- runPQ (begin (TransactionMode ReadCommitted ReadWrite)) conn0
32−-- & pqThen (Prelude.id mUp `onException` rollback)
33−-- & pqBind (\ result ->
34−-- commit & pqThen (return result))
31+up
32+ :: Migration schema0 schema1
33+ -> K Connection schema0
34+ -> IO (K MigrationResult schema1)
35+up (Migration mUp _) = runPQ $
36+ begin (TransactionMode RepeatableRead ReadWrite)
37+ & pqThen mUp
38+ & pqBind ( \ result -> do
39+ commit >> return result
40+ )
3541
3642data MigrationResult
3743 = MigrationSuccess