beam-core-0.10.3.0: Type-safe, feature-complete SQL query and manipulation interface for Haskell
Safe HaskellNone
LanguageHaskell2010

Database.Beam.Schema.Tables

Description

Defines a generic schema type that can be used to define schemas for Beam tables

Synopsis

Database Types

class Database be (db :: (Type -> Type) -> Type) Source #

Allows introspection into database types.

All database types must be of kind '(Type -> Type) -> Type'. If the type parameter is named f, each field must be of the type of f applied to some type for which an IsDatabaseEntity instance exists.

The be type parameter is necessary so that the compiler can ensure that backend-specific entities only work on the proper backend.

Entities are documented under the corresponding section and in the manual

zipTables :: (Database be db, Applicative m) => Proxy be -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> db f -> db g -> m (db h) Source #

Default derived function. Do not implement this yourself.

The idea is that, for any two databases over particular entity tags f and g, if we can take any entity in f and g to the corresponding entity in h (in the possibly effectful applicative functor m), then we can transform the two databases over f and g to a database in h, within m.

If that doesn't make sense, don't worry. This is mostly beam internal

type DatabaseSettings be (db :: (Type -> Type) -> Type) = db (DatabaseEntity be db) Source #

When parameterized by this entity tag, a database type will hold meta-information on the Haskell mappings of database entities. Under the hood, each entity type is transformed into its DatabaseEntityDescriptor type. For tables this includes the table name as well as the corresponding TableSettings, which provides names for each column.

class RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be entityType)) => IsDatabaseEntity be entityType where Source #

Associated Types

data DatabaseEntityDescriptor be entityType Source #

type DatabaseEntityDefaultRequirements be entityType Source #

type DatabaseEntityRegularRequirements be entityType Source #

Instances

Instances details
IsDatabaseEntity be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => IsDatabaseEntity be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Associated Types

data DatabaseEntityDescriptor be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) where
type DatabaseEntityDefaultRequirements be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityRegularRequirements be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => IsDatabaseEntity be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data family DatabaseEntityDescriptor be entityType Source #

Instances

