From b1f3151bb75205d4ab34dbd7659bbfc80c79d175 Mon Sep 17 00:00:00 2001 From: drh <> Date: Sun, 18 Oct 2026 22:48:50 +0000 Subject: [PATCH] If terms on the SELECT on the RHS of a vector IN are removed, then the subquery cannot be reused for other things, since it is now different. [bugs:/info/2026-10-16T22:07:15Z|Bug 2026-10-16T22:07:15Z] FossilOrigin-Name: 080338a91b447c12186bbb4e23da1927ca448fee9a11cd6507f5f2041ee2dcba --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/wherecode.c | 3 +++ test/rowvalue9.test | 25 +++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 3d6cd2996f..507f929596 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sharmless\scompiler\swarnings. -D 2026-10-18T21:36:55.307 +C If\sterms\son\sthe\sSELECT\son\sthe\sRHS\sof\sa\svector\sIN\sare\sremoved,\sthen\sthe\nsubquery\scannot\sbe\sreused\sfor\sother\sthings,\ssince\sit\sis\snow\sdifferent.\n[bugs:/info/2026-10-16T22:07:15Z|Bug\s2026-10-16T22:07:15Z] +D 2026-10-18T22:48:50.366 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -889,7 +889,7 @@ F src/wal.h c6251cfc1950643a976625ca452e46dc9b466b4f5dd2e85f244f29f79bf68ace F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014 F src/where.c bb47341c327282bc91a6ec3abf9d335de8015ea2c2b57866df0c9c85db1936c6 F src/whereInt.h 5d739acb94bf1fdf6edd502a919e3dcf2d340dda63cc1827304e119ea878f6f3 -F src/wherecode.c 69ff3d0fe8697d2ca482d25c15dfdc08cf8e4605ab5ab297e9d12b3dbc6812fd +F src/wherecode.c f255e418ccf877f6bb9892145288728f1aa1a0ab8c2f2a57f82132e538c15b65 F src/whereexpr.c 76f72a95c5cf0e8a8edb679ca4fb7afa17ba45ff4effe73c414266510109e701 F src/window.c 79a17de595e62aa45961ef1cbe3392e7ebae69fdde3fd0b0200254bc4647025e F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 @@ -1650,7 +1650,7 @@ F test/rowvalue5.test 00740304ea6a53a8704640c7405690f0045d5d2a6b4b04dde7bccc14c3 F test/rowvalue6.test d19b54feb604d5601f8614b15e214e0774c01087 F test/rowvalue7.test 06ec0aca725bf683313d03793aa2943bc7f45a901848c7056a9665b769c8fc38 F test/rowvalue8.test 5900eddad9e2c3c2e26f1a95f74aafc1232ee5e0 -F test/rowvalue9.test 7499a8fd7ca3a3f0e19d94e135355439aa2b596f86b775ca8de79672da2ca378 +F test/rowvalue9.test b23aec92a0fd76626cc2eac49a81a1fa3d95c57308e63abd462075eeb8cecaac F test/rowvalueA.test ada58d05065f6efe6a1349fcfedb16c199100409bf5085b418f4d71ba55f2be8 F test/rowvaluefault.test 963ae9cdaed30a85a29668dd514e639f3556cae903ee9f172ea972d511c54fff F test/rowvaluevtab.test cd9747bb3f308086944c07968f547ad6b05022e698d80b9ffbdfe09ce0b8da6f @@ -2292,8 +2292,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 716b63c934156d8b19bda24c5bb544cc3d7d0ef66228150eea0a166d6e8c9caa -R e198edc1938d0aca448ed22fd7c391a6 +P a68c9f3e98a7be2e7ac020fcbdf3b39cd9015e1d2fa07d30619c47a05cf7aab4 +R ce83b3ec6762628db0447a07d23376b1 U drh -Z e5d5b406b985d813a3dd3ebd117a7572 +Z 9dae443ecf14edfe9bec13186b54ea69 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b0aa89e8b6..7d8c3be214 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a68c9f3e98a7be2e7ac020fcbdf3b39cd9015e1d2fa07d30619c47a05cf7aab4 +080338a91b447c12186bbb4e23da1927ca448fee9a11cd6507f5f2041ee2dcba diff --git a/src/wherecode.c b/src/wherecode.c index 0ee1d90bb9..cf9b62e629 100644 --- a/src/wherecode.c +++ b/src/wherecode.c @@ -618,6 +618,9 @@ static Expr *removeUnindexableInClauseTerms( nRhs++; } } + if( nRhsnExpr ){ + ExprClearProperty(pNew, EP_Subrtn); /* See bug 2026-10-16T22:07:15Z */ + } sqlite3ExprListDelete(db, pOrigRhs); if( pOrigLhs ){ sqlite3ExprListDelete(db, pOrigLhs); diff --git a/test/rowvalue9.test b/test/rowvalue9.test index baa13f4f94..d31808c3c4 100644 --- a/test/rowvalue9.test +++ b/test/rowvalue9.test @@ -348,5 +348,30 @@ do_eqp_test 9.5e { *SEARCH t1 USING COVERING INDEX i2* } +# Bug 2026-10-16T22:07:15Z +# +# Problem bisects to check-in 18a99d9cfbc3a041 (2023-02-13 18:37:48.912). +# Prior to fix, tests 10.1 and 10.2 would fail. +# +reset_db +do_execsql_test 10.0 { + CREATE TABLE t1(a INT PRIMARY KEY, b INT); + INSERT INTO t1 VALUES(1,1); + CREATE TABLE t2(c INT PRIMARY KEY, d INT); + INSERT INTO t2 VALUES(1,1); + ANALYZE; +} +do_execsql_test 10.1 { + SELECT count(*) FROM t1, t2 WHERE a=c AND (a,b) IN ((1,1), (1,2), (1,3)); +} 1 +do_execsql_test 10.2 { + SELECT t1.* FROM t1, t2 WHERE a=c AND (a,b) IN ((1,1), (1,2), (1,3)); +} {1 1} +do_execsql_test 10.3 { + SELECT t2.* FROM t1, t2 WHERE a=c AND (a,b) IN ((1,1), (1,2), (1,3)); +} {1 1} +do_execsql_test 10.4 { + SELECT * FROM t1, t2 WHERE a=c AND (a,b) IN ((1,1), (1,2), (1,3)); +} {1 1 1 1} finish_test