mirror of
https://github.com/khibino/haskell-relational-record.git
synced 2024-12-15 06:43:04 +03:00
Add table constraint generalized into composite key.
This commit is contained in:
parent
b4502d8c29
commit
71782668da
@ -22,16 +22,23 @@ module Database.Record.KeyConstraint (
|
|||||||
NotNull, NotNullColumnConstraint,
|
NotNull, NotNullColumnConstraint,
|
||||||
|
|
||||||
Primary, PrimaryColumnConstraint,
|
Primary, PrimaryColumnConstraint,
|
||||||
uniqueColumn, notNullColumn,
|
|
||||||
|
KeyConstraint, indexes, unsafeSpecifyKeyConstraint,
|
||||||
|
|
||||||
-- * Deriviations
|
-- * Deriviations
|
||||||
|
uniqueColumn, notNullColumn,
|
||||||
|
|
||||||
leftColumnConstraint,
|
leftColumnConstraint,
|
||||||
HasColumnConstraint (keyConstraint),
|
HasColumnConstraint (keyConstraint),
|
||||||
|
|
||||||
derivedUniqueColumnConstraint,
|
derivedUniqueColumnConstraint,
|
||||||
derivedNotNullColumnConstraint,
|
derivedNotNullColumnConstraint,
|
||||||
|
|
||||||
unsafeSpecifyNotNullValue
|
unsafeSpecifyNotNullValue,
|
||||||
|
|
||||||
|
deriveComposite,
|
||||||
|
|
||||||
|
unique
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
|
||||||
@ -67,11 +74,11 @@ unsafeSpecifyColumnConstraint :: Int -- ^ Key index which specify
|
|||||||
-> ColumnConstraint c r -- ^ Result constraint proof object
|
-> ColumnConstraint c r -- ^ Result constraint proof object
|
||||||
unsafeSpecifyColumnConstraint = ColumnConstraint
|
unsafeSpecifyColumnConstraint = ColumnConstraint
|
||||||
|
|
||||||
-- | Derivation rule for 'UniqueColumnConstraint'.
|
-- | Derivation rule for 'UniqueColumnConstraint'. Derive Unique from Primary.
|
||||||
uniqueColumn :: PrimaryColumnConstraint r -> UniqueColumnConstraint r
|
uniqueColumn :: PrimaryColumnConstraint r -> UniqueColumnConstraint r
|
||||||
uniqueColumn = unsafeSpecifyColumnConstraint . index
|
uniqueColumn = unsafeSpecifyColumnConstraint . index
|
||||||
|
|
||||||
-- | Derivation rule for 'NotNullColumnConstraint'.
|
-- | Derivation rule for 'NotNullColumnConstraint'. Derive NotNull from Primary.
|
||||||
notNullColumn :: PrimaryColumnConstraint r -> NotNullColumnConstraint r
|
notNullColumn :: PrimaryColumnConstraint r -> NotNullColumnConstraint r
|
||||||
notNullColumn = unsafeSpecifyColumnConstraint . index
|
notNullColumn = unsafeSpecifyColumnConstraint . index
|
||||||
|
|
||||||
@ -103,3 +110,32 @@ derivedNotNullColumnConstraint = notNullColumn keyConstraint
|
|||||||
-- | Unsafely generate 'NotNullColumnConstraint' proof object of single column value.
|
-- | Unsafely generate 'NotNullColumnConstraint' proof object of single column value.
|
||||||
unsafeSpecifyNotNullValue :: NotNullColumnConstraint a
|
unsafeSpecifyNotNullValue :: NotNullColumnConstraint a
|
||||||
unsafeSpecifyNotNullValue = unsafeSpecifyColumnConstraint 0
|
unsafeSpecifyNotNullValue = unsafeSpecifyColumnConstraint 0
|
||||||
|
|
||||||
|
|
||||||
|
-- | Proof object to specify table constraint
|
||||||
|
-- for table record type 'r' and constraint 'c'.
|
||||||
|
-- Constraint is specified by composite key.
|
||||||
|
newtype KeyConstraint c r = KeyConstraint [Int]
|
||||||
|
|
||||||
|
-- | Index of key which specifies table constraint.
|
||||||
|
indexes :: KeyConstraint c r -> [Int]
|
||||||
|
indexes (KeyConstraint is) = is
|
||||||
|
|
||||||
|
-- | Unsafely generate 'KeyConstraint' proof object using specified key indexes.
|
||||||
|
unsafeSpecifyKeyConstraint :: [Int] -- ^ Key index which specify this constraint
|
||||||
|
-> KeyConstraint c r -- ^ Result constraint proof object
|
||||||
|
unsafeSpecifyKeyConstraint = KeyConstraint
|
||||||
|
|
||||||
|
-- | Derivation rule for 'KeyConstraint'. Derive from 'ColumnConstraint'.
|
||||||
|
deriveComposite :: ColumnConstraint c r -> KeyConstraint c r
|
||||||
|
deriveComposite = unsafeSpecifyKeyConstraint . (:[]) . index
|
||||||
|
|
||||||
|
-- | Specialized unique constraint.
|
||||||
|
type UniqueConstraint = KeyConstraint Unique
|
||||||
|
|
||||||
|
-- | Specialized primary constraint.
|
||||||
|
type PrimaryConstraint = KeyConstraint Primary
|
||||||
|
|
||||||
|
-- | Derivation rule for 'UniqueConstraint'.
|
||||||
|
unique :: PrimaryConstraint r -> UniqueConstraint r
|
||||||
|
unique = unsafeSpecifyKeyConstraint . indexes
|
||||||
|
Loading…
Reference in New Issue
Block a user