packages feed

hasql-pool 1.1 → 1.2

raw patch · 12 files changed

+75/−55 lines, 12 filesdep ~hasqlbinary-addedPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: hasql

API changes (from Hackage documentation)

- Hasql.Pool: SessionUsageError :: QueryError -> UsageError
+ Hasql.Pool: SessionUsageError :: SessionError -> UsageError
- Hasql.Pool.Observation: InitializationErrorTerminationReason :: QueryError -> ConnectionTerminationReason
+ Hasql.Pool.Observation: InitializationErrorTerminationReason :: SessionError -> ConnectionTerminationReason
- Hasql.Pool.Observation: SessionFailedConnectionReadyForUseReason :: QueryError -> ConnectionReadyForUseReason
+ Hasql.Pool.Observation: SessionFailedConnectionReadyForUseReason :: SessionError -> ConnectionReadyForUseReason

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+# 1.2++- Migrated to `hasql-1.7`+- Changed references to `QueryError` in observations to `SessionError`+ # 1.1  - `ReadyForUseConnectionStatus` got extended with the `ConnectionReadyForUseReason` details.
+ diagrams-output/connection-status-model.png view

binary file changed (absent → 16434 bytes)

− diagrams-output/observation-status-model.png

binary file changed (16434 → absent bytes)

