3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.
13 # This file implements tests for N-way joins (N>2) which make
14 # use of USING or NATURAL JOIN. For such joins, the USING and
15 # NATURAL JOIN processing needs to search all tables to the left
16 # of the join looking for a match. See ticket [f74beaabde]
17 # for additional information.
20 set testdir [file dirname $argv0]
21 source $testdir/tester.tcl
24 # The problem as initially reported on the mailing list:
31 INSERT INTO t1 VALUES(1);
32 INSERT INTO t3 VALUES(1,2);
34 SELECT * FROM t1 LEFT JOIN t2 USING(a) LEFT JOIN t3 USING(a);
40 FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.a=t3.a;
46 FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t1.a=t3.a;
61 INSERT INTO t1 VALUES(1,2);
62 INSERT INTO t1 VALUES(3,4);
64 INSERT INTO t2 VALUES(2,3);
65 INSERT INTO t2 VALUES(4,5);
67 INSERT INTO t3 VALUES(1,3);
68 INSERT INTO t3 VALUES(3,5);
70 SELECT * FROM t1 JOIN t2 USING (y) JOIN t3 USING(x);
75 SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3;
86 CREATE TABLE t1(a,x,y);
87 INSERT INTO t1 VALUES(1,91,92);
88 INSERT INTO t1 VALUES(2,93,94);
90 CREATE TABLE t2(b,y,z);
91 INSERT INTO t2 VALUES(3,92,93);
92 INSERT INTO t2 VALUES(4,94,95);
94 CREATE TABLE t3(c,x,z);
95 INSERT INTO t3 VALUES(5,91,93);
96 INSERT INTO t3 VALUES(6,99,95);
98 SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3;
103 SELECT * FROM t1 JOIN t2 NATURAL JOIN t3;
105 } {1 91 92 3 92 93 5}
108 SELECT * FROM t1 JOIN t2 USING(y) NATURAL JOIN t3;
113 SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x,z);
118 SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x);
120 } {1 91 92 3 93 5 93}
123 SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(z);
125 } {1 91 92 3 93 5 91 2 93 94 4 95 6 99}
131 (SELECT 1 AS a, 91 AS x, 92 AS y UNION SELECT 2, 93, 94)
132 NATURAL JOIN t2 NATURAL JOIN t3
137 SELECT * FROM t1 NATURAL JOIN
138 (SELECT 3 AS b, 92 AS y, 93 AS z UNION SELECT 4, 94, 95)
144 SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN
145 (SELECT 5 AS c, 91 AS x, 93 AS z UNION SELECT 6, 99, 95)