]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the optimization of check-in [663f5dd32d9db832] that strives to avoid
authordrh <>
Fri, 16 May 2025 17:30:20 +0000 (17:30 +0000)
committerdrh <>
Fri, 16 May 2025 17:30:20 +0000 (17:30 +0000)
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

manifest
manifest.uuid
src/select.c

index f1658c07073225db55d9d36a8347f0c77f7320f2..6b6ab7809826c2c156b057c9994c86937d9b9bc5 100644 (file)
--- 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.
index fbe1c74bc0fb608f63a15f12a90cb31975215f69..3c0c98aa842c0fc6343a9042a6c01bd94e12ea4e 100644 (file)
@@ -1 +1 @@
-e98d46d436f8d251ae0da5ee85fd856aca3b57cd48d1be31fa6ca88fe72cad00
+955a026996b93e530ca5b566689cc646b31d3b9b5a5837897a58452d70f6d942
index 6e8ee58bc6b038746f8a36c0e1d82dde60e1e348..cf535dc79c6dba67e469a7996fbdac616955970b 100644 (file)
@@ -8498,6 +8498,11 @@ int sqlite3Select(
         if( iOrderByCol ){
           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