diff options
author | drh <> | 2022-05-30 17:33:22 +0000 |
---|---|---|
committer | drh <> | 2022-05-30 17:33:22 +0000 |
commit | 404bf6bac6569664b23a35c22fbb18611b7c6b7c (patch) | |
tree | d8f653cac8874c30145106934d76dd684a487cd3 /test | |
parent | 1943005f626fbefa1fb32f77fc671ee07c52b11f (diff) | |
download | sqlite-404bf6bac6569664b23a35c22fbb18611b7c6b7c.tar.gz sqlite-404bf6bac6569664b23a35c22fbb18611b7c6b7c.zip |
For an outer join, then ON-clause constraints need to be evaluated at just
the right moment - not too early and not too late. Fix for the problem
reported by [forum:/forumpost/3902c7b833|forum post 3902c7b833].
FossilOrigin-Name: 3869fd9a2b9483cbbf83d8f369c1744abc42f12e63abba402be35dd7e136161c
Diffstat (limited to 'test')
-rw-r--r-- | test/join8.test | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/join8.test b/test/join8.test index cccb167ac..554f04562 100644 --- a/test/join8.test +++ b/test/join8.test @@ -445,4 +445,41 @@ do_execsql_test join8-14020 { - 2 4 } +# 2022-05-30 +# https://sqlite.org/forum/forumpost/3902c7b833 +# +reset_db +do_execsql_test join8-15000 { + CREATE TABLE t1(x INT); + CREATE TABLE t2(y INT); + CREATE TABLE t3(z INT); + INSERT INTO t1 VALUES(10); + INSERT INTO t3 VALUES(20),(30); +} +do_execsql_test join8-15010 { + SELECT * FROM t1 LEFT JOIN t2 ON true JOIN t3 ON t2.y IS NOT NULL; +} {} +do_execsql_test join8-15020 { + SELECT * FROM t1 LEFT JOIN t2 ON true JOIN t3 ON t2.y IS NOT NULL + WHERE (t3.z!=400 AND t3.z!=500 AND t3.z!=600); +} {} +do_execsql_test join8-15100 { + PRAGMA automatic_index = 0; + CREATE TABLE t4(x TEXT); + CREATE TABLE t5(y TEXT); + CREATE TABLE t6(z TEXT); + INSERT INTO t4 VALUES('a'), ('b'); + INSERT INTO t5 VALUES('b'), ('c'); + INSERT INTO t6 VALUES('a'), ('d'); +} {} +db null - +do_execsql_test join8-15110 { + SELECT * FROM t4 LEFT JOIN t5 ON x=y LEFT JOIN t6 ON (x=z) ORDER BY +x; +} {a - a b b -} +do_execsql_test join8-15120 { + SELECT * FROM t4 LEFT JOIN t5 ON x=y LEFT JOIN t6 ON (x=z) + WHERE t5.y!='x' AND t4.x!='x'; +} {b b -} + + finish_test |