aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <>2025-05-16 17:30:20 +0000
committerdrh <>2025-05-16 17:30:20 +0000
commitcd64392301b921015a9381f2747248b31c0fe606 (patch)
treecf363eee346fa907208482fd2bd3a73ea6cef02c
parentcecf833325535a91edc9b4ceb57ffe6a438c4b53 (diff)
downloadsqlite-cd64392301b921015a9381f2747248b31c0fe606.tar.gz
sqlite-cd64392301b921015a9381f2747248b31c0fe606.zip
Fix the optimization of check-in [663f5dd32d9db832] that strives to avoid
duplicate compuations in the GROUP BY clause so that it works even if the GROUP BY term is a subquery on the RHS of a LEFT JOIN. Problem found by dbsqlfuzz. Test cases in TH3. FossilOrigin-Name: 955a026996b93e530ca5b566689cc646b31d3b9b5a5837897a58452d70f6d942
-rw-r--r--manifest12
-rw-r--r--manifest.uuid2
-rw-r--r--src/select.c5
3 files changed, 12 insertions, 7 deletions
diff --git a/manifest b/manifest
index f1658c070..6b6ab7809 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\s--enablefk\soption\sto\sthe\s"changeset\sapply"\scommand\sof\sthe\nchangeset\sprogram.
-D 2025-05-15T18:50:19.436
+C Fix\sthe\soptimization\sof\scheck-in\s[663f5dd32d9db832]\sthat\sstrives\sto\savoid\nduplicate\scompuations\sin\sthe\sGROUP\sBY\sclause\sso\sthat\sit\sworks\seven\sif\sthe\nGROUP\sBY\sterm\sis\sa\ssubquery\son\sthe\sRHS\sof\sa\sLEFT\sJOIN.\s\sProblem\sfound\nby\sdbsqlfuzz.\s\sTest\scases\sin\sTH3.
+D 2025-05-16T17:30:20.021
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -785,7 +785,7 @@ F src/printf.c 3b91c334f528359145f4dde0dedd945bbb21044d0825ea064934d7222d61662c
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c d40fe18d7c2fd0339f5846ffcf7d6809866e380acdf14c76fb2af87e9fe13f64
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c 1a5956231f7c57571288eaad61e5c37aaf0f3acb5c8a5ea0b896938166b62fa2
+F src/select.c 8bfa8978ccac53240374ac28e3db2342bc3026fccd020d72c6c5468696f725a6
F src/shell.c.in ba53a52dafb167ac6320703da741386c34fbcabe8c078a188bb9f89808e3ef8f
F src/sqlite.h.in 22882ddd3a70751aa8864c81993ee4562ed54c2c508b6270f75e223ffee38e1b
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
@@ -2207,8 +2207,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 428daca4f1b3e1a33b7e2f5acf114fa6136d46555e9947e2e88ea107bfec5e4f
-R 3ebb7e1a57b0644164c9806139962e47
+P e98d46d436f8d251ae0da5ee85fd856aca3b57cd48d1be31fa6ca88fe72cad00
+R cf9268e21c54ad74aa1878ddf9fbd8f2
U drh
-Z 1a9f52a76db3b44ded26498f0dcd2e58
+Z fa0f1340c970bbf9fcaf21a2bead4beb
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index fbe1c74bc..3c0c98aa8 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-e98d46d436f8d251ae0da5ee85fd856aca3b57cd48d1be31fa6ca88fe72cad00
+955a026996b93e530ca5b566689cc646b31d3b9b5a5837897a58452d70f6d942
diff --git a/src/select.c b/src/select.c
index 6e8ee58bc..cf535dc79 100644
--- a/src/select.c
+++ b/src/select.c
@@ -8499,6 +8499,11 @@ int sqlite3Select(
Expr *pX = p->pEList->a[iOrderByCol-1].pExpr;
Expr *pBase = sqlite3ExprSkipCollateAndLikely(pX);
if( ALWAYS(pBase!=0)
+ && pBase->op==TK_IF_NULL_ROW
+ ){
+ pBase = pX = pBase->pLeft;
+ }
+ if( ALWAYS(pBase!=0)
&& pBase->op!=TK_AGG_COLUMN
&& pBase->op!=TK_REGISTER
){