xref: /sqlite-3.40.0/test/join9.test (revision 1c2bf41a)
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