on dev help sign in
createDomain

resolves #58

commit533eae912d244a1c7a26d66315552380e527c155 authorEitan Chatav <eitan@Eitans-MacBook-Pro.local> dateSat 2 Mar 2019, 10:56 (8 years ago) parent5a626eb
1 file changed+21
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+21
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+21
@@ -42,6 +42,7 @@ module Squeal.PostgreSQL.Definition
4242 , createTypeEnumFrom
4343 , createTypeComposite
4444 , createTypeCompositeFrom
45+ , createDomain
4546 , TableConstraintExpression (..)
4647 , check
4748 , unique
@@ -980,6 +981,26 @@ createTypeCompositeFrom ty = createTypeComposite ty
980981 (SOP.hcpure (SOP.Proxy :: SOP.Proxy (FieldTyped schemas)) fieldtype
981982 :: NP (Aliased (TypeExpression schemas)) (RowPG hask))
982983
984+{-|
985+>>> :{
986+let
987+ createPositive :: Definition (Public '[]) (Public '["positive" ::: 'Typedef 'PGfloat4])
988+ createPositive = createDomain #positive real (#value .> 0 .&& (#value & isNotNull))
989+in printSQL createPositive
990+:}
991+CREATE DOMAIN "positive" AS real CHECK ((("value" > 0) AND "value" IS NOT NULL));
992+-}
993+createDomain
994+ :: (Has sch schemas schema, KnownSymbol dom)
995+ => QualifiedAlias sch dom
996+ -> (forall nullity. TypeExpression schemas (nullity ty))
997+ -> (forall tab. Condition '[] 'Ungrouped '[] schemas '[] '[tab ::: '["value" ::: 'Null ty]])
998+ -> Definition schemas (Alter sch (Create alias ('Typedef ty) schema) schemas)
999+createDomain dom ty condition =
1000+ UnsafeDefinition $ "CREATE DOMAIN" <+> renderSQL dom
1001+ <+> "AS" <+> renderTypeExpression ty
1002+ <+> "CHECK" <+> parenthesized (renderSQL condition) <> ";"
1003+
9831004class FieldTyped schemas ty where
9841005 fieldtype :: Aliased (TypeExpression schemas) ty
9851006instance (KnownSymbol alias, PGTyped schemas ty)