diff options
author | drh <drh@noemail.net> | 2017-05-31 00:49:40 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2017-05-31 00:49:40 +0000 |
commit | d03257c1417992a1b62b78f4885100f3faf60bd9 (patch) | |
tree | f21de6d8cec657a543f362f76b12f6122bf0ad11 /src/resolve.c | |
parent | 2ab792e4c0dd5662bcb482c2c6a89961afd1251f (diff) | |
download | sqlite-d03257c1417992a1b62b78f4885100f3faf60bd9.tar.gz sqlite-d03257c1417992a1b62b78f4885100f3faf60bd9.zip |
Size and performance optimizations to sqlite3ResolveExprNames().
FossilOrigin-Name: af8c0fed93c830c50641d95691bb507c31947a15529aba2a88bfaa66b3a3287a
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/resolve.c b/src/resolve.c index aed48260e..f10add124 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1430,16 +1430,7 @@ int sqlite3ResolveExprNames( u16 savedHasAgg; Walker w; - if( pExpr==0 ) return 0; -#if SQLITE_MAX_EXPR_DEPTH>0 - { - Parse *pParse = pNC->pParse; - if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){ - return 1; - } - pParse->nHeight += pExpr->nHeight; - } -#endif + if( pExpr==0 ) return SQLITE_OK; savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg); pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg); w.pParse = pNC->pParse; @@ -1447,18 +1438,21 @@ int sqlite3ResolveExprNames( w.xSelectCallback = resolveSelectStep; w.xSelectCallback2 = 0; w.u.pNC = pNC; +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight += pExpr->nHeight; + if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ + return SQLITE_ERROR; + } +#endif sqlite3WalkExpr(&w, pExpr); #if SQLITE_MAX_EXPR_DEPTH>0 - pNC->pParse->nHeight -= pExpr->nHeight; + w.pParse->nHeight -= pExpr->nHeight; #endif - if( pNC->nErr>0 || w.pParse->nErr>0 ){ - ExprSetProperty(pExpr, EP_Error); - } if( pNC->ncFlags & NC_HasAgg ){ ExprSetProperty(pExpr, EP_Agg); } pNC->ncFlags |= savedHasAgg; - return ExprHasProperty(pExpr, EP_Error); + return pNC->nErr>0 || w.pParse->nErr>0; } /* |