Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Performance optimization to pageFindSlot() in the b-tree layer. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
59560d079fab4b91ec50855cc60349da |
User & Date: | drh 2017-08-23 23:09:03.990 |
References
2017-08-25
| ||
13:02 | Convert a branch made unreachable by [59560d07] into an assert(). (check-in: 2738b8db3c user: drh tags: trunk) | |
Context
2017-08-24
| ||
13:55 | Make sure the sqlite3_result_pointer() interface does not leave a VM register in an inconsistent state. Fix for ticket [7486aa54b968e9b5]. Test cases are in TH3. (check-in: d2f9230c5c user: drh tags: trunk) | |
2017-08-23
| ||
23:09 | Performance optimization to pageFindSlot() in the b-tree layer. (check-in: 59560d079f user: drh tags: trunk) | |
20:36 | Size and performance optimization to dropCell() and freeSpace(). (check-in: bc1ec123ce user: drh tags: trunk) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
1484 1485 1486 1487 1488 1489 1490 1491 1492 | static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ const int hdr = pPg->hdrOffset; u8 * const aData = pPg->aData; int iAddr = hdr + 1; int pc = get2byte(&aData[iAddr]); int x; int usableSize = pPg->pBt->usableSize; assert( pc>0 ); | > < < < < | < < < | 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 | static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ const int hdr = pPg->hdrOffset; u8 * const aData = pPg->aData; int iAddr = hdr + 1; int pc = get2byte(&aData[iAddr]); int x; int usableSize = pPg->pBt->usableSize; int size; /* Size of the free slot */ assert( pc>0 ); while( pc<=usableSize-4 ){ /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each ** freeblock form a big-endian integer which is the size of the freeblock ** in bytes, including the 4-byte header. */ size = get2byte(&aData[pc+2]); if( (x = size - nByte)>=0 ){ testcase( x==4 ); testcase( x==3 ); |
︙ | ︙ | |||
1522 1523 1524 1525 1526 1527 1528 | ** for the portion used by the new allocation. */ put2byte(&aData[pc+2], x); } return &aData[pc + x]; } iAddr = pc; pc = get2byte(&aData[pc]); | > > | > > | 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 | ** for the portion used by the new allocation. */ put2byte(&aData[pc+2], x); } return &aData[pc + x]; } iAddr = pc; pc = get2byte(&aData[pc]); if( pc<iAddr+size ) break; } if( pc ){ *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno); } return 0; } /* ** Allocate nByte bytes of space from within the B-Tree page passed ** as the first argument. Write into *pIdx the index into pPage->aData[] |
︙ | ︙ |