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 );