summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-12-15 11:11:49 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-12-15 11:11:49 -0500
commitab13bbf764595fe6c01fcb5fe61bdf464d77f7fe (patch)
treea6950e374ba47268bc2bc5ee4cb14dd5a6f3d5b1
parent6179a09d47c5af4db1ac41d00b8cb7ec36741c3e (diff)
Allow same constructor shorthand for 'view' sig items as for 'table'
-rw-r--r--lib/ur/top.ur15
-rw-r--r--lib/ur/top.urs15
-rw-r--r--src/urweb.grm2
3 files changed, 27 insertions, 5 deletions
diff --git a/lib/ur/top.ur b/lib/ur/top.ur
index 78a799b1..9a27f6b2 100644
--- a/lib/ur/top.ur
+++ b/lib/ur/top.ur
@@ -224,6 +224,13 @@ fun queryX [tables ::: {{Type}}] [exps ::: {Type}] [ctx ::: {Unit}] [inp ::: {Ty
(fn fs acc => return <xml>{acc}{f fs}</xml>)
<xml/>
+fun queryX1 [nm ::: Name] [fs ::: {Type}] [ctx ::: {Unit}] [inp ::: {Type}]
+ (q : sql_query [nm = fs] [])
+ (f : $fs -> xml ctx inp []) =
+ query q
+ (fn fs acc => return <xml>{acc}{f fs.nm}</xml>)
+ <xml/>
+
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)
@@ -253,7 +260,7 @@ fun oneOrNoRows1 [nm ::: Name] [fs ::: {Type}] (q : sql_query [nm = fs] []) =
(fn fs _ => return (Some fs.nm))
None
-fun oneOrNoRowsE1 [tab ::: Name] [nm ::: Name] [t ::: Type] [[tab] ~ [nm]] (q : sql_query [tab = []] [nm = t]) =
+fun oneOrNoRowsE1 [tabs ::: {Unit}] [nm ::: Name] [t ::: Type] [tabs ~ [nm]] (q : sql_query (mapU [] tabs) [nm = t]) =
query q
(fn fs _ => return (Some fs.nm))
None
@@ -265,6 +272,12 @@ fun oneRow [tables ::: {{Type}}] [exps ::: {Type}]
None => error <xml>Query returned no rows</xml>
| Some r => r)
+fun oneRow1 [nm ::: Name] [fs ::: {Type}] (q : sql_query [nm = fs] []) =
+ o <- oneOrNoRows q;
+ return (case o of
+ None => error <xml>Query returned no rows</xml>
+ | Some r => r.nm)
+
fun oneRowE1 [tabs ::: {Unit}] [nm ::: Name] [t ::: Type] [tabs ~ [nm]] (q : sql_query (mapU [] tabs) [nm = t]) =
o <- oneOrNoRows q;
return (case o of
diff --git a/lib/ur/top.urs b/lib/ur/top.urs
index 57bc2b1e..92fb9edd 100644
--- a/lib/ur/top.urs
+++ b/lib/ur/top.urs
@@ -132,6 +132,11 @@ val queryX : tables ::: {{Type}} -> exps ::: {Type} -> ctx ::: {Unit} -> inp :::
-> 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 queryX' : tables ::: {{Type}} -> exps ::: {Type} -> ctx ::: {Unit} -> inp ::: {Type}
-> [tables ~ exps] =>
sql_query tables exps
@@ -156,9 +161,9 @@ val oneOrNoRows1 : nm ::: Name -> fs ::: {Type}
-> sql_query [nm = fs] []
-> transaction (option $fs)
-val oneOrNoRowsE1 : tab ::: Name -> nm ::: Name -> t ::: Type
- -> [[tab] ~ [nm]] =>
- sql_query [tab = []] [nm = t]
+val oneOrNoRowsE1 : tabs ::: {Unit} -> nm ::: Name -> t ::: Type
+ -> [tabs ~ [nm]] =>
+ sql_query (mapU [] tabs) [nm = t]
-> transaction (option t)
val oneRow : tables ::: {{Type}} -> exps ::: {Type}
@@ -168,6 +173,10 @@ val oneRow : tables ::: {{Type}} -> exps ::: {Type}
$(exps
++ map (fn fields :: {Type} => $fields) tables)
+val oneRow1 : nm ::: Name -> fs ::: {Type}
+ -> sql_query [nm = fs] []
+ -> transaction $fs
+
val oneRowE1 : tabs ::: {Unit} -> nm ::: Name -> t ::: Type
-> [tabs ~ [nm]] =>
sql_query (mapU [] tabs) [nm = t]
diff --git a/src/urweb.grm b/src/urweb.grm
index afe7be07..00c39b52 100644
--- a/src/urweb.grm
+++ b/src/urweb.grm
@@ -703,7 +703,7 @@ sgi : CON SYMBOL DCOLON kind ((SgiConAbs (SYMBOL, kind), s (CONleft,
| VIEW SYMBOL COLON cexp (let
val loc = s (VIEWleft, cexpright)
val t = (CVar (["Basis"], "sql_view"), loc)
- val t = (CApp (t, cexp), loc)
+ val t = (CApp (t, entable cexp), loc)
in
(SgiVal (SYMBOL, t), loc)
end)