47 lines
1.7 KiB
Haskell
47 lines
1.7 KiB
Haskell
{-# LANGUAGE NamedFieldPuns #-}
|
|
|
|
module System.Serverman.Actions.MySQL (mysql) where
|
|
import System.Serverman.Actions.Database
|
|
import System.Serverman.Utils hiding (execute)
|
|
import Database.MySQL.Base
|
|
import qualified Data.ByteString.Char8 as BS
|
|
import Data.List
|
|
import Control.Monad
|
|
import Control.Monad.State
|
|
|
|
mysql :: DatabaseParams -> App ()
|
|
mysql (DatabaseParams { database, dummyData, databaseUser, databasePass, databaseHost }) = liftIO $ do
|
|
conn <- connect $ defaultConnectInfo { connectUser = databaseUser, connectPassword = databasePass, connectHost = databaseHost }
|
|
|
|
query conn $ BS.pack ("CREATE DATABASE IF NOT EXISTS " ++ database)
|
|
|
|
|
|
when dummyData $ do
|
|
let (tableName, _, _) = dummy
|
|
|
|
query conn $ BS.pack createDummyTables
|
|
query conn $ BS.pack clearTable
|
|
query conn $ BS.pack insertToDummyTables
|
|
|
|
putStrLn $ "Created dummy table '" ++ tableName ++ "' and filled it with data."
|
|
return ()
|
|
|
|
return ()
|
|
|
|
clearTable = "DELETE FROM " ++ tableName
|
|
where (tableName, _, _) = dummy
|
|
|
|
createDummyTables = createTable dummy
|
|
where
|
|
createTable (tableName, columns, rows) = "CREATE TABLE IF NOT EXISTS " ++ tableName ++ "(" ++ intercalate "," (map columnDef columns) ++ ")";
|
|
columnDef "children" = "children INT"
|
|
columnDef "birth_date" = "birth_date DATETIME"
|
|
columnDef "gender" = "gender ENUM('Male', 'Female')"
|
|
columnDef name = name ++ " VARCHAR(255)"
|
|
|
|
insertToDummyTables = insertTable dummy
|
|
where
|
|
insertTable (tableName, _, rows) = "INSERT INTO " ++ tableName ++ " VALUES " ++ intercalate "," (map insertRow rows)
|
|
insertRow row = "('" ++ intercalate "','" row ++ "')"
|
|
|