Index: third_party/sqlite/src/test/with1.test |
diff --git a/third_party/sqlite/src/test/with1.test b/third_party/sqlite/src/test/with1.test |
index 42d2277aeffac418354be0e1c53686889993fc16..7345c5ceb3782ea2f1f91cd4aa51edcf268803e7 100644 |
--- a/third_party/sqlite/src/test/with1.test |
+++ b/third_party/sqlite/src/test/with1.test |
@@ -827,5 +827,168 @@ WITH RECURSIVE |
SELECT x FROM t1 EXCEPT SELECT y FROM t2 ORDER BY 1; |
} {2 4 8 10 14 16 20} |
+# 2015-03-21 |
+# Column wildcards on the LHS of a recursive table expression |
+# |
+do_catchsql_test 13.1 { |
+ WITH RECURSIVE c(i) AS (SELECT * UNION ALL SELECT i+1 FROM c WHERE i<10) |
+ SELECT i FROM c; |
+} {1 {no tables specified}} |
+do_catchsql_test 13.2 { |
+ WITH RECURSIVE c(i) AS (SELECT 5,* UNION ALL SELECT i+1 FROM c WHERE i<10) |
+ SELECT i FROM c; |
+} {1 {no tables specified}} |
+do_catchsql_test 13.3 { |
+ WITH RECURSIVE c(i,j) AS (SELECT 5,* UNION ALL SELECT i+1,11 FROM c WHERE i<10) |
+ SELECT i FROM c; |
+} {1 {table c has 1 values for 2 columns}} |
+ |
+# 2015-04-12 |
+# |
+do_execsql_test 14.1 { |
+ WITH x AS (SELECT * FROM t) SELECT 0 EXCEPT SELECT 0 ORDER BY 1 COLLATE binary; |
+} {} |
+ |
+# 2015-05-27: Do not allow rowid usage within a CTE |
+# |
+do_catchsql_test 15.1 { |
+ WITH RECURSIVE |
+ d(x) AS (VALUES(1) UNION ALL SELECT rowid+1 FROM d WHERE rowid<10) |
+ SELECT x FROM d; |
+} {1 {no such column: rowid}} |
+ |
+# 2015-07-05: Do not allow aggregate recursive queries |
+# |
+do_catchsql_test 16.1 { |
+ WITH RECURSIVE |
+ i(x) AS (VALUES(1) UNION SELECT count(*) FROM i) |
+ SELECT * FROM i; |
+} {1 {recursive aggregate queries not supported}} |
+ |
+#------------------------------------------------------------------------- |
+do_execsql_test 17.1 { |
+ WITH x(a) AS ( |
+ WITH y(b) AS (SELECT 10) |
+ SELECT 9 UNION ALL SELECT * FROM y |
+ ) |
+ SELECT * FROM x |
+} {9 10} |
+ |
+do_execsql_test 17.2 { |
+ WITH x AS ( |
+ WITH y(b) AS (SELECT 10) |
+ SELECT * FROM y UNION ALL SELECT * FROM y |
+ ) |
+ SELECT * FROM x |
+} {10 10} |
+ |
+do_test 17.2 { |
+ db eval { |
+ WITH x AS ( |
+ WITH y(b) AS (SELECT 10) |
+ SELECT * FROM y UNION ALL SELECT * FROM y |
+ ) |
+ SELECT * FROM x |
+ } A { |
+ # no op |
+ } |
+ set A(*) |
+} {b} |
+ |
+do_catchsql_test 17.3 { |
+ WITH i AS ( |
+ WITH j AS (SELECT 5) |
+ SELECT 5 FROM i UNION SELECT 8 FROM i |
+ ) |
+ SELECT * FROM i; |
+} {1 {circular reference: i}} |
+ |
+do_catchsql_test 17.4 { |
+ WITH i AS ( |
+ WITH j AS (SELECT 5) |
+ SELECT 5 FROM t1 UNION SELECT 8 FROM t11 |
+ ) |
+ SELECT * FROM i; |
+} {1 {no such table: t11}} |
+ |
+do_execsql_test 17.5 { |
+ WITH |
+ x1 AS (SELECT 10), |
+ x2 AS (SELECT * FROM x1), |
+ x3 AS ( |
+ WITH x1 AS (SELECT 11) |
+ SELECT * FROM x2 UNION ALL SELECT * FROM x2 |
+ ) |
+ SELECT * FROM x3; |
+} {10 10} |
+ |
+do_execsql_test 17.6 { |
+ WITH |
+ x1 AS (SELECT 10), |
+ x2 AS (SELECT * FROM x1), |
+ x3 AS ( |
+ WITH x1 AS (SELECT 11) |
+ SELECT * FROM x2 UNION ALL SELECT * FROM x1 |
+ ) |
+ SELECT * FROM x3; |
+} {10 11} |
+ |
+do_execsql_test 17.7 { |
+ WITH |
+ x1 AS (SELECT 10), |
+ x2 AS (SELECT * FROM x1), |
+ x3 AS ( |
+ WITH |
+ x1 AS ( SELECT 11 ), |
+ x4 AS ( SELECT * FROM x2 ) |
+ SELECT * FROM x4 UNION ALL SELECT * FROM x1 |
+ ) |
+ SELECT * FROM x3; |
+} {10 11} |
+ |
+do_execsql_test 17.8 { |
+ WITH |
+ x1 AS (SELECT 10), |
+ x2 AS (SELECT * FROM x1), |
+ x3 AS ( |
+ WITH |
+ x1 AS ( SELECT 11 ), |
+ x4 AS ( SELECT * FROM x2 ) |
+ SELECT * FROM x4 UNION ALL SELECT * FROM x1 |
+ ) |
+ SELECT * FROM x3; |
+} {10 11} |
+ |
+do_execsql_test 17.9 { |
+ WITH |
+ x1 AS (SELECT 10), |
+ x2 AS (SELECT 11), |
+ x3 AS ( |
+ SELECT * FROM x1 UNION ALL SELECT * FROM x2 |
+ ), |
+ x4 AS ( |
+ WITH |
+ x1 AS (SELECT 12), |
+ x2 AS (SELECT 13) |
+ SELECT * FROM x3 |
+ ) |
+ SELECT * FROM x4; |
+} {10 11} |
+ |
+# Added to test a fix to a faulty assert() discovered by libFuzzer. |
+# |
+do_execsql_test 18.1 { |
+ WITH xyz(x) AS (VALUES(NULL) UNION SELECT round(1<x) FROM xyz ORDER BY 1) |
+ SELECT quote(x) FROM xyz; |
+} {NULL} |
+do_execsql_test 18.2 { |
+ WITH xyz(x) AS ( |
+ SELECT printf('%d', 5) * NULL |
+ UNION SELECT round(1<1+x) |
+ FROM xyz ORDER BY 1 |
+ ) |
+ SELECT 1 FROM xyz; |
+} 1 |
+ |
finish_test |