changeset 936:6966d98c80b5

Include 'key' type in Grid
author Adam Chlipala <adamc@hcoop.net>
date Tue, 15 Sep 2009 09:45:46 -0400
parents 2422360c78a3
children 37dd42935dad
files demo/more/dbgrid.ur demo/more/grid.ur demo/more/grid.urs
diffstat 3 files changed, 21 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/demo/more/dbgrid.ur	Tue Sep 15 09:40:51 2009 -0400
+++ b/demo/more/dbgrid.ur	Tue Sep 15 09:45:46 2009 -0400
@@ -253,6 +253,8 @@
                  val aggregates : $(map (aggregateMeta (key ++ row)) aggregates)
              end) = struct
     open Grid.Make(struct
+                       fun keyOf r = r --- M.row
+
                        val list = query (SELECT * FROM {{M.tab}} AS T) (fn r rs => return (r.T :: rs)) []
 
                        val wholeRow = @Folder.concat ! M.keyFolder M.rowFolder
@@ -269,7 +271,7 @@
                            dml (insert M.tab (ensql row));
                            return row
 
-                       fun selector (r : $(M.key ++ M.row)) : sql_exp [T = M.key ++ M.row] [] [] bool =
+                       fun selector (r : $M.key) : sql_exp [T = M.key ++ M.row] [] [] bool =
                          foldR2 [rawMeta] [id]
                                 [fn key => rest :: {Type} -> [rest ~ key] => sql_exp [T = key ++ rest] [] [] bool]
                                 (fn [nm :: Name] [t :: Type] [key :: {Type}] [[nm] ~ key]
@@ -278,17 +280,17 @@
                                     [rest :: {Type}] [rest ~ [nm = t] ++ key] =>
                                     (WHERE T.{nm} = {@sql_inject meta.Inj v} AND {exp [[nm = t] ++ rest] !}))
                                 (fn [rest :: {Type}] [rest ~ []] => (WHERE TRUE))
-                                [_] M.keyFolder (M.raw --- map rawMeta M.row) (r --- M.row)
+                                [_] M.keyFolder (M.raw --- map rawMeta M.row) r
                                 [_] !
 
-                       fun save {Old = row, New = row'} =
+                       fun save key row =
                            dml (update [M.key ++ M.row] !
-                                       (ensql row')
+                                       (ensql row)
                                        M.tab
-                                       (selector row))
+                                       (selector key))
 
-                       fun delete row =
-                           dml (Basis.delete M.tab (selector row))
+                       fun delete key =
+                           dml (Basis.delete M.tab (selector key))
 
                        val cols = M.cols
 
--- a/demo/more/grid.ur	Tue Sep 15 09:40:51 2009 -0400
+++ b/demo/more/grid.ur	Tue Sep 15 09:45:46 2009 -0400
@@ -17,10 +17,13 @@
 
 functor Make(M : sig
                  type row
+                 type key
+                 val keyOf : row -> key
+
                  val list : transaction (list row)
                  val new : transaction row
-                 val save : {Old : row, New : row} -> transaction unit
-                 val delete : row -> transaction unit
+                 val save : key -> row -> transaction unit
+                 val delete : key -> transaction unit
 
                  con cols :: {(Type * Type)}
                  val cols : $(map (colMeta row) cols)
@@ -85,7 +88,7 @@
                                 val delete =
                                     Dlist.delete pos;
                                     row <- get rowS;
-                                    rpc (M.delete row)
+                                    rpc (M.delete (M.keyOf row))
 
                                 val update = set ud True
 
@@ -122,7 +125,7 @@
                                                                               [[nm] ~ rest] data meta v row' =>
                                                                  (meta.Handlers data).Update row' v)
                                                              row [_] M.folder grid.Cols M.cols cols;
-                                        rpc (M.save {Old = row, New = row'});
+                                        rpc (M.save (M.keyOf row) row');
                                         set rowS row';
 
                                         cols <- makeAll grid.Cols row';
--- a/demo/more/grid.urs	Tue Sep 15 09:40:51 2009 -0400
+++ b/demo/more/grid.urs	Tue Sep 15 09:45:46 2009 -0400
@@ -17,10 +17,13 @@
 
 functor Make(M : sig
                  type row
+                 type key
+                 val keyOf : row -> key
+
                  val list : transaction (list row)
                  val new : transaction row
-                 val save : {Old : row, New : row} -> transaction unit
-                 val delete : row -> transaction unit
+                 val save : key -> row -> transaction unit
+                 val delete : key -> transaction unit
 
                  con cols :: {(Type * Type)}
                  val cols : $(map (colMeta row) cols)