xref: /sqlite-3.40.0/test/joinA.test (revision d737b16f)
13b8c7545Sdrh# 2022-04-18
23b8c7545Sdrh#
33b8c7545Sdrh# The author disclaims copyright to this source code.  In place of
43b8c7545Sdrh# a legal notice, here is a blessing:
53b8c7545Sdrh#
63b8c7545Sdrh#    May you do good and not evil.
73b8c7545Sdrh#    May you find forgiveness for yourself and forgive others.
83b8c7545Sdrh#    May you share freely, never taking more than you give.
93b8c7545Sdrh#
103b8c7545Sdrh#***********************************************************************
113b8c7545Sdrh# This file implements regression tests for SQLite library.
123b8c7545Sdrh#
133b8c7545Sdrh# This file implements tests for RIGHT and FULL OUTER JOINs.
143b8c7545Sdrh
153b8c7545Sdrhset testdir [file dirname $argv0]
163b8c7545Sdrhsource $testdir/tester.tcl
173b8c7545Sdrh
183b8c7545Sdrhforeach {id schema} {
193b8c7545Sdrh  1 {
203b8c7545Sdrh    CREATE TABLE t1(a INT, b INT, c INT, d INT);
213b8c7545Sdrh    CREATE TABLE t2(c INT, d INT, e INT, f INT);
223b8c7545Sdrh    CREATE TABLE t3(a INT, b INT, e INT, f INT);
233b8c7545Sdrh    CREATE TABLE t4(a INT, c INT, d INT, f INT);
243b8c7545Sdrh    INSERT INTO t1 VALUES(11,21,31,41),(12,22,32,42),(15,25,35,45),(18,28,38,48);
253b8c7545Sdrh    INSERT INTO t2 VALUES(12,22,32,42),(13,23,33,43),(15,25,35,45),(17,27,37,47);
263b8c7545Sdrh    INSERT INTO t3 VALUES(14,24,34,44),(15,25,35,45),(16,26,36,46);
273b8c7545Sdrh    INSERT INTO t4 VALUES(11,21,31,41),(13,23,33,43),(16,26,36,46),(19,29,39,49);
283b8c7545Sdrh  }
293b8c7545Sdrh  2 {
303b8c7545Sdrh    CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT, d INT);
313b8c7545Sdrh    CREATE TABLE t2(c INT, d INTEGER PRIMARY KEY, e INT, f INT);
323b8c7545Sdrh    CREATE TABLE t3(a INT, b INT, e INTEGER PRIMARY KEY, f INT);
333b8c7545Sdrh    CREATE TABLE t4(a INT, c INT, d INT, f INT PRIMARY KEY) WITHOUT ROWID;
343b8c7545Sdrh    INSERT INTO t1 VALUES(11,21,31,41),(12,22,32,42),(15,25,35,45),(18,28,38,48);
353b8c7545Sdrh    INSERT INTO t2 VALUES(12,22,32,42),(13,23,33,43),(15,25,35,45),(17,27,37,47);
363b8c7545Sdrh    INSERT INTO t3 VALUES(14,24,34,44),(15,25,35,45),(16,26,36,46);
373b8c7545Sdrh    INSERT INTO t4 VALUES(11,21,31,41),(13,23,33,43),(16,26,36,46),(19,29,39,49);
383b8c7545Sdrh  }
393b8c7545Sdrh  3 {
403b8c7545Sdrh    CREATE TABLE t1a(a INT, b INT, c INT, d INT);
413b8c7545Sdrh    CREATE TABLE t2a(c INT, d INT, e INT, f INT);
423b8c7545Sdrh    CREATE TABLE t3a(a INT, b INT, e INT, f INT);
433b8c7545Sdrh    CREATE TABLE t4a(a INT, c INT, d INT, f INT);
443b8c7545Sdrh    INSERT INTO t1a VALUES(11,21,31,41),(12,22,32,42);
453b8c7545Sdrh    INSERT INTO t2a VALUES(12,22,32,42),(13,23,33,43);
463b8c7545Sdrh    INSERT INTO t3a VALUES(14,24,34,44),(15,25,35,45);
473b8c7545Sdrh    INSERT INTO t4a VALUES(11,21,31,41),(13,23,33,43);
483b8c7545Sdrh    CREATE TABLE t1b(a INT, b INT, c INT, d INT);
493b8c7545Sdrh    CREATE TABLE t2b(c INT, d INT, e INT, f INT);
503b8c7545Sdrh    CREATE TABLE t3b(a INT, b INT, e INT, f INT);
513b8c7545Sdrh    CREATE TABLE t4b(a INT, c INT, d INT, f INT);
523b8c7545Sdrh    INSERT INTO t1b VALUES(15,25,35,45),(18,28,38,48);
533b8c7545Sdrh    INSERT INTO t2b VALUES(15,25,35,45),(17,27,37,47);
543b8c7545Sdrh    INSERT INTO t3b VALUES(15,25,35,45),(16,26,36,46);
553b8c7545Sdrh    INSERT INTO t4b VALUES(16,26,36,46),(19,29,39,49);
563b8c7545Sdrh    CREATE VIEW t1 AS SELECT * FROM t1a UNION SELECT * FROM t1b;
573b8c7545Sdrh    CREATE VIEW t2 AS SELECT * FROM t2a UNION SELECT * FROM t2b;
583b8c7545Sdrh    CREATE VIEW t3 AS SELECT * FROM t3a UNION SELECT * FROM t3b;
593b8c7545Sdrh    CREATE VIEW t4 AS SELECT * FROM t4a UNION SELECT * FROM t4b;
603b8c7545Sdrh  }
613b8c7545Sdrh} {
623b8c7545Sdrh  reset_db
633b8c7545Sdrh  db nullvalue -
643b8c7545Sdrh  do_execsql_test joinA-$id.setup $schema {}
653b8c7545Sdrh
663b8c7545Sdrh  # Verified by PG-14
673b8c7545Sdrh  do_execsql_test joinA-$id.100 {
683b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
693b8c7545Sdrh      FROM t1
703b8c7545Sdrh           INNER JOIN t2 USING(c,d)
713b8c7545Sdrh           INNER JOIN t3 USING(a,b,f)
723b8c7545Sdrh           INNER JOIN t4 USING(a,c,d,f)
733b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
743b8c7545Sdrh  } {}
753b8c7545Sdrh
763b8c7545Sdrh
773b8c7545Sdrh  # Verified by PG-14
783b8c7545Sdrh  do_execsql_test joinA-$id.110 {
793b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
803b8c7545Sdrh      FROM t1
813b8c7545Sdrh           LEFT JOIN t2 USING(c,d)
823b8c7545Sdrh           LEFT JOIN t3 USING(a,b,f)
833b8c7545Sdrh           LEFT JOIN t4 USING(a,c,d,f)
843b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
853b8c7545Sdrh  } {
863b8c7545Sdrh    11  21  31  41  -  -  -
873b8c7545Sdrh    12  22  32  42  -  -  -
883b8c7545Sdrh    15  25  35  45  -  -  -
893b8c7545Sdrh    18  28  38  48  -  -  -
903b8c7545Sdrh  }
913b8c7545Sdrh
923b8c7545Sdrh  # Verified by PG-14
933b8c7545Sdrh  do_execsql_test joinA-$id.120 {
943b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
953b8c7545Sdrh      FROM t1
963b8c7545Sdrh           LEFT JOIN t2 USING(c,d)
973b8c7545Sdrh           RIGHT JOIN t3 USING(a,b,f)
983b8c7545Sdrh           LEFT JOIN t4 USING(a,c,d,f)
993b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1003b8c7545Sdrh  } {
1013b8c7545Sdrh    14  24  -  -  -  44  34
1023b8c7545Sdrh    15  25  -  -  -  45  35
1033b8c7545Sdrh    16  26  -  -  -  46  36
1043b8c7545Sdrh  }
1053b8c7545Sdrh
1063b8c7545Sdrh  # Verified by PG-14
1073b8c7545Sdrh  do_execsql_test joinA-$id.130 {
1083b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1093b8c7545Sdrh      FROM t1
1103b8c7545Sdrh           RIGHT JOIN t2 USING(c,d)
1113b8c7545Sdrh           LEFT JOIN t3 USING(a,b,f)
1123b8c7545Sdrh           RIGHT JOIN t4 USING(a,c,d,f)
1133b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1143b8c7545Sdrh  } {
1153b8c7545Sdrh    11  -  21  31  -  41  -
1163b8c7545Sdrh    13  -  23  33  -  43  -
1173b8c7545Sdrh    16  -  26  36  -  46  -
1183b8c7545Sdrh    19  -  29  39  -  49  -
1193b8c7545Sdrh  }
1203b8c7545Sdrh
1213b8c7545Sdrh  # Verified by PG-14
1223b8c7545Sdrh  do_execsql_test joinA-$id.140 {
1233b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1243b8c7545Sdrh      FROM t1
1253b8c7545Sdrh           FULL JOIN t2 USING(c,d)
1263b8c7545Sdrh           LEFT JOIN t3 USING(a,b,f)
1273b8c7545Sdrh           RIGHT JOIN t4 USING(a,c,d,f)
1283b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1293b8c7545Sdrh  } {
1303b8c7545Sdrh    11  -  21  31  -  41  -
1313b8c7545Sdrh    13  -  23  33  -  43  -
1323b8c7545Sdrh    16  -  26  36  -  46  -
1333b8c7545Sdrh    19  -  29  39  -  49  -
1343b8c7545Sdrh  }
1353b8c7545Sdrh
1363b8c7545Sdrh  # Verified by PG-14
1373b8c7545Sdrh  do_execsql_test joinA-$id.150 {
1383b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1393b8c7545Sdrh      FROM t1
1403b8c7545Sdrh           RIGHT JOIN t2 USING(c,d)
1413b8c7545Sdrh           FULL JOIN t3 USING(a,b,f)
1423b8c7545Sdrh           RIGHT JOIN t4 USING(a,c,d,f)
1433b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1443b8c7545Sdrh  } {
1453b8c7545Sdrh    11  -  21  31  -  41  -
1463b8c7545Sdrh    13  -  23  33  -  43  -
1473b8c7545Sdrh    16  -  26  36  -  46  -
1483b8c7545Sdrh    19  -  29  39  -  49  -
1493b8c7545Sdrh  }
1503b8c7545Sdrh
1513b8c7545Sdrh  # Verified by PG-14
1523b8c7545Sdrh  do_execsql_test joinA-$id.160 {
1533b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1543b8c7545Sdrh      FROM t1
1553b8c7545Sdrh           RIGHT JOIN t2 USING(c,d)
1563b8c7545Sdrh           LEFT JOIN t3 USING(a,b,f)
1573b8c7545Sdrh           FULL JOIN t4 USING(a,c,d,f)
1583b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1593b8c7545Sdrh  } {
1603b8c7545Sdrh    -   -  12  22  32  42  -
1613b8c7545Sdrh    -   -  13  23  33  43  -
1623b8c7545Sdrh    -   -  15  25  35  45  -
1633b8c7545Sdrh    -   -  17  27  37  47  -
1643b8c7545Sdrh    11  -  21  31  -   41  -
1653b8c7545Sdrh    13  -  23  33  -   43  -
1663b8c7545Sdrh    16  -  26  36  -   46  -
1673b8c7545Sdrh    19  -  29  39  -   49  -
1683b8c7545Sdrh  }
1693b8c7545Sdrh
1703b8c7545Sdrh  # Verified by PG-14
1713b8c7545Sdrh  do_execsql_test joinA-$id.170 {
1723b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1733b8c7545Sdrh      FROM t1
1743b8c7545Sdrh           LEFT JOIN t2 USING(c,d)
1753b8c7545Sdrh           RIGHT JOIN t3 USING(a,b,f)
1763b8c7545Sdrh           FULL JOIN t4 USING(a,c,d,f)
1773b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1783b8c7545Sdrh  } {
1793b8c7545Sdrh    11  -   21  31  -  41  -
1803b8c7545Sdrh    13  -   23  33  -  43  -
1813b8c7545Sdrh    14  24  -   -   -  44  34
1823b8c7545Sdrh    15  25  -   -   -  45  35
1833b8c7545Sdrh    16  26  -   -   -  46  36
1843b8c7545Sdrh    16  -   26  36  -  46  -
1853b8c7545Sdrh    19  -   29  39  -  49  -
1863b8c7545Sdrh  }
1873b8c7545Sdrh
1883b8c7545Sdrh  # Verified by PG-14
1893b8c7545Sdrh  do_execsql_test joinA-$id.200 {
1903b8c7545Sdrh    SELECT a,b,c,d,t2.e,f,t3.e
1913b8c7545Sdrh      FROM t1
1923b8c7545Sdrh           FULL JOIN t2 USING(c,d)
1933b8c7545Sdrh           FULL JOIN t3 USING(a,b,f)
1943b8c7545Sdrh           FULL JOIN t4 USING(a,c,d,f)
1953b8c7545Sdrh    ORDER BY 1 nulls first, 3 nulls first;
1963b8c7545Sdrh  } {
1973b8c7545Sdrh    -   -   12  22  32  42  -
1983b8c7545Sdrh    -   -   13  23  33  43  -
1993b8c7545Sdrh    -   -   15  25  35  45  -
2003b8c7545Sdrh    -   -   17  27  37  47  -
2013b8c7545Sdrh    11  -   21  31  -   41  -
2023b8c7545Sdrh    11  21  31  41  -   -   -
2033b8c7545Sdrh    12  22  32  42  -   -   -
2043b8c7545Sdrh    13  -   23  33  -   43  -
2053b8c7545Sdrh    14  24  -   -   -   44  34
2063b8c7545Sdrh    15  25  -   -   -   45  35
2073b8c7545Sdrh    15  25  35  45  -   -   -
2083b8c7545Sdrh    16  26  -   -   -   46  36
2093b8c7545Sdrh    16  -   26  36  -   46  -
2103b8c7545Sdrh    18  28  38  48  -   -   -
2113b8c7545Sdrh    19  -   29  39  -   49  -
2123b8c7545Sdrh  }
2133b8c7545Sdrh}
214*d737b16fSdrhfinish_test
215