adamc@709: table u : {C : int, D : int, E : int} adamc@709: PRIMARY KEY C, adamc@709: CONSTRAINT U UNIQUE (C, D) adamc@709: adamc@704: table t : {A : int, B : 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@709: adamc@709: 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