51e9e6e40e1ff80cb008ed076e4557b6a7010cae
[L-seed.git] / src / Lseed / DB.hs
1 module Lseed.DB 
2         ( DBCode(..)
3         , getCodeToRun
4         ) where
5
6 import Database.HDBC
7 import Database.HDBC.ODBC
8 import Data.Map((!))
9
10 data DBCode = DBCode
11         { dbcUserName :: String
12         , dbcUserID :: Int
13         , dbcPlantName :: String
14         , dbcPlantID :: Int
15         , dbcCode :: String
16         }
17         deriving (Show)
18
19 withLseedDB ::  (Connection -> IO t) -> IO t
20 withLseedDB what = do
21         dn <- readFile "../db.conf"
22         conn <- connectODBC dn  
23         res <- what conn
24         disconnect conn
25         return res
26
27 getCodeToRun ::  IO [DBCode]
28 getCodeToRun = withLseedDB $ \conn -> do
29         let getCodeQuery = "SELECT plant.ID AS plantid, user.ID AS userid, code, plant.Name AS plantname, user.Name AS username from plant, user WHERE user.NextSeed = plant.ID;"
30         stmt <- prepare conn getCodeQuery
31         execute stmt []
32         result <- fetchAllRowsMap' stmt
33         return $ flip map result $ \m -> 
34                 DBCode (fromSql (m ! "username"))
35                        (fromSql (m ! "userid"))
36                        (fromSql (m ! "plantname"))
37                        (fromSql (m ! "plantid"))
38                        (fromSql (m ! "code"))
39