-----------------------------------------------------------
-- |
-- Module      :  Database.HaskellDB.HDBC.MySQL
-- Modified from Database.HaskellDB.HDBC.ODBC by Andrew Miller
-- Copyright   :  HWT Group (c) 2003, Bjorn Bringert (c) 2006, Andrew Miller (c) 2009
-- License     :  BSD-style
-- 
-- Maintainer  :  haskelldb-users@lists.sourceforge.net
-- Stability   :  experimental
-- Portability :  portable
--
-----------------------------------------------------------
module Database.HaskellDB.HDBC.MySQL (
		      mysqlConnect,
                      DriverInterface(..), driver
		      ) where

import Database.HaskellDB.Database
import Database.HaskellDB.HDBC
import Database.HaskellDB.DriverAPI
import Database.HaskellDB.Sql.Generate (SqlGenerator)
import Data.List

import Database.HDBC.MySQL

mysqlConnect :: MonadIO m => SqlGenerator -> [(String,String)] -> (Database -> m a) -> m a
mysqlConnect gen opts = hdbcConnect gen (connectMySQL conninfo)
    -- strangely enough, mysql+unixodbc want a semicolon terminating connstring
    where conninfo = foldl' (\info (k,v) ->
                                 case k
                                 of
                                   "host" -> info { mysqlHost = v }
                                   "user" -> info { mysqlUser = v }
                                   "password" -> info { mysqlPassword = v }
                                   "database" -> info { mysqlDatabase = v }
                                   "port" -> info { mysqlPort = read v }
                                   "unixSocket" -> info { mysqlUnixSocket = v }
                                   _ -> info
                            ) defaultMySQLConnectInfo opts

options :: [(String, String)]
options =
    []

mysqlConnectOpts :: MonadIO m => [(String,String)] -> (Database -> m a) -> m a
mysqlConnectOpts opts f = 
    do gen <- getGenerator opts
       let opts' = filter ((/="generator") . fst) opts
       mysqlConnect gen opts' f

-- | This driver passes its options through to HDBC.
driver :: DriverInterface
driver = defaultdriver { connect = mysqlConnectOpts, requiredOptions = options }