packages feed

mbtiles 0.3.0.0 → 0.4.0.0

raw patch · 3 files changed

+48/−12 lines, 3 filesdep +monad-controldep +resource-poolPVP ok

version bump matches the API change (PVP)

Dependencies added: monad-control, resource-pool

API changes (from Hackage documentation)

+ Database.Mbtiles: getMbtilesPool :: (MonadIO m) => FilePath -> m (Either MBTilesError MbtilesPool)
+ Database.Mbtiles: runMbtilesPoolT :: (MonadBaseControl IO m) => MbtilesPool -> MbtilesT m a -> m a
+ Database.Mbtiles: type MbtilesPool = Pool MbtilesData

Files

mbtiles.cabal view
@@ -1,5 +1,5 @@ name:                mbtiles-version:             0.3.0.0+version:             0.4.0.0 synopsis:            Haskell MBTiles client. description:         Read and manipulate MBTiles files and associated metadata. homepage:            https://github.com/caneroj1/mbtiles#readme@@ -23,7 +23,9 @@                      , sqlite-simple                      , bytestring                      , directory+                     , monad-control                      , mtl+                     , resource-pool                      , text                      , transformers                      , unordered-containers
src/Database/Mbtiles.hs view
@@ -11,10 +11,15 @@ an mbtiles database. There is also functionality for reading metadata from the database. +There is also functionality for creating a pool of connections to+an mbtiles database.+ See the associated README.md for basic usage examples. -} -{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings     #-}  module Database.Mbtiles (@@ -35,6 +40,11 @@ , runMbtilesT , runMbtiles +  -- ** Pooling+, MbtilesPool+, getMbtilesPool+, runMbtilesPoolT+   -- * Mbtiles read/write functionality , getTile , writeTile@@ -54,11 +64,13 @@ import           Control.Monad import           Control.Monad.IO.Class import           Control.Monad.Reader-import qualified Data.ByteString.Lazy     as BL-import           Data.HashMap.Strict      ((!))-import qualified Data.HashMap.Strict      as M hiding ((!))+import           Control.Monad.Trans.Control+import qualified Data.ByteString.Lazy        as BL+import           Data.HashMap.Strict         ((!))+import qualified Data.HashMap.Strict         as M hiding ((!)) import           Data.Monoid-import           Data.Text                (Text)+import           Data.Pool+import           Data.Text                   (Text) import           Database.Mbtiles.Query import           Database.Mbtiles.Types import           Database.Mbtiles.Utility@@ -81,15 +93,37 @@       v <- runReaderT (unMbtilesT mbt) m       closeAll m       return $ Right v-    mkMbtilesData c d =++-- | A pool of connections to an MBTiles database.+type MbtilesPool = Pool MbtilesData++-- | Given a path to an MBTiles file, create a connection pool+-- to an MBTiles database. This will perform the same validation as 'runMbtilesT'.+getMbtilesPool :: (MonadIO m) => FilePath -> m (Either MBTilesError MbtilesPool)+getMbtilesPool fp = do+  m <- validateMBTiles fp+  either (return . Left) (fmap Right . liftIO . buildPool) m+  where+    buildPool (_, d) =+      createPool (openConnection d) closeAll 1 900 1000+    openConnection d = open fp >>= flip mkMbtilesData d++-- | Given access to an 'MbtilesPool', run an action against that pool.+runMbtilesPoolT :: (MonadBaseControl IO m) => MbtilesPool -> MbtilesT m a -> m a+runMbtilesPoolT p mbt = withResource p (runReaderT (unMbtilesT mbt))++type ValidationResult = (Connection, MbtilesMeta)++closeAll :: (MonadIO m) => MbtilesData -> m ()+closeAll MbtilesData{r = rs, conn = c} =+      closeStmt rs >> closeConn c++mkMbtilesData :: (MonadIO m) => Connection -> MbtilesMeta -> m MbtilesData+mkMbtilesData c d =       MbtilesData <$>         openStmt c getTileQuery <*>         pure c                  <*>         pure d-    closeAll MbtilesData{r = rs, conn = c} =-      closeStmt rs >> closeConn c--type ValidationResult = (Connection, MbtilesMeta)  validateMBTiles :: (MonadIO m) => FilePath -> m (Either MBTilesError ValidationResult) validateMBTiles mbtilesPath = liftIO $
src/Database/Mbtiles/Types.hs view
@@ -63,7 +63,7 @@ instance ToTile BL.ByteString where   toTile = id --- | Typeclass representing data types intp which raw tile data can+-- | Typeclass representing data types into which raw tile data can -- be converted. class FromTile a where   fromTile :: BL.ByteString -> a