Diff
Not logged in

Differences From:

File src/sqlite3.c part of check-in [3b76c0474e] - Upgrade SQLite to version 3.6.14.1. by drh on 2009-05-18 18:54:00. [view]

To:

File src/sqlite3.c part of check-in [d21b90e365] - Update the built-in SQLite version to 3.6.14.2. by drh on 2009-05-25 14:25:47. [view]

@@ -1,7 +1,7 @@
 /******************************************************************************
 ** This file is an amalgamation of many separate C source files from SQLite
-** version 3.6.14.1.  By combining all the individual C code files into this
+** version 3.6.14.2.  By combining all the individual C code files into this
 ** single large file, the entire code can be compiled as a one translation
 ** unit.  This allows many compilers to do optimizations that would not be
 ** possible if the files were compiled separately.  Performance improvements
 ** of 5% are more are commonly seen when SQLite is compiled as a single
@@ -16,9 +16,9 @@
 ** programming language.  The code for the "sqlite3" command-line shell
 ** is also in a separate file.  This file contains only code for the core
 ** SQLite library.
 **
-** This amalgamation was generated on 2009-05-18 17:12:46 UTC.
+** This amalgamation was generated on 2009-05-25 12:34:31 UTC.
 */
 #define SQLITE_CORE 1
 #define SQLITE_AMALGAMATION 1
 #ifndef SQLITE_PRIVATE
@@ -600,9 +600,9 @@
 ** See also: [sqlite3_libversion()] and [sqlite3_libversion_number()].
 **
 ** Requirements: [H10011] [H10014]
 */
-#define SQLITE_VERSION         "3.6.14.1"
+#define SQLITE_VERSION         "3.6.14.2"
 #define SQLITE_VERSION_NUMBER  3006014
 
 /*
 ** CAPI3REF: Run-Time Library Version Numbers {H10020} <S60100>
@@ -57682,9 +57682,9 @@
 *************************************************************************
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.432 2009/05/06 18:57:10 shane Exp $
+** $Id: expr.c,v 1.432.2.1 2009/05/25 12:02:24 drh Exp $
 */
 
 /*
 ** Return the 'affinity' of the expression pExpr if any.
@@ -59472,8 +59472,24 @@
   }
 }
 
 /*
+** When a cached column is reused, make sure that its register is
+** no longer available as a temp register.  ticket #3879:  that same
+** register might be in the cache in multiple places, so be sure to
+** get them all.
+*/
+static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
+  int i;
+  struct yColCache *p;
+  for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
+    if( p->iReg==iReg ){
+      p->tempReg = 0;
+    }
+  }
+}
+
+/*
 ** Generate code that will extract the iColumn-th column from
 ** table pTab and store the column value in a register.  An effort
 ** is made to store the column value in register iReg, but this is
 ** not guaranteed.  The location of the column value is returned.
@@ -59506,9 +59522,9 @@
       sqlite3VdbeAddOp0(v, OP_Noop);
       VdbeComment((v, "OPT: tab%d.col%d -> r%d", iTable, iColumn, p->iReg));
 #endif
       p->lru = pParse->iCacheCnt++;
-      p->tempReg = 0;  /* This pins the register, but also leaks it */
+      sqlite3ExprCachePinRegister(pParse, p->iReg);
       return p->iReg;
     }
   }
   assert( v!=0 );