-----------------------------------------------------------
-- |
-- Module      :  Database.HaskellDB.Connect.HDBC.Simple
-- Copyright   :  Kei Hibino 2012
-- License     :  BSD-style
--
-- Maintainer  :  ex8k.hibino@gmail.com
-- Stability   :  experimental
-- Portability :  portable
--
-- Bracketed HaskellDB session with 'IO'.
--
-----------------------------------------------------------
module Database.HaskellDB.Connect.HDBC.Simple (
  hdbcSession
  ) where

import Database.HDBC (IConnection)
import Database.HaskellDB.Database (Database)
import Database.HaskellDB.Sql.Generate (SqlGenerator)
import Database.HaskellDB.Connect.HDBC (makeHDBCSession)

import Control.Exception (bracket)

-- | Run an action on a HDBC 'IConnection' and close the connection.
--   Simple 'IO' version.
hdbcSession :: IConnection conn
            => SqlGenerator
            -> IO conn                    -- ^ Connect action
	    -> (conn -> Database -> IO a) -- ^ Transaction body
            -> IO a
hdbcSession gen =  makeHDBCSession bracket id gen