packages feed

multipool-postgresql-simple 0.1.0.0 → 0.1.0.1

raw patch · 2 files changed

+32/−5 lines, 2 filesdep +bytestring

Dependencies added: bytestring

Files

multipool-postgresql-simple.cabal view
@@ -4,13 +4,13 @@ -- -- see: https://github.com/sol/hpack ----- hash: f2bcbf30da1024a0caf8fbeb2fd53d077c9e959a4a278b878d870e5e485bec9c+-- hash: 304274c5ff58ce1332b1894a0b87afacaf378ec9fbd51f7a53ce9450e08dbdde  name:           multipool-postgresql-simple-version:        0.1.0.0+version:        0.1.0.1 description:    Please see the README on GitHub at <https://github.com/iand675/multipool-postgresql-simple#readme>-homepage:       https://github.com/iand675/multipool-postgresql-simple#readme-bug-reports:    https://github.com/iand675/multipool-postgresql-simple/issues+homepage:       https://github.com/iand675/multipool#readme+bug-reports:    https://github.com/iand675/multipool/issues author:         Ian Duncan maintainer:     ian@iankduncan.com copyright:      Ian Duncan@@ -23,7 +23,7 @@  source-repository head   type: git-  location: https://github.com/iand675/multipool-postgresql-simple+  location: https://github.com/iand675/multipool  library   exposed-modules:@@ -34,6 +34,7 @@       src   build-depends:       base >=4.7 && <5+    , bytestring     , mtl     , multipool     , postgresql-simple@@ -52,6 +53,7 @@   ghc-options: -threaded -rtsopts -with-rtsopts=-N   build-depends:       base >=4.7 && <5+    , bytestring     , mtl     , multipool     , multipool-postgresql-simple
src/Data/MultiPool/PostgreSQLSimple.hs view
@@ -16,11 +16,36 @@ import Control.Exception import Control.Monad.IO.Unlift import Control.Monad.Reader+import Data.ByteString.Char8 (ByteString) import Data.Pool import Data.MultiPool import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HM import Database.PostgreSQL.Simple++initMultiPool ::+     (MonadUnliftIO m)+  => ByteString+  -> Int+  -> [(InstanceName Connection, ByteString, Int)]+  -> m (MultiPool Connection)+initMultiPool mc mn rl = do+  rr <- roundRobin $ map (\(i, _, _) -> i) rl+  initMultiPool' rr mc mn rl++initMultiPool' ::+     (MonadUnliftIO m)+  => (MultiPool Connection -> IO (Maybe (InstanceName Connection))) -- Strategy for selectin the replica instance when calling 'runReadAny'. 'roundRobin' is the current default.+  -> ByteString -- ^ Master connection string+  -> Int -- ^ Max number of connections to master instance+  -> [(InstanceName Connection, ByteString, Int)] -- ^ Replica connection details+  -> m (MultiPool Connection)+initMultiPool' multiPoolAnyReplicaSelector str n is = do+  multiPoolMaster <- liftIO $ createPool (connectPostgreSQL str) close n 15 1+  replicas <- liftIO $ mapM (\(inst, connStr, numConns) -> (,) <$> pure inst <*> createPool (connectPostgreSQL connStr) close numConns 15 1) is+  let multiPoolReplica = HM.fromList replicas+      multiPoolAnyMasterSelector = const $ pure ()+  return $ MultiPool {..}  withResource' :: MonadUnliftIO m => Pool a -> (a -> m b) -> m b withResource' pool action =