Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug reported on the mailing list triggered by the pattern "SELECT |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
6c918c4eb9362ebfdbe0486515679102 |
User & Date: | danielk1977 2008-11-03 09:06:06.000 |
Context
2008-11-03
| ||
09:39 | Modify an assert() statement to fix #3473. No other code changes. (CVS 5856) (check-in: aca6b260c0 user: danielk1977 tags: trunk) | |
09:06 |
Fix a bug reported on the mailing list triggered by the pattern "SELECT | |
2008-10-31
| ||
13:57 | Test that single byte corruptions in increasingly larger quantities are handled gracefully. (CVS 5854) (check-in: c73d915923 user: shane tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
12 13 14 15 16 17 18 | ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. This module is responsible for ** generating the code that loops through a table looking for applicable ** rows. Indices are selected and used to speed the search when doing ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. This module is responsible for ** generating the code that loops through a table looking for applicable ** rows. Indices are selected and used to speed the search when doing ** 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.328 2008/11/03 09:06:06 danielk1977 Exp $ */ #include "sqliteInt.h" /* ** The number of bits in a Bitmask. "BMS" means "BitMask Size". */ #define BMS (sizeof(Bitmask)*8) |
︙ | ︙ | |||
2468 2469 2470 2471 2472 2473 2474 | if( bRev ){ pTerm = pStart; pStart = pEnd; pEnd = pTerm; } if( pStart ){ Expr *pX; | | > > > > > > > > > | > | | 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 | if( bRev ){ pTerm = pStart; pStart = pEnd; pEnd = pTerm; } if( pStart ){ Expr *pX; int r1; pX = pStart->pExpr; assert( pX!=0 ); assert( pStart->leftCursor==iCur ); /* 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, r1); disableTerm(pLevel, pStart); }else{ sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, brk); } if( pEnd ){ Expr *pX; pX = pEnd->pExpr; |
︙ | ︙ |
Changes to test/where.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the use of indices in WHERE clases. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # 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.50 2008/11/03 09:06:06 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Build some test data # do_test where-1.0 { |
︙ | ︙ | |||
1210 1211 1212 1213 1214 1215 1216 1217 1218 | do_test where-16.4 { execsql { SELECT bar.RowID id FROM foo, bar WHERE foo.idx = bar.RowID AND id = 2; } } {2 2} integrity_check {where-99.0} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 | do_test where-16.4 { execsql { SELECT bar.RowID id FROM foo, bar WHERE foo.idx = bar.RowID AND id = 2; } } {2 2} 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 |