Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Harden the STAT4 logic in where.c against OOM faults. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
91d2cfbc95c34c0040deb69106bb9f89 |
User & Date: | drh 2013-09-03 19:26:22.132 |
Context
2013-09-04
| ||
02:07 | Conditionally exclude code from analyze.c that is not used by STAT3. (check-in: a48948a170 user: drh tags: trunk) | |
2013-09-03
| ||
19:26 | Harden the STAT4 logic in where.c against OOM faults. (check-in: 91d2cfbc95 user: drh tags: trunk) | |
14:43 | Fix another problem in stat4 sample selection. (check-in: d59f580904 user: dan tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
2417 2418 2419 2420 2421 2422 2423 | Parse *pParse, /* Database connection */ Index *pIdx, /* Index to consider domain of */ UnpackedRecord *pRec, /* Vector of values to consider */ int roundUp, /* Round up if true. Round down if false */ tRowcnt *aStat /* OUT: stats written here */ ){ IndexSample *aSample = pIdx->aSample; | | > > > | 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 | Parse *pParse, /* Database connection */ Index *pIdx, /* Index to consider domain of */ UnpackedRecord *pRec, /* Vector of values to consider */ int roundUp, /* Round up if true. Round down if false */ tRowcnt *aStat /* OUT: stats written here */ ){ IndexSample *aSample = pIdx->aSample; int iCol; /* Index of required stats in anEq[] etc. */ int iMin = 0; /* Smallest sample not yet tested */ int i = pIdx->nSample; /* Smallest sample larger than or equal to pRec */ int iTest; /* Next sample to test */ int res; /* Result of comparison operation */ assert( pRec!=0 || pParse->db->mallocFailed ); if( pRec==0 ) return; iCol = pRec->nField - 1; assert( pIdx->nSample>0 ); assert( pRec->nField>0 && iCol<pIdx->nSampleCol ); do{ iTest = (iMin+i)/2; res = sqlite3VdbeRecordCompare(aSample[iTest].n, aSample[iTest].p, pRec); if( res<0 ){ iMin = iTest+1; |
︙ | ︙ |