@@ -1034,36 +1034,53 @@ unique columns = UnsafeTableConstraint $
1034 "UNIQUE" <+> parenthesized (renderCommaSeparated renderColumn columns)
1034 "UNIQUE" <+> parenthesized (renderCommaSeparated renderColumn columns)
1036primaryKey
1036primaryKey
1037− :: (SListI subcolumns, NotNullTypes subcolumns)
1037+ :: (SListI subcolumns, AllNotNull subcolumns)
1038 => NP (Column columns) subcolumns
1038 => NP (Column columns) subcolumns
1039 -> TableConstraint schema columns
1039 -> TableConstraint schema columns
1040primaryKey columns = UnsafeTableConstraint $
1040primaryKey columns = UnsafeTableConstraint $
1041 "PRIMARY KEY" <+> parenthesized (renderCommaSeparated renderColumn columns)
1041 "PRIMARY KEY" <+> parenthesized (renderCommaSeparated renderColumn columns)
1043−type family SameTypes columns0 columns1 :: Constraint where
1044− SameTypes '[] '[] = ()
1045− SameTypes ((column0 ::: ty0) ': columns0) ((column1 ::: ty1) ': columns1)
1046− = (ty0 ~ ty1, SameTypes columns0 columns1)
1048−type family NotNullTypes columns :: Constraint where
1049− NotNullTypes '[] = ()
1050− NotNullTypes ((column ::: (optionality ('NotNull ty))) ': columns)
1051− = NotNullTypes columns
1053foreignKey
1043foreignKey
1054 :: ( HasTable reftable schema refcolumns
1044 :: ( HasTable reftable schema refcolumns
1055 , SameTypes subcolumns refsubcolumns
1045 , SameTypes subcolumns refsubcolumns
1056− , NotNullTypes subcolumns
1046+ , NotAllNull subcolumns
1057 , SListI subcolumns
1047 , SListI subcolumns
1058 , SListI refsubcolumns)
1048 , SListI refsubcolumns)
1059 => NP (Column columns) subcolumns
1049 => NP (Column columns) subcolumns
1060 -> Alias reftable
1050 -> Alias reftable
1061 -> NP (Column refcolumns) refsubcolumns
1051 -> NP (Column refcolumns) refsubcolumns
1062 -> TableConstraint schema columns
1054 -> TableConstraint schema columns
1063−foreignKey columns reftable refcolumns = UnsafeTableConstraint $
1055+foreignKey columns reftable refcolumns onDelete onUpdate =
1056+ UnsafeTableConstraint $
1064− "FOREIGN KEY" <+> parenthesized (renderCommaSeparated renderColumn columns)
1057+ "FOREIGN KEY" <+> parenthesized (renderCommaSeparated renderColumn columns)
1065− <+> "REFERENCES" <+> renderAlias reftable
1058+ <+> "REFERENCES" <+> renderAlias reftable
1066− <+> parenthesized (renderCommaSeparated renderColumn refcolumns)
1059+ <+> parenthesized (renderCommaSeparated renderColumn refcolumns)
1060+ <+> renderOnDelete onDelete
1061+ <+> renderOnUpdate onUpdate
1068+renderOnDelete :: OnDelete -> ByteString
1069+renderOnDelete = \case
1070+ OnDeleteNoAction -> "ON DELETE NO ACTION"
1071+ OnDeleteRestrict -> "ON DELETE RESTRICT"
1072+ OnDeleteCascade -> "ON DELETE CASCADE"
1079+renderOnUpdate :: OnUpdate -> ByteString
1080+renderOnUpdate = \case
1081+ OnUpdateNoAction -> "ON UPDATE NO ACTION"
1082+ OnUpdateRestrict -> "ON UPDATE RESTRICT"
1083+ OnUpdateCascade -> "ON UPDATE CASCADE"
1068{-----------------------------------------
1085{-----------------------------------------
1069DROP statements
1086DROP statements