hasql-pool.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: hasql-pool-version: 1.1+version: 1.2 category: Hasql, Database, PostgreSQL synopsis: Pool of connections for Hasql homepage: https://github.com/nikita-volkov/hasql-pool@@ -22,7 +22,10 @@   location: git://github.com/nikita-volkov/hasql-pool.git  common base-settings+  default-language: Haskell2010   default-extensions:+    ApplicativeDo+    Arrows     BangPatterns     BlockArguments     ConstraintKinds@@ -40,33 +43,28 @@     FunctionalDependencies     GADTs     GeneralizedNewtypeDeriving-    InstanceSigs+    ImportQualifiedPost     LambdaCase     LiberalTypeSynonyms-    MagicHash     MultiParamTypeClasses     MultiWayIf     NoImplicitPrelude     NoMonomorphismRestriction     NumericUnderscores     OverloadedStrings-    ParallelListComp     PatternGuards     QuasiQuotes     RankNTypes     RecordWildCards+    RoleAnnotations     ScopedTypeVariables     StandaloneDeriving     StrictData-    TemplateHaskell     TupleSections     TypeApplications     TypeFamilies     TypeOperators-    UnboxedTuples -  default-language: Haskell2010- library   import: base-settings   hs-source-dirs:@@ -85,11 +83,12 @@     Hasql.Pool.Config.Config     Hasql.Pool.Config.Setting     Hasql.Pool.Prelude+    Hasql.Pool.SessionErrorDestructors    build-depends:     base >=4.11 && <5,     bytestring >=0.10 && <0.14,-    hasql >=1.6.0.1 && <1.7,+    hasql >=1.7 && <1.8,     stm >=2.5 && <3,     text >=1.2 && <3,     time >=1.9 && <2,
src/library/exposed/Hasql/Pool.hs view
@@ -10,15 +10,16 @@   ) where -import qualified Data.Text.Encoding as Text-import qualified Data.Text.Encoding.Error as Text-import qualified Data.UUID.V4 as Uuid+import Data.Text.Encoding qualified as Text+import Data.Text.Encoding.Error qualified as Text+import Data.UUID.V4 qualified as Uuid import Hasql.Connection (Connection)-import qualified Hasql.Connection as Connection-import qualified Hasql.Pool.Config.Config as Config+import Hasql.Connection qualified as Connection+import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation import Hasql.Pool.Prelude-import qualified Hasql.Session as Session+import Hasql.Pool.SessionErrorDestructors qualified as ErrorsDestruction+import Hasql.Session qualified as Session  -- | A connection tagged with metadata. data Entry = Entry@@ -175,11 +176,12 @@           Session.run poolInitSession connection >>= \case             Left err -> do               Connection.release connection-              case err of-                Session.QueryError _ _ (Session.ClientError details) -> do-                  poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))-                _ ->-                  poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err)))+              ErrorsDestruction.reset+                ( \details -> do+                    poolObserver (ConnectionObservation id (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))+                )+                (poolObserver (ConnectionObservation id (TerminatedConnectionStatus (InitializationErrorTerminationReason err))))+                err               return $ Left $ SessionUsageError err             Right () -> do               poolObserver (ConnectionObservation id (ReadyForUseConnectionStatus EstablishedConnectionReadyForUseReason))@@ -209,16 +211,20 @@         Left exc -> do           returnConn           throwIO exc-        Right (Left err) -> case err of-          Session.QueryError _ _ (Session.ClientError details) -> do-            Connection.release (entryConnection entry)-            atomically $ modifyTVar' poolCapacity succ-            poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))-            return $ Left $ SessionUsageError err-          _ -> do-            returnConn-            poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err)))-            return $ Left $ SessionUsageError err+        Right (Left err) ->+          ErrorsDestruction.reset+            ( \details -> do+                Connection.release (entryConnection entry)+                atomically $ modifyTVar' poolCapacity succ+                poolObserver (ConnectionObservation (entryId entry) (TerminatedConnectionStatus (NetworkErrorConnectionTerminationReason (fmap (Text.decodeUtf8With Text.lenientDecode) details))))+                return $ Left $ SessionUsageError err+            )+            ( do+                returnConn+                poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus (SessionFailedConnectionReadyForUseReason err)))+                return $ Left $ SessionUsageError err+            )+            err         Right (Right res) -> do           returnConn           poolObserver (ConnectionObservation (entryId entry) (ReadyForUseConnectionStatus SessionSucceededConnectionReadyForUseReason))@@ -239,7 +245,7 @@   = -- | Attempt to establish a connection failed.     ConnectionUsageError Connection.ConnectionError   | -- | Session execution failed.-    SessionUsageError Session.QueryError+    SessionUsageError Session.SessionError   | -- | Timeout acquiring a connection.     AcquisitionTimeoutUsageError   deriving (Show, Eq)
src/library/exposed/Hasql/Pool/Config.hs view
@@ -14,8 +14,8 @@   ) where -import qualified Hasql.Pool.Config.Config as Config-import qualified Hasql.Pool.Config.Setting as Setting+import Hasql.Pool.Config.Config qualified as Config+import Hasql.Pool.Config.Setting qualified as Setting import Hasql.Pool.Prelude  -- | Compile config from a list of settings.
src/library/exposed/Hasql/Pool/Config/Defaults.hs view
@@ -1,9 +1,9 @@ module Hasql.Pool.Config.Defaults where -import qualified Hasql.Connection as Connection+import Hasql.Connection qualified as Connection import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude-import qualified Hasql.Session as Session+import Hasql.Session qualified as Session  -- | -- 3 connections.
src/library/exposed/Hasql/Pool/Observation.hs view
@@ -5,7 +5,7 @@ module Hasql.Pool.Observation where  import Hasql.Pool.Prelude-import qualified Hasql.Session as Session+import Hasql.Session qualified as Session  -- | An observation of a change of the state of a pool. data Observation@@ -20,7 +20,7 @@  -- | Status of a connection. ----- <<diagrams-output/observation-status-model.png>>+-- <<diagrams-output/connection-status-model.png>> data ConnectionStatus   = -- | Connection is being established.     --@@ -40,7 +40,7 @@   = -- | Connection just got established.     EstablishedConnectionReadyForUseReason   | -- | Session execution ended with a failure that does not require a connection reset.-    SessionFailedConnectionReadyForUseReason Session.QueryError+    SessionFailedConnectionReadyForUseReason Session.SessionError   | -- | Session execution ended with success.     SessionSucceededConnectionReadyForUseReason   deriving (Show, Eq)@@ -56,5 +56,5 @@   | -- | User has invoked the 'Hasql.Pool.release' procedure.     ReleaseConnectionTerminationReason   | -- | Initialization session failure.-    InitializationErrorTerminationReason Session.QueryError+    InitializationErrorTerminationReason Session.SessionError   deriving (Show, Eq)
src/library/other/Hasql/Pool/Config/Config.hs view
@@ -1,10 +1,10 @@ module Hasql.Pool.Config.Config where -import qualified Hasql.Connection as Connection-import qualified Hasql.Pool.Config.Defaults as Defaults+import Hasql.Connection qualified as Connection+import Hasql.Pool.Config.Defaults qualified as Defaults import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude-import qualified Hasql.Session as Session+import Hasql.Session qualified as Session  -- | Configufation for Hasql connection pool. data Config = Config
src/library/other/Hasql/Pool/Config/Setting.hs view
@@ -1,11 +1,11 @@ module Hasql.Pool.Config.Setting where -import qualified Hasql.Connection as Connection+import Hasql.Connection qualified as Connection import Hasql.Pool.Config.Config (Config)-import qualified Hasql.Pool.Config.Config as Config+import Hasql.Pool.Config.Config qualified as Config import Hasql.Pool.Observation (Observation) import Hasql.Pool.Prelude-import qualified Hasql.Session as Session+import Hasql.Session qualified as Session  apply :: Setting -> Config -> Config apply (Setting run) = run
+ src/library/other/Hasql/Pool/SessionErrorDestructors.hs view
@@ -0,0 +1,10 @@+module Hasql.Pool.SessionErrorDestructors where++import Hasql.Pool.Prelude+import Hasql.Session qualified as Session++reset :: (Maybe ByteString -> x) -> x -> Session.SessionError -> x+reset onReset onNoReset = \case+  Session.QueryError _ _ (Session.ClientError details) -> onReset details+  Session.PipelineError (Session.ClientError details) -> onReset details+  _ -> onNoReset
src/test/Main.hs view
@@ -1,17 +1,17 @@ module Main where  import Control.Concurrent.Async (race)-import qualified Data.ByteString.Char8 as B8-import qualified Data.Text as Text-import qualified Hasql.Connection as Connection-import qualified Hasql.Decoders as Decoders-import qualified Hasql.Encoders as Encoders+import Data.ByteString.Char8 qualified as B8+import Data.Text qualified as Text+import Hasql.Connection qualified as Connection+import Hasql.Decoders qualified as Decoders+import Hasql.Encoders qualified as Encoders import Hasql.Pool-import qualified Hasql.Pool.Config as Config-import qualified Hasql.Session as Session-import qualified Hasql.Statement as Statement-import qualified System.Environment-import qualified System.Random.Stateful as Random+import Hasql.Pool.Config qualified as Config+import Hasql.Session qualified as Session+import Hasql.Statement qualified as Statement+import System.Environment qualified+import System.Random.Stateful qualified as Random import Test.Hspec import Prelude