1bdbda1ebSdrh# 2022-04-16 2bdbda1ebSdrh# 3bdbda1ebSdrh# The author disclaims copyright to this source code. In place of 4bdbda1ebSdrh# a legal notice, here is a blessing: 5bdbda1ebSdrh# 6bdbda1ebSdrh# May you do good and not evil. 7bdbda1ebSdrh# May you find forgiveness for yourself and forgive others. 8bdbda1ebSdrh# May you share freely, never taking more than you give. 9bdbda1ebSdrh# 10bdbda1ebSdrh#*********************************************************************** 11bdbda1ebSdrh# This file implements regression tests for SQLite library. 12bdbda1ebSdrh# 13bdbda1ebSdrh# This file implements tests for RIGHT and FULL OUTER JOINs. 14bdbda1ebSdrh 15bdbda1ebSdrhset testdir [file dirname $argv0] 16bdbda1ebSdrhsource $testdir/tester.tcl 17bdbda1ebSdrh 18bdbda1ebSdrhforeach {id schema} { 19bdbda1ebSdrh 1 { 20977eef6cSdrh CREATE TABLE t3(id INTEGER PRIMARY KEY, w TEXT); 21bdbda1ebSdrh CREATE TABLE t4(id INTEGER PRIMARY KEY, x TEXT); 22bdbda1ebSdrh CREATE TABLE t5(id INTEGER PRIMARY KEY, y TEXT); 23bdbda1ebSdrh CREATE TABLE t6(id INTEGER PRIMARY KEY, z INT); 24977eef6cSdrh CREATE VIEW dual(dummy) AS VALUES('x'); 25977eef6cSdrh INSERT INTO t3(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven'); 26bdbda1ebSdrh INSERT INTO t4(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave'); 27bdbda1ebSdrh INSERT INTO t5(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'), 28bdbda1ebSdrh (5,'blue'); 29bdbda1ebSdrh INSERT INTO t6(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999); 30bdbda1ebSdrh } 316fda176bSdrh 2 { 326fda176bSdrh CREATE TABLE t3(id INT PRIMARY KEY, w TEXT) WITHOUT ROWID; 336fda176bSdrh CREATE TABLE t4(id INT PRIMARY KEY, x TEXT) WITHOUT ROWID; 346fda176bSdrh CREATE TABLE t5(id INT PRIMARY KEY, y TEXT) WITHOUT ROWID; 356fda176bSdrh CREATE TABLE t6(id INT PRIMARY KEY, z INT) WITHOUT ROWID; 3601a6c16eSdrh CREATE TABLE dual(dummy TEXT); 3701a6c16eSdrh INSERT INTO dual(dummy) VALUES('x'); 386fda176bSdrh INSERT INTO t3(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven'); 396fda176bSdrh INSERT INTO t4(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave'); 406fda176bSdrh INSERT INTO t5(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'), 416fda176bSdrh (5,'blue'); 426fda176bSdrh INSERT INTO t6(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999); 436fda176bSdrh } 4401a6c16eSdrh 3 { 4501a6c16eSdrh CREATE TABLE t3x(id INTEGER PRIMARY KEY, w TEXT); 4601a6c16eSdrh CREATE TABLE t4x(id INTEGER PRIMARY KEY, x TEXT); 4701a6c16eSdrh CREATE TABLE t5x(id INTEGER PRIMARY KEY, y TEXT); 4801a6c16eSdrh CREATE TABLE t6x(id INTEGER PRIMARY KEY, z INT); 4901a6c16eSdrh CREATE VIEW dual(dummy) AS VALUES('x'); 5001a6c16eSdrh INSERT INTO t3x(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven'); 5101a6c16eSdrh INSERT INTO t4x(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave'); 5201a6c16eSdrh INSERT INTO t5x(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'), 5301a6c16eSdrh (5,'blue'); 5401a6c16eSdrh INSERT INTO t6x(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999); 5501a6c16eSdrh CREATE VIEW t3 AS SELECT * FROM t3x LIMIT 1000; 5601a6c16eSdrh CREATE VIEW t4 AS SELECT * FROM t4x LIMIT 1000; 5701a6c16eSdrh CREATE VIEW t5 AS SELECT * FROM t5x LIMIT 1000; 5801a6c16eSdrh CREATE VIEW t6 AS SELECT * FROM t6x LIMIT 1000; 5901a6c16eSdrh } 6001a6c16eSdrh 4 { 6101a6c16eSdrh CREATE TABLE t3a(id INTEGER PRIMARY KEY, w TEXT); 6201a6c16eSdrh CREATE TABLE t3b(id INTEGER PRIMARY KEY, w TEXT); 6301a6c16eSdrh CREATE TABLE t4a(id INTEGER PRIMARY KEY, x TEXT); 6401a6c16eSdrh CREATE TABLE t4b(id INTEGER PRIMARY KEY, x TEXT); 6501a6c16eSdrh CREATE TABLE t5a(id INTEGER PRIMARY KEY, y TEXT); 6601a6c16eSdrh CREATE TABLE t5b(id INTEGER PRIMARY KEY, y TEXT); 6701a6c16eSdrh CREATE TABLE t6a(id INTEGER PRIMARY KEY, z INT); 6801a6c16eSdrh CREATE TABLE t6b(id INTEGER PRIMARY KEY, z INT); 6901a6c16eSdrh CREATE VIEW dual(dummy) AS VALUES('x'); 7001a6c16eSdrh INSERT INTO t3a(id,w) VALUES(2,'two'),(3,'three'); 7101a6c16eSdrh INSERT INTO t3b(id,w) VALUES(6,'six'),(7,'seven'); 7201a6c16eSdrh INSERT INTO t4a(id,x) VALUES(2,'alice'),(4,'bob'); 7301a6c16eSdrh INSERT INTO t4b(id,x) VALUES(6,'cindy'),(8,'dave'); 7401a6c16eSdrh INSERT INTO t5a(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'); 7501a6c16eSdrh INSERT INTO t5b(id,y) VALUES(4,'green'),(5,'blue'); 7601a6c16eSdrh INSERT INTO t6a(id,z) VALUES(3,333),(4,444); 7701a6c16eSdrh INSERT INTO t6b(id,z) VALUES(5,555),(0,1000),(9,999); 7801a6c16eSdrh CREATE VIEW t3 AS SELECT * FROM t3a UNION ALL SELECT * FROM t3b; 7901a6c16eSdrh CREATE VIEW t4 AS SELECT * FROM t4a UNION ALL SELECT * FROM t4b; 8001a6c16eSdrh CREATE VIEW t5 AS SELECT * FROM t5a UNION ALL SELECT * FROM t5b; 8101a6c16eSdrh CREATE VIEW t6 AS SELECT * FROM t6a UNION ALL SELECT * FROM t6b; 8201a6c16eSdrh } 8301a6c16eSdrh 5 { 8401a6c16eSdrh CREATE TABLE t3a(id INTEGER PRIMARY KEY, w TEXT) WITHOUT ROWID; 8501a6c16eSdrh CREATE TABLE t3b(id INTEGER PRIMARY KEY, w TEXT); 8601a6c16eSdrh CREATE TABLE t4a(id INTEGER PRIMARY KEY, x TEXT) WITHOUT ROWID; 8701a6c16eSdrh CREATE TABLE t4b(id INTEGER PRIMARY KEY, x TEXT) WITHOUT ROWID; 8801a6c16eSdrh CREATE TABLE t5a(id INTEGER PRIMARY KEY, y TEXT); 8901a6c16eSdrh CREATE TABLE t5b(id INTEGER PRIMARY KEY, y TEXT) WITHOUT ROWID; 9001a6c16eSdrh CREATE TABLE t6a(id INTEGER PRIMARY KEY, z INT); 9101a6c16eSdrh CREATE TABLE t6b(id INTEGER PRIMARY KEY, z INT); 9201a6c16eSdrh CREATE VIEW dual(dummy) AS VALUES('x'); 9301a6c16eSdrh INSERT INTO t3a(id,w) VALUES(2,'two'),(3,'three'); 9401a6c16eSdrh INSERT INTO t3b(id,w) VALUES(6,'six'),(7,'seven'); 9501a6c16eSdrh INSERT INTO t4a(id,x) VALUES(2,'alice'),(4,'bob'); 9601a6c16eSdrh INSERT INTO t4b(id,x) VALUES(6,'cindy'),(8,'dave'); 9701a6c16eSdrh INSERT INTO t5a(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'); 9801a6c16eSdrh INSERT INTO t5b(id,y) VALUES(4,'green'),(5,'blue'); 9901a6c16eSdrh INSERT INTO t6a(id,z) VALUES(3,333),(4,444); 10001a6c16eSdrh INSERT INTO t6b(id,z) VALUES(5,555),(0,1000),(9,999); 10101a6c16eSdrh CREATE VIEW t3 AS SELECT * FROM t3a UNION ALL SELECT * FROM t3b; 10201a6c16eSdrh CREATE VIEW t4 AS SELECT * FROM t4a UNION ALL SELECT * FROM t4b LIMIT 50; 10301a6c16eSdrh CREATE VIEW t5 AS SELECT * FROM t5a UNION ALL SELECT * FROM t5b LIMIT 100; 10401a6c16eSdrh CREATE VIEW t6 AS SELECT * FROM t6a UNION ALL SELECT * FROM t6b; 10501a6c16eSdrh } 106bdbda1ebSdrh} { 107bdbda1ebSdrh reset_db 108bdbda1ebSdrh db nullvalue - 109bdbda1ebSdrh do_execsql_test join9-$id.setup $schema {} 110977eef6cSdrh 111977eef6cSdrh # Verifid by PG-14 for case 1 112977eef6cSdrh do_execsql_test join9-$id.100 { 113977eef6cSdrh SELECT *, t4.id, t5.id, t6.id 114977eef6cSdrh FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6 115977eef6cSdrh ORDER BY 1; 116977eef6cSdrh } { 117977eef6cSdrh 2 alice orange - 2 2 - 118977eef6cSdrh 4 bob green 444 4 4 4 119977eef6cSdrh 6 cindy - - 6 - - 120977eef6cSdrh 8 dave - - 8 - - 121977eef6cSdrh } 122977eef6cSdrh 123977eef6cSdrh do_execsql_test join9-$id.101 { 124bdbda1ebSdrh SELECT *, t4.id, t5.id, t6.id 125bdbda1ebSdrh FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6 126bdbda1ebSdrh ORDER BY id; 127bdbda1ebSdrh } { 128bdbda1ebSdrh 2 alice orange - 2 2 - 129bdbda1ebSdrh 4 bob green 444 4 4 4 130bdbda1ebSdrh 6 cindy - - 6 - - 131bdbda1ebSdrh 8 dave - - 8 - - 132bdbda1ebSdrh } 133977eef6cSdrh do_execsql_test join9-$id.102 { 134977eef6cSdrh SELECT *, t4.id, t5.id, t6.id 135977eef6cSdrh FROM t4 LEFT JOIN t5 USING(id) LEFT JOIN t6 USING(id) 136977eef6cSdrh ORDER BY id; 137977eef6cSdrh } { 138977eef6cSdrh 2 alice orange - 2 2 - 139977eef6cSdrh 4 bob green 444 4 4 4 140977eef6cSdrh 6 cindy - - 6 - - 141977eef6cSdrh 8 dave - - 8 - - 142977eef6cSdrh } 143977eef6cSdrh 144977eef6cSdrh # Verifid by PG-14 using case 1 145977eef6cSdrh do_execsql_test join9-$id.200 { 146977eef6cSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 147977eef6cSdrh FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6 148977eef6cSdrh ORDER BY 1; 149977eef6cSdrh } { 150977eef6cSdrh 2 alice orange - 2 2 - 151977eef6cSdrh 4 bob green 444 4 4 4 152977eef6cSdrh 6 cindy - - 6 - - 153977eef6cSdrh 8 dave - - 8 - - 154977eef6cSdrh } 155977eef6cSdrh 156977eef6cSdrh do_execsql_test join9-$id.201 { 157977eef6cSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 158977eef6cSdrh FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6 159977eef6cSdrh ORDER BY id; 160977eef6cSdrh } { 161977eef6cSdrh 2 alice orange - 2 2 - 162977eef6cSdrh 4 bob green 444 4 4 4 163977eef6cSdrh 6 cindy - - 6 - - 164977eef6cSdrh 8 dave - - 8 - - 165977eef6cSdrh } 166977eef6cSdrh 167977eef6cSdrh # Verified by PG-14 using case 1 168977eef6cSdrh do_execsql_test join9-$id.300 { 169977eef6cSdrh SELECT *, t4.id, t5.id, t6.id 170977eef6cSdrh FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6 171977eef6cSdrh ORDER BY 1; 172977eef6cSdrh } { 173977eef6cSdrh 0 - - 1000 - - 0 174977eef6cSdrh 3 - yellow 333 - 3 3 175977eef6cSdrh 4 bob green 444 4 4 4 176977eef6cSdrh 5 - blue 555 - 5 5 177977eef6cSdrh 9 - - 999 - - 9 178977eef6cSdrh } 179977eef6cSdrh 180977eef6cSdrh do_execsql_test join9-$id.301 { 181bdbda1ebSdrh SELECT *, t4.id, t5.id, t6.id 182bdbda1ebSdrh FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6 183bdbda1ebSdrh ORDER BY id; 184bdbda1ebSdrh } { 185bdbda1ebSdrh 0 - - 1000 - - 0 186bdbda1ebSdrh 3 - yellow 333 - 3 3 187bdbda1ebSdrh 4 bob green 444 4 4 4 188bdbda1ebSdrh 5 - blue 555 - 5 5 189bdbda1ebSdrh 9 - - 999 - - 9 190bdbda1ebSdrh } 191977eef6cSdrh 192977eef6cSdrh # Verified by PG-14 for case 1 193977eef6cSdrh do_execsql_test join9-$id.400 { 194bdbda1ebSdrh SELECT *, t4.id, t5.id, t6.id 195bdbda1ebSdrh FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6 196977eef6cSdrh ORDER BY 1; 197977eef6cSdrh } { 198977eef6cSdrh 0 - - 1000 - - 0 199977eef6cSdrh 1 - red - - 1 - 200977eef6cSdrh 2 alice orange - 2 2 - 201977eef6cSdrh 3 - yellow 333 - 3 3 202977eef6cSdrh 4 bob green 444 4 4 4 203977eef6cSdrh 5 - blue 555 - 5 5 204977eef6cSdrh 6 cindy - - 6 - - 205977eef6cSdrh 8 dave - - 8 - - 206977eef6cSdrh 9 - - 999 - - 9 207977eef6cSdrh } 208977eef6cSdrh 209977eef6cSdrh do_execsql_test join9-$id.401 { 210977eef6cSdrh SELECT *, t4.id, t5.id, t6.id 211977eef6cSdrh FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6 212977eef6cSdrh ORDER BY id; 213977eef6cSdrh } { 214977eef6cSdrh 0 - - 1000 - - 0 215977eef6cSdrh 1 - red - - 1 - 216977eef6cSdrh 2 alice orange - 2 2 - 217977eef6cSdrh 3 - yellow 333 - 3 3 218977eef6cSdrh 4 bob green 444 4 4 4 219977eef6cSdrh 5 - blue 555 - 5 5 220977eef6cSdrh 6 cindy - - 6 - - 221977eef6cSdrh 8 dave - - 8 - - 222977eef6cSdrh 9 - - 999 - - 9 223977eef6cSdrh } 224977eef6cSdrh do_execsql_test join9-$id.402 { 225977eef6cSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 226977eef6cSdrh FROM t4 NATURAL FULL JOIN t6 NATURAL FULL JOIN t5 227bdbda1ebSdrh ORDER BY id; 228bdbda1ebSdrh } { 229bdbda1ebSdrh 0 - - 1000 - - 0 230bdbda1ebSdrh 1 - red - - 1 - 231bdbda1ebSdrh 2 alice orange - 2 2 - 232bdbda1ebSdrh 3 - yellow 333 - 3 3 233bdbda1ebSdrh 4 bob green 444 4 4 4 234bdbda1ebSdrh 5 - blue 555 - 5 5 235bdbda1ebSdrh 6 cindy - - 6 - - 236bdbda1ebSdrh 8 dave - - 8 - - 237bdbda1ebSdrh 9 - - 999 - - 9 238bdbda1ebSdrh } 2396fda176bSdrh do_execsql_test join9-$id.403 { 2406fda176bSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 2416fda176bSdrh FROM t5 NATURAL FULL JOIN t4 NATURAL FULL JOIN t6 2426fda176bSdrh ORDER BY id; 2436fda176bSdrh } { 2446fda176bSdrh 0 - - 1000 - - 0 2456fda176bSdrh 1 - red - - 1 - 2466fda176bSdrh 2 alice orange - 2 2 - 2476fda176bSdrh 3 - yellow 333 - 3 3 2486fda176bSdrh 4 bob green 444 4 4 4 2496fda176bSdrh 5 - blue 555 - 5 5 2506fda176bSdrh 6 cindy - - 6 - - 2516fda176bSdrh 8 dave - - 8 - - 2526fda176bSdrh 9 - - 999 - - 9 2536fda176bSdrh } 2546fda176bSdrh do_execsql_test join9-$id.404 { 2556fda176bSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 2566fda176bSdrh FROM t5 NATURAL FULL JOIN t6 NATURAL FULL JOIN t4 2576fda176bSdrh ORDER BY id; 2586fda176bSdrh } { 2596fda176bSdrh 0 - - 1000 - - 0 2606fda176bSdrh 1 - red - - 1 - 2616fda176bSdrh 2 alice orange - 2 2 - 2626fda176bSdrh 3 - yellow 333 - 3 3 2636fda176bSdrh 4 bob green 444 4 4 4 2646fda176bSdrh 5 - blue 555 - 5 5 2656fda176bSdrh 6 cindy - - 6 - - 2666fda176bSdrh 8 dave - - 8 - - 2676fda176bSdrh 9 - - 999 - - 9 2686fda176bSdrh } 2696fda176bSdrh do_execsql_test join9-$id.405 { 2706fda176bSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 2716fda176bSdrh FROM t6 NATURAL FULL JOIN t4 NATURAL FULL JOIN t5 2726fda176bSdrh ORDER BY id; 2736fda176bSdrh } { 2746fda176bSdrh 0 - - 1000 - - 0 2756fda176bSdrh 1 - red - - 1 - 2766fda176bSdrh 2 alice orange - 2 2 - 2776fda176bSdrh 3 - yellow 333 - 3 3 2786fda176bSdrh 4 bob green 444 4 4 4 2796fda176bSdrh 5 - blue 555 - 5 5 2806fda176bSdrh 6 cindy - - 6 - - 2816fda176bSdrh 8 dave - - 8 - - 2826fda176bSdrh 9 - - 999 - - 9 2836fda176bSdrh } 2846fda176bSdrh do_execsql_test join9-$id.406 { 2856fda176bSdrh SELECT id, x, y, z, t4.id, t5.id, t6.id 2866fda176bSdrh FROM t6 NATURAL FULL JOIN t5 NATURAL FULL JOIN t4 2876fda176bSdrh ORDER BY id; 2886fda176bSdrh } { 2896fda176bSdrh 0 - - 1000 - - 0 2906fda176bSdrh 1 - red - - 1 - 2916fda176bSdrh 2 alice orange - 2 2 - 2926fda176bSdrh 3 - yellow 333 - 3 3 2936fda176bSdrh 4 bob green 444 4 4 4 2946fda176bSdrh 5 - blue 555 - 5 5 2956fda176bSdrh 6 cindy - - 6 - - 2966fda176bSdrh 8 dave - - 8 - - 2976fda176bSdrh 9 - - 999 - - 9 2986fda176bSdrh } 2996fda176bSdrh 3006fda176bSdrh # Verified by PG-14 using case 1 3016fda176bSdrh do_execsql_test join9-$id.500 { 3026fda176bSdrh SELECT id, w, x, y, z 3036fda176bSdrh FROM t3 FULL JOIN t4 USING(id) 3046fda176bSdrh NATURAL FULL JOIN t5 3056fda176bSdrh FULL JOIN t6 USING(id) 3066fda176bSdrh ORDER BY 1; 3076fda176bSdrh } { 3086fda176bSdrh 0 - - - 1000 3096fda176bSdrh 1 - - red - 3106fda176bSdrh 2 two alice orange - 3116fda176bSdrh 3 three - yellow 333 3126fda176bSdrh 4 - bob green 444 3136fda176bSdrh 5 - - blue 555 3146fda176bSdrh 6 six cindy - - 3156fda176bSdrh 7 seven - - - 3166fda176bSdrh 8 - dave - - 3176fda176bSdrh 9 - - - 999 3186fda176bSdrh } 3196fda176bSdrh 3206fda176bSdrh # Verified by PG-14 using case 1 3216fda176bSdrh do_execsql_test join9-$id.600 { 3226fda176bSdrh SELECT id, w, x, y, z 32301a6c16eSdrh FROM t3 JOIN dual AS d1 ON true 3246fda176bSdrh FULL JOIN t4 USING(id) 3256fda176bSdrh JOIN dual AS d2 ON true 3266fda176bSdrh NATURAL FULL JOIN t5 32701a6c16eSdrh JOIN dual AS d3 ON true 32801a6c16eSdrh FULL JOIN t6 USING(id) 3296fda176bSdrh CROSS JOIN dual AS d4 3306fda176bSdrh ORDER BY 1; 3316fda176bSdrh } { 3326fda176bSdrh 0 - - - 1000 3336fda176bSdrh 1 - - red - 3346fda176bSdrh 2 two alice orange - 3356fda176bSdrh 3 three - yellow 333 3366fda176bSdrh 4 - bob green 444 3376fda176bSdrh 5 - - blue 555 3386fda176bSdrh 6 six cindy - - 3396fda176bSdrh 7 seven - - - 3406fda176bSdrh 8 - dave - - 3416fda176bSdrh 9 - - - 999 3426fda176bSdrh } 34301a6c16eSdrh 34401a6c16eSdrh # Verified by PG-14 using case 1 34501a6c16eSdrh do_execsql_test join9-$id.700 { 34601a6c16eSdrh SELECT id, w, x, y, z 34701a6c16eSdrh FROM t3 JOIN dual AS d1 ON true 34801a6c16eSdrh FULL JOIN t4 USING(id) 34901a6c16eSdrh JOIN dual AS d2 ON true 35001a6c16eSdrh NATURAL FULL JOIN t5 35101a6c16eSdrh JOIN dual AS d3 ON true 35201a6c16eSdrh FULL JOIN t6 USING(id) 35301a6c16eSdrh CROSS JOIN dual AS d4 35401a6c16eSdrh WHERE x<>'bob' OR x IS NULL 35501a6c16eSdrh ORDER BY 1; 35601a6c16eSdrh } { 35701a6c16eSdrh 0 - - - 1000 35801a6c16eSdrh 1 - - red - 35901a6c16eSdrh 2 two alice orange - 36001a6c16eSdrh 3 three - yellow 333 36101a6c16eSdrh 5 - - blue 555 36201a6c16eSdrh 6 six cindy - - 36301a6c16eSdrh 7 seven - - - 36401a6c16eSdrh 8 - dave - - 36501a6c16eSdrh 9 - - - 999 36601a6c16eSdrh } 367a20922cbSdrh 368a20922cbSdrh # Verified by PG-14 using case 1 369a20922cbSdrh do_execsql_test join9-$id.800 { 370a20922cbSdrh WITH t7(id,a) AS MATERIALIZED (SELECT * FROM t4 WHERE false) 371a20922cbSdrh SELECT * 372a20922cbSdrh FROM t7 373a20922cbSdrh JOIN t7 AS t7b USING(id) 374a20922cbSdrh FULL JOIN t3 USING(id); 375a20922cbSdrh } { 376a20922cbSdrh 2 - - two 377a20922cbSdrh 3 - - three 378a20922cbSdrh 6 - - six 379a20922cbSdrh 7 - - seven 380a20922cbSdrh } 38123f240b3Sdrh 38223f240b3Sdrh # Verified by PG-14 38323f240b3Sdrh do_execsql_test join9-$id.900 { 38423f240b3Sdrh SELECT * 38523f240b3Sdrh FROM (t3 NATURAL FULL JOIN t4) 38623f240b3Sdrh NATURAL FULL JOIN 38723f240b3Sdrh (t5 NATURAL FULL JOIN t6) 38823f240b3Sdrh ORDER BY 1; 38923f240b3Sdrh } { 39023f240b3Sdrh 0 - - - 1000 39123f240b3Sdrh 1 - - red - 39223f240b3Sdrh 2 two alice orange - 39323f240b3Sdrh 3 three - yellow 333 39423f240b3Sdrh 4 - bob green 444 39523f240b3Sdrh 5 - - blue 555 39623f240b3Sdrh 6 six cindy - - 39723f240b3Sdrh 7 seven - - - 39823f240b3Sdrh 8 - dave - - 39923f240b3Sdrh 9 - - - 999 40023f240b3Sdrh } 40123f240b3Sdrh do_execsql_test join9-$id.910 { 40223f240b3Sdrh SELECT * 40323f240b3Sdrh FROM t3 NATURAL FULL JOIN 40423f240b3Sdrh (t4 NATURAL FULL JOIN 40523f240b3Sdrh (t5 NATURAL FULL JOIN t6)) 40623f240b3Sdrh ORDER BY 1; 40723f240b3Sdrh } { 40823f240b3Sdrh 0 - - - 1000 40923f240b3Sdrh 1 - - red - 41023f240b3Sdrh 2 two alice orange - 41123f240b3Sdrh 3 three - yellow 333 41223f240b3Sdrh 4 - bob green 444 41323f240b3Sdrh 5 - - blue 555 41423f240b3Sdrh 6 six cindy - - 41523f240b3Sdrh 7 seven - - - 41623f240b3Sdrh 8 - dave - - 41723f240b3Sdrh 9 - - - 999 41823f240b3Sdrh } 4197466d566Sdrh do_execsql_test join9-$id.920 { 4207466d566Sdrh SELECT * 4217466d566Sdrh FROM t3 FULL JOIN ( 4227466d566Sdrh t4 FULL JOIN ( 4237466d566Sdrh t5 FULL JOIN t6 USING (id) 4247466d566Sdrh ) USING(id) 4257466d566Sdrh ) USING(id) 4267466d566Sdrh ORDER BY 1; 4277466d566Sdrh } { 4287466d566Sdrh 0 - - - 1000 4297466d566Sdrh 1 - - red - 4307466d566Sdrh 2 two alice orange - 4317466d566Sdrh 3 three - yellow 333 4327466d566Sdrh 4 - bob green 444 4337466d566Sdrh 5 - - blue 555 4347466d566Sdrh 6 six cindy - - 4357466d566Sdrh 7 seven - - - 4367466d566Sdrh 8 - dave - - 4377466d566Sdrh 9 - - - 999 4387466d566Sdrh } 439ec39c964Sdrh do_execsql_test join9-$id.920 { 440ec39c964Sdrh SELECT * 441ec39c964Sdrh FROM t3 FULL JOIN ( 442ec39c964Sdrh t4 FULL JOIN ( 443ec39c964Sdrh t5 FULL JOIN t6 USING (id) 444ec39c964Sdrh ) USING(id) 445ec39c964Sdrh ) USING(id) 446ec39c964Sdrh ORDER BY 1; 447ec39c964Sdrh } { 448ec39c964Sdrh 0 - - - 1000 449ec39c964Sdrh 1 - - red - 450ec39c964Sdrh 2 two alice orange - 451ec39c964Sdrh 3 three - yellow 333 452ec39c964Sdrh 4 - bob green 444 453ec39c964Sdrh 5 - - blue 555 454ec39c964Sdrh 6 six cindy - - 455ec39c964Sdrh 7 seven - - - 456ec39c964Sdrh 8 - dave - - 457ec39c964Sdrh 9 - - - 999 458ec39c964Sdrh } 459ec39c964Sdrh 460ec39c964Sdrh # Verified by PG-14 461ec39c964Sdrh do_execsql_test join9-$id.930 { 462ec39c964Sdrh SELECT * 463ec39c964Sdrh FROM t3 FULL JOIN ( 464ec39c964Sdrh t4 FULL JOIN ( 465ec39c964Sdrh t5 FULL JOIN t6 USING(id) 466ec39c964Sdrh ) USING(id) 467ec39c964Sdrh ) AS j1 ON j1.id=t3.id 468ec39c964Sdrh ORDER BY coalesce(t3.id,j1.id); 469ec39c964Sdrh } { 470ec39c964Sdrh - - 0 - - 1000 471ec39c964Sdrh - - 1 - red - 472ec39c964Sdrh 2 two 2 alice orange - 473ec39c964Sdrh 3 three 3 - yellow 333 474ec39c964Sdrh - - 4 bob green 444 475ec39c964Sdrh - - 5 - blue 555 476ec39c964Sdrh 6 six 6 cindy - - 477ec39c964Sdrh 7 seven - - - - 478ec39c964Sdrh - - 8 dave - - 479ec39c964Sdrh - - 9 - - 999 480ec39c964Sdrh } 481ec39c964Sdrh 482ec39c964Sdrh # Verified by PG-14 483ec39c964Sdrh do_execsql_test join9-$id.940 { 484ec39c964Sdrh SELECT * 485ec39c964Sdrh FROM t3 FULL JOIN ( 486ec39c964Sdrh t4 RIGHT JOIN ( 487ec39c964Sdrh t5 FULL JOIN t6 USING(id) 488ec39c964Sdrh ) USING(id) 489ec39c964Sdrh ) AS j1 ON j1.id=t3.id 490ec39c964Sdrh ORDER BY coalesce(t3.id,j1.id); 491ec39c964Sdrh } { 492ec39c964Sdrh - - 0 - - 1000 493ec39c964Sdrh - - 1 - red - 494ec39c964Sdrh 2 two 2 alice orange - 495ec39c964Sdrh 3 three 3 - yellow 333 496ec39c964Sdrh - - 4 bob green 444 497ec39c964Sdrh - - 5 - blue 555 498ec39c964Sdrh 6 six - - - - 499ec39c964Sdrh 7 seven - - - - 500ec39c964Sdrh - - 9 - - 999 501ec39c964Sdrh } 502ec39c964Sdrh 503ec39c964Sdrh # Verified by PG-14 504ec39c964Sdrh do_execsql_test join9-$id.950 { 505ec39c964Sdrh SELECT * 506ec39c964Sdrh FROM t3 FULL JOIN ( 507ec39c964Sdrh t4 LEFT JOIN ( 508ec39c964Sdrh t5 FULL JOIN t6 USING(id) 509ec39c964Sdrh ) USING(id) 510ec39c964Sdrh ) AS j1 ON j1.id=t3.id 511ec39c964Sdrh ORDER BY coalesce(t3.id,j1.id); 512ec39c964Sdrh } { 513ec39c964Sdrh 2 two 2 alice orange - 514ec39c964Sdrh 3 three - - - - 515ec39c964Sdrh - - 4 bob green 444 516ec39c964Sdrh 6 six 6 cindy - - 517ec39c964Sdrh 7 seven - - - - 518ec39c964Sdrh - - 8 dave - - 519ec39c964Sdrh } 520ec39c964Sdrh 521*1c2bf41aSdrh # Restriction (27) in the query flattener 522ec39c964Sdrh # Verified by PG-14 523ec39c964Sdrh do_execsql_test join9-$id.1000 { 524ec39c964Sdrh WITH t56(id,y,z) AS (SELECT * FROM t5 FULL JOIN t6 USING(id) LIMIT 50) 525ec39c964Sdrh SELECT id,x,y,z FROM t4 JOIN t56 USING(id) 526ec39c964Sdrh ORDER BY 1; 527ec39c964Sdrh } { 528ec39c964Sdrh 2 alice orange - 529ec39c964Sdrh 4 bob green 444 530ec39c964Sdrh } 531ec39c964Sdrh 532ec39c964Sdrh # Verified by PG-14 533ec39c964Sdrh do_execsql_test join9-$id.1010 { 534ec39c964Sdrh SELECT id,x,y,z 535ec39c964Sdrh FROM t4 INNER JOIN (t5 FULL JOIN t6 USING(id)) USING(id) 536ec39c964Sdrh ORDER BY 1; 537ec39c964Sdrh } { 538ec39c964Sdrh 2 alice orange - 539ec39c964Sdrh 4 bob green 444 540ec39c964Sdrh } 541ec39c964Sdrh 542*1c2bf41aSdrh # Verified by PG-14 543*1c2bf41aSdrh do_execsql_test join9-$id.1020 { 544*1c2bf41aSdrh SELECT id,x,y,z 545*1c2bf41aSdrh FROM t4 FULL JOIN t5 USING(id) INNER JOIN t6 USING(id) 546*1c2bf41aSdrh ORDER BY 1; 547*1c2bf41aSdrh } { 548*1c2bf41aSdrh 3 - yellow 333 549*1c2bf41aSdrh 4 bob green 444 550*1c2bf41aSdrh 5 - blue 555 551*1c2bf41aSdrh } 552*1c2bf41aSdrh 553*1c2bf41aSdrh # Verified by PG-14 554*1c2bf41aSdrh do_execsql_test join9-$id.1030 { 555*1c2bf41aSdrh WITH t45(id,x,y) AS (SELECT * FROM t4 FULL JOIN t5 USING(id) LIMIT 50) 556*1c2bf41aSdrh SELECT id,x,y,z FROM t45 JOIN t6 USING(id) 557*1c2bf41aSdrh ORDER BY 1; 558*1c2bf41aSdrh } { 559*1c2bf41aSdrh 3 - yellow 333 560*1c2bf41aSdrh 4 bob green 444 561*1c2bf41aSdrh 5 - blue 555 562*1c2bf41aSdrh } 563*1c2bf41aSdrh 564bdbda1ebSdrh} 565bdbda1ebSdrhfinish_test 566