packages feed

snaplet-hdbc 0.7.1.1 → 0.7.2

raw patch · 3 files changed

+37/−83 lines, 3 filesdep +MonadCatchIO-transformersdep +resource-pool-catchiodep −lifted-basedep −monad-controldep −resource-poolPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: MonadCatchIO-transformers, resource-pool-catchio

Dependencies removed: lifted-base, monad-control, resource-pool, transformers-base

API changes (from Hackage documentation)

- Snap.Snaplet.Hdbc: class (IConnection c, ConnSrc s, MonadBaseControl IO m) => HasHdbc m c s | m -> c s
+ Snap.Snaplet.Hdbc: class (IConnection c, ConnSrc s, MonadCatchIO m) => HasHdbc m c s | m -> c s
- Snap.Snaplet.Hdbc: hdbcInit :: (ConnSrc s, IConnection c, MonadBase IO (Initializer b (HdbcSnaplet c s))) => s c -> SnapletInit b (HdbcSnaplet c s)
+ Snap.Snaplet.Hdbc: hdbcInit :: (ConnSrc s, IConnection c) => s c -> SnapletInit b (HdbcSnaplet c s)
- Snap.Snaplet.Hdbc.Types: closeConn :: (ConnSrc s, MonadBaseControl IO m, IConnection c) => HdbcSnaplet c s -> c -> m ()
+ Snap.Snaplet.Hdbc.Types: closeConn :: (ConnSrc s, MonadCatchIO m, IConnection c) => HdbcSnaplet c s -> c -> m ()
- Snap.Snaplet.Hdbc.Types: withConn :: (ConnSrc s, MonadBaseControl IO m, IConnection c) => HdbcSnaplet c s -> (c -> m b) -> m b
+ Snap.Snaplet.Hdbc.Types: withConn :: (ConnSrc s, MonadCatchIO m, IConnection c) => HdbcSnaplet c s -> (c -> m b) -> m b

Files

