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 +30/−0
- Setup.hs +2/−0
- postgresql-connector.cabal +29/−0
- src/Database/PostgreSQL/Connector.hs +93/−0
+ 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