diff --git a/src/Opaleye/Internal/Table.hs b/src/Opaleye/Internal/Table.hs index 54cf0d22..85de5137 100644 --- a/src/Opaleye/Internal/Table.hs +++ b/src/Opaleye/Internal/Table.hs @@ -87,6 +87,9 @@ newtype Writer columns dummy = Writer (forall f. Functor f => PM.PackMap (f HPQ.PrimExpr, String) () (f columns) ()) +coerceWriterOutput :: Writer columns dummy -> Writer columns dummy' +coerceWriterOutput (Writer w) = Writer w + -- | 'requiredTableField' is for fields which are not optional. You -- must provide them on writes. requiredTableField :: String -> TableFields (Field_ n a) (Field_ n a) @@ -109,6 +112,11 @@ optionalTableField columnName = TableFields readOnlyTableField :: String -> TableFields () (Field_ n a) readOnlyTableField = lmap (const Nothing) . optionalTableField +omitOnWriteTableField :: String -> TableFields () (Field_ n a) +omitOnWriteTableField columnName = TableFields + (coerceWriterOutput (pure ())) + (View (Column (HPQ.BaseTableAttrExpr columnName))) + -- | You should not define your own instances of -- 'InferrableTableField'. class InferrableTableField w n r diff --git a/src/Opaleye/Table.hs b/src/Opaleye/Table.hs index e63d1b04..91ba9b19 100644 --- a/src/Opaleye/Table.hs +++ b/src/Opaleye/Table.hs @@ -63,6 +63,7 @@ module Opaleye.Table (-- * Defining tables T.tableField, T.optionalTableField, T.requiredTableField, + T.omitOnWriteTableField, T.InferrableTableField, -- * Selecting from tables selectTable,