hssqlppp-0.0.5: Database/HsSqlPpp/DBAccess.lhs
Copyright 2009 Jake Wheat
This file contains a few (almost pointlessly) lightweight wrappers
around hdbc for running commands and queries.
> module Database.HsSqlPpp.DBAccess (runSqlCommand
> ,withConn
> ,selectValue
> ,catchSql
> ,seErrorMsg
> ,selectRelation) where
> import qualified Database.HDBC.PostgreSQL as Pg
> import Database.HDBC
> import Control.Monad
> import Control.Exception
> runSqlCommand :: (IConnection conn) =>
> conn -> String -> IO ()
> runSqlCommand conn query {-args-} = do
> run conn query [] {- $ map toSql args-}
> commit conn
> withConn :: String -> (Pg.Connection -> IO c) -> IO c
> withConn cs = bracket (Pg.connectPostgreSQL cs) disconnect
> selectValue :: (IConnection conn) =>
> conn -> String -> IO String
> selectValue conn query = do
> r <- quickQuery' conn query [] -- $ map sToSql args
> case length r of
> 0 -> error $ "select value on " ++ query ++
> " returned 0 rows, expected 1"
> 1 -> do
> let t = head r
> when (length t /= 1)
> (error $ "select value on " ++ query ++
> " returned " ++ show (length t) ++ " attributes, expected 1.")
> return $ toS $ head t
> _ -> error $ "select value on " ++ query ++
> " returned " ++ show (length r) ++ " tuples, expected 0 or 1."
> where
> toS a = fromSql a :: String
> selectRelation ::(IConnection conn) =>
> conn -> String -> [String] -> IO [[String]]
> selectRelation conn query args = do
> sth <- prepare conn query
> execute sth $ map sToSql args
> v <- fetchAllRows' sth
> return $ map (map sqlToS) v
> sToSql :: String -> SqlValue
> sToSql s = toSql (s::String)
> sqlToS :: SqlValue -> String
> sqlToS = fromSql