/ Changes On Branch ovfloffset-macro
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch ovfloffset-macro Excluding Merge-Ins

This is equivalent to a diff from 6a4cfc7ab6 to 1541607d45

2015-12-31
04:34
Small size and performance optimization to the VDBE comparison opcodes. (check-in: 7a0b9413fa user: drh tags: trunk)
2015-12-30
20:50
Use the OvflOffset() macro to try to remove some magic numbers from btree.c. (Leaf check-in: 1541607d45 user: drh tags: ovfloffset-macro)
18:18
Reduce the size of the CellInfo object from 32 to 24 bytes on 64-bit machines, for a small performance increase and library size reduction. (check-in: 6a4cfc7ab6 user: drh tags: trunk)
17:03
Enhance the command-line shell so that it can handle MBCS characters on input and output. (check-in: 3d81dfe3bc user: drh tags: trunk)
2015-12-18
03:59
Reduce the size of the CellInfo object from 32 to 24 bytes on 64-bit machines. (Closed-Leaf check-in: 7850715406 user: drh tags: optimize-cellinfo)

Changes to src/btree.c.

1302
1303
1304
1305
1306
1307
1308
1309

1310
1311
1312
1313
1314
1315
1316
1302
1303
1304
1305
1306
1307
1308

1309
1310
1311
1312
1313
1314
1315
1316







-
+







*/
static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
  CellInfo info;
  if( *pRC ) return;
  assert( pCell!=0 );
  pPage->xParseCell(pPage, pCell, &info);
  if( info.nLocal<info.nPayload ){
    Pgno ovfl = get4byte(&pCell[info.nSize-4]);
    Pgno ovfl = get4byte(&pCell[OvflOffset(&info)]);
    ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
  }
}
#endif


/*
3342
3343
3344
3345
3346
3347
3348
3349

3350
3351

3352
3353
3354
3355
3356
3357
3358
3342
3343
3344
3345
3346
3347
3348

3349
3350

3351
3352
3353
3354
3355
3356
3357
3358







-
+

-
+







    for(i=0; i<nCell; i++){
      u8 *pCell = findCell(pPage, i);
      if( eType==PTRMAP_OVERFLOW1 ){
        CellInfo info;
        pPage->xParseCell(pPage, pCell, &info);
        if( info.nLocal<info.nPayload
         && pCell+info.nSize-1<=pPage->aData+pPage->maskPage
         && iFrom==get4byte(pCell+info.nSize-4)
         && iFrom==get4byte(pCell+OvflOffset(&info))
        ){
          put4byte(pCell+info.nSize-4, iTo);
          put4byte(pCell+OvflOffset(&info), iTo);
          break;
        }
      }else{
        if( get4byte(pCell)==iFrom ){
          put4byte(pCell, iTo);
          break;
        }
6851
6852
6853
6854
6855
6856
6857
6858

6859
6860
6861
6862
6863
6864
6865
6851
6852
6853
6854
6855
6856
6857

6858
6859
6860
6861
6862
6863
6864
6865







-
+







    for(j=0; j<pPage->nCell; j++){
      CellInfo info;
      u8 *z;
     
      z = findCell(pPage, j);
      pPage->xParseCell(pPage, z, &info);
      if( info.nLocal<info.nPayload ){
        Pgno ovfl = get4byte(&z[info.nSize-4]);
        Pgno ovfl = get4byte(&z[OvflOffset(&info)]);
        ptrmapGet(pBt, ovfl, &e, &n);
        assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );
      }
      if( !pPage->leaf ){
        Pgno child = get4byte(z);
        ptrmapGet(pBt, child, &e, &n);
        assert( n==pPage->pgno && e==PTRMAP_BTREE );

Changes to src/btreeInt.h.

468
469
470
471
472
473
474







475
476
477
478
479
480
481
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488







+
+
+
+
+
+
+







struct CellInfo {
  i64 nKey;      /* The key for INTKEY tables, or nPayload otherwise */
  u8 *pPayload;  /* Pointer to the start of payload */
  u32 nPayload;  /* Bytes of payload */
  u16 nLocal;    /* Amount of payload held locally, not on overflow */
  u16 nSize;     /* Size of the cell content on the main b-tree page */
};

/* If X is a pointer to a CellInfo object for a cell, then OvflOffset(X) is 
** the offset from the start of that cell to the first overflow page number 
** for for that cell.
*/
#define OvflOffset(X)  ((X)->nSize-4)


/*
** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than
** this will be declared corrupt. This value is calculated based on a
** maximum database size of 2^31 pages a minimum fanout of 2 for a
** root-node and 3 for all other internal nodes.
**