aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <>2023-12-19 13:45:05 +0000
committerdrh <>2023-12-19 13:45:05 +0000
commit3e2ec83e0bad02934b2c024d123f1a293c214a4e (patch)
tree7f3fee8c2c4bffaee6d0846ca9710e87971cc4e3 /src/expr.c
parent9c36095367d40146167b1edf328e791537dca77c (diff)
downloadsqlite-3e2ec83e0bad02934b2c024d123f1a293c214a4e.tar.gz
sqlite-3e2ec83e0bad02934b2c024d123f1a293c214a4e.zip
Ignore COLLATE operators when determining whether the result of a subexpression
should be shallow-copied or deep-copied. FossilOrigin-Name: 34ae36a45e814bed7c8340412c7ef3fc849b82357656d0eb5f0f805e59d846d0
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c
index ebe0721ca..fd462c1c5 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -5326,8 +5326,10 @@ void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
if( inReg!=target ){
u8 op;
- if( ALWAYS(pExpr)
- && (ExprHasProperty(pExpr,EP_Subquery) || pExpr->op==TK_REGISTER)
+ Expr *pX = sqlite3ExprSkipCollateAndLikely(pExpr);
+ testcase( pX!=pExpr );
+ if( ALWAYS(pX)
+ && (ExprHasProperty(pX,EP_Subquery) || pX->op==TK_REGISTER)
){
op = OP_Copy;
}else{