| 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:
- Ensure the command syntax for your backend satisfies 
Sql92SaneDdlCommandSyntax. - Create a value of type 
BeamMigrationBackend - For compatibility with 
beam-migrate-cli, export this value in an exposed module with the namemigrationBackend. 
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
 DatabasePredicates you will have to provide appropriate ActionProviders
 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
- data BeamMigrationBackend be m where
- BeamMigrationBackend :: (MonadBeam be m, MonadFail m, HasQBuilder be, BeamMigrateSqlBackend be, HasDataTypeCreatedCheck (BeamMigrateSqlBackendDataTypeSyntax be), BeamSqlBackendCanSerialize be LocalTime, BeamSqlBackendCanSerialize be (Maybe LocalTime), BeamSqlBackendCanSerialize be Text, BeamSqlBackendCanSerialize be SqlNull, Sql92ReasonableMarshaller be) => {..} -> BeamMigrationBackend be m
 
 - type DdlError = String
 - newtype HaskellPredicateConverter = HaskellPredicateConverter (SomeDatabasePredicate -> Maybe SomeDatabasePredicate)
 - sql92HsPredicateConverters :: forall fromBe. Typeable fromBe => (BeamMigrateSqlBackendDataTypeSyntax fromBe -> Maybe HsDataType) -> HaskellPredicateConverter
 - hasColumnConverter :: forall fromBe. Typeable fromBe => (BeamMigrateSqlBackendDataTypeSyntax fromBe -> Maybe HsDataType) -> HaskellPredicateConverter
 - trivialHsConverter :: forall pred. Typeable pred => HaskellPredicateConverter
 - hsPredicateConverter :: Typeable pred => (pred -> Maybe SomeDatabasePredicate) -> HaskellPredicateConverter
 - data SomeBeamMigrationBackend where
- SomeBeamMigrationBackend :: Typeable be => BeamMigrationBackend be m -> SomeBeamMigrationBackend
 
 - data SomeCheckedDatabaseSettings where
- SomeCheckedDatabaseSettings :: Database be db => CheckedDatabaseSettings be db -> SomeCheckedDatabaseSettings
 
 
Documentation
data BeamMigrationBackend be m where Source #
Backends should create a value of this type and export it in an exposed
 module under the name migrationBackend. See the module documentation for
 more details.
Constructors
| BeamMigrationBackend | |
Fields 
  | |
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
newtype HaskellPredicateConverter Source #
In order to support Haskell schema generation, backends need to provide a
 way to convert arbitrary DatabasePredicates generated by the backend's
 backendGetDbConstraints function into appropriate predicates in the Haskell
 syntax. Not all predicates have any meaning when translated to Haskell, so
 backends can choose to drop any predicate (simply return Nothing).
Constructors
| HaskellPredicateConverter (SomeDatabasePredicate -> Maybe SomeDatabasePredicate) | 
Instances
| Semigroup HaskellPredicateConverter Source # | |
Defined in Database.Beam.Migrate.Backend  | |
| Monoid HaskellPredicateConverter Source # | 
  | 
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
Constructors
| SomeBeamMigrationBackend :: Typeable be => BeamMigrationBackend be m -> SomeBeamMigrationBackend | 
data SomeCheckedDatabaseSettings where Source #
Monomorphic wrapper to use when interpreting a module which
 exports a CheckedDatabaseSettings.
Constructors
| SomeCheckedDatabaseSettings :: Database be db => CheckedDatabaseSettings be db -> SomeCheckedDatabaseSettings |