]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Prototype implementation of the octet_length() SQL function.
authordrh <>
Sat, 3 Jun 2023 11:22:30 +0000 (11:22 +0000)
committerdrh <>
Sat, 3 Jun 2023 11:22:30 +0000 (11:22 +0000)
FossilOrigin-Name: 2db989c8635f7e89b3ea58d1fde94787fced039ac1a118d9b6362811eda73f87

manifest
manifest.uuid
src/func.c

index 1600a44006e9ba18c7d28f38294c479df5c304d2..814869b7a79c8ab3e60e7ccecb599836c39ef270 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Clarify\ssqlite3_is_interrupted()\sreturn.\sNo\scode\schange.
-D 2023-06-02T21:31:15.372
+C Prototype\simplementation\sof\sthe\soctet_length()\sSQL\sfunction.
+D 2023-06-03T11:22:30.333
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -590,7 +590,7 @@ F src/delete.c 05e27e3a55dcfeadf2f7ca95a5c5e0928f182c04640ec1954ffa42f3d5c19341
 F src/expr.c 099cf96cf72f1b8cebf0d91a8f75e111454cd011deed9c6dadcd0241c2abdca8
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 03c134cc8bffe54835f742ddea0b72ebfc8f6b32773d175c71b8afeea6cb5c83
-F src/func.c 03e6b501f3056d0ba398bda17df938b2b566aa0b3ca7e1942a3cd1925d04ec36
+F src/func.c a92c16243b4ff97bb0d33f768655386cbeda2f5578b55c8d1506f98c05e57df7
 F src/global.c bd0892ade7289f6e20bff44c07d06371f2ff9b53cea359e7854b9b72f65adc30
 F src/hash.c c6af5f96a7a76d000f07c5402c48c318c2566beecdee9e78b9d9f60ce7119565
 F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
@@ -2072,8 +2072,11 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 2d962b84dd8ac2d0968f0283f8f082c1c2a7a1f99b59053b2ad8f58745396447
-R bb96499807291badc8caa68a15102a55
-U larrybr
-Z d7565eecc2be24c461e09bd23272a099
+P b6c2d3d203100a34335aeba23a8fb82a13297b65eed494d5044ade3bed683bc3
+R 0cb68c241321c9536b569fbdd310369e
+T *branch * octet_length
+T *sym-octet_length *
+T -sym-trunk *
+U drh
+Z 0eda05c60d33702c59af3ce1cb0182d6
 # Remove this line to create a well-formed Fossil manifest.
index 86317e16f2cc23b0048df7fdc0e92ccb35b0bbe3..0d014951d6aa9106bb166d901ce77329be055576 100644 (file)
@@ -1 +1 @@
-b6c2d3d203100a34335aeba23a8fb82a13297b65eed494d5044ade3bed683bc3
\ No newline at end of file
+2db989c8635f7e89b3ea58d1fde94787fced039ac1a118d9b6362811eda73f87
\ No newline at end of file
index 4d0da5deddb082a276dd1876f0d406d22198f412..bcd75ff67446804f18a2458453ed0cd4198c93b0 100644 (file)
@@ -149,6 +149,42 @@ static void lengthFunc(
   }
 }
 
+/*
+** Implementation of the octet_length() function
+*/
+static void bytelengthFunc(
+  sqlite3_context *context,
+  int argc,
+  sqlite3_value **argv
+){
+  assert( argc==1 );
+  UNUSED_PARAMETER(argc);
+  switch( sqlite3_value_type(argv[0]) ){
+    case SQLITE_BLOB: {
+      sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
+      break;
+    }
+    case SQLITE_INTEGER:
+    case SQLITE_FLOAT: {
+      i64 m = sqlite3_context_db_handle(context)->enc<=SQLITE_UTF8 ? 1 : 2;
+      sqlite3_result_int64(context, sqlite3_value_bytes(argv[0])*m);
+      break;
+    }
+    case SQLITE_TEXT: {
+      if( sqlite3_value_encoding(argv[0])<=SQLITE_UTF8 ){
+        sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
+      }else{
+        sqlite3_result_int(context, sqlite3_value_bytes16(argv[0]));
+      }
+      break;
+    }
+    default: {
+      sqlite3_result_null(context);
+      break;
+    }
+  }
+}
+
 /*
 ** Implementation of the abs() function.
 **
@@ -2376,6 +2412,7 @@ void sqlite3RegisterBuiltinFunctions(void){
     FUNCTION2(typeof,            1, 0, 0, typeofFunc,  SQLITE_FUNC_TYPEOF),
     FUNCTION2(subtype,           1, 0, 0, subtypeFunc, SQLITE_FUNC_TYPEOF),
     FUNCTION2(length,            1, 0, 0, lengthFunc,  SQLITE_FUNC_LENGTH),
+    FUNCTION2(octet_length,      1, 0, 0, bytelengthFunc,SQLITE_FUNC_LENGTH),
     FUNCTION(instr,              2, 0, 0, instrFunc        ),
     FUNCTION(printf,            -1, 0, 0, printfFunc       ),
     FUNCTION(format,            -1, 0, 0, printfFunc       ),