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