| 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 | 
|  |