summaryrefslogtreecommitdiff
path: root/demo/batch.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-03-10 15:17:23 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-03-10 15:17:23 -0400
commit74f41e27e7940eec0320f7358f030185e8c2c2e0 (patch)
tree433f576bae7ae3c50abfef5327d67f0220601783 /demo/batch.ur
parente9c88084b769bb1af4ec2ffb876c861e01487ba1 (diff)
Batch example
Diffstat (limited to 'demo/batch.ur')
-rw-r--r--demo/batch.ur80
1 files changed, 80 insertions, 0 deletions
diff --git a/demo/batch.ur b/demo/batch.ur
new file mode 100644
index 00000000..454ff691
--- /dev/null
+++ b/demo/batch.ur
@@ -0,0 +1,80 @@
+datatype list t = Nil | Cons of t * list t
+
+table t : {Id : int, A : string}
+
+fun allRows () =
+ query (SELECT * FROM t)
+ (fn r acc => return (Cons ((r.T.Id, r.T.A), acc)))
+ Nil
+
+fun doBatch ls =
+ case ls of
+ Nil => return ()
+ | Cons ((id, a), ls') =>
+ dml (INSERT INTO t (Id, A) VALUES ({[id]}, {[a]}));
+ doBatch ls'
+
+fun del id =
+ dml (DELETE FROM t WHERE t.Id = {[id]})
+
+fun show withDel lss =
+ let
+ fun show' ls =
+ case ls of
+ Nil => <xml/>
+ | Cons ((id, a), ls) => <xml>
+ <tr><td>{[id]}</td> <td>{[a]}</td> {if withDel then
+ <xml><td><button value="Delete" onclick={del id}/></td></xml>
+ else
+ <xml/>} </tr>
+ {show' ls}
+ </xml>
+ in
+ <xml><dyn signal={ls <- signal lss; return <xml><table>
+ <tr> <th>Id</th> <th>A</th> </tr>
+ {show' ls}
+ </table></xml>}/></xml>
+ end
+
+fun main () =
+ lss <- source Nil;
+ batched <- source Nil;
+
+ id <- source "";
+ a <- source "";
+
+ let
+ fun add () =
+ id <- get id;
+ a <- get a;
+ ls <- get batched;
+
+ set batched (Cons ((readError id, a), ls))
+
+ fun exec () =
+ ls <- get batched;
+
+ doBatch ls;
+ set batched Nil
+ in
+ return <xml><body>
+ <h2>Rows</h2>
+
+ {show True lss}
+
+ <button value="Update" onclick={ls <- allRows (); set lss ls}/><br/>
+ <br/>
+
+ <h2>Batch new rows to add</h2>
+
+ <table>
+ <tr> <th>Id:</th> <td><ctextbox source={id}/></td> </tr>
+ <tr> <th>A:</th> <td><ctextbox source={a}/></td> </tr>
+ <tr> <th/> <td><button value="Batch it" onclick={add ()}/></td> </tr>
+ </table>
+
+ <h2>Already batched:</h2>
+ {show False batched}
+ <button value="Execute" onclick={exec ()}/>
+ </body></xml>
+ end