From: dan Date: Wed, 22 Apr 2026 17:50:50 +0000 (+0000) Subject: Enable the optimization on this branch for indexes on expressions only. X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=57ee077c5ea4a4721d0790ab25706061273243de;p=thirdparty%2Fsqlite.git Enable the optimization on this branch for indexes on expressions only. FossilOrigin-Name: 3576b6930436b3149c5033476f70518e9b4adeaeec2538a68b7dc599eb854c47 --- diff --git a/manifest b/manifest index 0ca2ab9b2f..52f73ab06b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sP3/P5\sconfusion\sin\sthe\scomment\sabove\sOP_IdxDelete. -D 2026-04-22T17:31:19.738 +C Enable\sthe\soptimization\son\sthis\sbranch\sfor\sindexes\son\sexpressions\sonly. +D 2026-04-22T17:50:50.730 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -685,7 +685,7 @@ F src/complete.c f216b970ce99c5a657556cf1f17e7ddd494515d3beb63df426bf59ff43bd3d9 F src/date.c 61e92f1f7e2e88e1cd91e91dc69eb2b2854e7877254470f9fabd776bfac922b8 F src/dbpage.c c9ea81c11727f27e02874611e92773e68e2a90a875ef2404b084564c235fd91f F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c -F src/delete.c dbde329841d214a85b1fa9f4c7ce9f53e4fc3066d2f5d491b3364cd43ec3bc14 +F src/delete.c 59eeca3fb88c29329afc41bb803ee568b120d9dd7470b5f38ab55cc38390b451 F src/expr.c 68400681c5f6e41231d2c85abf6bb432aeeb2e36c4abdf90eb7b78551a5ce0f3 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 931f74cec1dc8038a0217ef340c91ce147dd1bbed08dc40c47ee0ec6edfffb08 @@ -1108,7 +1108,7 @@ F test/expr2.test c27327ae9c017a7ff6280123f67aff496f912da74d78c888926d68b46ec75f F test/exprfault.test da33606d799718e2f8e34efd0e5858884a1ad87f608774c552a7f5517cc27181 F test/exprfault2.test c49e84273898969af5dbc4fe6a3f4335f14639799f343590336c9ddf84425965 F test/expridx1.test b464520126e1d781a7800f8540621c82e8bbc526f089ff8b0b57ffc51feea6b7 -F test/expridx2.test 374fc3a1864e25f724c04a8c2eeec8c7fb14b7306c8de32b63cd6ebf7f7ce64f +F test/expridx2.test 8890d483da880ce86bc5f2f6cd93c27af8a3b99871ed039fe385ee99dbeb9455 F test/extension01.test 5de412c66276105901c370770175003381fdcb0c4da7054fa43cf4a31e0bfa3a F test/external_reader.test 6fdec43eeca23eb32faad1e95a4d1abc402bc8b3db70df12d6fc08a637f4a2b5 F test/extraquick.test cb254400bd42bfb777ff675356aabf3287978f79 @@ -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 7a01caf0d0864a462eb81b7643dcf89048f4ae56a29d762f0cfc38066218504f -R f6ba1f248dd30549b7f4f352031f00e3 +P 0fb6ca8e22f355838a02223dd24b34c0669a6cc0b7ac80931c721db72cf5c1c8 +R 7af78ac5b7fa26cb04f29a37faac6c06 U dan -Z 3bf4f946ff4dbebc9016cd341c7b13d2 +Z d4134b8fef7b68b28ed810606a3d8b86 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index da9b5e746f..a0a6d0a139 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0fb6ca8e22f355838a02223dd24b34c0669a6cc0b7ac80931c721db72cf5c1c8 +3576b6930436b3149c5033476f70518e9b4adeaeec2538a68b7dc599eb854c47 diff --git a/src/delete.c b/src/delete.c index e450c2ad64..0b0b461afc 100644 --- a/src/delete.c +++ b/src/delete.c @@ -915,6 +915,7 @@ void sqlite3GenerateRowIndexDelete( v = pParse->pVdbe; pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); for(i=0, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + int p3 = 0; assert( iIdxCur+i!=iDataCur || pPk==pIdx ); if( aRegIdx!=0 && aRegIdx[i]==0 ) continue; if( pIdx==pPk ) continue; @@ -922,7 +923,10 @@ void sqlite3GenerateRowIndexDelete( VdbeModuleComment((v, "GenRowIdxDel for %s", pIdx->zName)); r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 1, &iPartIdxLabel, pPrior, r1); - sqlite3VdbeAddOp3(v, OP_IdxDelete, iIdxCur+i, r1, aRegIdx ? aRegIdx[i] : 0); + if( pIdx->bHasExpr && aRegIdx ){ + p3 = aRegIdx[i]; + } + sqlite3VdbeAddOp3(v, OP_IdxDelete, iIdxCur+i, r1, p3); sqlite3VdbeChangeP4(v, -1, (const char*)pIdx, P4_INDEX); sqlite3VdbeChangeP5(v, pIdx->uniqNotNull ? pIdx->nKeyCol : pIdx->nColumn); sqlite3ResolvePartIdxLabel(pParse, iPartIdxLabel); diff --git a/test/expridx2.test b/test/expridx2.test index 9cde0478a9..55b234390c 100644 --- a/test/expridx2.test +++ b/test/expridx2.test @@ -27,6 +27,13 @@ do_execsql_test 1.0 { CREATE INDEX t1a ON t1( (b->>'a') ); CREATE INDEX t1b ON t1( (b->>'b') ); CREATE INDEX t1c ON t1( (b->>'c') ); + + CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); + CREATE INDEX t2b ON t2( b ); + INSERT INTO t2 VALUES(1, 1, 1); + INSERT INTO t2 VALUES(2, 2, 2); + INSERT INTO t2 VALUES(3, 3, 3); + INSERT INTO t2 VALUES(4, 4, 4); } {wal} proc nWrite {sql} { @@ -56,5 +63,17 @@ do_test 1.3 { integrity_check 1.4 +do_test 1.5 { + nWrite { UPDATE t2 SET b = b+1, c=c+1 } +} {2} + +do_test 1.6 { + nWrite { UPDATE t2 SET b = b, c=c+1 } +} {2} + +do_test 1.7 { + nWrite { UPDATE t2 SET c=c+1 } +} {1} + finish_test