haskelldb-0.12: src/Database/HaskellDB/DBSpec/DatabaseToDBSpec.hs
-----------------------------------------------------------
-- |
-- Module : DatabaseToDBSpec
-- Copyright : HWT Group (c) 2004, haskelldb-users@lists.sourceforge.net
-- License : BSD-style
--
-- Maintainer : haskelldb-users@lists.sourceforge.net
-- Stability : experimental
-- Portability : portable
--
-- Connects to a Database and generates a DBSpec specification
-- from it.
--
--
-----------------------------------------------------------
module Database.HaskellDB.DBSpec.DatabaseToDBSpec
(dbToDBSpec)
where
import Database.HaskellDB (Database, tables, describe, )
import Database.HaskellDB.DBSpec.DBInfo
(DBInfo, makeCInfo, makeTInfo, makeDBSpec,
DBOptions(DBOptions), useBString, makeIdent, )
import qualified Database.HaskellDB.DBSpec.PPHelpers as PP
-- | Connects to a database and generates a specification from it
dbToDBSpec :: Bool -- ^ Use bounded strings?
-> PP.MakeIdentifiers -- ^ style of generated Haskell identifiers, cOLUMN_NAME vs. columnName
-> String -- ^ the name our database should have
-> Database -- ^ the database connection
-> IO DBInfo -- ^ return a DBInfo
dbToDBSpec useBStr mkIdent name dbconn
= do ts <- tables dbconn
descs <- mapM (describe dbconn) ts
let cinfos = map (map $ uncurry makeCInfo) descs
let tinfos = map (uncurry makeTInfo) (zip ts cinfos)
return $ makeDBSpec name (DBOptions {useBString = useBStr, makeIdent = mkIdent }) tinfos