-----------------------------------------------------------
-- |
-- 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
import Database.HaskellDB.FieldType
import Database.HaskellDB.DBSpec.DBInfo

-- | Connects to a database and generates a specification from it
dbToDBSpec :: Bool -- ^ Use bounded strings?
	   -> String  -- ^ the name our database should have
	   -> Database -- ^ the database connection
	   -> IO DBInfo    -- ^ return a DBInfo
dbToDBSpec useBStr 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}) tinfos