]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Slightly faster implementation of the length() SQL function.
authordrh <drh@noemail.net>
Tue, 23 Jan 2018 04:22:33 +0000 (04:22 +0000)
committerdrh <drh@noemail.net>
Tue, 23 Jan 2018 04:22:33 +0000 (04:22 +0000)
FossilOrigin-Name: 9a4199aedb039141a50a68943ef863d7df9637ada318793cce6c12b9d39bcdc5

manifest
manifest.uuid
src/func.c

index 71deaf97818c15963792300d99daa4049ecd11ad..79e0bb8fd988af65d67007abcdd65b7706181e2d 100644 (file)
--- 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
index 993b1dc61ad70d66c7ac2d1bf4df3f3f1f31caa0..70318058cb661cb353c700723e6db34e48f18a0d 100644 (file)
@@ -1 +1 @@
-edd4e6876cc08ab907bb21f075380de946562d4c56a04923760848b4b11536ac
\ No newline at end of file
+9a4199aedb039141a50a68943ef863d7df9637ada318793cce6c12b9d39bcdc5
\ No newline at end of file
index 8f409a0ad18c092ab8b427b2bb0076bfb7117c06..36cfa4423084c565b6ded6ec2e0bbb5e0cdd9c58 100644 (file)
@@ -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: {