aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-03-10 02:57:37 +0000
committerdrh <drh@noemail.net>2020-03-10 02:57:37 +0000
commit088489e8d9ebbcbbbd99093a83bc93bfcd1a39a0 (patch)
treeee3103e1cfec4fdf5e4804187625316544bd4709 /src
parentafa1ecac9b6fba76861dca85b211ca1022f9e378 (diff)
downloadsqlite-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.c3
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);
}
}