CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
join7.test356 linesDownload Raw Back to test
1# 2022-04-092#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 t1(a INT, b INT);21    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);22    CREATE INDEX t1a ON t1(a);23    CREATE TABLE t2(c INT, d INT);24    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);25    CREATE INDEX t2c ON t2(c);26    CREATE VIEW dual(dummy) AS VALUES('x');27  }28  2 {29    CREATE TABLE t1(a INT, b INT);30    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);31    CREATE INDEX t1ab ON t1(a,b);32    CREATE TABLE t2(c INT, d INT);33    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);34    CREATE INDEX t2cd ON t2(c,d);35    CREATE VIEW dual(dummy) AS VALUES('x');36  }37  3 {38    CREATE TABLE t1(a INT, b INT);39    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);40    CREATE INDEX t1a ON t1(a);41    CREATE TABLE t2(c INT, d INT PRIMARY KEY) WITHOUT ROWID;42    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);43    CREATE INDEX t2c ON t2(c);44    CREATE VIEW dual(dummy) AS VALUES('x');45  }46  4 {47    CREATE TABLE t1(a INT, b INT);48    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);49    CREATE TABLE t2(c INTEGER PRIMARY KEY, d INT);50    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);51    CREATE VIEW dual(dummy) AS VALUES('x');52  }53  5 {54    CREATE TABLE t1(a INT, b INT);55    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);56    CREATE TABLE t2(c INT PRIMARY KEY, d INT) WITHOUT ROWID;57    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);58    CREATE VIEW dual(dummy) AS VALUES('x');59  }60  6 {61    CREATE TABLE t1(a INT, b INT);62    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);63    CREATE VIEW t2(c,d) AS VALUES(3,33),(4,44),(5,55);64    CREATE VIEW dual(dummy) AS VALUES('x');65  }66  7 {67    CREATE VIEW t1(a,b) AS VALUES(1,2),(1,3),(1,4);68    CREATE TABLE t2(c INTEGER PRIMARY KEY, d INT);69    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);70    CREATE VIEW dual(dummy) AS VALUES('x');71  }72  8 {73    CREATE TABLE t1(a INT, b INT);74    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);75    CREATE TABLE t2(c INT, d INT);76    INSERT INTO t2 VALUES(3,33),(4,44),(5,55);77    CREATE VIEW dual(dummy) AS VALUES('x');78  }79  9 {80    CREATE TABLE t1(a INT, b INT);81    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);82    CREATE TABLE t2a(c INTEGER PRIMARY KEY, i1 INT);83    CREATE TABLE t2b(i1 INTEGER PRIMARY KEY, d INT);84    CREATE VIEW t2(c,d) AS SELECT c, d FROM t2a NATURAL JOIN t2b;85    INSERT INTO t2a VALUES(3,93),(4,94),(5,95),(6,96),(7,97);86    INSERT INTO t2b VALUES(91,11),(92,22),(93,33),(94,44),(95,55);87    CREATE TABLE dual(dummy TEXT);88    INSERT INTO dual(dummy) VALUES('x');89  }90  10 {91    CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a,b)) WITHOUT ROWID;92    INSERT INTO t1 VALUES(1,2),(1,3),(1,4);93    CREATE TABLE t2a(c INTEGER PRIMARY KEY, i1 INT);94    CREATE TABLE t2b(i1 INTEGER PRIMARY KEY, d INT);95    CREATE VIEW t2(c,d) AS SELECT c, d FROM t2a NATURAL JOIN t2b;96    INSERT INTO t2a VALUES(3,93),(4,94),(5,95),(6,96),(7,97);97    INSERT INTO t2b VALUES(91,11),(92,22),(93,33),(94,44),(95,55);98    CREATE TABLE dual(dummy TEXT);99    INSERT INTO dual(dummy) VALUES('x');100  }101} {102  reset_db103  db nullvalue NULL104  do_execsql_test join7-$id.setup $schema {}105 106  # Verified against PG-14 for case 1107  do_execsql_test join7-$id.10 {108    SELECT b, d FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b;109  } {110    NULL 55111    2    NULL112    3    33113    4    44114  }115 116  # Verified against PG-14 for case 1117  do_execsql_test join7-$id.20 {118    SELECT a, c FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b;119  } {120    NULL  5121    1     NULL122    1     3123    1     4124  }125 126  do_execsql_test join7-$id.30 {127    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c ORDER BY +b;128  } {129    NULL NULL 5    55130    1    2    NULL NULL131    1    3    3    33132    1    4    4    44133  }134  do_execsql_test join7-$id.31 {135    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c ORDER BY +b;136  } {137    NULL NULL 5    55138    1    2    NULL NULL139    1    3    3    33140    1    4    4    44141  }142  do_execsql_test join7-$id.32 {143    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c144     WHERE b=c145     ORDER BY +b;146  } {147    1    3    3    33148    1    4    4    44149  }150  do_execsql_test join7-$id.33 {151    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c152     WHERE b>0153     ORDER BY +b;154  } {155    1    2    NULL NULL156    1    3    3    33157    1    4    4    44158  }159  do_execsql_test join7-$id.34 {160    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c161     WHERE b>0 OR b IS NULL162     ORDER BY +b;163  } {164    NULL NULL 5    55165    1    2    NULL NULL166    1    3    3    33167    1    4    4    44168  }169  do_execsql_test join7-$id.35 {170    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND b>3 AND c>4171     ORDER BY coalesce(b,c,0);172  } {173    1    2    NULL NULL174    NULL NULL 3    33175    1    3    NULL NULL176    NULL NULL 4    44177    1    4    NULL NULL178    NULL NULL 5    55179  }180  do_execsql_test join7-$id.36 {181    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND b>3 WHERE c>4182     ORDER BY coalesce(b,c,0);183  } {184    NULL NULL 5    55185  }186  do_execsql_test join7-$id.37 {187    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE b>3 AND c>4188     ORDER BY coalesce(b,c,0);189  } {190  }191  do_execsql_test join7-$id.38 {192    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE b>3 OR c>4193     ORDER BY coalesce(b,c,0);194  } {195    1    4    4    44196    NULL NULL 5    55197  }198  do_execsql_test join7-$id.39 {199    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND (b>3 OR c>4)200     ORDER BY coalesce(b,c,0);201  } {202    1    2    NULL NULL203    NULL NULL 3    33204    1    3    NULL NULL205    1    4    4    44206    NULL NULL 5    55207  }208  do_execsql_test join7-$id.40 {209    SELECT * FROM t1 RIGHT OUTER JOIN t2 ON b=c ORDER BY +b;210  } {211    NULL NULL 5    55212    1    3    3    33213    1    4    4    44214  }215  do_execsql_test join7-$id.50 {216    SELECT t1.*, t2.* FROM t2 LEFT OUTER JOIN t1 ON b=c ORDER BY +b;217  } {218    NULL NULL 5    55219    1    3    3    33220    1    4    4    44221  }222  do_execsql_test join7-$id.60 {223    SELECT * FROM dual JOIN t1 ON true RIGHT OUTER JOIN t2 ON b=c ORDER BY +b;224  } {225    NULL NULL NULL 5    55226    x    1    3    3    33227    x    1    4    4    44228  }229  do_execsql_test join7-$id.70 {230    SELECT t1.*, t2.* 231      FROM t2 LEFT JOIN (dual JOIN t1 ON true) ON b=c ORDER BY +b;232  } {233    NULL NULL 5    55234    1    3    3    33235    1    4    4    44236  }237  do_execsql_test join7-$id.80 {238    SELECT * FROM dual CROSS JOIN t1 RIGHT OUTER JOIN t2 ON b=c ORDER BY +b;239  } {240    NULL NULL NULL 5    55241    x    1    3    3    33242    x    1    4    4    44243  }244  do_execsql_test join7-$id.81 {245    SELECT dual.*, t1.*, t2.*246      FROM t1 CROSS JOIN dual RIGHT OUTER JOIN t2 ON b=c ORDER BY +b;247  } {248    NULL NULL NULL 5    55249    x    1    3    3    33250    x    1    4    4    44251  }252  do_execsql_test join7-$id.90 {253    SELECT * FROM t1 LEFT OUTER JOIN t2 ON b=c ORDER BY +b;254  } {255    1    2    NULL NULL256    1    3    3    33257    1    4    4    44258  }259  do_execsql_test join7-$id.100 {260    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c AND a=1 ORDER BY +b;261  } {262    NULL NULL 5    55263    1    2    NULL NULL264    1    3    3    33265    1    4    4    44266  }267  do_execsql_test join7-$id.101 {268    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c AND a=1 ORDER BY +b;269  } {270    NULL NULL 5    55271    1    2    NULL NULL272    1    3    3    33273    1    4    4    44274  }275 276  # Verified against PG-14 for case 1277  do_execsql_test join7-$id.110 {278    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c WHERE a=1 ORDER BY +b;279  } {280    1    2    NULL NULL281    1    3    3    33282    1    4    4    44283  }284 285  do_execsql_test join7-$id.111 {286    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c WHERE a=1 ORDER BY +b;287  } {288    1    2    NULL NULL289    1    3    3    33290    1    4    4    44291  }292 293  # Verified against PG-14 for case 1294  do_execsql_test join7-$id.115 {295    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c296     WHERE a=1 OR a IS NULL ORDER BY +b;297  } {298    NULL NULL 5    55299    1    2    NULL NULL300    1    3    3    33301    1    4    4    44302  }303 304  do_execsql_test join7-$id.116 {305    SELECT t1.*, t2.* FROM t2 FULL OUTER JOIN t1 ON b=c306     WHERE a=1 OR a IS NULL ORDER BY +b;307  } {308    NULL NULL 5    55309    1    2    NULL NULL310    1    3    3    33311    1    4    4    44312  }313 314  # Verified against PG-14 for case 1:315  do_execsql_test join7-$id.120 {316    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c WHERE a IS NULL ORDER BY +d;317  } {318    NULL NULL 5    55319  }320 321  # Verified against PG-14 for case 1:322  do_execsql_test join7-$id.130 {323    SELECT * FROM t1 FULL OUTER JOIN t2 ON b=c AND d<=0 ORDER BY +b, +d;324  } {325    NULL NULL 3    33326    NULL NULL 4    44327    NULL NULL 5    55328    1    2    NULL NULL329    1    3    NULL NULL330    1    4    NULL NULL331  }332 333  # Verified against PG-14 for case 1:334  do_execsql_test join7-$id.140 {335    SELECT a, b, c, d336      FROM t2 FULL OUTER JOIN t1 ON b=c AND d<=0 ORDER BY +b, +d;337  } {338    NULL NULL 3    33339    NULL NULL 4    44340    NULL NULL 5    55341    1    2    NULL NULL342    1    3    NULL NULL343    1    4    NULL NULL344  }345 346  do_execsql_test join7-$id.141 {347    SELECT a, b, c, d348      FROM t2 FULL OUTER JOIN t1 ON b=c AND d<=0349     ORDER BY +b, +d LIMIT 2 OFFSET 2350  } {351    NULL NULL 5    55352    1    2    NULL NULL353  }354}  355finish_test356