# HG changeset patch # User Adam Chlipala # Date 1254776404 14400 # Node ID d923b47e483dac0b54836f21c196003a9b8178f4 # Parent 6dd122f10c0c0f68bc8c25fd4290cd62b86d9962 Basic CRUD operations in Orm diff -r 6dd122f10c0c -r d923b47e483d CHANGELOG --- a/CHANGELOG Mon Oct 05 16:36:38 2009 -0400 +++ b/CHANGELOG Mon Oct 05 17:00:04 2009 -0400 @@ -1,3 +1,11 @@ +======== +Next +======== + +- Bug fixes +- Improvement to choice of line number to cite in record unification error + messages + ======== 20090926 ======== diff -r 6dd122f10c0c -r d923b47e483d demo/more/orm.ur --- a/demo/more/orm.ur Mon Oct 05 16:36:38 2009 -0400 +++ b/demo/more/orm.ur Mon Oct 05 17:00:04 2009 -0400 @@ -19,11 +19,25 @@ sequence s table t : ([Id = id] ++ M.cols) + type row = $([Id = id] ++ M.cols) + + fun ensql [avail] (r : $M.cols) : $(map (sql_exp avail [] []) M.cols) = + map2 [meta] [Top.id] [sql_exp avail [] []] + (fn [t] meta v => @sql_inject meta.Inj v) + [_] M.folder M.cols r + fun create (r : $M.cols) = id <- nextval s; - dml (insert t ({Id = sql_inject id} - ++ map2 [meta] [Top.id] [sql_exp [] [] []] - (fn [t ::: Type] (meta : meta t) (v : t) => @sql_inject meta.Inj v) - [_] M.folder M.cols r)); - return id + dml (insert t ({Id = sql_inject id} ++ ensql r)); + return ({Id = id} ++ r) + + fun delete r = dml (DELETE FROM t WHERE t.Id = {[r.Id]}) + + fun save r = dml (update [M.cols] ! (ensql (r -- #Id)) t (WHERE T.Id = {[r.Id]})) + + fun lookup id = + ro <- oneOrNoRows (SELECT * FROM t WHERE t.Id = {[id]}); + return (Option.mp (fn r => r.T) ro) + + val list = query (SELECT * FROM t) (fn r ls => return (r.T :: ls)) [] end diff -r 6dd122f10c0c -r d923b47e483d demo/more/orm.urp --- a/demo/more/orm.urp Mon Oct 05 16:36:38 2009 -0400 +++ b/demo/more/orm.urp Mon Oct 05 17:00:04 2009 -0400 @@ -1,2 +1,3 @@ +$/option orm diff -r 6dd122f10c0c -r d923b47e483d demo/more/orm.urs --- a/demo/more/orm.urs Mon Oct 05 16:36:38 2009 -0400 +++ b/demo/more/orm.urs Mon Oct 05 17:00:04 2009 -0400 @@ -15,5 +15,11 @@ val inj : sql_injectable id val id : meta id - val create : $M.cols -> transaction id + type row = $([Id = id] ++ M.cols) + + val create : $M.cols -> transaction row + val delete : row -> transaction unit + val save : row -> transaction unit + val lookup : id -> transaction (option row) + val list : transaction (list row) end