on master help sign in
Add countRows
5b5d29fShane O'Brien
src/Rel8.hs+1
@@ -183,6 +183,7 @@ module Rel8
183 -- ** Aggregation
183 -- ** Aggregation
184 , Aggregate
184 , Aggregate
185 , aggregate
185 , aggregate
186+ , countRows
186 , listAgg, listAggExpr
187 , listAgg, listAggExpr
187 , nonEmptyAgg, nonEmptyAggExpr
188 , nonEmptyAgg, nonEmptyAggExpr
188 , groupBy
189 , groupBy
src/Rel8/Query/Aggregate.hs+11−1
@@ -2,22 +2,32 @@
2
2
3module Rel8.Query.Aggregate
3module Rel8.Query.Aggregate
4 ( aggregate
4 ( aggregate
5+ , countRows
5 )
6 )
6where
7where
7
8
8-- base
9-- base
9−import Prelude ()
10+import Data.Int ( Int64 )
11+import Prelude
10
12
11-- opaleye
13-- opaleye
12import qualified Opaleye.Aggregate as Opaleye
14import qualified Opaleye.Aggregate as Opaleye
13
15
14-- rel8
16-- rel8
15import Rel8.Aggregate ( Aggregate )
17import Rel8.Aggregate ( Aggregate )
18+import Rel8.Expr ( Expr )
19+import Rel8.Expr.Aggregate ( countStar )
16import Rel8.Query ( Query )
20import Rel8.Query ( Query )
21+import Rel8.Query.Maybe ( optional )
17import Rel8.Query.Opaleye ( mapOpaleye )
22import Rel8.Query.Opaleye ( mapOpaleye )
18import Rel8.Table.Opaleye ( aggregator )
23import Rel8.Table.Opaleye ( aggregator )
24+import Rel8.Table.Maybe ( maybeTable )
19
25
20
26
21-- | Apply an aggregation to all rows returned by a 'Query'.
27-- | Apply an aggregation to all rows returned by a 'Query'.
22aggregate :: Query (Aggregate exprs) -> Query exprs
28aggregate :: Query (Aggregate exprs) -> Query exprs
23aggregate = mapOpaleye (Opaleye.aggregate aggregator)
29aggregate = mapOpaleye (Opaleye.aggregate aggregator)
30+
31+
32+countRows :: Query a -> Query (Expr Int64)
33+countRows = fmap (maybeTable 0 id) . optional . aggregate . fmap (const countStar)