CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
join9.test566 linesDownload Raw Back to test
1# 2022-04-162#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11# This file implements regression tests for SQLite library.12#13# This file implements tests for RIGHT and FULL OUTER JOINs.14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17 18foreach {id schema} {19  1 {20    CREATE TABLE t3(id INTEGER PRIMARY KEY, w TEXT);21    CREATE TABLE t4(id INTEGER PRIMARY KEY, x TEXT);22    CREATE TABLE t5(id INTEGER PRIMARY KEY, y TEXT);23    CREATE TABLE t6(id INTEGER PRIMARY KEY, z INT);24    CREATE VIEW dual(dummy) AS VALUES('x');25    INSERT INTO t3(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven');26    INSERT INTO t4(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave');27    INSERT INTO t5(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'),28                               (5,'blue');29    INSERT INTO t6(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999);30  }31  2 {32    CREATE TABLE t3(id INT PRIMARY KEY, w TEXT) WITHOUT ROWID;33    CREATE TABLE t4(id INT PRIMARY KEY, x TEXT) WITHOUT ROWID;34    CREATE TABLE t5(id INT PRIMARY KEY, y TEXT) WITHOUT ROWID;35    CREATE TABLE t6(id INT PRIMARY KEY, z INT) WITHOUT ROWID;36    CREATE TABLE dual(dummy TEXT);37    INSERT INTO dual(dummy) VALUES('x');38    INSERT INTO t3(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven');39    INSERT INTO t4(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave');40    INSERT INTO t5(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'),41                               (5,'blue');42    INSERT INTO t6(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999);43  }44  3 {45    CREATE TABLE t3x(id INTEGER PRIMARY KEY, w TEXT);46    CREATE TABLE t4x(id INTEGER PRIMARY KEY, x TEXT);47    CREATE TABLE t5x(id INTEGER PRIMARY KEY, y TEXT);48    CREATE TABLE t6x(id INTEGER PRIMARY KEY, z INT);49    CREATE VIEW dual(dummy) AS VALUES('x');50    INSERT INTO t3x(id,w) VALUES(2,'two'),(3,'three'),(6,'six'),(7,'seven');51    INSERT INTO t4x(id,x) VALUES(2,'alice'),(4,'bob'),(6,'cindy'),(8,'dave');52    INSERT INTO t5x(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow'),(4,'green'),53                               (5,'blue');54    INSERT INTO t6x(id,z) VALUES(3,333),(4,444),(5,555),(0,1000),(9,999);55    CREATE VIEW t3 AS SELECT * FROM t3x LIMIT 1000;56    CREATE VIEW t4 AS SELECT * FROM t4x LIMIT 1000;57    CREATE VIEW t5 AS SELECT * FROM t5x LIMIT 1000;58    CREATE VIEW t6 AS SELECT * FROM t6x LIMIT 1000;59  }60  4 {61    CREATE TABLE t3a(id INTEGER PRIMARY KEY, w TEXT);62    CREATE TABLE t3b(id INTEGER PRIMARY KEY, w TEXT);63    CREATE TABLE t4a(id INTEGER PRIMARY KEY, x TEXT);64    CREATE TABLE t4b(id INTEGER PRIMARY KEY, x TEXT);65    CREATE TABLE t5a(id INTEGER PRIMARY KEY, y TEXT);66    CREATE TABLE t5b(id INTEGER PRIMARY KEY, y TEXT);67    CREATE TABLE t6a(id INTEGER PRIMARY KEY, z INT);68    CREATE TABLE t6b(id INTEGER PRIMARY KEY, z INT);69    CREATE VIEW dual(dummy) AS VALUES('x');70    INSERT INTO t3a(id,w) VALUES(2,'two'),(3,'three');71    INSERT INTO t3b(id,w) VALUES(6,'six'),(7,'seven');72    INSERT INTO t4a(id,x) VALUES(2,'alice'),(4,'bob');73    INSERT INTO t4b(id,x) VALUES(6,'cindy'),(8,'dave');74    INSERT INTO t5a(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow');75    INSERT INTO t5b(id,y) VALUES(4,'green'),(5,'blue');76    INSERT INTO t6a(id,z) VALUES(3,333),(4,444);77    INSERT INTO t6b(id,z) VALUES(5,555),(0,1000),(9,999);78    CREATE VIEW t3 AS SELECT * FROM t3a UNION ALL SELECT * FROM t3b;79    CREATE VIEW t4 AS SELECT * FROM t4a UNION ALL SELECT * FROM t4b;80    CREATE VIEW t5 AS SELECT * FROM t5a UNION ALL SELECT * FROM t5b;81    CREATE VIEW t6 AS SELECT * FROM t6a UNION ALL SELECT * FROM t6b;82  }83  5 {84    CREATE TABLE t3a(id INTEGER PRIMARY KEY, w TEXT) WITHOUT ROWID;85    CREATE TABLE t3b(id INTEGER PRIMARY KEY, w TEXT);86    CREATE TABLE t4a(id INTEGER PRIMARY KEY, x TEXT) WITHOUT ROWID;87    CREATE TABLE t4b(id INTEGER PRIMARY KEY, x TEXT) WITHOUT ROWID;88    CREATE TABLE t5a(id INTEGER PRIMARY KEY, y TEXT);89    CREATE TABLE t5b(id INTEGER PRIMARY KEY, y TEXT) WITHOUT ROWID;90    CREATE TABLE t6a(id INTEGER PRIMARY KEY, z INT);91    CREATE TABLE t6b(id INTEGER PRIMARY KEY, z INT);92    CREATE VIEW dual(dummy) AS VALUES('x');93    INSERT INTO t3a(id,w) VALUES(2,'two'),(3,'three');94    INSERT INTO t3b(id,w) VALUES(6,'six'),(7,'seven');95    INSERT INTO t4a(id,x) VALUES(2,'alice'),(4,'bob');96    INSERT INTO t4b(id,x) VALUES(6,'cindy'),(8,'dave');97    INSERT INTO t5a(id,y) VALUES(1,'red'),(2,'orange'),(3,'yellow');98    INSERT INTO t5b(id,y) VALUES(4,'green'),(5,'blue');99    INSERT INTO t6a(id,z) VALUES(3,333),(4,444);100    INSERT INTO t6b(id,z) VALUES(5,555),(0,1000),(9,999);101    CREATE VIEW t3 AS SELECT * FROM t3a UNION ALL SELECT * FROM t3b;102    CREATE VIEW t4 AS SELECT * FROM t4a UNION ALL SELECT * FROM t4b LIMIT 50;103    CREATE VIEW t5 AS SELECT * FROM t5a UNION ALL SELECT * FROM t5b LIMIT 100;104    CREATE VIEW t6 AS SELECT * FROM t6a UNION ALL SELECT * FROM t6b;105  }106} {107  reset_db108  db nullvalue -109  do_execsql_test join9-$id.setup $schema {}110 111  # Verifid by PG-14 for case 1112  do_execsql_test join9-$id.100 {113    SELECT *, t4.id, t5.id, t6.id114      FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6115     ORDER BY 1;116  } {117    2   alice  orange  -    2   2   - 118    4   bob    green   444  4   4   4 119    6   cindy  -       -    6   -   - 120    8   dave   -       -    8   -   - 121  }122 123  do_execsql_test join9-$id.101 {124    SELECT *, t4.id, t5.id, t6.id125      FROM t4 NATURAL LEFT JOIN t5 NATURAL LEFT JOIN t6126     ORDER BY id;127  } {128    2   alice  orange  -    2   2   - 129    4   bob    green   444  4   4   4 130    6   cindy  -       -    6   -   - 131    8   dave   -       -    8   -   - 132  }133  do_execsql_test join9-$id.102 {134    SELECT *, t4.id, t5.id, t6.id135      FROM t4 LEFT JOIN t5 USING(id) LEFT JOIN t6 USING(id)136     ORDER BY id;137  } {138    2   alice  orange  -    2   2   - 139    4   bob    green   444  4   4   4 140    6   cindy  -       -    6   -   - 141    8   dave   -       -    8   -   - 142  }143 144  # Verifid by PG-14 using case 1145  do_execsql_test join9-$id.200 {146    SELECT id, x, y, z, t4.id, t5.id, t6.id147      FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6148     ORDER BY 1;149  } {150    2   alice  orange  -    2   2   - 151    4   bob    green   444  4   4   4 152    6   cindy  -       -    6   -   - 153    8   dave   -       -    8   -   - 154  }155 156  do_execsql_test join9-$id.201 {157    SELECT id, x, y, z, t4.id, t5.id, t6.id158      FROM t5 NATURAL RIGHT JOIN t4 NATURAL LEFT JOIN t6159     ORDER BY id;160  } {161    2   alice  orange  -    2   2   - 162    4   bob    green   444  4   4   4 163    6   cindy  -       -    6   -   - 164    8   dave   -       -    8   -   - 165  }166 167  # Verified by PG-14 using case 1168  do_execsql_test join9-$id.300 {169    SELECT *, t4.id, t5.id, t6.id170      FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6171     ORDER BY 1;172  } {173    0   -    -       1000  -   -   0 174    3   -    yellow  333   -   3   3 175    4   bob  green   444   4   4   4 176    5   -    blue    555   -   5   5 177    9   -    -       999   -   -   9 178  }179 180  do_execsql_test join9-$id.301 {181    SELECT *, t4.id, t5.id, t6.id182      FROM t4 NATURAL RIGHT JOIN t5 NATURAL RIGHT JOIN t6183     ORDER BY id;184  } {185    0   -    -       1000  -   -   0 186    3   -    yellow  333   -   3   3 187    4   bob  green   444   4   4   4 188    5   -    blue    555   -   5   5 189    9   -    -       999   -   -   9 190  }191 192  # Verified by PG-14 for case 1193  do_execsql_test join9-$id.400 {194    SELECT *, t4.id, t5.id, t6.id195      FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6196     ORDER BY 1;197  } {198    0    -      -       1000  -   -   0 199    1    -      red     -     -   1   - 200    2    alice  orange  -     2   2   - 201    3    -      yellow  333   -   3   3 202    4    bob    green   444   4   4   4 203    5    -      blue    555   -   5   5 204    6    cindy  -       -     6   -   - 205    8    dave   -       -     8   -   - 206    9    -      -       999   -   -   9 207  }208 209  do_execsql_test join9-$id.401 {210    SELECT *, t4.id, t5.id, t6.id211      FROM t4 NATURAL FULL JOIN t5 NATURAL FULL JOIN t6212     ORDER BY id;213  } {214    0    -      -       1000  -   -   0 215    1    -      red     -     -   1   - 216    2    alice  orange  -     2   2   - 217    3    -      yellow  333   -   3   3 218    4    bob    green   444   4   4   4 219    5    -      blue    555   -   5   5 220    6    cindy  -       -     6   -   - 221    8    dave   -       -     8   -   - 222    9    -      -       999   -   -   9 223  }224  do_execsql_test join9-$id.402 {225    SELECT id, x, y, z, t4.id, t5.id, t6.id226      FROM t4 NATURAL FULL JOIN t6 NATURAL FULL JOIN t5227     ORDER BY id;228  } {229    0    -      -       1000  -   -   0 230    1    -      red     -     -   1   - 231    2    alice  orange  -     2   2   - 232    3    -      yellow  333   -   3   3 233    4    bob    green   444   4   4   4 234    5    -      blue    555   -   5   5 235    6    cindy  -       -     6   -   - 236    8    dave   -       -     8   -   - 237    9    -      -       999   -   -   9 238  }239  do_execsql_test join9-$id.403 {240    SELECT id, x, y, z, t4.id, t5.id, t6.id241      FROM t5 NATURAL FULL JOIN t4 NATURAL FULL JOIN t6242     ORDER BY id;243  } {244    0    -      -       1000  -   -   0 245    1    -      red     -     -   1   - 246    2    alice  orange  -     2   2   - 247    3    -      yellow  333   -   3   3 248    4    bob    green   444   4   4   4 249    5    -      blue    555   -   5   5 250    6    cindy  -       -     6   -   - 251    8    dave   -       -     8   -   - 252    9    -      -       999   -   -   9 253  }254  do_execsql_test join9-$id.404 {255    SELECT id, x, y, z, t4.id, t5.id, t6.id256      FROM t5 NATURAL FULL JOIN t6 NATURAL FULL JOIN t4257     ORDER BY id;258  } {259    0    -      -       1000  -   -   0 260    1    -      red     -     -   1   - 261    2    alice  orange  -     2   2   - 262    3    -      yellow  333   -   3   3 263    4    bob    green   444   4   4   4 264    5    -      blue    555   -   5   5 265    6    cindy  -       -     6   -   - 266    8    dave   -       -     8   -   - 267    9    -      -       999   -   -   9 268  }269  do_execsql_test join9-$id.405 {270    SELECT id, x, y, z, t4.id, t5.id, t6.id271      FROM t6 NATURAL FULL JOIN t4 NATURAL FULL JOIN t5272     ORDER BY id;273  } {274    0    -      -       1000  -   -   0 275    1    -      red     -     -   1   - 276    2    alice  orange  -     2   2   - 277    3    -      yellow  333   -   3   3 278    4    bob    green   444   4   4   4 279    5    -      blue    555   -   5   5 280    6    cindy  -       -     6   -   - 281    8    dave   -       -     8   -   - 282    9    -      -       999   -   -   9 283  }284  do_execsql_test join9-$id.406 {285    SELECT id, x, y, z, t4.id, t5.id, t6.id286      FROM t6 NATURAL FULL JOIN t5 NATURAL FULL JOIN t4287     ORDER BY id;288  } {289    0    -      -       1000  -   -   0 290    1    -      red     -     -   1   - 291    2    alice  orange  -     2   2   - 292    3    -      yellow  333   -   3   3 293    4    bob    green   444   4   4   4 294    5    -      blue    555   -   5   5 295    6    cindy  -       -     6   -   - 296    8    dave   -       -     8   -   - 297    9    -      -       999   -   -   9 298  }299 300  # Verified by PG-14 using case 1301  do_execsql_test join9-$id.500 {302    SELECT id, w, x, y, z303      FROM t3 FULL JOIN t4 USING(id)304              NATURAL FULL JOIN t5305              FULL JOIN t6 USING(id)306      ORDER BY 1;307  } {308    0   -      -      -       1000309    1   -      -      red     -   310    2   two    alice  orange  -   311    3   three  -      yellow  333 312    4   -      bob    green   444 313    5   -      -      blue    555 314    6   six    cindy  -       -   315    7   seven  -      -       -   316    8   -      dave   -       -   317    9   -      -      -       999 318  }319 320  # Verified by PG-14 using case 1321  do_execsql_test join9-$id.600 {322    SELECT id, w, x, y, z323       FROM t3 JOIN dual AS d1 ON true324               FULL JOIN t4 USING(id)325               JOIN dual AS d2 ON true326               NATURAL FULL JOIN t5327               JOIN dual AS d3 ON true328               FULL JOIN t6 USING(id)329               CROSS JOIN dual AS d4330      ORDER BY 1;331  } {332    0   -      -      -       1000333    1   -      -      red     -   334    2   two    alice  orange  -   335    3   three  -      yellow  333 336    4   -      bob    green   444 337    5   -      -      blue    555 338    6   six    cindy  -       -   339    7   seven  -      -       -   340    8   -      dave   -       -   341    9   -      -      -       999 342  }343 344  # Verified by PG-14 using case 1345  do_execsql_test join9-$id.700 {346    SELECT id, w, x, y, z347       FROM t3 JOIN dual AS d1 ON true348               FULL JOIN t4 USING(id)349               JOIN dual AS d2 ON true350               NATURAL FULL JOIN t5351               JOIN dual AS d3 ON true352               FULL JOIN t6 USING(id)353               CROSS JOIN dual AS d4354      WHERE x<>'bob' OR x IS NULL355      ORDER BY 1;356  } {357    0   -      -      -       1000358    1   -      -      red     -   359    2   two    alice  orange  -   360    3   three  -      yellow  333 361    5   -      -      blue    555 362    6   six    cindy  -       -   363    7   seven  -      -       -   364    8   -      dave   -       -   365    9   -      -      -       999 366  }367 368  # Verified by PG-14 using case 1369  do_execsql_test join9-$id.800 {370    WITH t7(id,a) AS MATERIALIZED (SELECT * FROM t4 WHERE false)371    SELECT *372      FROM t7 373           JOIN t7 AS t7b USING(id)374           FULL JOIN t3 USING(id);375  } {376    2   -  -  two  377    3   -  -  three378    6   -  -  six  379    7   -  -  seven380  }381 382  # Verified by PG-14383  do_execsql_test join9-$id.900 {384    SELECT *385      FROM (t3 NATURAL FULL JOIN t4)386           NATURAL FULL JOIN387           (t5 NATURAL FULL JOIN t6)388    ORDER BY 1;389  } {390    0   -      -      -       1000391    1   -      -      red     -   392    2   two    alice  orange  -   393    3   three  -      yellow  333 394    4   -      bob    green   444 395    5   -      -      blue    555 396    6   six    cindy  -       -   397    7   seven  -      -       -   398    8   -      dave   -       -   399    9   -      -      -       999 400  }401  do_execsql_test join9-$id.910 {402    SELECT *403      FROM t3 NATURAL FULL JOIN 404           (t4 NATURAL FULL JOIN405            (t5 NATURAL FULL JOIN t6))406    ORDER BY 1;407  } {408    0   -      -      -       1000409    1   -      -      red     -   410    2   two    alice  orange  -   411    3   three  -      yellow  333 412    4   -      bob    green   444 413    5   -      -      blue    555 414    6   six    cindy  -       -   415    7   seven  -      -       -   416    8   -      dave   -       -   417    9   -      -      -       999 418  }419  do_execsql_test join9-$id.920 {420    SELECT *421      FROM t3 FULL JOIN (422                t4 FULL JOIN (423                    t5 FULL JOIN t6 USING (id)424                ) USING(id)425           ) USING(id)426    ORDER BY 1;427  } {428    0   -      -      -       1000429    1   -      -      red     -   430    2   two    alice  orange  -   431    3   three  -      yellow  333 432    4   -      bob    green   444 433    5   -      -      blue    555 434    6   six    cindy  -       -   435    7   seven  -      -       -   436    8   -      dave   -       -   437    9   -      -      -       999 438  }439  do_execsql_test join9-$id.920 {440    SELECT *441      FROM t3 FULL JOIN (442                t4 FULL JOIN (443                    t5 FULL JOIN t6 USING (id)444                ) USING(id)445           ) USING(id)446    ORDER BY 1;447  } {448    0   -      -      -       1000449    1   -      -      red     -   450    2   two    alice  orange  -   451    3   three  -      yellow  333 452    4   -      bob    green   444 453    5   -      -      blue    555 454    6   six    cindy  -       -   455    7   seven  -      -       -   456    8   -      dave   -       -   457    9   -      -      -       999 458  }459 460  # Verified by PG-14461  do_execsql_test join9-$id.930 {462    SELECT *463      FROM t3 FULL JOIN (464               t4 FULL JOIN (465                   t5 FULL JOIN t6 USING(id)466               ) USING(id)467           ) AS j1 ON j1.id=t3.id468     ORDER BY coalesce(t3.id,j1.id);469  } {470    -   -      0   -      -       1000471    -   -      1   -      red     -   472    2   two    2   alice  orange  -   473    3   three  3   -      yellow  333 474    -   -      4   bob    green   444 475    -   -      5   -      blue    555 476    6   six    6   cindy  -       -   477    7   seven  -   -      -       -   478    -   -      8   dave   -       -   479    -   -      9   -      -       999 480  }481 482  # Verified by PG-14483  do_execsql_test join9-$id.940 {484    SELECT *485      FROM t3 FULL JOIN (486                t4 RIGHT JOIN (487                    t5 FULL JOIN t6 USING(id)488                ) USING(id)489           ) AS j1 ON j1.id=t3.id490     ORDER BY coalesce(t3.id,j1.id);491  } {492    -   -      0   -      -       1000493    -   -      1   -      red     -   494    2   two    2   alice  orange  -   495    3   three  3   -      yellow  333 496    -   -      4   bob    green   444 497    -   -      5   -      blue    555 498    6   six    -   -      -       -   499    7   seven  -   -      -       -   500    -   -      9   -      -       999 501  }502 503  # Verified by PG-14504  do_execsql_test join9-$id.950 {505    SELECT *506      FROM t3 FULL JOIN (507                t4 LEFT JOIN (508                    t5 FULL JOIN t6 USING(id)509                ) USING(id)510           ) AS j1 ON j1.id=t3.id511     ORDER BY coalesce(t3.id,j1.id);512  } {513    2   two    2   alice  orange  -  514    3   three  -   -      -       -  515    -   -      4   bob    green   444516    6   six    6   cindy  -       -  517    7   seven  -   -      -       -  518    -   -      8   dave   -       -  519  }520 521  # Restriction (27) in the query flattener522  # Verified by PG-14523  do_execsql_test join9-$id.1000 {524    WITH t56(id,y,z) AS (SELECT * FROM t5 FULL JOIN t6 USING(id) LIMIT 50)525    SELECT id,x,y,z FROM t4 JOIN t56 USING(id)526    ORDER BY 1;527  } {528    2   alice  orange  -  529    4   bob    green   444530  }531 532  # Verified by PG-14533  do_execsql_test join9-$id.1010 {534    SELECT id,x,y,z535      FROM t4 INNER JOIN (t5 FULL JOIN t6 USING(id)) USING(id)536     ORDER BY 1;537  } {538    2   alice  orange  -  539    4   bob    green   444540  }541 542  # Verified by PG-14543  do_execsql_test join9-$id.1020 {544    SELECT id,x,y,z545      FROM t4 FULL JOIN t5 USING(id) INNER JOIN t6 USING(id)546     ORDER BY 1;547  } {548    3   -    yellow  333549    4   bob  green   444550    5   -    blue    555551  }552 553  # Verified by PG-14554  do_execsql_test join9-$id.1030 {555    WITH t45(id,x,y) AS (SELECT * FROM t4 FULL JOIN t5 USING(id) LIMIT 50)556    SELECT id,x,y,z FROM t45 JOIN t6 USING(id)557    ORDER BY 1;558  } {559    3   -    yellow  333560    4   bob  green   444561    5   -    blue    555562  }563 564}565finish_test566