changeset 1405:8631e9ed0ee8

queryXI and queryX1I
author Adam Chlipala <adam@chlipala.net>
date Thu, 20 Jan 2011 12:43:12 -0500
parents 82b204f20026
children e8bea46f8eda
files lib/ur/top.ur lib/ur/top.urs
diffstat 2 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ur/top.ur	Thu Jan 20 10:40:40 2011 -0500
+++ b/lib/ur/top.ur	Thu Jan 20 12:43:12 2011 -0500
@@ -255,6 +255,30 @@
           (fn fs acc => return <xml>{acc}{f fs}</xml>)
           <xml/>
 
+fun rev [a] (ls : list a) : list a =
+    let
+        fun rev' ls acc =
+            case ls of
+                [] => acc
+              | x :: ls => rev' ls (x :: acc)
+    in
+        rev' ls []
+    end
+
+fun queryXI [tables ::: {{Type}}] [exps ::: {Type}] [ctx ::: {Unit}] [inp ::: {Type}]
+            [tables ~ exps] (q : sql_query [] [] tables exps)
+            (f : int -> $(exps ++ map (fn fields :: {Type} => $fields) tables)
+                 -> xml ctx inp []) =
+    let
+        fun qxi ls i =
+            case ls of
+                [] => <xml/>
+              | x :: ls => <xml>{f i x}{qxi ls (i+1)}</xml>
+    in
+        ls <- queryL q;
+        return (qxi ls 0)
+    end
+
 fun queryX1 [nm ::: Name] [fs ::: {Type}] [ctx ::: {Unit}] [inp ::: {Type}]
             (q : sql_query [] [] [nm = fs] [])
             (f : $fs -> xml ctx inp []) =
@@ -262,6 +286,19 @@
           (fn fs acc => return <xml>{acc}{f fs.nm}</xml>)
           <xml/>
 
+fun queryX1I [nm ::: Name] [fs ::: {Type}] [ctx ::: {Unit}] [inp ::: {Type}]
+             (q : sql_query [] [] [nm = fs] [])
+             (f : int -> $fs -> xml ctx inp []) =
+    let
+        fun qx1i ls i =
+            case ls of
+                [] => <xml/>
+              | x :: ls => <xml>{f i x.nm}{qx1i ls (i+1)}</xml>
+    in
+        ls <- queryL q;
+        return (qx1i ls 0)
+    end
+
 fun queryX' [tables ::: {{Type}}] [exps ::: {Type}] [ctx ::: {Unit}] [inp ::: {Type}]
             [tables ~ exps] (q : sql_query [] [] tables exps)
             (f : $(exps ++ map (fn fields :: {Type} => $fields) tables)
--- a/lib/ur/top.urs	Thu Jan 20 10:40:40 2011 -0500
+++ b/lib/ur/top.urs	Thu Jan 20 12:43:12 2011 -0500
@@ -164,11 +164,23 @@
                  -> xml ctx inp [])
              -> transaction (xml ctx inp [])
 
+val queryXI : tables ::: {{Type}} -> exps ::: {Type} -> ctx ::: {Unit} -> inp ::: {Type}
+              -> [tables ~ exps] =>
+    sql_query [] [] tables exps
+    -> (int -> $(exps ++ map (fn fields :: {Type} => $fields) tables)
+        -> xml ctx inp [])
+    -> transaction (xml ctx inp [])
+
 val queryX1 : nm ::: Name -> fs ::: {Type} -> ctx ::: {Unit} -> inp ::: {Type}
               -> sql_query [] [] [nm = fs] []
               -> ($fs -> xml ctx inp [])
               -> transaction (xml ctx inp [])
 
+val queryX1I : nm ::: Name -> fs ::: {Type} -> ctx ::: {Unit} -> inp ::: {Type}
+               -> sql_query [] [] [nm = fs] []
+               -> (int -> $fs -> xml ctx inp [])
+               -> transaction (xml ctx inp [])
+
 val queryX' : tables ::: {{Type}} -> exps ::: {Type} -> ctx ::: {Unit} -> inp ::: {Type}
               -> [tables ~ exps] =>
               sql_query [] [] tables exps