{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Database.Record.KeyConstraint (
ColumnConstraint, index, unsafeSpecifyColumnConstraint,
Unique, UniqueColumnConstraint,
NotNull, NotNullColumnConstraint,
Primary, PrimaryColumnConstraint,
KeyConstraint, indexes, unsafeSpecifyKeyConstraint,
UniqueConstraint, PrimaryConstraint,
uniqueColumn, notNullColumn,
leftColumnConstraint,
unsafeSpecifyNotNullValue,
deriveComposite,
unique,
HasColumnConstraint (columnConstraint),
derivedUniqueColumnConstraint,
derivedNotNullColumnConstraint,
HasKeyConstraint (keyConstraint),
derivedCompositePrimary,
derivedUniqueConstraint
) where
newtype ColumnConstraint c r = ColumnConstraint Int
index :: ColumnConstraint c r -> Int
index :: forall c r. ColumnConstraint c r -> Int
index (ColumnConstraint Int
i) = Int
i
data Unique
data NotNull
data Primary
type UniqueColumnConstraint = ColumnConstraint Unique
type NotNullColumnConstraint = ColumnConstraint NotNull
type PrimaryColumnConstraint = ColumnConstraint Primary
unsafeSpecifyColumnConstraint :: Int
-> ColumnConstraint c r
unsafeSpecifyColumnConstraint :: forall c r. Int -> ColumnConstraint c r
unsafeSpecifyColumnConstraint = forall c r. Int -> ColumnConstraint c r
ColumnConstraint
uniqueColumn :: PrimaryColumnConstraint r -> UniqueColumnConstraint r
uniqueColumn :: forall r. PrimaryColumnConstraint r -> UniqueColumnConstraint r
uniqueColumn = forall c r. Int -> ColumnConstraint c r
unsafeSpecifyColumnConstraint forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c r. ColumnConstraint c r -> Int
index
notNullColumn :: PrimaryColumnConstraint r -> NotNullColumnConstraint r
notNullColumn :: forall r. PrimaryColumnConstraint r -> NotNullColumnConstraint r
notNullColumn = forall c r. Int -> ColumnConstraint c r
unsafeSpecifyColumnConstraint forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c r. ColumnConstraint c r -> Int
index
leftColumnConstraint :: ColumnConstraint NotNull a -> ColumnConstraint NotNull (a, b)
leftColumnConstraint :: forall a b.
ColumnConstraint NotNull a -> ColumnConstraint NotNull (a, b)
leftColumnConstraint ColumnConstraint NotNull a
pa = forall c r. Int -> ColumnConstraint c r
ColumnConstraint (forall c r. ColumnConstraint c r -> Int
index ColumnConstraint NotNull a
pa)
class HasColumnConstraint c a where
columnConstraint :: ColumnConstraint c a
instance HasColumnConstraint NotNull a => HasColumnConstraint NotNull (a, b) where
columnConstraint :: ColumnConstraint NotNull (a, b)
columnConstraint = forall a b.
ColumnConstraint NotNull a -> ColumnConstraint NotNull (a, b)
leftColumnConstraint forall c a. HasColumnConstraint c a => ColumnConstraint c a
columnConstraint
derivedUniqueColumnConstraint :: HasColumnConstraint Primary r => UniqueColumnConstraint r
derivedUniqueColumnConstraint :: forall r. HasColumnConstraint Primary r => UniqueColumnConstraint r
derivedUniqueColumnConstraint = forall r. PrimaryColumnConstraint r -> UniqueColumnConstraint r
uniqueColumn forall c a. HasColumnConstraint c a => ColumnConstraint c a
columnConstraint
derivedNotNullColumnConstraint :: HasColumnConstraint Primary r => NotNullColumnConstraint r
derivedNotNullColumnConstraint :: forall r.
HasColumnConstraint Primary r =>
NotNullColumnConstraint r
derivedNotNullColumnConstraint = forall r. PrimaryColumnConstraint r -> NotNullColumnConstraint r
notNullColumn forall c a. HasColumnConstraint c a => ColumnConstraint c a
columnConstraint
unsafeSpecifyNotNullValue :: NotNullColumnConstraint a
unsafeSpecifyNotNullValue :: forall a. NotNullColumnConstraint a
unsafeSpecifyNotNullValue = forall c r. Int -> ColumnConstraint c r
unsafeSpecifyColumnConstraint Int
0
newtype KeyConstraint c r = KeyConstraint [Int]
indexes :: KeyConstraint c r -> [Int]
indexes :: forall c r. KeyConstraint c r -> [Int]
indexes (KeyConstraint [Int]
is) = [Int]
is
unsafeSpecifyKeyConstraint :: [Int]
-> KeyConstraint c r
unsafeSpecifyKeyConstraint :: forall c r. [Int] -> KeyConstraint c r
unsafeSpecifyKeyConstraint = forall c r. [Int] -> KeyConstraint c r
KeyConstraint
deriveComposite :: ColumnConstraint c r -> KeyConstraint c r
deriveComposite :: forall c r. ColumnConstraint c r -> KeyConstraint c r
deriveComposite = forall c r. [Int] -> KeyConstraint c r
unsafeSpecifyKeyConstraint forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. a -> [a] -> [a]
:[]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c r. ColumnConstraint c r -> Int
index
type UniqueConstraint = KeyConstraint Unique
type PrimaryConstraint = KeyConstraint Primary
unique :: PrimaryConstraint r -> UniqueConstraint r
unique :: forall r. PrimaryConstraint r -> UniqueConstraint r
unique = forall c r. [Int] -> KeyConstraint c r
unsafeSpecifyKeyConstraint forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall c r. KeyConstraint c r -> [Int]
indexes
class HasKeyConstraint c a where
keyConstraint :: KeyConstraint c a
derivedCompositeConstraint :: HasColumnConstraint c r => KeyConstraint c r
derivedCompositeConstraint :: forall c r. HasColumnConstraint c r => KeyConstraint c r
derivedCompositeConstraint = forall c r. ColumnConstraint c r -> KeyConstraint c r
deriveComposite forall c a. HasColumnConstraint c a => ColumnConstraint c a
columnConstraint
derivedCompositePrimary :: HasColumnConstraint Primary r => PrimaryConstraint r
derivedCompositePrimary :: forall r. HasColumnConstraint Primary r => PrimaryConstraint r
derivedCompositePrimary = forall c r. HasColumnConstraint c r => KeyConstraint c r
derivedCompositeConstraint
derivedUniqueConstraint :: HasKeyConstraint Primary r => UniqueConstraint r
derivedUniqueConstraint :: forall r. HasKeyConstraint Primary r => UniqueConstraint r
derivedUniqueConstraint = forall r. PrimaryConstraint r -> UniqueConstraint r
unique forall c a. HasKeyConstraint c a => KeyConstraint c a
keyConstraint