table tab : {Id : int, Val : int} PRIMARY KEY Id
fun cache id =
res <- oneOrNoRows (SELECT tab.Val
FROM tab
WHERE tab.Id = {[id]});
return
Reading {[id]}.
{case res of
None => ?
| Some row => {[row.Tab.Val]}}
fun flush id =
res <- oneOrNoRows (SELECT tab.Val
FROM tab
WHERE tab.Id = {[id]});
(case res of
None => dml (INSERT INTO tab (Id, Val)
VALUES ({[id]}, 0))
| Some row => dml (UPDATE tab
SET Val = {[row.Tab.Val + 1]}
WHERE Id = {[id]}));
return
{case res of
None => Initialized {[id]}!
| Some row => Incremented {[id]}!}