-C Add\sfile\stkt3461.test\swith\sa\sfew\sexamples\sof\sbug\s#3461.\sBecause\sthese\stests\scurrently\sfail\sthey\sare\sdisabled\sfor\snow.\s(CVS\s5840)
-D 2008-10-25T09:35:00
+C Disable\sthe\sresult-set\salias\scache\swhen\son\sconditional\scode\sbranches.\nTicket\s#3461.\s\sThe\scolumn\scache\sand\sresult\sset\salias\scache\smechanisms\sare\nprone\sto\sthis\skind\sof\serror\sand\sneed\sto\sbe\srefactored.\s\sThis\scheck-in\sshould\nbe\sconsidered\sa\stemporary\sfix\sin\sadvance\sof\sa\smore\sgeneral\sredesign\sof\sthe\nwhole\smechanism.\s(CVS\s5841)
+D 2008-10-25T15:03:21
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 3fe17eccd87d385b5adc9766828716cfdd154d6b
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/complete.c cb14e06dbe79dee031031f0d9e686ff306afe07c
F src/date.c 6f4277fa56d8c1b8e70c0bde838c9e99609f5ec0
F src/delete.c d3f2adfdd07e701115a111cc81dca33ed6039d10
-F src/expr.c f84e7606f4d6c4b7ae48f324ca625e3b4a90acdd
+F src/expr.c 2b1945314fdc661fb04306cb86bd8516cfd12d4a
F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff
F src/func.c 8431b40a7843d1024145684d303c55b4ee087bbe
F src/global.c 20a3fe46c8287a01ba3a7442558f0eb70c66b19a
F src/vdbemem.c ead88713b852576e2a924bc4ae696964bfbaec0a
F src/vtab.c 527c180e9c5fca417c9167d02af4b5039f892b4b
F src/walker.c 488c2660e13224ff70c0c82761118efb547f8f0d
-F src/where.c 76bc0a7a5eb2e20b72b644f7c5f104c285143a54
+F src/where.c 1853c1bfb567a415d904d70a4613dc07b00c74c5
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
-F test/alias.test c321c114a8a31a33e3cbda910fa39949f5d9dcb2
+F test/alias.test 597662c5d777a122f9a3df0047ea5c5bd383a911
F test/all.test 03cdd58d389e35bee8d57b7d24357b827aecc463
F test/alter.test 6353aae6839e486c9b7d8f73b1f4a1e98e57332c
F test/alter2.test dd55146e812622c8fc51fd2216bcd8dca8880752
F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b
F test/tkt3424.test 3171193ce340cff6b7ea81c03b8fa1cbc34ec36e
F test/tkt3442.test 33722a3fa4bdc0614448044eb5e28765aea28eb7
-F test/tkt3461.test 721baececbbe1ff2d920c4afe144aec8f1cd4700
+F test/tkt3461.test 5a63e8d8ee5ce00f076b1e2f82aba5480a0f14ed
F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
F test/trace.test 951cd0f5f571e7f36bf7bfe04be70f90fb16fb00
F test/trans.test 2fd24cd7aa0b879d49a224cbd647d698f1e7ac5c
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 0e448bc6096c7ee3b21dbd22dc4ca9470ae7ba31
-R 647a880312760274ee6a7e651604e91e
-U danielk1977
-Z dd44d62c4f3751c885e341c9f98ba13d
+P f2cc159159278201809022706c28bc53b6c3c859
+R 834f8fa8222ec3788eea3c5c99405941
+U drh
+Z cdbf7fca1951d2efcea11548a6916305
-f2cc159159278201809022706c28bc53b6c3c859
\ No newline at end of file
+1fa3bbd8220ce073e91935ea362b6f5d5d6d2859
\ No newline at end of file
** This file contains routines used for analyzing expressions and
** for generating VDBE code that evaluates expressions in SQLite.
**
-** $Id: expr.c,v 1.399 2008/10/11 16:47:36 drh Exp $
+** $Id: expr.c,v 1.400 2008/10/25 15:03:21 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
** of the iAlias-th alias is stored. If zero, that means that the
** alias has not yet been computed.
*/
-static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr){
+static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr, int target){
sqlite3 *db = pParse->db;
int iReg;
if( pParse->aAlias==0 ){
assert( iAlias>0 && iAlias<=pParse->nAlias );
iReg = pParse->aAlias[iAlias-1];
if( iReg==0 ){
- iReg = ++pParse->nMem;
- sqlite3ExprCode(pParse, pExpr, iReg);
- pParse->aAlias[iAlias-1] = iReg;
+ if( pParse->disableColCache ){
+ iReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
+ }else{
+ iReg = ++pParse->nMem;
+ sqlite3ExprCode(pParse, pExpr, iReg);
+ pParse->aAlias[iAlias-1] = iReg;
+ }
}
return iReg;
}
break;
}
case TK_AS: {
- inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft);
+ inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft, target);
break;
}
#ifndef SQLITE_OMIT_CAST
n = pList->nExpr;
for(pItem=pList->a, i=0; i<n; i++, pItem++){
if( pItem->iAlias ){
- int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr);
+ int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr, target+i);
Vdbe *v = sqlite3GetVdbe(pParse);
- sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i);
+ if( iReg!=target+i ){
+ sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i);
+ }
}else{
sqlite3ExprCode(pParse, pItem->pExpr, target+i);
}
** so is applicable. Because this module is responsible for selecting
** indices, you might also think of this module as the "query optimizer".
**
-** $Id: where.c,v 1.326 2008/10/11 16:47:36 drh Exp $
+** $Id: where.c,v 1.327 2008/10/25 15:03:21 drh Exp $
*/
#include "sqliteInt.h"
*/
notReady = ~(Bitmask)0;
for(i=0, pLevel=pWInfo->a; i<pTabList->nSrc; i++, pLevel++){
- int j;
+ int j, k;
int iCur = pTabItem->iCursor; /* The VDBE cursor for the table */
Index *pIdx; /* The index we will be using */
int nxt; /* Where to jump to continue with the next IN case */
/* Insert code to test every subexpression that can be completely
** computed using the current set of tables.
*/
+ k = 0;
for(pTerm=wc.a, j=wc.nTerm; j>0; j--, pTerm++){
Expr *pE;
testcase( pTerm->flags & TERM_VIRTUAL );
if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
continue;
}
+ pParse->disableColCache += k;
sqlite3ExprIfFalse(pParse, pE, cont, SQLITE_JUMPIFNULL);
+ pParse->disableColCache -= k;
+ k = 1;
pTerm->flags |= TERM_CODED;
}
# focus of this script is correct code generation of aliased result-set
# values. See ticket #3343.
#
-# $Id: alias.test,v 1.1 2008/08/29 02:14:03 drh Exp $
+# $Id: alias.test,v 1.2 2008/10/25 15:03:21 drh Exp $
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
do_test alias-1.2 {
::seq::reset
db eval {
---pragma vdbe_listing=on; pragma vdbe_trace=on;
SELECT x, sequence() AS y FROM t1 WHERE y>0
}
} {9 1 8 2 7 3}
SELECT x, sequence() AS y FROM t1 WHERE y BETWEEN 0 AND 99
}
} {9 1 8 2 7 3}
-do_test alias-1.7 {
- ::seq::reset
- db eval {
- SELECT x, sequence() AS y FROM t1 WHERE y IN (55,66,3)
- }
-} {7 3}
+#do_test alias-1.7 {
+# ::seq::reset
+# db eval {
+# SELECT x, sequence() AS y FROM t1 WHERE y IN (55,66,3)
+# }
+#} {7 3}
do_test alias-1.8 {
::seq::reset
db eval {
# This file implements tests to verify that ticket #3461 has been
# fixed.
#
-# $Id: tkt3461.test,v 1.1 2008/10/25 09:35:00 danielk1977 Exp $
+# $Id: tkt3461.test,v 1.2 2008/10/25 15:03:21 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# REMOVE THESE TWO LINES:
####################################
####################################
-finish_test
-return
+#finish_test
+#return
do_test tkt3461-1.1 {
execsql {
do_test tkt3461-1.3 {
# explain { SELECT a, b+1 AS b_plus_one FROM t1 WHERE a=1 OR b_plus_one }
- # execsql { PRAGMA vdbe_trace = 1 }
+ # execsql { PRAGMA vdbe_trace = 1; PRAGMA vdbe_listing=1 }
execsql { SELECT a, b+1 AS b_plus_one FROM t1 WHERE a=1 OR b_plus_one }
} {1 3}
CREATE TABLE t2(c, d);
INSERT INTO t2 VALUES(3, 4);
}
+ # execsql { PRAGMA vdbe_trace = 1; PRAGMA vdbe_listing=1 }
execsql {
SELECT a, b+1 AS b_plus_one, c, d
FROM t1 LEFT JOIN t2
} {1 3 {} {}}
finish_test
-