table tab : {Id : int, Val : int} PRIMARY KEY Id
fun check id =
res <- oneOrNoRows (SELECT tab.Val FROM tab WHERE tab.Id = {[id]});
return
{case res of
None => ?
| Some row => {[row.Tab.Val]}}
fun flush id =
dml (UPDATE tab SET Val = Val + 1 WHERE Id = {[id]});
return
Changed {[id]}!
fun main x y =
r <- rand;
let
val id = r % x
val doFlush = (r / x) % y = 0
in
if doFlush then flush id else check id
end