@@ -48,6 +48,7 @@ module Squeal.PostgreSQL.Definition
4848 , createDomain
4949 , createTypeRange
5050 , createIndex
51+ , createFunction
5152 , TableConstraintExpression (..)
5253 , check
5354 , unique
@@ -1112,6 +1113,23 @@ instance RenderSQL IndexMethod where
11121113 Gin -> "gin"
11131114 Brin -> "brin"
11141115
1116+createFunction
1117+ :: (Has sch schemas schema, KnownSymbol fun)
1118+ => QualifiedAlias sch fun
1119+ -> TypeExpression schemas arg
1120+ -> TypeExpression schemas ret
1121+ -> FunctionDefinition schemas arg ret
1122+ -> Definition schemas (Alter sch (Create fun ('Function arg ret) schema) schemas)
1123+createFunction fun arg ret fundef = UnsafeDefinition $
1124+ "CREATE" <+> "FUNCTION" <+> renderSQL fun <+> parenthesized (renderSQL arg)
1125+ <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
1126+
1127+newtype FunctionDefinition schemas arg ret = UnsafeFunctionDefinition
1128+ { renderFunctionDefinition :: ByteString }
1129+ deriving (Eq,Show,GHC.Generic,NFData)
1130+instance RenderSQL (FunctionDefinition schemas arg ret) where
1131+ renderSQL = renderFunctionDefinition
1132+
11151133-- |
11161134-- >>> printSQL (dropIndex #ix :: Definition (Public '["ix" ::: 'Index]) (Public '[]))
11171135-- DROP INDEX "ix";