]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
New test cases using various join types and Bloom filters. Two cases
authordrh <>
Wed, 4 May 2022 11:49:26 +0000 (11:49 +0000)
committerdrh <>
Wed, 4 May 2022 11:49:26 +0000 (11:49 +0000)
differ from PG and need to be resolved.

FossilOrigin-Name: befa8cbc0682bc3269f87e392a1f3d4baacf4db7c716ea84192bb9c13c99490b

manifest
manifest.uuid
test/joinD.test [new file with mode: 0644]

index 2c27eceb6c1efb63fd63195b1f8908b8e8dddf75..b4b9177d611ea7c1bc99d0b075e2b302aa6b201a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sCLI\suse\sof\swrong\sallocator\sfor\sfree().
-D 2022-05-04T03:45:32.728
+C New\stest\scases\susing\svarious\sjoin\stypes\sand\sBloom\sfilters.\s\sTwo\scases\ndiffer\sfrom\sPG\sand\sneed\sto\sbe\sresolved.
+D 2022-05-04T11:49:26.461
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1152,6 +1152,7 @@ F test/join8.test 9a4b2f53d5358abb29e6356e357c0cd40f4d8f282589300dcb76728dce050b
 F test/join9.test 9056ddd3b0c0f4f9d658f4521038d9a37dc23ead8ca9a505d0b0db2b6a471e05
 F test/joinA.test 7eab225dc1c1ab258a5e62513a4ed7cabbd3db971d59d5d92f4fb6fa14c12f6a
 F test/joinB.test 1b2ba3fc8568b49411787fccbf540570c148e9b6a53a30f80691cb6268098ded
+F test/joinD.test 58fb0aae651798a2264128f3f6f6ee3c9b5d5548071a1044365511b10de4edd3
 F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4
 F test/journal3.test 7c3cf23ffc77db06601c1fcfc9743de8441cb77db9d1aa931863d94f5ffa140e
@@ -1951,8 +1952,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8cee5388232ade91ea627bb6857eb8937d7530b5ea519e0ae6da362c37c7ed35
-R 3c89c63aaa0653a254417d115718d7c3
-U larrybr
-Z 111ff23023abfd8d38c72ec3de24a2fe
+P 9fb20a21feb8f6979812f45691e06aa3e297d7370cf0d5820523e817a4e97863
+R 1cecd5f53d4f5e59729da8bc3d52cbbb
+T *branch * joinD
+T *sym-joinD *
+T -sym-trunk *
+U drh
+Z fd017d0848e05371e5483ff3dffc569c
 # Remove this line to create a well-formed Fossil manifest.
index 0ae4c52f891e6538290970c72300bb1f378516fb..e97130cfc5acd60be3823f27b3d25bfce377f368 100644 (file)
@@ -1 +1 @@
-9fb20a21feb8f6979812f45691e06aa3e297d7370cf0d5820523e817a4e97863
\ No newline at end of file
+befa8cbc0682bc3269f87e392a1f3d4baacf4db7c716ea84192bb9c13c99490b
\ No newline at end of file
diff --git a/test/joinD.test b/test/joinD.test
new file mode 100644 (file)
index 0000000..9ac813f
--- /dev/null
@@ -0,0 +1,2961 @@
+# 2022-05-04
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# This file implements tests for JOINs that use Bloom filters.
+#
+# The test case output is all generated by PostgreSQL 14.  This test module
+# was created as follows:
+#
+#   1.   Run a TCL script (included at the bottom of this file) that
+#        generates an input script for "psql" that will run man
+#        diverse tests on joins.
+#
+#   2.   Run the script from step (1) through psql and collect the
+#        output.
+#
+#   3.   Make a few minor global search-and-replace operations to convert
+#        the psql output into a form suitable for this test module.
+#
+#   4.   Add this header, and the script content at the footer.
+#
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+db nullvalue -
+db eval {
+  CREATE TABLE t1(a INT, b INT, c INT, d INT);
+  WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<95)
+    INSERT INTO t1(a,b,c,d) SELECT x, x+100, x+200, x+300 FROM c;
+  CREATE TABLE t2(b INT, x INT);
+  INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%2=0;
+  CREATE INDEX t2b ON t2(b);
+  CREATE TABLE t3(c INT, y INT);
+  INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%3=0;
+  CREATE INDEX t3c ON t3(c);
+  CREATE TABLE t4(d INT, z INT);
+  INSERT INTO t4(d,z) SELECT d, a FROM t1 WHERE a%5=0;
+  CREATE INDEX t4d ON t4(d);
+  INSERT INTO t1(a,b,c,d) VALUES
+    (96,NULL,296,396),
+    (97,197,NULL,397),
+    (98,198,298,NULL),
+    (99,NULL,NULL,NULL);
+  ANALYZE;
+}
+do_execsql_test joinD-1 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-2 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-3 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-4 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-5 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-6 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-7 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-8 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-9 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-10 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-11 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-12 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-13 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-14 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-15 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-16 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-17 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-18 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-19 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-20 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-21 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-22 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-23 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-24 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-25 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-26 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-27 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-28 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-29 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-30 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-31 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-32 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-33 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-34 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-35 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-36 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-37 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-38 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-39 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-40 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-41 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-42 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-43 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-44 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-45 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-46 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-47 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-48 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-49 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-50 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-51 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-52 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-53 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-54 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-55 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-56 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-57 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-58 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-59 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-60 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-61 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-62 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-63 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-64 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+finish_test
+#############################################################################
+# This is the TCL script used to generate the psql script that generated
+# the data above.
+#
+# puts "
+# \\pset border off
+# \\pset tuples_only on
+# \\pset null -
+# 
+# DROP TABLE IF EXISTS t1;
+# DROP TABLE IF EXISTS t2;
+# DROP TABLE IF EXISTS t3;
+# DROP TABLE IF EXISTS t4;
+# CREATE TABLE t1(a INT, b INT, c INT, d INT);
+# WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<95)
+#   INSERT INTO t1(a,b,c,d) SELECT x, x+100, x+200, x+300 FROM c;
+# CREATE TABLE t2(b INT, x INT);
+# INSERT INTO t2(b,x) SELECT b, a FROM t1 WHERE a%2=0;
+# CREATE INDEX t2b ON t2(b);
+# CREATE TABLE t3(c INT, y INT);
+# INSERT INTO t3(c,y) SELECT c, a FROM t1 WHERE a%3=0;
+# CREATE INDEX t3c ON t3(c);
+# CREATE TABLE t4(d INT, z INT);
+# INSERT INTO t4(d,z) SELECT d, a FROM t1 WHERE a%5=0;
+# CREATE INDEX t4d ON t4(d);
+# INSERT INTO t1(a,b,c,d) VALUES
+#   (96,NULL,296,396),
+#   (97,197,NULL,397),
+#   (98,198,298,NULL),
+#   (99,NULL,NULL,NULL);
+# "
+# 
+# proc echo {prefix txt} {
+#   regsub -all {\n} $txt \n$prefix txt
+#   puts "$prefix$txt"
+# }
+# 
+# set n 0
+# set k 0
+# foreach j1 {INNER LEFT RIGHT FULL} {
+#   foreach j2 {INNER LEFT RIGHT FULL} {
+#     foreach j3 {INNER LEFT RIGHT FULL} {
+# 
+# incr n
+# incr k
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+#     }
+#   }
+# }