@@ -104,25 +104,31 @@ coalesce nulls isn'tNull = UnsafeExpression $
104104 "COALESCE" <> parenthesized (commaSeparated
105105 ((renderExpression <$> nulls) <> [renderExpression isn'tNull]))
106106
107+fromNull
108+ :: Expression params tables grouping ('Required ('NotNull x))
109+ -> Expression params tables grouping ('Required ('Null x))
110+ -> Expression params tables grouping ('Required ('NotNull x))
111+fromNull isn'tNull isNull = coalesce [isNull] isn'tNull
112+
107113unsafeBinaryOp
108114 :: ByteString
109− -> Expression params tables grouping ty0
110− -> Expression params tables grouping ty1
111− -> Expression params tables grouping ty2
115+ -> Expression params tables grouping ('Required ty0)
116+ -> Expression params tables grouping ('Required ty1)
117+ -> Expression params tables grouping ('Required ty2)
112118unsafeBinaryOp op x y = UnsafeExpression $ parenthesized $
113119 renderExpression x <+> op <+> renderExpression y
114120
115121unsafeUnaryOp
116122 :: ByteString
117− -> Expression params tables grouping ty0
118− -> Expression params tables grouping ty1
123+ -> Expression params tables grouping ('Required ty0)
124+ -> Expression params tables grouping ('Required ty1)
119125unsafeUnaryOp op x = UnsafeExpression $ parenthesized $
120126 op <+> renderExpression x
121127
122128unsafeFunction
123129 :: ByteString
124− -> Expression params tables grouping xty
125− -> Expression params tables grouping yty
130+ -> Expression params tables grouping ('Required xty)
131+ -> Expression params tables grouping ('Required yty)
126132unsafeFunction fun x = UnsafeExpression $
127133 fun <> parenthesized (renderExpression x)
128134
@@ -283,9 +289,11 @@ not_ = unsafeUnaryOp "NOT"
283289(||*) = unsafeBinaryOp "OR"
284290
285291caseWhenThenElse
286− :: [(Condition params tables grouping, Expression params tables grouping ty)]
287− -> Expression params tables grouping ty
288− -> Expression params tables grouping ty
292+ :: [ ( Condition params tables grouping
293+ , Expression params tables grouping ('Required ty)
294+ ) ]
295+ -> Expression params tables grouping ('Required ty)
296+ -> Expression params tables grouping ('Required ty)
289297caseWhenThenElse whenThens else_ = UnsafeExpression $ mconcat
290298 [ "CASE"
291299 , mconcat
@@ -301,9 +309,9 @@ caseWhenThenElse whenThens else_ = UnsafeExpression $ mconcat
301309
302310ifThenElse
303311 :: Condition params tables grouping
304− -> Expression params tables grouping ty
305− -> Expression params tables grouping ty
306− -> Expression params tables grouping ty
312+ -> Expression params tables grouping ('Required ty)
313+ -> Expression params tables grouping ('Required ty)
314+ -> Expression params tables grouping ('Required ty)
307315ifThenElse if_ then_ else_ = caseWhenThenElse [(if_,then_)] else_
308316
309317(==*)
@@ -440,8 +448,8 @@ instance
440448
441449unsafeAggregate
442450 :: ByteString
443− -> Expression params tables 'Ungrouped xty
444− -> Expression params tables ('Grouped bys) yty
451+ -> Expression params tables 'Ungrouped ('Required xty)
452+ -> Expression params tables ('Grouped bys) ('Required yty)
445453unsafeAggregate fun x = UnsafeExpression $ mconcat
446454 [fun, "(", renderExpression x, ")"]
447455