on dev help sign in
languageSql

and other things

commitea86c4cc17d313124af2defd278bfed5dbfa1562 authorEitan Chatav <eitan@EEM109LMBP-1.local> dateMon 2 Sep 2019, 10:39 (7 years ago) parent70f2f10
3 files changed+32−20
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+28−14 squeal-postgresql/src/Squeal/PostgreSQL/Expression.hs+2−2 squeal-postgresql/src/Squeal/PostgreSQL/Schema.hs+2−4
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+28−14
@@ -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-- |
squeal-postgresql/src/Squeal/PostgreSQL/Expression.hs+2−2
@@ -324,7 +324,7 @@ unsafeFunction fun x = UnsafeExpression $
324324 fun <> parenthesized (renderSQL x)
325325
326326function
327− :: (Has sch schemas schema, Has fun schema ('Function ('UnaryFun x y)))
327+ :: (Has sch schemas schema, Has fun schema ('Function ('Fun '[x] y)))
328328 => QualifiedAlias sch fun
329329 -> x :--> y
330330function = unsafeFunction . renderSQL
@@ -336,7 +336,7 @@ unsafeFunctionN fun xs = UnsafeExpression $
336336 fun <> parenthesized (renderCommaSeparated renderSQL xs)
337337
338338functionN
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)
340340 => QualifiedAlias sch fun
341341 -> FunctionN xs y
342342functionN = unsafeFunctionN . renderSQL
squeal-postgresql/src/Squeal/PostgreSQL/Schema.hs+2−4
@@ -374,10 +374,8 @@ data SchemumType
374374 | UnsafeSchemum Symbol
375375
376376data FunctionType
377− = UnaryFun NullityType NullityType
378− | NaryFun [NullityType] NullityType
379− | UnarySetFun NullityType [NullityType]
380− | NarySetFun [NullityType] [NullityType]
377+ = Fun [NullityType] NullityType
378+ | SetFun [NullityType] [NullityType]
381379
382380data OperatorType
383381 = BinaryOp NullityType NullityType NullityType