diff options
author | drh <drh@noemail.net> | 2008-06-26 20:06:06 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2008-06-26 20:06:06 +0000 |
commit | ecc31805da8f8a9d306516ec634d7a0853440d3b (patch) | |
tree | 35d6082b1ddc126e5867fd99e9d82b11da0d562e /src/expr.c | |
parent | 4ead1482d849a5da5dcbaa6387e24cf8deeb16f8 (diff) | |
download | sqlite-ecc31805da8f8a9d306516ec634d7a0853440d3b.tar.gz sqlite-ecc31805da8f8a9d306516ec634d7a0853440d3b.zip |
Avoid generating unnecessary SCopy instructions with the RHS of an IN
operator is a list of values. (CVS 5316)
FossilOrigin-Name: ec80474b1c157a29fb6978dd5575c396c57973b3
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/expr.c b/src/expr.c index 96836ed68..58a714916 100644 --- a/src/expr.c +++ b/src/expr.c @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.377 2008/06/26 18:04:03 danielk1977 Exp $ +** $Id: expr.c,v 1.378 2008/06/26 20:06:07 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -1907,7 +1907,7 @@ void sqlite3CodeSubselect(Parse *pParse, Expr *pExpr, int rMayHaveNull){ int i; ExprList *pList = pExpr->pList; struct ExprList_item *pItem; - int r1, r2; + int r1, r2, r3; if( !affinity ){ affinity = SQLITE_AFF_NONE; @@ -1932,10 +1932,10 @@ void sqlite3CodeSubselect(Parse *pParse, Expr *pExpr, int rMayHaveNull){ /* Evaluate the expression and insert it into the temp table */ pParse->disableColCache++; - sqlite3ExprCode(pParse, pE2, r1); + r3 = sqlite3ExprCodeTarget(pParse, pE2, r1); assert( pParse->disableColCache>0 ); pParse->disableColCache--; - sqlite3VdbeAddOp4(v, OP_MakeRecord, r1, 1, r2, &affinity, 1); + sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1); sqlite3ExprCacheAffinityChange(pParse, r1, 1); sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2); } @@ -2646,7 +2646,7 @@ int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){ j3 = sqlite3VdbeAddOp1(v, OP_NotNull, rMayHaveNull); sqlite3VdbeAddOp2(v, OP_Null, 0, rNotFound); sqlite3VdbeAddOp2(v, OP_Integer, 1, rMayHaveNull); - sqlite3VdbeAddOp4(v, OP_MakeRecord, rNotFound, 1, r2, 0, 1); + sqlite3VdbeAddOp4(v, OP_MakeRecord, rNotFound, 1, r2, 0, 1); j4 = sqlite3VdbeAddOp3(v, OP_Found, pExpr->iTable, 0, r2); sqlite3VdbeAddOp2(v, OP_Integer, 0, rNotFound); sqlite3VdbeJumpHere(v, j4); |