on master help sign in
A ListTable can't really have default values and HVectorize oughtn't preserve Necessity
commit8301eb79cde3445d0fe0271e774ab88431dc59bb authorShane O'Brien <shane.obrien@circuithub.com> dateFri 11 Jun 2021, 10:35 (5 years ago) parentae2ce41
4 files changed+18−24
src/Rel8/Schema/HTable/Vectorize.hs+6−4 src/Rel8/Schema/Result.hs+3−2 src/Rel8/Table/List.hs+4−9 src/Rel8/Table/NonEmpty.hs+5−9
src/Rel8/Schema/HTable/Vectorize.hs+6−4
@@ -32,6 +32,7 @@ import Data.List.NonEmpty ( NonEmpty )
3232import Prelude
3333
3434-- rel8
35+import Rel8.Kind.Necessity ( Necessity( Required ), SNecessity( SRequired ) )
3536import Rel8.Schema.Context.Label ( HLabelable, hlabeler, hunlabeler )
3637import Rel8.Schema.Dict ( Dict( Dict ) )
3738import qualified Rel8.Schema.Kind as K
@@ -78,14 +79,15 @@ newtype HVectorize list table context = HVectorize (HMapTable (Vectorize list) t
7879data Vectorize :: (Type -> Type) -> Spec -> Exp Spec
7980
8081
81−type instance Eval (Vectorize list ('Spec labels necessity a)) = 'Spec labels necessity (list a)
82+type instance Eval (Vectorize list ('Spec labels _necessity a)) = 'Spec labels 'Required (list a)
8283
8384
8485instance Vector list => MapSpec (Vectorize list) where
8586 mapInfo = \case
8687 SSpec {..} -> case listNotNull @list nullity of
8788 Dict -> SSpec
88− { nullity = NotNull
89+ { necessity = SRequired
90+ , nullity = NotNull
8991 , info = vectorTypeInformation nullity info
9092 , ..
9193 }
@@ -95,7 +97,7 @@ hvectorize :: (HTable t, Unzip f, Vector list)
9597 => (forall labels necessity a. ()
9698 => SSpec ('Spec labels necessity a)
9799 -> f (context ('Spec labels necessity a))
98− -> context' ('Spec labels necessity (list a)))
100+ -> context' ('Spec labels 'Required (list a)))
99101 -> f (t context)
100102 -> HVectorize list t context'
101103hvectorize vectorizer as = HVectorize $ htabulate $ \(HMapTableField field) ->
@@ -107,7 +109,7 @@ hvectorize vectorizer as = HVectorize $ htabulate $ \(HMapTableField field) ->
107109hunvectorize :: (HTable t, Repeat f, Vector list)
108110 => (forall labels necessity a. ()
109111 => SSpec ('Spec labels necessity a)
110− -> context ('Spec labels necessity (list a))
112+ -> context ('Spec labels 'Required (list a))
111113 -> f (context' ('Spec labels necessity a)))
112114 -> HVectorize list t context
113115 -> f (t context')
src/Rel8/Schema/Result.hs+3−2
@@ -16,6 +16,7 @@ where
1616import Prelude hiding ( null )
1717
1818-- rel8
19+import Rel8.Kind.Necessity ( Necessity( Required ) )
1920import Rel8.Schema.Context ( Interpretation( Col ) )
2021import Rel8.Schema.HTable.Identity ( HIdentity(..) )
2122import Rel8.Schema.Kind ( Context )
@@ -64,12 +65,12 @@ unnullifier SSpec {nullity} (Result a) =
6465vectorizer :: Functor f
6566 => SSpec ('Spec labels necessity a)
6667 -> f (Col Result ('Spec labels necessity a))
67− -> Col Result ('Spec labels necessity (f a))
68+ -> Col Result ('Spec labels 'Required (f a))
6869vectorizer _ = Result . fmap (\(Result a) -> a)
6970
7071
7172unvectorizer :: Functor f
7273 => SSpec ('Spec labels necessity a)
73− -> Col Result ('Spec labels necessity (f a))
74+ -> Col Result ('Spec labels 'Required (f a))
7475 -> f (Col Result ('Spec labels necessity a))
7576unvectorizer _ (Result results) = Result <$> results
src/Rel8/Table/List.hs+4−9
@@ -23,11 +23,10 @@ import Prelude
2323-- rel8
2424import Rel8.Expr ( Expr, Col(..) )
2525import Rel8.Expr.Array ( sappend, sempty, slistOf )
26−import Rel8.Kind.Necessity ( SNecessity( SOptional, SRequired ) )
2726import Rel8.Schema.Dict ( Dict( Dict ) )
2827import Rel8.Schema.HTable.List ( HListTable )
2928import Rel8.Schema.HTable.Vectorize ( happend, hempty, hvectorize )
30−import Rel8.Schema.Insert ( Col( OptionalInsert, RequiredInsert ), Insert )
29+import Rel8.Schema.Insert ( Inserts )
3130import Rel8.Schema.Name ( Col( NameCol ), Name )
3231import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
3332import Rel8.Schema.Spec ( SSpec(..) )
@@ -42,6 +41,7 @@ import Rel8.Table.Alternative
4241 , AlternativeTable, emptyTable
4342 )
4443import Rel8.Table.Eq ( EqTable, eqTable )
44+import Rel8.Table.Insert ( toInsert )
4545import Rel8.Table.Ord ( OrdTable, ordTable )
4646import Rel8.Table.Recontextualize ( Recontextualize )
4747import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
@@ -127,13 +127,8 @@ listTable =
127127 fmap toColumns
128128
129129
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
130+insertListTable :: Inserts exprs inserts => [exprs] -> ListTable inserts
131+insertListTable = toInsert . listTable
137132
138133
139134nameListTable :: Table Name a => a -> ListTable a
src/Rel8/Table/NonEmpty.hs+5−9
@@ -24,11 +24,10 @@ import Prelude
2424-- rel8
2525import Rel8.Expr ( Expr, Col(..) )
2626import Rel8.Expr.Array ( sappend1, snonEmptyOf )
27−import Rel8.Kind.Necessity ( SNecessity( SOptional, SRequired ) )
2827import Rel8.Schema.Dict ( Dict( Dict ) )
2928import Rel8.Schema.HTable.NonEmpty ( HNonEmptyTable )
3029import Rel8.Schema.HTable.Vectorize ( happend, hvectorize )
31−import Rel8.Schema.Insert ( Col( OptionalInsert, RequiredInsert ), Insert )
30+import Rel8.Schema.Insert ( Inserts )
3231import Rel8.Schema.Name ( Col( NameCol ), Name )
3332import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
3433import Rel8.Schema.Reify ( hreify, hunreify )
@@ -40,6 +39,7 @@ import Rel8.Table
4039 )
4140import Rel8.Table.Alternative ( AltTable, (<|>:) )
4241import Rel8.Table.Eq ( EqTable, eqTable )
42+import Rel8.Table.Insert ( toInsert )
4343import Rel8.Table.Ord ( OrdTable, ordTable )
4444import Rel8.Table.Recontextualize ( Recontextualize )
4545import Rel8.Table.Serialize ( FromExprs, ToExprs, fromResult, toResult )
@@ -118,13 +118,9 @@ nonEmptyTable =
118118 fmap toColumns
119119
120120
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
121+insertNonEmptyTable :: Inserts exprs inserts
122+ => NonEmpty exprs -> NonEmptyTable inserts
123+insertNonEmptyTable = toInsert . nonEmptyTable
128124
129125
130126nameNonEmptyTable :: Table Name a => a -> NonEmptyTable a