mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Fix the skip-ahead-distinct optimization on joins for cases there the table
in the inner loop of the join does not contribute any columns to the result set. Proposed fix for ticket [ef9318757b152e3a2] FossilOrigin-Name: 2dcef5a9ae7f347da65207bf6bf612fb12e18e1a6704799322f0cf2a86154cfd
This commit is contained in:
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Fix\stypo\sin\sthe\sMakefiles\sfor\sMSVC.
|
C Fix\sthe\sskip-ahead-distinct\soptimization\son\sjoins\sfor\scases\sthere\sthe\stable\nin\sthe\sinner\sloop\sof\sthe\sjoin\sdoes\snot\scontribute\sany\scolumns\sto\sthe\nresult\sset.\s\sProposed\sfix\sfor\sticket\s[ef9318757b152e3a2]
|
||||||
D 2017-11-21T21:15:17.379
|
D 2017-11-21T23:38:48.349
|
||||||
F Makefile.in b142eb20482922153ebc77b261cdfd0a560ed05a81e9f6d9a2b0e8192922a1d2
|
F Makefile.in b142eb20482922153ebc77b261cdfd0a560ed05a81e9f6d9a2b0e8192922a1d2
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc e5d7606238f55816da99f719969598df5b091aa2e9a6935c9412fcae8f53fc44
|
F Makefile.msc e5d7606238f55816da99f719969598df5b091aa2e9a6935c9412fcae8f53fc44
|
||||||
@ -553,7 +553,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
|||||||
F src/wal.c beeb71e4eab65dbf0d95f2717efc6ca3c0f5b3090ce67f3de63828f39a6ff053
|
F src/wal.c beeb71e4eab65dbf0d95f2717efc6ca3c0f5b3090ce67f3de63828f39a6ff053
|
||||||
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
|
||||||
F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
|
F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
|
||||||
F src/where.c 9742731e325768332d67df217eb636556c8605f895d518ee61e4d13029f8aed8
|
F src/where.c 1c0ab20720f1a5e76fb4f78d2c45b4525b59167a20d44baf4467fa5b106679ad
|
||||||
F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
|
F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
|
||||||
F src/wherecode.c 611fcabd05592ed2febd7d182f9621425b0466c5232d70e0981c842d429356d5
|
F src/wherecode.c 611fcabd05592ed2febd7d182f9621425b0466c5232d70e0981c842d429356d5
|
||||||
F src/whereexpr.c 427ea8e96ec24f2a7814c67b8024ad664a9c7656264c4566c34743cb23186e46
|
F src/whereexpr.c 427ea8e96ec24f2a7814c67b8024ad664a9c7656264c4566c34743cb23186e46
|
||||||
@ -735,7 +735,7 @@ F test/descidx2.test 9f1a0c83fd57f8667c82310ca21b30a350888b5d
|
|||||||
F test/descidx3.test 09ddbe3f5295f482d2f8b687cf6db8bad7acd9a2
|
F test/descidx3.test 09ddbe3f5295f482d2f8b687cf6db8bad7acd9a2
|
||||||
F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e
|
F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e
|
||||||
F test/distinct.test a1783b960ad8c15a77cd9f207be072898db1026c
|
F test/distinct.test a1783b960ad8c15a77cd9f207be072898db1026c
|
||||||
F test/distinct2.test faef8a3f27424e2cfbe19b2a40752294de3b5d957e049e3336be53ec0476cb58
|
F test/distinct2.test ba239e9674495eda8e130cb5d498036b781dbd65c5868b58e094e36279859e83
|
||||||
F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
|
F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
|
||||||
F test/e_blobbytes.test 439a945953b35cb6948a552edaec4dc31fd70a05
|
F test/e_blobbytes.test 439a945953b35cb6948a552edaec4dc31fd70a05
|
||||||
F test/e_blobclose.test 4b3c8c60c2171164d472059c73e9f3c1844bb66d
|
F test/e_blobclose.test 4b3c8c60c2171164d472059c73e9f3c1844bb66d
|
||||||
@ -1677,7 +1677,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 9cb47430553f00216e9b06e3d8226b903da536152fac80a5b6f615508c933252
|
P 17dd2f7314e7eb124e0a2a7a6cf475850e87fe3041e6ce1e1fd71b38d54852a8
|
||||||
R a6bc597bdf966513d392563d9213ee42
|
R c2dbc2aeaa2d6cfa4070ebdfc171fa89
|
||||||
U mistachkin
|
U drh
|
||||||
Z c9f491fa6730dc4831f9db1bff90ef98
|
Z 8287b3f25cb0100d8a846549bf308df5
|
||||||
|
@ -1 +1 @@
|
|||||||
17dd2f7314e7eb124e0a2a7a6cf475850e87fe3041e6ce1e1fd71b38d54852a8
|
2dcef5a9ae7f347da65207bf6bf612fb12e18e1a6704799322f0cf2a86154cfd
|
@ -4978,6 +4978,13 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
|
|||||||
VdbeCoverageIf(v, op==OP_SeekLT);
|
VdbeCoverageIf(v, op==OP_SeekLT);
|
||||||
VdbeCoverageIf(v, op==OP_SeekGT);
|
VdbeCoverageIf(v, op==OP_SeekGT);
|
||||||
sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2);
|
sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2);
|
||||||
|
if( i<pWInfo->nLevel-1 ){
|
||||||
|
/* Ticket https://sqlite.org/src/info/ef9318757b152e3 2017-11-21
|
||||||
|
** The break location for the next inner loop is above the code
|
||||||
|
** generated here, but it should be afterwards. So call re-resolve
|
||||||
|
** the break location to be afterwards. */
|
||||||
|
sqlite3VdbeResolveLabel(v, pWInfo->a[i+1].addrBrk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */
|
#endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */
|
||||||
/* The common case: Advance to the next row */
|
/* The common case: Advance to the next row */
|
||||||
|
@ -179,5 +179,24 @@ do_execsql_test 920 {
|
|||||||
wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz
|
wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ticket https://sqlite.org/src/info/ef9318757b152e3a on 2017-11-21
|
||||||
|
# Incorrect result due to a skip-ahead-distinct optimization on a
|
||||||
|
# join where no rows of the inner loop appear in the result set.
|
||||||
|
#
|
||||||
|
db close
|
||||||
|
sqlite3 db :memory:
|
||||||
|
do_execsql_test 1000 {
|
||||||
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER);
|
||||||
|
CREATE INDEX t1b ON t1(b);
|
||||||
|
CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER);
|
||||||
|
CREATE INDEX t2y ON t2(y);
|
||||||
|
WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49)
|
||||||
|
INSERT INTO t1(b) SELECT x/10 - 1 FROM c;
|
||||||
|
WITH RECURSIVE c(x) AS (VALUES(-1) UNION ALL SELECT x+1 FROM c WHERE x<19)
|
||||||
|
INSERT INTO t2(x,y) SELECT x, 1 FROM c;
|
||||||
|
SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1;
|
||||||
|
ANALYZE;
|
||||||
|
SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1;
|
||||||
|
} {1 1}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user