]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Small performance optimization in sqlite3WhereClauseClear().
authordrh <>
Thu, 2 Dec 2021 12:55:05 +0000 (12:55 +0000)
committerdrh <>
Thu, 2 Dec 2021 12:55:05 +0000 (12:55 +0000)
FossilOrigin-Name: 080b35e62e5c6bb4ea162bc75232b81e54da5e3e01e762127e228400e8afef1d

manifest
manifest.uuid
src/whereexpr.c

index 1d0d293e6a7d89ed81fc8e78805d0f69855c1ae8..46ffc13fd4ff990cac208533b8d125304b34e13b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C More\ssmall\sperformance\soptimizations\sfor\ssqlite3WhereGetMask().
-D 2021-12-02T12:34:05.331
+C Small\sperformance\soptimization\sin\ssqlite3WhereClauseClear().
+D 2021-12-02T12:55:05.367
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -640,7 +640,7 @@ F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
 F src/where.c b50391df607937593596fbb8ea39f673d9a3715a65750567b442d22dd20720ca
 F src/whereInt.h 1630d9418512b080598e9a72b8af6b8bd1b9ab13fee1458f151762b6df206791
 F src/wherecode.c 1f5b62f46d284c8886945eb7438415bc27e23e87bb60b9ee468fa6bd31268f33
-F src/whereexpr.c 17bdbf4f5b490e70a18635498f0b910a558f953a9bf80af7f19cbde6e60e6825
+F src/whereexpr.c 5780201555e62250ae176d40a1b840f63a3ab4fc015f286ac7e3dbea53c0b486
 F src/window.c 5d3b397b0c026d0ff5890244ac41359e524c01ae31e78782e1ff418c3e271a9e
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627
@@ -1933,7 +1933,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 7edec54ab045c0493fc5d27d47d7bf0e08d3b0b298f428646fd3f0ee24dfcade
-R 1c3ef5334121101d82935d790fc38231
+P 3de2c557d915d1b4a9b0e540d5e80ffb243e7123d0ec65c5052f4d6f1cce56b2
+R 8a54b72f0460bed9e312d2981e2b1a82
 U drh
-Z 3bbf6be35a1404f46b703105b00b0544
+Z f5838c1c1adaaaafa1d74530a9dc2af4
index d5b9582fdc8470bef6d737f592f07af218dbfbfd..b709254f668d4531d2da9da3abbec72b07c815b4 100644 (file)
@@ -1 +1 @@
-3de2c557d915d1b4a9b0e540d5e80ffb243e7123d0ec65c5052f4d6f1cce56b2
\ No newline at end of file
+080b35e62e5c6bb4ea162bc75232b81e54da5e3e01e762127e228400e8afef1d
\ No newline at end of file
index 53dd14031cd4e45adde2c751c85b9b196ae45cb4..93992f4107745d71b738e0e3a1d1f7c5fa887fbf 100644 (file)
@@ -1525,17 +1525,25 @@ void sqlite3WhereClauseInit(
 ** sqlite3WhereClauseInit().
 */
 void sqlite3WhereClauseClear(WhereClause *pWC){
-  int i;
-  WhereTerm *a;
   sqlite3 *db = pWC->pWInfo->pParse->db;
-  for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
-    if( a->wtFlags & TERM_DYNAMIC ){
-      sqlite3ExprDelete(db, a->pExpr);
-    }
-    if( a->wtFlags & TERM_ORINFO ){
-      whereOrInfoDelete(db, a->u.pOrInfo);
-    }else if( a->wtFlags & TERM_ANDINFO ){
-      whereAndInfoDelete(db, a->u.pAndInfo);
+  if( pWC->nTerm>0 ){
+    WhereTerm *a = pWC->a;
+    WhereTerm *aLast = &pWC->a[pWC->nTerm-1];
+    while(1){
+      if( a->wtFlags & TERM_DYNAMIC ){
+        sqlite3ExprDelete(db, a->pExpr);
+      }
+      if( a->wtFlags & (TERM_ORINFO|TERM_ANDINFO) ){
+        if( a->wtFlags & TERM_ORINFO ){
+          assert( (a->wtFlags & TERM_ANDINFO)==0 );
+          whereOrInfoDelete(db, a->u.pOrInfo);
+        }else{
+          assert( (a->wtFlags & TERM_ANDINFO)!=0 );
+          whereAndInfoDelete(db, a->u.pAndInfo);
+        }
+      }
+      if( a==aLast ) break;
+      a++;
     }
   }
   if( pWC->a!=pWC->aStatic ){