@@ -41,6 +41,7 @@ module Squeal.PostgreSQL.Definition
4141 , unique
4242 , primaryKey
4343 , foreignKey
44+ , ForeignKeyed
4445 , OnDeleteClause (OnDeleteNoAction, OnDeleteRestrict, OnDeleteCascade)
4546 , renderOnDeleteClause
4647 , OnUpdateClause (OnUpdateNoAction, OnUpdateRestrict, OnUpdateCascade)
@@ -366,14 +367,11 @@ primaryKey columns = UnsafeTableConstraintExpression $
366367-- "CREATE TABLE \"employees\" (\"id\" serial, \"name\" text NOT NULL, \"employer_id\" integer, CONSTRAINT \"employees_pk\" PRIMARY KEY (\"id\"), CONSTRAINT \"employees_employer_fk\" FOREIGN KEY (\"employer_id\") REFERENCES \"employees\" (\"id\") ON DELETE CASCADE ON UPDATE CASCADE);"
367368--
368369foreignKey
369− :: ( Has child schema table
370− , Has parent schema reftable
371− , HasAll columns (TableToColumns table) tys
372− , reftable ~ (constraints :=> cols)
373− , HasAll refcolumns cols reftys
374− , SOP.AllZip SamePGType tys reftys
375− , AllNotNull reftys
376− , Uniquely refcolumns constraints )
370+ :: (ForeignKeyed schema child parent
371+ table reftable
372+ columns refcolumns
373+ constraints cols
374+ reftys tys )
377375 => NP Alias columns
378376 -- ^ column or columns in the table
379377 -> Alias parent
@@ -393,6 +391,21 @@ foreignKey keys parent refs ondel onupd = UnsafeTableConstraintExpression $
393391 <+> renderOnDeleteClause ondel
394392 <+> renderOnUpdateClause onupd
395393
394+type ForeignKeyed schema
395+ child parent
396+ table reftable
397+ columns refcolumns
398+ constraints cols
399+ reftys tys =
400+ ( Has child schema table
401+ , Has parent schema reftable
402+ , HasAll columns (TableToColumns table) tys
403+ , reftable ~ (constraints :=> cols)
404+ , HasAll refcolumns cols reftys
405+ , SOP.AllZip SamePGType tys reftys
406+ , AllNotNull reftys
407+ , Uniquely refcolumns constraints )
408+
396409-- | `OnDeleteClause` indicates what to do with rows that reference a deleted row.
397410data OnDeleteClause
398411 = OnDeleteNoAction