@@ -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
@@ -451,6 +459,90 @@ sum_
451459 -> Expression params tables ('Grouped bys) ('Required (nullity ty))
452460sum_ = unsafeAggregate "sum"
453461
462+avgInt
463+ :: PGIntegral int
464+ => Expression params tables 'Ungrouped ('Required (nullity int))
465+ -> Expression params tables ('Grouped bys) ('Required (nullity 'PGnumeric))
466+avgInt = unsafeAggregate "avg"
467+
468+avgFloat
469+ :: PGFloating float
470+ => Expression params tables 'Ungrouped ('Required (nullity float))
471+ -> Expression params tables ('Grouped bys) ('Required (nullity 'PGfloat8))
472+avgFloat = unsafeAggregate "avg"
473+
474+bitAnd
475+ :: PGIntegral int
476+ => Expression params tables 'Ungrouped ('Required (nullity int))
477+ -> Expression params tables ('Grouped bys) ('Required (nullity int))
478+bitAnd = unsafeAggregate "bit_and"
479+
480+bitOr
481+ :: PGIntegral int
482+ => Expression params tables 'Ungrouped ('Required (nullity int))
483+ -> Expression params tables ('Grouped bys) ('Required (nullity int))
484+bitOr = unsafeAggregate "bit_or"
485+
486+boolAnd
487+ :: Expression params tables 'Ungrouped ('Required (nullity 'PGbool))
488+ -> Expression params tables ('Grouped bys) ('Required (nullity 'PGbool))
489+boolAnd = unsafeAggregate "bool_and"
490+
491+boolOr
492+ :: Expression params tables 'Ungrouped ('Required (nullity 'PGbool))
493+ -> Expression params tables ('Grouped bys) ('Required (nullity 'PGbool))
494+boolOr = unsafeAggregate "bool_or"
495+
496+countStar
497+ :: Expression params table ('Grouped bys) ('Required ('NotNull 'PGint8))
498+countStar = UnsafeExpression "count(*)"
499+
500+count
501+ :: Expression params tables 'Ungrouped ('Required ty)
502+ -> Expression params tables ('Grouped bys) ('Required ('NotNull 'PGint8))
503+count = unsafeAggregate "count"
504+
505+every
506+ :: Expression params tables 'Ungrouped ('Required (nullity 'PGbool))
507+ -> Expression params tables ('Grouped bys) ('Required (nullity 'PGbool))
508+every = unsafeAggregate "every"
509+
510+jsonAgg
511+ :: Expression params tables 'Ungrouped ('Required ty)
512+ -> Expression params tables ('Grouped bys) ('Required ('NotNull 'PGjson))
513+jsonAgg = unsafeAggregate "json_agg"
514+
515+jsonbAgg
516+ :: Expression params tables 'Ungrouped ('Required ty)
517+ -> Expression params tables ('Grouped bys) ('Required ('NotNull 'PGjsonb))
518+jsonbAgg = unsafeAggregate "jsonb_agg"
519+
520+jsonObjectAgg
521+ :: Expression params tables 'Ungrouped ('Required ('NotNull keyty))
522+ -> Expression params tables 'Ungrouped ('Required valty)
523+ -> Expression params tables ('Grouped bys) ('Required ('NotNull 'PGjson))
524+jsonObjectAgg k v = UnsafeExpression $
525+ "json_object_agg(" <> renderExpression k
526+ <> ", " <> renderExpression v <> ")"
527+
528+jsonbObjectAgg
529+ :: Expression params tables 'Ungrouped ('Required ('NotNull keyty))
530+ -> Expression params tables 'Ungrouped ('Required valty)
531+ -> Expression params tables ('Grouped bys) ('Required ('NotNull 'PGjsonb))
532+jsonbObjectAgg k v = UnsafeExpression $
533+ "jsonb_object_agg(" <> renderExpression k
534+ <> ", " <> renderExpression v <> ")"
535+
536+max_
537+ :: Expression params tables 'Ungrouped ('Required (nullity ty))
538+ -> Expression params tables ('Grouped bys) ('Required (nullity ty))
539+max_ = unsafeAggregate "max"
540+
541+min_
542+ :: Expression params tables 'Ungrouped ('Required (nullity ty))
543+ -> Expression params tables ('Grouped bys) ('Required (nullity ty))
544+min_ = unsafeAggregate "min"
545+
454546{-----------------------------------------
455547tables
456548-----------------------------------------}