on dev help sign in
testing
commit395ba9a9ae332f0ee114495c6735f0a118a15ecf authorEitan Chatav <eitan@Eitans-MacBook-Pro.local> dateSun 23 Jun 2019, 21:07 (7 years ago) parent5afb291
3 files changed+28−11
squeal-postgresql/squeal-postgresql.cabal+1 squeal-postgresql/src/Squeal/PostgreSQL.hs+1 squeal-postgresql/test/Specs/ExceptionHandling.hs+26−11
squeal-postgresql/squeal-postgresql.cabal+1
@@ -98,6 +98,7 @@ test-suite squeal-postgresql-specs
9898 other-modules: ExceptionHandling
9999 build-depends:
100100 base >= 4.10.0.0
101+ , async >= 2.2.2
101102 , bytestring >= 0.10.8.2
102103 , generics-sop >= 0.3.1.0
103104 , hspec >= 2.4.8
squeal-postgresql/src/Squeal/PostgreSQL.hs+1
@@ -217,6 +217,7 @@ import Squeal.PostgreSQL.List as X
217217import Squeal.PostgreSQL.Manipulation as X
218218import Squeal.PostgreSQL.Migration as X
219219import Squeal.PostgreSQL.PG as X
220+import Squeal.PostgreSQL.Pool as X
220221import Squeal.PostgreSQL.PQ as X
221222import Squeal.PostgreSQL.Query as X
222223import Squeal.PostgreSQL.Render (RenderSQL(..), printSQL)
squeal-postgresql/test/Specs/ExceptionHandling.hs+26−11
@@ -12,19 +12,21 @@
1212module ExceptionHandling
1313 ( specs
1414 , User (..)
15− )
16−where
15+ ) where
1716
18−import Control.Monad (void)
17+import Control.Concurrent.Async (replicateConcurrently)
18+import Control.Monad (void)
1919import Control.Monad.IO.Class (MonadIO (..))
20−import qualified Data.ByteString.Char8 as Char8
21−import Data.Int (Int16)
22−import Data.Text (Text)
23−import Data.Vector (Vector)
24−import qualified Generics.SOP as SOP
25−import qualified GHC.Generics as GHC
26−import Squeal.PostgreSQL
27−import Test.Hspec
20+import Data.Int (Int16)
21+import Data.Text (Text)
22+import Data.Vector (Vector)
23+import Test.Hspec
24+
25+import qualified Data.ByteString.Char8 as Char8
26+import qualified Generics.SOP as SOP
27+import qualified GHC.Generics as GHC
28+
29+import Squeal.PostgreSQL
2830
2931type Schema =
3032 '[ "users" ::: 'Table (
@@ -123,3 +125,16 @@ specs = before_ setupDB $ after_ dropDB $
123125 it "should be rethrown for unique constraint violation in a manipulation by a transaction" $
124126 withConnection connectionString (transactionally_ insertUserTwice)
125127 `shouldThrow` (== dupKeyErr)
128+
129+ it "should handle concurrent transactions using pooled connections" $ do
130+ pool <- createConnectionPool
131+ "host=localhost port=5432 dbname=exampledb" 1 0.5 10
132+ let
133+ query :: Query_ (Public '[]) () (Only Char)
134+ query = values_ (literal 'a' `as` #fromOnly)
135+ session = useConnectionPool pool . transactionally_ $ do
136+ result <- runQuery query
137+ Just (Only chr) <- firstRow result
138+ return chr
139+ chrs <- replicateConcurrently 10 session
140+ chrs `shouldSatisfy` (all (== 'a'))