Index: third_party/sqlite/src/test/select6.test |
diff --git a/third_party/sqlite/src/test/select6.test b/third_party/sqlite/src/test/select6.test |
index e0ff165c550e7b3fcb80eaeaddb8116b290970f1..64a8519d890e46712a54bf7ff3bcc90c9a7bfeca 100644 |
--- a/third_party/sqlite/src/test/select6.test |
+++ b/third_party/sqlite/src/test/select6.test |
@@ -22,6 +22,7 @@ ifcapable !subquery { |
finish_test |
return |
} |
+set ::testprefix select6 |
do_test select6-1.0 { |
execsql { |
@@ -513,5 +514,48 @@ do_test select6-9.11 { |
} {2 12 3 13 4 14} |
+#------------------------------------------------------------------------- |
+# Test that if a UNION ALL sub-query that would otherwise be eligible for |
+# flattening consists of two or more SELECT statements that do not all |
+# return the same number of result columns, the error is detected. |
+# |
+do_execsql_test 10.1 { |
+ CREATE TABLE t(i,j,k); |
+ CREATE TABLE j(l,m); |
+ CREATE TABLE k(o); |
+} |
+ |
+set err [list 1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}] |
+ |
+do_execsql_test 10.2 { |
+ SELECT * FROM (SELECT * FROM t), j; |
+} |
+do_catchsql_test 10.3 { |
+ SELECT * FROM t UNION ALL SELECT * FROM j |
+} $err |
+do_catchsql_test 10.4 { |
+ SELECT * FROM (SELECT i FROM t UNION ALL SELECT l, m FROM j) |
+} $err |
+do_catchsql_test 10.5 { |
+ SELECT * FROM (SELECT j FROM t UNION ALL SELECT * FROM j) |
+} $err |
+do_catchsql_test 10.6 { |
+ SELECT * FROM (SELECT * FROM t UNION ALL SELECT * FROM j) |
+} $err |
+do_catchsql_test 10.7 { |
+ SELECT * FROM ( |
+ SELECT * FROM t UNION ALL |
+ SELECT l,m,l FROM j UNION ALL |
+ SELECT * FROM k |
+ ) |
+} $err |
+do_catchsql_test 10.8 { |
+ SELECT * FROM ( |
+ SELECT * FROM k UNION ALL |
+ SELECT * FROM t UNION ALL |
+ SELECT l,m,l FROM j |
+ ) |
+} $err |
+ |
finish_test |