]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improve the performance of the LIKE operator by using strcspn() to aid
authordrh <drh@noemail.net>
Mon, 30 Oct 2017 18:49:11 +0000 (18:49 +0000)
committerdrh <drh@noemail.net>
Mon, 30 Oct 2017 18:49:11 +0000 (18:49 +0000)
wildcard matching.

FossilOrigin-Name: 37284d4e8f501a37c582aa899419a3dfe0932e2a8e2ef2fdf59addd1d3cdacb4

manifest
manifest.uuid
src/func.c

index f18ede0142a2829b20bb44f1051866b3c9ea9bdc..e88bdbcfad105c9b1f2195f7247b1243f3919940 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Increase\sthe\sversion\snumber\sfor\sthe\snext\srelease\s-\swhich\sis\sstill\smonths\naway\sbut\sthere\shave\sbeen\ssignificant\squery\splanner\senhancements\ssince\sthe\nprevious\srelease.
-D 2017-10-28T20:54:51.351
+C Improve\sthe\sperformance\sof\sthe\sLIKE\soperator\sby\susing\sstrcspn()\sto\said\nwildcard\smatching.
+D 2017-10-30T18:49:11.595
 F Makefile.in e016061b23e60ac9ec27c65cb577292b6bde0307ca55abd874ab3487b3b1beb2
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 37740aba9c4bb359c627eadccf1cfd7be4f5f847078723777ea7763969e533b1
@@ -419,7 +419,7 @@ F src/delete.c 21a5f1812fdb599e9f7afb9f650bdabab60a3afd51d7e94e539c982f647b0023
 F src/expr.c 0016b95aed1df47ebc0eb7415bd621841d72dbffd3bfb62210e50e71d83b4691
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 5ff2c895fe087756d8085dc1a9bc229b5670e2a65c3929dd87c71e43649af333
-F src/func.c b4d259af627e3cd9510cf08db37f0bcc88b1887c735169c74490c3739d5cf5c6
+F src/func.c 0fb9a2d678d3c8aba89b46468b309cd7e8fa9806a369a30aa89024660845bb13
 F src/global.c ac3094f1dc59fbeb919aef7cc0cc827a8459d1fb1adb7972ef75bd9e0c10b75b
 F src/hash.c a12580e143f10301ed5166ea4964ae2853d3905a511d4e0c44497245c7ce1f7a
 F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4
@@ -1666,7 +1666,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 d17ef7d153058f7332b3fec421ade42c67e26b06f36fc1629e6799537a5afc5f
-R d5f45aed899d7f014af4553e25cf640f
+P 457eedfac0ff652912c4cfb89682acb3d2e372ef00745139adf8492a0b61fa09
+R b136c0336cd9a2670f5306d89a5f1d34
 U drh
-Z 66b45fa3f9b3a864ae6a46fe2fdaa343
+Z 1ff3723c7287a54f5348d686239a8395
index 0576f4ab0576df80a1ab145b6ac5852d8d79cf45..e6859f55556f09ddd01592ed39cfc3b35964b8a6 100644 (file)
@@ -1 +1 @@
-457eedfac0ff652912c4cfb89682acb3d2e372ef00745139adf8492a0b61fa09
\ No newline at end of file
+37284d4e8f501a37c582aa899419a3dfe0932e2a8e2ef2fdf59addd1d3cdacb4
\ No newline at end of file
index b46578a4071563b80fb1ac24f6016c48ecce77f8..7528fa8b4d60540646cb1c426af1461bb70508f9 100644 (file)
@@ -698,16 +698,20 @@ static int patternCompare(
       ** c or cx.
       */
       if( c<=0x80 ){
-        u32 cx;
+        char zStop[3];
         int bMatch;
         if( noCase ){
-          cx = sqlite3Toupper(c);
-          c = sqlite3Tolower(c);
+          zStop[0] = sqlite3Toupper(c);
+          zStop[1] = sqlite3Tolower(c);
+          zStop[2] = 0;
         }else{
-          cx = c;
+          zStop[0] = c;
+          zStop[1] = 0;
         }
-        while( (c2 = *(zString++))!=0 ){
-          if( c2!=c && c2!=cx ) continue;
+        while(1){
+          zString += strcspn((const char*)zString, zStop);
+          if( zString[0]==0 ) break;
+          zString++;
           bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
           if( bMatch!=SQLITE_NOMATCH ) return bMatch;
         }