From: drh <> Date: Wed, 2 Mar 2022 17:50:59 +0000 (+0000) Subject: Faster version of sqlite3VdbeMemRelease(). X-Git-Tag: version-3.39.0~347 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fc854505b402b758da84d2dc5e6c1c93382c56ac;p=thirdparty%2Fsqlite.git Faster version of sqlite3VdbeMemRelease(). FossilOrigin-Name: 86c5fa2f301e4bdb538099f654b70b6ba0e214778cba2c53c53844e5d7ca129f --- diff --git a/manifest b/manifest index 8b54b28a11..31f2d21b13 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Reinstate\sthe\sreleaseMemArray()\sperformance\soptimization\sof\n[bb520293d8c11518]\swith\scorrections. -D 2022-03-02T13:45:22.786 +C Faster\sversion\sof\ssqlite3VdbeMemRelease(). +D 2022-03-02T17:50:59.164 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -624,13 +624,13 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 602fe229f32a96ceccae4f40824129669582096f7c355f53dbac156c9fecef23 F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3 -F src/vdbe.c 4b969ebe6b61f87a90aebf817bc6ebda5075fe56987591091a9bf22556262484 +F src/vdbe.c d2cf2ef62b51aedab4d9df4b9980f70f95c7ab294ff6e56478067630b7c5c5eb F src/vdbe.h a1d0e3b934e835e73edd146f2e7c4eadb711b5c9875c18159a57483fd78e550e -F src/vdbeInt.h 958066f0448930dac697a7d1fc345d1b5fd1bb2d93685860967b94c901a7b244 +F src/vdbeInt.h 8dd91427155a38ec06e9ecbde07e33f21bc02e101625191e7613f883e379a363 F src/vdbeapi.c 1c80efbe51118bbecc7279023e75d18edcfa4b3dc441287e1718ee70ad594f58 -F src/vdbeaux.c 219aef2bb6dc46f6ede76de18e7c388c30bd359ec094e178c362e1b412c56213 +F src/vdbeaux.c 280383a4c7fc567e30266cf72bb5031c252bc4cbc1a80d4e1461d77c4bd01547 F src/vdbeblob.c 5e61ce31aca17db8fb60395407457a8c1c7fb471dde405e0cd675974611dcfcd -F src/vdbemem.c 7737f0b1c480a32b057849c804d2f21d5389649bb8be80f77ad75df700adc9a1 +F src/vdbemem.c ff564b58f49a9e982414c8ecde99e416eff939e7cbb0333aa976610430fd8038 F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823 F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c @@ -1944,8 +1944,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 b218a4b9fe44ffc5cb8d2a2491a5aad217d37b26ccc6b04caf8f28b71bcfe809 -R 5f0e4af1c896fc134e4b58b7139e0944 +P 1291080d118c678072289a2e57a56b73657e9256ae47eafa7853716c8d47392f +R 6a54efa5d5625f9f9ec36bf19fa8fdf3 U drh -Z 49bdd6bb7b5e60b4733d0aedae5472b4 +Z 145582c8165744c10655e15250277f3e # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 5b5f56c2b5..5bbd428d13 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1291080d118c678072289a2e57a56b73657e9256ae47eafa7853716c8d47392f \ No newline at end of file +86c5fa2f301e4bdb538099f654b70b6ba0e214778cba2c53c53844e5d7ca129f \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 82ea6cf6bd..e0668ea9aa 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -6345,7 +6345,7 @@ case OP_IdxGE: { /* jump */ rc = sqlite3VdbeMemFromBtreeZeroOffset(pCur, (u32)nCellKey, &m); if( rc ) goto abort_due_to_error; res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, &r, 0); - sqlite3VdbeMemRelease(&m); + sqlite3VdbeMemReleaseMalloc(&m); } /* End of inlined sqlite3VdbeIdxKeyCompare() */ diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 8ef2795551..45720b6a55 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -602,6 +602,7 @@ int sqlite3VdbeMemCast(Mem*,u8,u8); int sqlite3VdbeMemFromBtree(BtCursor*,u32,u32,Mem*); int sqlite3VdbeMemFromBtreeZeroOffset(BtCursor*,u32,Mem*); void sqlite3VdbeMemRelease(Mem *p); +void sqlite3VdbeMemReleaseMalloc(Mem*p); int sqlite3VdbeMemFinalize(Mem*, FuncDef*); #ifndef SQLITE_OMIT_WINDOWFUNC int sqlite3VdbeMemAggValue(Mem*, Mem*, FuncDef*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 3a110dd28f..f5aa1f0fd2 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -4209,8 +4209,8 @@ static int vdbeCompareMemString( }else{ rc = pColl->xCmp(pColl->pUser, c1.n, v1, c2.n, v2); } - sqlite3VdbeMemRelease(&c1); - sqlite3VdbeMemRelease(&c2); + sqlite3VdbeMemReleaseMalloc(&c1); + sqlite3VdbeMemReleaseMalloc(&c2); return rc; } } @@ -4942,14 +4942,14 @@ int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){ /* Fetch the integer off the end of the index record */ sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v); *rowid = v.u.i; - sqlite3VdbeMemRelease(&m); + sqlite3VdbeMemReleaseMalloc(&m); return SQLITE_OK; /* Jump here if database corruption is detected after m has been ** allocated. Free the m object and return SQLITE_CORRUPT. */ idx_rowid_corruption: testcase( m.szMalloc!=0 ); - sqlite3VdbeMemRelease(&m); + sqlite3VdbeMemReleaseMalloc(&m); return SQLITE_CORRUPT_BKPT; } @@ -4991,7 +4991,7 @@ int sqlite3VdbeIdxKeyCompare( return rc; } *res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, pUnpacked, 0); - sqlite3VdbeMemRelease(&m); + sqlite3VdbeMemReleaseMalloc(&m); return SQLITE_OK; } @@ -5158,7 +5158,7 @@ static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ int i; for(i=0; iaMem[i]; - if( pMem->zMalloc ) sqlite3VdbeMemRelease(pMem); + if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem); } sqlite3DbFreeNN(db, p); } diff --git a/src/vdbemem.c b/src/vdbemem.c index e840f6586c..1795bb7d76 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -555,6 +555,14 @@ void sqlite3VdbeMemRelease(Mem *p){ } } +/* Like sqlite3VdbeMemRelease() but faster for cases where we +** know in advance that the Mem is not MEM_Dyn or MEM_Agg. +*/ +void sqlite3VdbeMemReleaseMalloc(Mem *p){ + assert( !VdbeMemDynamic(p) ); + if( p->szMalloc ) vdbeMemClear(p); +} + /* ** Convert a 64-bit IEEE double into a 64-bit signed integer. ** If the double is out of range of a 64-bit signed integer then