@@ -15,7 +15,7 @@
15module Rel8.Schema.Insert
15module Rel8.Schema.Insert
16 ( Insert(..)
16 ( Insert(..)
17 , OnConflict(..)
17 , OnConflict(..)
18− , Col( RequiredInsert, OptionalInsert )
18+ , Col( InsertCol )
20 , Insertion(..)
20 , Insertion(..)
@@ -29,14 +29,14 @@ import Prelude
30import Rel8.Aggregate ( Aggregate )
30import Rel8.Aggregate ( Aggregate )
31import Rel8.Expr ( Expr )
31import Rel8.Expr ( Expr )
32−import Rel8.Kind.Necessity ( Necessity(Optional, Required) )
32+import Rel8.Kind.Necessity ( Necessity(Optional, Required), KnownNecessity )
33import Rel8.Schema.Context ( Interpretation(..) )
33import Rel8.Schema.Context ( Interpretation(..) )
34import Rel8.Schema.Context.Label ( Labelable(..) )
34import Rel8.Schema.Context.Label ( Labelable(..) )
35import Rel8.Schema.Context.Nullify
35import Rel8.Schema.Context.Nullify
36 ( Nullifiable, encodeTag, decodeTag, nullifier, unnullifier
36 ( Nullifiable, encodeTag, decodeTag, nullifier, unnullifier
37 , runTag, unnull
37 , runTag, unnull
39−import Rel8.Schema.HTable.Identity ( HIdentity( HType ), HType )
39+import Rel8.Schema.HTable.Identity ( HIdentity( HIdentity ) )
40import Rel8.Schema.Name ( Name, Selects )
40import Rel8.Schema.Name ( Name, Selects )
41import Rel8.Schema.Null ( Sql )
41import Rel8.Schema.Null ( Sql )
42import Rel8.Schema.Reify ( notReify )
42import Rel8.Schema.Reify ( notReify )
@@ -79,80 +79,78 @@ data Insert a where
80instance Interpretation Insert where
80instance Interpretation Insert where
81 data Col Insert _spec where
81 data Col Insert _spec where
82− RequiredInsert :: Expr a -> Col Insert ('Spec labels 'Required a)
82+ InsertCol :: Insertion necessity a -> Col Insert ('Spec labels necessity a)
83− OptionalInsert :: Maybe (Expr a) -> Col Insert ('Spec labels 'Optional a)
86−type Insertion :: Type -> Type
85+type Insertion :: Necessity -> Type -> Type
87−newtype Insertion a = Insertion (Expr a)
86+data Insertion necessity a where
87+ Default :: Insertion 'Optional a
88+ Insertion :: Expr a -> Insertion necessity a
91+instance (KnownNecessity necessity, Sql DBType a) =>
90−instance Sql DBType a => Table Insert (Insertion a) where
92+ Table Insert (Insertion necessity a)
91− type Columns (Insertion a) = HType a
94+ type Columns (Insertion necessity a) = HIdentity ('Spec '[] necessity a)
92− type Context (Insertion a) = Insert
95+ type Context (Insertion necessity a) = Insert
94− toColumns (Insertion a) = HType (RequiredInsert a)
97+ toColumns = HIdentity . InsertCol
95− fromColumns (HType (RequiredInsert a)) = Insertion a
98+ fromColumns (HIdentity (InsertCol a)) = a
96 reify = notReify
99 reify = notReify
97 unreify = notReify
100 unreify = notReify
100instance Sql DBType a =>
103instance Sql DBType a =>
101− Recontextualize Aggregate Insert (Aggregate (Expr a)) (Insertion a)
104+ Recontextualize Aggregate Insert (Aggregate (Expr a)) (Insertion 'Required a)
104−instance Sql DBType a => Recontextualize Expr Insert (Expr a) (Insertion a)
107+instance Sql DBType a => Recontextualize Expr Insert (Expr a) (Insertion 'Required a)
107instance Sql DBType a =>
110instance Sql DBType a =>
108− Recontextualize Result Insert (Identity a) (Insertion a)
111+ Recontextualize Result Insert (Identity a) (Insertion 'Required a)
111instance Sql DBType a =>
114instance Sql DBType a =>
112− Recontextualize Insert Aggregate (Insertion a) (Aggregate (Expr a))
115+ Recontextualize Insert Aggregate (Insertion 'Required a) (Aggregate (Expr a))
115−instance Sql DBType a => Recontextualize Insert Expr (Insertion a) (Expr a)
118+instance Sql DBType a => Recontextualize Insert Expr (Insertion 'Required a) (Expr a)
118instance Sql DBType a =>
121instance Sql DBType a =>
119− Recontextualize Insert Result (Insertion a) (Identity a)
122+ Recontextualize Insert Result (Insertion 'Required a) (Identity a)
122−instance Sql DBType a => Recontextualize Insert Insert (Insertion a) (Insertion a)
125+instance Sql DBType a => Recontextualize Insert Insert (Insertion 'Required a) (Insertion 'Required a)
125−instance Sql DBType a => Recontextualize Insert Name (Insertion a) (Name a)
128+instance Sql DBType a => Recontextualize Insert Name (Insertion 'Required a) (Name a)
128−instance Sql DBType a => Recontextualize Name Insert (Name a) (Insertion a)
131+instance Sql DBType a => Recontextualize Name Insert (Name a) (Insertion 'Required a)
131instance Labelable Insert where
134instance Labelable Insert where
132− labeler = \case
135+ labeler (InsertCol a) = InsertCol a
133− RequiredInsert a -> RequiredInsert a
134− OptionalInsert ma -> OptionalInsert ma
136− unlabeler = \case
136+ unlabeler (InsertCol a) = InsertCol a
137− RequiredInsert a -> RequiredInsert a
138− OptionalInsert ma -> OptionalInsert ma
141instance Nullifiable Insert where
139instance Nullifiable Insert where
142− encodeTag = RequiredInsert . expr
140+ encodeTag = InsertCol . Insertion . expr
143− decodeTag (RequiredInsert a) = fromExpr a
142+ decodeTag (InsertCol (Insertion a)) = fromExpr a
145 nullifier Tag {expr} test SSpec {nullity} = \case
144 nullifier Tag {expr} test SSpec {nullity} = \case
146− RequiredInsert a ->
145+ InsertCol Default -> InsertCol Default
147− RequiredInsert $ runTag nullity condition a
146+ InsertCol (Insertion a) ->
148− OptionalInsert ma ->
149− OptionalInsert $ runTag nullity condition <$> ma
147+ InsertCol $ Insertion $ runTag nullity condition a
151 condition = test expr
149 condition = test expr
153 unnullifier SSpec {nullity} = \case
151 unnullifier SSpec {nullity} = \case
154− RequiredInsert a -> RequiredInsert $ unnull nullity a
152+ InsertCol Default -> InsertCol Default
155− OptionalInsert ma -> OptionalInsert $ unnull nullity <$> ma
153+ InsertCol (Insertion a) -> InsertCol $ Insertion $ unnull nullity a
157 {-# INLINABLE encodeTag #-}
155 {-# INLINABLE encodeTag #-}
158 {-# INLINABLE decodeTag #-}
156 {-# INLINABLE decodeTag #-}