snaplet-hdbc.cabal view
@@ -1,5 +1,5 @@ name:           snaplet-hdbc-version:        0.7.1.1+version:        0.7.2 synopsis:       HDBC snaplet for Snap Framework description:    This snaplet consists of two parts: an HDBC abstraction snaplet                 and an HDBC authentication backend for Snap's authentication@@ -28,24 +28,22 @@     Snap.Snaplet.Hdbc.Types    build-depends:-    base                      >= 4       && < 5,-    bytestring                >= 0.9.1   && < 0.10,-    clientsession             >= 0.7.2   && < 0.8,-    containers                >= 0.3     && < 0.5,-    convertible               >= 1.0     && < 1.1,-    data-lens                 >= 2.0.1   && < 2.1,-    data-lens-template        >= 2.1     && < 2.2,-    HDBC                      >= 2.2     && < 2.4,-    lifted-base               >= 0.1     && < 0.2,-    mtl                       >  2.0     && < 2.1,-    monad-control             >= 0.2     && < 0.4,-    resource-pool             >= 0.2     && < 0.3,-    snap                      >= 0.6     && < 0.8,-    text                      >= 0.11    && < 0.12,-    time                      >= 1.1     && < 1.5,-    transformers              >= 0.2     && < 0.3,-    transformers-base         >= 0.2     && < 0.5,-    unordered-containers      >= 0.1.4   && < 0.2+    base                       >= 4       && < 5,+    bytestring                 >= 0.9.1   && < 0.10,+    clientsession              >= 0.7.2   && < 0.8,+    containers                 >= 0.3     && < 0.5,+    convertible                >= 1.0     && < 1.1,+    data-lens                  >= 2.0.1   && < 2.1,+    data-lens-template         >= 2.1     && < 2.2,+    HDBC                       >= 2.2     && < 2.4,+    MonadCatchIO-transformers  >= 0.2.1   && < 0.3,+    mtl                        >  2.0     && < 2.1,+    resource-pool-catchio      >= 0.2     && < 0.3,+    snap                       >= 0.6     && < 0.8,+    text                       >= 0.11    && < 0.12,+    time                       >= 1.1     && < 1.5,+    transformers               >= 0.2     && < 0.3,+    unordered-containers       >= 0.1.4   && < 0.2    ghc-options: -Wall -fwarn-tabs -funbox-strict-fields                -fno-warn-orphans -fno-warn-unused-do-bind
src/Snap/Snaplet/Hdbc.hs view
@@ -1,10 +1,10 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-}  -- | This module provides a very thin wrapper around HDBC. It wraps some of the -- HDBC functions in more convenient functions and re-exports the rest of the@@ -79,6 +79,9 @@ import            Prelude hiding (catch)  import            Control.Concurrent.MVar+import            Control.Exception (SomeException)+import            Control.Monad.CatchIO+import            Control.Monad.IO.Class import            Data.Map (Map) import            Data.Pool import qualified  Database.HDBC as HDBC@@ -87,18 +90,6 @@ import            Snap.Snaplet import            Snap.Snaplet.Hdbc.Types -#if MIN_VERSION_monad_control(0,3,0)-import Control.Monad.Trans.Control (MonadBaseControl)-import Control.Monad.Base-import Control.Exception.Lifted-#else-import Control.Monad.IO.Control (MonadControlIO(..))-import Control.Monad.IO.Class (liftIO)-import Control.Exception.Control hiding (Handler)-#define control controlIO-#define liftBase liftIO-#endif- -- | A map with the column name as key and the value from the database as value type Row = Map String SqlValue @@ -107,24 +98,11 @@ -- can find the connection source. class  (  IConnection c        ,  ConnSrc s-#if MIN_VERSION_monad_control(0,3,0)-       ,  MonadBaseControl IO m-#else-       ,  MonadControlIO m-#endif+       ,  MonadCatchIO m        )   =>   HasHdbc m c s | m -> c s where   getHdbcState :: m (HdbcSnaplet c s) --- | This is (hopefully) a temporary instance, which will disppear once the--- entire snap framework is switched to monad-control.-#if MIN_VERSION_monad_control(0,3,0)--#else-instance MonadControlIO (Handler b v) where-  liftControlIO f = liftBase (f return)-#endif- type HdbcIO    c = HdbcSnaplet c IO type HdbcPool  c = HdbcSnaplet c Pool @@ -137,14 +115,11 @@ hdbcInit   ::  (  ConnSrc s       ,  IConnection c-#if MIN_VERSION_monad_control(0,3,0)-      ,  MonadBase IO (Initializer b (HdbcSnaplet c s))-#endif       )   =>  s c   ->  SnapletInit b (HdbcSnaplet c s) hdbcInit src = makeSnaplet "hdbc" "HDBC abstraction" Nothing $ do-  mv <- liftBase newEmptyMVar+  mv <- liftIO newEmptyMVar   return $ HdbcSnaplet src mv  @@ -153,7 +128,7 @@ withHdbc :: HasHdbc m c s => (c -> IO a) -> m a withHdbc f = do   st <- getHdbcState-  withConn st (liftBase . f)+  withConn st (liftIO . f)  -- | Get a new connection from the resource pool, apply the provided function -- to it and return the result in of the compution in monad 'm'.@@ -173,8 +148,8 @@                  --   row. Can be the empty list. query sql bind = do   stmt <- prepare sql-  liftBase $ HDBC.execute stmt bind-  liftBase $ HDBC.fetchAllRowsMap stmt+  liftIO $ HDBC.execute stmt bind+  liftIO $ HDBC.fetchAllRowsMap stmt  -- | Similar to 'query', but instead of returning a list of 'Row's, it returns -- an 'Integer' indicating the numbers of affected rows. This is typically used@@ -183,13 +158,13 @@ query' :: HasHdbc m c s => String -> [SqlValue] -> m Integer query' sql bind = withTransaction $ \conn -> do   stmt <- HDBC.prepare conn sql-  liftBase $ HDBC.execute stmt bind+  liftIO $ HDBC.execute stmt bind  -- query' below doesn't work that well, due to withTransaction' {- query' :: HasHdbc m c s => String -> [SqlValue] -> m Integer-} {- query' sql bind = withTransaction' $ do-}   {- stmt <- prepare sql-}-  {- liftBase $ HDBC.execute stmt bind-}+  {- liftIO $ HDBC.execute stmt bind-}  -- | Run an action inside a transaction. If the action throws an exception, the -- transaction will be rolled back, and the exception rethrown.@@ -212,11 +187,7 @@   commit   return r   where  doRollback = rollback `catch` doRollbackHandler-#if MIN_VERSION_monad_control(0,3,0)-         doRollbackHandler :: MonadBaseControl IO m => SomeException -> m ()-#else-         doRollbackHandler :: MonadControlIO m => SomeException -> m ()-#endif+         doRollbackHandler :: MonadCatchIO m => SomeException -> m ()          doRollbackHandler _ = return ()  -- | The functions provided below are wrappers around the original HDBC
src/Snap/Snaplet/Hdbc/Types.hs view
@@ -1,24 +1,15 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleContexts #-}  module Snap.Snaplet.Hdbc.Types where  import            Control.Concurrent.MVar+import            Control.Monad.CatchIO import            Control.Monad.State import            Database.HDBC (IConnection()) import qualified  Database.HDBC as HDBC import            Data.Pool -#if MIN_VERSION_monad_control(0,3,0)-import Control.Monad.Trans.Control (MonadBaseControl)-import Control.Monad.Base (liftBase)-#else-import Control.Monad.IO.Control (MonadControlIO)-#define control controlIO-#define liftBase liftIO-#endif- -- | The snaplet state type containing a resource pool, parameterised by a raw -- HDBC connection. data HdbcSnaplet c s@@ -27,15 +18,9 @@   {   connSrc  :: s c   ,   connVar  :: MVar c } -#if MIN_VERSION_monad_control(0,3,0) class ConnSrc s where-  withConn   :: (MonadBaseControl IO m, IConnection c) => HdbcSnaplet c s -> (c -> m b) -> m b-  closeConn  :: (MonadBaseControl IO m, IConnection c) => HdbcSnaplet c s -> c -> m ()-#else-class ConnSrc s where-  withConn   :: (MonadControlIO m, IConnection c) => HdbcSnaplet c s -> (c -> m b) -> m b-  closeConn  :: (MonadControlIO m, IConnection c) => HdbcSnaplet c s -> c -> m ()-#endif+  withConn   :: (MonadCatchIO m, IConnection c) => HdbcSnaplet c s -> (c -> m b) -> m b+  closeConn  :: (MonadCatchIO m, IConnection c) => HdbcSnaplet c s -> c -> m ()  instance ConnSrc Pool where   withConn       = withResource . connSrc@@ -44,12 +29,12 @@ instance ConnSrc IO where   withConn st fn = do     let cv = connVar st-    emp   <-  liftBase $ isEmptyMVar cv+    emp   <-  liftIO $ isEmptyMVar cv     conn  <-  if emp                 then do-                  conn <- liftBase $ connSrc st-                  liftBase $ putMVar cv conn+                  conn <- liftIO $ connSrc st+                  liftIO $ putMVar cv conn                   return conn-                else liftBase $ readMVar cv+                else liftIO $ readMVar cv     fn conn-  closeConn _  = liftBase . HDBC.disconnect+  closeConn _  = liftIO . HDBC.disconnect