]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid generating unnecessary SCopy instructions with the RHS of an IN
authordrh <drh@noemail.net>
Thu, 26 Jun 2008 20:06:06 +0000 (20:06 +0000)
committerdrh <drh@noemail.net>
Thu, 26 Jun 2008 20:06:06 +0000 (20:06 +0000)
operator is a list of values. (CVS 5316)

FossilOrigin-Name: ec80474b1c157a29fb6978dd5575c396c57973b3

manifest
manifest.uuid
src/expr.c

index e46a909cec49cfec6eba72ed48116e9aa471bf70..f0aa52333ecdb8fc58ffd4de07723e38d8d5b07d 100644 (file)
--- 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
index 1cd6ad9c1dbdd08525f71bcdd97abb7b5983ff9f..4052077d9133abaff220e67b9e7486090c1a12da 100644 (file)
@@ -1 +1 @@
-168fd6f83e2c837e91d02fa49fff3fe2f9538928
\ No newline at end of file
+ec80474b1c157a29fb6978dd5575c396c57973b3
\ No newline at end of file
index 96836ed682fd54e71301ae1f92e7753baabe5a94..58a714916c3f118bc864d24410bfbe484b0b03d8 100644 (file)
@@ -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);