Define a table with an unqualified name.
Moduleopaleye-0.10.8.0Haskell2010
Opaleye.Table
Table fields can be required or optional and, independently, nullable or non-nullable.
A required non-nullable SqlInt4 (for example) is defined with
requiredTableField and gives rise to a
TableFields (Field SqlInt4) (Field SqlInt4)
The leftmost argument is the type of writes. When you insert or
update into this field you must give it a Field SqlInt4 (which you
can define with sqlInt4 :: Int -> Field SqlInt4).
A required nullable SqlInt4 is defined with requiredTableField and gives rise
to a
TableFields (FieldNullable SqlInt4) (FieldNullable SqlInt4)
When you insert or update into this field you must give it a
FieldNullable SqlInt4, which you can define either with sqlInt4 and
toNullable :: Field a -> FieldNullable a, or with null ::
FieldNullable a.
An optional non-nullable SqlInt4 is defined with optionalTableField and gives
rise to a
TableFields (Maybe (Field SqlInt4)) (Field SqlInt4)
Optional fields are those that can be omitted on writes, such as
those that have DEFAULTs or those that are SERIAL.
When you insert or update into this field you must give it a Maybe
(Field SqlInt4). If you provide Nothing then the field will be
omitted from the query and the default value will be used. Otherwise
you have to provide a Just containing a Field SqlInt4.
An optional nullable SqlInt4 is defined with optionalTableField and gives
rise to a
TableFields (Maybe (FieldNullable SqlInt4)) (FieldNullable SqlInt4)
Optional fields are those that can be omitted on writes, such as
those that have DEFAULTs or those that are SERIAL.
When you insert or update into this field you must give it a Maybe
(FieldNullable SqlInt4). If you provide Nothing then the default
value will be used. Otherwise you have to provide a Just containing
a FieldNullable SqlInt4 (which can be null).
- 2 types
- 1 class
- 8 values
- Packageopaleye-0.10.8.0
- Exports12
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceTable.hs
Defining tables
8 declarationstableWithSchema :: StringSchema name
-> StringTable name
-> TableFields writeFields viewFields-> Table writeFields viewFields
Define a table with a qualified name.
Define a table as follows, where "id", "color", "location",
"quantity" and "radius" are the table's fields in Postgres and
the types are given in the type signature. The id field is an
autoincrementing field (i.e. optional for writes).
data Widget a b c d e = Widget { wid :: a
, color :: b
, location :: c
, quantity :: d
, radius :: e }
$(makeAdaptorAndInstanceInferrable "pWidget" ''Widget)
widgetTable :: Table (Widget (Maybe (Field SqlInt4)) (Field SqlText) (Field SqlText)
(Field SqlInt4) (Field SqlFloat8))
(Widget (Field SqlInt4) (Field SqlText) (Field SqlText)
(Field SqlInt4) (Field SqlFloat8))
widgetTable = table "widgetTable"
(pWidget Widget { wid = tableField "id"
, color = tableField "color"
, location = tableField "location"
, quantity = tableField "quantity"
, radius = tableField "radius" })
Instances2Profunctor, Functor
Profunctor TableDefined in opaleye-0.10.8.0 · Opaleye.Internal.TableFunctor (Table a)Defined in opaleye-0.10.8.0 · Opaleye.Internal.Table
Infer either a required (requiredTableField) or optional
(optionalTableField) field depending on
the write type. It's generally more convenient to use this
than required or optional but you do have to provide a type
signature instead.
optionalTableField is for fields that you can be set to DEFAULT on writes,
such as fields which have defaults or which are SERIAL. Setting
the write value to Nothing uses SQL DEFAULT in the generated
update.
requiredTableField is for fields which are not optional. You
must provide them on writes.
omitOnwritetablefield is for fields that should be omitted on
writes, such as those that are GENERATED ALWAYS.
You should not define your own instances of InferrableTableField.
Instances2InferrableTableField
InferrableTableField (Maybe (Field_ n r)) n rDefined in opaleye-0.10.8.0 · Opaleye.Internal.TableEquivalent to defining the column with optionalTableField. If the write type is
Maybe (Field_ n r)(i.e.DEFAULTcan be written to it) then the write type isField_ n r.InferrableTableField (Field_ n r) n rDefined in opaleye-0.10.8.0 · Opaleye.Internal.TableEquivalent to defining the column with requiredTableField. If the write type is
Field_ n rthen the read type is alsoField_ n r.
Selecting from tables
1 declarationExample type specialization:
selectTable :: Table w (Field a, Field b)
-> Select (Field a, Field b)
Assuming the makeAdaptorAndInstanceInferrable splice has been run for the
product type Foo:
selectTable :: Table w (Foo (Field a) (Field b) (Field c))
-> Select (Foo (Field a) (Field b) (Field c))
Data types
1 declarationInstances4Profunctor, ProductProfunctor, Functor, Applicative
Profunctor TableFieldsDefined in opaleye-0.10.8.0 · Opaleye.Internal.TableProductProfunctor TableFieldsDefined in opaleye-0.10.8.0 · Opaleye.Internal.TableFunctor (TableFields a)Defined in opaleye-0.10.8.0 · Opaleye.Internal.TableApplicative (TableFields a)Defined in opaleye-0.10.8.0 · Opaleye.Internal.Table
Explicit versions
1 declarationDeprecated versions
1 declarationDon't use readOnlyTableField. It will be formally deprecated
in a future version. It is broken for updates because it always
updates its field with DEFAULT which is very unlikely to be what
you want! For more details see
https://github.com/tomjaguarpaw/haskell-opaleye/issues/447#issuecomment-685617841.