]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Functions that pass through the sqlite3_value of one of their arguments must
authordrh <>
Sat, 4 May 2024 11:31:34 +0000 (11:31 +0000)
committerdrh <>
Sat, 4 May 2024 11:31:34 +0000 (11:31 +0000)
also be marked as SQLITE_RESULT_SUBTYPE, in case one of their arguments has
a subtype.

FossilOrigin-Name: 2f9fba931d9f80b3d5dffb175180098756bccc6a8f665d7aaf8826970ab60d72

manifest
manifest.uuid
src/func.c
test/indexexpr1.test

index 1ed79f3c8994d571adb0c56f44ff9d04fbfbb7e2..95c66ec418b3ca26ad2e00b400dc9f1991d44f1e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\scoalesce(),\sifnull(),\sand\siif()\sfunctions\spass\sthrough\ssubtype\svalues\nfrom\stheir\sarguments,\sand\shence\sneed\sto\shave\sthe\sSQLITE_RESULT_SUBTYPE\sflag\nset.\s\sThis\sfixes\san\scorner-case\sfor\sthe\spatch\sat\s[ba789a7804ab96d8].
-D 2024-05-03T19:35:43.156
+C Functions\sthat\spass\sthrough\sthe\ssqlite3_value\sof\sone\sof\stheir\sarguments\smust\nalso\sbe\smarked\sas\sSQLITE_RESULT_SUBTYPE,\sin\scase\sone\sof\stheir\sarguments\shas\na\ssubtype.
+D 2024-05-04T11:31:34.734
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -705,7 +705,7 @@ F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
 F src/expr.c 005bf7a088a2fb12a50752a2a1d40d423b8942e1920e93c3a1ba76da0bfbe52b
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c a47610f0a5c6cb0ad79f8fcef039c01833dec0c751bb695f28dc0ec6a4c3ba00
-F src/func.c ac6e03e7f39feced49681a1a67c50a82b43e8573dd7a9278ca4ff291317f2b0d
+F src/func.c ee81e2fd91b93da5cee11f2abc1a197d32f037e00a8084d003a47e49b17a6c21
 F src/global.c 61a419dd9e993b9be0f91de4c4ccf322b053eb829868e089f0321dd669be3b90
 F src/hash.c 9ee4269fb1d6632a6fecfb9479c93a1f29271bddbbaf215dd60420bcb80c7220
 F src/hash.h 3340ab6e1d13e725571d7cee6d3e3135f0779a7d8e76a9ce0a85971fa3953c51
@@ -1302,7 +1302,7 @@ F test/index8.test caa097735c91dbc23d8a402f5e63a2a03c83840ba3928733ed7f9a03f8a91
 F test/index9.test 2ac891806a4136ef3e91280477e23114e67575207dc331e6797fa0ed9379f997
 F test/indexA.test 11d84f6995e6e5b9d8315953fb1b6d29772ee7c7803ee9112715e7e4dd3e4974
 F test/indexedby.test f21eca4f7a6ffe14c8500a7ad6cd53166666c99e5ccd311842a28bc94a195fe0
-F test/indexexpr1.test 870ffcf3911ef447e7714d49c4504a92580410ecb0d6d76499493f9a5591efb1
+F test/indexexpr1.test 24fa85a12da384dd1d56f7b24e593c51a8a54b4c5e2e8bbb9e5fdf1099427faf
 F test/indexexpr2.test 1c382e81ef996d8ae8b834a74f2a9013dddf59214c32201d7c8a656d739f999a
 F test/indexfault.test 98d78a8ff1f5335628b62f886a1cb7c7dac1ef6d48fa39c51ec871c87dce9811
 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
@@ -2188,8 +2188,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 26b2d9390f1273ee0e3f3c96f6bc5bf0e9c1dcfd0d9ecd993dba487ef5a07f7e
-R 0268c566eccde5bd7b524cfab1a24524
+P cdd1610c44876623e629bb8e5779ea689e6d23c545552b088eca63ad2d1cf8da
+R 33e55f0c34c1768cb20638651312a57f
 U drh
-Z ad416147806e454b3211249b5d00a37b
+Z 72ec691afb693a210c0cb7b3a98963ca
 # Remove this line to create a well-formed Fossil manifest.
