Annotation of embedaddon/sqlite3/test/join6.test, revision 1.1.1.1

1.1       misho       1: # 2009 December 9
                      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: # 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.
                     18: #
                     19: 
                     20: set testdir [file dirname $argv0]
                     21: source $testdir/tester.tcl
                     22: 
                     23: 
                     24: # The problem as initially reported on the mailing list:
                     25: #
                     26: do_test join6-1.1 {
                     27:   execsql {
                     28:     CREATE TABLE t1(a);
                     29:     CREATE TABLE t2(a);
                     30:     CREATE TABLE t3(a,b);
                     31:     INSERT INTO t1 VALUES(1);
                     32:     INSERT INTO t3 VALUES(1,2);
                     33: 
                     34:     SELECT * FROM t1 LEFT JOIN t2 USING(a) LEFT JOIN t3 USING(a);
                     35:   }
                     36: } {1 2}
                     37: do_test join6-1.2 {
                     38:   execsql {
                     39:     SELECT t1.a, t3.b 
                     40:       FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.a=t3.a;
                     41:   }
                     42: } {1 {}}
                     43: do_test join6-1.3 {
                     44:   execsql {
                     45:     SELECT t1.a, t3.b
                     46:       FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t1.a=t3.a;
                     47:   }
                     48: } {1 2}
                     49: 
                     50: 
                     51: do_test join6-2.1 {
                     52:   execsql {
                     53:     DROP TABLE t1;
                     54:     DROP TABLE t2;
                     55:     DROP TABLE t3;
                     56: 
                     57:     CREATE TABLE t1(x,y);
                     58:     CREATE TABLE t2(y,z);
                     59:     CREATE TABLE t3(x,z);
                     60: 
                     61:     INSERT INTO t1 VALUES(1,2);
                     62:     INSERT INTO t1 VALUES(3,4);
                     63: 
                     64:     INSERT INTO t2 VALUES(2,3);
                     65:     INSERT INTO t2 VALUES(4,5);
                     66: 
                     67:     INSERT INTO t3 VALUES(1,3);
                     68:     INSERT INTO t3 VALUES(3,5);
                     69: 
                     70:     SELECT * FROM t1 JOIN t2 USING (y) JOIN t3 USING(x);
                     71:   }
                     72: } {1 2 3 3 3 4 5 5}
                     73: do_test join6-2.2 {
                     74:   execsql {
                     75:     SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3;
                     76:   }
                     77: } {1 2 3 3 4 5}
                     78: 
                     79: 
                     80: do_test join6-3.1 {
                     81:   execsql {
                     82:     DROP TABLE t1;
                     83:     DROP TABLE t2;
                     84:     DROP TABLE t3;
                     85: 
                     86:     CREATE TABLE t1(a,x,y);
                     87:     INSERT INTO t1 VALUES(1,91,92);
                     88:     INSERT INTO t1 VALUES(2,93,94);
                     89:     
                     90:     CREATE TABLE t2(b,y,z);
                     91:     INSERT INTO t2 VALUES(3,92,93);
                     92:     INSERT INTO t2 VALUES(4,94,95);
                     93:     
                     94:     CREATE TABLE t3(c,x,z);
                     95:     INSERT INTO t3 VALUES(5,91,93);
                     96:     INSERT INTO t3 VALUES(6,99,95);
                     97:     
                     98:     SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3;
                     99:   }
                    100: } {1 91 92 3 93 5}
                    101: do_test join6-3.2 {
                    102:   execsql {
                    103:     SELECT * FROM t1 JOIN t2 NATURAL JOIN t3;
                    104:   }
                    105: } {1 91 92 3 92 93 5}
                    106: do_test join6-3.3 {
                    107:   execsql {
                    108:     SELECT * FROM t1 JOIN t2 USING(y) NATURAL JOIN t3;
                    109:   }
                    110: } {1 91 92 3 93 5}
                    111: do_test join6-3.4 {
                    112:   execsql {
                    113:     SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x,z);
                    114:   }
                    115: } {1 91 92 3 93 5}
                    116: do_test join6-3.5 {
                    117:   execsql {
                    118:     SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x);
                    119:   }
                    120: } {1 91 92 3 93 5 93}
                    121: do_test join6-3.6 {
                    122:   execsql {
                    123:     SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(z);
                    124:   }
                    125: } {1 91 92 3 93 5 91 2 93 94 4 95 6 99}
                    126: 
                    127: do_test join6-4.1 {
                    128:   execsql {
                    129:     SELECT * FROM
                    130:        (SELECT 1 AS a, 91 AS x, 92 AS y UNION SELECT 2, 93, 94)
                    131:        NATURAL JOIN t2 NATURAL JOIN t3
                    132:   }
                    133: } {1 91 92 3 93 5}
                    134: do_test join6-4.2 {
                    135:   execsql {
                    136:     SELECT * FROM t1 NATURAL JOIN
                    137:        (SELECT 3 AS b, 92 AS y, 93 AS z UNION SELECT 4, 94, 95)
                    138:        NATURAL JOIN t3
                    139:   }
                    140: } {1 91 92 3 93 5}
                    141: do_test join6-4.3 {
                    142:   execsql {
                    143:     SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN
                    144:        (SELECT 5 AS c, 91 AS x, 93 AS z UNION SELECT 6, 99, 95)
                    145:   }
                    146: } {1 91 92 3 93 5}
                    147: 
                    148: 
                    149: 
                    150: 
                    151: 
                    152: 
                    153: 
                    154: 
                    155: 
                    156: 
                    157: 
                    158: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>