11module Test.Main where
22
3- import Database.Postgres
4- import Database.Postgres.SqlValue
53import Debug.Trace
64import Control.Monad.Eff
75import Control.Monad.Eff.Class
86import Control.Monad.Cont.Trans
97import Control.Monad.Trans
8+ import Control.Monad.Error.Class (throwError )
9+ import Control.Monad.Eff.Exception (error )
1010import Data.Array
1111import Data.Foldable
1212import Data.Either
@@ -16,6 +16,10 @@ import Data.Foreign.Class
1616import Data.Foreign.Index
1717import Control.Monad.Aff
1818
19+ import Database.Postgres
20+ import Database.Postgres.SqlValue
21+ import Database.Postgres.Transaction
22+
1923main = runAff (trace <<< show) (const $ trace " All ok" ) $ do
2024 liftEff <<< trace $ " connecting to " <> mkConnectionString connectionInfo <> " ..."
2125 exampleUsingWithConnection
@@ -26,6 +30,8 @@ main = runAff (trace <<< show) (const $ trace "All ok") $ do
2630
2731 exampleQueries
2832
33+ exampleTransaction
34+
2935 liftEff $ disconnect
3036
3137data Artist = Artist
@@ -74,6 +80,17 @@ exampleQueries = withClient connectionInfo $ \c -> do
7480 artists <- query (Query " select * from artist where name = $1" :: Query Artist ) [toSql " Toto" ] c
7581 liftEff $ printRows artists
7682
83+ exampleTransaction :: forall eff . Aff (db :: DB | eff ) Unit
84+ exampleTransaction = withConnection connectionInfo $ \c -> do
85+ execute_ (Query " delete from artist" ) c
86+ apathize $ tryInsert c
87+ one <- queryOne_ (Query " select * from artist" :: Query Artist ) c
88+ liftEff $ trace $ show one
89+ where
90+ tryInsert = withTransaction $ \c -> do
91+ execute_ (Query " insert into artist values ('Not there', 1999)" ) c
92+ throwError $ error " fail"
93+
7794printRows :: forall a eff . (Show a ) => [a ] -> Eff (trace :: Trace | eff ) Unit
7895printRows rows = trace $ " result:\n " <> foldMap stringify rows
7996 where stringify = show >>> flip (<>) " \n "
0 commit comments