summaryrefslogtreecommitdiff
path: root/tests/tags.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-06-25 14:04:13 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2014-06-25 14:04:13 -0400
commit547fc262a0cdf2363f8eb9ec75bea2f3dcaa9e83 (patch)
treeaa657a36e2c449a4aa47aac3b924487db6097d9a /tests/tags.ur
parent9e8624b754e546e547b047e50e30bcba3259d1f6 (diff)
New syntactic shorthand for antiquoting subqueries
Diffstat (limited to 'tests/tags.ur')
-rw-r--r--tests/tags.ur23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/tags.ur b/tests/tags.ur
new file mode 100644
index 00000000..1213d824
--- /dev/null
+++ b/tests/tags.ur
@@ -0,0 +1,23 @@
+table images : { Id : int, Content : blob }
+table tags : { Id : int, Tag : string }
+
+datatype mode = Present | Absent
+type condition = { Tag : string, Mode : mode }
+
+type tag_query = sql_query [] [] [] [Id = int]
+
+fun addCondition (c : condition) (q : tag_query) : tag_query =
+ case c.Mode of
+ Present => (SELECT I.Id AS Id
+ FROM ({{q}}) AS I
+ JOIN tags ON tags.Id = I.Id AND tags.Tag = {[c.Tag]})
+ | Absent => q
+
+fun withConditions (cs : list condition) : tag_query =
+ List.foldl addCondition (SELECT images.Id AS Id FROM images) cs
+
+fun main (cs : list condition) : transaction page =
+ x <- queryX (withConditions cs) (fn r => <xml><li>{[r.Id]}</li></xml>);
+ return <xml><body>
+ {x}
+ </body></xml>