From 6b35ba9f5b06adbd505c896d42b3be7f89cd641b Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 30 Oct 2017 18:26:59 +0000 Subject: [PATCH] Speed up wildcard searches in LIKE using strchr() FossilOrigin-Name: 4d336d742043af1f520eff3f462bdb3db495d3045a81a987c3890e7de09bcc00 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- src/func.c | 13 +++++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index f18ede0142..467e82dc46 100644 --- 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 Speed\sup\swildcard\ssearches\sin\sLIKE\susing\sstrchr() +D 2017-10-30T18:26:59.234 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 dfe00937b2fff97525f1511619af227d1214bf8d70cf0ccdc6afd645ab38619f F src/global.c ac3094f1dc59fbeb919aef7cc0cc827a8459d1fb1adb7972ef75bd9e0c10b75b F src/hash.c a12580e143f10301ed5166ea4964ae2853d3905a511d4e0c44497245c7ce1f7a F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4 @@ -1666,7 +1666,10 @@ 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 d04881c66f78139708a9da3a92d4699e +T *branch * like-compare-opt +T *sym-like-compare-opt * +T -sym-trunk * U drh -Z 66b45fa3f9b3a864ae6a46fe2fdaa343 +Z fdc6131b43ad22c568551d5cb4a82ae3 diff --git a/manifest.uuid b/manifest.uuid index 0576f4ab05..c182c91d8b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -457eedfac0ff652912c4cfb89682acb3d2e372ef00745139adf8492a0b61fa09 \ No newline at end of file +4d336d742043af1f520eff3f462bdb3db495d3045a81a987c3890e7de09bcc00 \ No newline at end of file diff --git a/src/func.c b/src/func.c index b46578a407..922a3045c2 100644 --- a/src/func.c +++ b/src/func.c @@ -706,11 +706,24 @@ static int patternCompare( }else{ cx = c; } + while(1){ + const u8 *zStr1 = (const u8*)strchr((const char*)zString,c); + if( cx!=c ){ + const u8 *zStr2 = (const u8*)strchr((const char*)zString,cx); + if( zStr1==0 || (zStr2!=0 && zStr2