diff options
author | dan <dan@noemail.net> | 2009-11-23 14:39:14 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2009-11-23 14:39:14 +0000 |
commit | f6963f99dddf443a25e3e755e480749a89e9344b (patch) | |
tree | 637aece725a0993527411cdcf1876821ebf117f6 /src/resolve.c | |
parent | fc7e7c7c846f5962fb443074bed865dd42440dae (diff) | |
download | sqlite-f6963f99dddf443a25e3e755e480749a89e9344b.tar.gz sqlite-f6963f99dddf443a25e3e755e480749a89e9344b.zip |
Change so that deleting an Expr structure requires only one frame per level in the expression tree, not two.
FossilOrigin-Name: a4380ab326e4b0de29271c824d041193e86b7139
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/resolve.c b/src/resolve.c index b763a809f..d913a24c8 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -87,7 +87,13 @@ static void resolveAlias( pDup->pColl = pExpr->pColl; pDup->flags |= EP_ExpCollate; } - sqlite3ExprClear(db, pExpr); + + /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This + ** prevents ExprDelete() from deleting the Expr structure itself, + ** allowing it to be repopulated by the memcpy() on the following line. + */ + ExprSetProperty(pExpr, EP_Static); + sqlite3ExprDelete(db, pExpr); memcpy(pExpr, pDup, sizeof(*pExpr)); sqlite3DbFree(db, pDup); } |