mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-21 09:00:59 +03:00
When generating code for partial indexes, be sure not to modify the
index condition expression in the schema. FossilOrigin-Name: e63d01c69c3e50f49ee3022a519c4f3e91f00520
This commit is contained in:
15
src/expr.c
15
src/expr.c
@@ -3702,6 +3702,21 @@ void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
|
||||
sqlite3ReleaseTempReg(pParse, regFree2);
|
||||
}
|
||||
|
||||
/*
|
||||
** Like sqlite3ExprIfFalse() except that a copy is made of pExpr before
|
||||
** code generation, and that copy is deleted after code generation. This
|
||||
** ensures that the original pExpr is unchanged.
|
||||
*/
|
||||
void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,int jumpIfNull){
|
||||
sqlite3 *db = pParse->db;
|
||||
Expr *pCopy = sqlite3ExprDup(db, pExpr, 0);
|
||||
if( db->mallocFailed==0 ){
|
||||
sqlite3ExprIfFalse(pParse, pCopy, dest, jumpIfNull);
|
||||
}
|
||||
sqlite3ExprDelete(db, pCopy);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Do a deep comparison of two expression trees. Return 0 if the two
|
||||
** expressions are completely identical. Return 1 if they differ only
|
||||
|
||||
Reference in New Issue
Block a user