diff options
author | drh <> | 2021-01-12 16:26:36 +0000 |
---|---|---|
committer | drh <> | 2021-01-12 16:26:36 +0000 |
commit | b782e05c64fe1d65678013ee605b231ccc9d70bc (patch) | |
tree | 332fd14b13e6656e19866901abf5501857d7cee4 /src/select.c | |
parent | d9cc532a1e06a6cbef17f0b47e1626827de97102 (diff) | |
parent | 21d4f5b53a4d758a1a164201fe25c32b20b9c08a (diff) | |
download | sqlite-b782e05c64fe1d65678013ee605b231ccc9d70bc.tar.gz sqlite-b782e05c64fe1d65678013ee605b231ccc9d70bc.zip |
Merge the ParseCleanup enhancement to trunk.
FossilOrigin-Name: 35824c1bcbd89ae4a94acfbe511bfbd888c418b981819e72bc9a991fc82d136c
Diffstat (limited to 'src/select.c')
-rw-r--r-- | src/select.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/select.c b/src/select.c index 407a6a4b2..c4d17810e 100644 --- a/src/select.c +++ b/src/select.c @@ -4140,8 +4140,10 @@ static int flattenSubquery( Table *pTabToDel = pSubitem->pTab; if( pTabToDel->nTabRef==1 ){ Parse *pToplevel = sqlite3ParseToplevel(pParse); - pTabToDel->pNextZombie = pToplevel->pZombieTab; - pToplevel->pZombieTab = pTabToDel; + sqlite3ParserAddCleanup(pToplevel, + (void(*)(sqlite3*,void*))sqlite3DeleteTable, + pTabToDel); + testcase( pToplevel->earlyCleanup ); }else{ pTabToDel->nTabRef--; } @@ -4856,12 +4858,16 @@ static struct Cte *searchWith( ** statement with which it is associated. */ void sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ - assert( bFree==0 || (pParse->pWith==0 && pParse->pWithToFree==0) ); if( pWith ){ assert( pParse->pWith!=pWith ); pWith->pOuter = pParse->pWith; pParse->pWith = pWith; - if( bFree ) pParse->pWithToFree = pWith; + if( bFree ){ + sqlite3ParserAddCleanup(pParse, + (void(*)(sqlite3*,void*))sqlite3WithDelete, + pWith); + testcase( pParse->earlyCleanup ); + } } } |