Mercurial > urweb
comparison demo/more/bulkEdit.ur @ 1005:c6e948ec79e9
Saving changes to user list
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Tue, 20 Oct 2009 13:08:42 -0400 |
parents | a87495bcaeec |
children | 1911e84df461 |
comparison
equal
deleted
inserted
replaced
1004:a87495bcaeec | 1005:c6e948ec79e9 |
---|---|
2 | 2 |
3 functor Make(M : sig | 3 functor Make(M : sig |
4 con keyName :: Name | 4 con keyName :: Name |
5 con keyType :: Type | 5 con keyType :: Type |
6 val showKey : show keyType | 6 val showKey : show keyType |
7 val readKey : read keyType | |
8 val injKey : sql_injectable keyType | |
7 | 9 |
8 con visible :: {(Type * Type)} | 10 con visible :: {(Type * Type)} |
9 constraint [keyName] ~ visible | 11 constraint [keyName] ~ visible |
10 val folder : folder visible | 12 val folder : folder visible |
11 val visible : $(map Meta.meta visible) | 13 val visible : $(map Meta.meta visible) |
18 val isAllowed : transaction bool | 20 val isAllowed : transaction bool |
19 table t : ([keyName = keyType] ++ map fst visible ++ invisible) | 21 table t : ([keyName = keyType] ++ map fst visible ++ invisible) |
20 end) = struct | 22 end) = struct |
21 | 23 |
22 open M | 24 open M |
25 | |
26 fun ensql [avail] (r : $(map snd visible)) : $(map (sql_exp avail [] []) (map fst visible)) = | |
27 map2 [meta] [snd] [fn ts :: (Type * Type) => sql_exp avail [] [] ts.1] | |
28 (fn [ts] meta v => @sql_inject meta.Inject (meta.Parse v)) | |
29 [_] folder visible r | |
23 | 30 |
24 fun main () = | 31 fun main () = |
25 items <- queryX (SELECT t.{keyName}, t.{{map fst visible}} FROM t) | 32 items <- queryX (SELECT t.{keyName}, t.{{map fst visible}} FROM t) |
26 (fn r => <xml><entry><tr> | 33 (fn r => <xml><entry><tr> |
27 <hidden{keyName} value={show r.T.keyName}/> | 34 <hidden{keyName} value={show r.T.keyName}/> |
43 <form><table> | 50 <form><table> |
44 <tr>{foldRX [meta] [_] | 51 <tr>{foldRX [meta] [_] |
45 (fn [nm :: Name] [p :: (Type * Type)] [rest :: {(Type * Type)}] [[nm] ~ rest] m => | 52 (fn [nm :: Name] [p :: (Type * Type)] [rest :: {(Type * Type)}] [[nm] ~ rest] m => |
46 <xml><th>{[m.Nam]}</th></xml>) [_] folder visible}</tr> | 53 <xml><th>{[m.Nam]}</th></xml>) [_] folder visible}</tr> |
47 <subforms{#Users}>{items}</subforms> | 54 <subforms{#Users}>{items}</subforms> |
55 <tr> <td><submit value="Save" action={save}/></td> </tr> | |
48 </table></form> | 56 </table></form> |
49 </body></xml> | 57 </body></xml> |
50 | 58 |
59 and save r = | |
60 List.app (fn user => dml (update [map fst visible] ! | |
61 (ensql (user -- keyName)) | |
62 t | |
63 (WHERE t.{keyName} = {[readError user.keyName]}))) r.Users; | |
64 main () | |
65 | |
51 end | 66 end |