# 2022-04-18 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for RIGHT and FULL OUTER JOINs. set testdir [file dirname $argv0] source $testdir/tester.tcl foreach {id schema} { 1 { CREATE TABLE t1(a INT, b INT, c INT, d INT); CREATE TABLE t2(c INT, d INT, e INT, f INT); CREATE TABLE t3(a INT, b INT, e INT, f INT); CREATE TABLE t4(a INT, c INT, d INT, f INT); INSERT INTO t1 VALUES(11,21,31,41),(12,22,32,42),(15,25,35,45),(18,28,38,48); INSERT INTO t2 VALUES(12,22,32,42),(13,23,33,43),(15,25,35,45),(17,27,37,47); INSERT INTO t3 VALUES(14,24,34,44),(15,25,35,45),(16,26,36,46); INSERT INTO t4 VALUES(11,21,31,41),(13,23,33,43),(16,26,36,46),(19,29,39,49); } 2 { CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT, d INT); CREATE TABLE t2(c INT, d INTEGER PRIMARY KEY, e INT, f INT); CREATE TABLE t3(a INT, b INT, e INTEGER PRIMARY KEY, f INT); CREATE TABLE t4(a INT, c INT, d INT, f INT PRIMARY KEY) WITHOUT ROWID; INSERT INTO t1 VALUES(11,21,31,41),(12,22,32,42),(15,25,35,45),(18,28,38,48); INSERT INTO t2 VALUES(12,22,32,42),(13,23,33,43),(15,25,35,45),(17,27,37,47); INSERT INTO t3 VALUES(14,24,34,44),(15,25,35,45),(16,26,36,46); INSERT INTO t4 VALUES(11,21,31,41),(13,23,33,43),(16,26,36,46),(19,29,39,49); } 3 { CREATE TABLE t1a(a INT, b INT, c INT, d INT); CREATE TABLE t2a(c INT, d INT, e INT, f INT); CREATE TABLE t3a(a INT, b INT, e INT, f INT); CREATE TABLE t4a(a INT, c INT, d INT, f INT); INSERT INTO t1a VALUES(11,21,31,41),(12,22,32,42); INSERT INTO t2a VALUES(12,22,32,42),(13,23,33,43); INSERT INTO t3a VALUES(14,24,34,44),(15,25,35,45); INSERT INTO t4a VALUES(11,21,31,41),(13,23,33,43); CREATE TABLE t1b(a INT, b INT, c INT, d INT); CREATE TABLE t2b(c INT, d INT, e INT, f INT); CREATE TABLE t3b(a INT, b INT, e INT, f INT); CREATE TABLE t4b(a INT, c INT, d INT, f INT); INSERT INTO t1b VALUES(15,25,35,45),(18,28,38,48); INSERT INTO t2b VALUES(15,25,35,45),(17,27,37,47); INSERT INTO t3b VALUES(15,25,35,45),(16,26,36,46); INSERT INTO t4b VALUES(16,26,36,46),(19,29,39,49); CREATE VIEW t1 AS SELECT * FROM t1a UNION SELECT * FROM t1b; CREATE VIEW t2 AS SELECT * FROM t2a UNION SELECT * FROM t2b; CREATE VIEW t3 AS SELECT * FROM t3a UNION SELECT * FROM t3b; CREATE VIEW t4 AS SELECT * FROM t4a UNION SELECT * FROM t4b; } } { reset_db db nullvalue - do_execsql_test joinA-$id.setup $schema {} # Verified by PG-14 do_execsql_test joinA-$id.100 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 INNER JOIN t2 USING(c,d) INNER JOIN t3 USING(a,b,f) INNER JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } {} # Verified by PG-14 do_execsql_test joinA-$id.110 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 LEFT JOIN t2 USING(c,d) LEFT JOIN t3 USING(a,b,f) LEFT JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 11 21 31 41 - - - 12 22 32 42 - - - 15 25 35 45 - - - 18 28 38 48 - - - } # Verified by PG-14 do_execsql_test joinA-$id.120 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 LEFT JOIN t2 USING(c,d) RIGHT JOIN t3 USING(a,b,f) LEFT JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 14 24 - - - 44 34 15 25 - - - 45 35 16 26 - - - 46 36 } # Verified by PG-14 do_execsql_test joinA-$id.130 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 RIGHT JOIN t2 USING(c,d) LEFT JOIN t3 USING(a,b,f) RIGHT JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 11 - 21 31 - 41 - 13 - 23 33 - 43 - 16 - 26 36 - 46 - 19 - 29 39 - 49 - } # Verified by PG-14 do_execsql_test joinA-$id.140 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 FULL JOIN t2 USING(c,d) LEFT JOIN t3 USING(a,b,f) RIGHT JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 11 - 21 31 - 41 - 13 - 23 33 - 43 - 16 - 26 36 - 46 - 19 - 29 39 - 49 - } # Verified by PG-14 do_execsql_test joinA-$id.150 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 RIGHT JOIN t2 USING(c,d) FULL JOIN t3 USING(a,b,f) RIGHT JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 11 - 21 31 - 41 - 13 - 23 33 - 43 - 16 - 26 36 - 46 - 19 - 29 39 - 49 - } # Verified by PG-14 do_execsql_test joinA-$id.160 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 RIGHT JOIN t2 USING(c,d) LEFT JOIN t3 USING(a,b,f) FULL JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { - - 12 22 32 42 - - - 13 23 33 43 - - - 15 25 35 45 - - - 17 27 37 47 - 11 - 21 31 - 41 - 13 - 23 33 - 43 - 16 - 26 36 - 46 - 19 - 29 39 - 49 - } # Verified by PG-14 do_execsql_test joinA-$id.170 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 LEFT JOIN t2 USING(c,d) RIGHT JOIN t3 USING(a,b,f) FULL JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { 11 - 21 31 - 41 - 13 - 23 33 - 43 - 14 24 - - - 44 34 15 25 - - - 45 35 16 26 - - - 46 36 16 - 26 36 - 46 - 19 - 29 39 - 49 - } # Verified by PG-14 do_execsql_test joinA-$id.200 { SELECT a,b,c,d,t2.e,f,t3.e FROM t1 FULL JOIN t2 USING(c,d) FULL JOIN t3 USING(a,b,f) FULL JOIN t4 USING(a,c,d,f) ORDER BY 1 nulls first, 3 nulls first; } { - - 12 22 32 42 - - - 13 23 33 43 - - - 15 25 35 45 - - - 17 27 37 47 - 11 - 21 31 - 41 - 11 21 31 41 - - - 12 22 32 42 - - - 13 - 23 33 - 43 - 14 24 - - - 44 34 15 25 - - - 45 35 15 25 35 45 - - - 16 26 - - - 46 36 16 - 26 36 - 46 - 18 28 38 48 - - - 19 - 29 39 - 49 - } } finish_test