hmemdb 0.1.0.1 → 0.1.0.2
raw patch · 4 files changed
+15/−6 lines, 4 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Data.HMemDb: foldTable_ :: (a -> MS b) -> Table a -> STM ()
Files
- hmemdb.cabal +1/−1
- src/Data/HMemDb.hs +3/−2
- src/Data/HMemDb/Persistence.hs +1/−1
- src/Data/HMemDb/Tables.hs +10/−2
hmemdb.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: hmemdb -version: 0.1.0.1 +version: 0.1.0.2 synopsis: In-memory relational database description: Library that provides a sort of relational database in memory (which could be saved to the disk, however). Very untested. license: BSD3
src/Data/HMemDb.hs view
@@ -9,6 +9,7 @@ SP, -- * Tables Table, + foldTable_, TableVar, TableVarS, forTV, @@ -54,6 +55,6 @@ (ColSpec, FullSpec(FullSpec, keySpec, tabSpec), Keys(Keys), KeySpec, TableSpec(TableSpec), key, nonunique, val, unique, (:+:)((:+:))) -import Data.HMemDb.Tables (Table) +import Data.HMemDb.Tables (Table, foldTable_) import Data.HMemDb.TableVars - (TableVar, TableVarS, deleteTV, forTV, insert, modifyTV, readTV)+ (TableVar, TableVarS, deleteTV, forTV, insert, modifyTV, readTV)
src/Data/HMemDb/Persistence.hs view
@@ -58,4 +58,4 @@ do writeTVar (tabCount pt) tC for_ pairs (runMaybeT . insertRefIntoTable pt) return (Table pt, uf) - in genPairs `oBind` insPairs+ in genPairs `oBind` insPairs
src/Data/HMemDb/Tables.hs view
@@ -4,13 +4,15 @@ PreTable(PreTable, tabCount, tabContent, tabConv, tabIndices), Table(Table), deleteFromTable, + foldTable_, insertIntoTable, insertRefIntoTable, modifyInTable ) where -import Control.Concurrent.STM (TVar, modifyTVar', newTVar, readTVar, writeTVar) +import Control.Concurrent.STM (STM, TVar, modifyTVar', newTVar, readTVar, writeTVar) import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Maybe (runMaybeT) +import Control.Monad.Trans.Maybe (MaybeT(MaybeT, runMaybeT)) +import Data.Foldable (for_) import qualified Data.Map as M (Map, delete, insert) import Data.HMemDb.Bin (Bin) import Data.HMemDb.Binary (MS) @@ -68,3 +70,9 @@ lift $ modifyInKeys new ref $ tabIndices pt lift $ writeTVar (refContent ref) $ Just r return old +foldTable_ :: (a -> MS b) -> Table a -> STM () +-- ^ This function traverses through all values in the table, applying the same action +-- to all of them. Errors are silently ignored. +foldTable_ h (Table pt) = + do mp <- readTVar $ tabContent pt + for_ mp $ \tv -> runMaybeT $ MaybeT (readTVar tv) >>= rcTo (tabConv pt) >>= h