1# 2008 June 24 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# This file implements regression tests for SQLite library. 12# 13# $Id: selectB.test,v 1.1 2008/07/01 14:09:14 danielk1977 Exp $ 14 15set testdir [file dirname $argv0] 16source $testdir/tester.tcl 17 18proc test_transform {testname sql1 sql2 results} { 19 set ::vdbe1 [list] 20 set ::vdbe2 [list] 21 db eval "explain $sql1" { lappend ::vdbe1 $opcode } 22 db eval "explain $sql2" { lappend ::vdbe2 $opcode } 23 24 do_test $testname.transform { 25 set ::vdbe1 26 } $::vdbe2 27 28 set ::sql1 $sql1 29 do_test $testname.sql1 { 30 execsql $::sql1 31 } $results 32 33 set ::sql2 $sql2 34 do_test $testname.sql2 { 35 execsql $::sql2 36 } $results 37} 38 39do_test selectB-1.1 { 40 execsql { 41 CREATE TABLE t1(a, b, c); 42 CREATE TABLE t2(d, e, f); 43 44 INSERT INTO t1 VALUES( 2, 4, 6); 45 INSERT INTO t1 VALUES( 8, 10, 12); 46 INSERT INTO t1 VALUES(14, 16, 18); 47 48 INSERT INTO t2 VALUES(3, 6, 9); 49 INSERT INTO t2 VALUES(12, 15, 18); 50 INSERT INTO t2 VALUES(21, 24, 27); 51 } 52} {} 53 54test_transform selectB-1.2 { 55 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 56} { 57 SELECT a FROM t1 UNION ALL SELECT d FROM t2 58} {2 8 14 3 12 21} 59 60test_transform selectB-1.3 { 61 SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1 62} { 63 SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 64} {2 3 8 12 14 21} 65 66test_transform selectB-1.4 { 67 SELECT * FROM 68 (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 69 WHERE a>10 ORDER BY 1 70} { 71 SELECT a FROM t1 WHERE a>10 UNION ALL SELECT d FROM t2 WHERE d>10 ORDER BY 1 72} {12 14 21} 73 74test_transform selectB-1.5 { 75 SELECT * FROM 76 (SELECT a FROM t1 UNION ALL SELECT d FROM t2) 77 WHERE a>10 ORDER BY a 78} { 79 SELECT a FROM t1 WHERE a>10 80 UNION ALL 81 SELECT d FROM t2 WHERE d>10 82 ORDER BY a 83} {12 14 21} 84 85test_transform selectB-1.6 { 86 SELECT * FROM 87 (SELECT a FROM t1 UNION ALL SELECT d FROM t2 WHERE d > 12) 88 WHERE a>10 ORDER BY a 89} { 90 SELECT a FROM t1 WHERE a>10 91 UNION ALL 92 SELECT d FROM t2 WHERE d>12 AND d>10 93 ORDER BY a 94} {14 21} 95 96 97finish_test 98 99