module Polysemy.Hasql.Statement where

import Hasql.Statement (Statement)
import Polysemy.Db.Data.DbName (DbName, unDbName)
import Sqel.Data.Sql (Sql, sql, sqlQuote)
import Sqel.Statement (plain)

quoteName :: DbName -> Sql
quoteName :: DbName -> Sql
quoteName =
  Text -> Sql
sqlQuote forall b c a. (b -> c) -> (a -> b) -> a -> c
. DbName -> Text
unDbName

createDbSql ::
  DbName ->
  Sql
createDbSql :: DbName -> Sql
createDbSql (DbName -> Sql
quoteName -> Sql
name) =
  [sql|create database #{name}|]

createDb ::
  DbName ->
  Statement () ()
createDb :: DbName -> Statement () ()
createDb =
  Sql -> Statement () ()
plain forall b c a. (b -> c) -> (a -> b) -> a -> c
. DbName -> Sql
createDbSql

dropDbSql ::
  DbName ->
  Sql
dropDbSql :: DbName -> Sql
dropDbSql (DbName -> Sql
quoteName -> Sql
name) =
  [sql|drop database #{name}|]

dropDb ::
  DbName ->
  Statement () ()
dropDb :: DbName -> Statement () ()
dropDb =
  Sql -> Statement () ()
plain forall b c a. (b -> c) -> (a -> b) -> a -> c
. DbName -> Sql
dropDbSql