diff demo/constraints.ur @ 773:74a090ff296e

constraints demo
author Adam Chlipala <adamc@hcoop.net>
date Sun, 03 May 2009 12:01:55 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/demo/constraints.ur	Sun May 03 12:01:55 2009 -0400
@@ -0,0 +1,38 @@
+table t : { Id : int, Nam : string, Parent : option int }
+  PRIMARY KEY Id,
+  CONSTRAINT Nam UNIQUE Nam,
+  CONSTRAINT Id CHECK Id >= 0,
+  CONSTRAINT Parent FOREIGN KEY Parent REFERENCES t(Id)
+
+fun main () =
+    list <- queryX (SELECT * FROM t)
+            (fn r => <xml><tr>
+              <td>{[r.T.Id]}</td>
+              <td>{[r.T.Nam]}</td>
+              <td>{case r.T.Parent of
+                       None => <xml>NULL</xml>
+                     | Some id => <xml>{[id]}</xml>}</td>
+            </tr></xml>);
+    return <xml><body>
+      <table>
+        <tr> <th>Id</th> <th>Name</th> <th>Parent</th> </tr>
+        {list}
+      </table>
+
+      <form>
+        <table>
+          <tr> <th>Id:</th> <td><textbox{#Id}/></td> </tr>
+          <tr> <th>Name:</th> <td><textbox{#Nam}/></td> </tr>
+          <tr> <th>Parent:</th> <td><textbox{#Parent}/></td> </tr>
+          <tr> <th/> <td><submit action={add}/></td> </tr>
+        </table>
+      </form>
+    </body></xml>
+
+and add r =
+    dml (INSERT INTO t (Id, Nam, Parent)
+           VALUES ({[readError r.Id]}, {[r.Nam]},
+               {[case r.Parent of
+                   "" => None
+                 | s => Some (readError s)]}));
+    main ()