Index: third_party/sqlite/src/test/subquery.test |
diff --git a/third_party/sqlite/src/test/subquery.test b/third_party/sqlite/src/test/subquery.test |
index 169cedace6e435d750b73b1a113e4959032ef5b0..93c3f28ddbb7e17f06cf406026f96acc808bfbcc 100644 |
--- a/third_party/sqlite/src/test/subquery.test |
+++ b/third_party/sqlite/src/test/subquery.test |
@@ -241,8 +241,11 @@ do_test subquery-2.5.3.1 { |
} {10.0} |
do_test subquery-2.5.3.2 { |
# Verify that the t4i index was not used in the previous query |
- set ::sqlite_query_plan |
-} {t4 {}} |
+ execsql { |
+ EXPLAIN QUERY PLAN |
+ SELECT * FROM t4 WHERE x IN (SELECT a FROM t3); |
+ } |
+} {~/t4i/} |
do_test subquery-2.5.4 { |
execsql { |
DROP TABLE t3; |
@@ -331,12 +334,97 @@ do_test subquery-3.3.5 { |
} |
} {1 1 2 1} |
+# The following tests check for aggregate subqueries in an aggregate |
+# query. |
+# |
+do_test subquery-3.4.1 { |
+ execsql { |
+ CREATE TABLE t34(x,y); |
+ INSERT INTO t34 VALUES(106,4), (107,3), (106,5), (107,5); |
+ SELECT a.x, avg(a.y) |
+ FROM t34 AS a |
+ GROUP BY a.x |
+ HAVING NOT EXISTS( SELECT b.x, avg(b.y) |
+ FROM t34 AS b |
+ GROUP BY b.x |
+ HAVING avg(a.y) > avg(b.y)); |
+ } |
+} {107 4.0} |
+do_test subquery-3.4.2 { |
+ execsql { |
+ SELECT a.x, avg(a.y) AS avg1 |
+ FROM t34 AS a |
+ GROUP BY a.x |
+ HAVING NOT EXISTS( SELECT b.x, avg(b.y) AS avg2 |
+ FROM t34 AS b |
+ GROUP BY b.x |
+ HAVING avg1 > avg2); |
+ } |
+} {107 4.0} |
+do_test subquery-3.4.3 { |
+ execsql { |
+ SELECT |
+ a.x, |
+ avg(a.y), |
+ NOT EXISTS ( SELECT b.x, avg(b.y) |
+ FROM t34 AS b |
+ GROUP BY b.x |
+ HAVING avg(a.y) > avg(b.y)), |
+ EXISTS ( SELECT c.x, avg(c.y) |
+ FROM t34 AS c |
+ GROUP BY c.x |
+ HAVING avg(a.y) > avg(c.y)) |
+ FROM t34 AS a |
+ GROUP BY a.x |
+ ORDER BY a.x; |
+ } |
+} {106 4.5 0 1 107 4.0 1 0} |
+ |
+do_test subquery-3.5.1 { |
+ execsql { |
+ CREATE TABLE t35a(x); INSERT INTO t35a VALUES(1),(2),(3); |
+ CREATE TABLE t35b(y); INSERT INTO t35b VALUES(98), (99); |
+ SELECT max((SELECT avg(y) FROM t35b)) FROM t35a; |
+ } |
+} {98.5} |
+do_test subquery-3.5.2 { |
+ execsql { |
+ SELECT max((SELECT count(y) FROM t35b)) FROM t35a; |
+ } |
+} {2} |
+do_test subquery-3.5.3 { |
+ execsql { |
+ SELECT max((SELECT count() FROM t35b)) FROM t35a; |
+ } |
+} {2} |
+do_test subquery-3.5.4 { |
+ catchsql { |
+ SELECT max((SELECT count(x) FROM t35b)) FROM t35a; |
+ } |
+} {1 {misuse of aggregate: count()}} |
+do_test subquery-3.5.5 { |
+ catchsql { |
+ SELECT max((SELECT count(x) FROM t35b)) FROM t35a; |
+ } |
+} {1 {misuse of aggregate: count()}} |
+do_test subquery-3.5.6 { |
+ catchsql { |
+ SELECT max((SELECT a FROM (SELECT count(x) AS a FROM t35b))) FROM t35a; |
+ } |
+} {1 {misuse of aggregate: count()}} |
+do_test subquery-3.5.7 { |
+ execsql { |
+ SELECT max((SELECT a FROM (SELECT count(y) AS a FROM t35b))) FROM t35a; |
+ } |
+} {2} |
+ |
+ |
#------------------------------------------------------------------ |
# These tests - subquery-4.* - use the TCL statement cache to try |
# and expose bugs to do with re-using statements that have been |
# passed to sqlite3_reset(). |
# |
-# One problem was that VDBE memory cells were not being initialised |
+# One problem was that VDBE memory cells were not being initialized |
# to NULL on the second and subsequent executions. |
# |
do_test subquery-4.1.1 { |