From: drh <> Date: Tue, 12 Apr 2022 14:23:45 +0000 (+0000) Subject: The multi-index OR optimization does not work for RIGHT join, so disallow it. X-Git-Tag: version-3.39.0~206^2~64^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=61dac44eb91f0e9f37eb5ccdfe9877f0cdc39a97;p=thirdparty%2Fsqlite.git The multi-index OR optimization does not work for RIGHT join, so disallow it. FossilOrigin-Name: 34c2f7b237fa4e0e1cd94fb9c44ebe194b86b88dc575055cc46c7f3695d02756 --- diff --git a/manifest b/manifest index 3cd8c98914..1b8dc3a8c1 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Always\sexplicitly\sset\seach\stable\scursor\sto\sNullRow\sbefore\sdoing\sthe\sRIGHT-JOIN\nunmatched\srow\spass.\s\sThis\sis\sa\scheap\sopcode,\sand\sit\sadds\san\sextra\slayer\sof\ndefense\sagainst\sincorrect\sresults. -D 2022-04-12T13:46:21.228 +C The\smulti-index\sOR\soptimization\sdoes\snot\swork\sfor\sRIGHT\sjoin,\sso\sdisallow\sit. +D 2022-04-12T14:23:45.158 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -639,7 +639,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b -F src/where.c 2e4c4a9140a5feb5d55613786f253e2684408e830fc1108abd854d95ef926d68 +F src/where.c 5473af25fd2acd2898574950f51e4eaec77d57c450c0d3339905f3db42c6bb30 F src/whereInt.h cd6bddac3a26640b92d86e2b45ecc6e82d663cbcac6fd5d6d9690dfb280b1668 F src/wherecode.c bdf7de22c7ac38ad92e78214231a6054019521bfab943c2bfd5ddfb9e8ad9255 F src/whereexpr.c 174d4ad5be165c610c907abb779ef4a97974d22b84e1ce7898d2d9f6947249e5 @@ -1946,8 +1946,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 75a9116e98b9ac5c1a4c62a01143a016d9ba6a0b495ff7af7468c11947a3e888 -R 7f21190d047eb5dd5ac5fcbb3009e4d3 +P a3d14e61ca22167296fee125a3e9aa63413408955e03bb3f9d85fa9f22df1b79 +R 4bae6c9d6bdd8a980fce4f657c738433 U drh -Z fd007c71d1edd8db14c7de90c355f1d6 +Z f042afe955449d12af108738d6fffc40 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 55b041541b..71af4118a6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a3d14e61ca22167296fee125a3e9aa63413408955e03bb3f9d85fa9f22df1b79 \ No newline at end of file +34c2f7b237fa4e0e1cd94fb9c44ebe194b86b88dc575055cc46c7f3695d02756 \ No newline at end of file diff --git a/src/where.c b/src/where.c index 2883653317..4c9ba86b12 100644 --- a/src/where.c +++ b/src/where.c @@ -4016,6 +4016,9 @@ static int whereLoopAddOr( pItem = pWInfo->pTabList->a + pNew->iTab; iCur = pItem->iCursor; + /* The multi-index OR optimization does not work for RIGHT and FULL JOIN */ + if( pItem->fg.jointype & JT_RIGHT ) return SQLITE_OK; + for(pTerm=pWC->a; pTermeOperator & WO_OR)!=0 && (pTerm->u.pOrInfo->indexable & pNew->maskSelf)!=0