1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-28 10:57:26 +03:00

Avoid opening cursors only required for reads that are optimized away by the exists-to-join optimization. Addresses report [bugs:/info/2026-07-25T08:39:23Z | 2026-07-25T08:39:23Z].

FossilOrigin-Name: c81ec73a3780cf7a44965f1763f1e6e2c324b60132197756fdb351e98052fd02
This commit is contained in:
dan
2026-07-25 17:13:30 +00:00
parent c571cec033
commit 536ec8a991
5 changed files with 28 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
C Ignore\sany\sDISTINCT\squalifier\son\sa\sSELECT\sstatement\son\sthe\sRHS\sof\san\sIN(...)\sexpression.\sForum\spost\s[bugs:/info/2026-07-25T08:40:13Z\s|\s2026-07-25T08:40:13Z].
D 2026-07-25T14:49:40.062
C Avoid\sopening\scursors\sonly\srequired\sfor\sreads\sthat\sare\soptimized\saway\sby\sthe\sexists-to-join\soptimization.\sAddresses\sreport\s[bugs:/info/2026-07-25T08:39:23Z\s|\s2026-07-25T08:39:23Z].
D 2026-07-25T17:13:30.874
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -742,7 +742,7 @@ F src/printf.c b480176bd0aaed9d64e804cfa3ca27fc585f65a73e7c7ca2fe9b9016db2cf6d5
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 7145e41ad75e04a811b326aa5faf83c2e071480fabd9fc825055a6b889e6cb86
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c d2ad83d49c41c30d213873bac8481c6bf099438c61dcb597de52ddb55a6324fb
F src/select.c 6e3ee525a82bb1800b0b464bc6ed5532e97e484eec336004ab1842cb298be61c
F src/shell.c.in 0df571dd1eae1a15577361902eb5487a072d3290ea94e1e72e757050b641f870
F src/sqlite.h.in 2101a2b494cbc282d0dc1c3f631c4fb83060c52876cc9d7615b091ad66d932b1
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -1103,7 +1103,7 @@ F test/enc.test b5503a87b31cea8a5084c6e447383f9ca08933bd2f29d97b6b6201081b2343eb
F test/enc2.test 872afe58db772e7dfa1ad8e0759f8cc820e9efc8172d460fae83023101c2e435
F test/enc3.test 55ef64416d72975c66167310a51dc9fc544ba3ae4858b8d5ab22f4cb6500b087
F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
F test/eqp.test 1d653fe8d2612cd6764e5ea2f16dcf5f13a9f50448b9233bb1573804bccd7579
F test/eqp.test 472e1cb356f5c9eef821d115c7589dd463f49e9ab249183fe34712da157d7dda
F test/eqp2.test 188bc2293b9dab0932b6ac50c3fec62976815df072d7814d5547c821a8630819
F test/errmsg.test eae9f091eb39ce7e20305de45d8e5d115b68fa856fba4ea6757b6ca3705ff7f9
F test/errofst1.test 6da78363739ba8991f498396ab331b5d64e7ab5c4172c12b5884683ef523ac53
@@ -1113,7 +1113,7 @@ F test/exclusive2.test cd70b1d9c6fffd336f9795b711dcc5d9ceba133ad3f7001da3fda6361
F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
F test/exists.test 79a75323c78f02bbe9c251ea502a092f9ef63dac
F test/existsexpr.test 1ce70ac41fb6d52525774388aa23e982428e883a850f9d56d49776d234865552
F test/existsexpr2.test dc23e76389eff3d29f6488ff733012a3560cd67ec8cfaecbecd52cced5d5af11
F test/existsexpr2.test 7f05f15695426d5ac54afdd60bdc0d62d05dfcf8fbe513d3fe5423dcfd621d6d
F test/existsfault.test ff41c11f3052c1bbd4f8dd557802310026253d67d7c4e3a180c16d2f0862973e
F test/expr.test db981f8a85520e99ae20aab7ad2e9b5b0437ed09159b57ced434c672075d2e61
F test/expr2.test c27327ae9c017a7ff6280123f67aff496f912da74d78c888926d68b46ec75fd8
@@ -2217,8 +2217,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 2f1f4f73535386549c12694dc57cfe555eec689ae6824c6241aaf8d5befcd74d
R 281ba175d7dc74451cfbb28c113fac8a
P c54858eab45f71a77249c8ecdc8e107cf631e743b8b883f2b6db60e0bf7e908a
R 528d47fc0fabfd6337e81b14515c98d0
U dan
Z 48fef5873d55c06851c436c4fd093680
Z 6c13a8261c5395d3405eca89304ed3b7
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
c54858eab45f71a77249c8ecdc8e107cf631e743b8b883f2b6db60e0bf7e908a
c81ec73a3780cf7a44965f1763f1e6e2c324b60132197756fdb351e98052fd02

View File

@@ -7419,6 +7419,7 @@ static SQLITE_NOINLINE void existsToJoin(
}
pSub->pSrc = 0;
sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pSub);
recomputeColumnsUsed(p, &p->pSrc->a[p->pSrc->nSrc-1]);
#if TREETRACE_ENABLED
if( sqlite3TreeTrace & 0x100000 ){
TREETRACE(0x100000,pParse,p,

View File

@@ -340,7 +340,7 @@ det 3.3.3 {
} {
QUERY PLAN
|--SCAN t1
`--SCAN t2 EXISTS
`--SCAN t2 EXISTS USING COVERING INDEX t2i1
}
#-------------------------------------------------------------------------

View File

@@ -89,6 +89,23 @@ do_execsql_test 2.2 {
2 2
}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 3.0 {
CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
CREATE TABLE t2(c INTEGER PRIMARY KEY, d, e);
CREATE INDEX t2b ON t2(d);
}
do_execsql_test 3.1 {
EXPLAIN SELECT * FROM t1 WHERE EXISTS (
SELECT 1 FROM t2 WHERE b=d
);
} [execsql {
EXPLAIN SELECT * FROM t1 WHERE EXISTS (
SELECT 1 FROM t2 WHERE b=d ORDER BY e
);
}]
finish_test