From cd8701d5e602f64cf05c0e34841431d7bbe8e671 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 29 Mar 2009 13:30:01 -0400 Subject: Expunging non-nullable rows --- lib/ur/top.ur | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) (limited to 'lib/ur/top.ur') diff --git a/lib/ur/top.ur b/lib/ur/top.ur index 5465da3d..154e88e9 100644 --- a/lib/ur/top.ur +++ b/lib/ur/top.ur @@ -200,7 +200,7 @@ fun eqNullable' (tables ::: {{Type}}) (agg ::: {{Type}}) (exps ::: {Type}) functor Broadcast(M : sig type t end) = struct sequence s - table t : {Id : int, Client : option client, Channel : option (channel M.t)} + table t : {Id : int, Client : client, Channel : channel M.t} type topic = int @@ -208,27 +208,17 @@ functor Broadcast(M : sig type t end) = struct val create = nextval s - val cleanup = - dml (DELETE FROM t WHERE Client IS NULL) - fun subscribe id = cli <- self; - cleanup; - ro <- oneOrNoRows (SELECT t.Channel FROM t WHERE t.Id = {[id]} AND t.Client = {[Some cli]}); + ro <- oneOrNoRows (SELECT t.Channel FROM t WHERE t.Id = {[id]} AND t.Client = {[cli]}); case ro of None => ch <- channel; - dml (INSERT INTO t (Id, Client, Channel) VALUES ({[id]}, {[Some cli]}, {[Some ch]})); + dml (INSERT INTO t (Id, Client, Channel) VALUES ({[id]}, {[cli]}, {[ch]})); return ch - | Some r => - case r.T.Channel of - None => error Broadcast.subscribe: Got null result - | Some ch => return ch + | Some r => return r.T.Channel fun send id msg = - cleanup; queryI (SELECT t.Channel FROM t WHERE t.Id = {[id]}) - (fn r => case r.T.Channel of - None => error Broadcast.send: Got null result - | Some ch => Basis.send ch msg) + (fn r => Basis.send r.T.Channel msg) end -- cgit v1.2.3