aboutsummaryrefslogtreecommitdiff
path: root/src/select.c
diff options
context:
space:
mode:
authordrh <>2021-01-12 16:26:36 +0000
committerdrh <>2021-01-12 16:26:36 +0000
commitb782e05c64fe1d65678013ee605b231ccc9d70bc (patch)
tree332fd14b13e6656e19866901abf5501857d7cee4 /src/select.c
parentd9cc532a1e06a6cbef17f0b47e1626827de97102 (diff)
parent21d4f5b53a4d758a1a164201fe25c32b20b9c08a (diff)
downloadsqlite-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.c14
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 );
+ }
}
}