module Database.Selda.Table.Foreign where
import Database.Selda.Selectors
import Database.Selda.Table
import Unsafe.Coerce
fk :: ColSpec a -> (Table t, Selector t a) -> ColSpec a
fk (ColSpec [c]) (tbl, Selector i) =
ColSpec [c {colFKs = thefk : colFKs c}]
where
Table _ tcs _ = tbl
thefk = (unsafeCoerce tbl, colName (tcs !! i))
fk _ _ =
error "impossible: ColSpec with several columns"
optFk :: ColSpec (Maybe a) -> (Table t, Selector t a) -> ColSpec (Maybe a)
optFk (ColSpec [c]) (tbl, Selector i) =
ColSpec [c {colFKs = thefk : colFKs c}]
where
Table _ tcs _ = tbl
thefk = (unsafeCoerce tbl, colName (tcs !! i))
optFk _ _ =
error "impossible: ColSpec with several columns"