----------------------------------------------------------- -- | -- 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