packages feed

hamsql-0.7.0.0: src/Database/HamSql/Internal/Stmt/Domain.hs

-- This file is part of HamSql
--
-- Copyright 2016 by it's authors.
-- Some rights reserved. See COPYING, AUTHORS.
{-# LANGUAGE FlexibleInstances #-}

module Database.HamSql.Internal.Stmt.Domain where

import Database.HamSql.Internal.Stmt.Basic

stmtsDropDomain :: SqlIdContentSqo -> [Maybe SqlStmt]
stmtsDropDomain x = [newSqlStmt SqlDropDomain x $ "DROP DOMAIN" <-> toSqlCode x]

stmtsDropDomainConstr :: SqlIdContentSqoObj -> [Maybe SqlStmt]
stmtsDropDomainConstr x =
  [ newSqlStmt SqlDropDomainConstr x $
    "ALTER DOMAIN" <-> sqlSqoIdCode x <-> "DROP CONSTRAINT" <->
    sqlSqoObjIdCode x
  ]

instance ToSqlStmts (SqlContextSqo Domain) where
  toSqlStmts = stmtsDeployDomain

stmtsDeployDomain :: SetupContext -> SqlContextSqo Domain -> [Maybe SqlStmt]
stmtsDeployDomain _ obj@SqlContextSqo {sqlSqoObject = d} =
  stmtCreateDomain :
  sqlDefault (domainDefault d) : maybeMap sqlCheck (domainChecks d)
  where
    stmtCreateDomain =
      newSqlStmt SqlCreateDomain obj $
      "CREATE DOMAIN" <-> sqlIdCode obj <-> "AS" <-> toSqlCode (domainType d)
    sqlCheck :: Check -> Maybe SqlStmt
    sqlCheck c =
      newSqlStmt SqlCreateCheckConstr obj $
      "ALTER DOMAIN" <-> sqlIdCode obj <-> "ADD CONSTRAINT" <->
      toSqlCode (checkName c) <->
      "CHECK (" <>
      checkCheck c <>
      ")"
    sqlDefault Nothing =
      newSqlStmt SqlAddDefault obj $
      "ALTER DOMAIN" <-> sqlIdCode obj <-> "DROP DEFAULT"
    sqlDefault (Just def) =
      newSqlStmt SqlAddDefault obj $
      "ALTER DOMAIN" <-> sqlIdCode obj <-> "SET DEFAULT" <-> def