Index: third_party/sqlite/src/src/btreeInt.h |
diff --git a/third_party/sqlite/src/src/btreeInt.h b/third_party/sqlite/src/src/btreeInt.h |
index a196e18a282a04514547c505966fb30e37edfa7a..b01163c33f49681ce4b14eee9553b17706acdb85 100644 |
--- a/third_party/sqlite/src/src/btreeInt.h |
+++ b/third_party/sqlite/src/src/btreeInt.h |
@@ -259,38 +259,39 @@ typedef struct CellInfo CellInfo; |
#define PTF_LEAF 0x08 |
/* |
-** As each page of the file is loaded into memory, an instance of the following |
-** structure is appended and initialized to zero. This structure stores |
-** information about the page that is decoded from the raw file page. |
+** An instance of this object stores information about each a single database |
+** page that has been loaded into memory. The information in this object |
+** is derived from the raw on-disk page content. |
** |
-** The pParent field points back to the parent page. This allows us to |
-** walk up the BTree from any leaf to the root. Care must be taken to |
-** unref() the parent page pointer when this page is no longer referenced. |
-** The pageDestructor() routine handles that chore. |
+** As each database page is loaded into memory, the pager allocats an |
+** instance of this object and zeros the first 8 bytes. (This is the |
+** "extra" information associated with each page of the pager.) |
** |
** Access to all fields of this structure is controlled by the mutex |
** stored in MemPage.pBt->mutex. |
*/ |
struct MemPage { |
u8 isInit; /* True if previously initialized. MUST BE FIRST! */ |
- u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ |
+ u8 bBusy; /* Prevent endless loops on corrupt database files */ |
u8 intKey; /* True if table b-trees. False for index b-trees */ |
u8 intKeyLeaf; /* True if the leaf of an intKey table */ |
- u8 noPayload; /* True if internal intKey page (thus w/o data) */ |
+ Pgno pgno; /* Page number for this page */ |
+ /* Only the first 8 bytes (above) are zeroed by pager.c when a new page |
+ ** is allocated. All fields that follow must be initialized before use */ |
u8 leaf; /* True if a leaf page */ |
u8 hdrOffset; /* 100 for page 1. 0 otherwise */ |
u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */ |
u8 max1bytePayload; /* min(maxLocal,127) */ |
- u8 bBusy; /* Prevent endless loops on corrupt database files */ |
+ u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ |
u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */ |
u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */ |
u16 cellOffset; /* Index in aData of first cell pointer */ |
u16 nFree; /* Number of free bytes on the page */ |
u16 nCell; /* Number of cells on this page, local and ovfl */ |
u16 maskPage; /* Mask for page offset */ |
- u16 aiOvfl[5]; /* Insert the i-th overflow cell before the aiOvfl-th |
+ u16 aiOvfl[4]; /* Insert the i-th overflow cell before the aiOvfl-th |
** non-overflow cell */ |
- u8 *apOvfl[5]; /* Pointers to the body of overflow cells */ |
+ u8 *apOvfl[4]; /* Pointers to the body of overflow cells */ |
BtShared *pBt; /* Pointer to BtShared that this page is part of */ |
u8 *aData; /* Pointer to disk image of the page data */ |
u8 *aDataEnd; /* One byte past the end of usable data */ |
@@ -299,17 +300,9 @@ struct MemPage { |
DbPage *pDbPage; /* Pager page handle */ |
u16 (*xCellSize)(MemPage*,u8*); /* cellSizePtr method */ |
void (*xParseCell)(MemPage*,u8*,CellInfo*); /* btreeParseCell method */ |
- Pgno pgno; /* Page number for this page */ |
}; |
/* |
-** The in-memory image of a disk page has the auxiliary information appended |
-** to the end. EXTRA_SIZE is the number of bytes of space needed to hold |
-** that extra information. |
-*/ |
-#define EXTRA_SIZE sizeof(MemPage) |
- |
-/* |
** A linked list of the following structures is stored at BtShared.pLock. |
** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor |
** is opened on the table with root page BtShared.iTable. Locks are removed |
@@ -699,11 +692,9 @@ struct IntegrityCk { |
*/ |
#if SQLITE_BYTEORDER==4321 |
# define get2byteAligned(x) (*(u16*)(x)) |
-#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ |
- && GCC_VERSION>=4008000 |
+#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4008000 |
# define get2byteAligned(x) __builtin_bswap16(*(u16*)(x)) |
-#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ |
- && defined(_MSC_VER) && _MSC_VER>=1300 |
+#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 |
# define get2byteAligned(x) _byteswap_ushort(*(u16*)(x)) |
#else |
# define get2byteAligned(x) ((x)[0]<<8 | (x)[1]) |