diff options
author | drh <drh@noemail.net> | 2020-03-10 02:57:37 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-03-10 02:57:37 +0000 |
commit | 088489e8d9ebbcbbbd99093a83bc93bfcd1a39a0 (patch) | |
tree | ee3103e1cfec4fdf5e4804187625316544bd4709 /src | |
parent | afa1ecac9b6fba76861dca85b211ca1022f9e378 (diff) | |
download | sqlite-088489e8d9ebbcbbbd99093a83bc93bfcd1a39a0.tar.gz sqlite-088489e8d9ebbcbbbd99093a83bc93bfcd1a39a0.zip |
The sqlite3ExprCodeFactorable() routine should make a copy of non-factorable
expressions, as they might be coming from a DEFAULT or generated column
in a table constraint.
FossilOrigin-Name: a2d6f108c5d07559b125823a04c9cb072c80be80d7913097891a6192c7e1e225
Diffstat (limited to 'src')
-rw-r--r-- | src/expr.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/expr.c b/src/expr.c index 8b939de24..01cc37cc0 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2850,6 +2850,7 @@ void sqlite3CodeRhsOfIN( /* Begin coding the subroutine */ ExprSetProperty(pExpr, EP_Subrtn); + assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); pExpr->y.sub.regReturn = ++pParse->nMem; pExpr->y.sub.iAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pExpr->y.sub.regReturn) + 1; @@ -4604,7 +4605,7 @@ void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){ sqlite3ExprCodeAtInit(pParse, pExpr, target); }else{ - sqlite3ExprCode(pParse, pExpr, target); + sqlite3ExprCodeCopy(pParse, pExpr, target); } } |