From: drh Date: Tue, 23 Jan 2018 04:22:33 +0000 (+0000) Subject: Slightly faster implementation of the length() SQL function. X-Git-Tag: version-3.23.0~205 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ea3469e539fd296eaf2e5d16d9d1b0796f47bcb;p=thirdparty%2Fsqlite.git Slightly faster implementation of the length() SQL function. FossilOrigin-Name: 9a4199aedb039141a50a68943ef863d7df9637ada318793cce6c12b9d39bcdc5 --- diff --git a/manifest b/manifest index 71deaf9781..79e0bb8fd9 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Slightly\sfaster\sfunction\sdispatch\sin\sthe\svirtual\smachine\sby\savoiding\nunnecessary\sreinitialization\sof\svariables\sthat\sare\salready\scorrectly\ninitialized. -D 2018-01-23T03:44:06.287 +C Slightly\sfaster\simplementation\sof\sthe\slength()\sSQL\sfunction. +D 2018-01-23T04:22:33.527 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 38f84f301cbef443b2d269f67a74b8cc536469831f70df7c3e912acc04932cc2 @@ -442,7 +442,7 @@ F src/delete.c 20c8788451dc737a967c87ea53ad43544d617f5b57d32ccce8bd52a0daf9e89b F src/expr.c 9e06de431c09f144438aa6895ea4d4290fa3c6875bfcc3ba331012ca78deadf0 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c d617daf66b5515e2b42c1405b2b4984c30ca50fb705ab164271a9bf66c69e331 -F src/func.c 24d4746d347442c99153b5f9ac3204f6932d8d591008a94d6967de6b62fc0102 +F src/func.c 227d17a030b75f7495fc3b8d1aca19850e794397433175c1ba21b713d9833f14 F src/global.c ac3094f1dc59fbeb919aef7cc0cc827a8459d1fb1adb7972ef75bd9e0c10b75b F src/hash.c a12580e143f10301ed5166ea4964ae2853d3905a511d4e0c44497245c7ce1f7a F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4 @@ -1700,7 +1700,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 012d7d49c571207087bbe24af05d639627b96df526bfcb2098a3e975b74d865d -R 117511e55335ee1f52b85cfdea90c38c +P edd4e6876cc08ab907bb21f075380de946562d4c56a04923760848b4b11536ac +R aa1994289d6ea2ba21f905f276b2d5c2 U drh -Z e3904fade688ed958d5e16ed2185daad +Z fced45fd12f23e9379e90a75bf8cc2b6 diff --git a/manifest.uuid b/manifest.uuid index 993b1dc61a..70318058cb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -edd4e6876cc08ab907bb21f075380de946562d4c56a04923760848b4b11536ac \ No newline at end of file +9a4199aedb039141a50a68943ef863d7df9637ada318793cce6c12b9d39bcdc5 \ No newline at end of file diff --git a/src/func.c b/src/func.c index 8f409a0ad1..36cfa44230 100644 --- a/src/func.c +++ b/src/func.c @@ -102,8 +102,6 @@ static void lengthFunc( int argc, sqlite3_value **argv ){ - int len; - assert( argc==1 ); UNUSED_PARAMETER(argc); switch( sqlite3_value_type(argv[0]) ){ @@ -115,13 +113,17 @@ static void lengthFunc( } case SQLITE_TEXT: { const unsigned char *z = sqlite3_value_text(argv[0]); + const unsigned char *z0; + unsigned char c; if( z==0 ) return; - len = 0; - while( *z ){ - len++; - SQLITE_SKIP_UTF8(z); + z0 = z; + while( (c = *z)!=0 ){ + z++; + if( c>=0xc0 ){ + while( (*z & 0xc0)==0x80 ){ z++; z0++; } + } } - sqlite3_result_int(context, len); + sqlite3_result_int(context, (int)(z-z0)); break; } default: {