on master help sign in
Add and export missing constructors for MaybeTable and friends
d07e3b5Shane O'Brien
src/Rel8.hs+15
@@ -57,6 +57,9 @@ module Rel8
57 , catMaybeTable
57 , catMaybeTable
58 , bindMaybeTable
58 , bindMaybeTable
59 , traverseMaybeTable
59 , traverseMaybeTable
60+ , aggregateMaybeTable
61+ , insertMaybeTable
62+ , nameMaybeTable
60
63
61 -- ** @EitherTable@
64 -- ** @EitherTable@
62 , EitherTable
65 , EitherTable
@@ -66,6 +69,9 @@ module Rel8
66 , keepRightTable
69 , keepRightTable
67 , bindEitherTable
70 , bindEitherTable
68 , bitraverseEitherTable
71 , bitraverseEitherTable
72+ , aggregateEitherTable
73+ , insertEitherTable
74+ , nameEitherTable
69
75
70 -- ** @TheseTable@
76 -- ** @TheseTable@
71 , TheseTable
77 , TheseTable
@@ -81,13 +87,22 @@ module Rel8
81 , keepThoseTable, loseThoseTable
87 , keepThoseTable, loseThoseTable
82 , bindTheseTable
88 , bindTheseTable
83 , bitraverseTheseTable
89 , bitraverseTheseTable
90+ , aggregateTheseTable
91+ , insertTheseTable
92+ , nameTheseTable
84
93
85 -- ** @ListTable@
94 -- ** @ListTable@
86 , ListTable
95 , ListTable
96+ , listTable
97+ , insertListTable
98+ , nameListTable
87 , many
99 , many
88
100
89 -- ** @NonEmptyTable@
101 -- ** @NonEmptyTable@
90 , NonEmptyTable
102 , NonEmptyTable
103+ , nonEmptyTable
104+ , insertNonEmptyTable
105+ , nameNonEmptyTable
91 , some
106 , some
92
107
93 -- ** @ADT@
108 -- ** @ADT@
src/Rel8/Table/Either.hs+11−1
@@ -3,6 +3,7 @@
3{-# language DerivingStrategies #-}
3{-# language DerivingStrategies #-}
4{-# language FlexibleContexts #-}
4{-# language FlexibleContexts #-}
5{-# language FlexibleInstances #-}
5{-# language FlexibleInstances #-}
6+{-# language LambdaCase #-}
6{-# language MultiParamTypeClasses #-}
7{-# language MultiParamTypeClasses #-}
7{-# language NamedFieldPuns #-}
8{-# language NamedFieldPuns #-}
8{-# language ScopedTypeVariables #-}
9{-# language ScopedTypeVariables #-}
@@ -17,7 +18,7 @@ module Rel8.Table.Either
17 ( EitherTable(..)
18 ( EitherTable(..)
18 , eitherTable, leftTable, rightTable
19 , eitherTable, leftTable, rightTable
19 , isLeftTable, isRightTable
20 , isLeftTable, isRightTable
20− , aggregateEitherTable, nameEitherTable
21+ , aggregateEitherTable, insertEitherTable, nameEitherTable
21 )
22 )
22where
23where
23
24
@@ -48,6 +49,7 @@ import Rel8.Schema.HTable.Either ( HEitherTable(..) )
48import Rel8.Schema.HTable.Identity ( HIdentity(..) )
49import Rel8.Schema.HTable.Identity ( HIdentity(..) )
49import Rel8.Schema.HTable.Label ( hlabel, hunlabel )
50import Rel8.Schema.HTable.Label ( hlabel, hunlabel )
50import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
51import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
52+import Rel8.Schema.Insert ( Insert )
51import Rel8.Schema.Name ( Name )
53import Rel8.Schema.Name ( Name )
52import Rel8.Table
54import Rel8.Table
53 ( Table, Columns, Context, fromColumns, toColumns
55 ( Table, Columns, Context, fromColumns, toColumns
@@ -55,6 +57,7 @@ import Rel8.Table
55 )
57 )
56import Rel8.Table.Bool ( bool )
58import Rel8.Table.Bool ( bool )
57import Rel8.Table.Eq ( EqTable, eqTable )
59import Rel8.Table.Eq ( EqTable, eqTable )
60+import Rel8.Table.Insert ( toInsert )
58import Rel8.Table.Ord ( OrdTable, ordTable )
61import Rel8.Table.Ord ( OrdTable, ordTable )
59import Rel8.Table.Recontextualize ( Recontextualize )
62import Rel8.Table.Recontextualize ( Recontextualize )
60import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
63import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
@@ -188,6 +191,13 @@ aggregateEitherTable f g EitherTable {tag, left, right} =
188 aggregate = unsafeMakeAggregate toPrimExpr fromPrimExpr aggregator expr
191 aggregate = unsafeMakeAggregate toPrimExpr fromPrimExpr aggregator expr
189
192
190
193
194+insertEitherTable :: (Table Insert a, Table Insert b)
195+ => Either a b -> EitherTable a b
196+insertEitherTable = \case
197+ Left a -> EitherTable (fromExpr (litExpr IsLeft)) a (fromColumns (toInsert undefined))
198+ Right b -> EitherTable (fromExpr (litExpr IsRight)) (fromColumns (toInsert undefined)) b
199+
200+
191nameEitherTable :: Name EitherTag -> a -> b -> EitherTable a b
201nameEitherTable :: Name EitherTag -> a -> b -> EitherTable a b
192nameEitherTable = EitherTable . fromName
202nameEitherTable = EitherTable . fromName
193
203
src/Rel8/Table/List.hs+21−1
@@ -10,7 +10,7 @@
10
10
11module Rel8.Table.List
11module Rel8.Table.List
12 ( ListTable(..)
12 ( ListTable(..)
13− , listTable
13+ , listTable, insertListTable, nameListTable
14 )
14 )
15where
15where
16
16
@@ -23,9 +23,12 @@ import Prelude
23-- rel8
23-- rel8
24import Rel8.Expr ( Expr, Col(..) )
24import Rel8.Expr ( Expr, Col(..) )
25import Rel8.Expr.Array ( sappend, sempty, slistOf )
25import Rel8.Expr.Array ( sappend, sempty, slistOf )
26+import Rel8.Kind.Necessity ( SNecessity( SOptional, SRequired ) )
26import Rel8.Schema.Dict ( Dict( Dict ) )
27import Rel8.Schema.Dict ( Dict( Dict ) )
27import Rel8.Schema.HTable.List ( HListTable )
28import Rel8.Schema.HTable.List ( HListTable )
28import Rel8.Schema.HTable.Vectorize ( happend, hempty, hvectorize )
29import Rel8.Schema.HTable.Vectorize ( happend, hempty, hvectorize )
30+import Rel8.Schema.Insert ( Col( OptionalInsert, RequiredInsert ), Insert )
31+import Rel8.Schema.Name ( Col( NameCol ), Name )
29import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
32import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
30import Rel8.Schema.Spec ( SSpec(..) )
33import Rel8.Schema.Spec ( SSpec(..) )
31import Rel8.Schema.Spec.ConstrainDBType ( dbTypeDict, dbTypeNullity )
34import Rel8.Schema.Spec.ConstrainDBType ( dbTypeDict, dbTypeNullity )
@@ -122,3 +125,20 @@ listTable =
122 ListTable .
125 ListTable .
123 hvectorize (\SSpec {info} -> DB . slistOf info . fmap unDB) .
126 hvectorize (\SSpec {info} -> DB . slistOf info . fmap unDB) .
124 fmap toColumns
127 fmap toColumns
128+
129+
130+insertListTable :: Table Insert a => [a] -> ListTable a
131+insertListTable =
132+ ListTable .
133+ hvectorize (\SSpec {necessity, info} -> case necessity of
134+ SRequired -> RequiredInsert . slistOf info . fmap (\(RequiredInsert a) -> a)
135+ SOptional -> OptionalInsert . fmap (slistOf info) . traverse (\(OptionalInsert a) -> a)) .
136+ fmap toColumns
137+
138+
139+nameListTable :: Table Name a => a -> ListTable a
140+nameListTable =
141+ ListTable .
142+ hvectorize (\_ (Identity (NameCol a)) -> NameCol a) .
143+ pure .
144+ toColumns
src/Rel8/Table/Maybe.hs+10−2
@@ -3,6 +3,7 @@
3{-# language DerivingStrategies #-}
3{-# language DerivingStrategies #-}
4{-# language FlexibleContexts #-}
4{-# language FlexibleContexts #-}
5{-# language FlexibleInstances #-}
5{-# language FlexibleInstances #-}
6+{-# language LambdaCase #-}
6{-# language MultiParamTypeClasses #-}
7{-# language MultiParamTypeClasses #-}
7{-# language NamedFieldPuns #-}
8{-# language NamedFieldPuns #-}
8{-# language ScopedTypeVariables #-}
9{-# language ScopedTypeVariables #-}
@@ -16,8 +17,7 @@ module Rel8.Table.Maybe
16 , maybeTable, nothingTable, justTable
17 , maybeTable, nothingTable, justTable
17 , isNothingTable, isJustTable
18 , isNothingTable, isJustTable
18 , ($?)
19 , ($?)
19− , aggregateMaybeTable
20+ , aggregateMaybeTable, insertMaybeTable, nameMaybeTable
20− , nameMaybeTable
21 )
21 )
22where
22where
23
23
@@ -46,6 +46,7 @@ import Rel8.Schema.HTable.Identity ( HIdentity(..) )
46import Rel8.Schema.HTable.Label ( hlabel, hunlabel )
46import Rel8.Schema.HTable.Label ( hlabel, hunlabel )
47import Rel8.Schema.HTable.Maybe ( HMaybeTable(..) )
47import Rel8.Schema.HTable.Maybe ( HMaybeTable(..) )
48import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
48import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
49+import Rel8.Schema.Insert ( Insert )
49import Rel8.Schema.Name ( Name )
50import Rel8.Schema.Name ( Name )
50import Rel8.Schema.Null ( Nullify, Nullity( Null, NotNull ), Sql, nullable )
51import Rel8.Schema.Null ( Nullify, Nullity( Null, NotNull ), Sql, nullable )
51import Rel8.Table
52import Rel8.Table
@@ -58,6 +59,7 @@ import Rel8.Table.Alternative
58 )
59 )
59import Rel8.Table.Bool ( bool )
60import Rel8.Table.Bool ( bool )
60import Rel8.Table.Eq ( EqTable, eqTable )
61import Rel8.Table.Eq ( EqTable, eqTable )
62+import Rel8.Table.Insert ( toInsert )
61import Rel8.Table.Ord ( OrdTable, ordTable )
63import Rel8.Table.Ord ( OrdTable, ordTable )
62import Rel8.Table.Recontextualize ( Recontextualize )
64import Rel8.Table.Recontextualize ( Recontextualize )
63import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
65import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
@@ -217,6 +219,12 @@ aggregateMaybeTable f MaybeTable {tag = tag@Tag {aggregator, expr}, just} =
217 aggregate = unsafeMakeAggregate toPrimExpr fromPrimExpr aggregator expr
219 aggregate = unsafeMakeAggregate toPrimExpr fromPrimExpr aggregator expr
218
220
219
221
222+insertMaybeTable :: Table Insert a => Maybe a -> MaybeTable a
223+insertMaybeTable = \case
224+ Nothing -> MaybeTable (fromExpr null) (fromColumns (toInsert undefined))
225+ Just a -> justTable a
226+
227+
220nameMaybeTable :: Name (Maybe MaybeTag) -> a -> MaybeTable a
228nameMaybeTable :: Name (Maybe MaybeTag) -> a -> MaybeTable a
221nameMaybeTable = MaybeTable . fromName
229nameMaybeTable = MaybeTable . fromName
222
230
src/Rel8/Table/NonEmpty.hs+21−3
@@ -1,4 +1,3 @@
1−{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
1{-# language FlexibleContexts #-}
3{-# language FlexibleInstances #-}
2{-# language FlexibleInstances #-}
4{-# language MultiParamTypeClasses #-}
3{-# language MultiParamTypeClasses #-}
@@ -11,8 +10,7 @@
11
10
12module Rel8.Table.NonEmpty
11module Rel8.Table.NonEmpty
13 ( NonEmptyTable(..)
12 ( NonEmptyTable(..)
14− , HNonEmptyTable
15− , nonEmptyTable
13+ , nonEmptyTable, insertNonEmptyTable, nameNonEmptyTable
16 )
14 )
17where
15where
18
16
@@ -26,9 +24,12 @@ import Prelude
26-- rel8
24-- rel8
27import Rel8.Expr ( Expr, Col(..) )
25import Rel8.Expr ( Expr, Col(..) )
28import Rel8.Expr.Array ( sappend1, snonEmptyOf )
26import Rel8.Expr.Array ( sappend1, snonEmptyOf )
27+import Rel8.Kind.Necessity ( SNecessity( SOptional, SRequired ) )
29import Rel8.Schema.Dict ( Dict( Dict ) )
28import Rel8.Schema.Dict ( Dict( Dict ) )
30import Rel8.Schema.HTable.NonEmpty ( HNonEmptyTable )
29import Rel8.Schema.HTable.NonEmpty ( HNonEmptyTable )
31import Rel8.Schema.HTable.Vectorize ( happend, hvectorize )
30import Rel8.Schema.HTable.Vectorize ( happend, hvectorize )
31+import Rel8.Schema.Insert ( Col( OptionalInsert, RequiredInsert ), Insert )
32+import Rel8.Schema.Name ( Col( NameCol ), Name )
32import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
33import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
33import Rel8.Schema.Reify ( hreify, hunreify )
34import Rel8.Schema.Reify ( hreify, hunreify )
34import Rel8.Schema.Spec ( SSpec(..) )
35import Rel8.Schema.Spec ( SSpec(..) )
@@ -115,3 +116,20 @@ nonEmptyTable =
115 NonEmptyTable .
116 NonEmptyTable .
116 hvectorize (\SSpec {info} -> DB . snonEmptyOf info . fmap unDB) .
117 hvectorize (\SSpec {info} -> DB . snonEmptyOf info . fmap unDB) .
117 fmap toColumns
118 fmap toColumns
119+
120+
121+insertNonEmptyTable :: Table Insert a => NonEmpty a -> NonEmptyTable a
122+insertNonEmptyTable =
123+ NonEmptyTable .
124+ hvectorize (\SSpec {necessity, info} -> case necessity of
125+ SRequired -> RequiredInsert . snonEmptyOf info . fmap (\(RequiredInsert a) -> a)
126+ SOptional -> OptionalInsert . fmap (snonEmptyOf info) . traverse (\(OptionalInsert a) -> a)) .
127+ fmap toColumns
128+
129+
130+nameNonEmptyTable :: Table Name a => a -> NonEmptyTable a
131+nameNonEmptyTable =
132+ NonEmptyTable .
133+ hvectorize (\_ (Identity (NameCol a)) -> NameCol a) .
134+ pure .
135+ toColumns
src/Rel8/Table/These.hs+10−2
@@ -21,7 +21,7 @@ module Rel8.Table.These
21 , isThisTable, isThatTable, isThoseTable
21 , isThisTable, isThatTable, isThoseTable
22 , hasHereTable, hasThereTable
22 , hasHereTable, hasThereTable
23 , justHereTable, justThereTable
23 , justHereTable, justThereTable
24− , aggregateTheseTable, nameTheseTable
24+ , aggregateTheseTable, insertTheseTable, nameTheseTable
25 )
25 )
26where
26where
27
27
@@ -52,6 +52,7 @@ import Rel8.Schema.HTable.Label ( hlabel, hunlabel )
52import Rel8.Schema.HTable.Identity ( HIdentity(..) )
52import Rel8.Schema.HTable.Identity ( HIdentity(..) )
53import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
53import Rel8.Schema.HTable.Nullify ( hnullify, hunnullify )
54import Rel8.Schema.HTable.These ( HTheseTable(..) )
54import Rel8.Schema.HTable.These ( HTheseTable(..) )
55+import Rel8.Schema.Insert ( Insert )
55import Rel8.Schema.Name ( Name )
56import Rel8.Schema.Name ( Name )
56import Rel8.Table
57import Rel8.Table
57 ( Table, Columns, Context, fromColumns, toColumns
58 ( Table, Columns, Context, fromColumns, toColumns
@@ -62,7 +63,7 @@ import Rel8.Table.Maybe
62 ( MaybeTable(..)
63 ( MaybeTable(..)
63 , maybeTable, justTable, nothingTable
64 , maybeTable, justTable, nothingTable
64 , isJustTable
65 , isJustTable
65− , aggregateMaybeTable, nameMaybeTable
66+ , aggregateMaybeTable, insertMaybeTable, nameMaybeTable
66 )
67 )
67import Rel8.Table.Ord ( OrdTable, ordTable )
68import Rel8.Table.Ord ( OrdTable, ordTable )
68import Rel8.Table.Recontextualize ( Recontextualize )
69import Rel8.Table.Recontextualize ( Recontextualize )
@@ -77,6 +78,7 @@ import Data.Functor.Bind ( Bind, (>>-) )
77
78
78-- these
79-- these
79import Data.These ( These )
80import Data.These ( These )
81+import Data.These.Combinators ( justHere, justThere )
80
82
81
83
82type TheseTable :: Type -> Type -> Type
84type TheseTable :: Type -> Type -> Type
@@ -239,6 +241,12 @@ aggregateTheseTable f g TheseTable {here, there} =
239 liftF2 TheseTable (aggregateMaybeTable f here) (aggregateMaybeTable g there)
241 liftF2 TheseTable (aggregateMaybeTable f here) (aggregateMaybeTable g there)
240
242
241
243
244+insertTheseTable :: (Table Insert a, Table Insert b)
245+ => These a b -> TheseTable a b
246+insertTheseTable =
247+ TheseTable <$> insertMaybeTable . justHere <*> insertMaybeTable . justThere
248+
249+
242nameTheseTable :: ()
250nameTheseTable :: ()
243 => Name (Maybe MaybeTag)
251 => Name (Maybe MaybeTag)
244 -> Name (Maybe MaybeTag)
252 -> Name (Maybe MaybeTag)