packages feed

postgresql-connector (empty) → 0.1.0

raw patch · 4 files changed

+154/−0 lines, 4 filesdep +basedep +lensdep +mtlsetup-changed

Dependencies added: base, lens, mtl, postgresql-simple, resourcet, transformers-base

Files

+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Author name here (c) 2015++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Author name here nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ postgresql-connector.cabal view
@@ -0,0 +1,29 @@+name:                  postgresql-connector+version:               0.1.0+synopsis:              Initial project postgresql-connector from stack+description:           Please see README.md+homepage:              http://github.com/mfine/postgresql-connector+license:               BSD3+license-file:          LICENSE+author:                Mark Fine+maintainer:            Mark Fine <mark.fine@gmail.com>+copyright:             2015 Mark Fine+category:              Web+build-type:            Simple+cabal-version:         >= 1.10++library+  hs-source-dirs:      src+  exposed-modules:     Database.PostgreSQL.Connector+  ghc-options:         -Wall+  build-depends:       base >= 4.7 && < 5+                     , lens+                     , mtl+                     , postgresql-simple+                     , resourcet+                     , transformers-base+  default-language:    Haskell2010++source-repository head+  type:     git+  location: https://github.com/mfine/postgresql-connector
+ src/Database/PostgreSQL/Connector.hs view
@@ -0,0 +1,93 @@+{-# LANGUAGE ConstraintKinds            #-}+{-# LANGUAGE FlexibleInstances          #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses      #-}+{-# LANGUAGE TemplateHaskell            #-}+{-# LANGUAGE UndecidableInstances       #-}++-- |+-- Module:      Database.PostgreSQL.Connector+-- Copyright:   (c) 2015 Mark Fine+-- License:     BSD3+-- Maintainer:  Mark Fine <mark.fine@gmail.com>+--+-- PG Connector.++module Database.PostgreSQL.Connector where++import Control.Lens+import Control.Monad.Base+import Control.Monad.Reader+import Control.Monad.Trans.Resource+import Data.Int+import qualified Database.PostgreSQL.Simple as PG++newtype ConnectorT e m a = ConnectorT+  { unConnectorT :: ReaderT e m a+  } deriving ( Functor+             , Applicative+             , Monad+             , MonadIO+             , MonadReader e+             , MonadThrow+             )++instance MonadBase b m => MonadBase b (ConnectorT r m) where+  liftBase = liftBaseDefault++instance MonadTrans (ConnectorT r) where+  lift = ConnectorT . lift++instance MonadResource m => MonadResource (ConnectorT r m) where+  liftResourceT = lift . liftResourceT++newtype Conn = Conn+  { _connConnection :: PG.Connection+  }++$(makeClassy ''Conn)++type MonadConnector e m =+  ( MonadIO       m+  , MonadResource m+  , MonadReader e m+  , HasConn     e+  )++runConnectorT :: HasConn e => e -> ConnectorT e m a -> m a+runConnectorT e (ConnectorT m) = runReaderT m e++withTransaction :: MonadConnector e m => IO a -> m a+withTransaction action = do+  connection <- view connConnection+  liftIO $ PG.withTransaction connection action++query :: (MonadConnector e m, PG.ToRow q, PG.FromRow r) => PG.Query -> q -> m [r]+query q params = do+  connection <- view connConnection+  liftIO $ PG.query connection q params++query_ :: (MonadConnector e m, PG.FromRow r) => PG.Query -> m [r]+query_ q = do+  connection <- view connConnection+  liftIO $ PG.query_ connection q++execute :: (MonadConnector e m, PG.ToRow q) => PG.Query -> q -> m Int64+execute q params = do+  connection <- view connConnection+  liftIO $ PG.execute connection q params++executeMany :: (MonadConnector e m, PG.ToRow q) => PG.Query -> [q] -> m Int64+executeMany q params = do+  connection <- view connConnection+  liftIO $ PG.executeMany connection q params++execute_ :: MonadConnector e m => PG.Query -> m Int64+execute_ q = do+  connection <- view connConnection+  liftIO $ PG.execute_ connection q++returning :: (MonadConnector e m, PG.ToRow q, PG.FromRow r) => PG.Query -> [q] -> m [r]+returning q params = do+  connection <- view connConnection+  liftIO $ PG.returning connection q params