index b99a890c23aa4e7e707393a52b22a8a3df11b333..34db1cbfb6954ec2eb25419fabcbdfab4a4da895 100644 (file)
@@ -1 +1 @@
-cdd1610c44876623e629bb8e5779ea689e6d23c545552b088eca63ad2d1cf8da
\ No newline at end of file
+2f9fba931d9f80b3d5dffb175180098756bccc6a8f665d7aaf8826970ab60d72
\ No newline at end of file
index 472efa211052a58321f757f7bf58bd1f8b9e610d..3c98ba96f5ed9cd8ed5acaeb7cb3dedee6dee67c 100644 (file)
@@ -984,6 +984,7 @@ static void nullifFunc(
   UNUSED_PARAMETER(NotUsed);
   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
     sqlite3_result_value(context, argv[0]);
+    sqlite3_result_subtype(context, sqlite3_value_subtype(argv[0]));
   }
 }
 
@@ -2608,11 +2609,11 @@ void sqlite3RegisterBuiltinFunctions(void){
     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
     FUNCTION(trim,               1, 3, 0, trimFunc         ),
     FUNCTION(trim,               2, 3, 0, trimFunc         ),
-    FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
+    FUNCTION2(min,              -1, 0, 1, minmaxFunc, SQLITE_RESULT_SUBTYPE),
     FUNCTION(min,                0, 0, 1, 0                ),
     WAGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
                                  SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ),
-    FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
+    FUNCTION2(max,              -1, 1, 1, minmaxFunc, SQLITE_RESULT_SUBTYPE),
     FUNCTION(max,                0, 1, 1, 0                ),
     WAGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize, minMaxValue, 0,
                                  SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER ),
@@ -2646,7 +2647,7 @@ void sqlite3RegisterBuiltinFunctions(void){
     INLINE_FUNC(ifnull,          2, INLINEFUNC_coalesce, SQLITE_RESULT_SUBTYPE),
     VFUNCTION(random,            0, 0, 0, randomFunc       ),
     VFUNCTION(randomblob,        1, 0, 0, randomBlob       ),
-    FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
+    FUNCTION2(nullif,            2, 0, 1, nullifFunc, SQLITE_RESULT_SUBTYPE),
     DFUNCTION(sqlite_version,    0, 0, 0, versionFunc      ),
     DFUNCTION(sqlite_source_id,  0, 0, 0, sourceidFunc     ),
     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
index e6b3fb6333acdf260ca397b774df16a8c4e02371..3ba59449d55f22e6170fb6643c7dc47171f7d775 100644 (file)
@@ -642,6 +642,30 @@ do_execsql_test indexexpr1-2231 {
   CREATE INDEX t1j ON t1(ifnull(NULL,json(y)));
   SELECT json_insert('{}', '$.a', ifnull(NULL,json(y)))->>'$.a.b' FROM t1;
 } {5}
+do_execsql_test indexexpr1-2240 {
+  DROP INDEX t1j;
+  SELECT json_insert('{}', '$.a', nullif(json(y),8))->>'$.a.b' FROM t1;
+} {5}
+do_execsql_test indexexpr1-2241 {
+  CREATE INDEX t1j ON t1(nullif(json(y),8));
+  SELECT json_insert('{}', '$.a', nullif(json(y),8))->>'$.a.b' FROM t1;
+} {5}
+do_execsql_test indexexpr1-2250 {
+  DROP INDEX t1j;
+  SELECT json_insert('{}', '$.a', min('~',json(y)))->>'$.a.b' FROM t1;
+} {5}
+do_execsql_test indexexpr1-2251 {
+  CREATE INDEX t1j ON t1(min('~',json(y)));
+  SELECT json_insert('{}', '$.a', min('~',json(y)))->>'$.a.b' FROM t1;
+} {5}
+do_execsql_test indexexpr1-2260 {
+  DROP INDEX t1j;
+  SELECT json_insert('{}', '$.a', max('...',json(y)))->>'$.a.b' FROM t1;
+} {5}
+do_execsql_test indexexpr1-2261 {
+  CREATE INDEX t1j ON t1(max('...',json(y)));
+  SELECT json_insert('{}', '$.a', max('...',json(y)))->>'$.a.b' FROM t1;
+} {5}
 
 
 # 2023-11-08 Forum post https://sqlite.org/forum/forumpost/68d284c86b082c3e