Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Reason
- = TableDoesntExist TableName
- | TableAlreadyExist TableName Table
- | TableConstraintAlreadyExist TableName TableConstraint
- | TableConstraintDoesntExist TableName TableConstraint
- | ColumnDoesntExist ColumnName
- | ColumnAlreadyExist ColumnName Column
- | ColumnTypeMismatch ColumnName Column ColumnType
- | ColumnConstraintAlreadyExist (Qualified ColumnName) ColumnConstraint
- | ColumnConstraintDoesntExist (Qualified ColumnName) ColumnConstraint
- | EnumDoesntExist EnumerationName
- | EnumAlreadyExist EnumerationName Enumeration
- | EnumInsertionPointDoesntExist EnumerationName Enumeration Text
- | SequenceAlreadyExist SequenceName Sequence
- | SequenceDoesntExist SequenceName
- | TableReferencesDeletedColumnInConstraint TableName (Qualified ColumnName) TableConstraint
- | ColumnReferencesNonExistingEnum (Qualified ColumnName) EnumerationName
- | ColumnInPrimaryKeyCantBeNull (Qualified ColumnName)
- | ColumnsInFkAreNotUniqueOrPrimaryKeyFields TableName [Qualified ColumnName]
- | ColumnStillReferencesSequence SequenceName (Qualified ColumnName)
- | NotAllColumnsExist TableName (Set ColumnName) (Set ColumnName)
- | DeletedConstraintAffectsExternalTables (TableName, TableConstraint) (Qualified ColumnName, TableConstraint)
- | EnumContainsDuplicateValues EnumerationName [Text]
- data ApplyFailed
- data ValidationFailed
- applyEdits :: [WithPriority Edit] -> Schema -> Either ApplyFailed Schema
- validateSchema :: Schema -> Either [ValidationFailed] ()
- validateSchemaTables :: Schema -> Either [ValidationFailed] ()
- validateSchemaEnums :: Schema -> Either [ValidationFailed] ()
- validateTableConstraint :: Schema -> TableName -> Table -> TableConstraint -> Either ValidationFailed ()
- validateColumn :: Schema -> TableName -> (ColumnName, Column) -> Either [ValidationFailed] ()
Types
data ApplyFailed Source #
Instances
Eq ApplyFailed Source # | |
Defined in Database.Beam.AutoMigrate.Validity (==) :: ApplyFailed -> ApplyFailed -> Bool # (/=) :: ApplyFailed -> ApplyFailed -> Bool # | |
Show ApplyFailed Source # | |
Defined in Database.Beam.AutoMigrate.Validity showsPrec :: Int -> ApplyFailed -> ShowS # show :: ApplyFailed -> String # showList :: [ApplyFailed] -> ShowS # |
data ValidationFailed Source #
Instances
Eq ValidationFailed Source # | |
Defined in Database.Beam.AutoMigrate.Validity (==) :: ValidationFailed -> ValidationFailed -> Bool # (/=) :: ValidationFailed -> ValidationFailed -> Bool # | |
Show ValidationFailed Source # | |
Defined in Database.Beam.AutoMigrate.Validity showsPrec :: Int -> ValidationFailed -> ShowS # show :: ValidationFailed -> String # showList :: [ValidationFailed] -> ShowS # |
Applying edits to a Schema
applyEdits :: [WithPriority Edit] -> Schema -> Either ApplyFailed Schema Source #
Tries to apply a list of edits to a Schema
to generate a new one. Fails with an ApplyFailed
error
if the input list of Edit
s would generate an invalid Schema
.
Validing a Schema
validateSchema :: Schema -> Either [ValidationFailed] () Source #
Validate a Schema
, returning an error in case the validation didn't succeed. We never contemplate
the case where any of the entities names are empty (i.e. the empty string) as that clearly indicates a
bug in the library, not a user error that needs to be reported.
validateSchemaTables :: Schema -> Either [ValidationFailed] () Source #
A Table
is not valid if:
1. Any of its Column
s are not valid;
2. Any of its TableConstraint
s are not valid.
validateSchemaEnums :: Schema -> Either [ValidationFailed] () Source #
A Schema
enum is considered always valid in this context except if it contains duplicate values.
validateTableConstraint :: Schema -> TableName -> Table -> TableConstraint -> Either ValidationFailed () Source #
Validate a TableConstraint
, making sure referential integrity is not violated.
A Table constraint is valid IFF:
1. For a PrimaryKey
, all the referenced columns must exist in the Table
;
2. For a Unique
, all the referenced columns must exist in the Table
;
3. For a ForeignKey
, all the columns (both local and referenced) must exist;
4. For a ForeignKey
, the referenced columns must all be UNIQUE or PRIMARY keys.
validateColumn :: Schema -> TableName -> (ColumnName, Column) -> Either [ValidationFailed] () Source #