]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix yet another bug in the [/info/e33da6d5dc964db8|EXISTS-to-JOIN]
authordrh <>
Sat, 3 Jan 2026 15:11:07 +0000 (15:11 +0000)
committerdrh <>
Sat, 3 Jan 2026 15:11:07 +0000 (15:11 +0000)
optimization, reported by
[forum:/forumpost/2026-01-03T14:05:48z|forum post 2026-01-03T14:05:48z].

FossilOrigin-Name: f60e863e0ca2d8ab853fa5f48d3cd7b062b13167fcddffc4563bde9285b92320

manifest
manifest.uuid
src/select.c
test/existsexpr.test

index f5edc9900410a228ad48dc15b60127c5416f4cf0..0dfe1a975d6e1afb69aade02b6efb290f765f318 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Minor\schange\sto\san\s#if\sin\sthe\sWindows\sVFS,\swhich\sI\sam\stold\swill\sallow\nSQLite\sto\sbe\scompiled\sfor\s64-bit\sWindows7.
-D 2026-01-02T19:42:55.938
+C Fix\syet\sanother\sbug\sin\sthe\s[/info/e33da6d5dc964db8|EXISTS-to-JOIN]\noptimization,\sreported\sby\n[forum:/forumpost/2026-01-03T14:05:48z|forum\spost\s2026-01-03T14:05:48z].
+D 2026-01-03T15:11:07.221
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -736,7 +736,7 @@ F src/printf.c b1b29b5e58e1530d5daeee5963d3c318d8ab2d7e38437580e28755753e0c1ded
 F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 47aa7fdc9ec4c19b103ac5e79d7887d30119b5675309facf5eed1118391c868b
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 11b1c8501b6bb72e42279790732103621d20153ff9adda0fed60297e39197c1b
+F src/select.c 4d45a04431db072040d6625ee21c1dc483c9b2b64a5ab419f4a4e05aabed1204
 F src/shell.c.in 587ec295ced5204e7a172cd090a470776ca58c2875ee7cc18194f18fa0d3ff2a
 F src/sqlite.h.in b6599377f02ef9d545a8da48959213928b63291ad83ff65e5f3a72bf4fec595d
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -1097,7 +1097,7 @@ F test/exclusive.test 7ff63be7503990921838d5c9f77f6e33e68e48ed1a9d48cd28745bf650
 F test/exclusive2.test cd70b1d9c6fffd336f9795b711dcc5d9ceba133ad3f7001da3fda63615bdc91e
 F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
 F test/exists.test 79a75323c78f02bbe9c251ea502a092f9ef63dac
-F test/existsexpr.test 8af8eecc049faefc1593680ae66dea9ac5a9afe4e0cf00d4662854b08f66a999
+F test/existsexpr.test 75c1c13cda18b53f68c135fe644afc034d72a6de5b0774b0219ca4a6dc4b96b0
 F test/existsexpr2.test dc23e76389eff3d29f6488ff733012a3560cd67ec8cfaecbecd52cced5d5af11
 F test/existsfault.test ff41c11f3052c1bbd4f8dd557802310026253d67d7c4e3a180c16d2f0862973e
 F test/expr.test db981f8a85520e99ae20aab7ad2e9b5b0437ed09159b57ced434c672075d2e61
@@ -2189,8 +2189,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 19e57a18cbfad44bb1cb1e62d4485635d26059cb2319f4b7f1244df2638bea43
-R bb87a028390b69bf7d9c7e4d64ba880b
+P 2afc54b91fe94a37bd3754b5beae6b1f378488b33f7d23eeeebe96d78d120fe3
+R 9ccadcea198b813c673d0380c6399d34
 U drh
-Z 6af1ecf3fbbcbc6e765aa4e3a2833f1d
+Z 2ee8cbee8b71dafc8bb700ae7eaca658
 # Remove this line to create a well-formed Fossil manifest.
index 94fd18a550cb8cc41a7de96cdf34c5a15a677608..65e9b02cc071c7f9e9a4d3f48a192a291ef590b2 100644 (file)
@@ -1 +1 @@
-2afc54b91fe94a37bd3754b5beae6b1f378488b33f7d23eeeebe96d78d120fe3
+f60e863e0ca2d8ab853fa5f48d3cd7b062b13167fcddffc4563bde9285b92320
index 75cb9f5c984ca8d1b3432056a024f5dad1bbfe16..8fff983901a6ff5c0f0e7fbc721f5738dff550e1 100644 (file)
@@ -7465,6 +7465,7 @@ static SQLITE_NOINLINE void existsToJoin(
        && (pSub->selFlags & SF_Aggregate)==0
        && !pSub->pSrc->a[0].fg.isSubquery
        && pSub->pLimit==0
+       && pSub->pPrior==0
       ){
         /* Before combining the sub-select with the parent, renumber the 
         ** cursor used by the subselect. This is because the EXISTS expression
index f99011cb3c8837dc2b9f42b75563e1f779db3da9..28029359b8c0a7778a8793fd51f25901e1aaf1b7 100644 (file)
@@ -496,5 +496,22 @@ do_execsql_test 10.2 {
   );
 }
 
-finish_test
+# https://sqlite.org/forum/forumpost/2026-01-03T14:05:48z
+do_execsql_test 11.0 {
+  CREATE TABLE parent (id TEXT PRIMARY KEY);
+  CREATE TABLE child_a (id TEXT);
+  CREATE TABLE child_b (id TEXT);
+  INSERT INTO parent VALUES ('p1');
+  INSERT INTO child_a VALUES ('p1');
+}
+do_execsql_test 11.1 {
+  SELECT count(*), parent.id FROM parent
+   WHERE EXISTS (
+      SELECT 1 FROM child_a WHERE child_a.id = parent.id
+      UNION
+      SELECT 1 FROM child_b WHERE child_b.id = parent.id
+   )
+   GROUP BY id;
+} {1 p1}
 
+finish_test