diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/select.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/select.c b/src/select.c index 5685eeaad..589c8532d 100644 --- a/src/select.c +++ b/src/select.c @@ -4415,6 +4415,7 @@ static int flattenSubquery( typedef struct WhereConst WhereConst; struct WhereConst { Parse *pParse; /* Parsing context */ + u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ int nConst; /* Number for COLUMN=CONSTANT terms */ int nChng; /* Number of times a constant is propagated */ int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ @@ -4514,6 +4515,7 @@ static int propagateConstantExprRewriteOne( int bIgnoreAffBlob ){ int i; + if( pConst->pOomFault[0] ) return WRC_Prune; if( pExpr->op!=TK_COLUMN ) return WRC_Continue; if( ExprHasProperty(pExpr, EP_FixedCol|EP_FromJoin) ){ testcase( ExprHasProperty(pExpr, EP_FixedCol) ); @@ -4534,6 +4536,7 @@ static int propagateConstantExprRewriteOne( ExprSetProperty(pExpr, EP_FixedCol); assert( pExpr->pLeft==0 ); pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0); + if( pConst->pParse->db->mallocFailed ) return WRC_Prune; break; } return WRC_Prune; @@ -4566,6 +4569,7 @@ static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ || pExpr->op==TK_IS ){ propagateConstantExprRewriteOne(pConst, pExpr->pLeft, 0); + if( pConst->pOomFault[0] ) return WRC_Prune; if( sqlite3ExprAffinity(pExpr->pLeft)!=SQLITE_AFF_TEXT ){ propagateConstantExprRewriteOne(pConst, pExpr->pRight, 0); } @@ -4633,6 +4637,7 @@ static int propagateConstants( Walker w; int nChng = 0; x.pParse = pParse; + x.pOomFault = &pParse->db->mallocFailed; do{ x.nConst = 0; x.nChng = 0; |