1f23329a2Sdanielk1977# 2008 June 24 2f23329a2Sdanielk1977# 3f23329a2Sdanielk1977# The author disclaims copyright to this source code. In place of 4f23329a2Sdanielk1977# a legal notice, here is a blessing: 5f23329a2Sdanielk1977# 6f23329a2Sdanielk1977# May you do good and not evil. 7f23329a2Sdanielk1977# May you find forgiveness for yourself and forgive others. 8f23329a2Sdanielk1977# May you share freely, never taking more than you give. 9f23329a2Sdanielk1977# 10f23329a2Sdanielk1977#*********************************************************************** 11f23329a2Sdanielk1977# This file implements regression tests for SQLite library. 12f23329a2Sdanielk1977# 13e8902a70Sdrh# $Id: selectB.test,v 1.10 2009/04/02 16:59:47 drh Exp $ 14f23329a2Sdanielk1977 15f23329a2Sdanielk1977set testdir [file dirname $argv0] 16f23329a2Sdanielk1977source $testdir/tester.tcl 17f23329a2Sdanielk1977 18de3e41e3Sdanielk1977ifcapable !compound { 19de3e41e3Sdanielk1977 finish_test 20de3e41e3Sdanielk1977 return 21de3e41e3Sdanielk1977} 22de3e41e3Sdanielk1977 23f23329a2Sdanielk1977proc test_transform {testname sql1 sql2 results} { 24f23329a2Sdanielk1977 set ::vdbe1 [list] 25f23329a2Sdanielk1977 set ::vdbe2 [list] 26f23329a2Sdanielk1977 db eval "explain $sql1" { lappend ::vdbe1 $opcode } 27f23329a2Sdanielk1977 db eval "explain $sql2" { lappend ::vdbe2 $opcode } 28f23329a2Sdanielk1977 29f23329a2Sdanielk1977 do_test $testname.transform { 30f23329a2Sdanielk1977 set ::vdbe1 31f23329a2Sdanielk1977 } $::vdbe2 32f23329a2Sdanielk1977 33f23329a2Sdanielk1977 set ::sql1 $sql1 34f23329a2Sdanielk1977 do_test $testname.sql1 { 35f23329a2Sdanielk1977 execsql $::sql1 36f23329a2Sdanielk1977 } $results 37f23329a2Sdanielk1977 38f23329a2Sdanielk1977 set ::sql2 $sql2 39f23329a2Sdanielk1977 do_test $testname.sql2 { 40f23329a2Sdanielk1977 execsql $::sql2 41f23329a2Sdanielk1977 } $results 42f23329a2Sdanielk1977} 43f23329a2Sdanielk1977 44f23329a2Sdanielk1977do_test selectB-1.1 { 45f23329a2Sdanielk1977 execsql { 46f23329a2Sdanielk1977 CREATE TABLE t1(a, b, c); 47f23329a2Sdanielk1977 CREATE TABLE t2(d, e, f); 48f23329a2Sdanielk1977 49f23329a2Sdanielk1977 INSERT INTO t1 VALUES( 2, 4, 6); 50f23329a2Sdanielk1977 INSERT INTO t1 VALUES( 8, 10, 12); 51f23329a2Sdanielk1977 INSERT INTO t1 VALUES(14, 16, 18); 52f23329a2Sdanielk1977 53f23329a2Sdanielk1977 INSERT INTO t2 VALUES(3, 6, 9); 54f23329a2Sdanielk1977 INSERT INTO t2 VALUES(12, 15, 18); 55f23329a2Sdanielk1977 INSERT INTO t2 VALUES(21, 24, 27); 56f23329a2Sdanielk1977 } 57f23329a2Sdanielk1977} {} 58f23329a2Sdanielk1977 59eca7e01aSdanielk1977for {set ii 1} {$ii <= 2} {incr ii} { 60eca7e01aSdanielk1977 61eca7e01aSdanielk1977 if {$ii == 2} { 62eca7e01aSdanielk1977 do_test selectB-2.1 { 63eca7e01aSdanielk1977 execsql { 64eca7e01aSdanielk1977 CREATE INDEX i1 ON t1(a); 65eca7e01aSdanielk1977 CREATE INDEX i2 ON t2(d); 66eca7e01aSdanielk1977 } 67eca7e01aSdanielk1977 } {} 68eca7e01aSdanielk1977 } 69eca7e01aSdanielk1977 70eca7e01aSdanielk1977 test_transform selectB-$ii.2 { 71f23329a2Sdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 72f23329a2Sdanielk1977 } { 73f23329a2Sdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 74f23329a2Sdanielk1977 } {2 8 14 3 12 21} 75f23329a2Sdanielk1977 76eca7e01aSdanielk1977 test_transform selectB-$ii.3 { 77f23329a2Sdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1 78f23329a2Sdanielk1977 } { 79f23329a2Sdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 80f23329a2Sdanielk1977 } {2 3 8 12 14 21} 81f23329a2Sdanielk1977 82eca7e01aSdanielk1977 test_transform selectB-$ii.4 { 83f23329a2Sdanielk1977 SELECT * FROM 84f23329a2Sdanielk1977 (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 85f23329a2Sdanielk1977 WHERE a>10 ORDER BY 1 86f23329a2Sdanielk1977 } { 87f23329a2Sdanielk1977 SELECT a FROM t1 WHERE a>10 UNION ALL SELECT d FROM t2 WHERE d>10 ORDER BY 1 88f23329a2Sdanielk1977 } {12 14 21} 89f23329a2Sdanielk1977 90eca7e01aSdanielk1977 test_transform selectB-$ii.5 { 91f23329a2Sdanielk1977 SELECT * FROM 92f23329a2Sdanielk1977 (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 93f23329a2Sdanielk1977 WHERE a>10 ORDER BY a 94f23329a2Sdanielk1977 } { 95f23329a2Sdanielk1977 SELECT a FROM t1 WHERE a>10 96f23329a2Sdanielk1977 UNION ALL 97f23329a2Sdanielk1977 SELECT d FROM t2 WHERE d>10 98f23329a2Sdanielk1977 ORDER BY a 99f23329a2Sdanielk1977 } {12 14 21} 100f23329a2Sdanielk1977 101eca7e01aSdanielk1977 test_transform selectB-$ii.6 { 102f23329a2Sdanielk1977 SELECT * FROM 103f23329a2Sdanielk1977 (SELECT a FROM t1 UNION ALL SELECT d FROM t2 WHERE d > 12) 104f23329a2Sdanielk1977 WHERE a>10 ORDER BY a 105f23329a2Sdanielk1977 } { 106f23329a2Sdanielk1977 SELECT a FROM t1 WHERE a>10 107f23329a2Sdanielk1977 UNION ALL 108f23329a2Sdanielk1977 SELECT d FROM t2 WHERE d>12 AND d>10 109f23329a2Sdanielk1977 ORDER BY a 110f23329a2Sdanielk1977 } {14 21} 111f23329a2Sdanielk1977 112eca7e01aSdanielk1977 test_transform selectB-$ii.7 { 113eca7e01aSdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1 114eca7e01aSdanielk1977 LIMIT 2 1154b86ef1dSdanielk1977 } { 1164b86ef1dSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 LIMIT 2 1174b86ef1dSdanielk1977 } {2 3} 1184b86ef1dSdanielk1977 119eca7e01aSdanielk1977 test_transform selectB-$ii.8 { 1204b86ef1dSdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1 1214b86ef1dSdanielk1977 LIMIT 2 OFFSET 3 1224b86ef1dSdanielk1977 } { 1234b86ef1dSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 LIMIT 2 OFFSET 3 1244b86ef1dSdanielk1977 } {12 14} 1254b86ef1dSdanielk1977 126eca7e01aSdanielk1977 test_transform selectB-$ii.9 { 127eca7e01aSdanielk1977 SELECT * FROM ( 128eca7e01aSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1 129eca7e01aSdanielk1977 ) 130eca7e01aSdanielk1977 } { 131eca7e01aSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1 132eca7e01aSdanielk1977 } {2 8 14 3 12 21 6 12 18} 133eca7e01aSdanielk1977 134eca7e01aSdanielk1977 test_transform selectB-$ii.10 { 135eca7e01aSdanielk1977 SELECT * FROM ( 136eca7e01aSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1 137eca7e01aSdanielk1977 ) ORDER BY 1 138eca7e01aSdanielk1977 } { 139eca7e01aSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1 140eca7e01aSdanielk1977 ORDER BY 1 141eca7e01aSdanielk1977 } {2 3 6 8 12 12 14 18 21} 142eca7e01aSdanielk1977 143eca7e01aSdanielk1977 test_transform selectB-$ii.11 { 144eca7e01aSdanielk1977 SELECT * FROM ( 145eca7e01aSdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1 146eca7e01aSdanielk1977 ) WHERE a>=10 ORDER BY 1 LIMIT 3 147eca7e01aSdanielk1977 } { 148eca7e01aSdanielk1977 SELECT a FROM t1 WHERE a>=10 UNION ALL SELECT d FROM t2 WHERE d>=10 149eca7e01aSdanielk1977 UNION ALL SELECT c FROM t1 WHERE c>=10 150eca7e01aSdanielk1977 ORDER BY 1 LIMIT 3 151eca7e01aSdanielk1977 } {12 12 14} 1524914cf92Sdanielk1977 1534914cf92Sdanielk1977 test_transform selectB-$ii.12 { 1544914cf92Sdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 2) 1554914cf92Sdanielk1977 } { 1564914cf92Sdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 2 1574914cf92Sdanielk1977 } {2 8} 1584914cf92Sdanielk1977 159e8902a70Sdrh # An ORDER BY in a compound subqueries defeats flattening. Ticket #3773 160e8902a70Sdrh # test_transform selectB-$ii.13 { 161e8902a70Sdrh # SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a ASC) 162e8902a70Sdrh # } { 163e8902a70Sdrh # SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 ASC 164e8902a70Sdrh # } {2 3 8 12 14 21} 165e8902a70Sdrh # 166e8902a70Sdrh # test_transform selectB-$ii.14 { 167e8902a70Sdrh # SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a DESC) 168e8902a70Sdrh # } { 169e8902a70Sdrh # SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 DESC 170e8902a70Sdrh # } {21 14 12 8 3 2} 171e8902a70Sdrh # 172e8902a70Sdrh # test_transform selectB-$ii.14 { 173e8902a70Sdrh # SELECT * FROM ( 174e8902a70Sdrh # SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a DESC 175e8902a70Sdrh # ) LIMIT 2 OFFSET 2 176e8902a70Sdrh # } { 177e8902a70Sdrh # SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 DESC 178e8902a70Sdrh # LIMIT 2 OFFSET 2 179e8902a70Sdrh # } {12 8} 180e8902a70Sdrh # 181e8902a70Sdrh # test_transform selectB-$ii.15 { 182e8902a70Sdrh # SELECT * FROM ( 183e8902a70Sdrh # SELECT a, b FROM t1 UNION ALL SELECT d, e FROM t2 ORDER BY a ASC, e DESC 184e8902a70Sdrh # ) 185e8902a70Sdrh # } { 186e8902a70Sdrh # SELECT a, b FROM t1 UNION ALL SELECT d, e FROM t2 ORDER BY a ASC, e DESC 187e8902a70Sdrh # } {2 4 3 6 8 10 12 15 14 16 21 24} 188eca7e01aSdanielk1977} 189eca7e01aSdanielk1977 1905e7ad508Sdanielk1977do_test selectB-3.0 { 1915e7ad508Sdanielk1977 execsql { 1925e7ad508Sdanielk1977 DROP INDEX i1; 1935e7ad508Sdanielk1977 DROP INDEX i2; 1945e7ad508Sdanielk1977 } 1955e7ad508Sdanielk1977} {} 196eca7e01aSdanielk1977 197*4b3ac73cSdrhfor {set ii 3} {$ii <= 6} {incr ii} { 1985e7ad508Sdanielk1977 199*4b3ac73cSdrh switch $ii { 200*4b3ac73cSdrh 4 { 201*4b3ac73cSdrh optimization_control db query-flattener off 202*4b3ac73cSdrh } 203*4b3ac73cSdrh 5 { 204*4b3ac73cSdrh optimization_control db query-flattener on 205*4b3ac73cSdrh do_test selectB-5.0 { 2065e7ad508Sdanielk1977 execsql { 2075e7ad508Sdanielk1977 CREATE INDEX i1 ON t1(a); 2085e7ad508Sdanielk1977 CREATE INDEX i2 ON t1(b); 2095e7ad508Sdanielk1977 CREATE INDEX i3 ON t1(c); 2105e7ad508Sdanielk1977 CREATE INDEX i4 ON t2(d); 2115e7ad508Sdanielk1977 CREATE INDEX i5 ON t2(e); 2125e7ad508Sdanielk1977 CREATE INDEX i6 ON t2(f); 2135e7ad508Sdanielk1977 } 2145e7ad508Sdanielk1977 } {} 2155e7ad508Sdanielk1977 } 216*4b3ac73cSdrh 6 { 217*4b3ac73cSdrh optimization_control db query-flattener off 218*4b3ac73cSdrh } 219*4b3ac73cSdrh } 2205e7ad508Sdanielk1977 2215e7ad508Sdanielk1977 do_test selectB-$ii.1 { 222eca7e01aSdanielk1977 execsql { 223eca7e01aSdanielk1977 SELECT DISTINCT * FROM 224eca7e01aSdanielk1977 (SELECT c FROM t1 UNION ALL SELECT e FROM t2) 225eca7e01aSdanielk1977 ORDER BY 1; 226eca7e01aSdanielk1977 } 227eca7e01aSdanielk1977 } {6 12 15 18 24} 228eca7e01aSdanielk1977 2295e7ad508Sdanielk1977 do_test selectB-$ii.2 { 230eca7e01aSdanielk1977 execsql { 231eca7e01aSdanielk1977 SELECT c, count(*) FROM 232eca7e01aSdanielk1977 (SELECT c FROM t1 UNION ALL SELECT e FROM t2) 233eca7e01aSdanielk1977 GROUP BY c ORDER BY 1; 234eca7e01aSdanielk1977 } 235eca7e01aSdanielk1977 } {6 2 12 1 15 1 18 1 24 1} 2365e7ad508Sdanielk1977 do_test selectB-$ii.3 { 237eca7e01aSdanielk1977 execsql { 238eca7e01aSdanielk1977 SELECT c, count(*) FROM 239eca7e01aSdanielk1977 (SELECT c FROM t1 UNION ALL SELECT e FROM t2) 240eca7e01aSdanielk1977 GROUP BY c HAVING count(*)>1; 241eca7e01aSdanielk1977 } 242eca7e01aSdanielk1977 } {6 2} 2435e7ad508Sdanielk1977 do_test selectB-$ii.4 { 244eca7e01aSdanielk1977 execsql { 245eca7e01aSdanielk1977 SELECT t4.c, t3.a FROM 246eca7e01aSdanielk1977 (SELECT c FROM t1 UNION ALL SELECT e FROM t2) AS t4, t1 AS t3 247eca7e01aSdanielk1977 WHERE t3.a=14 248eca7e01aSdanielk1977 ORDER BY 1 249eca7e01aSdanielk1977 } 250eca7e01aSdanielk1977 } {6 14 6 14 12 14 15 14 18 14 24 14} 251eca7e01aSdanielk1977 2525e7ad508Sdanielk1977 do_test selectB-$ii.5 { 253eca7e01aSdanielk1977 execsql { 254eca7e01aSdanielk1977 SELECT d FROM t2 255eca7e01aSdanielk1977 EXCEPT 256eca7e01aSdanielk1977 SELECT a FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 257eca7e01aSdanielk1977 } 258eca7e01aSdanielk1977 } {} 2595e7ad508Sdanielk1977 do_test selectB-$ii.6 { 260eca7e01aSdanielk1977 execsql { 261eca7e01aSdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 262eca7e01aSdanielk1977 EXCEPT 263eca7e01aSdanielk1977 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 264eca7e01aSdanielk1977 } 265eca7e01aSdanielk1977 } {} 2665e7ad508Sdanielk1977 do_test selectB-$ii.7 { 2675e7ad508Sdanielk1977 execsql { 2685e7ad508Sdanielk1977 SELECT c FROM t1 2695e7ad508Sdanielk1977 EXCEPT 2705e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 2715e7ad508Sdanielk1977 } 2725e7ad508Sdanielk1977 } {12} 2735e7ad508Sdanielk1977 do_test selectB-$ii.8 { 2745e7ad508Sdanielk1977 execsql { 2755e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 2765e7ad508Sdanielk1977 EXCEPT 2775e7ad508Sdanielk1977 SELECT c FROM t1 2785e7ad508Sdanielk1977 } 2795e7ad508Sdanielk1977 } {9 15 24 27} 2805e7ad508Sdanielk1977 do_test selectB-$ii.9 { 2815e7ad508Sdanielk1977 execsql { 2825e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 2835e7ad508Sdanielk1977 EXCEPT 2845e7ad508Sdanielk1977 SELECT c FROM t1 2855e7ad508Sdanielk1977 ORDER BY c DESC 2865e7ad508Sdanielk1977 } 2875e7ad508Sdanielk1977 } {27 24 15 9} 2885e7ad508Sdanielk1977 2895e7ad508Sdanielk1977 do_test selectB-$ii.10 { 2905e7ad508Sdanielk1977 execsql { 2915e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 2925e7ad508Sdanielk1977 UNION 2935e7ad508Sdanielk1977 SELECT c FROM t1 2945e7ad508Sdanielk1977 ORDER BY c DESC 2955e7ad508Sdanielk1977 } 2965e7ad508Sdanielk1977 } {27 24 18 15 12 9 6} 2975e7ad508Sdanielk1977 do_test selectB-$ii.11 { 2985e7ad508Sdanielk1977 execsql { 2995e7ad508Sdanielk1977 SELECT c FROM t1 3005e7ad508Sdanielk1977 UNION 3015e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3025e7ad508Sdanielk1977 ORDER BY c 3035e7ad508Sdanielk1977 } 3045e7ad508Sdanielk1977 } {6 9 12 15 18 24 27} 3055e7ad508Sdanielk1977 do_test selectB-$ii.12 { 3065e7ad508Sdanielk1977 execsql { 3075e7ad508Sdanielk1977 SELECT c FROM t1 UNION SELECT e FROM t2 UNION ALL SELECT f FROM t2 3085e7ad508Sdanielk1977 ORDER BY c 3095e7ad508Sdanielk1977 } 3105e7ad508Sdanielk1977 } {6 9 12 15 18 18 24 27} 3115e7ad508Sdanielk1977 do_test selectB-$ii.13 { 3125e7ad508Sdanielk1977 execsql { 3135e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3145e7ad508Sdanielk1977 UNION 3155e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3165e7ad508Sdanielk1977 ORDER BY 1 3175e7ad508Sdanielk1977 } 3185e7ad508Sdanielk1977 } {6 9 15 18 24 27} 3195e7ad508Sdanielk1977 3205e7ad508Sdanielk1977 do_test selectB-$ii.14 { 3215e7ad508Sdanielk1977 execsql { 3225e7ad508Sdanielk1977 SELECT c FROM t1 3235e7ad508Sdanielk1977 INTERSECT 3245e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3255e7ad508Sdanielk1977 ORDER BY 1 3265e7ad508Sdanielk1977 } 3275e7ad508Sdanielk1977 } {6 18} 3285e7ad508Sdanielk1977 do_test selectB-$ii.15 { 3295e7ad508Sdanielk1977 execsql { 3305e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3315e7ad508Sdanielk1977 INTERSECT 3325e7ad508Sdanielk1977 SELECT c FROM t1 3335e7ad508Sdanielk1977 ORDER BY 1 3345e7ad508Sdanielk1977 } 3355e7ad508Sdanielk1977 } {6 18} 3365e7ad508Sdanielk1977 do_test selectB-$ii.16 { 3375e7ad508Sdanielk1977 execsql { 3385e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3395e7ad508Sdanielk1977 INTERSECT 3405e7ad508Sdanielk1977 SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2) 3415e7ad508Sdanielk1977 ORDER BY 1 3425e7ad508Sdanielk1977 } 3435e7ad508Sdanielk1977 } {6 9 15 18 24 27} 3444914cf92Sdanielk1977 3454914cf92Sdanielk1977 do_test selectB-$ii.17 { 3464914cf92Sdanielk1977 execsql { 3474914cf92Sdanielk1977 SELECT * FROM ( 3484914cf92Sdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4 3494914cf92Sdanielk1977 ) LIMIT 2 3504914cf92Sdanielk1977 } 3514914cf92Sdanielk1977 } {2 8} 3524914cf92Sdanielk1977 3534914cf92Sdanielk1977 do_test selectB-$ii.18 { 3544914cf92Sdanielk1977 execsql { 3554914cf92Sdanielk1977 SELECT * FROM ( 3564914cf92Sdanielk1977 SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4 OFFSET 2 3574914cf92Sdanielk1977 ) LIMIT 2 3584914cf92Sdanielk1977 } 3594914cf92Sdanielk1977 } {14 3} 3604914cf92Sdanielk1977 3614914cf92Sdanielk1977 do_test selectB-$ii.19 { 3624914cf92Sdanielk1977 execsql { 3634914cf92Sdanielk1977 SELECT * FROM ( 3644914cf92Sdanielk1977 SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2 3654914cf92Sdanielk1977 ) 3664914cf92Sdanielk1977 } 36738cc40c2Sdan } {0 1 1 0} 3684914cf92Sdanielk1977 3694914cf92Sdanielk1977 do_test selectB-$ii.20 { 3704914cf92Sdanielk1977 execsql { 3714914cf92Sdanielk1977 SELECT DISTINCT * FROM ( 3724914cf92Sdanielk1977 SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2 3734914cf92Sdanielk1977 ) 3744914cf92Sdanielk1977 } 3754914cf92Sdanielk1977 } {0 1} 37649fc1f60Sdanielk1977 37749fc1f60Sdanielk1977 do_test selectB-$ii.21 { 37849fc1f60Sdanielk1977 execsql { 37949fc1f60Sdanielk1977 SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2) ORDER BY a+b 38049fc1f60Sdanielk1977 } 38149fc1f60Sdanielk1977 } {2 4 6 3 6 9 8 10 12 12 15 18 14 16 18 21 24 27} 38280b3c548Sdanielk1977 383*4b3ac73cSdrh do_test selectB-$ii.22 { 38480b3c548Sdanielk1977 execsql { 38580b3c548Sdanielk1977 SELECT * FROM (SELECT 345 UNION ALL SELECT d FROM t2) ORDER BY 1; 38680b3c548Sdanielk1977 } 38780b3c548Sdanielk1977 } {3 12 21 345} 388*4b3ac73cSdrh 389*4b3ac73cSdrh do_test selectB-$ii.23 { 390*4b3ac73cSdrh execsql { 391*4b3ac73cSdrh SELECT x, y FROM ( 392*4b3ac73cSdrh SELECT a AS x, b AS y FROM t1 393*4b3ac73cSdrh UNION ALL 394*4b3ac73cSdrh SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 JOIN t2 ON (c=d) 395*4b3ac73cSdrh UNION ALL 396*4b3ac73cSdrh SELECT a*100, b*100 FROM t1 397*4b3ac73cSdrh ) ORDER BY 1; 398*4b3ac73cSdrh } 399*4b3ac73cSdrh } {2 4 8 10 14 16 80.1 180.1 200 400 800 1000 1400 1600} 400*4b3ac73cSdrh 401*4b3ac73cSdrh do_test selectB-$ii.24 { 402*4b3ac73cSdrh execsql { 403*4b3ac73cSdrh SELECT x, y FROM ( 404*4b3ac73cSdrh SELECT a AS x, b AS y FROM t1 405*4b3ac73cSdrh UNION ALL 406*4b3ac73cSdrh SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d) 407*4b3ac73cSdrh UNION ALL 408*4b3ac73cSdrh SELECT a*100, b*100 FROM t1 409*4b3ac73cSdrh ) ORDER BY 1; 410*4b3ac73cSdrh } 411*4b3ac73cSdrh } {2 4 8 10 14 16 20.1 {} 80.1 180.1 140.1 {} 200 400 800 1000 1400 1600} 412*4b3ac73cSdrh 413*4b3ac73cSdrh do_test selectB-$ii.25 { 414*4b3ac73cSdrh execsql { 415*4b3ac73cSdrh SELECT x+y FROM ( 416*4b3ac73cSdrh SELECT a AS x, b AS y FROM t1 417*4b3ac73cSdrh UNION ALL 418*4b3ac73cSdrh SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d) 419*4b3ac73cSdrh UNION ALL 420*4b3ac73cSdrh SELECT a*100, b*100 FROM t1 421*4b3ac73cSdrh ) WHERE y+x NOT NULL ORDER BY 1; 422*4b3ac73cSdrh } 423*4b3ac73cSdrh } {6 18 30 260.2 600 1800 3000} 4245e7ad508Sdanielk1977} 425f23329a2Sdanielk1977 426f23329a2Sdanielk1977finish_test 427