Mercurial > urweb
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 |