adamc@712: table u : {C : int, D : int, E : option int} adamc@709: PRIMARY KEY C, adamc@712: CONSTRAINT U UNIQUE (C, D), adamc@712: CONSTRAINT U2 UNIQUE E adamc@709: adamc@712: table t : {A : int, B : int, C : option int} adamc@707: PRIMARY KEY B, adamc@707: adamc@704: CONSTRAINT UniA UNIQUE A, adamc@704: CONSTRAINT UniB UNIQUE B, adamc@704: CONSTRAINT UniBoth UNIQUE (A, B), adamc@704: adamc@704: CONSTRAINT UniAm UNIQUE {#A}, adamc@705: CONSTRAINT UniAm2 {unique [#A] [[]] ! !}, adamc@705: {{one_constraint [#UniAm3] (unique [#A] [[]] ! !)}}, adamc@705: adamc@705: CONSTRAINT UniBothm UNIQUE ({#A}, {#B}), adamc@705: CONSTRAINT UniBothm2 {unique [#A] [[B = _]] ! !}, adamc@709: {{one_constraint [#UniBothm3] (unique [#A] [[B = _]] ! !)}}, adamc@709: adamc@709: CONSTRAINT ForA FOREIGN KEY A REFERENCES u (C), adamc@709: CONSTRAINT ForAB FOREIGN KEY (A, B) REFERENCES u (D, C) ON DELETE CASCADE ON UPDATE RESTRICT, adamc@709: CONSTRAINT ForBA FOREIGN KEY (A, B) REFERENCES u (C, D) ON UPDATE NO ACTION, adamc@712: CONSTRAINT ForB FOREIGN KEY B REFERENCES u (E), adamc@713: CONSTRAINT ForC FOREIGN KEY C REFERENCES u (C), adamc@709: adamc@713: CONSTRAINT Self FOREIGN KEY B REFERENCES t (B) adamc@709: adamc@709: table s : {B : option int} adamc@709: CONSTRAINT UniB UNIQUE B adamc@709: adamc@709: table s2 : {B : option int} adamc@709: CONSTRAINT ForB FOREIGN KEY B REFERENCES s (B) ON DELETE SET NULL adamc@704: adamc@704: fun main () : transaction page = adamc@704: queryI (SELECT * FROM t) (fn _ => return ()); adamc@704: return