| # 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 - |
| } |
| |
| # Verified by PG-14 |
| do_execsql_test joinA-$id.201 { |
| SELECT a,b,c,d,t2.e,f,t3.e,t1.a |
| FROM t1 |
| FULL JOIN t2 USING(c,d) |
| FULL JOIN t3 USING(a,b,f) |
| FULL JOIN t4 USING(a,c,d,f) |
| WHERE t1.a!=0 |
| ORDER BY 1 nulls first, 3 nulls first; |
| } { |
| 11 21 31 41 - - - 11 |
| 12 22 32 42 - - - 12 |
| 15 25 35 45 - - - 15 |
| 18 28 38 48 - - - 18 |
| } |
| |
| # Verified by PG-14 |
| do_execsql_test joinA-$id.202 { |
| SELECT a,b,c,d,t2.e,f,t3.e,t3.a |
| FROM t1 |
| FULL JOIN t2 USING(c,d) |
| FULL JOIN t3 USING(a,b,f) |
| FULL JOIN t4 USING(a,c,d,f) |
| WHERE t3.a!=0 |
| ORDER BY 1 nulls first, 3 nulls first; |
| } { |
| 14 24 - - - 44 34 14 |
| 15 25 - - - 45 35 15 |
| 16 26 - - - 46 36 16 |
| } |
| |
| # Verified by PG-14 |
| do_execsql_test joinA-$id.203 { |
| SELECT a,b,c,d,t2.e,f,t3.e,t4.a |
| FROM t1 |
| FULL JOIN t2 USING(c,d) |
| FULL JOIN t3 USING(a,b,f) |
| FULL JOIN t4 USING(a,c,d,f) |
| WHERE t4.a!=0 |
| ORDER BY 1 nulls first, 3 nulls first; |
| } { |
| 11 - 21 31 - 41 - 11 |
| 13 - 23 33 - 43 - 13 |
| 16 - 26 36 - 46 - 16 |
| 19 - 29 39 - 49 - 19 |
| } |
| |
| # Verified by PG-14 |
| do_execsql_test joinA-$id.204 { |
| 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) |
| WHERE t2.e!=0 |
| ORDER BY 1 nulls first, 3 nulls first; |
| } { |
| - - 12 22 32 42 - |
| - - 13 23 33 43 - |
| - - 15 25 35 45 - |
| - - 17 27 37 47 - |
| } |
| } |
| finish_test |