hasql-transaction 0.9.1 → 0.10
raw patch · 3 files changed
+6/−26 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Hasql.Transaction: instance GHC.Base.Alternative Hasql.Transaction.Transaction
+ Hasql.Transaction: instance Data.Functor.Alt.Alt Hasql.Transaction.Transaction
Files
- hasql-transaction.cabal +1/−1
- library/Hasql/Transaction.hs +2/−3
- library/Hasql/Transaction/Sessions.hs +3/−22
hasql-transaction.cabal view
@@ -1,5 +1,5 @@ name: hasql-transaction-version: 0.9.1+version: 0.10 category: Hasql, Database, PostgreSQL synopsis: Composable abstraction over retryable transactions for Hasql homepage: https://github.com/nikita-volkov/hasql-transaction
library/Hasql/Transaction.hs view
@@ -78,9 +78,8 @@ select (Transaction mode1 level1 list1) (Transaction mode2 level2 list2) = Transaction (max mode1 mode2) (max level1 level2) (select <$> list1 <*> list2) -instance Alternative Transaction where- empty = Transaction minBound minBound []- (<|>) (Transaction mode1 level1 list1) (Transaction mode2 level2 list2) =+instance Alt Transaction where+ (<!>) (Transaction mode1 level1 list1) (Transaction mode2 level2 list2) = Transaction (max mode1 mode2) (max level1 level2) (list1 <> list2) {-|
library/Hasql/Transaction/Sessions.hs view
@@ -14,34 +14,15 @@ import qualified Hasql.Transaction.Statements as Statements -inRetryingTransaction :: Mode -> Level -> Session (a, Condemnation) -> Session a-inRetryingTransaction mode isolation session =- fix $ \ recur -> catchError normal (onError recur)- where- normal =- do- statement () (Statements.beginTransaction mode isolation)- (result, condemnation) <- session- case condemnation of- Uncondemned -> statement () Statements.commitTransaction- Condemned -> statement () Statements.abortTransaction- return result- onError continue error =- do- statement () Statements.abortTransaction- case error of- QueryError _ _ (ResultError (ServerError "40001" _ _ _)) -> continue- _ -> throwError error- inAlternatingTransaction :: Mode -> Level -> [Session (a, Condemnation)] -> Session a-inAlternatingTransaction mode level sessions =+inAlternatingTransaction mode level = let loop = \ case session : sessionsTail -> tryTransaction mode level session >>= \ case Just a -> return a Nothing -> loop sessionsTail- _ -> loop sessions- in loop sessions+ _ -> error "Attempt to run no alternatives"+ in loop tryTransaction :: Mode -> Level -> Session (a, Condemnation) -> Session (Maybe a) tryTransaction mode level session = do