Avoid parsing an entire record header when it is not required. (CVS 2940)

FossilOrigin-Name: 0de729d9144afba144811799f65e32140c14ef8a
This commit is contained in:
danielk1977
2006-01-13 15:58:43 +00:00
parent a3e4d96f5d
commit 9792eeff95
4 changed files with 23 additions and 16 deletions
+8 -8
View File
@@ -1,5 +1,5 @@
C Make\ssure\sthe\sauthenticator\sdoes\snot\stry\sto\sauthenticate\scolumns\sin\nsubqueries.\s\s\sTicket\s#1607.\s(CVS\s2939)
D 2006-01-13T13:55:45
C Avoid\sparsing\san\sentire\srecord\sheader\swhen\sit\sis\snot\srequired.\s(CVS\s2940)
D 2006-01-13T15:58:43
F Makefile.in ab3ffd8d469cef4477257169b82810030a6bb967
F Makefile.linux-gcc aee18d8a05546dcf1888bd4547e442008a49a092
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -87,14 +87,14 @@ F src/update.c 261d75c702c2852d1a64274d7c414485e6f2d177
F src/utf.c 5ab8ca05d4e9ec81174b010f01ab12a232f0087d
F src/util.c b26be916edd1c991450cccc6503356c4f776598b
F src/vacuum.c 21a3c7f6f7be86bb1182fbc3df416ad702435b9e
F src/vdbe.c 9e64780853ead129babe0c42462c7eb661e532f6
F src/vdbe.c e2f081425c3b2be6e7ff25fbb2f3f70fa95413ee
F src/vdbe.h 8729a4ee16ff9aeab2af9667df3cf300ff978e13
F src/vdbeInt.h 5451cf71f229e366ac543607c0a17f36e5737ea9
F src/vdbeapi.c afd3837cea0dec93dcb4724d073c84fa0da68e23
F src/vdbeaux.c 1d765d671ae31a067b2b064c3f193690f91eea62
F src/vdbefifo.c 9efb94c8c3f4c979ebd0028219483f88e57584f5
F src/vdbemem.c dd08a0eea4868ac4a2d91fdec32424308b1db772
F src/where.c 1e19c96cf8a55310118130ce251511be72e766f7
F src/where.c 6885d655f3f7fb6455fcf5174c7119b1ce3ed860
F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
F test/all.test a23fcbbf1f53515bde840d78732a6d94c673b327
F test/alter.test b94b640063e725d062b2997bd2810ac39195c718
@@ -340,7 +340,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P caa7da807d6578f7d8848978a7d3175b6ea1743b
R 6f79ad1aee69a2aa6006e2d298cd5d79
U drh
Z b22000ffe605fffb14ba67c5c1828077
P 55b7dfaf4d3a6d01fffdaf1707e88bcd215d7333
R 07d8c70ff570eb317ee47042ddb86743
U danielk1977
Z 7bb864839753b74a0c8dfa1447111caa
+1 -1
View File
@@ -1 +1 @@
55b7dfaf4d3a6d01fffdaf1707e88bcd215d7333
0de729d9144afba144811799f65e32140c14ef8a
+6 -6
View File
@@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
** $Id: vdbe.c,v 1.527 2006/01/13 06:33:24 danielk1977 Exp $
** $Id: vdbe.c,v 1.528 2006/01/13 15:58:43 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@@ -1962,7 +1962,7 @@ case OP_Column: {
/* If payloadSize is 0, then just push a NULL onto the stack. */
if( payloadSize==0 ){
pTos->flags = MEM_Null;
assert( pTos->flags==MEM_Null );
break;
}
@@ -2051,11 +2051,11 @@ case OP_Column: {
aOffset[i++] = 0;
}
/* The header should end at the start of data and the data should
** end at last byte of the record. If this is not the case then
** we are dealing with a malformed record.
/* If we have read more header data than was contained in the header,
** or if the end of the last field appears to be past the end of the
** record, then we must be dealing with a corrupt database.
*/
if( idx!=szHdr || offset!=payloadSize ){
if( idx>szHdr || offset>payloadSize ){
rc = SQLITE_CORRUPT_BKPT;
goto op_column_out;
}
+8 -1
View File
@@ -16,7 +16,7 @@
** 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.196 2006/01/13 13:01:19 danielk1977 Exp $
** $Id: where.c,v 1.197 2006/01/13 15:58:43 danielk1977 Exp $
*/
#include "sqliteInt.h"
@@ -1592,6 +1592,13 @@ WhereInfo *sqlite3WhereBegin(
if( pTab->isTransient || pTab->pSelect ) continue;
if( (pLevel->flags & WHERE_IDX_ONLY)==0 ){
sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, OP_OpenRead);
if( pTab->nCol<(sizeof(Bitmask)*8) ){
Bitmask b = pTabItem->colUsed;
int n = 0;
for(; b; b=b>>1, n++);
sqlite3VdbeChangeP2(v, sqlite3VdbeCurrentAddr(v)-1, n);
assert( n<=pTab->nCol );
}
}else{
sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
}