on master help sign in
Add manyExpr and someExpr
commitbdf2d87fdf5904d6764403b0ab00c1a7541afd62 authorShane O'Brien <shane.obrien@circuithub.com> dateSat 5 Jun 2021, 10:57 (5 years ago) parent08dea9f
2 files changed+18
src/Rel8.hs+2 src/Rel8/Query/List.hs+16
src/Rel8.hs+2
@@ -98,6 +98,7 @@ module Rel8
9898 , insertListTable
9999 , nameListTable
100100 , many
101+ , manyExpr
101102
102103 -- ** @NonEmptyTable@
103104 , NonEmptyTable
@@ -105,6 +106,7 @@ module Rel8
105106 , insertNonEmptyTable
106107 , nameNonEmptyTable
107108 , some
109+ , someExpr
108110
109111 -- ** @ADT@
110112 , ADT, ADTable, fromADT, toADT
src/Rel8/Query/List.hs+16
@@ -1,23 +1,29 @@
11{-# language FlexibleContexts #-}
2+{-# language MonoLocalBinds #-}
23
34module Rel8.Query.List
45 ( many, some
6+ , manyExpr, someExpr
57 )
68where
79
810-- base
11+import Data.List.NonEmpty ( NonEmpty )
912import Prelude
1013
1114-- rel8
1215import Rel8.Expr ( Expr )
16+import Rel8.Expr.Aggregate ( listAggExpr, nonEmptyAggExpr )
1317import Rel8.Query ( Query )
1418import Rel8.Query.Aggregate ( aggregate )
1519import Rel8.Query.Maybe ( optional )
20+import Rel8.Schema.Null ( Sql )
1621import Rel8.Table ( Table )
1722import Rel8.Table.Aggregate ( listAgg, nonEmptyAgg )
1823import Rel8.Table.List ( ListTable )
1924import Rel8.Table.Maybe ( maybeTable )
2025import Rel8.Table.NonEmpty ( NonEmptyTable )
26+import Rel8.Type ( DBType )
2127
2228
2329-- | Aggregate a 'Query' into a 'NonEmptyTable'. If the supplied query returns
@@ -41,3 +47,13 @@ some = aggregate . fmap nonEmptyAgg
4147-- @Control.Applicative@.
4248many :: Table Expr a => Query a -> Query (ListTable a)
4349many = fmap (maybeTable mempty id) . optional . aggregate . fmap listAgg
50+
51+
52+-- | A version of 'many' specialised to single expressions.
53+manyExpr :: Sql DBType a => Query (Expr a) -> Query (Expr [a])
54+manyExpr = fmap (maybeTable mempty id) . optional . aggregate . fmap listAggExpr
55+
56+
57+-- | A version of 'many' specialised to single expressions.
58+someExpr :: Query (Expr a) -> Query (Expr (NonEmpty a))
59+someExpr = aggregate . fmap nonEmptyAggExpr