-C Test\sthat\ssingle\sbyte\scorruptions\sin\sincreasingly\slarger\squantities\sare\shandled\sgracefully.\s(CVS\s5854)
-D 2008-10-31T13:57:40
+C Fix\sa\sbug\sreported\son\sthe\smailing\slist\striggered\sby\sthe\spattern\s"SELECT\s<col>,\s(SELECT\s...\sFROM\stbl\sWHERE\srowid\s>\s<col>)\sFROM\s...".\s(CVS\s5855)
+D 2008-11-03T09:06:06
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in da817da72422f9b876602c225fcd17d6ca4182f7
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/vdbemem.c c0e9d9947db8968762c7621369f821bb181c1c86
F src/vtab.c 527c180e9c5fca417c9167d02af4b5039f892b4b
F src/walker.c 488c2660e13224ff70c0c82761118efb547f8f0d
-F src/where.c 1853c1bfb567a415d904d70a4613dc07b00c74c5
+F src/where.c 171c9b2583944f66484c8552daa85373ce9e949f
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/alias.test 597662c5d777a122f9a3df0047ea5c5bd383a911
F test/vtab_alter.test 3a299749fee97ca3d53bd55717f536e4a2284856
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
F test/vtab_shared.test c19b2555b807ef2ee014c882cdda5bc8d84fcf48
-F test/where.test 12396f15d8bf7a5763aa26129e071cdb441f600c
+F test/where.test de337a3fe0a459ec7c93db16a519657a90552330
F test/where2.test e446f55417f434929522d87164cd1473d54f10e2
F test/where3.test 97d3936e6a443b968f1a61cdcc0f673252000e94
F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P bfce91429b1dad6e0ca36929e41a7adfb30f8522
-R 7e7399b4dd0e7285795a33efa071b32a
-U shane
-Z 036cf1ab4484f24cac77efa2333c4427
+P c73d915923e393f72e1c0897526a20527db2e03c
+R 81b77b0f0b421033be987682a8d0b4be
+U danielk1977
+Z 86fef2c70c68267aff5116fbaf03ae0a
-c73d915923e393f72e1c0897526a20527db2e03c
\ No newline at end of file
+6c918c4eb9362ebfdbe0486515679102b2862970
\ No newline at end of file
** 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.327 2008/10/25 15:03:21 drh Exp $
+** $Id: where.c,v 1.328 2008/11/03 09:06:06 danielk1977 Exp $
*/
#include "sqliteInt.h"
}
if( pStart ){
Expr *pX;
- int r1, regFree1;
+ int r1;
pX = pStart->pExpr;
assert( pX!=0 );
assert( pStart->leftCursor==iCur );
- r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, ®Free1);
+
+ /* The ForceInt instruction may modify the register that it operates
+ ** on. For example it may replace a real value with an integer one,
+ ** or if p3 is true it may increment the register value. For this
+ ** reason we need to make sure that register r1 is really a newly
+ ** allocated temporary register, and not part of the column-cache.
+ ** For this reason we cannot use sqlite3ExprCodeTemp() here.
+ */
+ r1 = sqlite3GetTempReg(pParse);
+ sqlite3ExprCode(pParse, pX->pRight, r1);
+
sqlite3VdbeAddOp3(v, OP_ForceInt, r1, brk,
pX->op==TK_LE || pX->op==TK_GT);
sqlite3VdbeAddOp3(v, bRev ? OP_MoveLt : OP_MoveGe, iCur, brk, r1);
VdbeComment((v, "pk"));
- sqlite3ReleaseTempReg(pParse, regFree1);
+ sqlite3ReleaseTempReg(pParse, r1);
disableTerm(pLevel, pStart);
}else{
sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, brk);
# This file implements regression tests for SQLite library. The
# focus of this file is testing the use of indices in WHERE clases.
#
-# $Id: where.test,v 1.49 2008/10/07 23:46:38 drh Exp $
+# $Id: where.test,v 1.50 2008/11/03 09:06:06 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
integrity_check {where-99.0}
+#---------------------------------------------------------------------
+# These tests test that a bug surrounding the use of ForceInt has been
+# fixed in where.c.
+#
+do_test where-17.1 {
+ execsql {
+ CREATE TABLE tbooking (
+ id INTEGER PRIMARY KEY,
+ eventtype INTEGER NOT NULL
+ );
+ INSERT INTO tbooking VALUES(42, 3);
+ INSERT INTO tbooking VALUES(43, 4);
+ }
+} {}
+do_test where-17.2 {
+ execsql {
+ SELECT a.id
+ FROM tbooking AS a
+ WHERE a.eventtype=3;
+ }
+} {42}
+do_test where-17.3 {
+ execsql {
+ SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id)
+ FROM tbooking AS a
+ WHERE a.eventtype=3;
+ }
+} {42 43}
+do_test where-17.4 {
+ execsql {
+ SELECT a.id, (SELECT b.id FROM tbooking AS b WHERE b.id>a.id)
+ FROM (SELECT 1.5 AS id) AS a
+ }
+} {1.5 42}
+do_test where-17.5 {
+ execsql {
+ CREATE TABLE tother(a, b);
+ INSERT INTO tother VALUES(1, 3.7);
+ SELECT id, a FROM tbooking, tother WHERE id>a;
+ }
+} {42 1 43 1}
+
finish_test