Index: third_party/sqlite/src/test/selectA.test |
diff --git a/third_party/sqlite/src/test/selectA.test b/third_party/sqlite/src/test/selectA.test |
index 5b8637784b5391e61fdd5150fe6c6e31183c1bfb..6e593e8e22b400d54fc944b868a141a701b05513 100644 |
--- a/third_party/sqlite/src/test/selectA.test |
+++ b/third_party/sqlite/src/test/selectA.test |
@@ -21,6 +21,7 @@ |
set testdir [file dirname $argv0] |
source $testdir/tester.tcl |
+set testprefix selectA |
ifcapable !compound { |
finish_test |
@@ -281,13 +282,13 @@ do_test selectA-2.34 { |
do_test selectA-2.35 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY b COLLATE NOCASE,a,c |
+ ORDER BY y COLLATE NOCASE,x,z |
} |
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z} |
do_test selectA-2.36 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY b COLLATE NOCASE DESC,a,c |
+ ORDER BY y COLLATE NOCASE DESC,x,z |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} |
do_test selectA-2.37 { |
@@ -311,7 +312,7 @@ do_test selectA-2.39 { |
do_test selectA-2.40 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY c COLLATE BINARY DESC,a,b |
+ ORDER BY z COLLATE BINARY DESC,x,y |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B} |
do_test selectA-2.41 { |
@@ -602,7 +603,7 @@ do_test selectA-2.85 { |
do_test selectA-2.86 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 |
- ORDER BY b COLLATE NOCASE,a,c |
+ ORDER BY y COLLATE NOCASE,x,z |
} |
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z} |
do_test selectA-2.87 { |
@@ -632,7 +633,7 @@ do_test selectA-2.90 { |
do_test selectA-2.91 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 |
- ORDER BY c COLLATE BINARY DESC,a,b |
+ ORDER BY z COLLATE BINARY DESC,x,y |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B} |
do_test selectA-2.92 { |
@@ -893,13 +894,13 @@ do_test selectA-3.34 { |
do_test selectA-3.35 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY b COLLATE NOCASE,a,c |
+ ORDER BY y COLLATE NOCASE,x,z |
} |
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z} |
do_test selectA-3.36 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY b COLLATE NOCASE DESC,a,c |
+ ORDER BY y COLLATE NOCASE DESC,x,z |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a} |
do_test selectA-3.37 { |
@@ -923,7 +924,7 @@ do_test selectA-3.39 { |
do_test selectA-3.40 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1 |
- ORDER BY c COLLATE BINARY DESC,a,b |
+ ORDER BY z COLLATE BINARY DESC,x,y |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B} |
do_test selectA-3.41 { |
@@ -1214,7 +1215,7 @@ do_test selectA-3.85 { |
do_test selectA-3.86 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 |
- ORDER BY b COLLATE NOCASE,a,c |
+ ORDER BY y COLLATE NOCASE,x,z |
} |
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z} |
do_test selectA-3.87 { |
@@ -1244,7 +1245,7 @@ do_test selectA-3.90 { |
do_test selectA-3.91 { |
execsql { |
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3 |
- ORDER BY c COLLATE BINARY DESC,a,b |
+ ORDER BY z COLLATE BINARY DESC,x,y |
} |
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B} |
do_test selectA-3.92 { |
@@ -1292,5 +1293,86 @@ do_test selectA-3.97 { |
ORDER BY y COLLATE NOCASE DESC,x,z))) |
} |
} {MAD} |
+do_execsql_test selectA-3.98 { |
+ WITH RECURSIVE |
+ xyz(n) AS ( |
+ SELECT upper((SELECT x FROM ( |
+ SELECT x,y,z FROM t2 |
+ INTERSECT SELECT a,b,c FROM t3 |
+ EXCEPT SELECT c,b,a FROM t1 |
+ UNION SELECT a,b,c FROM t3 |
+ INTERSECT SELECT a,b,c FROM t3 |
+ EXCEPT SELECT c,b,a FROM t1 |
+ UNION SELECT a,b,c FROM t3 |
+ ORDER BY y COLLATE NOCASE DESC,x,z))) |
+ UNION ALL |
+ SELECT n || '+' FROM xyz WHERE length(n)<5 |
+ ) |
+ SELECT n FROM xyz ORDER BY +n; |
+} {MAD MAD+ MAD++} |
+ |
+#------------------------------------------------------------------------- |
+# At one point the following code exposed a temp register reuse problem. |
+# |
+proc f {args} { return 1 } |
+db func f f |
+ |
+do_execsql_test 4.1.1 { |
+ CREATE TABLE t4(a, b); |
+ CREATE TABLE t5(c, d); |
+ |
+ INSERT INTO t5 VALUES(1, 'x'); |
+ INSERT INTO t5 VALUES(2, 'x'); |
+ INSERT INTO t4 VALUES(3, 'x'); |
+ INSERT INTO t4 VALUES(4, 'x'); |
+ |
+ CREATE INDEX i1 ON t4(a); |
+ CREATE INDEX i2 ON t5(c); |
+} |
+ |
+do_eqp_test 4.1.2 { |
+ SELECT c, d FROM t5 |
+ UNION ALL |
+ SELECT a, b FROM t4 WHERE f()==f() |
+ ORDER BY 1,2 |
+} { |
+ 1 0 0 {SCAN TABLE t5 USING INDEX i2} |
+ 1 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY} |
+ 2 0 0 {SCAN TABLE t4 USING INDEX i1} |
+ 2 0 0 {USE TEMP B-TREE FOR RIGHT PART OF ORDER BY} |
+ 0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (UNION ALL)} |
+} |
+ |
+do_execsql_test 4.1.3 { |
+ SELECT c, d FROM t5 |
+ UNION ALL |
+ SELECT a, b FROM t4 WHERE f()==f() |
+ ORDER BY 1,2 |
+} { |
+ 1 x 2 x 3 x 4 x |
+} |
+ |
+do_execsql_test 4.2.1 { |
+ CREATE TABLE t6(a, b); |
+ CREATE TABLE t7(c, d); |
+ |
+ INSERT INTO t7 VALUES(2, 9); |
+ INSERT INTO t6 VALUES(3, 0); |
+ INSERT INTO t6 VALUES(4, 1); |
+ INSERT INTO t7 VALUES(5, 6); |
+ INSERT INTO t6 VALUES(6, 0); |
+ INSERT INTO t7 VALUES(7, 6); |
+ |
+ CREATE INDEX i6 ON t6(a); |
+ CREATE INDEX i7 ON t7(c); |
+} |
+ |
+do_execsql_test 4.2.2 { |
+ SELECT c, f(d,c,d,c,d) FROM t7 |
+ UNION ALL |
+ SELECT a, b FROM t6 |
+ ORDER BY 1,2 |
+} {/2 . 3 . 4 . 5 . 6 . 7 ./} |
+ |
finish_test |