-- This file is part of HamSql
--
-- Copyright 2016 by it's authors.
-- Some rights reserved. See COPYING, AUTHORS.
module Database.HamSql.Internal.Stmt.Database where

import Database.HamSql.Internal.Stmt.Basic

data SQL_DATABASE =
  SQL_DATABASE
  deriving (SqlObjType, Show)

instance ToSqlCode SQL_DATABASE where
  toSqlCode = const "DATABASE"

-- | create database
stmtsCreateDatabase :: Bool -> SqlName -> [Maybe SqlStmt]
stmtsCreateDatabase deleteDatabase dbName =
  [ sqlDelete deleteDatabase
  , newSqlStmt SqlCreateDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $
    "CREATE DATABASE " <> toSqlCode dbName
  , newSqlStmt
      SqlCreateDatabase
      (SqlId $ SqlObj SQL_DATABASE dbName)
      "ALTER DEFAULT PRIVILEGES REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC"
  ]
  where
    sqlDelete True =
      newSqlStmt SqlDropDatabase (SqlId $ SqlObj SQL_DATABASE dbName) $
      "DROP DATABASE IF EXISTS" <-> toSqlCode dbName
    sqlDelete False = Nothing