]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Instead of adding a branch to OP_IdxInsert, use an extra OP_IfNull when updating...
authordan <Dan Kennedy>
Wed, 22 Apr 2026 18:19:24 +0000 (18:19 +0000)
committerdan <Dan Kennedy>
Wed, 22 Apr 2026 18:19:24 +0000 (18:19 +0000)
FossilOrigin-Name: 5112f96cb1428693614b91bcca78326fccf7289e395a920339676ceeba871e3f

manifest
manifest.uuid
src/insert.c
src/vdbe.c

index 52f73ab06b0245bf879ab013fd2df19f1824e39c..fbb9b5acf87ef4e4ce1b4ab2ab210f537b92c618 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enable\sthe\soptimization\son\sthis\sbranch\sfor\sindexes\son\sexpressions\sonly.
-D 2026-04-22T17:50:50.730
+C Instead\sof\sadding\sa\sbranch\sto\sOP_IdxInsert,\suse\san\sextra\sOP_IfNull\swhen\supdating\sindexes\son\sexpressions.
+D 2026-04-22T18:19:24.834
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -695,7 +695,7 @@ F src/hash.c 03c8c0f4be9e8bcb6de65aa26d34a61d48a9430747084a69f9469fbb00ea52ca
 F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
 F src/hwtime.h 21c2cf1f736e7b97502c3674d0c386db3f06870d6f10d0cf8174e2a4b8cb726e
 F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
-F src/insert.c dfd311b0ac2d4f6359e62013db67799757f4d2cc56cca5c10f4888acfbbfa3fd
+F src/insert.c 77aa90e7ddbebf131c5de504854b5a61c25b11d53580649fb375b23752793651
 F src/json.c 5027b856cd9b621dc9ba66b211e21a440ccdc63cefdefb44c51e7d3ac550d1a4
 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
 F src/loadext.c 78d5b06f18996ffa1203129b28fea043f63a87a4117539678f1d761c30b4ff65
@@ -802,7 +802,7 @@ F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
 F src/utf.c 7267c3fb9e2467020507601af3354c2446c61f444387e094c779dccd5ca62165
 F src/util.c 377af5da226519a0f374dc3c6d408c9d303a92943e3ae5986432c7d52e6679a2
 F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
-F src/vdbe.c 17630764eb69332cf42f4c1726df5037188a6fcd6748f536dbec1cc2cc392c4a
+F src/vdbe.c f712fdd7ccd92909505bcc28337253a9513fe1efd1843e1a6979fc27cac6ea22
 F src/vdbe.h 70e862ac8a11b590f8c1eaac17a0078429d42bc4ea3f757a9af0f451dd966a71
 F src/vdbeInt.h c31ba4dc8d280c2b1dc89c6fcee68f2555e3813ab34279552c20b964c0e338b1
 F src/vdbeapi.c 6cdcbe5c7afa754c998e73d2d5d2805556268362914b952811bdfb9c78a37cf1
@@ -2203,8 +2203,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 0fb6ca8e22f355838a02223dd24b34c0669a6cc0b7ac80931c721db72cf5c1c8
-R 7af78ac5b7fa26cb04f29a37faac6c06
+P 3576b6930436b3149c5033476f70518e9b4adeaeec2538a68b7dc599eb854c47
+R b8a2538a20428510beaafc7bf9bc4782
 U dan
-Z d4134b8fef7b68b28ed810606a3d8b86
+Z 04d4e5d468d41e61fb06710b6120ac96
 # Remove this line to create a well-formed Fossil manifest.
index a0a6d0a1397168c23967be5350ef45c8b4016f51..03224c183171666993b6a763eb1db19207395997 100644 (file)
@@ -1 +1 @@
-3576b6930436b3149c5033476f70518e9b4adeaeec2538a68b7dc599eb854c47
+5112f96cb1428693614b91bcca78326fccf7289e395a920339676ceeba871e3f
index f0c56a7a8f4a233c2d1086059501059a5ea39f8e..56106039df5ed886066a650cf35e52107d6bdeb8 100644 (file)
@@ -2809,7 +2809,10 @@ void sqlite3CompleteInsertion(
          || pIdx->pNext==0
          || pIdx->pNext->onError==OE_Replace );
     if( aRegIdx[i]==0 ) continue;
-    if( pIdx->pPartIdxWhere ){
+    if( pIdx->pPartIdxWhere || (update_flags && pIdx->bHasExpr) ){
+      /* If this is a partial index, or an UPDATE of an index on an
+      ** expression, then the record register may be set to NULL to indicate
+      ** that no record should be inserted into this index. */
       sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2);
       VdbeCoverage(v);
     }
index 57f7e6356f25d0f4432a51ede3c31b35657d0871..47e3324b0e14a943aeaebb4564ae045ea7c15c23 100644 (file)
@@ -6610,7 +6610,6 @@ case OP_IdxInsert: {        /* in2 */
   assert( pC!=0 );
   assert( !isSorter(pC) );
   pIn2 = &aMem[pOp->p2];
-  if( (pIn2->flags & MEM_Null) && (pOp->p5 & OPFLAG_PREFORMAT)==0 ) break;
   assert( (pIn2->flags & MEM_Blob) || (pOp->p5 & OPFLAG_PREFORMAT) );
   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
   assert( pC->eCurType==CURTYPE_BTREE );