Skip to content

Instantly share code, notes, and snippets.

@ToJans
Last active October 21, 2015 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ToJans/48b6c5807ca68d7790b9 to your computer and use it in GitHub Desktop.
Save ToJans/48b6c5807ca68d7790b9 to your computer and use it in GitHub Desktop.
How do I get this into a ServerT ?
{-# LANGUAGE OverloadedStrings #-}
module Lib.DB(query_,query,execute_,execute,lastInsertRowId
,find,DB.FromRow,DB.fromRow,DB.field,ResourceT,runResourceT)
where
import Control.Monad (liftM)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Reader (ReaderT (..), ask, runReader)
import Control.Monad.Trans.Class (lift)
import Data.Int (Int64)
import qualified Database.SQLite.Simple as DB
import Database.SQLite.Simple.FromField (FromField)
type ResourceT a = ReaderT DB.Connection IO a
runResourceT :: String -> ResourceT a -> IO a
runResourceT connstr f = do
conn <- DB.open connstr
let r = runReaderT f conn
DB.close conn
r
query :: (DB.ToRow a, DB.FromRow b) => DB.Query -> a -> ResourceT [b]
query qry pars = do
conn <- ask
liftIO $ DB.query conn qry pars
query_ :: DB.FromRow a => DB.Query -> ResourceT [a]
query_ qry = do
conn <- ask
liftIO $ DB.query_ conn qry
execute :: (DB.ToRow a) => DB.Query -> a -> ResourceT ()
execute qry pars = do
conn <- ask
liftIO $ DB.execute conn qry pars
execute_ :: DB.Query -> ResourceT ()
execute_ qry = do
conn <- ask
liftIO $ DB.execute_ conn qry
lastInsertRowId :: ResourceT Int64
lastInsertRowId = do
conn <- ask
liftIO $ DB.lastInsertRowId conn
find:: (DB.ToRow a, DB.FromRow b) => DB.Query -> a -> ResourceT (Maybe b)
find sql pars = do
rows <- query sql pars
case rows of
[] -> return Nothing
[x] -> return (Just x)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment