@@ -38,13 +38,17 @@ module Squeal.PostgreSQL.Expression
3838 , unsafeFunction
3939 , function
4040 , unsafeUnaryOpL
41+ , unaryOpL
4142 , unsafeUnaryOpR
43+ , unaryOpR
4244 , Operator
4345 , unsafeBinaryOp
46+ , binaryOp
4447 , FunctionVar
4548 , unsafeFunctionVar
4649 , FunctionN
4750 , unsafeFunctionN
51+ , functionN
4852 , PGSubset (..)
4953 , PGIntersect (..)
5054 -- * Re-export
@@ -288,16 +292,31 @@ unsafeBinaryOp :: ByteString -> Operator ty0 ty1 ty2
288292unsafeBinaryOp op x y = UnsafeExpression $ parenthesized $
289293 renderSQL x <+> op <+> renderSQL y
290294
295+binaryOp
296+ :: (Has sch schemas schema, Has op schema ('Operator ('BinaryOp x1 x2 y)))
297+ => Alias op -> Operator x1 x2 y
298+binaryOp = unsafeBinaryOp . renderSQL
299+
291300-- | >>> printSQL $ unsafeUnaryOpL "NOT" true
292301-- (NOT TRUE)
293302unsafeUnaryOpL :: ByteString -> x :--> y
294303unsafeUnaryOpL op x = UnsafeExpression $ parenthesized $ op <+> renderSQL x
295304
305+unaryOpL
306+ :: (Has sch schemas schema, Has op schema ('Operator ('UnaryOpL x y)))
307+ => Alias op -> x :--> y
308+unaryOpL = unsafeUnaryOpL . renderSQL
309+
296310-- | >>> printSQL $ true & unsafeUnaryOpR "IS NOT TRUE"
297311-- (TRUE IS NOT TRUE)
298312unsafeUnaryOpR :: ByteString -> x :--> y
299313unsafeUnaryOpR op x = UnsafeExpression $ parenthesized $ renderSQL x <+> op
300314
315+unaryOpR
316+ :: (Has sch schemas schema, Has op schema ('Operator ('UnaryOpR x y)))
317+ => Alias op -> x :--> y
318+unaryOpR = unsafeUnaryOpR . renderSQL
319+
301320-- | >>> printSQL $ unsafeFunction "f" true
302321-- f(TRUE)
303322unsafeFunction :: ByteString -> x :--> y
@@ -305,7 +324,7 @@ unsafeFunction fun x = UnsafeExpression $
305324 fun <> parenthesized (renderSQL x)
306325
307326function
308− :: (Has sch schemas schema, Has fun schema ('Function x y))
327+ :: (Has sch schemas schema, Has fun schema ('Function ('UnaryFun x y)))
309328 => QualifiedAlias sch fun
310329 -> x :--> y
311330function = unsafeFunction . renderSQL
@@ -316,6 +335,12 @@ unsafeFunctionN :: SListI xs => ByteString -> FunctionN xs y
316335unsafeFunctionN fun xs = UnsafeExpression $
317336 fun <> parenthesized (renderCommaSeparated renderSQL xs)
318337
338+functionN
339+ :: (Has sch schemas schema, Has fun schema ('Function ('NaryFun xs y)), SListI xs)
340+ => QualifiedAlias sch fun
341+ -> FunctionN xs y
342+functionN = unsafeFunctionN . renderSQL
343+
319344instance ty `In` PGNum
320345 => Num (Expression outer commons grp schemas params from (null ty)) where
321346 (+) = unsafeBinaryOp "+"