Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- type CheckedDatabaseSettings be db = db (CheckedDatabaseEntity be db)
- class IsDatabaseEntity be entity => IsCheckedDatabaseEntity be entity where
- data CheckedDatabaseEntityDescriptor be entity :: *
- type CheckedDatabaseEntityDefaultRequirements be entity :: Constraint
- unCheck :: CheckedDatabaseEntityDescriptor be entity -> DatabaseEntityDescriptor be entity
- unChecked :: Lens' (CheckedDatabaseEntityDescriptor be entity) (DatabaseEntityDescriptor be entity)
- collectEntityChecks :: CheckedDatabaseEntityDescriptor be entity -> [SomeDatabasePredicate]
- checkedDbEntityAuto :: CheckedDatabaseEntityDefaultRequirements be entity => Text -> CheckedDatabaseEntityDescriptor be entity
- data CheckedDatabaseEntity be (db :: (* -> *) -> *) entityType where
- CheckedDatabaseEntity :: IsCheckedDatabaseEntity be entityType => CheckedDatabaseEntityDescriptor be entityType -> [SomeDatabasePredicate] -> CheckedDatabaseEntity be db entityType
- unCheckDatabase :: forall be db. Database be db => CheckedDatabaseSettings be db -> DatabaseSettings be db
- collectChecks :: forall be db. Database be db => CheckedDatabaseSettings be db -> [SomeDatabasePredicate]
- renameCheckedEntity :: (Text -> Text) -> EntityModification (CheckedDatabaseEntity be db) be ent
- data CheckedFieldModification tbl a
- checkedFieldNamed :: Text -> CheckedFieldModification tbl a
- modifyCheckedTable :: (Text -> Text) -> tbl (CheckedFieldModification tbl) -> EntityModification (CheckedDatabaseEntity be db) be (TableEntity tbl)
- checkedTableModification :: forall tbl. Beamable tbl => tbl (CheckedFieldModification tbl)
- class (Typeable p, Hashable p, Eq p) => DatabasePredicate p where
- englishDescription :: p -> String
- predicateSpecificity :: proxy p -> PredicateSpecificity
- serializePredicate :: p -> Value
- predicateCascadesDropOn :: DatabasePredicate p' => p -> p' -> Bool
- data SomeDatabasePredicate where
- SomeDatabasePredicate :: DatabasePredicate p => p -> SomeDatabasePredicate
- data PredicateSpecificity
- data QualifiedName = QualifiedName (Maybe Text) Text
- p :: DatabasePredicate p => p -> SomeDatabasePredicate
- newtype TableCheck = TableCheck (forall tbl. Table tbl => QualifiedName -> tbl (TableField tbl) -> Maybe SomeDatabasePredicate)
- newtype DomainCheck = DomainCheck (QualifiedName -> SomeDatabasePredicate)
- newtype FieldCheck = FieldCheck (QualifiedName -> Text -> SomeDatabasePredicate)
- data MigrationStep be next where
- MigrationStep :: Text -> Migration be a -> (a -> next) -> MigrationStep be next
- newtype MigrationSteps be from to = MigrationSteps (Kleisli (F (MigrationStep be)) from to)
- type Migration be = F (MigrationF be)
- data MigrationF be next where
- MigrationRunCommand :: {..} -> MigrationF be next
- data MigrationCommand be = MigrationCommand {
- migrationCommand :: BeamSqlBackendSyntax be
- migrationCommandDataLossPossible :: MigrationDataLoss
- data MigrationDataLoss
- runMigrationSteps :: Monad m => Int -> Maybe Int -> MigrationSteps be () a -> (forall a'. Int -> Text -> Migration be a' -> m a') -> m a
- runMigrationSilenced :: Migration be a -> a
- executeMigration :: Applicative m => (BeamSqlBackendSyntax be -> m ()) -> Migration be a -> m a
- eraseMigrationType :: a -> MigrationSteps be a a' -> MigrationSteps be () ()
- migrationStep :: Text -> (a -> Migration be a') -> MigrationSteps be a a'
- upDown :: BeamSqlBackendSyntax be -> Maybe (BeamSqlBackendSyntax be) -> Migration be ()
- migrationDataLoss :: Migration be a -> MigrationDataLoss
- migrateScript :: forall be m a. (Monoid m, Semigroup m, BeamSqlBackend be) => (Text -> m) -> (BeamSqlBackendSyntax be -> m) -> MigrationSteps be () a -> m
- evaluateDatabase :: forall be a. MigrationSteps be () a -> a
- stepNames :: forall be a. MigrationSteps be () a -> [Text]
Checked database entities
type CheckedDatabaseSettings be db = db (CheckedDatabaseEntity be db) Source #
The type of a checked database descriptor. Conceptually, this is just a
DatabaseSettings
with a set of predicates. Use unCheckDatabase
to get the
regular DatabaseSettings
object and collectChecks
to access the
predicates.
class IsDatabaseEntity be entity => IsCheckedDatabaseEntity be entity where Source #
Like IsDatabaseEntity
in beam-core
, but for entities against which we
can generate DatabasePredicate
s. Conceptually, this is the same as
IsDatabaseEntity
, but with one extra function to generate
DatabasePredicate
s from the description.
data CheckedDatabaseEntityDescriptor be entity :: * Source #
The type of the descriptor for this checked entity. Usually this wraps
the corresponding DatabaseEntityDescriptor
from IsDatabaseEntity
, along
with some mechanism for generating DatabasePredicate
s.
type CheckedDatabaseEntityDefaultRequirements be entity :: Constraint Source #
Like DatabaseEntityDefaultRequirements
but for checked entities
unCheck :: CheckedDatabaseEntityDescriptor be entity -> DatabaseEntityDescriptor be entity Source #
Produce the corresponding DatabaseEntityDescriptor
unChecked :: Lens' (CheckedDatabaseEntityDescriptor be entity) (DatabaseEntityDescriptor be entity) Source #
A lens to access the internal unchecked descriptor
collectEntityChecks :: CheckedDatabaseEntityDescriptor be entity -> [SomeDatabasePredicate] Source #
Produce the set of DatabasePredicate
s that apply to this entity
checkedDbEntityAuto :: CheckedDatabaseEntityDefaultRequirements be entity => Text -> CheckedDatabaseEntityDescriptor be entity Source #
Like dbEntityAuto
but for checked databases. Most often, this wraps
dbEntityAuto
and provides some means to generate DatabasePredicate
s
Instances
data CheckedDatabaseEntity be (db :: (* -> *) -> *) entityType where Source #
Like DatabaseEntity
but for checked databases
CheckedDatabaseEntity :: IsCheckedDatabaseEntity be entityType => CheckedDatabaseEntityDescriptor be entityType -> [SomeDatabasePredicate] -> CheckedDatabaseEntity be db entityType |
unCheckDatabase :: forall be db. Database be db => CheckedDatabaseSettings be db -> DatabaseSettings be db Source #
Convert a CheckedDatabaseSettings
to a regular DatabaseSettings
. The
return value is suitable for use in any regular beam query or DML statement.
collectChecks :: forall be db. Database be db => CheckedDatabaseSettings be db -> [SomeDatabasePredicate] Source #
A beam-migrate
database schema is defined completely by the set of
predicates that apply to it. This function allows you to access this
definition for a CheckedDatabaseSettings
object.
renameCheckedEntity :: (Text -> Text) -> EntityModification (CheckedDatabaseEntity be db) be ent Source #
Modifyinging checked entities
data CheckedFieldModification tbl a Source #
Purposefully opaque type describing how to modify a table field. Used to
parameterize the second argument to modifyCheckedTable
. For now, the only
way to construct a value is the IsString
instance, which allows you to
rename the field.
Instances
Beamable tbl => RenamableWithRule (tbl (CheckedFieldModification tbl)) Source # | |
Defined in Database.Beam.Migrate.Types.CheckedEntities renamingFields :: (NonEmpty Text -> Text) -> tbl (CheckedFieldModification tbl) | |
IsString (CheckedFieldModification tbl a) Source # | |
Defined in Database.Beam.Migrate.Types.CheckedEntities fromString :: String -> CheckedFieldModification tbl a # |
checkedFieldNamed :: Text -> CheckedFieldModification tbl a Source #
modifyCheckedTable :: (Text -> Text) -> tbl (CheckedFieldModification tbl) -> EntityModification (CheckedDatabaseEntity be db) be (TableEntity tbl) Source #
Modify a checked table.
The first argument is a function that takes the original table name as input and produces a new table name.
The second argument gives instructions on how to rename each field in the
table. Use checkedTableModification
to create a value of this type which
does no renaming. Each field in the table supplied here has the type
CheckedFieldModification
. Most commonly, the programmer will use the
OverloadedStrings
instance to provide a new name.
Examples
Rename a table, without renaming any of its fields:
modifyCheckedTable (_ -> NewTblNm) checkedTableModification
Modify a table, renaming the field called _field1
in Haskell to
FirstName. Note that below, FirstName
represents a
CheckedFieldModification
object.
modifyCheckedTable id (checkedTableModification { _field1 = FirstName })
checkedTableModification :: forall tbl. Beamable tbl => tbl (CheckedFieldModification tbl) Source #
Produce a table field modification that does nothing
Most commonly supplied as the second argument to modifyCheckedTable
when
you just want to rename the table, not the fields.
Predicates
class (Typeable p, Hashable p, Eq p) => DatabasePredicate p where Source #
A predicate is a type that describes some condition that the database
schema must meet. Beam represents database schemas as the set of all
predicates that apply to a database schema. The Hashable
and Eq
instances
allow us to build HashSet
s of predicates to represent schemas in this way.
englishDescription :: p -> String Source #
An english language description of this predicate. For example, "There is
a table named TableName
"
predicateSpecificity :: proxy p -> PredicateSpecificity Source #
Whether or not this predicate applies to all backends or only one
backend. This is used when attempting to translate schemas between
backends. If you are unsure, provide PredicateSpecificityOnlyBackend
along with an identifier unique to your backend.
serializePredicate :: p -> Value Source #
Serialize a predicate to a JSON Value
.
predicateCascadesDropOn :: DatabasePredicate p' => p -> p' -> Bool Source #
Some predicates require other predicates to be true. For example, in
order for a table to have a column, that table must exist. This function
takes in the current predicate and another arbitrary database predicate. It
should return True
if this predicate needs the other predicate to be true
in order to exist.
By default, this simply returns False
, which makes sense for many
predicates.
Instances
data SomeDatabasePredicate where Source #
A Database predicate is a value of any type which satisfies
DatabasePredicate
. We often want to store these in lists and sets, so we
need a monomorphic container that can store these polymorphic values.
SomeDatabasePredicate :: DatabasePredicate p => p -> SomeDatabasePredicate |
Instances
Show SomeDatabasePredicate Source # | |
Defined in Database.Beam.Migrate.Types.Predicates showsPrec :: Int -> SomeDatabasePredicate -> ShowS # show :: SomeDatabasePredicate -> String # showList :: [SomeDatabasePredicate] -> ShowS # | |
NFData SomeDatabasePredicate Source # | |
Defined in Database.Beam.Migrate.Types.Predicates rnf :: SomeDatabasePredicate -> () # | |
Eq SomeDatabasePredicate Source # | |
Defined in Database.Beam.Migrate.Types.Predicates (==) :: SomeDatabasePredicate -> SomeDatabasePredicate -> Bool # (/=) :: SomeDatabasePredicate -> SomeDatabasePredicate -> Bool # | |
Hashable SomeDatabasePredicate Source # | |
Defined in Database.Beam.Migrate.Types.Predicates hashWithSalt :: Int -> SomeDatabasePredicate -> Int # hash :: SomeDatabasePredicate -> Int # |
data PredicateSpecificity Source #
Some predicates make sense in any backend. Others only make sense in one. This denotes the difference.
Instances
data QualifiedName Source #
A name in a schema
Instances
p :: DatabasePredicate p => p -> SomeDatabasePredicate Source #
Convenience synonym for SomeDatabasePredicate
Entity checks
newtype TableCheck Source #
An optional predicate that depends on the name of a table as well as its fields
TableCheck (forall tbl. Table tbl => QualifiedName -> tbl (TableField tbl) -> Maybe SomeDatabasePredicate) |
newtype DomainCheck Source #
A predicate that depends on the name of a domain type
newtype FieldCheck Source #
A predicate that depends on the name of a table and one of its fields
Migrations
data MigrationStep be next where Source #
Represents a particular step in a migration
MigrationStep :: Text -> Migration be a -> (a -> next) -> MigrationStep be next |
Instances
Functor (MigrationStep be) Source # | |
Defined in Database.Beam.Migrate.Types fmap :: (a -> b) -> MigrationStep be a -> MigrationStep be b # (<$) :: a -> MigrationStep be b -> MigrationStep be a # |
newtype MigrationSteps be from to Source #
A series of MigrationStep
s that take a database from the schema in from
to the one in to
. Use the migrationStep
function and the arrow interface
to sequence MigrationSteps
.
MigrationSteps (Kleisli (F (MigrationStep be)) from to) |
Instances
Arrow (MigrationSteps be) Source # | |
Defined in Database.Beam.Migrate.Types arr :: (b -> c) -> MigrationSteps be b c # first :: MigrationSteps be b c -> MigrationSteps be (b, d) (c, d) # second :: MigrationSteps be b c -> MigrationSteps be (d, b) (d, c) # (***) :: MigrationSteps be b c -> MigrationSteps be b' c' -> MigrationSteps be (b, b') (c, c') # (&&&) :: MigrationSteps be b c -> MigrationSteps be b c' -> MigrationSteps be b (c, c') # | |
Category (MigrationSteps be :: Type -> Type -> Type) Source # | |
Defined in Database.Beam.Migrate.Types id :: forall (a :: k). MigrationSteps be a a # (.) :: forall (b :: k) (c :: k) (a :: k). MigrationSteps be b c -> MigrationSteps be a b -> MigrationSteps be a c # |
type Migration be = F (MigrationF be) Source #
A sequence of potentially reversible schema update commands
data MigrationF be next where Source #
Free monadic function for Migration
s
MigrationRunCommand | |
|
Instances
Functor (MigrationF be) Source # | |
Defined in Database.Beam.Migrate.Types fmap :: (a -> b) -> MigrationF be a -> MigrationF be b # (<$) :: a -> MigrationF be b -> MigrationF be a # |
data MigrationCommand be Source #
A migration command along with metadata on whether the command can lose data
MigrationCommand | |
|
Instances
Show (BeamSqlBackendSyntax be) => Show (MigrationCommand be) Source # | |
Defined in Database.Beam.Migrate.Types showsPrec :: Int -> MigrationCommand be -> ShowS # show :: MigrationCommand be -> String # showList :: [MigrationCommand be] -> ShowS # |
data MigrationDataLoss Source #
Information on whether a MigrationCommand
loses data. You can
monoidally combine these to get the potential data loss for a
sequence of commands.
MigrationLosesData | The command loses data |
MigrationKeepsData | The command keeps all data |
Instances
Monoid MigrationDataLoss Source # | |
Defined in Database.Beam.Migrate.Types | |
Semigroup MigrationDataLoss Source # | |
Defined in Database.Beam.Migrate.Types (<>) :: MigrationDataLoss -> MigrationDataLoss -> MigrationDataLoss # sconcat :: NonEmpty MigrationDataLoss -> MigrationDataLoss # stimes :: Integral b => b -> MigrationDataLoss -> MigrationDataLoss # | |
Show MigrationDataLoss Source # | |
Defined in Database.Beam.Migrate.Types showsPrec :: Int -> MigrationDataLoss -> ShowS # show :: MigrationDataLoss -> String # showList :: [MigrationDataLoss] -> ShowS # |
:: Monad m | |
=> Int | Zero-based index of the first step to run |
-> Maybe Int | Index of the last step to run, or |
-> MigrationSteps be () a | The set of steps to run |
-> (forall a'. Int -> Text -> Migration be a' -> m a') | Callback for each step. Called with the step index, the step description and the migration. |
-> m a |
Run the migration steps between the given indices, using a custom execution function.
runMigrationSilenced :: Migration be a -> a Source #
Get the result of a migration, without running any steps
executeMigration :: Applicative m => (BeamSqlBackendSyntax be -> m ()) -> Migration be a -> m a Source #
Execute a given migration, provided a command to execute arbitrary syntax.
You usually use this with runNoReturn
.
eraseMigrationType :: a -> MigrationSteps be a a' -> MigrationSteps be () () Source #
Remove the explicit source and destination schemas from a MigrationSteps
object
migrationStep :: Text -> (a -> Migration be a') -> MigrationSteps be a a' Source #
Create a MigrationSteps
from the given description and migration function.
upDown :: BeamSqlBackendSyntax be -> Maybe (BeamSqlBackendSyntax be) -> Migration be () Source #
Given a command in the forward direction, and an optional one in the
reverse direction, construct a Migration
that performs the given
command. Multiple commands can be sequenced monadically.
migrationDataLoss :: Migration be a -> MigrationDataLoss Source #
Given a migration, get the potential data loss, if it's run top-down
:: forall be m a. (Monoid m, Semigroup m, BeamSqlBackend be) | |
=> (Text -> m) | Called at the beginning of each |
-> (BeamSqlBackendSyntax be -> m) | Called for each command in the migration step |
-> MigrationSteps be () a | The set of steps to run |
-> m |
Given functions to render a migration step description and the underlying
syntax, create a script for the given MigrationSteps
.
evaluateDatabase :: forall be a. MigrationSteps be () a -> a Source #
Run a MigrationSteps
without executing any of the commands against a
database.
stepNames :: forall be a. MigrationSteps be () a -> [Text] Source #
Collect the names of all steps in hte given MigrationSteps