From: drh Date: Wed, 9 Dec 2009 18:22:25 +0000 (+0000) Subject: Added test cases for the multi-way USING and NATURAL JOIN fix. X-Git-Tag: version-3.7.2~723 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=81c1655775cb11f7c841a98716264624fd680640;p=thirdparty%2Fsqlite.git Added test cases for the multi-way USING and NATURAL JOIN fix. Ticket [f74beaabde]. FossilOrigin-Name: 0b34ab25624ae4b6c5fa7775328ff0e637d68bfc --- diff --git a/manifest b/manifest index bbd8d3af0d..e00feb2221 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C The\sUSING\sclause\sand\sNATURAL\sJOIN\slook\sat\sall\stables\sto\sthe\sleft\swhen\nsearching\sfor\sa\smatch,\snot\sjust\sthe\sone\stable\sto\sthe\simmediate\sleft.\nTables\sfurther\sto\sthe\sleft\sare\spreferred.\nFix\sfor\sticket\s[f74beaabde].\s\sStill\sneed\sto\sadd\stest\scases\sto\scomplete\nthe\sticket. -D 2009-12-09T17:36:40 +C Added\stest\scases\sfor\sthe\smulti-way\sUSING\sand\sNATURAL\sJOIN\sfix.\nTicket\s[f74beaabde]. +D 2009-12-09T18:22:26 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -449,6 +449,7 @@ F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0 F test/join4.test 1a352e4e267114444c29266ce79e941af5885916 F test/join5.test 86675fc2919269aa923c84dd00ee4249b97990fe +F test/join6.test bf82cf3f979e9eade83ad0d056a66c5ed71d1901 F test/journal1.test 36f2d1bb9bf03f790f43fbdb439e44c0657fab19 F test/jrnlmode.test a765844f22b3f6d72d78a68d5decd26c64bb859c F test/jrnlmode2.test fe79ea1f0375c926b8de0362ddf94f34a64135fd @@ -780,14 +781,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 56b6432f8622d53ffd3a4d9a2244114f8531ed71 -R c60687f3ab920ee77b412f18848340fb +P b558e96f0a3cd2cbbe86e44293246a4730960d52 +R d48154f167a2f5947eeb454b81ead26e U drh -Z 12648e9ade5661889385face890b1540 +Z 7f30d93b88a976a99962a65cb7bf933c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFLH+AsoxKgR168RlERAqq+AJ42LhMfpcSfI/s5lEGDLv5D00O41wCfWMQf -iT/qNX5HigqUQ+DEbiPla9M= -=Wtyb +iD8DBQFLH+rloxKgR168RlERAipCAJoDEPJ2CB4vx4FRHD7ORIIm3oYMigCfcAU2 +TDhyrsWyv+tbEU9Iq98mh90= +=fxWS -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 54c0a97ffc..5d01ddc333 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b558e96f0a3cd2cbbe86e44293246a4730960d52 \ No newline at end of file +0b34ab25624ae4b6c5fa7775328ff0e637d68bfc \ No newline at end of file diff --git a/test/join6.test b/test/join6.test new file mode 100644 index 0000000000..4f65dcb446 --- /dev/null +++ b/test/join6.test @@ -0,0 +1,158 @@ +# 2009 December 9 +# +# 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 regression tests for SQLite library. +# +# This file implements tests for N-way joins (N>2) which make +# use of USING or NATURAL JOIN. For such joins, the USING and +# NATURAL JOIN processing needs to search all tables to the left +# of the join looking for a match. See ticket [f74beaabde] +# for additional information. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + + +# The problem as initially reported on the mailing list: +# +do_test join6-1.1 { + execsql { + CREATE TABLE t1(a); + CREATE TABLE t2(a); + CREATE TABLE t3(a,b); + INSERT INTO t1 VALUES(1); + INSERT INTO t3 VALUES(1,2); + + SELECT * FROM t1 LEFT JOIN t2 USING(a) LEFT JOIN t3 USING(a); + } +} {1 2} +do_test join6-1.2 { + execsql { + SELECT t1.a, t3.b + FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.a=t3.a; + } +} {1 {}} +do_test join6-1.3 { + execsql { + SELECT t1.a, t3.b + FROM t1 LEFT JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t1.a=t3.a; + } +} {1 2} + + +do_test join6-2.1 { + execsql { + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + + CREATE TABLE t1(x,y); + CREATE TABLE t2(y,z); + CREATE TABLE t3(x,z); + + INSERT INTO t1 VALUES(1,2); + INSERT INTO t1 VALUES(3,4); + + INSERT INTO t2 VALUES(2,3); + INSERT INTO t2 VALUES(4,5); + + INSERT INTO t3 VALUES(1,3); + INSERT INTO t3 VALUES(3,5); + + SELECT * FROM t1 JOIN t2 USING (y) JOIN t3 USING(x); + } +} {1 2 3 3 3 4 5 5} +do_test join6-2.2 { + execsql { + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3; + } +} {1 2 3 3 4 5} + + +do_test join6-3.1 { + execsql { + DROP TABLE t1; + DROP TABLE t2; + DROP TABLE t3; + + CREATE TABLE t1(a,x,y); + INSERT INTO t1 VALUES(1,91,92); + INSERT INTO t1 VALUES(2,93,94); + + CREATE TABLE t2(b,y,z); + INSERT INTO t2 VALUES(3,92,93); + INSERT INTO t2 VALUES(4,94,95); + + CREATE TABLE t3(c,x,z); + INSERT INTO t3 VALUES(5,91,93); + INSERT INTO t3 VALUES(6,99,95); + + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3; + } +} {1 91 92 3 93 5} +do_test join6-3.2 { + execsql { + SELECT * FROM t1 JOIN t2 NATURAL JOIN t3; + } +} {1 91 92 3 92 93 5} +do_test join6-3.3 { + execsql { + SELECT * FROM t1 JOIN t2 USING(y) NATURAL JOIN t3; + } +} {1 91 92 3 93 5} +do_test join6-3.4 { + execsql { + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x,z); + } +} {1 91 92 3 93 5} +do_test join6-3.5 { + execsql { + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(x); + } +} {1 91 92 3 93 5 93} +do_test join6-3.6 { + execsql { + SELECT * FROM t1 NATURAL JOIN t2 JOIN t3 USING(z); + } +} {1 91 92 3 93 5 91 2 93 94 4 95 6 99} + +do_test join6-4.1 { + execsql { + SELECT * FROM + (SELECT 1 AS a, 91 AS x, 92 AS y UNION SELECT 2, 93, 94) + NATURAL JOIN t2 NATURAL JOIN t3 + } +} {1 91 92 3 93 5} +do_test join6-4.2 { + execsql { + SELECT * FROM t1 NATURAL JOIN + (SELECT 3 AS b, 92 AS y, 93 AS z UNION SELECT 4, 94, 95) + NATURAL JOIN t3 + } +} {1 91 92 3 93 5} +do_test join6-4.3 { + execsql { + SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN + (SELECT 5 AS c, 91 AS x, 93 AS z UNION SELECT 6, 99, 95) + } +} {1 91 92 3 93 5} + + + + + + + + + + + +finish_test