Mercurial > urweb
annotate demo/refFun.ur @ 1244:1eedc9086e6c
Use key information in more places, and catch cases where one key completion depends on another having happened already
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 18 Apr 2010 13:00:36 -0400 |
parents | 1a317a707d71 |
children |
rev | line source |
---|---|
adamc@419 | 1 functor Make(M : sig |
adamc@419 | 2 type data |
adamc@419 | 3 val inj : sql_injectable data |
adamc@419 | 4 end) = struct |
adamc@419 | 5 |
adamc@419 | 6 type ref = int |
adamc@419 | 7 |
adamc@419 | 8 sequence s |
adamc@419 | 9 table t : { Id : int, Data : M.data } |
adamc@708 | 10 PRIMARY KEY Id |
adamc@419 | 11 |
adamc@419 | 12 fun new d = |
adamc@419 | 13 id <- nextval s; |
adamc@471 | 14 dml (INSERT INTO t (Id, Data) VALUES ({[id]}, {[d]})); |
adamc@419 | 15 return id |
adamc@419 | 16 |
adamc@419 | 17 fun read r = |
adamc@471 | 18 o <- oneOrNoRows (SELECT t.Data FROM t WHERE t.Id = {[r]}); |
adamc@501 | 19 case o of |
adamc@419 | 20 None => error <xml>You already deleted that ref!</xml> |
adamc@501 | 21 | Some r => return r.T.Data |
adamc@419 | 22 |
adamc@419 | 23 fun write r d = |
adamc@471 | 24 dml (UPDATE t SET Data = {[d]} WHERE Id = {[r]}) |
adamc@419 | 25 |
adamc@419 | 26 fun delete r = |
adamc@471 | 27 dml (DELETE FROM t WHERE Id = {[r]}) |
adamc@420 | 28 |
adamc@419 | 29 end |