annotate tests/relops.ur @ 1394:d328983dc5a6
Allow subqueries to reference aggregate-only columns of free tables; treat non-COUNT aggregate functions as possibly returning NULL
author |
Adam Chlipala <adam@chlipala.net> |
date |
Sat, 15 Jan 2011 14:53:13 -0500 |
parents |
e933297c4e24 |
children |
|
rev |
line source |
adamc@229
|
1 table t1 : {A : int, B : string, C : float}
|
adamc@229
|
2 table t2 : {A : float, D : int}
|
adamc@229
|
3
|
adamc@229
|
4 val q1 = (SELECT * FROM t1
|
adamc@229
|
5 UNION SELECT * FROM t1)
|
adamc@229
|
6 val q2 = (SELECT t1.A, t1.B FROM t1 WHERE t1.A = 0
|
adamc@229
|
7 INTERSECT SELECT t1.B, t1.A FROM t1 WHERE t1.B = t1.B)
|
adamc@229
|
8 val q3 = (SELECT t1.A, t1.B, t1.C FROM t1 WHERE t1.A = 0
|
adamc@229
|
9 INTERSECT SELECT * FROM t1 WHERE t1.B = 'Hello world!'
|
adamc@260
|
10 EXCEPT SELECT * FROM t1 WHERE t1.A < t1.A
|
adamc@260
|
11 UNION SELECT * FROM t1 WHERE t1.A > t1.A)
|
adamc@260
|
12
|
adamc@260
|
13 datatype list a = Nil | Cons of a * list a
|
adamc@260
|
14
|
adamc@260
|
15 val r1 : transaction (list {A : int, B : string, C : float}) =
|
adamc@260
|
16 query q3
|
adamc@260
|
17 (fn fs acc => return (Cons (fs.T1, acc)))
|
adamc@260
|
18 Nil
|
adamc@260
|
19
|
adamc@260
|
20 val r2 : transaction string =
|
adamc@260
|
21 ls <- r1;
|
adamc@260
|
22 return (case ls of
|
adamc@260
|
23 Nil => "Problem"
|
adamc@260
|
24 | Cons ({B = b, ...}, _) => b)
|
adamc@260
|
25
|
adamc@260
|
26 val main : unit -> transaction page = fn () =>
|
adamc@260
|
27 s <- r2;
|
adamc@1070
|
28 return <xml><body>
|
adamc@260
|
29 {cdata s}
|
adamc@1070
|
30 </body></xml>
|