mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Change the name of the VdbeMemRelease() macro to VdbeMemReleaseExtern() to
more accurately reflect what it does. Performance enhancement to the sqlite3VdbeMemRelease() function. FossilOrigin-Name: 3ca5846da7da5e08192a4c96288197be3b7ab6f7
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C The\ssqlite3VdbeChangeEncoding()\sroutine\sgoes\sabout\s3x\sfaster\sif\sthe\nsqlite3VdbeMemTranslate()\ssubroutine\sis\snot\sinlined.
|
C Change\sthe\sname\sof\sthe\sVdbeMemRelease()\smacro\sto\sVdbeMemReleaseExtern()\sto\nmore\saccurately\sreflect\swhat\sit\sdoes.\s\sPerformance\senhancement\sto\sthe\nsqlite3VdbeMemRelease()\sfunction.
|
||||||
D 2014-08-24T02:53:23.646
|
D 2014-08-25T11:20:27.189
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
|
F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -284,13 +284,13 @@ F src/update.c ea336ce7b8b3fc5e316ba8f082e6445babf81059
|
|||||||
F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359
|
F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359
|
||||||
F src/util.c 068dcd26354a3898ccc64ad5c4bdb95a7a15d33a
|
F src/util.c 068dcd26354a3898ccc64ad5c4bdb95a7a15d33a
|
||||||
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
|
||||||
F src/vdbe.c 52ee5d589cbb171a8b096f210b69deb4a33c4369
|
F src/vdbe.c 0fe4b47668b36a50bd9f7fd7b15cbeeb69d54b37
|
||||||
F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8
|
F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8
|
||||||
F src/vdbeInt.h 764a055bc9a3e61a30ba37cd4c1826f62bcf8759
|
F src/vdbeInt.h 20056cd59ff93ef9eb91009ece726d65dd7ed322
|
||||||
F src/vdbeapi.c cda974083d7597f807640d344ffcf76d872201ce
|
F src/vdbeapi.c cda974083d7597f807640d344ffcf76d872201ce
|
||||||
F src/vdbeaux.c dba006f67c9fd1b1d07ee7fb0fb38aa1905161d1
|
F src/vdbeaux.c dba006f67c9fd1b1d07ee7fb0fb38aa1905161d1
|
||||||
F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4
|
F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4
|
||||||
F src/vdbemem.c f2e162888521a9af35d608ac4c13db4991dfb417
|
F src/vdbemem.c 4c9d686da474957d2e78834f13cc5f141fe6b87f
|
||||||
F src/vdbesort.c f7f5563bf7d4695ca8f3203f3bf9de96d04ed0b3
|
F src/vdbesort.c f7f5563bf7d4695ca8f3203f3bf9de96d04ed0b3
|
||||||
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
|
||||||
F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
|
F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
|
||||||
@@ -1188,7 +1188,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P c63311e2f3344363a5ed99838fb5850004eaee30
|
P 0c7e1b875a14ff9d71af7bb125a0272a23d57353
|
||||||
R 195c0a9c31ce9f43b0d460b5ca896167
|
R 3449942ddb4a22bfe8e7f1684bd27e8b
|
||||||
U drh
|
U drh
|
||||||
Z 7685d4da1bf506f63008f6a3d5e2d0bd
|
Z c7041d8c52f909d88b499b4a5f3227aa
|
||||||
|
@@ -1 +1 @@
|
|||||||
0c7e1b875a14ff9d71af7bb125a0272a23d57353
|
3ca5846da7da5e08192a4c96288197be3b7ab6f7
|
@@ -640,7 +640,7 @@ int sqlite3VdbeExec(
|
|||||||
assert( pOp->p2<=(p->nMem-p->nCursor) );
|
assert( pOp->p2<=(p->nMem-p->nCursor) );
|
||||||
pOut = &aMem[pOp->p2];
|
pOut = &aMem[pOp->p2];
|
||||||
memAboutToChange(p, pOut);
|
memAboutToChange(p, pOut);
|
||||||
VdbeMemRelease(pOut);
|
VdbeMemReleaseExtern(pOut);
|
||||||
pOut->flags = MEM_Int;
|
pOut->flags = MEM_Int;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1079,7 +1079,7 @@ case OP_Null: { /* out2-prerelease */
|
|||||||
while( cnt>0 ){
|
while( cnt>0 ){
|
||||||
pOut++;
|
pOut++;
|
||||||
memAboutToChange(p, pOut);
|
memAboutToChange(p, pOut);
|
||||||
VdbeMemRelease(pOut);
|
VdbeMemReleaseExtern(pOut);
|
||||||
pOut->flags = nullFlag;
|
pOut->flags = nullFlag;
|
||||||
cnt--;
|
cnt--;
|
||||||
}
|
}
|
||||||
@@ -1165,7 +1165,7 @@ case OP_Move: {
|
|||||||
assert( pIn1<=&aMem[(p->nMem-p->nCursor)] );
|
assert( pIn1<=&aMem[(p->nMem-p->nCursor)] );
|
||||||
assert( memIsValid(pIn1) );
|
assert( memIsValid(pIn1) );
|
||||||
memAboutToChange(p, pOut);
|
memAboutToChange(p, pOut);
|
||||||
VdbeMemRelease(pOut);
|
VdbeMemReleaseExtern(pOut);
|
||||||
zMalloc = pOut->zMalloc;
|
zMalloc = pOut->zMalloc;
|
||||||
memcpy(pOut, pIn1, sizeof(Mem));
|
memcpy(pOut, pIn1, sizeof(Mem));
|
||||||
#ifdef SQLITE_DEBUG
|
#ifdef SQLITE_DEBUG
|
||||||
@@ -2538,7 +2538,7 @@ case OP_Column: {
|
|||||||
if( pC->szRow>=aOffset[p2+1] ){
|
if( pC->szRow>=aOffset[p2+1] ){
|
||||||
/* This is the common case where the desired content fits on the original
|
/* This is the common case where the desired content fits on the original
|
||||||
** page - where the content is not on an overflow page */
|
** page - where the content is not on an overflow page */
|
||||||
VdbeMemRelease(pDest);
|
VdbeMemReleaseExtern(pDest);
|
||||||
sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
|
sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
|
||||||
}else{
|
}else{
|
||||||
/* This branch happens only when content is on overflow pages */
|
/* This branch happens only when content is on overflow pages */
|
||||||
|
@@ -430,7 +430,7 @@ void sqlite3VdbeMemRelease(Mem *p);
|
|||||||
void sqlite3VdbeMemReleaseExternal(Mem *p);
|
void sqlite3VdbeMemReleaseExternal(Mem *p);
|
||||||
#define VdbeMemDynamic(X) \
|
#define VdbeMemDynamic(X) \
|
||||||
(((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0)
|
(((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0)
|
||||||
#define VdbeMemRelease(X) \
|
#define VdbeMemReleaseExtern(X) \
|
||||||
if( VdbeMemDynamic(X) ) sqlite3VdbeMemReleaseExternal(X);
|
if( VdbeMemDynamic(X) ) sqlite3VdbeMemReleaseExternal(X);
|
||||||
int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
|
int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
|
||||||
const char *sqlite3OpcodeName(int);
|
const char *sqlite3OpcodeName(int);
|
||||||
|
@@ -121,7 +121,7 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
|
|||||||
pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
|
pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
|
||||||
}
|
}
|
||||||
if( pMem->zMalloc==0 ){
|
if( pMem->zMalloc==0 ){
|
||||||
VdbeMemRelease(pMem);
|
VdbeMemReleaseExtern(pMem);
|
||||||
pMem->z = 0;
|
pMem->z = 0;
|
||||||
pMem->flags = MEM_Null;
|
pMem->flags = MEM_Null;
|
||||||
return SQLITE_NOMEM;
|
return SQLITE_NOMEM;
|
||||||
@@ -300,6 +300,9 @@ int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
|
|||||||
** If the memory cell contains a string value that must be freed by
|
** If the memory cell contains a string value that must be freed by
|
||||||
** invoking an external callback, free it now. Calling this function
|
** invoking an external callback, free it now. Calling this function
|
||||||
** does not free any Mem.zMalloc buffer.
|
** does not free any Mem.zMalloc buffer.
|
||||||
|
**
|
||||||
|
** The VdbeMemReleaseExtern() macro invokes this routine if only if there
|
||||||
|
** is work for this routine to do.
|
||||||
*/
|
*/
|
||||||
void sqlite3VdbeMemReleaseExternal(Mem *p){
|
void sqlite3VdbeMemReleaseExternal(Mem *p){
|
||||||
assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
|
assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
|
||||||
@@ -319,6 +322,25 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Release memory held by the Mem p, both external memory cleared
|
||||||
|
** by p->xDel and memory in p->zMalloc.
|
||||||
|
**
|
||||||
|
** This is a helper routine invoked by sqlite3VdbeMemRelease() in
|
||||||
|
** the uncommon case when there really is memory in p that is
|
||||||
|
** need of freeing.
|
||||||
|
*/
|
||||||
|
static SQLITE_NOINLINE void vdbeMemRelease(Mem *p){
|
||||||
|
if( VdbeMemDynamic(p) ){
|
||||||
|
sqlite3VdbeMemReleaseExternal(p);
|
||||||
|
}
|
||||||
|
if( p->zMalloc ){
|
||||||
|
sqlite3DbFree(p->db, p->zMalloc);
|
||||||
|
p->zMalloc = 0;
|
||||||
|
}
|
||||||
|
p->z = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Release any memory held by the Mem. This may leave the Mem in an
|
** Release any memory held by the Mem. This may leave the Mem in an
|
||||||
** inconsistent state, for example with (Mem.z==0) and
|
** inconsistent state, for example with (Mem.z==0) and
|
||||||
@@ -326,13 +348,12 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
|
|||||||
*/
|
*/
|
||||||
void sqlite3VdbeMemRelease(Mem *p){
|
void sqlite3VdbeMemRelease(Mem *p){
|
||||||
assert( sqlite3VdbeCheckMemInvariants(p) );
|
assert( sqlite3VdbeCheckMemInvariants(p) );
|
||||||
VdbeMemRelease(p);
|
if( VdbeMemDynamic(p) || p->zMalloc ){
|
||||||
if( p->zMalloc ){
|
vdbeMemRelease(p);
|
||||||
sqlite3DbFree(p->db, p->zMalloc);
|
}else{
|
||||||
p->zMalloc = 0;
|
p->z = 0;
|
||||||
}
|
}
|
||||||
p->z = 0;
|
assert( p->xDel==0 );
|
||||||
assert( p->xDel==0 ); /* Zeroed by VdbeMemRelease() above */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -638,7 +659,7 @@ void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
|
|||||||
*/
|
*/
|
||||||
void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
|
void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
|
||||||
assert( (pFrom->flags & MEM_RowSet)==0 );
|
assert( (pFrom->flags & MEM_RowSet)==0 );
|
||||||
VdbeMemRelease(pTo);
|
VdbeMemReleaseExtern(pTo);
|
||||||
memcpy(pTo, pFrom, MEMCELLSIZE);
|
memcpy(pTo, pFrom, MEMCELLSIZE);
|
||||||
pTo->xDel = 0;
|
pTo->xDel = 0;
|
||||||
if( (pFrom->flags&MEM_Static)==0 ){
|
if( (pFrom->flags&MEM_Static)==0 ){
|
||||||
@@ -656,7 +677,7 @@ int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
|
|
||||||
assert( (pFrom->flags & MEM_RowSet)==0 );
|
assert( (pFrom->flags & MEM_RowSet)==0 );
|
||||||
VdbeMemRelease(pTo);
|
VdbeMemReleaseExtern(pTo);
|
||||||
memcpy(pTo, pFrom, MEMCELLSIZE);
|
memcpy(pTo, pFrom, MEMCELLSIZE);
|
||||||
pTo->flags &= ~MEM_Dyn;
|
pTo->flags &= ~MEM_Dyn;
|
||||||
pTo->xDel = 0;
|
pTo->xDel = 0;
|
||||||
|
Reference in New Issue
Block a user