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 +3/−1
- src/Database/Mbtiles.hs +44/−10
- src/Database/Mbtiles/Types.hs +1/−1
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