Instances details
RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (DomainTypeEntity ty))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (TableEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (ViewEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) where
data DatabaseEntityDescriptor be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (ViewEntity tbl) where

data DatabaseEntity be (db :: (Type -> Type) -> Type) entityType where Source #

Represents a meta-description of a particular entityType. Mostly, a wrapper around 'DatabaseEntityDescriptor be entityType', but carries around the IsDatabaseEntity dictionary.

Constructors

DatabaseEntity :: forall be entityType (db :: (Type -> Type) -> Type). IsDatabaseEntity be entityType => DatabaseEntityDescriptor be entityType -> DatabaseEntity be db entityType 

Instances

Instances details
Database be db => RenamableWithRule (db (EntityModification (DatabaseEntity be db) be)) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

IsDatabaseEntity be entity => RenamableWithRule (EntityModification (DatabaseEntity be db) be entity) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

(Selector f, IsDatabaseEntity be x, DatabaseEntityDefaultRequirements be x) => GAutoDbSettings (S1 f (K1 R (DatabaseEntity be db x) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: S1 f (K1 R (DatabaseEntity be db x) :: Type -> Type) p Source #

(Database be embedded, Generic (DatabaseSettings be embedded), GAutoDbSettings (Rep (DatabaseSettings be embedded) ())) => GAutoDbSettings (S1 f (K1 R (embedded (DatabaseEntity be super)) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: S1 f (K1 R (embedded (DatabaseEntity be super)) :: Type -> Type) p Source #

data TableEntity (tbl :: (Type -> Type) -> Type) Source #

An entity tag for tables. See the documentation for Table or consult the manual for more.

Instances

Instances details
Beamable tbl => IsDatabaseEntity be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Associated Types

data DatabaseEntityDescriptor be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) where
type DatabaseEntityDefaultRequirements be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityRegularRequirements be (TableEntity tbl) 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (TableEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityDefaultRequirements be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (TableEntity tbl) where
type DatabaseEntityRegularRequirements be (TableEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data ViewEntity (view :: (Type -> Type) -> Type) Source #

Instances

Instances details
Beamable tbl => IsDatabaseEntity be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (ViewEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityDefaultRequirements be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (ViewEntity tbl) where
type DatabaseEntityRegularRequirements be (ViewEntity tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DomainTypeEntity ty Source #

Instances

Instances details
IsDatabaseEntity be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (DomainTypeEntity ty))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityDefaultRequirements be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

data DatabaseEntityDescriptor be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

type DatabaseEntityRegularRequirements be (DomainTypeEntity ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

dbEntityDescriptor :: forall be (db :: (Type -> Type) -> Type) entityType r. Getting r (DatabaseEntity be db entityType) (DatabaseEntityDescriptor be entityType) Source #

type DatabaseModification (f :: Type -> Type) be (db :: (Type -> Type) -> Type) = db (EntityModification f be) Source #

A helper data type that lets you modify a database schema. Converts all entities in the database into functions from that entity to itself.

newtype EntityModification (f :: Type -> Type) be e Source #

A newtype wrapper around 'f e -> f e' (i.e., an endomorphism between entity types in f). You usually want to use modifyTable or another function to contstruct these for you.

Constructors

EntityModification (Endo (f e)) 

Instances

Instances details
Database be db => RenamableWithRule (db (EntityModification (DatabaseEntity be db) be)) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

IsDatabaseEntity be entity => RenamableWithRule (EntityModification (DatabaseEntity be db) be entity) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Monoid (EntityModification f be e) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Semigroup (EntityModification f be e) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

newtype FieldModification (f :: Type -> Type) a Source #

A newtype wrapper around 'Columnar f a -> Columnar f a' (i.e., an endomorphism between Columnars over f). You usually want to use fieldNamed or the IsString instance to rename the field, when 'f ~ TableField'

Constructors

FieldModification (Columnar f a -> Columnar f a) 

Instances

Instances details
(Beamable tbl, RenamableField f) => RenamableWithRule (tbl (FieldModification f)) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

IsString (FieldModification (TableField tbl) a) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

dbModification :: forall (f :: Type -> Type) be db. Database be db => DatabaseModification f be db Source #

Return a DatabaseModification that does nothing. This is useful if you only want to rename one table. You can do

dbModification { tbl1 = modifyTable (\oldNm -> "NewTableName") tableModification }

tableModification :: forall (f :: Type -> Type) tbl. Beamable tbl => tbl (FieldModification f) Source #

Return a table modification (for use with modifyTable) that does nothing. Useful if you only want to change the table name, or if you only want to modify a few fields.

For example,

tableModification { field1 = "Column1" }

is a table modification (where 'f ~ TableField tbl') that changes the column name of field1 to Column1.

withDbModification :: forall db be (entity :: Type -> ((Type -> Type) -> Type) -> Type -> Type). Database be db => db (entity be db) -> DatabaseModification (entity be db) be db -> db (entity be db) Source #

Modify a database according to a given modification. Most useful for DatabaseSettings to change the name mappings of tables and fields. For example, you can use this to modify the default names of a table

db :: DatabaseSettings MyDb
db = defaultDbSettings `withDbModification`
     dbModification {
       -- Change default name "table1" to "Table_1". Change the name of "table1Field1" to "first_name"
       table1 = setEntityName "Table_1" <> modifyTableFields tableModification { 
           table1Field1 = "first_name" 
        }
     }

withTableModification :: forall tbl (f :: Type -> Type). Beamable tbl => tbl (FieldModification f) -> tbl f -> tbl f Source #

Modify a table according to the given field modifications. Invoked by modifyTable to apply the modification in the database. Not used as often in user code, but provided for completeness.

modifyTable :: forall tbl be (db :: (Type -> Type) -> Type). (Beamable tbl, Table tbl) => (Text -> Text) -> tbl (FieldModification (TableField tbl)) -> EntityModification (DatabaseEntity be db) be (TableEntity tbl) Source #

Deprecated: Instead of 'modifyTable fTblNm fFields', use 'modifyEntityName _ <> modifyTableFields _'

Provide an EntityModification for TableEntitys. Allows you to modify the name of the table and provide a modification for each field in the table. See the examples for withDbModification for more.

modifyEntityName :: forall be entity (db :: (Type -> Type) -> Type). IsDatabaseEntity be entity => (Text -> Text) -> EntityModification (DatabaseEntity be db) be entity Source #

Construct an EntityModification to rename any database entity

setEntityName :: forall be entity (db :: (Type -> Type) -> Type). IsDatabaseEntity be entity => Text -> EntityModification (DatabaseEntity be db) be entity Source #

Change the entity name without consulting the beam-assigned one

modifyTableFields :: forall tbl be (db :: (Type -> Type) -> Type). tbl (FieldModification (TableField tbl)) -> EntityModification (DatabaseEntity be db) be (TableEntity tbl) Source #

Construct an EntityModification to rename the fields of a TableEntity

fieldNamed :: forall (tbl :: (Type -> Type) -> Type) a. Text -> FieldModification (TableField tbl) a Source #

A field modification to rename the field. Also offered under the IsString instance for 'FieldModification (TableField tbl) a' for convenience.

modifyEntitySchema :: forall be entity (db :: (Type -> Type) -> Type). IsDatabaseEntity be entity => (Maybe Text -> Maybe Text) -> EntityModification (DatabaseEntity be db) be entity Source #

Construct an EntityModification to set the schema of a database entity

setEntitySchema :: forall be entity (db :: (Type -> Type) -> Type). IsDatabaseEntity be entity => Maybe Text -> EntityModification (DatabaseEntity be db) be entity Source #

defaultDbSettings :: (Generic (DatabaseSettings be db), GAutoDbSettings (Rep (DatabaseSettings be db) ())) => DatabaseSettings be db Source #

Automatically provide names for tables, and descriptions for tables (using defTblFieldSettings). Your database must implement Generic, and must be auto-derivable. For more information on name generation, see the manual

embedDatabase :: forall be embedded (db :: (Type -> Type) -> Type). Database be embedded => DatabaseSettings be embedded -> embedded (EntityModification (DatabaseEntity be db) be) Source #

Embed database settings in a larger database

class RenamableWithRule mod where Source #

Methods

renamingFields :: (NonEmpty Text -> Text) -> mod Source #

Instances

Instances details
RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (DomainTypeEntity ty))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (TableEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Beamable tbl => RenamableWithRule (FieldRenamer (DatabaseEntityDescriptor be (ViewEntity tbl))) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Database be db => RenamableWithRule (db (EntityModification (DatabaseEntity be db) be)) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

(Beamable tbl, RenamableField f) => RenamableWithRule (tbl (FieldModification f)) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

IsDatabaseEntity be entity => RenamableWithRule (EntityModification (DatabaseEntity be db) be entity) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

class RenamableField (f :: Type -> Type) where Source #

Methods

renameField :: Proxy f -> Proxy a -> (NonEmpty Text -> Text) -> Columnar f a -> Columnar f a Source #

Instances

Instances details
RenamableField (TableField tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

renameField :: Proxy (TableField tbl) -> Proxy a -> (NonEmpty Text -> Text) -> Columnar (TableField tbl) a -> Columnar (TableField tbl) a Source #

data Lenses (t :: (Type -> Type) -> Type) (f :: Type -> Type) x Source #

Instances

Instances details
(Generic (sub (Nullable m)), Generic (sub (Nullable (Lenses t m))), GTableLenses t m (Rep (sub (Nullable m))) (Rep (sub (Nullable (Lenses t m))))) => GTableLenses t m (K1 R (sub (Nullable m)) :: k -> Type) (K1 R (sub (Nullable (Lenses t m))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gTableLenses :: forall (p :: k). Proxy (K1 R (sub (Nullable m)) :: k -> Type) -> Lens' (t m) (K1 R (sub (Nullable m)) p) -> K1 R (sub (Nullable (Lenses t m))) () Source #

(Generic (sub m), Generic (sub (Lenses t m)), GTableLenses t m (Rep (sub m)) (Rep (sub (Lenses t m)))) => GTableLenses t m (K1 R (sub m) :: k -> Type) (K1 R (sub (Lenses t m)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gTableLenses :: forall (p :: k). Proxy (K1 R (sub m) :: k -> Type) -> Lens' (t m) (K1 R (sub m) p) -> K1 R (sub (Lenses t m)) () Source #

data LensFor t x where Source #

Constructors

LensFor :: forall t x. Generic t => Lens' t x -> LensFor t x 

Instances

Instances details
Generic (t m) => GTableLenses t m (K1 R x :: k -> Type) (K1 R (LensFor (t m) x) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gTableLenses :: forall (p :: k). Proxy (K1 R x :: k -> Type) -> Lens' (t m) (K1 R x p) -> K1 R (LensFor (t m) x) () Source #

Columnar and Column Tags

type family Columnar (f :: Type -> Type) x where ... Source #

A type family that we use to "tag" columns in our table datatypes.

This is what allows us to use the same table type to hold table data, describe table settings, derive lenses, and provide expressions.

The basic rules are

Columnar Identity x = x

Thus, any Beam table applied to Identity will yield a simplified version of the data type, that contains just what you'd expect.

The Nullable type is used when referencing PrimaryKeys that we want to include optionally. For example, if we have a table with a PrimaryKey, like the following

data BeamTableT f = BeamTableT
                  { _refToAnotherTable :: PrimaryKey AnotherTableT f
                  , ... }

we would typically be required to provide values for the PrimaryKey embedded into BeamTableT. We can use Nullable to lift this constraint.

data BeamTableT f = BeamTableT
                  { _refToAnotherTable :: PrimaryKey AnotherTableT (Nullable f)
                  , ... }

Now we can use just_ and nothing_ to refer to this table optionally. The embedded PrimaryKey in _refToAnotherTable automatically has its fields converted into Maybe using Nullable.

The last Columnar rule is

Columnar f x = f x

Use this rule if you'd like to parameterize your table type over any other functor. For example, this is used in the query modules to write expressions such as 'TableT QExpr', which returns a table whose fields have been turned into query expressions.

The other rules are used within Beam to provide lenses and to expose the inner structure of the data type.

Equations

Columnar Exposed x = Exposed x 
Columnar Identity x = x 
Columnar (Lenses t f) x = LensFor (t f) (Columnar f x) 
Columnar (Nullable c) x = Columnar c (Maybe x) 
Columnar f x = f x 

type C (f :: Type -> Type) a = Columnar f a Source #

A short type-alias for Columnar. May shorten your schema definitions

newtype Columnar' (f :: Type -> Type) a Source #

If you declare a function 'Columnar f a -> b' and try to constrain your function by a type class for f, GHC will complain, because f is ambiguous in 'Columnar f a'. For example, 'Columnar Identity (Maybe a) ~ Maybe a' and 'Columnar (Nullable Identity) a ~ Maybe a', so given a type 'Columnar f a', we cannot know the type of f.

Thus, if you need to know f, you can instead use Columnar'. Since its a newtype, it carries around the f paramater unambiguously. Internally, it simply wraps 'Columnar f a'

Constructors

Columnar' (Columnar f a) 

newtype ComposeColumnar (f :: Type -> Type) (g :: Type -> Type) a Source #

Like Compose, but with an intermediate Columnar

Constructors

ComposeColumnar (f (Columnar g a)) 

data Nullable (c :: Type -> Type) x Source #

Support for NULLable Foreign Key references.

data MyTable f = MyTable
               { nullableRef :: PrimaryKey AnotherTable (Nullable f)
               , ... }
                deriving (Generic, Typeable)

See Columnar for more information.

Instances

Instances details
Beamable t => ProjectibleWithPredicate AnyType () Text (t (Nullable (QField s))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

project' :: Monad m => Proxy AnyType -> Proxy ((), Text) -> (forall context. AnyType context => Proxy context -> Proxy () -> Text -> m Text) -> t (Nullable (QField s)) -> m (t (Nullable (QField s))) Source #

projectSkeleton' :: Monad m => Proxy AnyType -> Proxy ((), Text) -> (forall context. AnyType context => Proxy context -> Proxy () -> m Text) -> m (t (Nullable (QField s))) Source #

Beamable t => ProjectibleWithPredicate AnyType () Text (t (Nullable (Const Text :: Type -> Type))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

project' :: Monad m => Proxy AnyType -> Proxy ((), Text) -> (forall context. AnyType context => Proxy context -> Proxy () -> Text -> m Text) -> t (Nullable (Const Text :: Type -> Type)) -> m (t (Nullable (Const Text :: Type -> Type))) Source #

projectSkeleton' :: Monad m => Proxy AnyType -> Proxy ((), Text) -> (forall context. AnyType context => Proxy context -> Proxy () -> m Text) -> m (t (Nullable (Const Text :: Type -> Type))) Source #

(Generic (sub (Nullable m)), Generic (sub (Nullable (Lenses t m))), GTableLenses t m (Rep (sub (Nullable m))) (Rep (sub (Nullable (Lenses t m))))) => GTableLenses t m (K1 R (sub (Nullable m)) :: k -> Type) (K1 R (sub (Nullable (Lenses t m))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gTableLenses :: forall (p :: k). Proxy (K1 R (sub (Nullable m)) :: k -> Type) -> Lens' (t m) (K1 R (sub (Nullable m)) p) -> K1 R (sub (Nullable (Lenses t m))) () Source #

Beamable tbl => GZipTables f g h (K1 R (tbl (Nullable Exposed)) :: Type -> Type) (K1 R (tbl (Nullable f)) :: Type -> Type) (K1 R (tbl (Nullable g)) :: Type -> Type) (K1 R (tbl (Nullable h)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (tbl (Nullable Exposed)) :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> K1 R (tbl (Nullable f)) () -> K1 R (tbl (Nullable g)) () -> m (K1 R (tbl (Nullable h)) ()) Source #

(Beamable t, contextPredicate context) => ProjectibleWithPredicate contextPredicate be (WithExprContext (BeamSqlBackendExpressionSyntax' be)) (t (Nullable (QGenExpr context be s))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

project' :: Monad m => Proxy contextPredicate -> Proxy (be, WithExprContext (BeamSqlBackendExpressionSyntax' be)) -> (forall context0. contextPredicate context0 => Proxy context0 -> Proxy be -> WithExprContext (BeamSqlBackendExpressionSyntax' be) -> m (WithExprContext (BeamSqlBackendExpressionSyntax' be))) -> t (Nullable (QGenExpr context be s)) -> m (t (Nullable (QGenExpr context be s))) Source #

projectSkeleton' :: Monad m => Proxy contextPredicate -> Proxy (be, WithExprContext (BeamSqlBackendExpressionSyntax' be)) -> (forall context0. contextPredicate context0 => Proxy context0 -> Proxy be -> m (WithExprContext (BeamSqlBackendExpressionSyntax' be))) -> m (t (Nullable (QGenExpr context be s))) Source #

(BeamBackend be, Generic (tbl (Nullable Identity)), Generic (tbl (Nullable Exposed)), GFromBackendRow be (Rep (tbl (Nullable Exposed))) (Rep (tbl (Nullable Identity)))) => FromBackendRow be (tbl (Nullable Identity)) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

Beamable tbl => ThreadRewritable s (tbl (Nullable (QGenExpr ctxt syntax s))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

rewriteThread :: Proxy s' -> tbl (Nullable (QGenExpr ctxt syntax s)) -> WithRewrittenThread s s' (tbl (Nullable (QGenExpr ctxt syntax s))) Source #

(BeamSqlBackend be, Beamable t) => SqlDeconstructMaybe be (t (Nullable (QGenExpr ctxt be s))) (t (QGenExpr ctxt be s)) s Source # 
Instance details

Defined in Database.Beam.Query.Combinators

Methods

isJust_ :: t (Nullable (QGenExpr ctxt be s)) -> QGenExpr ctxt0 be s Bool Source #

isNothing_ :: t (Nullable (QGenExpr ctxt be s)) -> QGenExpr ctxt0 be s Bool Source #

maybe_ :: QGenExpr ctxt0 be s y -> (t (QGenExpr ctxt be s) -> QGenExpr ctxt0 be s y) -> t (Nullable (QGenExpr ctxt be s)) -> QGenExpr ctxt0 be s y Source #

FromBackendRow be (t (Nullable Identity)) => GFromBackendRow be (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable Identity)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

FieldsFulfillConstraintNullable c t => GFieldsFulfillConstraint c (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable (HasConstraint c))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

(Beamable table, BeamSqlBackend be, FieldsFulfillConstraintNullable (BeamSqlBackendCanSerialize be) table) => SqlValable (table (Nullable (QGenExpr ctxt be s))) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

Methods

val_ :: HaskellLiteralForQExpr (table (Nullable (QGenExpr ctxt be s))) -> table (Nullable (QGenExpr ctxt be s)) Source #

Beamable tbl => ContextRewritable (tbl (Nullable (QGenExpr old syntax s))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

rewriteContext :: Proxy ctxt -> tbl (Nullable (QGenExpr old syntax s)) -> WithRewrittenContext (tbl (Nullable (QGenExpr old syntax s))) ctxt Source #

TagReducesTo f f' => TagReducesTo (Nullable f) f' Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

reduceTag :: Functor m => (Columnar' f' a' -> m (Columnar' f' a')) -> Columnar' (Nullable f) a -> m (Columnar' (Nullable f) a) Source #

Beamable tbl => QGroupable (tbl (Nullable (QExpr be s))) (tbl (Nullable (QGroupExpr be s))) Source #

group_ for any Beamable type. Adds every field in the type to the grouping key. This is the equivalent of including the grouping expression of each field in the type as part of the aggregate projection

Instance details

Defined in Database.Beam.Query.Aggregate

Methods

group_ :: tbl (Nullable (QExpr be s)) -> tbl (Nullable (QGroupExpr be s)) Source #

(Table t, BeamSqlBackend be) => SqlJustable (t (QExpr be s)) (t (Nullable (QExpr be s))) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

Methods

just_ :: t (QExpr be s) -> t (Nullable (QExpr be s)) Source #

nothing_ :: t (Nullable (QExpr be s)) Source #

Table t => SqlJustable (t Identity) (t (Nullable Identity)) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

(Table t, BeamSqlBackend be) => SqlJustable (PrimaryKey t (QExpr be s)) (PrimaryKey t (Nullable (QExpr be s))) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

Methods

just_ :: PrimaryKey t (QExpr be s) -> PrimaryKey t (Nullable (QExpr be s)) Source #

nothing_ :: PrimaryKey t (Nullable (QExpr be s)) Source #

Table t => SqlJustable (PrimaryKey t Identity) (PrimaryKey t (Nullable Identity)) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

Beamable tbl => GTableSkeleton (K1 R (tbl (Nullable Ignored)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (tbl (Nullable Ignored)) :: Type -> Type) -> K1 R (tbl (Nullable Ignored)) () Source #

(BeamSqlBackend be, Beamable tbl, FieldsFulfillConstraintNullable (HasSqlEqualityCheck be) tbl) => SqlEq (QGenExpr context be s) (tbl (Nullable (QGenExpr context be s))) Source # 
Instance details

Defined in Database.Beam.Query.Ord

Methods

(==.) :: tbl (Nullable (QGenExpr context be s)) -> tbl (Nullable (QGenExpr context be s)) -> QGenExpr context be s Bool Source #

(/=.) :: tbl (Nullable (QGenExpr context be s)) -> tbl (Nullable (QGenExpr context be s)) -> QGenExpr context be s Bool Source #

(==?.) :: tbl (Nullable (QGenExpr context be s)) -> tbl (Nullable (QGenExpr context be s)) -> QGenExpr context be s SqlBool Source #

(/=?.) :: tbl (Nullable (QGenExpr context be s)) -> tbl (Nullable (QGenExpr context be s)) -> QGenExpr context be s SqlBool Source #

type WithRewrittenThread s s' (tbl (Nullable (QGenExpr ctxt syntax s))) Source # 
Instance details

Defined in Database.Beam.Query.Internal

type WithRewrittenThread s s' (tbl (Nullable (QGenExpr ctxt syntax s))) = tbl (Nullable (QGenExpr ctxt syntax s'))
type HaskellLiteralForQExpr (table (Nullable f)) Source # 
Instance details

Defined in Database.Beam.Query.Combinators

type QExprToField (table (Nullable (QGenExpr context syntax s))) Source # 
Instance details

Defined in Database.Beam.Query.Types

type QExprToField (table (Nullable (QGenExpr context syntax s))) = table (Nullable (QField s))
type QExprToIdentity (table (Nullable c)) Source # 
Instance details

Defined in Database.Beam.Query.Types

type QExprToIdentity (table (Nullable c)) = Maybe (QExprToIdentity (table c))
type WithRewrittenContext (tbl (Nullable (QGenExpr old syntax s))) ctxt Source # 
Instance details

Defined in Database.Beam.Query.Internal

type WithRewrittenContext (tbl (Nullable (QGenExpr old syntax s))) ctxt = tbl (Nullable (QGenExpr ctxt syntax s))

data TableField (table :: (Type -> Type) -> Type) ty Source #

Metadata for a field of type ty in table.

Essentially a wrapper over the field name, but with a phantom type parameter, so that it forms an appropriate column tag.

Usually you use the defaultDbSettings function to generate an appropriate naming convention for you, and then modify it with withDbModification if necessary. Under this scheme, the field n be renamed using the IsString instance for TableField, or the fieldNamed function.

Constructors

TableField 

Fields

Instances

Instances details
RenamableField (TableField tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

renameField :: Proxy (TableField tbl) -> Proxy a -> (NonEmpty Text -> Text) -> Columnar (TableField tbl) a -> Columnar (TableField tbl) a Source #

TagReducesTo (TableField tbl) (TableField tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

reduceTag :: Functor m => (Columnar' (TableField tbl) a' -> m (Columnar' (TableField tbl) a')) -> Columnar' (TableField tbl) a -> m (Columnar' (TableField tbl) a) Source #

IsString (FieldModification (TableField tbl) a) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Show (TableField table ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

showsPrec :: Int -> TableField table ty -> ShowS #

show :: TableField table ty -> String #

showList :: [TableField table ty] -> ShowS #

Eq (TableField table ty) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

(==) :: TableField table ty -> TableField table ty -> Bool #

(/=) :: TableField table ty -> TableField table ty -> Bool #

Selector f => GDefaultTableFieldSettings (S1 f (K1 R (TableField table field) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (S1 f (K1 R (TableField table field) :: Type -> Type) p) -> S1 f (K1 R (TableField table field) :: Type -> Type) p Source #

data Exposed x Source #

newtype mainly used to inspect the tag structure of a particular Beamable. Prevents overlapping instances in some case. Usually not used in end-user code.

Instances

Instances details
(fa ~ Columnar f a, ga ~ Columnar g a, ha ~ Columnar h a, ha ~ Columnar h a) => GZipTables f g h (K1 R (Exposed a) :: Type -> Type) (K1 R fa :: Type -> Type) (K1 R ga :: Type -> Type) (K1 R ha :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (Exposed a) :: Type -> Type) -> (forall a0. Columnar' f a0 -> Columnar' g a0 -> m (Columnar' h a0)) -> K1 R fa () -> K1 R ga () -> m (K1 R ha ()) Source #

Beamable tbl => GZipTables f g h (K1 R (tbl Exposed) :: Type -> Type) (K1 R (tbl f) :: Type -> Type) (K1 R (tbl g) :: Type -> Type) (K1 R (tbl h) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (tbl Exposed) :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> K1 R (tbl f) () -> K1 R (tbl g) () -> m (K1 R (tbl h) ()) Source #

Beamable tbl => GZipTables f g h (K1 R (tbl (Nullable Exposed)) :: Type -> Type) (K1 R (tbl (Nullable f)) :: Type -> Type) (K1 R (tbl (Nullable g)) :: Type -> Type) (K1 R (tbl (Nullable h)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (tbl (Nullable Exposed)) :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> K1 R (tbl (Nullable f)) () -> K1 R (tbl (Nullable g)) () -> m (K1 R (tbl (Nullable h)) ()) Source #

FromBackendRow be x => GFromBackendRow be (K1 R (Exposed x) :: Type -> Type) (K1 R (Identity x) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

Methods

gFromBackendRow :: Proxy (K1 R (Exposed x) :: Type -> Type) -> FromBackendRowM be (K1 R (Identity x) ()) Source #

gValuesNeeded :: Proxy be -> Proxy (K1 R (Exposed x) :: Type -> Type) -> Proxy (K1 R (Identity x) :: Type -> Type) -> Int Source #

FromBackendRow be x => GFromBackendRow be (K1 R (Exposed x) :: Type -> Type) (K1 R x :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

Methods

gFromBackendRow :: Proxy (K1 R (Exposed x) :: Type -> Type) -> FromBackendRowM be (K1 R x ()) Source #

gValuesNeeded :: Proxy be -> Proxy (K1 R (Exposed x) :: Type -> Type) -> Proxy (K1 R x :: Type -> Type) -> Int Source #

FromBackendRow be (t Identity) => GFromBackendRow be (K1 R (t Exposed) :: Type -> Type) (K1 R (t Identity) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

Methods

gFromBackendRow :: Proxy (K1 R (t Exposed) :: Type -> Type) -> FromBackendRowM be (K1 R (t Identity) ()) Source #

gValuesNeeded :: Proxy be -> Proxy (K1 R (t Exposed) :: Type -> Type) -> Proxy (K1 R (t Identity) :: Type -> Type) -> Int Source #

FromBackendRow be (t (Nullable Identity)) => GFromBackendRow be (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable Identity)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

c x => GFieldsFulfillConstraint c (K1 R (Exposed x) :: Type -> Type) (K1 R (HasConstraint c x) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (Exposed x) :: Type -> Type) -> K1 R (HasConstraint c x) () Source #

FieldsFulfillConstraint c t => GFieldsFulfillConstraint c (K1 R (t Exposed) :: Type -> Type) (K1 R (t (HasConstraint c)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (t Exposed) :: Type -> Type) -> K1 R (t (HasConstraint c)) () Source #

FieldsFulfillConstraintNullable c t => GFieldsFulfillConstraint c (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable (HasConstraint c))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

fieldName :: forall (table :: (Type -> Type) -> Type) ty f. Functor f => (Text -> f Text) -> TableField table ty -> f (TableField table ty) Source #

Van Laarhoven lens to retrieve or set the field name from a TableField.

fieldPath :: forall (table :: (Type -> Type) -> Type) ty f. Applicative f => (Text -> f Text) -> TableField table ty -> f (TableField table ty) Source #

type TableSettings (table :: (Type -> Type) -> Type) = table (TableField table) Source #

Represents a table that contains metadata on its fields. In particular, each field of type 'Columnar f a' is transformed into 'TableField table a'. You can get or update the name of each field by using the fieldName lens.

type HaskellTable (table :: (Type -> Type) -> Type) = table Identity Source #

The regular Haskell version of the table. Equivalent to 'tbl Identity'

type TableSkeleton (table :: (Type -> Type) -> Type) = table Ignored Source #

A form of table all fields Ignored. Useful as a parameter to zipTables when you only care about one table.

data Ignored x Source #

Column tag that ignores the type.

Constructors

Ignored 

Instances

Instances details
GTableSkeleton (K1 R (Ignored field) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (Ignored field) :: Type -> Type) -> K1 R (Ignored field) () Source #

Beamable tbl => GTableSkeleton (K1 R (tbl (Nullable Ignored)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (tbl (Nullable Ignored)) :: Type -> Type) -> K1 R (tbl (Nullable Ignored)) () Source #

Beamable tbl => GTableSkeleton (K1 R (tbl Ignored) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (tbl Ignored) :: Type -> Type) -> K1 R (tbl Ignored) () Source #

class GFieldsFulfillConstraint (c :: Type -> Constraint) (exposed :: Type -> Type) (withconstraint :: Type -> Type) where Source #

Methods

gWithConstrainedFields :: Proxy c -> Proxy exposed -> withconstraint () Source #

Instances

Instances details
GFieldsFulfillConstraint c (U1 :: Type -> Type) (U1 :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (U1 :: Type -> Type) -> U1 () Source #

(GFieldsFulfillConstraint c aExp aC, GFieldsFulfillConstraint c bExp bC) => GFieldsFulfillConstraint c (aExp :*: bExp) (aC :*: bC) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (aExp :*: bExp) -> (aC :*: bC) () Source #

c x => GFieldsFulfillConstraint c (K1 R (Exposed x) :: Type -> Type) (K1 R (HasConstraint c x) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (Exposed x) :: Type -> Type) -> K1 R (HasConstraint c x) () Source #

FieldsFulfillConstraint c t => GFieldsFulfillConstraint c (K1 R (t Exposed) :: Type -> Type) (K1 R (t (HasConstraint c)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (t Exposed) :: Type -> Type) -> K1 R (t (HasConstraint c)) () Source #

FieldsFulfillConstraintNullable c t => GFieldsFulfillConstraint c (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable (HasConstraint c))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

GFieldsFulfillConstraint c exposed withconstraint => GFieldsFulfillConstraint c (M1 s m exposed) (M1 s m withconstraint) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (M1 s m exposed) -> M1 s m withconstraint () Source #

data WithConstraint (c :: Type -> Constraint) x where Source #

Carry a constraint instance and the value it applies to.

Constructors

WithConstraint :: forall (c :: Type -> Constraint) x. c x => x -> WithConstraint c x 

data HasConstraint (c :: Type -> Constraint) x where Source #

Carry a constraint instance.

Constructors

HasConstraint :: forall (c :: Type -> Constraint) x. c x => HasConstraint c x 

Instances

Instances details
c x => GFieldsFulfillConstraint c (K1 R (Exposed x) :: Type -> Type) (K1 R (HasConstraint c x) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (Exposed x) :: Type -> Type) -> K1 R (HasConstraint c x) () Source #

FieldsFulfillConstraint c t => GFieldsFulfillConstraint c (K1 R (t Exposed) :: Type -> Type) (K1 R (t (HasConstraint c)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (K1 R (t Exposed) :: Type -> Type) -> K1 R (t (HasConstraint c)) () Source #

FieldsFulfillConstraintNullable c t => GFieldsFulfillConstraint c (K1 R (t (Nullable Exposed)) :: Type -> Type) (K1 R (t (Nullable (HasConstraint c))) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

class TagReducesTo (f :: Type -> Type) (f' :: Type -> Type) | f -> f' where Source #

Class to automatically unwrap nested Nullables

Methods

reduceTag :: Functor m => (Columnar' f' a' -> m (Columnar' f' a')) -> Columnar' f a -> m (Columnar' f a) Source #

Instances

Instances details
TagReducesTo f f' => TagReducesTo (Nullable f) f' Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

reduceTag :: Functor m => (Columnar' f' a' -> m (Columnar' f' a')) -> Columnar' (Nullable f) a -> m (Columnar' (Nullable f) a) Source #

TagReducesTo (TableField tbl) (TableField tbl) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

reduceTag :: Functor m => (Columnar' (TableField tbl) a' -> m (Columnar' (TableField tbl) a')) -> Columnar' (TableField tbl) a -> m (Columnar' (TableField tbl) a) Source #

type family ReplaceBaseTag (tag :: Type -> Type) (f :: Type -> Type) :: Type -> Type where ... Source #

Equations

ReplaceBaseTag tag (Nullable f) = Nullable (ReplaceBaseTag tag f) 
ReplaceBaseTag tag x = tag 

withConstrainedFields :: forall (c :: Type -> Constraint) tbl. (FieldsFulfillConstraint c tbl, Beamable tbl) => tbl Identity -> tbl (WithConstraint c) Source #

withConstraints :: forall (c :: Type -> Constraint) tbl. (Beamable tbl, FieldsFulfillConstraint c tbl) => tbl (HasConstraint c) Source #

Tables

class (Typeable table, Beamable table, Beamable (PrimaryKey table)) => Table (table :: (Type -> Type) -> Type) where Source #

The big Kahuna! All beam tables implement this class.

The kind of all table types is '(Type -> Type) -> Type'. This is because all table types are actually table type constructors. Every table type takes in another type constructor, called the column tag, and uses that constructor to instantiate the column types. See the documentation for Columnar.

This class is mostly Generic-derivable. You need only specify a type for the table's primary key and a method to extract the primary key given the table.

An example table:

data BlogPostT f = BlogPost
                 { _blogPostSlug    :: Columnar f Text
                 , _blogPostBody    :: Columnar f Text
                 , _blogPostDate    :: Columnar f UTCTime
                 , _blogPostAuthor  :: PrimaryKey AuthorT f
                 , _blogPostTagline :: Columnar f (Maybe Text)
                 , _blogPostImageGallery :: PrimaryKey ImageGalleryT (Nullable f) }
                   deriving Generic
instance Beamable BlogPostT
instance Table BlogPostT where
   data PrimaryKey BlogPostT f = BlogPostId (Columnar f Text) deriving Generic
   primaryKey = BlogPostId . _blogPostSlug
instance Beamable (PrimaryKey BlogPostT)

We can interpret this as follows:

  • The _blogPostSlug, _blogPostBody, _blogPostDate, and _blogPostTagline fields are of types Text, Text, UTCTime, and 'Maybe Text' respectfully.
  • Since _blogPostSlug, _blogPostBody, _blogPostDate, _blogPostAuthor must be provided (i.e, they cannot contain Nothing), they will be given SQL NOT NULL constraints. _blogPostTagline is declared Maybe so Nothing will be stored as NULL in the database. _blogPostImageGallery will be allowed to be empty because it uses the Nullable tag modifier.
  • blogPostAuthor references the AuthorT table (not given here) and is required.
  • blogPostImageGallery references the ImageGalleryT table (not given here), but this relation is not required (i.e., it may be Nothing. See Nullable).

Associated Types

data PrimaryKey (table :: (Type -> Type) -> Type) (column :: Type -> Type) Source #

A data type representing the types of primary keys for this table. In order to play nicely with the default deriving mechanism, this type must be an instance of Generic.

Methods

primaryKey :: forall (column :: Type -> Type). table column -> PrimaryKey table column Source #

Given a table, this should return the PrimaryKey from the table. By keeping this polymorphic over column, we ensure that the primary key values come directly from the table (i.e., they can't be arbitrary constants)

class Beamable (table :: (Type -> Type) -> Type) where Source #

Provides a number of introspection routines for the beam library. Allows us to "zip" tables with different column tags together. Always instantiate an empty Beamable instance for tables, primary keys, and any type that you would like to embed within either. See the manual for more information on embedding.

Minimal complete definition

Nothing

Methods

zipBeamFieldsM :: forall m (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type). Applicative m => (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> table f -> table g -> m (table h) Source #

default zipBeamFieldsM :: forall (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) m. (HasBeamFields table f g h, Applicative m) => (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> table f -> table g -> m (table h) Source #

tblSkeleton :: TableSkeleton table Source #

class Retaggable (f :: Type -> Type) x | x -> f where Source #

Associated Types

type Retag (tag :: (Type -> Type) -> Type -> Type) x Source #

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a. Columnar' f a -> Columnar' (tag f) a) -> x -> Retag tag x Source #

Instances

Instances details
Beamable tbl => Retaggable f (tbl f) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a. Columnar' f a -> Columnar' (tag f) a) -> tbl f -> Retag tag (tbl f) Source #

(Retaggable f a, Retaggable f b) => Retaggable f (a, b) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f a0 -> Columnar' (tag f) a0) -> (a, b) -> Retag tag (a, b) Source #

(Retaggable f a, Retaggable f b, Retaggable f c) => Retaggable f (a, b, c) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f a0 -> Columnar' (tag f) a0) -> (a, b, c) -> Retag tag (a, b, c) Source #

(Retaggable f a, Retaggable f b, Retaggable f c, Retaggable f d) => Retaggable f (a, b, c, d) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f a0 -> Columnar' (tag f) a0) -> (a, b, c, d) -> Retag tag (a, b, c, d) Source #

(Retaggable f a, Retaggable f b, Retaggable f c, Retaggable f d, Retaggable f e) => Retaggable f (a, b, c, d, e) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f a0 -> Columnar' (tag f) a0) -> (a, b, c, d, e) -> Retag tag (a, b, c, d, e) Source #

(Retaggable f' a, Retaggable f' b, Retaggable f' c, Retaggable f' d, Retaggable f' e, Retaggable f' f) => Retaggable f' (a, b, c, d, e, f) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f' a0 -> Columnar' (tag f') a0) -> (a, b, c, d, e, f) -> Retag tag (a, b, c, d, e, f) Source #

(Retaggable f' a, Retaggable f' b, Retaggable f' c, Retaggable f' d, Retaggable f' e, Retaggable f' f, Retaggable f' g) => Retaggable f' (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f' a0 -> Columnar' (tag f') a0) -> (a, b, c, d, e, f, g) -> Retag tag (a, b, c, d, e, f, g) Source #

(Retaggable f' a, Retaggable f' b, Retaggable f' c, Retaggable f' d, Retaggable f' e, Retaggable f' f, Retaggable f' g, Retaggable f' h) => Retaggable f' (a, b, c, d, e, f, g, h) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a0. Columnar' f' a0 -> Columnar' (tag f') a0) -> (a, b, c, d, e, f, g, h) -> Retag tag (a, b, c, d, e, f, g, h) Source #

Retaggable (QGenExpr ctxt expr s) (QGenExpr ctxt expr s t) Source # 
Instance details

Defined in Database.Beam.Query.Internal

Methods

retag :: forall (tag :: (Type -> Type) -> Type -> Type). (forall a. Columnar' (QGenExpr ctxt expr s) a -> Columnar' (tag (QGenExpr ctxt expr s)) a) -> QGenExpr ctxt expr s t -> Retag tag (QGenExpr ctxt expr s t) Source #

data ((f :: k -> Type) :*: (g :: k -> Type)) (p :: k) infixr 6 #

Products: encode multiple arguments to constructors

Constructors

(f p) :*: (g p) infixr 6 

Instances

Instances details
(GZipDatabase be f g h ax ay az, GZipDatabase be f g h bx by bz) => GZipDatabase be f g h (ax :*: bx) (ay :*: by) (az :*: bz) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> (ax :*: bx) () -> (ay :*: by) () -> m ((az :*: bz) ()) Source #

(Monoid pairs, RecordToPairs enc pairs arity a, RecordToPairs enc pairs arity b) => RecordToPairs enc pairs arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

recordToPairs :: Options -> ToArgs enc arity a0 -> (a :*: b) a0 -> pairs

(GTableLenses t m a aLens, GTableLenses t m b bLens) => GTableLenses t m (a :*: b :: k -> Type) (aLens :*: bLens) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gTableLenses :: forall (p :: k). Proxy (a :*: b) -> Lens' (t m) ((a :*: b) p) -> (aLens :*: bLens) () Source #

(GZipTables f g h exp1 f1 g1 h1, GZipTables f g h exp2 f2 g2 h2) => GZipTables f g h (exp1 :*: exp2) (f1 :*: f2) (g1 :*: g2) (h1 :*: h2) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (exp1 :*: exp2) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> (f1 :*: f2) () -> (g1 :*: g2) () -> m ((h1 :*: h2) ()) Source #

(EncodeProduct arity a, EncodeProduct arity b) => GToJSON' Encoding arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

gToJSON :: Options -> ToArgs Encoding arity a0 -> (a :*: b) a0 -> Encoding

(WriteProduct arity a, WriteProduct arity b, ProductSize a, ProductSize b) => GToJSON' Value arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

gToJSON :: Options -> ToArgs Value arity a0 -> (a :*: b) a0 -> Value

(GDatabaseLenses db a al, GDatabaseLenses db b bl) => GDatabaseLenses db (a :*: b :: k -> Type) (al :*: bl) Source # 
Instance details

Defined in Database.Beam.Schema.Lenses

Methods

gDatabaseLenses :: forall (p :: k). Lens' db ((a :*: b) p) -> (al :*: bl) () Source #

(FieldNames a, FieldNames b) => FieldNames (a :*: b :: k -> Type) 
Instance details

Defined in Data.Aeson.Types.FromJSON

Methods

fieldNames :: forall (a0 :: k). (a :*: b) a0 -> [String] -> [String]

(ProductFromJSON arity a, ProductFromJSON arity b) => ProductFromJSON arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.FromJSON

Methods

productParseJSON :: (ConName :* (TypeName :* (Options :* FromArgs arity a0))) -> Array -> Int -> Int -> Parser ((a :*: b) a0)

(RecordFromJSON' arity a, RecordFromJSON' arity b) => RecordFromJSON' arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.FromJSON

Methods

recordParseJSON' :: (ConName :* (TypeName :* (Options :* FromArgs arity a0))) -> Object -> Parser ((a :*: b) a0)

(EncodeProduct arity a, EncodeProduct arity b) => EncodeProduct arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

encodeProduct :: Options -> ToArgs Encoding arity a0 -> (a :*: b) a0 -> Encoding' InArray

(WriteProduct arity a, WriteProduct arity b) => WriteProduct arity (a :*: b) 
Instance details

Defined in Data.Aeson.Types.ToJSON

Methods

writeProduct :: Options -> ToArgs Value arity a0 -> MVector s Value -> Int -> Int -> (a :*: b) a0 -> ST s ()

(GNFData arity a, GNFData arity b) => GNFData arity (a :*: b) 
Instance details

Defined in Control.DeepSeq

Methods

grnf :: RnfArgs arity a0 -> (a :*: b) a0 -> ()

Generic1 (f :*: g :: k -> Type) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep1 (f :*: g :: k -> Type)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

type Rep1 (f :*: g :: k -> Type) = D1 ('MetaData ":*:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons ":*:" ('InfixI 'RightAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 g)))

Methods

from1 :: forall (a :: k). (f :*: g) a -> Rep1 (f :*: g) a #

to1 :: forall (a :: k). Rep1 (f :*: g) a -> (f :*: g) a #

(GFromBackendRow be aExp a, GFromBackendRow be bExp b) => GFromBackendRow be (aExp :*: bExp) (a :*: b) Source # 
Instance details

Defined in Database.Beam.Backend.SQL.Row

Methods

gFromBackendRow :: Proxy (aExp :*: bExp) -> FromBackendRowM be ((a :*: b) ()) Source #

gValuesNeeded :: Proxy be -> Proxy (aExp :*: bExp) -> Proxy (a :*: b) -> Int Source #

(GFieldsFulfillConstraint c aExp aC, GFieldsFulfillConstraint c bExp bC) => GFieldsFulfillConstraint c (aExp :*: bExp) (aC :*: bC) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gWithConstrainedFields :: Proxy c -> Proxy (aExp :*: bExp) -> (aC :*: bC) () Source #

(GIndex f, GIndex g) => GIndex (f :*: g) 
Instance details

Defined in Data.Functor.Rep

Methods

gindex' :: (f :*: g) a -> GRep' (f :*: g) -> a

(GTabulate f, GTabulate g) => GTabulate (f :*: g) 
Instance details

Defined in Data.Functor.Rep

Methods

gtabulate' :: (GRep' (f :*: g) -> a) -> (f :*: g) a

(Representable f, Representable g) => Representable (f :*: g) 
Instance details

Defined in Data.Functor.Rep

Associated Types

type Rep (f :*: g) 
Instance details

Defined in Data.Functor.Rep

type Rep (f :*: g) = Either (Rep f) (Rep g)

Methods

tabulate :: (Rep (f :*: g) -> a) -> (f :*: g) a #

index :: (f :*: g) a -> Rep (f :*: g) -> a #

(MonadZip f, MonadZip g) => MonadZip (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.Zip

Methods

mzip :: (f :*: g) a -> (f :*: g) b -> (f :*: g) (a, b) #

mzipWith :: (a -> b -> c) -> (f :*: g) a -> (f :*: g) b -> (f :*: g) c #

munzip :: (f :*: g) (a, b) -> ((f :*: g) a, (f :*: g) b) #

(Foldable1 f, Foldable1 g) => Foldable1 (f :*: g)

Since: base-4.18.0.0

Instance details

Defined in Data.Foldable1

Methods

fold1 :: Semigroup m => (f :*: g) m -> m #

foldMap1 :: Semigroup m => (a -> m) -> (f :*: g) a -> m #

foldMap1' :: Semigroup m => (a -> m) -> (f :*: g) a -> m #

toNonEmpty :: (f :*: g) a -> NonEmpty a #

maximum :: Ord a => (f :*: g) a -> a #

minimum :: Ord a => (f :*: g) a -> a #

head :: (f :*: g) a -> a #

last :: (f :*: g) a -> a #

foldrMap1 :: (a -> b) -> (a -> b -> b) -> (f :*: g) a -> b #

foldlMap1' :: (a -> b) -> (b -> a -> b) -> (f :*: g) a -> b #

foldlMap1 :: (a -> b) -> (b -> a -> b) -> (f :*: g) a -> b #

foldrMap1' :: (a -> b) -> (a -> b -> b) -> (f :*: g) a -> b #

(Contravariant f, Contravariant g) => Contravariant (f :*: g) 
Instance details

Defined in Data.Functor.Contravariant

Methods

contramap :: (a' -> a) -> (f :*: g) a -> (f :*: g) a' #

(>$) :: b -> (f :*: g) b -> (f :*: g) a #

(GTableSkeleton a, GTableSkeleton b) => GTableSkeleton (a :*: b) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (a :*: b) -> (a :*: b) () Source #

(Alternative f, Alternative g) => Alternative (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

empty :: (f :*: g) a #

(<|>) :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a #

some :: (f :*: g) a -> (f :*: g) [a] #

many :: (f :*: g) a -> (f :*: g) [a] #

(Applicative f, Applicative g) => Applicative (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

pure :: a -> (f :*: g) a #

(<*>) :: (f :*: g) (a -> b) -> (f :*: g) a -> (f :*: g) b #

liftA2 :: (a -> b -> c) -> (f :*: g) a -> (f :*: g) b -> (f :*: g) c #

(*>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b #

(<*) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) a #

(Functor f, Functor g) => Functor (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

fmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b #

(<$) :: a -> (f :*: g) b -> (f :*: g) a #

(Monad f, Monad g) => Monad (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

(>>=) :: (f :*: g) a -> (a -> (f :*: g) b) -> (f :*: g) b #

(>>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b #

return :: a -> (f :*: g) a #

(MonadPlus f, MonadPlus g) => MonadPlus (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

mzero :: (f :*: g) a #

mplus :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a #

(MonadFix f, MonadFix g) => MonadFix (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Control.Monad.Fix

Methods

mfix :: (a -> (f :*: g) a) -> (f :*: g) a #

(Foldable f, Foldable g) => Foldable (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Data.Foldable

Methods

fold :: Monoid m => (f :*: g) m -> m #

foldMap :: Monoid m => (a -> m) -> (f :*: g) a -> m #

foldMap' :: Monoid m => (a -> m) -> (f :*: g) a -> m #

foldr :: (a -> b -> b) -> b -> (f :*: g) a -> b #

foldr' :: (a -> b -> b) -> b -> (f :*: g) a -> b #

foldl :: (b -> a -> b) -> b -> (f :*: g) a -> b #

foldl' :: (b -> a -> b) -> b -> (f :*: g) a -> b #

foldr1 :: (a -> a -> a) -> (f :*: g) a -> a #

foldl1 :: (a -> a -> a) -> (f :*: g) a -> a #

toList :: (f :*: g) a -> [a] #

null :: (f :*: g) a -> Bool #

length :: (f :*: g) a -> Int #

elem :: Eq a => a -> (f :*: g) a -> Bool #

maximum :: Ord a => (f :*: g) a -> a #

minimum :: Ord a => (f :*: g) a -> a #

sum :: Num a => (f :*: g) a -> a #

product :: Num a => (f :*: g) a -> a #

(Traversable f, Traversable g) => Traversable (f :*: g)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Data.Traversable

Methods

traverse :: Applicative f0 => (a -> f0 b) -> (f :*: g) a -> f0 ((f :*: g) b) #

sequenceA :: Applicative f0 => (f :*: g) (f0 a) -> f0 ((f :*: g) a) #

mapM :: Monad m => (a -> m b) -> (f :*: g) a -> m ((f :*: g) b) #

sequence :: Monad m => (f :*: g) (m a) -> m ((f :*: g) a) #

(GUniform f, GUniform g) => GUniform (f :*: g) 
Instance details

Defined in System.Random.Internal

Methods

guniformM :: forall g0 (m :: Type -> Type) r a. StatefulGen g0 m => g0 -> ContT r m ((f :*: g) a)

(GAutoDbSettings (x p), GAutoDbSettings (y p)) => GAutoDbSettings ((x :*: y) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: (x :*: y) p Source #

(GDefaultTableFieldSettings (a p), GDefaultTableFieldSettings (b p)) => GDefaultTableFieldSettings ((a :*: b) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy ((a :*: b) p) -> (a :*: b) p Source #

(Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p)

@since base-4.12.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

mempty :: (f :*: g) p #

mappend :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

mconcat :: [(f :*: g) p] -> (f :*: g) p #

(Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p)

@since base-4.12.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

sconcat :: NonEmpty ((f :*: g) p) -> (f :*: g) p #

stimes :: Integral b => b -> (f :*: g) p -> (f :*: g) p #

Generic ((f :*: g) p) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

type Rep ((f :*: g) p) = D1 ('MetaData ":*:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons ":*:" ('InfixI 'RightAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (g p))))

Methods

from :: (f :*: g) p -> Rep ((f :*: g) p) x #

to :: Rep ((f :*: g) p) x -> (f :*: g) p #

(Read (f p), Read (g p)) => Read ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

readsPrec :: Int -> ReadS ((f :*: g) p) #

readList :: ReadS [(f :*: g) p] #

readPrec :: ReadPrec ((f :*: g) p) #

readListPrec :: ReadPrec [(f :*: g) p] #

(Show (f p), Show (g p)) => Show ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

showsPrec :: Int -> (f :*: g) p -> ShowS #

show :: (f :*: g) p -> String #

showList :: [(f :*: g) p] -> ShowS #

(Eq (f p), Eq (g p)) => Eq ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

(==) :: (f :*: g) p -> (f :*: g) p -> Bool #

(/=) :: (f :*: g) p -> (f :*: g) p -> Bool #

(Ord (f p), Ord (g p)) => Ord ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

Methods

compare :: (f :*: g) p -> (f :*: g) p -> Ordering #

(<) :: (f :*: g) p -> (f :*: g) p -> Bool #

(<=) :: (f :*: g) p -> (f :*: g) p -> Bool #

(>) :: (f :*: g) p -> (f :*: g) p -> Bool #

(>=) :: (f :*: g) p -> (f :*: g) p -> Bool #

max :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

min :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

type Rep1 (f :*: g :: k -> Type)

@since base-4.9.0.0

Instance details

Defined in GHC.Internal.Generics

type Rep1 (f :*: g :: k -> Type) = D1 ('MetaData ":*:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons ":*:" ('InfixI 'RightAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 f) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 g)))
type GRep' (f :*: g) 
Instance details

Defined in Data.Functor.Rep

type GRep' (f :*: g) = Either (GRep' f) (GRep' g)
type Rep (f :*: g) 
Instance details

Defined in Data.Functor.Rep

type Rep (f :*: g) = Either (Rep f) (Rep g)
type Rep ((f :*: g) p)

@since base-4.7.0.0

Instance details

Defined in GHC.Internal.Generics

type Rep ((f :*: g) p) = D1 ('MetaData ":*:" "GHC.Internal.Generics" "ghc-internal" 'False) (C1 ('MetaCons ":*:" ('InfixI 'RightAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (g p))))

defTblFieldSettings :: (Generic (TableSettings table), GDefaultTableFieldSettings (Rep (TableSettings table) ())) => TableSettings table Source #

Return a TableSettings for the appropriate table type where each column has been given its default name. See the manual for information on the default naming convention.

tableValuesNeeded :: forall (table :: (Type -> Type) -> Type). Beamable table => Proxy table -> Int Source #

pk :: forall t (f :: Type -> Type). Table t => t f -> PrimaryKey t f Source #

Synonym for primaryKey

allBeamValues :: forall table (f :: Type -> Type) b. Beamable table => (forall a. Columnar' f a -> b) -> table f -> [b] Source #

changeBeamRep :: forall table (f :: Type -> Type) (g :: Type -> Type). Beamable table => (forall a. Columnar' f a -> Columnar' g a) -> table f -> table g Source #

alongsideTable :: forall tbl (f :: Type -> Type) (g :: Type -> Type). Beamable tbl => tbl f -> tbl g -> tbl (Columnar' f :*: Columnar' g) Source #

defaultFieldName :: NonEmpty Text -> Text Source #

Produce the beam default field name for the given path

Exported so we can override defaults

For Beamable

class GZipTables (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) (exposedRep :: Type -> Type) (fRep :: Type -> Type) (gRep :: Type -> Type) (hRep :: Type -> Type) where Source #

Methods

gZipTables :: Applicative m => Proxy exposedRep -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> fRep () -> gRep () -> m (hRep ()) Source #

Instances

Instances details
GZipTables f g h (U1 :: Type -> Type) (U1 :: Type -> Type) (U1 :: Type -> Type) (U1 :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (U1 :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> U1 () -> U1 () -> m (U1 ()) Source #

(GZipTables f g h exp1 f1 g1 h1, GZipTables f g h exp2 f2 g2 h2) => GZipTables f g h (exp1 :*: exp2) (f1 :*: f2) (g1 :*: g2) (h1 :*: h2) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (exp1 :*: exp2) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> (f1 :*: f2) () -> (g1 :*: g2) () -> m ((h1 :*: h2) ()) Source #

(fa ~ Columnar f a, ga ~ Columnar g a, ha ~ Columnar h a, ha ~ Columnar h a) => GZipTables f g h (K1 R (Exposed a) :: Type -> Type) (K1 R fa :: Type -> Type) (K1 R ga :: Type -> Type) (K1 R ha :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (Exposed a) :: Type -> Type) -> (forall a0. Columnar' f a0 -> Columnar' g a0 -> m (Columnar' h a0)) -> K1 R fa () -> K1 R ga () -> m (K1 R ha ()) Source #

Beamable tbl => GZipTables f g h (K1 R (tbl Exposed) :: Type -> Type) (K1 R (tbl f) :: Type -> Type) (K1 R (tbl g) :: Type -> Type) (K1 R (tbl h) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (tbl Exposed) :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> K1 R (tbl f) () -> K1 R (tbl g) () -> m (K1 R (tbl h) ()) Source #

Beamable tbl => GZipTables f g h (K1 R (tbl (Nullable Exposed)) :: Type -> Type) (K1 R (tbl (Nullable f)) :: Type -> Type) (K1 R (tbl (Nullable g)) :: Type -> Type) (K1 R (tbl (Nullable h)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (K1 R (tbl (Nullable Exposed)) :: Type -> Type) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> K1 R (tbl (Nullable f)) () -> K1 R (tbl (Nullable g)) () -> m (K1 R (tbl (Nullable h)) ()) Source #

GZipTables f g h exp fRep gRep hRep => GZipTables f g h (M1 x y exp) (M1 x y fRep) (M1 x y gRep) (M1 x y hRep) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipTables :: Applicative m => Proxy (M1 x y exp) -> (forall a. Columnar' f a -> Columnar' g a -> m (Columnar' h a)) -> M1 x y fRep () -> M1 x y gRep () -> m (M1 x y hRep ()) Source #

class GTableSkeleton (x :: Type -> Type) where Source #

Methods

gTblSkeleton :: Proxy x -> x () Source #

Instances

Instances details
GTableSkeleton (U1 :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (U1 :: Type -> Type) -> U1 () Source #

(GTableSkeleton a, GTableSkeleton b) => GTableSkeleton (a :*: b) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (a :*: b) -> (a :*: b) () Source #

GTableSkeleton (K1 R (Ignored field) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (Ignored field) :: Type -> Type) -> K1 R (Ignored field) () Source #

Beamable tbl => GTableSkeleton (K1 R (tbl (Nullable Ignored)) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (tbl (Nullable Ignored)) :: Type -> Type) -> K1 R (tbl (Nullable Ignored)) () Source #

Beamable tbl => GTableSkeleton (K1 R (tbl Ignored) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (K1 R (tbl Ignored) :: Type -> Type) -> K1 R (tbl Ignored) () Source #

GTableSkeleton p => GTableSkeleton (M1 t f p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gTblSkeleton :: Proxy (M1 t f p) -> M1 t f p () Source #

For Database

class GZipDatabase be (f :: Type -> Type) (g :: Type -> Type) (h :: Type -> Type) (x :: Type -> Type) (y :: Type -> Type) (z :: Type -> Type) where Source #

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> x () -> y () -> m (z ()) Source #

Instances

Instances details
(GZipDatabase be f g h ax ay az, GZipDatabase be f g h bx by bz) => GZipDatabase be f g h (ax :*: bx) (ay :*: by) (az :*: bz) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> (ax :*: bx) () -> (ay :*: by) () -> m ((az :*: bz) ()) Source #

Database be db => GZipDatabase be f g h (K1 R (db f) :: Type -> Type) (K1 R (db g) :: Type -> Type) (K1 R (db h) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> K1 R (db f) () -> K1 R (db g) () -> m (K1 R (db h) ()) Source #

(IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => GZipDatabase be f g h (K1 R (f tbl) :: Type -> Type) (K1 R (g tbl) :: Type -> Type) (K1 R (h tbl) :: Type -> Type) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl0. (IsDatabaseEntity be tbl0, DatabaseEntityRegularRequirements be tbl0) => f tbl0 -> g tbl0 -> m (h tbl0)) -> K1 R (f tbl) () -> K1 R (g tbl) () -> m (K1 R (h tbl) ()) Source #

GZipDatabase be f g h x y z => GZipDatabase be f g h (M1 a b x) (M1 a b y) (M1 a b z) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gZipDatabase :: Applicative m => (Proxy f, Proxy g, Proxy h, Proxy be) -> (forall tbl. (IsDatabaseEntity be tbl, DatabaseEntityRegularRequirements be tbl) => f tbl -> g tbl -> m (h tbl)) -> M1 a b x () -> M1 a b y () -> m (M1 a b z ()) Source #

For defaultDbSettings

class GAutoDbSettings x where Source #

Instances

Instances details
(GAutoDbSettings (x p), GAutoDbSettings (y p)) => GAutoDbSettings ((x :*: y) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: (x :*: y) p Source #

GAutoDbSettings (x p) => GAutoDbSettings (C1 f x p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: C1 f x p Source #

GAutoDbSettings (x p) => GAutoDbSettings (D1 f x p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: D1 f x p Source #

(Selector f, IsDatabaseEntity be x, DatabaseEntityDefaultRequirements be x) => GAutoDbSettings (S1 f (K1 R (DatabaseEntity be db x) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: S1 f (K1 R (DatabaseEntity be db x) :: Type -> Type) p Source #

(Database be embedded, Generic (DatabaseSettings be embedded), GAutoDbSettings (Rep (DatabaseSettings be embedded) ())) => GAutoDbSettings (S1 f (K1 R (embedded (DatabaseEntity be super)) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

autoDbSettings' :: S1 f (K1 R (embedded (DatabaseEntity be super)) :: Type -> Type) p Source #

class GDefaultTableFieldSettings x where Source #

Instances

Instances details
(GDefaultTableFieldSettings (a p), GDefaultTableFieldSettings (b p)) => GDefaultTableFieldSettings ((a :*: b) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy ((a :*: b) p) -> (a :*: b) p Source #

GDefaultTableFieldSettings (p x) => GDefaultTableFieldSettings (C1 f p x) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (C1 f p x) -> C1 f p x Source #

GDefaultTableFieldSettings (p x) => GDefaultTableFieldSettings (D1 f p x) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (D1 f p x) -> D1 f p x Source #

(TypeError ('Text "All Beamable types must be record types, so appropriate names can be given to columns") :: Constraint) => GDefaultTableFieldSettings (K1 r f p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (K1 r f p) -> K1 r f p Source #

Selector f => GDefaultTableFieldSettings (S1 f (K1 R (TableField table field) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (S1 f (K1 R (TableField table field) :: Type -> Type) p) -> S1 f (K1 R (TableField table field) :: Type -> Type) p Source #

(Selector f', ChooseSubTableStrategy tbl sub ~ strategy, SubTableStrategyImpl strategy f sub, TagReducesTo f (TableField tbl), Beamable sub) => GDefaultTableFieldSettings (S1 f' (K1 R (sub f) :: Type -> Type) p) Source # 
Instance details

Defined in Database.Beam.Schema.Tables

Methods

gDefTblFieldSettings :: Proxy (S1 f' (K1 R (sub f) :: Type -> Type) p) -> S1 f' (K1 R (sub f) :: Type -> Type) p Source #

type family ChooseSubTableStrategy (tbl :: (Type -> Type) -> Type) (sub :: (Type -> Type) -> Type) :: SubTableStrategy where ... Source #

Equations

ChooseSubTableStrategy tbl (PrimaryKey tbl) = 'RecursiveKeyStrategy 
ChooseSubTableStrategy tbl (PrimaryKey rel) = 'PrimaryKeyStrategy 
ChooseSubTableStrategy tbl sub = 'BeamableStrategy 

class SubTableStrategyImpl (strategy :: SubTableStrategy) (f :: Type -> Type) (sub :: (Type -> Type) -> Type) Source #

Minimal complete definition

namedSubTable