From: drh Date: Wed, 5 Jun 2013 12:47:59 +0000 (+0000) Subject: Performance tweak to whereLoopInsert(). X-Git-Tag: version-3.8.0~130^2~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cd0f407c3f9ab27cfac6be88e53ce0036d2208b2;p=thirdparty%2Fsqlite.git Performance tweak to whereLoopInsert(). FossilOrigin-Name: 1c4a78807b7a28c9976ca8c5722ff4e2e8755b7e --- diff --git a/manifest b/manifest index ed506f992c..ae6211e19d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sa\stest\scase\scontributed\son\sthe\smailing\slist\nthat\sworks\sin\sNGQP\sbut\sfails\sin\slegacy. -D 2013-06-05T12:18:15.188 +C Performance\stweak\sto\swhereLoopInsert(). +D 2013-06-05T12:47:59.358 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -289,7 +289,7 @@ F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83 F src/wal.c 436bfceb141b9423c45119e68e444358ee0ed35d F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73 -F src/where.c 0b8fd61de3c71df0ba084d13177c384bb50e4d22 +F src/where.c 3b175d731c15e30bd8893b0309f9e7e8d0f11121 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6 @@ -1094,7 +1094,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P cf96eb5945a9bab71104cb1581ee13ab30022566 -R 373c05c6780cec478b9924edf49e0658 +P 96afe50866a08ed14e911c3c955030f7ab83a3ed +R 70441548922262718992448fc2500d0d U drh -Z c785a25f44da51b36475ec1e8ccfb14e +Z 415f390706a3e5c8723b2ce592b50c3b diff --git a/manifest.uuid b/manifest.uuid index bafc3efa21..ce1f9dfb25 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -96afe50866a08ed14e911c3c955030f7ab83a3ed \ No newline at end of file +1c4a78807b7a28c9976ca8c5722ff4e2e8755b7e \ No newline at end of file diff --git a/src/where.c b/src/where.c index d9dccf7541..3af73198e8 100644 --- a/src/where.c +++ b/src/where.c @@ -3859,25 +3859,27 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ */ for(ppPrev=&pWInfo->pLoops, p=*ppPrev; p; ppPrev=&p->pNextLoop, p=*ppPrev){ if( p->iTab!=pTemplate->iTab || p->iSortIdx!=pTemplate->iSortIdx ) continue; - if( p->nTermnTerm - && (p->wsFlags & WHERE_INDEXED)!=0 - && (pTemplate->wsFlags & WHERE_INDEXED)!=0 - && p->u.btree.pIndex==pTemplate->u.btree.pIndex - && p->prereq==pTemplate->prereq - ){ - /* Overwrite an existing WhereLoop with an similar one that uses - ** more terms of the index */ - pNext = p->pNextLoop; - whereLoopClear(db, p); - break; - } if( (p->prereq & pTemplate->prereq)==p->prereq && p->rSetup<=pTemplate->rSetup && p->rRun<=pTemplate->rRun ){ - /* Already holding an equal or better WhereLoop. - ** Return without changing or adding anything */ - goto whereLoopInsert_noop; + /* p is equal or better than pTemplate */ + if( p->nTermnTerm + && (p->wsFlags & WHERE_INDEXED)!=0 + && (pTemplate->wsFlags & WHERE_INDEXED)!=0 + && p->u.btree.pIndex==pTemplate->u.btree.pIndex + && p->prereq==pTemplate->prereq + ){ + /* Overwrite an existing WhereLoop with an similar one that uses + ** more terms of the index */ + pNext = p->pNextLoop; + whereLoopClear(db, p); + break; + }else{ + /* pTemplate is not helpful. + ** Return without changing or adding anything */ + goto whereLoopInsert_noop; + } } if( (p->prereq & pTemplate->prereq)==pTemplate->prereq && p->rSetup>=pTemplate->rSetup