beam-migrate-0.5.1.2: SQL DDL support and migrations support library for Beam
Safe Haskell None
Language Haskell2010

Database.Beam.Migrate.Backend

Description

Definitions of interest to those implement a new beam backend.

Steps to defining a beam backend:

  1. Ensure the command syntax for your backend satisfies Sql92SaneDdlCommandSyntax .
  2. Create a value of type BeamMigrationBackend
  3. For compatibility with beam-migrate-cli , export this value in an exposed module with the name migrationBackend .

This may sound trivial, but it's a bit more involved. In particular, in order to complete step 2, you will have to define several instances for some of your syntax pieces (for example, data types and constraints will need to be Hashable ). You will also need to provide a reasonable function to fetch predicates from your database, and a function to convert all these predicates to corresponding predicates in the Haskell syntax. If you have custom data types or predicates, you will need to supply BeamDeserializers to deserialize them from JSON. Finally, if your backend has custom DatabasePredicate s you will have to provide appropriate ActionProvider s to discover potential actions for your backend. See the documentation for Database.Beam.Migrate.Actions for more information.

Tools may be interested in the SomeBeamMigrationBackend data type which provides a monomorphic type to wrap the polymorphic BeamMigrationBackend type. Currently, beam-migrate-cli uses this type to get the underlying BeamMigrationBackend via the hint package.

For an example migrate backend, see Database.Beam.Sqlite.Migrate

Synopsis

Documentation

type DdlError = String Source #

Type of errors that can be thrown by backends during DDL statement execution. Currently just a synonym for String

Haskell predicate conversion

sql92HsPredicateConverters :: forall fromBe. Typeable fromBe => ( BeamMigrateSqlBackendDataTypeSyntax fromBe -> Maybe HsDataType ) -> HaskellPredicateConverter Source #

Converters for the TableExistsPredicate , TableHasPrimaryKey , and TableHasColumn (when supplied with a function to convert a backend data type to a haskell one).

hasColumnConverter :: forall fromBe. Typeable fromBe => ( BeamMigrateSqlBackendDataTypeSyntax fromBe -> Maybe HsDataType ) -> HaskellPredicateConverter Source #

Converter for TableHasColumn , when given a function to convert backend data type to a haskell one.

trivialHsConverter :: forall pred. Typeable pred => HaskellPredicateConverter Source #

Some predicates have no dependence on a backend. For example, TableExistsPredicate has no parameters that depend on the backend. It can be converted straightforwardly:

trivialHsConverter @TableExistsPredicate

hsPredicateConverter :: Typeable pred => (pred -> Maybe SomeDatabasePredicate ) -> HaskellPredicateConverter Source #

Utility function for converting a monomorphically typed predicate to a haskell one.

For tooling authors

data SomeBeamMigrationBackend where Source #

Monomorphic wrapper for use with plugin loaders that cannot handle polymorphism

data SomeCheckedDatabaseSettings where Source #

Monomorphic wrapper to use when interpreting a module which exports a CheckedDatabaseSettings .