gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/join6.test (about)

     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  ifcapable compound {
   128    do_test join6-4.1 {
   129      execsql {
   130        SELECT * FROM
   131           (SELECT 1 AS a, 91 AS x, 92 AS y UNION SELECT 2, 93, 94)
   132           NATURAL JOIN t2 NATURAL JOIN t3
   133      }
   134    } {1 91 92 3 93 5}
   135    do_test join6-4.2 {
   136      execsql {
   137        SELECT * FROM t1 NATURAL JOIN
   138           (SELECT 3 AS b, 92 AS y, 93 AS z UNION SELECT 4, 94, 95)
   139           NATURAL JOIN t3
   140      }
   141    } {1 91 92 3 93 5}
   142    do_test join6-4.3 {
   143      execsql {
   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)
   146      }
   147    } {1 91 92 3 93 5}
   148  }
   149  
   150  do_execsql_test join6-5.1 {
   151    CREATE TABLE tx(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o PRIMARY KEY) 
   152    WITHOUT ROWID;
   153    INSERT INTO tx VALUES(
   154      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
   155    );
   156  } {}
   157  do_execsql_test joint6-5.2 {
   158    SELECT o FROM tx NATURAL JOIN tx;
   159  } {15}
   160  
   161  do_execsql_test join6-5.3 {
   162    CREATE TABLE ty(a,Ñ,x6,x7,x8,Q,I,v,x1,L,E,x2,x3,x4,x5,s,g PRIMARY KEY,b,c)
   163    WITHOUT ROWID;
   164    SELECT a FROM ty NATURAL JOIN ty;
   165  }
   166  
   167  
   168  
   169  
   170  
   171  
   172  
   173  
   174  
   175  
   176  finish_test