@@ -38,13 +38,17 @@ module Squeal.PostgreSQL.Expression
38 , unsafeFunction
38 , unsafeFunction
39 , function
39 , function
40 , unsafeUnaryOpL
40 , unsafeUnaryOpL
41 , unsafeUnaryOpR
42 , unsafeUnaryOpR
42 , Operator
44 , Operator
43 , unsafeBinaryOp
45 , unsafeBinaryOp
44 , FunctionVar
47 , FunctionVar
45 , unsafeFunctionVar
48 , unsafeFunctionVar
46 , FunctionN
49 , FunctionN
47 , unsafeFunctionN
50 , unsafeFunctionN
48 , PGSubset (..)
52 , PGSubset (..)
49 , PGIntersect (..)
53 , PGIntersect (..)
50 -- * Re-export
54 -- * Re-export
@@ -288,16 +292,31 @@ unsafeBinaryOp :: ByteString -> Operator ty0 ty1 ty2
288unsafeBinaryOp op x y = UnsafeExpression $ parenthesized $
292unsafeBinaryOp op x y = UnsafeExpression $ parenthesized $
289 renderSQL x <+> op <+> renderSQL y
293 renderSQL x <+> op <+> renderSQL y
296+ :: (Has sch schemas schema, Has op schema ('Operator ('BinaryOp x1 x2 y)))
297+ => Alias op -> Operator x1 x2 y
298+binaryOp = unsafeBinaryOp . renderSQL
291-- | >>> printSQL $ unsafeUnaryOpL "NOT" true
300-- | >>> printSQL $ unsafeUnaryOpL "NOT" true
292-- (NOT TRUE)
301-- (NOT TRUE)
293unsafeUnaryOpL :: ByteString -> x :--> y
302unsafeUnaryOpL :: ByteString -> x :--> y
294unsafeUnaryOpL op x = UnsafeExpression $ parenthesized $ op <+> renderSQL x
303unsafeUnaryOpL op x = UnsafeExpression $ parenthesized $ op <+> renderSQL x
306+ :: (Has sch schemas schema, Has op schema ('Operator ('UnaryOpL x y)))
307+ => Alias op -> x :--> y
308+unaryOpL = unsafeUnaryOpL . renderSQL
296-- | >>> printSQL $ true & unsafeUnaryOpR "IS NOT TRUE"
310-- | >>> printSQL $ true & unsafeUnaryOpR "IS NOT TRUE"
297-- (TRUE IS NOT TRUE)
311-- (TRUE IS NOT TRUE)
298unsafeUnaryOpR :: ByteString -> x :--> y
312unsafeUnaryOpR :: ByteString -> x :--> y
299unsafeUnaryOpR op x = UnsafeExpression $ parenthesized $ renderSQL x <+> op
313unsafeUnaryOpR op x = UnsafeExpression $ parenthesized $ renderSQL x <+> op
316+ :: (Has sch schemas schema, Has op schema ('Operator ('UnaryOpR x y)))
317+ => Alias op -> x :--> y
318+unaryOpR = unsafeUnaryOpR . renderSQL
301-- | >>> printSQL $ unsafeFunction "f" true
320-- | >>> printSQL $ unsafeFunction "f" true
302-- f(TRUE)
321-- f(TRUE)
303unsafeFunction :: ByteString -> x :--> y
322unsafeFunction :: ByteString -> x :--> y
@@ -305,7 +324,7 @@ unsafeFunction fun x = UnsafeExpression $
305 fun <> parenthesized (renderSQL x)
324 fun <> parenthesized (renderSQL x)
308− :: (Has sch schemas schema, Has fun schema ('Function x y))
327+ :: (Has sch schemas schema, Has fun schema ('Function ('UnaryFun x y)))
309 => QualifiedAlias sch fun
328 => QualifiedAlias sch fun
310 -> x :--> y
329 -> x :--> y
311function = unsafeFunction . renderSQL
330function = unsafeFunction . renderSQL
@@ -316,6 +335,12 @@ unsafeFunctionN :: SListI xs => ByteString -> FunctionN xs y
316unsafeFunctionN fun xs = UnsafeExpression $
335unsafeFunctionN fun xs = UnsafeExpression $
317 fun <> parenthesized (renderCommaSeparated renderSQL xs)
336 fun <> parenthesized (renderCommaSeparated renderSQL xs)
339+ :: (Has sch schemas schema, Has fun schema ('Function ('NaryFun xs y)), SListI xs)
340+ => QualifiedAlias sch fun
342+functionN = unsafeFunctionN . renderSQL
319instance ty `In` PGNum
344instance ty `In` PGNum
320 => Num (Expression outer commons grp schemas params from (null ty)) where
345 => Num (Expression outer commons grp schemas params from (null ty)) where
321 (+) = unsafeBinaryOp "+"
346 (+) = unsafeBinaryOp "+"