1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-18 10:21:03 +03:00

Disable early coding of transitive constraints at the end of each loop in

the WHERE clause processing if the loop being coded is for a LEFT JOIN,
even if the loop is part of an OR-clause optimization for virtual tables.
Test cases in TH3.

FossilOrigin-Name: 9421b442cad9858ec21050c106aa935a1c0723ab08ef9a867a79638b040b6e68
This commit is contained in:
drh
2019-12-28 16:20:23 +00:00
parent 51f2b1719c
commit a4b2df5ce2
3 changed files with 11 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
C Fix\san\sinstance\swhere\sthe\splanner\smight\schoose\sto\suse\sthe\sOR-optimization\swhen\sit\sadds\sno\sbenefit.\sThe\ssame\squirk\scauses\san\sassert()\sto\sfail.\sThis\sis\snot\sa\sbug\sin\sreleased\sversions\s-\swithout\sthe\sassert()\sthe\slibrary\sstill\sgets\sthe\sright\sanswer,\sit\sjust\sdoes\sso\sless\sefficiently\sthan\sit\sshould. C Disable\searly\scoding\sof\stransitive\sconstraints\sat\sthe\send\sof\seach\sloop\sin\nthe\sWHERE\sclause\sprocessing\sif\sthe\sloop\sbeing\scoded\sis\sfor\sa\sLEFT\sJOIN,\neven\sif\sthe\sloop\sis\spart\sof\san\sOR-clause\soptimization\sfor\svirtual\stables.\nTest\scases\sin\sTH3.
D 2019-12-28T15:24:02.563 D 2019-12-28T16:20:23.018
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -616,7 +616,7 @@ F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d
F src/where.c 7bb294fdada405412dfd76d351286e0dec3dda07a8e19b0f904b8e8fc0ced41f F src/where.c 7bb294fdada405412dfd76d351286e0dec3dda07a8e19b0f904b8e8fc0ced41f
F src/whereInt.h de1b77e416ad5a7cc60a71fc1317484f8d83ca1e52b805dc8c978785a92eeded F src/whereInt.h de1b77e416ad5a7cc60a71fc1317484f8d83ca1e52b805dc8c978785a92eeded
F src/wherecode.c 65e1df2a4799851ada548501b19baf513f38e64a9402036e4a91be8feff9fb4f F src/wherecode.c 8f4b83ef410a5144bf65e2986d72df5b25c9dd6b0ef1676e9dc8efefdba011f8
F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396 F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
F src/window.c 87795bb8293179cb8a92529264d49bd66b5bcad5e91cfc17dd8d3e66a2a77f88 F src/window.c 87795bb8293179cb8a92529264d49bd66b5bcad5e91cfc17dd8d3e66a2a77f88
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
@@ -1853,7 +1853,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P c4d5b75c9381255ec8d9a284eedb6b27be46ca868cae5985cf8a5769b15290c3 P f4bed1d7af8a94c6facd567dec5afae8865a5ad76b8834493099e5e30bed1132
R 4484b8000c666fea7b24b9ac04eb1d8e R f70080212a74811cf1e55e61f62a66ab
U dan U drh
Z 3a2b5af54c367ffdd0ebc1f90fbcc7cb Z 43a1d545f913b52be3ee48c625515a53

View File

@@ -1 +1 @@
f4bed1d7af8a94c6facd567dec5afae8865a5ad76b8834493099e5e30bed1132 9421b442cad9858ec21050c106aa935a1c0723ab08ef9a867a79638b040b6e68

View File

@@ -1286,8 +1286,8 @@ Bitmask sqlite3WhereCodeOneLoopStart(
VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName)); VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName));
#if WHERETRACE_ENABLED /* 0x20800 */ #if WHERETRACE_ENABLED /* 0x20800 */
if( sqlite3WhereTrace & 0x800 ){ if( sqlite3WhereTrace & 0x800 ){
sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx\n", sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n",
iLevel, pWInfo->nLevel, (u64)notReady); iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom);
sqlite3WhereLoopPrint(pLoop, pWC); sqlite3WhereLoopPrint(pLoop, pWC);
} }
if( sqlite3WhereTrace & 0x20000 ){ if( sqlite3WhereTrace & 0x20000 ){
@@ -2381,7 +2381,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) continue; if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) continue;
if( (pTerm->eOperator & WO_EQUIV)==0 ) continue; if( (pTerm->eOperator & WO_EQUIV)==0 ) continue;
if( pTerm->leftCursor!=iCur ) continue; if( pTerm->leftCursor!=iCur ) continue;
if( pLevel->iLeftJoin ) continue; if( pTabItem->fg.jointype & JT_LEFT ) continue;
pE = pTerm->pExpr; pE = pTerm->pExpr;
#ifdef WHERETRACE_ENABLED /* 0x800 */ #ifdef WHERETRACE_ENABLED /* 0x800 */
if( sqlite3WhereTrace & 0x800 ){ if( sqlite3WhereTrace & 0x800 ){