summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/basis.urs2
-rw-r--r--src/urweb.grm1
-rw-r--r--tests/update.ur5
-rw-r--r--tests/update.urp6
4 files changed, 13 insertions, 1 deletions
diff --git a/lib/basis.urs b/lib/basis.urs
index 4cd2f6da..ff5c2163 100644
--- a/lib/basis.urs
+++ b/lib/basis.urs
@@ -209,8 +209,8 @@ val insert : fields ::: {Type}
-> dml
val update : changed ::: {Type} -> unchanged ::: {Type} -> changed ~ unchanged
- -> sql_table (changed ++ unchanged)
-> $changed
+ -> sql_table (changed ++ unchanged)
-> sql_exp [T = changed ++ unchanged] [] [] bool
-> dml
diff --git a/src/urweb.grm b/src/urweb.grm
index 6f355c43..27a06191 100644
--- a/src/urweb.grm
+++ b/src/urweb.grm
@@ -726,6 +726,7 @@ eterm : LPAREN eexp RPAREN (#1 eexp, s (LPARENleft, RPARENright))
(EPrim (Prim.String ""), s (XML_BEGINleft, XML_ENDright))),
s (XML_BEGINleft, XML_ENDright))
| LPAREN query RPAREN (query)
+ | LPAREN CWHERE sqlexp RPAREN (sqlexp)
| UNDER (EWild, s (UNDERleft, UNDERright))
idents : ident ([ident])
diff --git a/tests/update.ur b/tests/update.ur
new file mode 100644
index 00000000..25efa348
--- /dev/null
+++ b/tests/update.ur
@@ -0,0 +1,5 @@
+table t1 : {A : int, B : string, C : float, D : bool}
+
+fun main () : transaction page =
+ () <- dml (update {B = "6", C = 7.0} t1 (WHERE T.A = 5));
+ return <html><body>Updated.</body></html>
diff --git a/tests/update.urp b/tests/update.urp
new file mode 100644
index 00000000..7a249b88
--- /dev/null
+++ b/tests/update.urp
@@ -0,0 +1,6 @@
+debug
+database dbname=test
+exe /tmp/webapp
+sql /tmp/urweb.sql
+
+update