packages feed

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 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