From b9626cfa709ff5f71521035d21efd79b781bb760 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 22 Feb 2016 16:04:31 +0000 Subject: [PATCH] Always use the sqlite3VdbeDeleteAuxdata() routine for clearing auxdata on function parameter, rather than having a separate deleteAuxdataFromFrame() for doing the job for trigger frames. FossilOrigin-Name: 64386fa339adb91439da979d74062f67a6ec68fd --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/vdbe.c | 2 +- src/vdbeInt.h | 2 +- src/vdbeaux.c | 26 +++++--------------------- 5 files changed, 16 insertions(+), 32 deletions(-) diff --git a/manifest b/manifest index 82a5265498..ee22164613 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\screating\sa\smaster\sjournal\sunless\stwo\sor\smore\sdatabases\sin\sthe\ntransaction\scan\sactually\sbenefit\sfrom\sthat\smaster\sjournal. -D 2016-02-22T14:57:38.065 +C Always\suse\sthe\ssqlite3VdbeDeleteAuxdata()\sroutine\sfor\sclearing\sauxdata\son\nfunction\sparameter,\srather\sthan\shaving\sa\sseparate\sdeleteAuxdataFromFrame()\nfor\sdoing\sthe\sjob\sfor\strigger\sframes. +D 2016-02-22T16:04:31.519 F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 28fc4ee02333996d31b3602b39eeb8e609a89ce4 @@ -414,11 +414,11 @@ F src/update.c a7eeeaffad59c6506f01303a071dac11de8269ca F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c F src/util.c 38c06684c922694809ccb988a13562c16890a3d5 F src/vacuum.c feb1eabb20987983d9350cad98299b21fa811f52 -F src/vdbe.c 822e44c1dd859794f8c414e8bae4d96ac1fa774d +F src/vdbe.c 87ae3a5657fefed7875f3eb30e7ababd48013d71 F src/vdbe.h c743791f723049db94f009e3e30958952bc2d512 -F src/vdbeInt.h 581e5bff9a401fabdb917b816503cda7356ec3e1 +F src/vdbeInt.h 84827a809229917fdd3cc05af719dbb61314a5a3 F src/vdbeapi.c 95b1f8e527240a18a9aea41a655b013bf07a7009 -F src/vdbeaux.c 51aaf15e5c29512423429cc0e0477e08f7181514 +F src/vdbeaux.c 9583c5c05a75feb699591c9f24e4750def6537fb F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db F src/vdbemem.c be8381ed6de54eb9cb9dfa802823cdeb5166d855 F src/vdbesort.c 307460bfa4de4d1c3901fcd42089159131e34062 @@ -1429,7 +1429,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh a98af506df552f3b3c0d904f94e4cdc4e1a6d598 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 9230ba6c01f4a550d92a0cbbf36dbe81af14fbfc -R 28c7602ad1de5114aacb14204e4f7226 +P 3ed1890612bd45bd9c72f670d2cbb0b8fbd35d92 +R 087e6cf717ab51d03c5c0e76eb47f593 U drh -Z aad5fe626dac38bb4fd331764966d6a1 +Z ce8b779f1a9ea7c56d4a99bdf5d3c13f diff --git a/manifest.uuid b/manifest.uuid index 4ab1f4a5a5..e6907d43a9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3ed1890612bd45bd9c72f670d2cbb0b8fbd35d92 \ No newline at end of file +64386fa339adb91439da979d74062f67a6ec68fd \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 0cb7f5b24b..3351a44551 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -1679,7 +1679,7 @@ case OP_Function: { sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); rc = pCtx->isError; } - sqlite3VdbeDeleteAuxData(p, pCtx->iOp, pOp->p1); + sqlite3VdbeDeleteAuxData(db, &p->pAuxData, pCtx->iOp, pOp->p1); if( rc ) goto abort_due_to_error; } diff --git a/src/vdbeInt.h b/src/vdbeInt.h index a64f3067dc..710c725e62 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -444,7 +444,7 @@ u8 sqlite3VdbeOneByteSerialTypeLen(u8); u32 sqlite3VdbeSerialType(Mem*, int, u32*); u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32); u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); -void sqlite3VdbeDeleteAuxData(Vdbe*, int, int); +void sqlite3VdbeDeleteAuxData(sqlite3*, AuxData**, int, int); int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); int sqlite3VdbeIdxKeyCompare(sqlite3*,VdbeCursor*,UnpackedRecord*,int*); diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 4f539f0a29..8065c290c1 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -1476,21 +1476,6 @@ static void releaseMemArray(Mem *p, int N){ } } -/* -** Delete the linked list of AuxData structures attached to frame *p. -*/ -static void deleteAuxdataInFrame(sqlite3 *db, VdbeFrame *p){ - AuxData *pAux = p->pAuxData; - while( pAux ){ - AuxData *pNext = pAux->pNext; - if( pAux->xDelete ){ - pAux->xDelete(pAux->pAux); - } - sqlite3DbFree(db, pAux); - pAux = pNext; - } -} - /* ** Delete a VdbeFrame object and its contents. VdbeFrame objects are ** allocated by the OP_Program opcode in sqlite3VdbeExec(). @@ -1503,7 +1488,7 @@ void sqlite3VdbeFrameDelete(VdbeFrame *p){ sqlite3VdbeFreeCursor(p->v, apCsr[i]); } releaseMemArray(aMem, p->nChildMem); - deleteAuxdataInFrame(p->v->db, p); + sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0); sqlite3DbFree(p->v->db, p); } @@ -2032,7 +2017,7 @@ int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ v->db->lastRowid = pFrame->lastRowid; v->nChange = pFrame->nChange; v->db->nChange = pFrame->nDbChange; - sqlite3VdbeDeleteAuxData(v, -1, 0); + sqlite3VdbeDeleteAuxData(v->db, &v->pAuxData, -1, 0); v->pAuxData = pFrame->pAuxData; pFrame->pAuxData = 0; return pFrame->pc; @@ -2066,7 +2051,7 @@ static void closeAllCursors(Vdbe *p){ } /* Delete any auxdata allocations made by the VM */ - if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p, -1, 0); + if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p->db, &p->pAuxData, -1, 0); assert( p->pAuxData==0 ); } @@ -2914,8 +2899,7 @@ int sqlite3VdbeFinalize(Vdbe *p){ ** * the corresponding bit in argument mask is clear (where the first ** function parameter corresponds to bit 0 etc.). */ -void sqlite3VdbeDeleteAuxData(Vdbe *pVdbe, int iOp, int mask){ - AuxData **pp = &pVdbe->pAuxData; +void sqlite3VdbeDeleteAuxData(sqlite3 *db, AuxData **pp, int iOp, int mask){ while( *pp ){ AuxData *pAux = *pp; if( (iOp<0) @@ -2926,7 +2910,7 @@ void sqlite3VdbeDeleteAuxData(Vdbe *pVdbe, int iOp, int mask){ pAux->xDelete(pAux->pAux); } *pp = pAux->pNext; - sqlite3DbFree(pVdbe->db, pAux); + sqlite3DbFree(db, pAux); }else{ pp= &pAux->pNext; }