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