annotate tests/policy.ur @ 1209:775357041e48

Parsing float and string SQL literals
author Adam Chlipala <adamc@hcoop.net>
date Tue, 06 Apr 2010 11:07:19 -0400
parents ae3036773768
children c5bd970e77a5
rev   line source
adamc@1204 1 type fruit = int
adamc@1204 2 table fruit : { Id : fruit, Nam : string, Weight : float, Secret : string }
adamc@1204 3 PRIMARY KEY Id,
adamc@1204 4 CONSTRAINT Nam UNIQUE Nam
adamc@1204 5
adamc@1204 6 type order = int
adamc@1204 7 table order : { Id : order, Fruit : fruit, Qty : int, Code : int }
adamc@1204 8 PRIMARY KEY Id,
adamc@1204 9 CONSTRAINT Fruit FOREIGN KEY Fruit REFERENCES fruit(Id)
adamc@1199 10
adamc@1207 11 (* Everyone may knows IDs and names. *)
adamc@1207 12 policy query_policy (SELECT fruit.Id, fruit.Nam
adamc@1205 13 FROM fruit)
adamc@1207 14
adamc@1207 15 (* The weight is sensitive information; you must know the secret. *)
adamc@1207 16 policy query_policy (SELECT fruit.Weight
adamc@1207 17 FROM fruit
adamc@1207 18 WHERE known(fruit.Secret))
adamc@1207 19
adamc@1205 20 policy query_policy (SELECT order.Id, order.Fruit, order.Qty
adamc@1205 21 FROM order, fruit
adamc@1206 22 WHERE order.Fruit = fruit.Id
adamc@1206 23 AND order.Qty = 13)
adamc@1200 24
adamc@1207 25 fun fname r =
adamc@1207 26 x <- queryX (SELECT fruit.Weight
adamc@1207 27 FROM fruit
adamc@1207 28 WHERE fruit.Nam = {[r.Nam]}
adamc@1207 29 AND fruit.Secret = {[r.Secret]})
adamc@1207 30 (fn r => <xml>Weight is {[r.Fruit.Weight]}</xml>);
adamc@1207 31
adamc@1207 32 return <xml><body>
adamc@1207 33 {x}
adamc@1207 34 </body></xml>
adamc@1207 35
adamc@1200 36 fun main () =
adamc@1204 37 x1 <- queryX (SELECT fruit.Id, fruit.Nam
adamc@1209 38 FROM fruit
adamc@1209 39 WHERE fruit.Nam = "apple"
adamc@1209 40 AND fruit.Weight = 1.23)
adamc@1204 41 (fn x => <xml><li>{[x.Fruit.Id]}: {[x.Fruit.Nam]}</li></xml>);
adamc@1204 42
adamc@1204 43 x2 <- queryX (SELECT fruit.Nam, order.Qty
adamc@1204 44 FROM fruit, order
adamc@1206 45 WHERE fruit.Id = order.Fruit
adamc@1206 46 AND order.Qty = 13)
adamc@1204 47 (fn x => <xml><li>{[x.Fruit.Nam]}: {[x.Order.Qty]}</li></xml>);
adamc@1200 48
adamc@1200 49 return <xml><body>
adamc@1204 50 <ul>{x1}</ul>
adamc@1204 51 <ul>{x2}</ul>
adamc@1207 52
adamc@1207 53 <form>
adamc@1207 54 Fruit name: <textbox{#Nam}/><br/>
adamc@1207 55 Secret: <textbox{#Secret}/><br/>
adamc@1207 56 <submit action={fname}/>
adamc@1207 57 </form>
adamc@1200 58 </body></xml>