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