From: drh Date: Thu, 26 Jun 2008 20:06:06 +0000 (+0000) Subject: Avoid generating unnecessary SCopy instructions with the RHS of an IN X-Git-Tag: version-3.6.10~861 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ecc31805da8f8a9d306516ec634d7a0853440d3b;p=thirdparty%2Fsqlite.git Avoid generating unnecessary SCopy instructions with the RHS of an IN operator is a list of values. (CVS 5316) FossilOrigin-Name: ec80474b1c157a29fb6978dd5575c396c57973b3 --- diff --git a/manifest b/manifest index e46a909cec..f0aa52333e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Documentation\supdates\sin\ssqlite.h.in.\sNo\schanges\sto\scode.\s(CVS\s5315) -D 2008-06-26T18:16:06 +C Avoid\sgenerating\sunnecessary\sSCopy\sinstructions\swith\sthe\sRHS\sof\san\sIN\noperator\sis\sa\slist\sof\svalues.\s(CVS\s5316) +D 2008-06-26T20:06:07 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 325dfac0a0dd1cb4d975f1ace6453157892e6042 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -103,7 +103,7 @@ F src/callback.c 3ba98ae46f60aa7c2c40eac7d18fe5ba9b706b83 F src/complete.c cb14e06dbe79dee031031f0d9e686ff306afe07c F src/date.c e841168e5520bbbb2a1cbcdce7531d8b23017b4d F src/delete.c d3fc5987f2eb88f7b9549d58a5dfea079a83fe8b -F src/expr.c edcc8a30453f63fe9eab3a3d714589f44f875d8d +F src/expr.c 557faa5ac7183016032077f34aa53c0fe759abe5 F src/fault.c 3638519d1e0b82bccfafcb9f5ff491918b28f8e1 F src/func.c 1e7d9569570134ac0771a00382d9d4b41c4aa052 F src/global.c 2304cfa3288763bd2fed10caf8c6fbaa2b383f4e @@ -594,7 +594,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P d45a97be71fa61ab4a692bd807ab762130f7f5b9 -R 3dedfcadac16cf05d22a150cef869c0f +P 168fd6f83e2c837e91d02fa49fff3fe2f9538928 +R e1a92aea430aad3339e25549f0582b1d U drh -Z 3f2fbb3accba9d608a70c4032d103e16 +Z 0ed860dc736798983c144766ce199486 diff --git a/manifest.uuid b/manifest.uuid index 1cd6ad9c1d..4052077d91 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -168fd6f83e2c837e91d02fa49fff3fe2f9538928 \ No newline at end of file +ec80474b1c157a29fb6978dd5575c396c57973b3 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 96836ed682..58a714916c 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 @@ -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);