xref: /sqlite-3.40.0/test/joinD.test (revision 77874e78)
1# 2022-05-04
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# This file implements tests for JOINs that use Bloom filters.
13#
14# The test case output is (mostly) all generated by PostgreSQL 14.  This
15# test module was created as follows:
16#
17#   1.   Run a TCL script (included at the bottom of this file) that
18#        generates an input script for "psql" that will run man
19#        diverse tests on joins.
20#
21#   2.   Run the script from step (1) through psql and collect the
22#        output.
23#
24#   3.   Make a few minor global search-and-replace operations to convert
25#        the psql output into a form suitable for this test module.
26#
27#   4.   Add this header, and the script content at the footer.
28#
29# A few extra tests that were not generated from postgresql output are
30# added at the end.
31#
32set testdir [file dirname $argv0]
33source $testdir/tester.tcl
34db nullvalue -
35db eval {
36  CREATE TABLE t1(a INT, b INT, c INT, d INT);
37  WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<95)
38    INSERT INTO t1(a,b,c,d) SELECT x, x+100, x+200, x+300 FROM c;
39  CREATE TABLE t2(b INT, x INT);
40  INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%2=0;
41  CREATE INDEX t2b ON t2(b);
42  CREATE TABLE t3(c INT, y INT);
43  INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%3=0;
44  CREATE INDEX t3c ON t3(c);
45  CREATE TABLE t4(d INT, z INT);
46  INSERT INTO t4(d,z) SELECT d, a FROM t1 WHERE a%5=0;
47  CREATE INDEX t4d ON t4(d);
48  INSERT INTO t1(a,b,c,d) VALUES
49    (96,NULL,296,396),
50    (97,197,NULL,397),
51    (98,198,298,NULL),
52    (99,NULL,NULL,NULL);
53  ANALYZE;
54}
55do_execsql_test joinD-1 {
56  SELECT t1.*, t2.*, t3.*, t4.*
57  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
58  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
59  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
60  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
61} {
62  30 130 230 330 130 30 230 30 330 30
63  60 160 260 360 160 60 260 60 360 60
64  90 190 290 390 190 90 290 90 390 90
65}
66do_execsql_test joinD-2 {
67  SELECT t1.*, t2.*, t3.*, t4.*
68  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
69  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
70  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
71  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
72} {
73   6 106 206 306 106  6 206  6   -  -
74  12 112 212 312 112 12 212 12   -  -
75  18 118 218 318 118 18 218 18   -  -
76  24 124 224 324 124 24 224 24   -  -
77  30 130 230 330 130 30 230 30 330 30
78  36 136 236 336 136 36 236 36   -  -
79  42 142 242 342 142 42 242 42   -  -
80  48 148 248 348 148 48 248 48   -  -
81  54 154 254 354 154 54 254 54   -  -
82  60 160 260 360 160 60 260 60 360 60
83  66 166 266 366 166 66 266 66   -  -
84  72 172 272 372 172 72 272 72   -  -
85  78 178 278 378 178 78 278 78   -  -
86  84 184 284 384 184 84 284 84   -  -
87  90 190 290 390 190 90 290 90 390 90
88}
89do_execsql_test joinD-3 {
90  SELECT t1.*, t2.*, t3.*, t4.*
91  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
92  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
93  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
94  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
95} {
96  30 130 230 330 130 30 230 30 330 30
97  60 160 260 360 160 60 260 60 360 60
98  90 190 290 390 190 90 290 90 390 90
99   -   -   -   -   -  -   -  - 300  0
100   -   -   -   -   -  -   -  - 305  5
101   -   -   -   -   -  -   -  - 310 10
102   -   -   -   -   -  -   -  - 315 15
103   -   -   -   -   -  -   -  - 320 20
104   -   -   -   -   -  -   -  - 325 25
105   -   -   -   -   -  -   -  - 335 35
106   -   -   -   -   -  -   -  - 340 40
107   -   -   -   -   -  -   -  - 345 45
108   -   -   -   -   -  -   -  - 350 50
109   -   -   -   -   -  -   -  - 355 55
110   -   -   -   -   -  -   -  - 365 65
111   -   -   -   -   -  -   -  - 370 70
112   -   -   -   -   -  -   -  - 375 75
113   -   -   -   -   -  -   -  - 380 80
114   -   -   -   -   -  -   -  - 385 85
115   -   -   -   -   -  -   -  - 395 95
116}
117do_execsql_test joinD-4 {
118  SELECT t1.*, t2.*, t3.*, t4.*
119  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
120  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
121  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
122  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
123} {
124   6 106 206 306 106  6 206  6   -  -
125  12 112 212 312 112 12 212 12   -  -
126  18 118 218 318 118 18 218 18   -  -
127  24 124 224 324 124 24 224 24   -  -
128  30 130 230 330 130 30 230 30 330 30
129  36 136 236 336 136 36 236 36   -  -
130  42 142 242 342 142 42 242 42   -  -
131  48 148 248 348 148 48 248 48   -  -
132  54 154 254 354 154 54 254 54   -  -
133  60 160 260 360 160 60 260 60 360 60
134  66 166 266 366 166 66 266 66   -  -
135  72 172 272 372 172 72 272 72   -  -
136  78 178 278 378 178 78 278 78   -  -
137  84 184 284 384 184 84 284 84   -  -
138  90 190 290 390 190 90 290 90 390 90
139   -   -   -   -   -  -   -  - 300  0
140   -   -   -   -   -  -   -  - 305  5
141   -   -   -   -   -  -   -  - 310 10
142   -   -   -   -   -  -   -  - 315 15
143   -   -   -   -   -  -   -  - 320 20
144   -   -   -   -   -  -   -  - 325 25
145   -   -   -   -   -  -   -  - 335 35
146   -   -   -   -   -  -   -  - 340 40
147   -   -   -   -   -  -   -  - 345 45
148   -   -   -   -   -  -   -  - 350 50
149   -   -   -   -   -  -   -  - 355 55
150   -   -   -   -   -  -   -  - 365 65
151   -   -   -   -   -  -   -  - 370 70
152   -   -   -   -   -  -   -  - 375 75
153   -   -   -   -   -  -   -  - 380 80
154   -   -   -   -   -  -   -  - 385 85
155   -   -   -   -   -  -   -  - 395 95
156}
157do_execsql_test joinD-5 {
158  SELECT t1.*, t2.*, t3.*, t4.*
159  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
160  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
161  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
162  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
163} {
164  10 110 210 310 110 10   -  - 310 10
165  20 120 220 320 120 20   -  - 320 20
166  30 130 230 330 130 30 230 30 330 30
167  40 140 240 340 140 40   -  - 340 40
168  50 150 250 350 150 50   -  - 350 50
169  60 160 260 360 160 60 260 60 360 60
170  70 170 270 370 170 70   -  - 370 70
171  80 180 280 380 180 80   -  - 380 80
172  90 190 290 390 190 90 290 90 390 90
173}
174do_execsql_test joinD-6 {
175  SELECT t1.*, t2.*, t3.*, t4.*
176  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
177  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
178  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
179  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
180} {
181   2 102 202 302 102  2   -  -   -  -
182   4 104 204 304 104  4   -  -   -  -
183   6 106 206 306 106  6 206  6   -  -
184   8 108 208 308 108  8   -  -   -  -
185  10 110 210 310 110 10   -  - 310 10
186  12 112 212 312 112 12 212 12   -  -
187  14 114 214 314 114 14   -  -   -  -
188  16 116 216 316 116 16   -  -   -  -
189  18 118 218 318 118 18 218 18   -  -
190  20 120 220 320 120 20   -  - 320 20
191  22 122 222 322 122 22   -  -   -  -
192  24 124 224 324 124 24 224 24   -  -
193  26 126 226 326 126 26   -  -   -  -
194  28 128 228 328 128 28   -  -   -  -
195  30 130 230 330 130 30 230 30 330 30
196  32 132 232 332 132 32   -  -   -  -
197  34 134 234 334 134 34   -  -   -  -
198  36 136 236 336 136 36 236 36   -  -
199  38 138 238 338 138 38   -  -   -  -
200  40 140 240 340 140 40   -  - 340 40
201  42 142 242 342 142 42 242 42   -  -
202  44 144 244 344 144 44   -  -   -  -
203  46 146 246 346 146 46   -  -   -  -
204  48 148 248 348 148 48 248 48   -  -
205  50 150 250 350 150 50   -  - 350 50
206  52 152 252 352 152 52   -  -   -  -
207  54 154 254 354 154 54 254 54   -  -
208  56 156 256 356 156 56   -  -   -  -
209  58 158 258 358 158 58   -  -   -  -
210  60 160 260 360 160 60 260 60 360 60
211  62 162 262 362 162 62   -  -   -  -
212  64 164 264 364 164 64   -  -   -  -
213  66 166 266 366 166 66 266 66   -  -
214  68 168 268 368 168 68   -  -   -  -
215  70 170 270 370 170 70   -  - 370 70
216  72 172 272 372 172 72 272 72   -  -
217  74 174 274 374 174 74   -  -   -  -
218  76 176 276 376 176 76   -  -   -  -
219  78 178 278 378 178 78 278 78   -  -
220  80 180 280 380 180 80   -  - 380 80
221  82 182 282 382 182 82   -  -   -  -
222  84 184 284 384 184 84 284 84   -  -
223  86 186 286 386 186 86   -  -   -  -
224  88 188 288 388 188 88   -  -   -  -
225  90 190 290 390 190 90 290 90 390 90
226  92 192 292 392 192 92   -  -   -  -
227  94 194 294 394 194 94   -  -   -  -
228}
229do_execsql_test joinD-7 {
230  SELECT t1.*, t2.*, t3.*, t4.*
231  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
232  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
233  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
234  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
235} {
236  10 110 210 310 110 10   -  - 310 10
237  20 120 220 320 120 20   -  - 320 20
238  30 130 230 330 130 30 230 30 330 30
239  40 140 240 340 140 40   -  - 340 40
240  50 150 250 350 150 50   -  - 350 50
241  60 160 260 360 160 60 260 60 360 60
242  70 170 270 370 170 70   -  - 370 70
243  80 180 280 380 180 80   -  - 380 80
244  90 190 290 390 190 90 290 90 390 90
245   -   -   -   -   -  -   -  - 300  0
246   -   -   -   -   -  -   -  - 305  5
247   -   -   -   -   -  -   -  - 315 15
248   -   -   -   -   -  -   -  - 325 25
249   -   -   -   -   -  -   -  - 335 35
250   -   -   -   -   -  -   -  - 345 45
251   -   -   -   -   -  -   -  - 355 55
252   -   -   -   -   -  -   -  - 365 65
253   -   -   -   -   -  -   -  - 375 75
254   -   -   -   -   -  -   -  - 385 85
255   -   -   -   -   -  -   -  - 395 95
256}
257do_execsql_test joinD-8 {
258  SELECT t1.*, t2.*, t3.*, t4.*
259  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
260  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
261  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
262  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
263} {
264   2 102 202 302 102  2   -  -   -  -
265   4 104 204 304 104  4   -  -   -  -
266   6 106 206 306 106  6 206  6   -  -
267   8 108 208 308 108  8   -  -   -  -
268  10 110 210 310 110 10   -  - 310 10
269  12 112 212 312 112 12 212 12   -  -
270  14 114 214 314 114 14   -  -   -  -
271  16 116 216 316 116 16   -  -   -  -
272  18 118 218 318 118 18 218 18   -  -
273  20 120 220 320 120 20   -  - 320 20
274  22 122 222 322 122 22   -  -   -  -
275  24 124 224 324 124 24 224 24   -  -
276  26 126 226 326 126 26   -  -   -  -
277  28 128 228 328 128 28   -  -   -  -
278  30 130 230 330 130 30 230 30 330 30
279  32 132 232 332 132 32   -  -   -  -
280  34 134 234 334 134 34   -  -   -  -
281  36 136 236 336 136 36 236 36   -  -
282  38 138 238 338 138 38   -  -   -  -
283  40 140 240 340 140 40   -  - 340 40
284  42 142 242 342 142 42 242 42   -  -
285  44 144 244 344 144 44   -  -   -  -
286  46 146 246 346 146 46   -  -   -  -
287  48 148 248 348 148 48 248 48   -  -
288  50 150 250 350 150 50   -  - 350 50
289  52 152 252 352 152 52   -  -   -  -
290  54 154 254 354 154 54 254 54   -  -
291  56 156 256 356 156 56   -  -   -  -
292  58 158 258 358 158 58   -  -   -  -
293  60 160 260 360 160 60 260 60 360 60
294  62 162 262 362 162 62   -  -   -  -
295  64 164 264 364 164 64   -  -   -  -
296  66 166 266 366 166 66 266 66   -  -
297  68 168 268 368 168 68   -  -   -  -
298  70 170 270 370 170 70   -  - 370 70
299  72 172 272 372 172 72 272 72   -  -
300  74 174 274 374 174 74   -  -   -  -
301  76 176 276 376 176 76   -  -   -  -
302  78 178 278 378 178 78 278 78   -  -
303  80 180 280 380 180 80   -  - 380 80
304  82 182 282 382 182 82   -  -   -  -
305  84 184 284 384 184 84 284 84   -  -
306  86 186 286 386 186 86   -  -   -  -
307  88 188 288 388 188 88   -  -   -  -
308  90 190 290 390 190 90 290 90 390 90
309  92 192 292 392 192 92   -  -   -  -
310  94 194 294 394 194 94   -  -   -  -
311   -   -   -   -   -  -   -  - 300  0
312   -   -   -   -   -  -   -  - 305  5
313   -   -   -   -   -  -   -  - 315 15
314   -   -   -   -   -  -   -  - 325 25
315   -   -   -   -   -  -   -  - 335 35
316   -   -   -   -   -  -   -  - 345 45
317   -   -   -   -   -  -   -  - 355 55
318   -   -   -   -   -  -   -  - 365 65
319   -   -   -   -   -  -   -  - 375 75
320   -   -   -   -   -  -   -  - 385 85
321   -   -   -   -   -  -   -  - 395 95
322}
323do_execsql_test joinD-9 {
324  SELECT t1.*, t2.*, t3.*, t4.*
325  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
326  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
327  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
328  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
329} {
330  30 130 230 330 130 30 230 30 330 30
331  60 160 260 360 160 60 260 60 360 60
332  90 190 290 390 190 90 290 90 390 90
333}
334do_execsql_test joinD-10 {
335  SELECT t1.*, t2.*, t3.*, t4.*
336  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
337  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
338  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
339  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
340} {
341   6 106 206 306 106  6 206  6   -  -
342  12 112 212 312 112 12 212 12   -  -
343  18 118 218 318 118 18 218 18   -  -
344  24 124 224 324 124 24 224 24   -  -
345  30 130 230 330 130 30 230 30 330 30
346  36 136 236 336 136 36 236 36   -  -
347  42 142 242 342 142 42 242 42   -  -
348  48 148 248 348 148 48 248 48   -  -
349  54 154 254 354 154 54 254 54   -  -
350  60 160 260 360 160 60 260 60 360 60
351  66 166 266 366 166 66 266 66   -  -
352  72 172 272 372 172 72 272 72   -  -
353  78 178 278 378 178 78 278 78   -  -
354  84 184 284 384 184 84 284 84   -  -
355  90 190 290 390 190 90 290 90 390 90
356   -   -   -   -   -  - 200  0   -  -
357   -   -   -   -   -  - 203  3   -  -
358   -   -   -   -   -  - 209  9   -  -
359   -   -   -   -   -  - 215 15   -  -
360   -   -   -   -   -  - 221 21   -  -
361   -   -   -   -   -  - 227 27   -  -
362   -   -   -   -   -  - 233 33   -  -
363   -   -   -   -   -  - 239 39   -  -
364   -   -   -   -   -  - 245 45   -  -
365   -   -   -   -   -  - 251 51   -  -
366   -   -   -   -   -  - 257 57   -  -
367   -   -   -   -   -  - 263 63   -  -
368   -   -   -   -   -  - 269 69   -  -
369   -   -   -   -   -  - 275 75   -  -
370   -   -   -   -   -  - 281 81   -  -
371   -   -   -   -   -  - 287 87   -  -
372   -   -   -   -   -  - 293 93   -  -
373}
374do_execsql_test joinD-11 {
375  SELECT t1.*, t2.*, t3.*, t4.*
376  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
377  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
378  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
379  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
380} {
381  30 130 230 330 130 30 230 30 330 30
382  60 160 260 360 160 60 260 60 360 60
383  90 190 290 390 190 90 290 90 390 90
384   -   -   -   -   -  -   -  - 300  0
385   -   -   -   -   -  -   -  - 305  5
386   -   -   -   -   -  -   -  - 310 10
387   -   -   -   -   -  -   -  - 315 15
388   -   -   -   -   -  -   -  - 320 20
389   -   -   -   -   -  -   -  - 325 25
390   -   -   -   -   -  -   -  - 335 35
391   -   -   -   -   -  -   -  - 340 40
392   -   -   -   -   -  -   -  - 345 45
393   -   -   -   -   -  -   -  - 350 50
394   -   -   -   -   -  -   -  - 355 55
395   -   -   -   -   -  -   -  - 365 65
396   -   -   -   -   -  -   -  - 370 70
397   -   -   -   -   -  -   -  - 375 75
398   -   -   -   -   -  -   -  - 380 80
399   -   -   -   -   -  -   -  - 385 85
400   -   -   -   -   -  -   -  - 395 95
401}
402do_execsql_test joinD-12 {
403  SELECT t1.*, t2.*, t3.*, t4.*
404  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
405  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
406  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
407  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
408} {
409   6 106 206 306 106  6 206  6   -  -
410  12 112 212 312 112 12 212 12   -  -
411  18 118 218 318 118 18 218 18   -  -
412  24 124 224 324 124 24 224 24   -  -
413  30 130 230 330 130 30 230 30 330 30
414  36 136 236 336 136 36 236 36   -  -
415  42 142 242 342 142 42 242 42   -  -
416  48 148 248 348 148 48 248 48   -  -
417  54 154 254 354 154 54 254 54   -  -
418  60 160 260 360 160 60 260 60 360 60
419  66 166 266 366 166 66 266 66   -  -
420  72 172 272 372 172 72 272 72   -  -
421  78 178 278 378 178 78 278 78   -  -
422  84 184 284 384 184 84 284 84   -  -
423  90 190 290 390 190 90 290 90 390 90
424   -   -   -   -   -  - 200  0   -  -
425   -   -   -   -   -  - 203  3   -  -
426   -   -   -   -   -  - 209  9   -  -
427   -   -   -   -   -  - 215 15   -  -
428   -   -   -   -   -  - 221 21   -  -
429   -   -   -   -   -  - 227 27   -  -
430   -   -   -   -   -  - 233 33   -  -
431   -   -   -   -   -  - 239 39   -  -
432   -   -   -   -   -  - 245 45   -  -
433   -   -   -   -   -  - 251 51   -  -
434   -   -   -   -   -  - 257 57   -  -
435   -   -   -   -   -  - 263 63   -  -
436   -   -   -   -   -  - 269 69   -  -
437   -   -   -   -   -  - 275 75   -  -
438   -   -   -   -   -  - 281 81   -  -
439   -   -   -   -   -  - 287 87   -  -
440   -   -   -   -   -  - 293 93   -  -
441   -   -   -   -   -  -   -  - 300  0
442   -   -   -   -   -  -   -  - 305  5
443   -   -   -   -   -  -   -  - 310 10
444   -   -   -   -   -  -   -  - 315 15
445   -   -   -   -   -  -   -  - 320 20
446   -   -   -   -   -  -   -  - 325 25
447   -   -   -   -   -  -   -  - 335 35
448   -   -   -   -   -  -   -  - 340 40
449   -   -   -   -   -  -   -  - 345 45
450   -   -   -   -   -  -   -  - 350 50
451   -   -   -   -   -  -   -  - 355 55
452   -   -   -   -   -  -   -  - 365 65
453   -   -   -   -   -  -   -  - 370 70
454   -   -   -   -   -  -   -  - 375 75
455   -   -   -   -   -  -   -  - 380 80
456   -   -   -   -   -  -   -  - 385 85
457   -   -   -   -   -  -   -  - 395 95
458}
459do_execsql_test joinD-13 {
460  SELECT t1.*, t2.*, t3.*, t4.*
461  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
462  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
463  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
464  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
465} {
466  10 110 210 310 110 10   -  - 310 10
467  20 120 220 320 120 20   -  - 320 20
468  30 130 230 330 130 30 230 30 330 30
469  40 140 240 340 140 40   -  - 340 40
470  50 150 250 350 150 50   -  - 350 50
471  60 160 260 360 160 60 260 60 360 60
472  70 170 270 370 170 70   -  - 370 70
473  80 180 280 380 180 80   -  - 380 80
474  90 190 290 390 190 90 290 90 390 90
475}
476do_execsql_test joinD-14 {
477  SELECT t1.*, t2.*, t3.*, t4.*
478  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
479  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
480  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
481  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
482} {
483   2 102 202 302 102  2   -  -   -  -
484   4 104 204 304 104  4   -  -   -  -
485   6 106 206 306 106  6 206  6   -  -
486   8 108 208 308 108  8   -  -   -  -
487  10 110 210 310 110 10   -  - 310 10
488  12 112 212 312 112 12 212 12   -  -
489  14 114 214 314 114 14   -  -   -  -
490  16 116 216 316 116 16   -  -   -  -
491  18 118 218 318 118 18 218 18   -  -
492  20 120 220 320 120 20   -  - 320 20
493  22 122 222 322 122 22   -  -   -  -
494  24 124 224 324 124 24 224 24   -  -
495  26 126 226 326 126 26   -  -   -  -
496  28 128 228 328 128 28   -  -   -  -
497  30 130 230 330 130 30 230 30 330 30
498  32 132 232 332 132 32   -  -   -  -
499  34 134 234 334 134 34   -  -   -  -
500  36 136 236 336 136 36 236 36   -  -
501  38 138 238 338 138 38   -  -   -  -
502  40 140 240 340 140 40   -  - 340 40
503  42 142 242 342 142 42 242 42   -  -
504  44 144 244 344 144 44   -  -   -  -
505  46 146 246 346 146 46   -  -   -  -
506  48 148 248 348 148 48 248 48   -  -
507  50 150 250 350 150 50   -  - 350 50
508  52 152 252 352 152 52   -  -   -  -
509  54 154 254 354 154 54 254 54   -  -
510  56 156 256 356 156 56   -  -   -  -
511  58 158 258 358 158 58   -  -   -  -
512  60 160 260 360 160 60 260 60 360 60
513  62 162 262 362 162 62   -  -   -  -
514  64 164 264 364 164 64   -  -   -  -
515  66 166 266 366 166 66 266 66   -  -
516  68 168 268 368 168 68   -  -   -  -
517  70 170 270 370 170 70   -  - 370 70
518  72 172 272 372 172 72 272 72   -  -
519  74 174 274 374 174 74   -  -   -  -
520  76 176 276 376 176 76   -  -   -  -
521  78 178 278 378 178 78 278 78   -  -
522  80 180 280 380 180 80   -  - 380 80
523  82 182 282 382 182 82   -  -   -  -
524  84 184 284 384 184 84 284 84   -  -
525  86 186 286 386 186 86   -  -   -  -
526  88 188 288 388 188 88   -  -   -  -
527  90 190 290 390 190 90 290 90 390 90
528  92 192 292 392 192 92   -  -   -  -
529  94 194 294 394 194 94   -  -   -  -
530   -   -   -   -   -  - 200  0   -  -
531   -   -   -   -   -  - 203  3   -  -
532   -   -   -   -   -  - 209  9   -  -
533   -   -   -   -   -  - 215 15   -  -
534   -   -   -   -   -  - 221 21   -  -
535   -   -   -   -   -  - 227 27   -  -
536   -   -   -   -   -  - 233 33   -  -
537   -   -   -   -   -  - 239 39   -  -
538   -   -   -   -   -  - 245 45   -  -
539   -   -   -   -   -  - 251 51   -  -
540   -   -   -   -   -  - 257 57   -  -
541   -   -   -   -   -  - 263 63   -  -
542   -   -   -   -   -  - 269 69   -  -
543   -   -   -   -   -  - 275 75   -  -
544   -   -   -   -   -  - 281 81   -  -
545   -   -   -   -   -  - 287 87   -  -
546   -   -   -   -   -  - 293 93   -  -
547}
548do_execsql_test joinD-15 {
549  SELECT t1.*, t2.*, t3.*, t4.*
550  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
551  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
552  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
553  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
554} {
555  10 110 210 310 110 10   -  - 310 10
556  20 120 220 320 120 20   -  - 320 20
557  30 130 230 330 130 30 230 30 330 30
558  40 140 240 340 140 40   -  - 340 40
559  50 150 250 350 150 50   -  - 350 50
560  60 160 260 360 160 60 260 60 360 60
561  70 170 270 370 170 70   -  - 370 70
562  80 180 280 380 180 80   -  - 380 80
563  90 190 290 390 190 90 290 90 390 90
564   -   -   -   -   -  -   -  - 300  0
565   -   -   -   -   -  -   -  - 305  5
566   -   -   -   -   -  -   -  - 315 15
567   -   -   -   -   -  -   -  - 325 25
568   -   -   -   -   -  -   -  - 335 35
569   -   -   -   -   -  -   -  - 345 45
570   -   -   -   -   -  -   -  - 355 55
571   -   -   -   -   -  -   -  - 365 65
572   -   -   -   -   -  -   -  - 375 75
573   -   -   -   -   -  -   -  - 385 85
574   -   -   -   -   -  -   -  - 395 95
575}
576do_execsql_test joinD-16 {
577  SELECT t1.*, t2.*, t3.*, t4.*
578  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
579  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
580  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
581  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
582} {
583   2 102 202 302 102  2   -  -   -  -
584   4 104 204 304 104  4   -  -   -  -
585   6 106 206 306 106  6 206  6   -  -
586   8 108 208 308 108  8   -  -   -  -
587  10 110 210 310 110 10   -  - 310 10
588  12 112 212 312 112 12 212 12   -  -
589  14 114 214 314 114 14   -  -   -  -
590  16 116 216 316 116 16   -  -   -  -
591  18 118 218 318 118 18 218 18   -  -
592  20 120 220 320 120 20   -  - 320 20
593  22 122 222 322 122 22   -  -   -  -
594  24 124 224 324 124 24 224 24   -  -
595  26 126 226 326 126 26   -  -   -  -
596  28 128 228 328 128 28   -  -   -  -
597  30 130 230 330 130 30 230 30 330 30
598  32 132 232 332 132 32   -  -   -  -
599  34 134 234 334 134 34   -  -   -  -
600  36 136 236 336 136 36 236 36   -  -
601  38 138 238 338 138 38   -  -   -  -
602  40 140 240 340 140 40   -  - 340 40
603  42 142 242 342 142 42 242 42   -  -
604  44 144 244 344 144 44   -  -   -  -
605  46 146 246 346 146 46   -  -   -  -
606  48 148 248 348 148 48 248 48   -  -
607  50 150 250 350 150 50   -  - 350 50
608  52 152 252 352 152 52   -  -   -  -
609  54 154 254 354 154 54 254 54   -  -
610  56 156 256 356 156 56   -  -   -  -
611  58 158 258 358 158 58   -  -   -  -
612  60 160 260 360 160 60 260 60 360 60
613  62 162 262 362 162 62   -  -   -  -
614  64 164 264 364 164 64   -  -   -  -
615  66 166 266 366 166 66 266 66   -  -
616  68 168 268 368 168 68   -  -   -  -
617  70 170 270 370 170 70   -  - 370 70
618  72 172 272 372 172 72 272 72   -  -
619  74 174 274 374 174 74   -  -   -  -
620  76 176 276 376 176 76   -  -   -  -
621  78 178 278 378 178 78 278 78   -  -
622  80 180 280 380 180 80   -  - 380 80
623  82 182 282 382 182 82   -  -   -  -
624  84 184 284 384 184 84 284 84   -  -
625  86 186 286 386 186 86   -  -   -  -
626  88 188 288 388 188 88   -  -   -  -
627  90 190 290 390 190 90 290 90 390 90
628  92 192 292 392 192 92   -  -   -  -
629  94 194 294 394 194 94   -  -   -  -
630   -   -   -   -   -  - 200  0   -  -
631   -   -   -   -   -  - 203  3   -  -
632   -   -   -   -   -  - 209  9   -  -
633   -   -   -   -   -  - 215 15   -  -
634   -   -   -   -   -  - 221 21   -  -
635   -   -   -   -   -  - 227 27   -  -
636   -   -   -   -   -  - 233 33   -  -
637   -   -   -   -   -  - 239 39   -  -
638   -   -   -   -   -  - 245 45   -  -
639   -   -   -   -   -  - 251 51   -  -
640   -   -   -   -   -  - 257 57   -  -
641   -   -   -   -   -  - 263 63   -  -
642   -   -   -   -   -  - 269 69   -  -
643   -   -   -   -   -  - 275 75   -  -
644   -   -   -   -   -  - 281 81   -  -
645   -   -   -   -   -  - 287 87   -  -
646   -   -   -   -   -  - 293 93   -  -
647   -   -   -   -   -  -   -  - 300  0
648   -   -   -   -   -  -   -  - 305  5
649   -   -   -   -   -  -   -  - 315 15
650   -   -   -   -   -  -   -  - 325 25
651   -   -   -   -   -  -   -  - 335 35
652   -   -   -   -   -  -   -  - 345 45
653   -   -   -   -   -  -   -  - 355 55
654   -   -   -   -   -  -   -  - 365 65
655   -   -   -   -   -  -   -  - 375 75
656   -   -   -   -   -  -   -  - 385 85
657   -   -   -   -   -  -   -  - 395 95
658}
659do_execsql_test joinD-17 {
660  SELECT t1.*, t2.*, t3.*, t4.*
661  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
662  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
663  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
664  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
665} {
666  15 115 215 315   -  - 215 15 315 15
667  30 130 230 330 130 30 230 30 330 30
668  45 145 245 345   -  - 245 45 345 45
669  60 160 260 360 160 60 260 60 360 60
670  75 175 275 375   -  - 275 75 375 75
671  90 190 290 390 190 90 290 90 390 90
672}
673do_execsql_test joinD-18 {
674  SELECT t1.*, t2.*, t3.*, t4.*
675  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
676  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
677  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
678  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
679} {
680   3 103 203 303   -  - 203  3   -  -
681   6 106 206 306 106  6 206  6   -  -
682   9 109 209 309   -  - 209  9   -  -
683  12 112 212 312 112 12 212 12   -  -
684  15 115 215 315   -  - 215 15 315 15
685  18 118 218 318 118 18 218 18   -  -
686  21 121 221 321   -  - 221 21   -  -
687  24 124 224 324 124 24 224 24   -  -
688  27 127 227 327   -  - 227 27   -  -
689  30 130 230 330 130 30 230 30 330 30
690  33 133 233 333   -  - 233 33   -  -
691  36 136 236 336 136 36 236 36   -  -
692  39 139 239 339   -  - 239 39   -  -
693  42 142 242 342 142 42 242 42   -  -
694  45 145 245 345   -  - 245 45 345 45
695  48 148 248 348 148 48 248 48   -  -
696  51 151 251 351   -  - 251 51   -  -
697  54 154 254 354 154 54 254 54   -  -
698  57 157 257 357   -  - 257 57   -  -
699  60 160 260 360 160 60 260 60 360 60
700  63 163 263 363   -  - 263 63   -  -
701  66 166 266 366 166 66 266 66   -  -
702  69 169 269 369   -  - 269 69   -  -
703  72 172 272 372 172 72 272 72   -  -
704  75 175 275 375   -  - 275 75 375 75
705  78 178 278 378 178 78 278 78   -  -
706  81 181 281 381   -  - 281 81   -  -
707  84 184 284 384 184 84 284 84   -  -
708  87 187 287 387   -  - 287 87   -  -
709  90 190 290 390 190 90 290 90 390 90
710  93 193 293 393   -  - 293 93   -  -
711}
712do_execsql_test joinD-19 {
713  SELECT t1.*, t2.*, t3.*, t4.*
714  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
715  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
716  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
717  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
718} {
719  15 115 215 315   -  - 215 15 315 15
720  30 130 230 330 130 30 230 30 330 30
721  45 145 245 345   -  - 245 45 345 45
722  60 160 260 360 160 60 260 60 360 60
723  75 175 275 375   -  - 275 75 375 75
724  90 190 290 390 190 90 290 90 390 90
725   -   -   -   -   -  -   -  - 300  0
726   -   -   -   -   -  -   -  - 305  5
727   -   -   -   -   -  -   -  - 310 10
728   -   -   -   -   -  -   -  - 320 20
729   -   -   -   -   -  -   -  - 325 25
730   -   -   -   -   -  -   -  - 335 35
731   -   -   -   -   -  -   -  - 340 40
732   -   -   -   -   -  -   -  - 350 50
733   -   -   -   -   -  -   -  - 355 55
734   -   -   -   -   -  -   -  - 365 65
735   -   -   -   -   -  -   -  - 370 70
736   -   -   -   -   -  -   -  - 380 80
737   -   -   -   -   -  -   -  - 385 85
738   -   -   -   -   -  -   -  - 395 95
739}
740do_execsql_test joinD-20 {
741  SELECT t1.*, t2.*, t3.*, t4.*
742  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
743  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
744  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
745  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
746} {
747   3 103 203 303   -  - 203  3   -  -
748   6 106 206 306 106  6 206  6   -  -
749   9 109 209 309   -  - 209  9   -  -
750  12 112 212 312 112 12 212 12   -  -
751  15 115 215 315   -  - 215 15 315 15
752  18 118 218 318 118 18 218 18   -  -
753  21 121 221 321   -  - 221 21   -  -
754  24 124 224 324 124 24 224 24   -  -
755  27 127 227 327   -  - 227 27   -  -
756  30 130 230 330 130 30 230 30 330 30
757  33 133 233 333   -  - 233 33   -  -
758  36 136 236 336 136 36 236 36   -  -
759  39 139 239 339   -  - 239 39   -  -
760  42 142 242 342 142 42 242 42   -  -
761  45 145 245 345   -  - 245 45 345 45
762  48 148 248 348 148 48 248 48   -  -
763  51 151 251 351   -  - 251 51   -  -
764  54 154 254 354 154 54 254 54   -  -
765  57 157 257 357   -  - 257 57   -  -
766  60 160 260 360 160 60 260 60 360 60
767  63 163 263 363   -  - 263 63   -  -
768  66 166 266 366 166 66 266 66   -  -
769  69 169 269 369   -  - 269 69   -  -
770  72 172 272 372 172 72 272 72   -  -
771  75 175 275 375   -  - 275 75 375 75
772  78 178 278 378 178 78 278 78   -  -
773  81 181 281 381   -  - 281 81   -  -
774  84 184 284 384 184 84 284 84   -  -
775  87 187 287 387   -  - 287 87   -  -
776  90 190 290 390 190 90 290 90 390 90
777  93 193 293 393   -  - 293 93   -  -
778   -   -   -   -   -  -   -  - 300  0
779   -   -   -   -   -  -   -  - 305  5
780   -   -   -   -   -  -   -  - 310 10
781   -   -   -   -   -  -   -  - 320 20
782   -   -   -   -   -  -   -  - 325 25
783   -   -   -   -   -  -   -  - 335 35
784   -   -   -   -   -  -   -  - 340 40
785   -   -   -   -   -  -   -  - 350 50
786   -   -   -   -   -  -   -  - 355 55
787   -   -   -   -   -  -   -  - 365 65
788   -   -   -   -   -  -   -  - 370 70
789   -   -   -   -   -  -   -  - 380 80
790   -   -   -   -   -  -   -  - 385 85
791   -   -   -   -   -  -   -  - 395 95
792}
793do_execsql_test joinD-21 {
794  SELECT t1.*, t2.*, t3.*, t4.*
795  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
796  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
797  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
798  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
799} {
800   5 105 205 305   -  -   -  - 305  5
801  10 110 210 310 110 10   -  - 310 10
802  15 115 215 315   -  - 215 15 315 15
803  20 120 220 320 120 20   -  - 320 20
804  25 125 225 325   -  -   -  - 325 25
805  30 130 230 330 130 30 230 30 330 30
806  35 135 235 335   -  -   -  - 335 35
807  40 140 240 340 140 40   -  - 340 40
808  45 145 245 345   -  - 245 45 345 45
809  50 150 250 350 150 50   -  - 350 50
810  55 155 255 355   -  -   -  - 355 55
811  60 160 260 360 160 60 260 60 360 60
812  65 165 265 365   -  -   -  - 365 65
813  70 170 270 370 170 70   -  - 370 70
814  75 175 275 375   -  - 275 75 375 75
815  80 180 280 380 180 80   -  - 380 80
816  85 185 285 385   -  -   -  - 385 85
817  90 190 290 390 190 90 290 90 390 90
818  95 195 295 395   -  -   -  - 395 95
819}
820do_execsql_test joinD-22 {
821  SELECT t1.*, t2.*, t3.*, t4.*
822  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
823  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
824  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
825  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
826} {
827   0 100 200 300   -  -   -  -   -  -
828   1 101 201 301   -  -   -  -   -  -
829   2 102 202 302 102  2   -  -   -  -
830   3 103 203 303   -  - 203  3   -  -
831   4 104 204 304 104  4   -  -   -  -
832   5 105 205 305   -  -   -  - 305  5
833   6 106 206 306 106  6 206  6   -  -
834   7 107 207 307   -  -   -  -   -  -
835   8 108 208 308 108  8   -  -   -  -
836   9 109 209 309   -  - 209  9   -  -
837  10 110 210 310 110 10   -  - 310 10
838  11 111 211 311   -  -   -  -   -  -
839  12 112 212 312 112 12 212 12   -  -
840  13 113 213 313   -  -   -  -   -  -
841  14 114 214 314 114 14   -  -   -  -
842  15 115 215 315   -  - 215 15 315 15
843  16 116 216 316 116 16   -  -   -  -
844  17 117 217 317   -  -   -  -   -  -
845  18 118 218 318 118 18 218 18   -  -
846  19 119 219 319   -  -   -  -   -  -
847  20 120 220 320 120 20   -  - 320 20
848  21 121 221 321   -  - 221 21   -  -
849  22 122 222 322 122 22   -  -   -  -
850  23 123 223 323   -  -   -  -   -  -
851  24 124 224 324 124 24 224 24   -  -
852  25 125 225 325   -  -   -  - 325 25
853  26 126 226 326 126 26   -  -   -  -
854  27 127 227 327   -  - 227 27   -  -
855  28 128 228 328 128 28   -  -   -  -
856  29 129 229 329   -  -   -  -   -  -
857  30 130 230 330 130 30 230 30 330 30
858  31 131 231 331   -  -   -  -   -  -
859  32 132 232 332 132 32   -  -   -  -
860  33 133 233 333   -  - 233 33   -  -
861  34 134 234 334 134 34   -  -   -  -
862  35 135 235 335   -  -   -  - 335 35
863  36 136 236 336 136 36 236 36   -  -
864  37 137 237 337   -  -   -  -   -  -
865  38 138 238 338 138 38   -  -   -  -
866  39 139 239 339   -  - 239 39   -  -
867  40 140 240 340 140 40   -  - 340 40
868  41 141 241 341   -  -   -  -   -  -
869  42 142 242 342 142 42 242 42   -  -
870  43 143 243 343   -  -   -  -   -  -
871  44 144 244 344 144 44   -  -   -  -
872  45 145 245 345   -  - 245 45 345 45
873  46 146 246 346 146 46   -  -   -  -
874  47 147 247 347   -  -   -  -   -  -
875  48 148 248 348 148 48 248 48   -  -
876  49 149 249 349   -  -   -  -   -  -
877  50 150 250 350 150 50   -  - 350 50
878  51 151 251 351   -  - 251 51   -  -
879  52 152 252 352 152 52   -  -   -  -
880  53 153 253 353   -  -   -  -   -  -
881  54 154 254 354 154 54 254 54   -  -
882  55 155 255 355   -  -   -  - 355 55
883  56 156 256 356 156 56   -  -   -  -
884  57 157 257 357   -  - 257 57   -  -
885  58 158 258 358 158 58   -  -   -  -
886  59 159 259 359   -  -   -  -   -  -
887  60 160 260 360 160 60 260 60 360 60
888  61 161 261 361   -  -   -  -   -  -
889  62 162 262 362 162 62   -  -   -  -
890  63 163 263 363   -  - 263 63   -  -
891  64 164 264 364 164 64   -  -   -  -
892  65 165 265 365   -  -   -  - 365 65
893  66 166 266 366 166 66 266 66   -  -
894  67 167 267 367   -  -   -  -   -  -
895  68 168 268 368 168 68   -  -   -  -
896  69 169 269 369   -  - 269 69   -  -
897  70 170 270 370 170 70   -  - 370 70
898  71 171 271 371   -  -   -  -   -  -
899  72 172 272 372 172 72 272 72   -  -
900  73 173 273 373   -  -   -  -   -  -
901  74 174 274 374 174 74   -  -   -  -
902  75 175 275 375   -  - 275 75 375 75
903  76 176 276 376 176 76   -  -   -  -
904  77 177 277 377   -  -   -  -   -  -
905  78 178 278 378 178 78 278 78   -  -
906  79 179 279 379   -  -   -  -   -  -
907  80 180 280 380 180 80   -  - 380 80
908  81 181 281 381   -  - 281 81   -  -
909  82 182 282 382 182 82   -  -   -  -
910  83 183 283 383   -  -   -  -   -  -
911  84 184 284 384 184 84 284 84   -  -
912  85 185 285 385   -  -   -  - 385 85
913  86 186 286 386 186 86   -  -   -  -
914  87 187 287 387   -  - 287 87   -  -
915  88 188 288 388 188 88   -  -   -  -
916  89 189 289 389   -  -   -  -   -  -
917  90 190 290 390 190 90 290 90 390 90
918  91 191 291 391   -  -   -  -   -  -
919  92 192 292 392 192 92   -  -   -  -
920  93 193 293 393   -  - 293 93   -  -
921  94 194 294 394 194 94   -  -   -  -
922  95 195 295 395   -  -   -  - 395 95
923  96   - 296 396   -  -   -  -   -  -
924  97 197   - 397   -  -   -  -   -  -
925  98 198 298   -   -  -   -  -   -  -
926  99   -   -   -   -  -   -  -   -  -
927}
928do_execsql_test joinD-23 {
929  SELECT t1.*, t2.*, t3.*, t4.*
930  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
931  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
932  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
933  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
934} {
935   5 105 205 305   -  -   -  - 305  5
936  10 110 210 310 110 10   -  - 310 10
937  15 115 215 315   -  - 215 15 315 15
938  20 120 220 320 120 20   -  - 320 20
939  25 125 225 325   -  -   -  - 325 25
940  30 130 230 330 130 30 230 30 330 30
941  35 135 235 335   -  -   -  - 335 35
942  40 140 240 340 140 40   -  - 340 40
943  45 145 245 345   -  - 245 45 345 45
944  50 150 250 350 150 50   -  - 350 50
945  55 155 255 355   -  -   -  - 355 55
946  60 160 260 360 160 60 260 60 360 60
947  65 165 265 365   -  -   -  - 365 65
948  70 170 270 370 170 70   -  - 370 70
949  75 175 275 375   -  - 275 75 375 75
950  80 180 280 380 180 80   -  - 380 80
951  85 185 285 385   -  -   -  - 385 85
952  90 190 290 390 190 90 290 90 390 90
953  95 195 295 395   -  -   -  - 395 95
954   -   -   -   -   -  -   -  - 300  0
955}
956do_execsql_test joinD-24 {
957  SELECT t1.*, t2.*, t3.*, t4.*
958  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
959  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
960  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
961  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
962} {
963   0 100 200 300   -  -   -  -   -  -
964   1 101 201 301   -  -   -  -   -  -
965   2 102 202 302 102  2   -  -   -  -
966   3 103 203 303   -  - 203  3   -  -
967   4 104 204 304 104  4   -  -   -  -
968   5 105 205 305   -  -   -  - 305  5
969   6 106 206 306 106  6 206  6   -  -
970   7 107 207 307   -  -   -  -   -  -
971   8 108 208 308 108  8   -  -   -  -
972   9 109 209 309   -  - 209  9   -  -
973  10 110 210 310 110 10   -  - 310 10
974  11 111 211 311   -  -   -  -   -  -
975  12 112 212 312 112 12 212 12   -  -
976  13 113 213 313   -  -   -  -   -  -
977  14 114 214 314 114 14   -  -   -  -
978  15 115 215 315   -  - 215 15 315 15
979  16 116 216 316 116 16   -  -   -  -
980  17 117 217 317   -  -   -  -   -  -
981  18 118 218 318 118 18 218 18   -  -
982  19 119 219 319   -  -   -  -   -  -
983  20 120 220 320 120 20   -  - 320 20
984  21 121 221 321   -  - 221 21   -  -
985  22 122 222 322 122 22   -  -   -  -
986  23 123 223 323   -  -   -  -   -  -
987  24 124 224 324 124 24 224 24   -  -
988  25 125 225 325   -  -   -  - 325 25
989  26 126 226 326 126 26   -  -   -  -
990  27 127 227 327   -  - 227 27   -  -
991  28 128 228 328 128 28   -  -   -  -
992  29 129 229 329   -  -   -  -   -  -
993  30 130 230 330 130 30 230 30 330 30
994  31 131 231 331   -  -   -  -   -  -
995  32 132 232 332 132 32   -  -   -  -
996  33 133 233 333   -  - 233 33   -  -
997  34 134 234 334 134 34   -  -   -  -
998  35 135 235 335   -  -   -  - 335 35
999  36 136 236 336 136 36 236 36   -  -
1000  37 137 237 337   -  -   -  -   -  -
1001  38 138 238 338 138 38   -  -   -  -
1002  39 139 239 339   -  - 239 39   -  -
1003  40 140 240 340 140 40   -  - 340 40
1004  41 141 241 341   -  -   -  -   -  -
1005  42 142 242 342 142 42 242 42   -  -
1006  43 143 243 343   -  -   -  -   -  -
1007  44 144 244 344 144 44   -  -   -  -
1008  45 145 245 345   -  - 245 45 345 45
1009  46 146 246 346 146 46   -  -   -  -
1010  47 147 247 347   -  -   -  -   -  -
1011  48 148 248 348 148 48 248 48   -  -
1012  49 149 249 349   -  -   -  -   -  -
1013  50 150 250 350 150 50   -  - 350 50
1014  51 151 251 351   -  - 251 51   -  -
1015  52 152 252 352 152 52   -  -   -  -
1016  53 153 253 353   -  -   -  -   -  -
1017  54 154 254 354 154 54 254 54   -  -
1018  55 155 255 355   -  -   -  - 355 55
1019  56 156 256 356 156 56   -  -   -  -
1020  57 157 257 357   -  - 257 57   -  -
1021  58 158 258 358 158 58   -  -   -  -
1022  59 159 259 359   -  -   -  -   -  -
1023  60 160 260 360 160 60 260 60 360 60
1024  61 161 261 361   -  -   -  -   -  -
1025  62 162 262 362 162 62   -  -   -  -
1026  63 163 263 363   -  - 263 63   -  -
1027  64 164 264 364 164 64   -  -   -  -
1028  65 165 265 365   -  -   -  - 365 65
1029  66 166 266 366 166 66 266 66   -  -
1030  67 167 267 367   -  -   -  -   -  -
1031  68 168 268 368 168 68   -  -   -  -
1032  69 169 269 369   -  - 269 69   -  -
1033  70 170 270 370 170 70   -  - 370 70
1034  71 171 271 371   -  -   -  -   -  -
1035  72 172 272 372 172 72 272 72   -  -
1036  73 173 273 373   -  -   -  -   -  -
1037  74 174 274 374 174 74   -  -   -  -
1038  75 175 275 375   -  - 275 75 375 75
1039  76 176 276 376 176 76   -  -   -  -
1040  77 177 277 377   -  -   -  -   -  -
1041  78 178 278 378 178 78 278 78   -  -
1042  79 179 279 379   -  -   -  -   -  -
1043  80 180 280 380 180 80   -  - 380 80
1044  81 181 281 381   -  - 281 81   -  -
1045  82 182 282 382 182 82   -  -   -  -
1046  83 183 283 383   -  -   -  -   -  -
1047  84 184 284 384 184 84 284 84   -  -
1048  85 185 285 385   -  -   -  - 385 85
1049  86 186 286 386 186 86   -  -   -  -
1050  87 187 287 387   -  - 287 87   -  -
1051  88 188 288 388 188 88   -  -   -  -
1052  89 189 289 389   -  -   -  -   -  -
1053  90 190 290 390 190 90 290 90 390 90
1054  91 191 291 391   -  -   -  -   -  -
1055  92 192 292 392 192 92   -  -   -  -
1056  93 193 293 393   -  - 293 93   -  -
1057  94 194 294 394 194 94   -  -   -  -
1058  95 195 295 395   -  -   -  - 395 95
1059  96   - 296 396   -  -   -  -   -  -
1060  97 197   - 397   -  -   -  -   -  -
1061  98 198 298   -   -  -   -  -   -  -
1062  99   -   -   -   -  -   -  -   -  -
1063   -   -   -   -   -  -   -  - 300  0
1064}
1065do_execsql_test joinD-25 {
1066  SELECT t1.*, t2.*, t3.*, t4.*
1067  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1068  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1069  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1070  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1071} {
1072  15 115 215 315   -  - 215 15 315 15
1073  30 130 230 330 130 30 230 30 330 30
1074  45 145 245 345   -  - 245 45 345 45
1075  60 160 260 360 160 60 260 60 360 60
1076  75 175 275 375   -  - 275 75 375 75
1077  90 190 290 390 190 90 290 90 390 90
1078}
1079do_execsql_test joinD-26 {
1080  SELECT t1.*, t2.*, t3.*, t4.*
1081  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1082  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1083  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1084  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1085} {
1086   3 103 203 303   -  - 203  3   -  -
1087   6 106 206 306 106  6 206  6   -  -
1088   9 109 209 309   -  - 209  9   -  -
1089  12 112 212 312 112 12 212 12   -  -
1090  15 115 215 315   -  - 215 15 315 15
1091  18 118 218 318 118 18 218 18   -  -
1092  21 121 221 321   -  - 221 21   -  -
1093  24 124 224 324 124 24 224 24   -  -
1094  27 127 227 327   -  - 227 27   -  -
1095  30 130 230 330 130 30 230 30 330 30
1096  33 133 233 333   -  - 233 33   -  -
1097  36 136 236 336 136 36 236 36   -  -
1098  39 139 239 339   -  - 239 39   -  -
1099  42 142 242 342 142 42 242 42   -  -
1100  45 145 245 345   -  - 245 45 345 45
1101  48 148 248 348 148 48 248 48   -  -
1102  51 151 251 351   -  - 251 51   -  -
1103  54 154 254 354 154 54 254 54   -  -
1104  57 157 257 357   -  - 257 57   -  -
1105  60 160 260 360 160 60 260 60 360 60
1106  63 163 263 363   -  - 263 63   -  -
1107  66 166 266 366 166 66 266 66   -  -
1108  69 169 269 369   -  - 269 69   -  -
1109  72 172 272 372 172 72 272 72   -  -
1110  75 175 275 375   -  - 275 75 375 75
1111  78 178 278 378 178 78 278 78   -  -
1112  81 181 281 381   -  - 281 81   -  -
1113  84 184 284 384 184 84 284 84   -  -
1114  87 187 287 387   -  - 287 87   -  -
1115  90 190 290 390 190 90 290 90 390 90
1116  93 193 293 393   -  - 293 93   -  -
1117   -   -   -   -   -  - 200  0   -  -
1118}
1119do_execsql_test joinD-27 {
1120  SELECT t1.*, t2.*, t3.*, t4.*
1121  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1122  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1123  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1124  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1125} {
1126  15 115 215 315   -  - 215 15 315 15
1127  30 130 230 330 130 30 230 30 330 30
1128  45 145 245 345   -  - 245 45 345 45
1129  60 160 260 360 160 60 260 60 360 60
1130  75 175 275 375   -  - 275 75 375 75
1131  90 190 290 390 190 90 290 90 390 90
1132   -   -   -   -   -  -   -  - 300  0
1133   -   -   -   -   -  -   -  - 305  5
1134   -   -   -   -   -  -   -  - 310 10
1135   -   -   -   -   -  -   -  - 320 20
1136   -   -   -   -   -  -   -  - 325 25
1137   -   -   -   -   -  -   -  - 335 35
1138   -   -   -   -   -  -   -  - 340 40
1139   -   -   -   -   -  -   -  - 350 50
1140   -   -   -   -   -  -   -  - 355 55
1141   -   -   -   -   -  -   -  - 365 65
1142   -   -   -   -   -  -   -  - 370 70
1143   -   -   -   -   -  -   -  - 380 80
1144   -   -   -   -   -  -   -  - 385 85
1145   -   -   -   -   -  -   -  - 395 95
1146}
1147do_execsql_test joinD-28 {
1148  SELECT t1.*, t2.*, t3.*, t4.*
1149  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1150  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1151  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
1152  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1153} {
1154   3 103 203 303   -  - 203  3   -  -
1155   6 106 206 306 106  6 206  6   -  -
1156   9 109 209 309   -  - 209  9   -  -
1157  12 112 212 312 112 12 212 12   -  -
1158  15 115 215 315   -  - 215 15 315 15
1159  18 118 218 318 118 18 218 18   -  -
1160  21 121 221 321   -  - 221 21   -  -
1161  24 124 224 324 124 24 224 24   -  -
1162  27 127 227 327   -  - 227 27   -  -
1163  30 130 230 330 130 30 230 30 330 30
1164  33 133 233 333   -  - 233 33   -  -
1165  36 136 236 336 136 36 236 36   -  -
1166  39 139 239 339   -  - 239 39   -  -
1167  42 142 242 342 142 42 242 42   -  -
1168  45 145 245 345   -  - 245 45 345 45
1169  48 148 248 348 148 48 248 48   -  -
1170  51 151 251 351   -  - 251 51   -  -
1171  54 154 254 354 154 54 254 54   -  -
1172  57 157 257 357   -  - 257 57   -  -
1173  60 160 260 360 160 60 260 60 360 60
1174  63 163 263 363   -  - 263 63   -  -
1175  66 166 266 366 166 66 266 66   -  -
1176  69 169 269 369   -  - 269 69   -  -
1177  72 172 272 372 172 72 272 72   -  -
1178  75 175 275 375   -  - 275 75 375 75
1179  78 178 278 378 178 78 278 78   -  -
1180  81 181 281 381   -  - 281 81   -  -
1181  84 184 284 384 184 84 284 84   -  -
1182  87 187 287 387   -  - 287 87   -  -
1183  90 190 290 390 190 90 290 90 390 90
1184  93 193 293 393   -  - 293 93   -  -
1185   -   -   -   -   -  - 200  0   -  -
1186   -   -   -   -   -  -   -  - 300  0
1187   -   -   -   -   -  -   -  - 305  5
1188   -   -   -   -   -  -   -  - 310 10
1189   -   -   -   -   -  -   -  - 320 20
1190   -   -   -   -   -  -   -  - 325 25
1191   -   -   -   -   -  -   -  - 335 35
1192   -   -   -   -   -  -   -  - 340 40
1193   -   -   -   -   -  -   -  - 350 50
1194   -   -   -   -   -  -   -  - 355 55
1195   -   -   -   -   -  -   -  - 365 65
1196   -   -   -   -   -  -   -  - 370 70
1197   -   -   -   -   -  -   -  - 380 80
1198   -   -   -   -   -  -   -  - 385 85
1199   -   -   -   -   -  -   -  - 395 95
1200}
1201do_execsql_test joinD-29 {
1202  SELECT t1.*, t2.*, t3.*, t4.*
1203  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1204  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1205  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1206  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1207} {
1208   5 105 205 305   -  -   -  - 305  5
1209  10 110 210 310 110 10   -  - 310 10
1210  15 115 215 315   -  - 215 15 315 15
1211  20 120 220 320 120 20   -  - 320 20
1212  25 125 225 325   -  -   -  - 325 25
1213  30 130 230 330 130 30 230 30 330 30
1214  35 135 235 335   -  -   -  - 335 35
1215  40 140 240 340 140 40   -  - 340 40
1216  45 145 245 345   -  - 245 45 345 45
1217  50 150 250 350 150 50   -  - 350 50
1218  55 155 255 355   -  -   -  - 355 55
1219  60 160 260 360 160 60 260 60 360 60
1220  65 165 265 365   -  -   -  - 365 65
1221  70 170 270 370 170 70   -  - 370 70
1222  75 175 275 375   -  - 275 75 375 75
1223  80 180 280 380 180 80   -  - 380 80
1224  85 185 285 385   -  -   -  - 385 85
1225  90 190 290 390 190 90 290 90 390 90
1226  95 195 295 395   -  -   -  - 395 95
1227}
1228do_execsql_test joinD-30 {
1229  SELECT t1.*, t2.*, t3.*, t4.*
1230  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1231  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1232  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1233  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1234} {
1235   0 100 200 300   -  -   -  -   -  -
1236   1 101 201 301   -  -   -  -   -  -
1237   2 102 202 302 102  2   -  -   -  -
1238   3 103 203 303   -  - 203  3   -  -
1239   4 104 204 304 104  4   -  -   -  -
1240   5 105 205 305   -  -   -  - 305  5
1241   6 106 206 306 106  6 206  6   -  -
1242   7 107 207 307   -  -   -  -   -  -
1243   8 108 208 308 108  8   -  -   -  -
1244   9 109 209 309   -  - 209  9   -  -
1245  10 110 210 310 110 10   -  - 310 10
1246  11 111 211 311   -  -   -  -   -  -
1247  12 112 212 312 112 12 212 12   -  -
1248  13 113 213 313   -  -   -  -   -  -
1249  14 114 214 314 114 14   -  -   -  -
1250  15 115 215 315   -  - 215 15 315 15
1251  16 116 216 316 116 16   -  -   -  -
1252  17 117 217 317   -  -   -  -   -  -
1253  18 118 218 318 118 18 218 18   -  -
1254  19 119 219 319   -  -   -  -   -  -
1255  20 120 220 320 120 20   -  - 320 20
1256  21 121 221 321   -  - 221 21   -  -
1257  22 122 222 322 122 22   -  -   -  -
1258  23 123 223 323   -  -   -  -   -  -
1259  24 124 224 324 124 24 224 24   -  -
1260  25 125 225 325   -  -   -  - 325 25
1261  26 126 226 326 126 26   -  -   -  -
1262  27 127 227 327   -  - 227 27   -  -
1263  28 128 228 328 128 28   -  -   -  -
1264  29 129 229 329   -  -   -  -   -  -
1265  30 130 230 330 130 30 230 30 330 30
1266  31 131 231 331   -  -   -  -   -  -
1267  32 132 232 332 132 32   -  -   -  -
1268  33 133 233 333   -  - 233 33   -  -
1269  34 134 234 334 134 34   -  -   -  -
1270  35 135 235 335   -  -   -  - 335 35
1271  36 136 236 336 136 36 236 36   -  -
1272  37 137 237 337   -  -   -  -   -  -
1273  38 138 238 338 138 38   -  -   -  -
1274  39 139 239 339   -  - 239 39   -  -
1275  40 140 240 340 140 40   -  - 340 40
1276  41 141 241 341   -  -   -  -   -  -
1277  42 142 242 342 142 42 242 42   -  -
1278  43 143 243 343   -  -   -  -   -  -
1279  44 144 244 344 144 44   -  -   -  -
1280  45 145 245 345   -  - 245 45 345 45
1281  46 146 246 346 146 46   -  -   -  -
1282  47 147 247 347   -  -   -  -   -  -
1283  48 148 248 348 148 48 248 48   -  -
1284  49 149 249 349   -  -   -  -   -  -
1285  50 150 250 350 150 50   -  - 350 50
1286  51 151 251 351   -  - 251 51   -  -
1287  52 152 252 352 152 52   -  -   -  -
1288  53 153 253 353   -  -   -  -   -  -
1289  54 154 254 354 154 54 254 54   -  -
1290  55 155 255 355   -  -   -  - 355 55
1291  56 156 256 356 156 56   -  -   -  -
1292  57 157 257 357   -  - 257 57   -  -
1293  58 158 258 358 158 58   -  -   -  -
1294  59 159 259 359   -  -   -  -   -  -
1295  60 160 260 360 160 60 260 60 360 60
1296  61 161 261 361   -  -   -  -   -  -
1297  62 162 262 362 162 62   -  -   -  -
1298  63 163 263 363   -  - 263 63   -  -
1299  64 164 264 364 164 64   -  -   -  -
1300  65 165 265 365   -  -   -  - 365 65
1301  66 166 266 366 166 66 266 66   -  -
1302  67 167 267 367   -  -   -  -   -  -
1303  68 168 268 368 168 68   -  -   -  -
1304  69 169 269 369   -  - 269 69   -  -
1305  70 170 270 370 170 70   -  - 370 70
1306  71 171 271 371   -  -   -  -   -  -
1307  72 172 272 372 172 72 272 72   -  -
1308  73 173 273 373   -  -   -  -   -  -
1309  74 174 274 374 174 74   -  -   -  -
1310  75 175 275 375   -  - 275 75 375 75
1311  76 176 276 376 176 76   -  -   -  -
1312  77 177 277 377   -  -   -  -   -  -
1313  78 178 278 378 178 78 278 78   -  -
1314  79 179 279 379   -  -   -  -   -  -
1315  80 180 280 380 180 80   -  - 380 80
1316  81 181 281 381   -  - 281 81   -  -
1317  82 182 282 382 182 82   -  -   -  -
1318  83 183 283 383   -  -   -  -   -  -
1319  84 184 284 384 184 84 284 84   -  -
1320  85 185 285 385   -  -   -  - 385 85
1321  86 186 286 386 186 86   -  -   -  -
1322  87 187 287 387   -  - 287 87   -  -
1323  88 188 288 388 188 88   -  -   -  -
1324  89 189 289 389   -  -   -  -   -  -
1325  90 190 290 390 190 90 290 90 390 90
1326  91 191 291 391   -  -   -  -   -  -
1327  92 192 292 392 192 92   -  -   -  -
1328  93 193 293 393   -  - 293 93   -  -
1329  94 194 294 394 194 94   -  -   -  -
1330  95 195 295 395   -  -   -  - 395 95
1331  96   - 296 396   -  -   -  -   -  -
1332  97 197   - 397   -  -   -  -   -  -
1333  98 198 298   -   -  -   -  -   -  -
1334  99   -   -   -   -  -   -  -   -  -
1335   -   -   -   -   -  - 200  0   -  -
1336}
1337do_execsql_test joinD-31 {
1338  SELECT t1.*, t2.*, t3.*, t4.*
1339  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1340  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1341  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1342  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1343} {
1344   5 105 205 305   -  -   -  - 305  5
1345  10 110 210 310 110 10   -  - 310 10
1346  15 115 215 315   -  - 215 15 315 15
1347  20 120 220 320 120 20   -  - 320 20
1348  25 125 225 325   -  -   -  - 325 25
1349  30 130 230 330 130 30 230 30 330 30
1350  35 135 235 335   -  -   -  - 335 35
1351  40 140 240 340 140 40   -  - 340 40
1352  45 145 245 345   -  - 245 45 345 45
1353  50 150 250 350 150 50   -  - 350 50
1354  55 155 255 355   -  -   -  - 355 55
1355  60 160 260 360 160 60 260 60 360 60
1356  65 165 265 365   -  -   -  - 365 65
1357  70 170 270 370 170 70   -  - 370 70
1358  75 175 275 375   -  - 275 75 375 75
1359  80 180 280 380 180 80   -  - 380 80
1360  85 185 285 385   -  -   -  - 385 85
1361  90 190 290 390 190 90 290 90 390 90
1362  95 195 295 395   -  -   -  - 395 95
1363   -   -   -   -   -  -   -  - 300  0
1364}
1365do_execsql_test joinD-32 {
1366  SELECT t1.*, t2.*, t3.*, t4.*
1367  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
1368  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1369  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
1370  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1371} {
1372   0 100 200 300   -  -   -  -   -  -
1373   1 101 201 301   -  -   -  -   -  -
1374   2 102 202 302 102  2   -  -   -  -
1375   3 103 203 303   -  - 203  3   -  -
1376   4 104 204 304 104  4   -  -   -  -
1377   5 105 205 305   -  -   -  - 305  5
1378   6 106 206 306 106  6 206  6   -  -
1379   7 107 207 307   -  -   -  -   -  -
1380   8 108 208 308 108  8   -  -   -  -
1381   9 109 209 309   -  - 209  9   -  -
1382  10 110 210 310 110 10   -  - 310 10
1383  11 111 211 311   -  -   -  -   -  -
1384  12 112 212 312 112 12 212 12   -  -
1385  13 113 213 313   -  -   -  -   -  -
1386  14 114 214 314 114 14   -  -   -  -
1387  15 115 215 315   -  - 215 15 315 15
1388  16 116 216 316 116 16   -  -   -  -
1389  17 117 217 317   -  -   -  -   -  -
1390  18 118 218 318 118 18 218 18   -  -
1391  19 119 219 319   -  -   -  -   -  -
1392  20 120 220 320 120 20   -  - 320 20
1393  21 121 221 321   -  - 221 21   -  -
1394  22 122 222 322 122 22   -  -   -  -
1395  23 123 223 323   -  -   -  -   -  -
1396  24 124 224 324 124 24 224 24   -  -
1397  25 125 225 325   -  -   -  - 325 25
1398  26 126 226 326 126 26   -  -   -  -
1399  27 127 227 327   -  - 227 27   -  -
1400  28 128 228 328 128 28   -  -   -  -
1401  29 129 229 329   -  -   -  -   -  -
1402  30 130 230 330 130 30 230 30 330 30
1403  31 131 231 331   -  -   -  -   -  -
1404  32 132 232 332 132 32   -  -   -  -
1405  33 133 233 333   -  - 233 33   -  -
1406  34 134 234 334 134 34   -  -   -  -
1407  35 135 235 335   -  -   -  - 335 35
1408  36 136 236 336 136 36 236 36   -  -
1409  37 137 237 337   -  -   -  -   -  -
1410  38 138 238 338 138 38   -  -   -  -
1411  39 139 239 339   -  - 239 39   -  -
1412  40 140 240 340 140 40   -  - 340 40
1413  41 141 241 341   -  -   -  -   -  -
1414  42 142 242 342 142 42 242 42   -  -
1415  43 143 243 343   -  -   -  -   -  -
1416  44 144 244 344 144 44   -  -   -  -
1417  45 145 245 345   -  - 245 45 345 45
1418  46 146 246 346 146 46   -  -   -  -
1419  47 147 247 347   -  -   -  -   -  -
1420  48 148 248 348 148 48 248 48   -  -
1421  49 149 249 349   -  -   -  -   -  -
1422  50 150 250 350 150 50   -  - 350 50
1423  51 151 251 351   -  - 251 51   -  -
1424  52 152 252 352 152 52   -  -   -  -
1425  53 153 253 353   -  -   -  -   -  -
1426  54 154 254 354 154 54 254 54   -  -
1427  55 155 255 355   -  -   -  - 355 55
1428  56 156 256 356 156 56   -  -   -  -
1429  57 157 257 357   -  - 257 57   -  -
1430  58 158 258 358 158 58   -  -   -  -
1431  59 159 259 359   -  -   -  -   -  -
1432  60 160 260 360 160 60 260 60 360 60
1433  61 161 261 361   -  -   -  -   -  -
1434  62 162 262 362 162 62   -  -   -  -
1435  63 163 263 363   -  - 263 63   -  -
1436  64 164 264 364 164 64   -  -   -  -
1437  65 165 265 365   -  -   -  - 365 65
1438  66 166 266 366 166 66 266 66   -  -
1439  67 167 267 367   -  -   -  -   -  -
1440  68 168 268 368 168 68   -  -   -  -
1441  69 169 269 369   -  - 269 69   -  -
1442  70 170 270 370 170 70   -  - 370 70
1443  71 171 271 371   -  -   -  -   -  -
1444  72 172 272 372 172 72 272 72   -  -
1445  73 173 273 373   -  -   -  -   -  -
1446  74 174 274 374 174 74   -  -   -  -
1447  75 175 275 375   -  - 275 75 375 75
1448  76 176 276 376 176 76   -  -   -  -
1449  77 177 277 377   -  -   -  -   -  -
1450  78 178 278 378 178 78 278 78   -  -
1451  79 179 279 379   -  -   -  -   -  -
1452  80 180 280 380 180 80   -  - 380 80
1453  81 181 281 381   -  - 281 81   -  -
1454  82 182 282 382 182 82   -  -   -  -
1455  83 183 283 383   -  -   -  -   -  -
1456  84 184 284 384 184 84 284 84   -  -
1457  85 185 285 385   -  -   -  - 385 85
1458  86 186 286 386 186 86   -  -   -  -
1459  87 187 287 387   -  - 287 87   -  -
1460  88 188 288 388 188 88   -  -   -  -
1461  89 189 289 389   -  -   -  -   -  -
1462  90 190 290 390 190 90 290 90 390 90
1463  91 191 291 391   -  -   -  -   -  -
1464  92 192 292 392 192 92   -  -   -  -
1465  93 193 293 393   -  - 293 93   -  -
1466  94 194 294 394 194 94   -  -   -  -
1467  95 195 295 395   -  -   -  - 395 95
1468  96   - 296 396   -  -   -  -   -  -
1469  97 197   - 397   -  -   -  -   -  -
1470  98 198 298   -   -  -   -  -   -  -
1471  99   -   -   -   -  -   -  -   -  -
1472   -   -   -   -   -  - 200  0   -  -
1473   -   -   -   -   -  -   -  - 300  0
1474}
1475do_execsql_test joinD-33 {
1476  SELECT t1.*, t2.*, t3.*, t4.*
1477  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1478  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
1479  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1480  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1481} {
1482  30 130 230 330 130 30 230 30 330 30
1483  60 160 260 360 160 60 260 60 360 60
1484  90 190 290 390 190 90 290 90 390 90
1485}
1486do_execsql_test joinD-34 {
1487  SELECT t1.*, t2.*, t3.*, t4.*
1488  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1489  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
1490  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1491  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1492} {
1493   6 106 206 306 106  6 206  6   -  -
1494  12 112 212 312 112 12 212 12   -  -
1495  18 118 218 318 118 18 218 18   -  -
1496  24 124 224 324 124 24 224 24   -  -
1497  30 130 230 330 130 30 230 30 330 30
1498  36 136 236 336 136 36 236 36   -  -
1499  42 142 242 342 142 42 242 42   -  -
1500  48 148 248 348 148 48 248 48   -  -
1501  54 154 254 354 154 54 254 54   -  -
1502  60 160 260 360 160 60 260 60 360 60
1503  66 166 266 366 166 66 266 66   -  -
1504  72 172 272 372 172 72 272 72   -  -
1505  78 178 278 378 178 78 278 78   -  -
1506  84 184 284 384 184 84 284 84   -  -
1507  90 190 290 390 190 90 290 90 390 90
1508}
1509do_execsql_test joinD-35 {
1510  SELECT t1.*, t2.*, t3.*, t4.*
1511  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1512  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
1513  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1514  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1515} {
1516  30 130 230 330 130 30 230 30 330 30
1517  60 160 260 360 160 60 260 60 360 60
1518  90 190 290 390 190 90 290 90 390 90
1519   -   -   -   -   -  -   -  - 300  0
1520   -   -   -   -   -  -   -  - 305  5
1521   -   -   -   -   -  -   -  - 310 10
1522   -   -   -   -   -  -   -  - 315 15
1523   -   -   -   -   -  -   -  - 320 20
1524   -   -   -   -   -  -   -  - 325 25
1525   -   -   -   -   -  -   -  - 335 35
1526   -   -   -   -   -  -   -  - 340 40
1527   -   -   -   -   -  -   -  - 345 45
1528   -   -   -   -   -  -   -  - 350 50
1529   -   -   -   -   -  -   -  - 355 55
1530   -   -   -   -   -  -   -  - 365 65
1531   -   -   -   -   -  -   -  - 370 70
1532   -   -   -   -   -  -   -  - 375 75
1533   -   -   -   -   -  -   -  - 380 80
1534   -   -   -   -   -  -   -  - 385 85
1535   -   -   -   -   -  -   -  - 395 95
1536}
1537do_execsql_test joinD-36 {
1538  SELECT t1.*, t2.*, t3.*, t4.*
1539  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1540  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
1541  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
1542  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1543} {
1544   6 106 206 306 106  6 206  6   -  -
1545  12 112 212 312 112 12 212 12   -  -
1546  18 118 218 318 118 18 218 18   -  -
1547  24 124 224 324 124 24 224 24   -  -
1548  30 130 230 330 130 30 230 30 330 30
1549  36 136 236 336 136 36 236 36   -  -
1550  42 142 242 342 142 42 242 42   -  -
1551  48 148 248 348 148 48 248 48   -  -
1552  54 154 254 354 154 54 254 54   -  -
1553  60 160 260 360 160 60 260 60 360 60
1554  66 166 266 366 166 66 266 66   -  -
1555  72 172 272 372 172 72 272 72   -  -
1556  78 178 278 378 178 78 278 78   -  -
1557  84 184 284 384 184 84 284 84   -  -
1558  90 190 290 390 190 90 290 90 390 90
1559   -   -   -   -   -  -   -  - 300  0
1560   -   -   -   -   -  -   -  - 305  5
1561   -   -   -   -   -  -   -  - 310 10
1562   -   -   -   -   -  -   -  - 315 15
1563   -   -   -   -   -  -   -  - 320 20
1564   -   -   -   -   -  -   -  - 325 25
1565   -   -   -   -   -  -   -  - 335 35
1566   -   -   -   -   -  -   -  - 340 40
1567   -   -   -   -   -  -   -  - 345 45
1568   -   -   -   -   -  -   -  - 350 50
1569   -   -   -   -   -  -   -  - 355 55
1570   -   -   -   -   -  -   -  - 365 65
1571   -   -   -   -   -  -   -  - 370 70
1572   -   -   -   -   -  -   -  - 375 75
1573   -   -   -   -   -  -   -  - 380 80
1574   -   -   -   -   -  -   -  - 385 85
1575   -   -   -   -   -  -   -  - 395 95
1576}
1577do_execsql_test joinD-37 {
1578  SELECT t1.*, t2.*, t3.*, t4.*
1579  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1580  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
1581  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1582  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1583} {
1584  10 110 210 310 110 10   -  - 310 10
1585  20 120 220 320 120 20   -  - 320 20
1586  30 130 230 330 130 30 230 30 330 30
1587  40 140 240 340 140 40   -  - 340 40
1588  50 150 250 350 150 50   -  - 350 50
1589  60 160 260 360 160 60 260 60 360 60
1590  70 170 270 370 170 70   -  - 370 70
1591  80 180 280 380 180 80   -  - 380 80
1592  90 190 290 390 190 90 290 90 390 90
1593}
1594do_execsql_test joinD-38 {
1595  SELECT t1.*, t2.*, t3.*, t4.*
1596  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1597  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
1598  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1599  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1600} {
1601   2 102 202 302 102  2   -  -   -  -
1602   4 104 204 304 104  4   -  -   -  -
1603   6 106 206 306 106  6 206  6   -  -
1604   8 108 208 308 108  8   -  -   -  -
1605  10 110 210 310 110 10   -  - 310 10
1606  12 112 212 312 112 12 212 12   -  -
1607  14 114 214 314 114 14   -  -   -  -
1608  16 116 216 316 116 16   -  -   -  -
1609  18 118 218 318 118 18 218 18   -  -
1610  20 120 220 320 120 20   -  - 320 20
1611  22 122 222 322 122 22   -  -   -  -
1612  24 124 224 324 124 24 224 24   -  -
1613  26 126 226 326 126 26   -  -   -  -
1614  28 128 228 328 128 28   -  -   -  -
1615  30 130 230 330 130 30 230 30 330 30
1616  32 132 232 332 132 32   -  -   -  -
1617  34 134 234 334 134 34   -  -   -  -
1618  36 136 236 336 136 36 236 36   -  -
1619  38 138 238 338 138 38   -  -   -  -
1620  40 140 240 340 140 40   -  - 340 40
1621  42 142 242 342 142 42 242 42   -  -
1622  44 144 244 344 144 44   -  -   -  -
1623  46 146 246 346 146 46   -  -   -  -
1624  48 148 248 348 148 48 248 48   -  -
1625  50 150 250 350 150 50   -  - 350 50
1626  52 152 252 352 152 52   -  -   -  -
1627  54 154 254 354 154 54 254 54   -  -
1628  56 156 256 356 156 56   -  -   -  -
1629  58 158 258 358 158 58   -  -   -  -
1630  60 160 260 360 160 60 260 60 360 60
1631  62 162 262 362 162 62   -  -   -  -
1632  64 164 264 364 164 64   -  -   -  -
1633  66 166 266 366 166 66 266 66   -  -
1634  68 168 268 368 168 68   -  -   -  -
1635  70 170 270 370 170 70   -  - 370 70
1636  72 172 272 372 172 72 272 72   -  -
1637  74 174 274 374 174 74   -  -   -  -
1638  76 176 276 376 176 76   -  -   -  -
1639  78 178 278 378 178 78 278 78   -  -
1640  80 180 280 380 180 80   -  - 380 80
1641  82 182 282 382 182 82   -  -   -  -
1642  84 184 284 384 184 84 284 84   -  -
1643  86 186 286 386 186 86   -  -   -  -
1644  88 188 288 388 188 88   -  -   -  -
1645  90 190 290 390 190 90 290 90 390 90
1646  92 192 292 392 192 92   -  -   -  -
1647  94 194 294 394 194 94   -  -   -  -
1648   -   -   -   - 100  0   -  -   -  -
1649}
1650do_execsql_test joinD-39 {
1651  SELECT t1.*, t2.*, t3.*, t4.*
1652  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1653  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
1654  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1655  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1656} {
1657  10 110 210 310 110 10   -  - 310 10
1658  20 120 220 320 120 20   -  - 320 20
1659  30 130 230 330 130 30 230 30 330 30
1660  40 140 240 340 140 40   -  - 340 40
1661  50 150 250 350 150 50   -  - 350 50
1662  60 160 260 360 160 60 260 60 360 60
1663  70 170 270 370 170 70   -  - 370 70
1664  80 180 280 380 180 80   -  - 380 80
1665  90 190 290 390 190 90 290 90 390 90
1666   -   -   -   -   -  -   -  - 300  0
1667   -   -   -   -   -  -   -  - 305  5
1668   -   -   -   -   -  -   -  - 315 15
1669   -   -   -   -   -  -   -  - 325 25
1670   -   -   -   -   -  -   -  - 335 35
1671   -   -   -   -   -  -   -  - 345 45
1672   -   -   -   -   -  -   -  - 355 55
1673   -   -   -   -   -  -   -  - 365 65
1674   -   -   -   -   -  -   -  - 375 75
1675   -   -   -   -   -  -   -  - 385 85
1676   -   -   -   -   -  -   -  - 395 95
1677}
1678do_execsql_test joinD-40 {
1679  SELECT t1.*, t2.*, t3.*, t4.*
1680  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1681  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
1682  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
1683  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1684} {
1685   2 102 202 302 102  2   -  -   -  -
1686   4 104 204 304 104  4   -  -   -  -
1687   6 106 206 306 106  6 206  6   -  -
1688   8 108 208 308 108  8   -  -   -  -
1689  10 110 210 310 110 10   -  - 310 10
1690  12 112 212 312 112 12 212 12   -  -
1691  14 114 214 314 114 14   -  -   -  -
1692  16 116 216 316 116 16   -  -   -  -
1693  18 118 218 318 118 18 218 18   -  -
1694  20 120 220 320 120 20   -  - 320 20
1695  22 122 222 322 122 22   -  -   -  -
1696  24 124 224 324 124 24 224 24   -  -
1697  26 126 226 326 126 26   -  -   -  -
1698  28 128 228 328 128 28   -  -   -  -
1699  30 130 230 330 130 30 230 30 330 30
1700  32 132 232 332 132 32   -  -   -  -
1701  34 134 234 334 134 34   -  -   -  -
1702  36 136 236 336 136 36 236 36   -  -
1703  38 138 238 338 138 38   -  -   -  -
1704  40 140 240 340 140 40   -  - 340 40
1705  42 142 242 342 142 42 242 42   -  -
1706  44 144 244 344 144 44   -  -   -  -
1707  46 146 246 346 146 46   -  -   -  -
1708  48 148 248 348 148 48 248 48   -  -
1709  50 150 250 350 150 50   -  - 350 50
1710  52 152 252 352 152 52   -  -   -  -
1711  54 154 254 354 154 54 254 54   -  -
1712  56 156 256 356 156 56   -  -   -  -
1713  58 158 258 358 158 58   -  -   -  -
1714  60 160 260 360 160 60 260 60 360 60
1715  62 162 262 362 162 62   -  -   -  -
1716  64 164 264 364 164 64   -  -   -  -
1717  66 166 266 366 166 66 266 66   -  -
1718  68 168 268 368 168 68   -  -   -  -
1719  70 170 270 370 170 70   -  - 370 70
1720  72 172 272 372 172 72 272 72   -  -
1721  74 174 274 374 174 74   -  -   -  -
1722  76 176 276 376 176 76   -  -   -  -
1723  78 178 278 378 178 78 278 78   -  -
1724  80 180 280 380 180 80   -  - 380 80
1725  82 182 282 382 182 82   -  -   -  -
1726  84 184 284 384 184 84 284 84   -  -
1727  86 186 286 386 186 86   -  -   -  -
1728  88 188 288 388 188 88   -  -   -  -
1729  90 190 290 390 190 90 290 90 390 90
1730  92 192 292 392 192 92   -  -   -  -
1731  94 194 294 394 194 94   -  -   -  -
1732   -   -   -   - 100  0   -  -   -  -
1733   -   -   -   -   -  -   -  - 300  0
1734   -   -   -   -   -  -   -  - 305  5
1735   -   -   -   -   -  -   -  - 315 15
1736   -   -   -   -   -  -   -  - 325 25
1737   -   -   -   -   -  -   -  - 335 35
1738   -   -   -   -   -  -   -  - 345 45
1739   -   -   -   -   -  -   -  - 355 55
1740   -   -   -   -   -  -   -  - 365 65
1741   -   -   -   -   -  -   -  - 375 75
1742   -   -   -   -   -  -   -  - 385 85
1743   -   -   -   -   -  -   -  - 395 95
1744}
1745do_execsql_test joinD-41 {
1746  SELECT t1.*, t2.*, t3.*, t4.*
1747  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1748  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1749  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1750  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1751} {
1752  30 130 230 330 130 30 230 30 330 30
1753  60 160 260 360 160 60 260 60 360 60
1754  90 190 290 390 190 90 290 90 390 90
1755}
1756do_execsql_test joinD-42 {
1757  SELECT t1.*, t2.*, t3.*, t4.*
1758  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1759  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1760  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1761  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1762} {
1763   6 106 206 306 106  6 206  6   -  -
1764  12 112 212 312 112 12 212 12   -  -
1765  18 118 218 318 118 18 218 18   -  -
1766  24 124 224 324 124 24 224 24   -  -
1767  30 130 230 330 130 30 230 30 330 30
1768  36 136 236 336 136 36 236 36   -  -
1769  42 142 242 342 142 42 242 42   -  -
1770  48 148 248 348 148 48 248 48   -  -
1771  54 154 254 354 154 54 254 54   -  -
1772  60 160 260 360 160 60 260 60 360 60
1773  66 166 266 366 166 66 266 66   -  -
1774  72 172 272 372 172 72 272 72   -  -
1775  78 178 278 378 178 78 278 78   -  -
1776  84 184 284 384 184 84 284 84   -  -
1777  90 190 290 390 190 90 290 90 390 90
1778   -   -   -   -   -  - 200  0   -  -
1779   -   -   -   -   -  - 203  3   -  -
1780   -   -   -   -   -  - 209  9   -  -
1781   -   -   -   -   -  - 215 15   -  -
1782   -   -   -   -   -  - 221 21   -  -
1783   -   -   -   -   -  - 227 27   -  -
1784   -   -   -   -   -  - 233 33   -  -
1785   -   -   -   -   -  - 239 39   -  -
1786   -   -   -   -   -  - 245 45   -  -
1787   -   -   -   -   -  - 251 51   -  -
1788   -   -   -   -   -  - 257 57   -  -
1789   -   -   -   -   -  - 263 63   -  -
1790   -   -   -   -   -  - 269 69   -  -
1791   -   -   -   -   -  - 275 75   -  -
1792   -   -   -   -   -  - 281 81   -  -
1793   -   -   -   -   -  - 287 87   -  -
1794   -   -   -   -   -  - 293 93   -  -
1795}
1796do_execsql_test joinD-43 {
1797  SELECT t1.*, t2.*, t3.*, t4.*
1798  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1799  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1800  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1801  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1802} {
1803  30 130 230 330 130 30 230 30 330 30
1804  60 160 260 360 160 60 260 60 360 60
1805  90 190 290 390 190 90 290 90 390 90
1806   -   -   -   -   -  -   -  - 300  0
1807   -   -   -   -   -  -   -  - 305  5
1808   -   -   -   -   -  -   -  - 310 10
1809   -   -   -   -   -  -   -  - 315 15
1810   -   -   -   -   -  -   -  - 320 20
1811   -   -   -   -   -  -   -  - 325 25
1812   -   -   -   -   -  -   -  - 335 35
1813   -   -   -   -   -  -   -  - 340 40
1814   -   -   -   -   -  -   -  - 345 45
1815   -   -   -   -   -  -   -  - 350 50
1816   -   -   -   -   -  -   -  - 355 55
1817   -   -   -   -   -  -   -  - 365 65
1818   -   -   -   -   -  -   -  - 370 70
1819   -   -   -   -   -  -   -  - 375 75
1820   -   -   -   -   -  -   -  - 380 80
1821   -   -   -   -   -  -   -  - 385 85
1822   -   -   -   -   -  -   -  - 395 95
1823}
1824do_execsql_test joinD-44 {
1825  SELECT t1.*, t2.*, t3.*, t4.*
1826  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1827  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
1828  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
1829  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1830} {
1831   6 106 206 306 106  6 206  6   -  -
1832  12 112 212 312 112 12 212 12   -  -
1833  18 118 218 318 118 18 218 18   -  -
1834  24 124 224 324 124 24 224 24   -  -
1835  30 130 230 330 130 30 230 30 330 30
1836  36 136 236 336 136 36 236 36   -  -
1837  42 142 242 342 142 42 242 42   -  -
1838  48 148 248 348 148 48 248 48   -  -
1839  54 154 254 354 154 54 254 54   -  -
1840  60 160 260 360 160 60 260 60 360 60
1841  66 166 266 366 166 66 266 66   -  -
1842  72 172 272 372 172 72 272 72   -  -
1843  78 178 278 378 178 78 278 78   -  -
1844  84 184 284 384 184 84 284 84   -  -
1845  90 190 290 390 190 90 290 90 390 90
1846   -   -   -   -   -  - 200  0   -  -
1847   -   -   -   -   -  - 203  3   -  -
1848   -   -   -   -   -  - 209  9   -  -
1849   -   -   -   -   -  - 215 15   -  -
1850   -   -   -   -   -  - 221 21   -  -
1851   -   -   -   -   -  - 227 27   -  -
1852   -   -   -   -   -  - 233 33   -  -
1853   -   -   -   -   -  - 239 39   -  -
1854   -   -   -   -   -  - 245 45   -  -
1855   -   -   -   -   -  - 251 51   -  -
1856   -   -   -   -   -  - 257 57   -  -
1857   -   -   -   -   -  - 263 63   -  -
1858   -   -   -   -   -  - 269 69   -  -
1859   -   -   -   -   -  - 275 75   -  -
1860   -   -   -   -   -  - 281 81   -  -
1861   -   -   -   -   -  - 287 87   -  -
1862   -   -   -   -   -  - 293 93   -  -
1863   -   -   -   -   -  -   -  - 300  0
1864   -   -   -   -   -  -   -  - 305  5
1865   -   -   -   -   -  -   -  - 310 10
1866   -   -   -   -   -  -   -  - 315 15
1867   -   -   -   -   -  -   -  - 320 20
1868   -   -   -   -   -  -   -  - 325 25
1869   -   -   -   -   -  -   -  - 335 35
1870   -   -   -   -   -  -   -  - 340 40
1871   -   -   -   -   -  -   -  - 345 45
1872   -   -   -   -   -  -   -  - 350 50
1873   -   -   -   -   -  -   -  - 355 55
1874   -   -   -   -   -  -   -  - 365 65
1875   -   -   -   -   -  -   -  - 370 70
1876   -   -   -   -   -  -   -  - 375 75
1877   -   -   -   -   -  -   -  - 380 80
1878   -   -   -   -   -  -   -  - 385 85
1879   -   -   -   -   -  -   -  - 395 95
1880}
1881do_execsql_test joinD-45 {
1882  SELECT t1.*, t2.*, t3.*, t4.*
1883  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1884  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1885  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
1886  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1887} {
1888  10 110 210 310 110 10   -  - 310 10
1889  20 120 220 320 120 20   -  - 320 20
1890  30 130 230 330 130 30 230 30 330 30
1891  40 140 240 340 140 40   -  - 340 40
1892  50 150 250 350 150 50   -  - 350 50
1893  60 160 260 360 160 60 260 60 360 60
1894  70 170 270 370 170 70   -  - 370 70
1895  80 180 280 380 180 80   -  - 380 80
1896  90 190 290 390 190 90 290 90 390 90
1897}
1898do_execsql_test joinD-46 {
1899  SELECT t1.*, t2.*, t3.*, t4.*
1900  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1901  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1902  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
1903  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1904} {
1905   2 102 202 302 102  2   -  -   -  -
1906   4 104 204 304 104  4   -  -   -  -
1907   6 106 206 306 106  6 206  6   -  -
1908   8 108 208 308 108  8   -  -   -  -
1909  10 110 210 310 110 10   -  - 310 10
1910  12 112 212 312 112 12 212 12   -  -
1911  14 114 214 314 114 14   -  -   -  -
1912  16 116 216 316 116 16   -  -   -  -
1913  18 118 218 318 118 18 218 18   -  -
1914  20 120 220 320 120 20   -  - 320 20
1915  22 122 222 322 122 22   -  -   -  -
1916  24 124 224 324 124 24 224 24   -  -
1917  26 126 226 326 126 26   -  -   -  -
1918  28 128 228 328 128 28   -  -   -  -
1919  30 130 230 330 130 30 230 30 330 30
1920  32 132 232 332 132 32   -  -   -  -
1921  34 134 234 334 134 34   -  -   -  -
1922  36 136 236 336 136 36 236 36   -  -
1923  38 138 238 338 138 38   -  -   -  -
1924  40 140 240 340 140 40   -  - 340 40
1925  42 142 242 342 142 42 242 42   -  -
1926  44 144 244 344 144 44   -  -   -  -
1927  46 146 246 346 146 46   -  -   -  -
1928  48 148 248 348 148 48 248 48   -  -
1929  50 150 250 350 150 50   -  - 350 50
1930  52 152 252 352 152 52   -  -   -  -
1931  54 154 254 354 154 54 254 54   -  -
1932  56 156 256 356 156 56   -  -   -  -
1933  58 158 258 358 158 58   -  -   -  -
1934  60 160 260 360 160 60 260 60 360 60
1935  62 162 262 362 162 62   -  -   -  -
1936  64 164 264 364 164 64   -  -   -  -
1937  66 166 266 366 166 66 266 66   -  -
1938  68 168 268 368 168 68   -  -   -  -
1939  70 170 270 370 170 70   -  - 370 70
1940  72 172 272 372 172 72 272 72   -  -
1941  74 174 274 374 174 74   -  -   -  -
1942  76 176 276 376 176 76   -  -   -  -
1943  78 178 278 378 178 78 278 78   -  -
1944  80 180 280 380 180 80   -  - 380 80
1945  82 182 282 382 182 82   -  -   -  -
1946  84 184 284 384 184 84 284 84   -  -
1947  86 186 286 386 186 86   -  -   -  -
1948  88 188 288 388 188 88   -  -   -  -
1949  90 190 290 390 190 90 290 90 390 90
1950  92 192 292 392 192 92   -  -   -  -
1951  94 194 294 394 194 94   -  -   -  -
1952   -   -   -   - 100  0   -  -   -  -
1953   -   -   -   -   -  - 200  0   -  -
1954   -   -   -   -   -  - 203  3   -  -
1955   -   -   -   -   -  - 209  9   -  -
1956   -   -   -   -   -  - 215 15   -  -
1957   -   -   -   -   -  - 221 21   -  -
1958   -   -   -   -   -  - 227 27   -  -
1959   -   -   -   -   -  - 233 33   -  -
1960   -   -   -   -   -  - 239 39   -  -
1961   -   -   -   -   -  - 245 45   -  -
1962   -   -   -   -   -  - 251 51   -  -
1963   -   -   -   -   -  - 257 57   -  -
1964   -   -   -   -   -  - 263 63   -  -
1965   -   -   -   -   -  - 269 69   -  -
1966   -   -   -   -   -  - 275 75   -  -
1967   -   -   -   -   -  - 281 81   -  -
1968   -   -   -   -   -  - 287 87   -  -
1969   -   -   -   -   -  - 293 93   -  -
1970}
1971do_execsql_test joinD-47 {
1972  SELECT t1.*, t2.*, t3.*, t4.*
1973  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
1974  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
1975  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
1976  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
1977} {
1978  10 110 210 310 110 10   -  - 310 10
1979  20 120 220 320 120 20   -  - 320 20
1980  30 130 230 330 130 30 230 30 330 30
1981  40 140 240 340 140 40   -  - 340 40
1982  50 150 250 350 150 50   -  - 350 50
1983  60 160 260 360 160 60 260 60 360 60
1984  70 170 270 370 170 70   -  - 370 70
1985  80 180 280 380 180 80   -  - 380 80
1986  90 190 290 390 190 90 290 90 390 90
1987   -   -   -   -   -  -   -  - 300  0
1988   -   -   -   -   -  -   -  - 305  5
1989   -   -   -   -   -  -   -  - 315 15
1990   -   -   -   -   -  -   -  - 325 25
1991   -   -   -   -   -  -   -  - 335 35
1992   -   -   -   -   -  -   -  - 345 45
1993   -   -   -   -   -  -   -  - 355 55
1994   -   -   -   -   -  -   -  - 365 65
1995   -   -   -   -   -  -   -  - 375 75
1996   -   -   -   -   -  -   -  - 385 85
1997   -   -   -   -   -  -   -  - 395 95
1998}
1999do_execsql_test joinD-48 {
2000  SELECT t1.*, t2.*, t3.*, t4.*
2001  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
2002  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
2003  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
2004  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2005} {
2006   2 102 202 302 102  2   -  -   -  -
2007   4 104 204 304 104  4   -  -   -  -
2008   6 106 206 306 106  6 206  6   -  -
2009   8 108 208 308 108  8   -  -   -  -
2010  10 110 210 310 110 10   -  - 310 10
2011  12 112 212 312 112 12 212 12   -  -
2012  14 114 214 314 114 14   -  -   -  -
2013  16 116 216 316 116 16   -  -   -  -
2014  18 118 218 318 118 18 218 18   -  -
2015  20 120 220 320 120 20   -  - 320 20
2016  22 122 222 322 122 22   -  -   -  -
2017  24 124 224 324 124 24 224 24   -  -
2018  26 126 226 326 126 26   -  -   -  -
2019  28 128 228 328 128 28   -  -   -  -
2020  30 130 230 330 130 30 230 30 330 30
2021  32 132 232 332 132 32   -  -   -  -
2022  34 134 234 334 134 34   -  -   -  -
2023  36 136 236 336 136 36 236 36   -  -
2024  38 138 238 338 138 38   -  -   -  -
2025  40 140 240 340 140 40   -  - 340 40
2026  42 142 242 342 142 42 242 42   -  -
2027  44 144 244 344 144 44   -  -   -  -
2028  46 146 246 346 146 46   -  -   -  -
2029  48 148 248 348 148 48 248 48   -  -
2030  50 150 250 350 150 50   -  - 350 50
2031  52 152 252 352 152 52   -  -   -  -
2032  54 154 254 354 154 54 254 54   -  -
2033  56 156 256 356 156 56   -  -   -  -
2034  58 158 258 358 158 58   -  -   -  -
2035  60 160 260 360 160 60 260 60 360 60
2036  62 162 262 362 162 62   -  -   -  -
2037  64 164 264 364 164 64   -  -   -  -
2038  66 166 266 366 166 66 266 66   -  -
2039  68 168 268 368 168 68   -  -   -  -
2040  70 170 270 370 170 70   -  - 370 70
2041  72 172 272 372 172 72 272 72   -  -
2042  74 174 274 374 174 74   -  -   -  -
2043  76 176 276 376 176 76   -  -   -  -
2044  78 178 278 378 178 78 278 78   -  -
2045  80 180 280 380 180 80   -  - 380 80
2046  82 182 282 382 182 82   -  -   -  -
2047  84 184 284 384 184 84 284 84   -  -
2048  86 186 286 386 186 86   -  -   -  -
2049  88 188 288 388 188 88   -  -   -  -
2050  90 190 290 390 190 90 290 90 390 90
2051  92 192 292 392 192 92   -  -   -  -
2052  94 194 294 394 194 94   -  -   -  -
2053   -   -   -   - 100  0   -  -   -  -
2054   -   -   -   -   -  - 200  0   -  -
2055   -   -   -   -   -  - 203  3   -  -
2056   -   -   -   -   -  - 209  9   -  -
2057   -   -   -   -   -  - 215 15   -  -
2058   -   -   -   -   -  - 221 21   -  -
2059   -   -   -   -   -  - 227 27   -  -
2060   -   -   -   -   -  - 233 33   -  -
2061   -   -   -   -   -  - 239 39   -  -
2062   -   -   -   -   -  - 245 45   -  -
2063   -   -   -   -   -  - 251 51   -  -
2064   -   -   -   -   -  - 257 57   -  -
2065   -   -   -   -   -  - 263 63   -  -
2066   -   -   -   -   -  - 269 69   -  -
2067   -   -   -   -   -  - 275 75   -  -
2068   -   -   -   -   -  - 281 81   -  -
2069   -   -   -   -   -  - 287 87   -  -
2070   -   -   -   -   -  - 293 93   -  -
2071   -   -   -   -   -  -   -  - 300  0
2072   -   -   -   -   -  -   -  - 305  5
2073   -   -   -   -   -  -   -  - 315 15
2074   -   -   -   -   -  -   -  - 325 25
2075   -   -   -   -   -  -   -  - 335 35
2076   -   -   -   -   -  -   -  - 345 45
2077   -   -   -   -   -  -   -  - 355 55
2078   -   -   -   -   -  -   -  - 365 65
2079   -   -   -   -   -  -   -  - 375 75
2080   -   -   -   -   -  -   -  - 385 85
2081   -   -   -   -   -  -   -  - 395 95
2082}
2083do_execsql_test joinD-49 {
2084  SELECT t1.*, t2.*, t3.*, t4.*
2085  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2086  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
2087  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
2088  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2089} {
2090  15 115 215 315   -  - 215 15 315 15
2091  30 130 230 330 130 30 230 30 330 30
2092  45 145 245 345   -  - 245 45 345 45
2093  60 160 260 360 160 60 260 60 360 60
2094  75 175 275 375   -  - 275 75 375 75
2095  90 190 290 390 190 90 290 90 390 90
2096}
2097do_execsql_test joinD-50 {
2098  SELECT t1.*, t2.*, t3.*, t4.*
2099  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2100  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
2101  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
2102  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2103} {
2104   3 103 203 303   -  - 203  3   -  -
2105   6 106 206 306 106  6 206  6   -  -
2106   9 109 209 309   -  - 209  9   -  -
2107  12 112 212 312 112 12 212 12   -  -
2108  15 115 215 315   -  - 215 15 315 15
2109  18 118 218 318 118 18 218 18   -  -
2110  21 121 221 321   -  - 221 21   -  -
2111  24 124 224 324 124 24 224 24   -  -
2112  27 127 227 327   -  - 227 27   -  -
2113  30 130 230 330 130 30 230 30 330 30
2114  33 133 233 333   -  - 233 33   -  -
2115  36 136 236 336 136 36 236 36   -  -
2116  39 139 239 339   -  - 239 39   -  -
2117  42 142 242 342 142 42 242 42   -  -
2118  45 145 245 345   -  - 245 45 345 45
2119  48 148 248 348 148 48 248 48   -  -
2120  51 151 251 351   -  - 251 51   -  -
2121  54 154 254 354 154 54 254 54   -  -
2122  57 157 257 357   -  - 257 57   -  -
2123  60 160 260 360 160 60 260 60 360 60
2124  63 163 263 363   -  - 263 63   -  -
2125  66 166 266 366 166 66 266 66   -  -
2126  69 169 269 369   -  - 269 69   -  -
2127  72 172 272 372 172 72 272 72   -  -
2128  75 175 275 375   -  - 275 75 375 75
2129  78 178 278 378 178 78 278 78   -  -
2130  81 181 281 381   -  - 281 81   -  -
2131  84 184 284 384 184 84 284 84   -  -
2132  87 187 287 387   -  - 287 87   -  -
2133  90 190 290 390 190 90 290 90 390 90
2134  93 193 293 393   -  - 293 93   -  -
2135}
2136do_execsql_test joinD-51 {
2137  SELECT t1.*, t2.*, t3.*, t4.*
2138  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2139  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
2140  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
2141  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2142} {
2143  15 115 215 315   -  - 215 15 315 15
2144  30 130 230 330 130 30 230 30 330 30
2145  45 145 245 345   -  - 245 45 345 45
2146  60 160 260 360 160 60 260 60 360 60
2147  75 175 275 375   -  - 275 75 375 75
2148  90 190 290 390 190 90 290 90 390 90
2149   -   -   -   -   -  -   -  - 300  0
2150   -   -   -   -   -  -   -  - 305  5
2151   -   -   -   -   -  -   -  - 310 10
2152   -   -   -   -   -  -   -  - 320 20
2153   -   -   -   -   -  -   -  - 325 25
2154   -   -   -   -   -  -   -  - 335 35
2155   -   -   -   -   -  -   -  - 340 40
2156   -   -   -   -   -  -   -  - 350 50
2157   -   -   -   -   -  -   -  - 355 55
2158   -   -   -   -   -  -   -  - 365 65
2159   -   -   -   -   -  -   -  - 370 70
2160   -   -   -   -   -  -   -  - 380 80
2161   -   -   -   -   -  -   -  - 385 85
2162   -   -   -   -   -  -   -  - 395 95
2163}
2164do_execsql_test joinD-52 {
2165  SELECT t1.*, t2.*, t3.*, t4.*
2166  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2167  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
2168  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
2169  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2170} {
2171   3 103 203 303   -  - 203  3   -  -
2172   6 106 206 306 106  6 206  6   -  -
2173   9 109 209 309   -  - 209  9   -  -
2174  12 112 212 312 112 12 212 12   -  -
2175  15 115 215 315   -  - 215 15 315 15
2176  18 118 218 318 118 18 218 18   -  -
2177  21 121 221 321   -  - 221 21   -  -
2178  24 124 224 324 124 24 224 24   -  -
2179  27 127 227 327   -  - 227 27   -  -
2180  30 130 230 330 130 30 230 30 330 30
2181  33 133 233 333   -  - 233 33   -  -
2182  36 136 236 336 136 36 236 36   -  -
2183  39 139 239 339   -  - 239 39   -  -
2184  42 142 242 342 142 42 242 42   -  -
2185  45 145 245 345   -  - 245 45 345 45
2186  48 148 248 348 148 48 248 48   -  -
2187  51 151 251 351   -  - 251 51   -  -
2188  54 154 254 354 154 54 254 54   -  -
2189  57 157 257 357   -  - 257 57   -  -
2190  60 160 260 360 160 60 260 60 360 60
2191  63 163 263 363   -  - 263 63   -  -
2192  66 166 266 366 166 66 266 66   -  -
2193  69 169 269 369   -  - 269 69   -  -
2194  72 172 272 372 172 72 272 72   -  -
2195  75 175 275 375   -  - 275 75 375 75
2196  78 178 278 378 178 78 278 78   -  -
2197  81 181 281 381   -  - 281 81   -  -
2198  84 184 284 384 184 84 284 84   -  -
2199  87 187 287 387   -  - 287 87   -  -
2200  90 190 290 390 190 90 290 90 390 90
2201  93 193 293 393   -  - 293 93   -  -
2202   -   -   -   -   -  -   -  - 300  0
2203   -   -   -   -   -  -   -  - 305  5
2204   -   -   -   -   -  -   -  - 310 10
2205   -   -   -   -   -  -   -  - 320 20
2206   -   -   -   -   -  -   -  - 325 25
2207   -   -   -   -   -  -   -  - 335 35
2208   -   -   -   -   -  -   -  - 340 40
2209   -   -   -   -   -  -   -  - 350 50
2210   -   -   -   -   -  -   -  - 355 55
2211   -   -   -   -   -  -   -  - 365 65
2212   -   -   -   -   -  -   -  - 370 70
2213   -   -   -   -   -  -   -  - 380 80
2214   -   -   -   -   -  -   -  - 385 85
2215   -   -   -   -   -  -   -  - 395 95
2216}
2217do_execsql_test joinD-53 {
2218  SELECT t1.*, t2.*, t3.*, t4.*
2219  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2220  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
2221  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
2222  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2223} {
2224   5 105 205 305   -  -   -  - 305  5
2225  10 110 210 310 110 10   -  - 310 10
2226  15 115 215 315   -  - 215 15 315 15
2227  20 120 220 320 120 20   -  - 320 20
2228  25 125 225 325   -  -   -  - 325 25
2229  30 130 230 330 130 30 230 30 330 30
2230  35 135 235 335   -  -   -  - 335 35
2231  40 140 240 340 140 40   -  - 340 40
2232  45 145 245 345   -  - 245 45 345 45
2233  50 150 250 350 150 50   -  - 350 50
2234  55 155 255 355   -  -   -  - 355 55
2235  60 160 260 360 160 60 260 60 360 60
2236  65 165 265 365   -  -   -  - 365 65
2237  70 170 270 370 170 70   -  - 370 70
2238  75 175 275 375   -  - 275 75 375 75
2239  80 180 280 380 180 80   -  - 380 80
2240  85 185 285 385   -  -   -  - 385 85
2241  90 190 290 390 190 90 290 90 390 90
2242  95 195 295 395   -  -   -  - 395 95
2243}
2244do_execsql_test joinD-54 {
2245  SELECT t1.*, t2.*, t3.*, t4.*
2246  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2247  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
2248  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
2249  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2250} {
2251   0 100 200 300   -  -   -  -   -  -
2252   1 101 201 301   -  -   -  -   -  -
2253   2 102 202 302 102  2   -  -   -  -
2254   3 103 203 303   -  - 203  3   -  -
2255   4 104 204 304 104  4   -  -   -  -
2256   5 105 205 305   -  -   -  - 305  5
2257   6 106 206 306 106  6 206  6   -  -
2258   7 107 207 307   -  -   -  -   -  -
2259   8 108 208 308 108  8   -  -   -  -
2260   9 109 209 309   -  - 209  9   -  -
2261  10 110 210 310 110 10   -  - 310 10
2262  11 111 211 311   -  -   -  -   -  -
2263  12 112 212 312 112 12 212 12   -  -
2264  13 113 213 313   -  -   -  -   -  -
2265  14 114 214 314 114 14   -  -   -  -
2266  15 115 215 315   -  - 215 15 315 15
2267  16 116 216 316 116 16   -  -   -  -
2268  17 117 217 317   -  -   -  -   -  -
2269  18 118 218 318 118 18 218 18   -  -
2270  19 119 219 319   -  -   -  -   -  -
2271  20 120 220 320 120 20   -  - 320 20
2272  21 121 221 321   -  - 221 21   -  -
2273  22 122 222 322 122 22   -  -   -  -
2274  23 123 223 323   -  -   -  -   -  -
2275  24 124 224 324 124 24 224 24   -  -
2276  25 125 225 325   -  -   -  - 325 25
2277  26 126 226 326 126 26   -  -   -  -
2278  27 127 227 327   -  - 227 27   -  -
2279  28 128 228 328 128 28   -  -   -  -
2280  29 129 229 329   -  -   -  -   -  -
2281  30 130 230 330 130 30 230 30 330 30
2282  31 131 231 331   -  -   -  -   -  -
2283  32 132 232 332 132 32   -  -   -  -
2284  33 133 233 333   -  - 233 33   -  -
2285  34 134 234 334 134 34   -  -   -  -
2286  35 135 235 335   -  -   -  - 335 35
2287  36 136 236 336 136 36 236 36   -  -
2288  37 137 237 337   -  -   -  -   -  -
2289  38 138 238 338 138 38   -  -   -  -
2290  39 139 239 339   -  - 239 39   -  -
2291  40 140 240 340 140 40   -  - 340 40
2292  41 141 241 341   -  -   -  -   -  -
2293  42 142 242 342 142 42 242 42   -  -
2294  43 143 243 343   -  -   -  -   -  -
2295  44 144 244 344 144 44   -  -   -  -
2296  45 145 245 345   -  - 245 45 345 45
2297  46 146 246 346 146 46   -  -   -  -
2298  47 147 247 347   -  -   -  -   -  -
2299  48 148 248 348 148 48 248 48   -  -
2300  49 149 249 349   -  -   -  -   -  -
2301  50 150 250 350 150 50   -  - 350 50
2302  51 151 251 351   -  - 251 51   -  -
2303  52 152 252 352 152 52   -  -   -  -
2304  53 153 253 353   -  -   -  -   -  -
2305  54 154 254 354 154 54 254 54   -  -
2306  55 155 255 355   -  -   -  - 355 55
2307  56 156 256 356 156 56   -  -   -  -
2308  57 157 257 357   -  - 257 57   -  -
2309  58 158 258 358 158 58   -  -   -  -
2310  59 159 259 359   -  -   -  -   -  -
2311  60 160 260 360 160 60 260 60 360 60
2312  61 161 261 361   -  -   -  -   -  -
2313  62 162 262 362 162 62   -  -   -  -
2314  63 163 263 363   -  - 263 63   -  -
2315  64 164 264 364 164 64   -  -   -  -
2316  65 165 265 365   -  -   -  - 365 65
2317  66 166 266 366 166 66 266 66   -  -
2318  67 167 267 367   -  -   -  -   -  -
2319  68 168 268 368 168 68   -  -   -  -
2320  69 169 269 369   -  - 269 69   -  -
2321  70 170 270 370 170 70   -  - 370 70
2322  71 171 271 371   -  -   -  -   -  -
2323  72 172 272 372 172 72 272 72   -  -
2324  73 173 273 373   -  -   -  -   -  -
2325  74 174 274 374 174 74   -  -   -  -
2326  75 175 275 375   -  - 275 75 375 75
2327  76 176 276 376 176 76   -  -   -  -
2328  77 177 277 377   -  -   -  -   -  -
2329  78 178 278 378 178 78 278 78   -  -
2330  79 179 279 379   -  -   -  -   -  -
2331  80 180 280 380 180 80   -  - 380 80
2332  81 181 281 381   -  - 281 81   -  -
2333  82 182 282 382 182 82   -  -   -  -
2334  83 183 283 383   -  -   -  -   -  -
2335  84 184 284 384 184 84 284 84   -  -
2336  85 185 285 385   -  -   -  - 385 85
2337  86 186 286 386 186 86   -  -   -  -
2338  87 187 287 387   -  - 287 87   -  -
2339  88 188 288 388 188 88   -  -   -  -
2340  89 189 289 389   -  -   -  -   -  -
2341  90 190 290 390 190 90 290 90 390 90
2342  91 191 291 391   -  -   -  -   -  -
2343  92 192 292 392 192 92   -  -   -  -
2344  93 193 293 393   -  - 293 93   -  -
2345  94 194 294 394 194 94   -  -   -  -
2346  95 195 295 395   -  -   -  - 395 95
2347  96   - 296 396   -  -   -  -   -  -
2348  97 197   - 397   -  -   -  -   -  -
2349  98 198 298   -   -  -   -  -   -  -
2350  99   -   -   -   -  -   -  -   -  -
2351   -   -   -   - 100  0   -  -   -  -
2352}
2353do_execsql_test joinD-55 {
2354  SELECT t1.*, t2.*, t3.*, t4.*
2355  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2356  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
2357  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
2358  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2359} {
2360   5 105 205 305   -  -   -  - 305  5
2361  10 110 210 310 110 10   -  - 310 10
2362  15 115 215 315   -  - 215 15 315 15
2363  20 120 220 320 120 20   -  - 320 20
2364  25 125 225 325   -  -   -  - 325 25
2365  30 130 230 330 130 30 230 30 330 30
2366  35 135 235 335   -  -   -  - 335 35
2367  40 140 240 340 140 40   -  - 340 40
2368  45 145 245 345   -  - 245 45 345 45
2369  50 150 250 350 150 50   -  - 350 50
2370  55 155 255 355   -  -   -  - 355 55
2371  60 160 260 360 160 60 260 60 360 60
2372  65 165 265 365   -  -   -  - 365 65
2373  70 170 270 370 170 70   -  - 370 70
2374  75 175 275 375   -  - 275 75 375 75
2375  80 180 280 380 180 80   -  - 380 80
2376  85 185 285 385   -  -   -  - 385 85
2377  90 190 290 390 190 90 290 90 390 90
2378  95 195 295 395   -  -   -  - 395 95
2379   -   -   -   -   -  -   -  - 300  0
2380}
2381do_execsql_test joinD-56 {
2382  SELECT t1.*, t2.*, t3.*, t4.*
2383  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2384  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
2385  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
2386  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2387} {
2388   0 100 200 300   -  -   -  -   -  -
2389   1 101 201 301   -  -   -  -   -  -
2390   2 102 202 302 102  2   -  -   -  -
2391   3 103 203 303   -  - 203  3   -  -
2392   4 104 204 304 104  4   -  -   -  -
2393   5 105 205 305   -  -   -  - 305  5
2394   6 106 206 306 106  6 206  6   -  -
2395   7 107 207 307   -  -   -  -   -  -
2396   8 108 208 308 108  8   -  -   -  -
2397   9 109 209 309   -  - 209  9   -  -
2398  10 110 210 310 110 10   -  - 310 10
2399  11 111 211 311   -  -   -  -   -  -
2400  12 112 212 312 112 12 212 12   -  -
2401  13 113 213 313   -  -   -  -   -  -
2402  14 114 214 314 114 14   -  -   -  -
2403  15 115 215 315   -  - 215 15 315 15
2404  16 116 216 316 116 16   -  -   -  -
2405  17 117 217 317   -  -   -  -   -  -
2406  18 118 218 318 118 18 218 18   -  -
2407  19 119 219 319   -  -   -  -   -  -
2408  20 120 220 320 120 20   -  - 320 20
2409  21 121 221 321   -  - 221 21   -  -
2410  22 122 222 322 122 22   -  -   -  -
2411  23 123 223 323   -  -   -  -   -  -
2412  24 124 224 324 124 24 224 24   -  -
2413  25 125 225 325   -  -   -  - 325 25
2414  26 126 226 326 126 26   -  -   -  -
2415  27 127 227 327   -  - 227 27   -  -
2416  28 128 228 328 128 28   -  -   -  -
2417  29 129 229 329   -  -   -  -   -  -
2418  30 130 230 330 130 30 230 30 330 30
2419  31 131 231 331   -  -   -  -   -  -
2420  32 132 232 332 132 32   -  -   -  -
2421  33 133 233 333   -  - 233 33   -  -
2422  34 134 234 334 134 34   -  -   -  -
2423  35 135 235 335   -  -   -  - 335 35
2424  36 136 236 336 136 36 236 36   -  -
2425  37 137 237 337   -  -   -  -   -  -
2426  38 138 238 338 138 38   -  -   -  -
2427  39 139 239 339   -  - 239 39   -  -
2428  40 140 240 340 140 40   -  - 340 40
2429  41 141 241 341   -  -   -  -   -  -
2430  42 142 242 342 142 42 242 42   -  -
2431  43 143 243 343   -  -   -  -   -  -
2432  44 144 244 344 144 44   -  -   -  -
2433  45 145 245 345   -  - 245 45 345 45
2434  46 146 246 346 146 46   -  -   -  -
2435  47 147 247 347   -  -   -  -   -  -
2436  48 148 248 348 148 48 248 48   -  -
2437  49 149 249 349   -  -   -  -   -  -
2438  50 150 250 350 150 50   -  - 350 50
2439  51 151 251 351   -  - 251 51   -  -
2440  52 152 252 352 152 52   -  -   -  -
2441  53 153 253 353   -  -   -  -   -  -
2442  54 154 254 354 154 54 254 54   -  -
2443  55 155 255 355   -  -   -  - 355 55
2444  56 156 256 356 156 56   -  -   -  -
2445  57 157 257 357   -  - 257 57   -  -
2446  58 158 258 358 158 58   -  -   -  -
2447  59 159 259 359   -  -   -  -   -  -
2448  60 160 260 360 160 60 260 60 360 60
2449  61 161 261 361   -  -   -  -   -  -
2450  62 162 262 362 162 62   -  -   -  -
2451  63 163 263 363   -  - 263 63   -  -
2452  64 164 264 364 164 64   -  -   -  -
2453  65 165 265 365   -  -   -  - 365 65
2454  66 166 266 366 166 66 266 66   -  -
2455  67 167 267 367   -  -   -  -   -  -
2456  68 168 268 368 168 68   -  -   -  -
2457  69 169 269 369   -  - 269 69   -  -
2458  70 170 270 370 170 70   -  - 370 70
2459  71 171 271 371   -  -   -  -   -  -
2460  72 172 272 372 172 72 272 72   -  -
2461  73 173 273 373   -  -   -  -   -  -
2462  74 174 274 374 174 74   -  -   -  -
2463  75 175 275 375   -  - 275 75 375 75
2464  76 176 276 376 176 76   -  -   -  -
2465  77 177 277 377   -  -   -  -   -  -
2466  78 178 278 378 178 78 278 78   -  -
2467  79 179 279 379   -  -   -  -   -  -
2468  80 180 280 380 180 80   -  - 380 80
2469  81 181 281 381   -  - 281 81   -  -
2470  82 182 282 382 182 82   -  -   -  -
2471  83 183 283 383   -  -   -  -   -  -
2472  84 184 284 384 184 84 284 84   -  -
2473  85 185 285 385   -  -   -  - 385 85
2474  86 186 286 386 186 86   -  -   -  -
2475  87 187 287 387   -  - 287 87   -  -
2476  88 188 288 388 188 88   -  -   -  -
2477  89 189 289 389   -  -   -  -   -  -
2478  90 190 290 390 190 90 290 90 390 90
2479  91 191 291 391   -  -   -  -   -  -
2480  92 192 292 392 192 92   -  -   -  -
2481  93 193 293 393   -  - 293 93   -  -
2482  94 194 294 394 194 94   -  -   -  -
2483  95 195 295 395   -  -   -  - 395 95
2484  96   - 296 396   -  -   -  -   -  -
2485  97 197   - 397   -  -   -  -   -  -
2486  98 198 298   -   -  -   -  -   -  -
2487  99   -   -   -   -  -   -  -   -  -
2488   -   -   -   - 100  0   -  -   -  -
2489   -   -   -   -   -  -   -  - 300  0
2490}
2491do_execsql_test joinD-57 {
2492  SELECT t1.*, t2.*, t3.*, t4.*
2493  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2494  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
2495  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
2496  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2497} {
2498  15 115 215 315   -  - 215 15 315 15
2499  30 130 230 330 130 30 230 30 330 30
2500  45 145 245 345   -  - 245 45 345 45
2501  60 160 260 360 160 60 260 60 360 60
2502  75 175 275 375   -  - 275 75 375 75
2503  90 190 290 390 190 90 290 90 390 90
2504}
2505do_execsql_test joinD-58 {
2506  SELECT t1.*, t2.*, t3.*, t4.*
2507  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2508  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
2509  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
2510  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2511} {
2512   3 103 203 303   -  - 203  3   -  -
2513   6 106 206 306 106  6 206  6   -  -
2514   9 109 209 309   -  - 209  9   -  -
2515  12 112 212 312 112 12 212 12   -  -
2516  15 115 215 315   -  - 215 15 315 15
2517  18 118 218 318 118 18 218 18   -  -
2518  21 121 221 321   -  - 221 21   -  -
2519  24 124 224 324 124 24 224 24   -  -
2520  27 127 227 327   -  - 227 27   -  -
2521  30 130 230 330 130 30 230 30 330 30
2522  33 133 233 333   -  - 233 33   -  -
2523  36 136 236 336 136 36 236 36   -  -
2524  39 139 239 339   -  - 239 39   -  -
2525  42 142 242 342 142 42 242 42   -  -
2526  45 145 245 345   -  - 245 45 345 45
2527  48 148 248 348 148 48 248 48   -  -
2528  51 151 251 351   -  - 251 51   -  -
2529  54 154 254 354 154 54 254 54   -  -
2530  57 157 257 357   -  - 257 57   -  -
2531  60 160 260 360 160 60 260 60 360 60
2532  63 163 263 363   -  - 263 63   -  -
2533  66 166 266 366 166 66 266 66   -  -
2534  69 169 269 369   -  - 269 69   -  -
2535  72 172 272 372 172 72 272 72   -  -
2536  75 175 275 375   -  - 275 75 375 75
2537  78 178 278 378 178 78 278 78   -  -
2538  81 181 281 381   -  - 281 81   -  -
2539  84 184 284 384 184 84 284 84   -  -
2540  87 187 287 387   -  - 287 87   -  -
2541  90 190 290 390 190 90 290 90 390 90
2542  93 193 293 393   -  - 293 93   -  -
2543   -   -   -   -   -  - 200  0   -  -
2544}
2545do_execsql_test joinD-59 {
2546  SELECT t1.*, t2.*, t3.*, t4.*
2547  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2548  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
2549  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
2550  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2551} {
2552  15 115 215 315   -  - 215 15 315 15
2553  30 130 230 330 130 30 230 30 330 30
2554  45 145 245 345   -  - 245 45 345 45
2555  60 160 260 360 160 60 260 60 360 60
2556  75 175 275 375   -  - 275 75 375 75
2557  90 190 290 390 190 90 290 90 390 90
2558   -   -   -   -   -  -   -  - 300  0
2559   -   -   -   -   -  -   -  - 305  5
2560   -   -   -   -   -  -   -  - 310 10
2561   -   -   -   -   -  -   -  - 320 20
2562   -   -   -   -   -  -   -  - 325 25
2563   -   -   -   -   -  -   -  - 335 35
2564   -   -   -   -   -  -   -  - 340 40
2565   -   -   -   -   -  -   -  - 350 50
2566   -   -   -   -   -  -   -  - 355 55
2567   -   -   -   -   -  -   -  - 365 65
2568   -   -   -   -   -  -   -  - 370 70
2569   -   -   -   -   -  -   -  - 380 80
2570   -   -   -   -   -  -   -  - 385 85
2571   -   -   -   -   -  -   -  - 395 95
2572}
2573do_execsql_test joinD-60 {
2574  SELECT t1.*, t2.*, t3.*, t4.*
2575  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2576  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
2577  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
2578  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2579} {
2580   3 103 203 303   -  - 203  3   -  -
2581   6 106 206 306 106  6 206  6   -  -
2582   9 109 209 309   -  - 209  9   -  -
2583  12 112 212 312 112 12 212 12   -  -
2584  15 115 215 315   -  - 215 15 315 15
2585  18 118 218 318 118 18 218 18   -  -
2586  21 121 221 321   -  - 221 21   -  -
2587  24 124 224 324 124 24 224 24   -  -
2588  27 127 227 327   -  - 227 27   -  -
2589  30 130 230 330 130 30 230 30 330 30
2590  33 133 233 333   -  - 233 33   -  -
2591  36 136 236 336 136 36 236 36   -  -
2592  39 139 239 339   -  - 239 39   -  -
2593  42 142 242 342 142 42 242 42   -  -
2594  45 145 245 345   -  - 245 45 345 45
2595  48 148 248 348 148 48 248 48   -  -
2596  51 151 251 351   -  - 251 51   -  -
2597  54 154 254 354 154 54 254 54   -  -
2598  57 157 257 357   -  - 257 57   -  -
2599  60 160 260 360 160 60 260 60 360 60
2600  63 163 263 363   -  - 263 63   -  -
2601  66 166 266 366 166 66 266 66   -  -
2602  69 169 269 369   -  - 269 69   -  -
2603  72 172 272 372 172 72 272 72   -  -
2604  75 175 275 375   -  - 275 75 375 75
2605  78 178 278 378 178 78 278 78   -  -
2606  81 181 281 381   -  - 281 81   -  -
2607  84 184 284 384 184 84 284 84   -  -
2608  87 187 287 387   -  - 287 87   -  -
2609  90 190 290 390 190 90 290 90 390 90
2610  93 193 293 393   -  - 293 93   -  -
2611   -   -   -   -   -  - 200  0   -  -
2612   -   -   -   -   -  -   -  - 300  0
2613   -   -   -   -   -  -   -  - 305  5
2614   -   -   -   -   -  -   -  - 310 10
2615   -   -   -   -   -  -   -  - 320 20
2616   -   -   -   -   -  -   -  - 325 25
2617   -   -   -   -   -  -   -  - 335 35
2618   -   -   -   -   -  -   -  - 340 40
2619   -   -   -   -   -  -   -  - 350 50
2620   -   -   -   -   -  -   -  - 355 55
2621   -   -   -   -   -  -   -  - 365 65
2622   -   -   -   -   -  -   -  - 370 70
2623   -   -   -   -   -  -   -  - 380 80
2624   -   -   -   -   -  -   -  - 385 85
2625   -   -   -   -   -  -   -  - 395 95
2626}
2627do_execsql_test joinD-61 {
2628  SELECT t1.*, t2.*, t3.*, t4.*
2629  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2630  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
2631  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
2632  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2633} {
2634   5 105 205 305   -  -   -  - 305  5
2635  10 110 210 310 110 10   -  - 310 10
2636  15 115 215 315   -  - 215 15 315 15
2637  20 120 220 320 120 20   -  - 320 20
2638  25 125 225 325   -  -   -  - 325 25
2639  30 130 230 330 130 30 230 30 330 30
2640  35 135 235 335   -  -   -  - 335 35
2641  40 140 240 340 140 40   -  - 340 40
2642  45 145 245 345   -  - 245 45 345 45
2643  50 150 250 350 150 50   -  - 350 50
2644  55 155 255 355   -  -   -  - 355 55
2645  60 160 260 360 160 60 260 60 360 60
2646  65 165 265 365   -  -   -  - 365 65
2647  70 170 270 370 170 70   -  - 370 70
2648  75 175 275 375   -  - 275 75 375 75
2649  80 180 280 380 180 80   -  - 380 80
2650  85 185 285 385   -  -   -  - 385 85
2651  90 190 290 390 190 90 290 90 390 90
2652  95 195 295 395   -  -   -  - 395 95
2653}
2654do_execsql_test joinD-62 {
2655  SELECT t1.*, t2.*, t3.*, t4.*
2656  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2657  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
2658  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
2659  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2660} {
2661   0 100 200 300   -  -   -  -   -  -
2662   1 101 201 301   -  -   -  -   -  -
2663   2 102 202 302 102  2   -  -   -  -
2664   3 103 203 303   -  - 203  3   -  -
2665   4 104 204 304 104  4   -  -   -  -
2666   5 105 205 305   -  -   -  - 305  5
2667   6 106 206 306 106  6 206  6   -  -
2668   7 107 207 307   -  -   -  -   -  -
2669   8 108 208 308 108  8   -  -   -  -
2670   9 109 209 309   -  - 209  9   -  -
2671  10 110 210 310 110 10   -  - 310 10
2672  11 111 211 311   -  -   -  -   -  -
2673  12 112 212 312 112 12 212 12   -  -
2674  13 113 213 313   -  -   -  -   -  -
2675  14 114 214 314 114 14   -  -   -  -
2676  15 115 215 315   -  - 215 15 315 15
2677  16 116 216 316 116 16   -  -   -  -
2678  17 117 217 317   -  -   -  -   -  -
2679  18 118 218 318 118 18 218 18   -  -
2680  19 119 219 319   -  -   -  -   -  -
2681  20 120 220 320 120 20   -  - 320 20
2682  21 121 221 321   -  - 221 21   -  -
2683  22 122 222 322 122 22   -  -   -  -
2684  23 123 223 323   -  -   -  -   -  -
2685  24 124 224 324 124 24 224 24   -  -
2686  25 125 225 325   -  -   -  - 325 25
2687  26 126 226 326 126 26   -  -   -  -
2688  27 127 227 327   -  - 227 27   -  -
2689  28 128 228 328 128 28   -  -   -  -
2690  29 129 229 329   -  -   -  -   -  -
2691  30 130 230 330 130 30 230 30 330 30
2692  31 131 231 331   -  -   -  -   -  -
2693  32 132 232 332 132 32   -  -   -  -
2694  33 133 233 333   -  - 233 33   -  -
2695  34 134 234 334 134 34   -  -   -  -
2696  35 135 235 335   -  -   -  - 335 35
2697  36 136 236 336 136 36 236 36   -  -
2698  37 137 237 337   -  -   -  -   -  -
2699  38 138 238 338 138 38   -  -   -  -
2700  39 139 239 339   -  - 239 39   -  -
2701  40 140 240 340 140 40   -  - 340 40
2702  41 141 241 341   -  -   -  -   -  -
2703  42 142 242 342 142 42 242 42   -  -
2704  43 143 243 343   -  -   -  -   -  -
2705  44 144 244 344 144 44   -  -   -  -
2706  45 145 245 345   -  - 245 45 345 45
2707  46 146 246 346 146 46   -  -   -  -
2708  47 147 247 347   -  -   -  -   -  -
2709  48 148 248 348 148 48 248 48   -  -
2710  49 149 249 349   -  -   -  -   -  -
2711  50 150 250 350 150 50   -  - 350 50
2712  51 151 251 351   -  - 251 51   -  -
2713  52 152 252 352 152 52   -  -   -  -
2714  53 153 253 353   -  -   -  -   -  -
2715  54 154 254 354 154 54 254 54   -  -
2716  55 155 255 355   -  -   -  - 355 55
2717  56 156 256 356 156 56   -  -   -  -
2718  57 157 257 357   -  - 257 57   -  -
2719  58 158 258 358 158 58   -  -   -  -
2720  59 159 259 359   -  -   -  -   -  -
2721  60 160 260 360 160 60 260 60 360 60
2722  61 161 261 361   -  -   -  -   -  -
2723  62 162 262 362 162 62   -  -   -  -
2724  63 163 263 363   -  - 263 63   -  -
2725  64 164 264 364 164 64   -  -   -  -
2726  65 165 265 365   -  -   -  - 365 65
2727  66 166 266 366 166 66 266 66   -  -
2728  67 167 267 367   -  -   -  -   -  -
2729  68 168 268 368 168 68   -  -   -  -
2730  69 169 269 369   -  - 269 69   -  -
2731  70 170 270 370 170 70   -  - 370 70
2732  71 171 271 371   -  -   -  -   -  -
2733  72 172 272 372 172 72 272 72   -  -
2734  73 173 273 373   -  -   -  -   -  -
2735  74 174 274 374 174 74   -  -   -  -
2736  75 175 275 375   -  - 275 75 375 75
2737  76 176 276 376 176 76   -  -   -  -
2738  77 177 277 377   -  -   -  -   -  -
2739  78 178 278 378 178 78 278 78   -  -
2740  79 179 279 379   -  -   -  -   -  -
2741  80 180 280 380 180 80   -  - 380 80
2742  81 181 281 381   -  - 281 81   -  -
2743  82 182 282 382 182 82   -  -   -  -
2744  83 183 283 383   -  -   -  -   -  -
2745  84 184 284 384 184 84 284 84   -  -
2746  85 185 285 385   -  -   -  - 385 85
2747  86 186 286 386 186 86   -  -   -  -
2748  87 187 287 387   -  - 287 87   -  -
2749  88 188 288 388 188 88   -  -   -  -
2750  89 189 289 389   -  -   -  -   -  -
2751  90 190 290 390 190 90 290 90 390 90
2752  91 191 291 391   -  -   -  -   -  -
2753  92 192 292 392 192 92   -  -   -  -
2754  93 193 293 393   -  - 293 93   -  -
2755  94 194 294 394 194 94   -  -   -  -
2756  95 195 295 395   -  -   -  - 395 95
2757  96   - 296 396   -  -   -  -   -  -
2758  97 197   - 397   -  -   -  -   -  -
2759  98 198 298   -   -  -   -  -   -  -
2760  99   -   -   -   -  -   -  -   -  -
2761   -   -   -   - 100  0   -  -   -  -
2762   -   -   -   -   -  - 200  0   -  -
2763}
2764do_execsql_test joinD-63 {
2765  SELECT t1.*, t2.*, t3.*, t4.*
2766  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2767  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
2768  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
2769  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2770} {
2771   5 105 205 305   -  -   -  - 305  5
2772  10 110 210 310 110 10   -  - 310 10
2773  15 115 215 315   -  - 215 15 315 15
2774  20 120 220 320 120 20   -  - 320 20
2775  25 125 225 325   -  -   -  - 325 25
2776  30 130 230 330 130 30 230 30 330 30
2777  35 135 235 335   -  -   -  - 335 35
2778  40 140 240 340 140 40   -  - 340 40
2779  45 145 245 345   -  - 245 45 345 45
2780  50 150 250 350 150 50   -  - 350 50
2781  55 155 255 355   -  -   -  - 355 55
2782  60 160 260 360 160 60 260 60 360 60
2783  65 165 265 365   -  -   -  - 365 65
2784  70 170 270 370 170 70   -  - 370 70
2785  75 175 275 375   -  - 275 75 375 75
2786  80 180 280 380 180 80   -  - 380 80
2787  85 185 285 385   -  -   -  - 385 85
2788  90 190 290 390 190 90 290 90 390 90
2789  95 195 295 395   -  -   -  - 395 95
2790   -   -   -   -   -  -   -  - 300  0
2791}
2792do_execsql_test joinD-64 {
2793  SELECT t1.*, t2.*, t3.*, t4.*
2794  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
2795  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
2796  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
2797  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
2798} {
2799   0 100 200 300   -  -   -  -   -  -
2800   1 101 201 301   -  -   -  -   -  -
2801   2 102 202 302 102  2   -  -   -  -
2802   3 103 203 303   -  - 203  3   -  -
2803   4 104 204 304 104  4   -  -   -  -
2804   5 105 205 305   -  -   -  - 305  5
2805   6 106 206 306 106  6 206  6   -  -
2806   7 107 207 307   -  -   -  -   -  -
2807   8 108 208 308 108  8   -  -   -  -
2808   9 109 209 309   -  - 209  9   -  -
2809  10 110 210 310 110 10   -  - 310 10
2810  11 111 211 311   -  -   -  -   -  -
2811  12 112 212 312 112 12 212 12   -  -
2812  13 113 213 313   -  -   -  -   -  -
2813  14 114 214 314 114 14   -  -   -  -
2814  15 115 215 315   -  - 215 15 315 15
2815  16 116 216 316 116 16   -  -   -  -
2816  17 117 217 317   -  -   -  -   -  -
2817  18 118 218 318 118 18 218 18   -  -
2818  19 119 219 319   -  -   -  -   -  -
2819  20 120 220 320 120 20   -  - 320 20
2820  21 121 221 321   -  - 221 21   -  -
2821  22 122 222 322 122 22   -  -   -  -
2822  23 123 223 323   -  -   -  -   -  -
2823  24 124 224 324 124 24 224 24   -  -
2824  25 125 225 325   -  -   -  - 325 25
2825  26 126 226 326 126 26   -  -   -  -
2826  27 127 227 327   -  - 227 27   -  -
2827  28 128 228 328 128 28   -  -   -  -
2828  29 129 229 329   -  -   -  -   -  -
2829  30 130 230 330 130 30 230 30 330 30
2830  31 131 231 331   -  -   -  -   -  -
2831  32 132 232 332 132 32   -  -   -  -
2832  33 133 233 333   -  - 233 33   -  -
2833  34 134 234 334 134 34   -  -   -  -
2834  35 135 235 335   -  -   -  - 335 35
2835  36 136 236 336 136 36 236 36   -  -
2836  37 137 237 337   -  -   -  -   -  -
2837  38 138 238 338 138 38   -  -   -  -
2838  39 139 239 339   -  - 239 39   -  -
2839  40 140 240 340 140 40   -  - 340 40
2840  41 141 241 341   -  -   -  -   -  -
2841  42 142 242 342 142 42 242 42   -  -
2842  43 143 243 343   -  -   -  -   -  -
2843  44 144 244 344 144 44   -  -   -  -
2844  45 145 245 345   -  - 245 45 345 45
2845  46 146 246 346 146 46   -  -   -  -
2846  47 147 247 347   -  -   -  -   -  -
2847  48 148 248 348 148 48 248 48   -  -
2848  49 149 249 349   -  -   -  -   -  -
2849  50 150 250 350 150 50   -  - 350 50
2850  51 151 251 351   -  - 251 51   -  -
2851  52 152 252 352 152 52   -  -   -  -
2852  53 153 253 353   -  -   -  -   -  -
2853  54 154 254 354 154 54 254 54   -  -
2854  55 155 255 355   -  -   -  - 355 55
2855  56 156 256 356 156 56   -  -   -  -
2856  57 157 257 357   -  - 257 57   -  -
2857  58 158 258 358 158 58   -  -   -  -
2858  59 159 259 359   -  -   -  -   -  -
2859  60 160 260 360 160 60 260 60 360 60
2860  61 161 261 361   -  -   -  -   -  -
2861  62 162 262 362 162 62   -  -   -  -
2862  63 163 263 363   -  - 263 63   -  -
2863  64 164 264 364 164 64   -  -   -  -
2864  65 165 265 365   -  -   -  - 365 65
2865  66 166 266 366 166 66 266 66   -  -
2866  67 167 267 367   -  -   -  -   -  -
2867  68 168 268 368 168 68   -  -   -  -
2868  69 169 269 369   -  - 269 69   -  -
2869  70 170 270 370 170 70   -  - 370 70
2870  71 171 271 371   -  -   -  -   -  -
2871  72 172 272 372 172 72 272 72   -  -
2872  73 173 273 373   -  -   -  -   -  -
2873  74 174 274 374 174 74   -  -   -  -
2874  75 175 275 375   -  - 275 75 375 75
2875  76 176 276 376 176 76   -  -   -  -
2876  77 177 277 377   -  -   -  -   -  -
2877  78 178 278 378 178 78 278 78   -  -
2878  79 179 279 379   -  -   -  -   -  -
2879  80 180 280 380 180 80   -  - 380 80
2880  81 181 281 381   -  - 281 81   -  -
2881  82 182 282 382 182 82   -  -   -  -
2882  83 183 283 383   -  -   -  -   -  -
2883  84 184 284 384 184 84 284 84   -  -
2884  85 185 285 385   -  -   -  - 385 85
2885  86 186 286 386 186 86   -  -   -  -
2886  87 187 287 387   -  - 287 87   -  -
2887  88 188 288 388 188 88   -  -   -  -
2888  89 189 289 389   -  -   -  -   -  -
2889  90 190 290 390 190 90 290 90 390 90
2890  91 191 291 391   -  -   -  -   -  -
2891  92 192 292 392 192 92   -  -   -  -
2892  93 193 293 393   -  - 293 93   -  -
2893  94 194 294 394 194 94   -  -   -  -
2894  95 195 295 395   -  -   -  - 395 95
2895  96   - 296 396   -  -   -  -   -  -
2896  97 197   - 397   -  -   -  -   -  -
2897  98 198 298   -   -  -   -  -   -  -
2898  99   -   -   -   -  -   -  -   -  -
2899   -   -   -   - 100  0   -  -   -  -
2900   -   -   -   -   -  - 200  0   -  -
2901   -   -   -   -   -  -   -  - 300  0
2902}
2903
2904#############################################################################
2905# The following are extra tests added manually
2906
2907do_execsql_test joinD-1000 {
2908  CREATE VIEW v1 AS
2909    SELECT *
2910    FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
2911    RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
2912    LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0;
2913  CREATE TRIGGER v1r1 INSTEAD OF UPDATE OF c ON v1 BEGIN
2914    UPDATE t1 SET c=new.c WHERE (a,b,c,d) IS (old.a,old.b,old.c,old.d);
2915    UPDATE t3 SET c=new.c WHERE (c,y) IS (old.c,old.y);
2916  END;
2917  SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y;
2918} {
2919  30 130 230 330 130 30 230 30 330 30
2920   -   -   -   -   -  - 233 33   -  -
2921  36 136 236 336 136 36 236 36   -  -
2922   -   -   -   -   -  - 239 39   -  -
2923}
2924do_execsql_test joinD-1010 {
2925  BEGIN;
2926  UPDATE v1 SET c=c+1000 WHERE y BETWEEN 30 and 40;
2927  SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y;
2928  ROLLBACK;
2929} {
2930  30 130 1230 330 130 30 1230 30 330 30
2931   -   -    -   -   -  -  233 33   -  -
2932  36 136 1236 336 136 36 1236 36   -  -
2933   -   -    -   -   -  -  239 39   -  -
2934}
2935
2936finish_test
2937
2938#############################################################################
2939# This is the TCL script used to generate the psql script that generated
2940# the data above.
2941#
2942# puts "
2943# \\pset border off
2944# \\pset tuples_only on
2945# \\pset null -
2946#
2947# DROP TABLE IF EXISTS t1;
2948# DROP TABLE IF EXISTS t2;
2949# DROP TABLE IF EXISTS t3;
2950# DROP TABLE IF EXISTS t4;
2951# CREATE TABLE t1(a INT, b INT, c INT, d INT);
2952# WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<95)
2953#   INSERT INTO t1(a,b,c,d) SELECT x, x+100, x+200, x+300 FROM c;
2954# CREATE TABLE t2(b INT, x INT);
2955# INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%2=0;
2956# CREATE INDEX t2b ON t2(b);
2957# CREATE TABLE t3(c INT, y INT);
2958# INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%3=0;
2959# CREATE INDEX t3c ON t3(c);
2960# CREATE TABLE t4(d INT, z INT);
2961# INSERT INTO t4(d,z) SELECT d, a FROM t1 WHERE a%5=0;
2962# CREATE INDEX t4d ON t4(d);
2963# INSERT INTO t1(a,b,c,d) VALUES
2964#   (96,NULL,296,396),
2965#   (97,197,NULL,397),
2966#   (98,198,298,NULL),
2967#   (99,NULL,NULL,NULL);
2968# "
2969#
2970# proc echo {prefix txt} {
2971#   regsub -all {\n} $txt \n$prefix txt
2972#   puts "$prefix$txt"
2973# }
2974#
2975# set n 0
2976# set k 0
2977# foreach j1 {INNER LEFT RIGHT FULL} {
2978#   foreach j2 {INNER LEFT RIGHT FULL} {
2979#     foreach j3 {INNER LEFT RIGHT FULL} {
2980#
2981# incr n
2982# incr k
2983# set q1 ""
2984# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
2985# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
2986# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
2987# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
2988# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
2989#
2990# echo "\\qecho " "do_execsql_test joinB-$n \{"
2991# echo "\\qecho X  " $q1
2992# echo "\\qecho " "\} \{"
2993# puts $q1
2994# echo "\\qecho " "\}"
2995#
2996#     }
2997#   }
2998# }
2999