on dev help sign in
languageSql
ea86c4cEitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+28−14
@@ -58,6 +58,8 @@ module Squeal.PostgreSQL.Definition
58 , ForeignKeyed
58 , ForeignKeyed
59 , OnDeleteClause (..)
59 , OnDeleteClause (..)
60 , OnUpdateClause (..)
60 , OnUpdateClause (..)
61+ , FunctionDefinition(..)
62+ , languageSql
61 -- ** Drop
63 -- ** Drop
62 , dropSchema
64 , dropSchema
63 , dropTable
65 , dropTable
@@ -1128,27 +1130,39 @@ instance RenderSQL IndexMethod where
1128 Brin -> "brin"
1130 Brin -> "brin"
1129
1131
1130createFunction
1132createFunction
1131− :: (Has sch schemas schema, KnownSymbol fun)
1133+ :: ( Has sch schemas schema
1134+ , KnownSymbol fun
1135+ , SOP.SListI args )
1132 => QualifiedAlias sch fun
1136 => QualifiedAlias sch fun
1133− -> TypeExpression schemas arg
1137+ -> NP (TypeExpression schemas) args
1134 -> TypeExpression schemas ret
1138 -> TypeExpression schemas ret
1135− -> FunctionDefinition schemas arg ret
1139+ -> FunctionDefinition schemas ('Fun args ret)
1136− -> Definition schemas (Alter sch (Create fun ('Function ('UnaryFun arg ret)) schema) schemas)
1140+ -> Definition schemas (Alter sch (Create fun ('Function ('Fun args ret)) schema) schemas)
1137−createFunction fun arg ret fundef = UnsafeDefinition $
1141+createFunction fun args ret fundef = UnsafeDefinition $
1138− "CREATE" <+> "FUNCTION" <+> renderSQL fun <+> parenthesized (renderSQL arg)
1142+ "CREATE" <+> "FUNCTION" <+> renderSQL fun
1143+ <+> parenthesized (renderCommaSeparated renderSQL args)
1139 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
1144 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
1140
1145
1141createOrReplaceFunction
1146createOrReplaceFunction
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 )
1143 => QualifiedAlias sch fun
1150 => QualifiedAlias sch fun
1144− -> TypeExpression schemas arg
1151+ -> NP (TypeExpression schemas) args
1145 -> TypeExpression schemas ret
1152 -> TypeExpression schemas ret
1146− -> FunctionDefinition schemas arg ret
1153+ -> FunctionDefinition schemas ('Fun args ret)
1147− -> Definition schemas (Alter sch (Alter fun ('Function ('UnaryFun arg ret)) schema) schemas)
1154+ -> Definition schemas (Alter sch (Alter fun ('Function ('Fun args ret)) schema) schemas)
1148−createOrReplaceFunction fun arg ret fundef = UnsafeDefinition $
1155+createOrReplaceFunction fun args ret fundef = UnsafeDefinition $
1149− "CREATE" <+> "FUNCTION" <+> renderSQL fun <+> parenthesized (renderSQL arg)
1156+ "CREATE" <+> "OR" <+> "REPLACE" <+> "FUNCTION" <+> renderSQL fun
1157+ <+> parenthesized (renderCommaSeparated renderSQL args)
1150 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
1158 <+> "RETURNS" <+> renderSQL ret <+> renderSQL fundef <> ";"
1151
1159
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+
1152dropFunction
1166dropFunction
1153 :: (Has sch schemas schema, Has fun schema ('Function funty))
1167 :: (Has sch schemas schema, Has fun schema ('Function funty))
1154 => QualifiedAlias sch fun
1168 => QualifiedAlias sch fun
@@ -1157,10 +1171,10 @@ dropFunction
1157dropFunction fun = UnsafeDefinition $
1171dropFunction fun = UnsafeDefinition $
1158 "DROP" <+> "Function" <+> renderSQL fun <> ";"
1172 "DROP" <+> "Function" <+> renderSQL fun <> ";"
1159
1173
1160−newtype FunctionDefinition schemas arg ret = UnsafeFunctionDefinition
1174+newtype FunctionDefinition schemas funty = UnsafeFunctionDefinition
1161 { renderFunctionDefinition :: ByteString }
1175 { renderFunctionDefinition :: ByteString }
1162 deriving (Eq,Show,GHC.Generic,NFData)
1176 deriving (Eq,Show,GHC.Generic,NFData)
1163−instance RenderSQL (FunctionDefinition schemas arg ret) where
1177+instance RenderSQL (FunctionDefinition schemas funty) where
1164 renderSQL = renderFunctionDefinition
1178 renderSQL = renderFunctionDefinition
1165
1179
1166-- |
1180-- |
squeal-postgresql/src/Squeal/PostgreSQL/Expression.hs+2−2
@@ -324,7 +324,7 @@ unsafeFunction fun x = UnsafeExpression $
324 fun <> parenthesized (renderSQL x)
324 fun <> parenthesized (renderSQL x)
325
325
326function
326function
327− :: (Has sch schemas schema, Has fun schema ('Function ('UnaryFun x y)))
327+ :: (Has sch schemas schema, Has fun schema ('Function ('Fun '[x] y)))
328 => QualifiedAlias sch fun
328 => QualifiedAlias sch fun
329 -> x :--> y
329 -> x :--> y
330function = unsafeFunction . renderSQL
330function = unsafeFunction . renderSQL
@@ -336,7 +336,7 @@ unsafeFunctionN fun xs = UnsafeExpression $
336 fun <> parenthesized (renderCommaSeparated renderSQL xs)
336 fun <> parenthesized (renderCommaSeparated renderSQL xs)
337
337
338functionN
338functionN
339− :: (Has sch schemas schema, Has fun schema ('Function ('NaryFun xs y)), SListI xs)
339+ :: (Has sch schemas schema, Has fun schema ('Function ('Fun xs y)), SListI xs)
340 => QualifiedAlias sch fun
340 => QualifiedAlias sch fun
341 -> FunctionN xs y
341 -> FunctionN xs y
342functionN = unsafeFunctionN . renderSQL
342functionN = unsafeFunctionN . renderSQL
squeal-postgresql/src/Squeal/PostgreSQL/Schema.hs+2−4
@@ -374,10 +374,8 @@ data SchemumType
374 | UnsafeSchemum Symbol
374 | UnsafeSchemum Symbol
375
375
376data FunctionType
376data FunctionType
377− = UnaryFun NullityType NullityType
378− | NaryFun [NullityType] NullityType
377+ = Fun [NullityType] NullityType
379− | UnarySetFun NullityType [NullityType]
380− | NarySetFun [NullityType] [NullityType]
378+ | SetFun [NullityType] [NullityType]
381
379
382data OperatorType
380data OperatorType
383 = BinaryOp NullityType NullityType NullityType
381 = BinaryOp NullityType NullityType NullityType