@@ -58,6 +58,8 @@ module Squeal.PostgreSQL.Definition
5858 , ForeignKeyed
5959 , OnDeleteClause (..)
6060 , OnUpdateClause (..)
61+ , FunctionDefinition(..)
62+ , languageSql
6163 -- ** Drop
6264 , dropSchema
6365 , dropTable
@@ -1128,27 +1130,39 @@ instance RenderSQL IndexMethod where
11281130 Brin -> "brin"
11291131
11301132createFunction
1131− :: (Has sch schemas schema, KnownSymbol fun)
1133+ :: ( Has sch schemas schema
1134+ , KnownSymbol fun
1135+ , SOP.SListI args )
11321136 => QualifiedAlias sch fun
1133− -> TypeExpression schemas arg
1137+ -> NP (TypeExpression schemas) args
11341138 -> TypeExpression schemas ret
1135− -> FunctionDefinition schemas arg ret
1136− -> Definition schemas (Alter sch (Create fun ('Function ('UnaryFun arg ret)) schema) schemas)
1137−createFunction fun arg ret fundef = UnsafeDefinition $
1138− "CREATE" <+> "FUNCTION" <+> renderSQL fun <+> parenthesized (renderSQL arg)
1139+ -> FunctionDefinition schemas ('Fun args ret)
1140+ -> Definition schemas (Alter sch (Create fun ('Function ('Fun args ret)) schema) schemas)
1141+createFunction fun args ret fundef = UnsafeDefinition $
1142+ "CREATE" <+> "FUNCTION" <+> renderSQL fun
1143+ <+> parenthesized (renderCommaSeparated renderSQL args)
11391144 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
11401145
11411146createOrReplaceFunction
1142− :: (Has sch schemas schema, Has fun schema ('Function ('UnaryFun arg ret)))
1147+ :: ( Has sch schemas schema
1148+ , Has fun schema ('Function ('Fun args0 ret0))
1149+ , SOP.SListI args )
11431150 => QualifiedAlias sch fun
1144− -> TypeExpression schemas arg
1151+ -> NP (TypeExpression schemas) args
11451152 -> TypeExpression schemas ret
1146− -> FunctionDefinition schemas arg ret
1147− -> Definition schemas (Alter sch (Alter fun ('Function ('UnaryFun arg ret)) schema) schemas)
1148−createOrReplaceFunction fun arg ret fundef = UnsafeDefinition $
1149− "CREATE" <+> "FUNCTION" <+> renderSQL fun <+> parenthesized (renderSQL arg)
1153+ -> FunctionDefinition schemas ('Fun args ret)
1154+ -> Definition schemas (Alter sch (Alter fun ('Function ('Fun args ret)) schema) schemas)
1155+createOrReplaceFunction fun args ret fundef = UnsafeDefinition $
1156+ "CREATE" <+> "OR" <+> "REPLACE" <+> "FUNCTION" <+> renderSQL fun
1157+ <+> parenthesized (renderCommaSeparated renderSQL args)
11501158 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
11511159
1160+languageSql
1161+ :: Query '[] '[] schemas args '[col ::: ty]
1162+ -> FunctionDefinition schemas ('Fun arg ret)
1163+languageSql qry = UnsafeFunctionDefinition $
1164+ "language sql as" <+> "$$" <+> renderSQL qry <+> "$$"
1165+
11521166dropFunction
11531167 :: (Has sch schemas schema, Has fun schema ('Function funty))
11541168 => QualifiedAlias sch fun
@@ -1157,10 +1171,10 @@ dropFunction
11571171dropFunction fun = UnsafeDefinition $
11581172 "DROP" <+> "Function" <+> renderSQL fun <> ";"
11591173
1160−newtype FunctionDefinition schemas arg ret = UnsafeFunctionDefinition
1174+newtype FunctionDefinition schemas funty = UnsafeFunctionDefinition
11611175 { renderFunctionDefinition :: ByteString }
11621176 deriving (Eq,Show,GHC.Generic,NFData)
1163−instance RenderSQL (FunctionDefinition schemas arg ret) where
1177+instance RenderSQL (FunctionDefinition schemas funty) where
11641178 renderSQL = renderFunctionDefinition
11651179
11661180-- |