comparison src/pathcheck.sml @ 707:d8217b4cb617

PRIMARY KEY
author Adam Chlipala <adamc@hcoop.net>
date Tue, 07 Apr 2009 16:14:31 -0400
parents 70cbdcf5989b
children 4c5796512edc
comparison
equal deleted inserted replaced
706:1fb318c17546 707:d8217b4cb617
53 (funcs, SS.add (rels, s))) 53 (funcs, SS.add (rels, s)))
54 in 54 in
55 case d of 55 case d of
56 DExport (_, s, _, _, _) => doFunc s 56 DExport (_, s, _, _, _) => doFunc s
57 57
58 | DTable (s, _, e) => 58 | DTable (s, _, pe, ce) =>
59 let 59 let
60 fun constraints (e, rels) = 60 fun constraints (e, rels) =
61 case #1 e of 61 case #1 e of
62 ERecord [(s', _, _)] => 62 ERecord [(s', _, _)] =>
63 let 63 let
69 (); 69 ();
70 SS.add (rels, s') 70 SS.add (rels, s')
71 end 71 end
72 | EStrcat (e1, e2) => constraints (e2, constraints (e1, rels)) 72 | EStrcat (e1, e2) => constraints (e2, constraints (e1, rels))
73 | _ => rels 73 | _ => rels
74
75 val rels = #2 (doRel s)
76 val rels = case #1 pe of
77 EPrim (Prim.String "") => rels
78 | _ =>
79 let
80 val s' = s ^ "_Pkey"
81 in
82 if SS.member (rels, s') then
83 E.errorAt loc ("Duplicate primary key constraint path " ^ s')
84 else
85 ();
86 SS.add (rels, s')
87 end
74 in 88 in
75 (funcs, constraints (e, #2 (doRel s))) 89 (funcs, constraints (ce, rels))
76 end 90 end
77 | DSequence s => doRel s 91 | DSequence s => doRel s
78 92
79 | _ => (funcs, rels) 93 | _ => (funcs, rels)
80 end 94 end