{-# LANGUAGE
AllowAmbiguousTypes
, ConstraintKinds
, DeriveAnyClass
, DeriveGeneric
, DerivingStrategies
, FlexibleContexts
, FlexibleInstances
, GADTs
, LambdaCase
, MultiParamTypeClasses
, OverloadedLabels
, OverloadedStrings
, RankNTypes
, ScopedTypeVariables
, TypeApplications
, TypeInType
, TypeOperators
, UndecidableSuperClasses
, UndecidableInstances
#-}
module Squeal.PostgreSQL.Definition
(
Definition (..)
, (>>>)
, manipulation_
) where
import Control.Category
import Control.DeepSeq
import Data.ByteString
import Data.Monoid
import Prelude hiding ((.), id)
import qualified GHC.Generics as GHC
import Squeal.PostgreSQL.Manipulation
import Squeal.PostgreSQL.Render
import Squeal.PostgreSQL.Type.Schema
newtype Definition
(db0 :: SchemasType)
(db1 :: SchemasType)
= UnsafeDefinition { renderDefinition :: ByteString }
deriving (GHC.Generic,Show,Eq,Ord,NFData)
instance RenderSQL (Definition db0 db1) where
renderSQL = renderDefinition
instance Category Definition where
id = UnsafeDefinition ";"
ddl1 . ddl0 = UnsafeDefinition $
renderSQL ddl0 <> "\n" <> renderSQL ddl1
instance db0 ~ db1 => Semigroup (Definition db0 db1) where (<>) = (>>>)
instance db0 ~ db1 => Monoid (Definition db0 db1) where mempty = id
manipulation_
:: Manipulation '[] db '[] '[]
-> Definition db db
manipulation_ = UnsafeDefinition . (<> ";") . renderSQL