12ffb1185Sdrh# 2002 May 24 22ffb1185Sdrh# 32ffb1185Sdrh# The author disclaims copyright to this source code. In place of 42ffb1185Sdrh# a legal notice, here is a blessing: 52ffb1185Sdrh# 62ffb1185Sdrh# May you do good and not evil. 72ffb1185Sdrh# May you find forgiveness for yourself and forgive others. 82ffb1185Sdrh# May you share freely, never taking more than you give. 92ffb1185Sdrh# 102ffb1185Sdrh#*********************************************************************** 112ffb1185Sdrh# This file implements regression tests for SQLite library. 122ffb1185Sdrh# 132ffb1185Sdrh# This file implements tests for left outer joins containing WHERE 142ffb1185Sdrh# clauses that restrict the scope of the left term of the join. 152ffb1185Sdrh# 16*53c0f748Sdanielk1977# $Id: join4.test,v 1.4 2005/03/29 03:11:00 danielk1977 Exp $ 172ffb1185Sdrh 182ffb1185Sdrhset testdir [file dirname $argv0] 192ffb1185Sdrhsource $testdir/tester.tcl 202ffb1185Sdrh 21*53c0f748Sdanielk1977ifcapable tempdb { 222ffb1185Sdrh do_test join4-1.1 { 232ffb1185Sdrh execsql { 242ffb1185Sdrh create temp table t1(a integer, b varchar(10)); 252ffb1185Sdrh insert into t1 values(1,'one'); 262ffb1185Sdrh insert into t1 values(2,'two'); 272ffb1185Sdrh insert into t1 values(3,'three'); 282ffb1185Sdrh insert into t1 values(4,'four'); 292ffb1185Sdrh 302ffb1185Sdrh create temp table t2(x integer, y varchar(10), z varchar(10)); 312ffb1185Sdrh insert into t2 values(2,'niban','ok'); 322ffb1185Sdrh insert into t2 values(4,'yonban','err'); 332ffb1185Sdrh } 342ffb1185Sdrh execsql { 352ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x where t2.z='ok' 362ffb1185Sdrh } 372ffb1185Sdrh } {2 two 2 niban ok} 38*53c0f748Sdanielk1977} else { 39*53c0f748Sdanielk1977 do_test join4-1.1 { 40*53c0f748Sdanielk1977 execsql { 41*53c0f748Sdanielk1977 create table t1(a integer, b varchar(10)); 42*53c0f748Sdanielk1977 insert into t1 values(1,'one'); 43*53c0f748Sdanielk1977 insert into t1 values(2,'two'); 44*53c0f748Sdanielk1977 insert into t1 values(3,'three'); 45*53c0f748Sdanielk1977 insert into t1 values(4,'four'); 46*53c0f748Sdanielk1977 47*53c0f748Sdanielk1977 create table t2(x integer, y varchar(10), z varchar(10)); 48*53c0f748Sdanielk1977 insert into t2 values(2,'niban','ok'); 49*53c0f748Sdanielk1977 insert into t2 values(4,'yonban','err'); 50*53c0f748Sdanielk1977 } 51*53c0f748Sdanielk1977 execsql { 52*53c0f748Sdanielk1977 select * from t1 left outer join t2 on t1.a=t2.x where t2.z='ok' 53*53c0f748Sdanielk1977 } 54*53c0f748Sdanielk1977 } {2 two 2 niban ok} 55*53c0f748Sdanielk1977} 562ffb1185Sdrhdo_test join4-1.2 { 572ffb1185Sdrh execsql { 582ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x and t2.z='ok' 592ffb1185Sdrh } 602ffb1185Sdrh} {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}} 612ffb1185Sdrhdo_test join4-1.3 { 622ffb1185Sdrh execsql { 632ffb1185Sdrh create index i2 on t2(z); 642ffb1185Sdrh } 652ffb1185Sdrh execsql { 662ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x where t2.z='ok' 672ffb1185Sdrh } 682ffb1185Sdrh} {2 two 2 niban ok} 692ffb1185Sdrhdo_test join4-1.4 { 702ffb1185Sdrh execsql { 712ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x and t2.z='ok' 722ffb1185Sdrh } 732ffb1185Sdrh} {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}} 742ffb1185Sdrhdo_test join4-1.5 { 752ffb1185Sdrh execsql { 762ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x where t2.z>='ok' 772ffb1185Sdrh } 782ffb1185Sdrh} {2 two 2 niban ok} 792ffb1185Sdrhdo_test join4-1.4 { 802ffb1185Sdrh execsql { 812ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x and t2.z>='ok' 822ffb1185Sdrh } 832ffb1185Sdrh} {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}} 843e8c37e7Sdanielk1977ifcapable subquery { 852ffb1185Sdrh do_test join4-1.6 { 862ffb1185Sdrh execsql { 872ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x where t2.z IN ('ok') 882ffb1185Sdrh } 892ffb1185Sdrh } {2 two 2 niban ok} 902ffb1185Sdrh do_test join4-1.7 { 912ffb1185Sdrh execsql { 922ffb1185Sdrh select * from t1 left outer join t2 on t1.a=t2.x and t2.z IN ('ok') 932ffb1185Sdrh } 942ffb1185Sdrh } {1 one {} {} {} 2 two 2 niban ok 3 three {} {} {} 4 four {} {} {}} 953e8c37e7Sdanielk1977} 962ffb1185Sdrh 972ffb1185Sdrh 982ffb1185Sdrhfinish_test 99