packages feed

persistent-sql-lifted 0.4.1.0 → 0.4.2.0

raw patch · 4 files changed

+75/−5 lines, 4 filesdep +randomdep +vector

Dependencies added: random, vector

Files

CHANGELOG.md view
@@ -1,4 +1,8 @@-## [_Unreleased_](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.1.0...main)+## [_Unreleased_](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.2.0...main)++## [v0.4.2.0](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.1.0...persistent-sql-lifted-v0.4.2.0)++Add module `Database.Persist.Sql.Lifted.Savepoint`  ## [v0.4.1.0](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.0.0...persistent-sql-lifted-v0.4.1.0) 
+ library/Database/Persist/Sql/Lifted/Savepoint.hs view
@@ -0,0 +1,60 @@+module Database.Persist.Sql.Lifted.Savepoint+  ( rollbackWhen+  ) where++import Control.Applicative (pure)+import Control.Monad (replicateM)+import Control.Monad.IO.Class (MonadIO)+import Data.Bool (Bool)+import Data.Char (Char)+import Data.Function (($))+import Data.Functor ((<$>))+import Data.Semigroup ((<>))+import Data.Text (Text)+import Data.Text qualified as T+import Data.Vector (Vector)+import Data.Vector qualified as V+import Database.Persist.Sql.Lifted.MonadSqlBackend (MonadSqlBackend)+import Database.Persist.Sql.Lifted.Persistent (rawExecute)+import GHC.Stack (HasCallStack)+import System.Random (randomRIO)+import Prelude ((-))++--  | Create a new transaction @SAVEPOINT@, returning its name+newSavepoint :: (HasCallStack, MonadSqlBackend m) => m Text+newSavepoint = do+  r <- replicateM 8 randomCharacter+  let savepoint = "savepoint_" <> T.pack r+  rawExecute ("SAVEPOINT " <> savepoint) []+  pure savepoint++randomCharacter :: MonadIO m => m Char+randomCharacter = (characterSet V.!) <$> randomRIO (0, V.length characterSet - 1)++characterSet :: Vector Char+characterSet = V.fromList $ ['a' .. 'z'] <> ['1' .. '9']++--  | Release a @SAVEPOINT@+releaseSavepoint :: (HasCallStack, MonadSqlBackend m) => Text -> m ()+releaseSavepoint name = rawExecute ("RELEASE SAVEPOINT " <> name) []++--  | Rollback to a @SAVEPOINT@+rollbackToSavepoint+  :: (HasCallStack, MonadSqlBackend m) => Text -> m ()+rollbackToSavepoint name = rawExecute ("ROLLBACK TO SAVEPOINT " <> name) []++-- | Runs a SQL action with SAVEPOINT, rolling back when specified+rollbackWhen+  :: (HasCallStack, MonadSqlBackend m)+  => (a -> Bool)+  -- ^ When to ROLLBACK based on the result of the action+  -> m a+  -- ^ The action to be run+  -> m a+rollbackWhen shouldRollback act = do+  savepoint <- newSavepoint+  a <- act+  if shouldRollback a+    then rollbackToSavepoint savepoint+    else releaseSavepoint savepoint+  pure a
package.yaml view
@@ -1,5 +1,5 @@ name: persistent-sql-lifted-version: 0.4.1.0+version: 0.4.2.0  maintainer: Freckle Education category: Database@@ -54,6 +54,7 @@   - GADTs   - NoImplicitPrelude   - NoMonomorphismRestriction+  - OverloadedStrings  library:   source-dirs: library@@ -63,5 +64,7 @@     - esqueleto     - mtl     - persistent+    - random     - text     - unliftio-core+    - vector
persistent-sql-lifted.cabal view
@@ -1,6 +1,6 @@ cabal-version:      1.18 name:               persistent-sql-lifted-version:            0.4.1.0+version:            0.4.2.0 license:            MIT license-file:       LICENSE maintainer:         Freckle Education@@ -68,6 +68,7 @@         Database.Persist.Sql.Lifted.Query.Locking         Database.Persist.Sql.Lifted.Query.SetOperations         Database.Persist.Sql.Lifted.Query.Update+        Database.Persist.Sql.Lifted.Savepoint         Database.Persist.Sql.Lifted.Update      hs-source-dirs:     library@@ -75,7 +76,7 @@     default-language:   GHC2021     default-extensions:         ExplicitNamespaces FunctionalDependencies GADTs NoImplicitPrelude-        NoMonomorphismRestriction+        NoMonomorphismRestriction OverloadedStrings      ghc-options:         -fignore-optim-changes -fwrite-ide-info -Weverything@@ -92,8 +93,10 @@         esqueleto >=3.6.0.0,         mtl >=2.2.2,         persistent >=2.14.5.0,+        random >=1.2.1.1,         text >=1.2.5.0,-        unliftio-core >=0.2.1.0+        unliftio-core >=0.2.1.0,+        vector >=0.12.3.1      if impl(ghc >=9.8)         ghc-options: