diff options
author | drh <drh@noemail.net> | 2008-04-01 03:27:39 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2008-04-01 03:27:39 +0000 |
commit | 2f7794c111fc881d6b9b9a4c752978242c57bdaf (patch) | |
tree | 23fc386eddcc33bdf8e0ca3411e04f93da62232f /src/expr.c | |
parent | aac7b93ea4fde9226057bf8d5b86de39e967cdee (diff) | |
download | sqlite-2f7794c111fc881d6b9b9a4c752978242c57bdaf.tar.gz sqlite-2f7794c111fc881d6b9b9a4c752978242c57bdaf.zip |
More test cases and bug fixes with CSE. (CVS 4948)
FossilOrigin-Name: 7e8156129d6d240fe046bbc4ea269ebe1657e2a1
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/expr.c b/src/expr.c index 5ebc58a9f..03855f11b 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.360 2008/04/01 01:42:41 drh Exp $ +** $Id: expr.c,v 1.361 2008/04/01 03:27:39 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -222,6 +222,10 @@ static int codeCompare( addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1, (void*)p4, P4_COLLSEQ); sqlite3VdbeChangeP5(pParse->pVdbe, p5); + if( p5 & SQLITE_AFF_MASK ){ + sqlite3ExprExpireColumnCacheLines(pParse, in1, in1); + sqlite3ExprExpireColumnCacheLines(pParse, in2, in2); + } return addr; } @@ -1947,8 +1951,9 @@ int sqlite3ExprCodeGetColumn( pParse->aColCache[i].iColumn = iColumn; pParse->aColCache[i].iReg = iReg; i++; - if( i>ArraySize(pParse->aColCache) ) i = 0; + if( i>=ArraySize(pParse->aColCache) ) i = 0; if( i>pParse->nColCache ) pParse->nColCache = i; + pParse->iColCache = i; } return iReg; } @@ -2046,7 +2051,9 @@ int sqlite3ExprWritableRegister(Parse *pParse, int iCurrent, int iTarget){ if( !usedAsColumnCache(pParse, iCurrent, iCurrent) ){ return iCurrent; } - sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, iCurrent, iTarget); + if( iCurrent!=iTarget ){ + sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, iCurrent, iTarget); + } sqlite3ExprExpireColumnCacheLines(pParse, iTarget, iTarget); return iTarget; } |