Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: third_party/sqlite/src/src/btreeInt.h

Issue 2751253002: [sql] Import SQLite 3.17.0. (Closed)
Patch Set: also clang on Linux i386 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/sqlite/src/src/btree.c ('k') | third_party/sqlite/src/src/build.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ** 2004 April 6 2 ** 2004 April 6
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 /* 252 /*
253 ** Page type flags. An ORed combination of these flags appear as the 253 ** Page type flags. An ORed combination of these flags appear as the
254 ** first byte of on-disk image of every BTree page. 254 ** first byte of on-disk image of every BTree page.
255 */ 255 */
256 #define PTF_INTKEY 0x01 256 #define PTF_INTKEY 0x01
257 #define PTF_ZERODATA 0x02 257 #define PTF_ZERODATA 0x02
258 #define PTF_LEAFDATA 0x04 258 #define PTF_LEAFDATA 0x04
259 #define PTF_LEAF 0x08 259 #define PTF_LEAF 0x08
260 260
261 /* 261 /*
262 ** As each page of the file is loaded into memory, an instance of the following 262 ** An instance of this object stores information about each a single database
263 ** structure is appended and initialized to zero. This structure stores 263 ** page that has been loaded into memory. The information in this object
264 ** information about the page that is decoded from the raw file page. 264 ** is derived from the raw on-disk page content.
265 ** 265 **
266 ** The pParent field points back to the parent page. This allows us to 266 ** As each database page is loaded into memory, the pager allocats an
267 ** walk up the BTree from any leaf to the root. Care must be taken to 267 ** instance of this object and zeros the first 8 bytes. (This is the
268 ** unref() the parent page pointer when this page is no longer referenced. 268 ** "extra" information associated with each page of the pager.)
269 ** The pageDestructor() routine handles that chore.
270 ** 269 **
271 ** Access to all fields of this structure is controlled by the mutex 270 ** Access to all fields of this structure is controlled by the mutex
272 ** stored in MemPage.pBt->mutex. 271 ** stored in MemPage.pBt->mutex.
273 */ 272 */
274 struct MemPage { 273 struct MemPage {
275 u8 isInit; /* True if previously initialized. MUST BE FIRST! */ 274 u8 isInit; /* True if previously initialized. MUST BE FIRST! */
276 u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ 275 u8 bBusy; /* Prevent endless loops on corrupt database files */
277 u8 intKey; /* True if table b-trees. False for index b-trees */ 276 u8 intKey; /* True if table b-trees. False for index b-trees */
278 u8 intKeyLeaf; /* True if the leaf of an intKey table */ 277 u8 intKeyLeaf; /* True if the leaf of an intKey table */
279 u8 noPayload; /* True if internal intKey page (thus w/o data) */ 278 Pgno pgno; /* Page number for this page */
279 /* Only the first 8 bytes (above) are zeroed by pager.c when a new page
280 ** is allocated. All fields that follow must be initialized before use */
280 u8 leaf; /* True if a leaf page */ 281 u8 leaf; /* True if a leaf page */
281 u8 hdrOffset; /* 100 for page 1. 0 otherwise */ 282 u8 hdrOffset; /* 100 for page 1. 0 otherwise */
282 u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */ 283 u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */
283 u8 max1bytePayload; /* min(maxLocal,127) */ 284 u8 max1bytePayload; /* min(maxLocal,127) */
284 u8 bBusy; /* Prevent endless loops on corrupt database files */ 285 u8 nOverflow; /* Number of overflow cell bodies in aCell[] */
285 u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */ 286 u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
286 u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */ 287 u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */
287 u16 cellOffset; /* Index in aData of first cell pointer */ 288 u16 cellOffset; /* Index in aData of first cell pointer */
288 u16 nFree; /* Number of free bytes on the page */ 289 u16 nFree; /* Number of free bytes on the page */
289 u16 nCell; /* Number of cells on this page, local and ovfl */ 290 u16 nCell; /* Number of cells on this page, local and ovfl */
290 u16 maskPage; /* Mask for page offset */ 291 u16 maskPage; /* Mask for page offset */
291 u16 aiOvfl[5]; /* Insert the i-th overflow cell before the aiOvfl-th 292 u16 aiOvfl[4]; /* Insert the i-th overflow cell before the aiOvfl-th
292 ** non-overflow cell */ 293 ** non-overflow cell */
293 u8 *apOvfl[5]; /* Pointers to the body of overflow cells */ 294 u8 *apOvfl[4]; /* Pointers to the body of overflow cells */
294 BtShared *pBt; /* Pointer to BtShared that this page is part of */ 295 BtShared *pBt; /* Pointer to BtShared that this page is part of */
295 u8 *aData; /* Pointer to disk image of the page data */ 296 u8 *aData; /* Pointer to disk image of the page data */
296 u8 *aDataEnd; /* One byte past the end of usable data */ 297 u8 *aDataEnd; /* One byte past the end of usable data */
297 u8 *aCellIdx; /* The cell index area */ 298 u8 *aCellIdx; /* The cell index area */
298 u8 *aDataOfst; /* Same as aData for leaves. aData+4 for interior */ 299 u8 *aDataOfst; /* Same as aData for leaves. aData+4 for interior */
299 DbPage *pDbPage; /* Pager page handle */ 300 DbPage *pDbPage; /* Pager page handle */
300 u16 (*xCellSize)(MemPage*,u8*); /* cellSizePtr method */ 301 u16 (*xCellSize)(MemPage*,u8*); /* cellSizePtr method */
301 void (*xParseCell)(MemPage*,u8*,CellInfo*); /* btreeParseCell method */ 302 void (*xParseCell)(MemPage*,u8*,CellInfo*); /* btreeParseCell method */
302 Pgno pgno; /* Page number for this page */
303 }; 303 };
304 304
305 /* 305 /*
306 ** The in-memory image of a disk page has the auxiliary information appended
307 ** to the end. EXTRA_SIZE is the number of bytes of space needed to hold
308 ** that extra information.
309 */
310 #define EXTRA_SIZE sizeof(MemPage)
311
312 /*
313 ** A linked list of the following structures is stored at BtShared.pLock. 306 ** A linked list of the following structures is stored at BtShared.pLock.
314 ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor 307 ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor
315 ** is opened on the table with root page BtShared.iTable. Locks are removed 308 ** is opened on the table with root page BtShared.iTable. Locks are removed
316 ** from this list when a transaction is committed or rolled back, or when 309 ** from this list when a transaction is committed or rolled back, or when
317 ** a btree handle is closed. 310 ** a btree handle is closed.
318 */ 311 */
319 struct BtLock { 312 struct BtLock {
320 Btree *pBtree; /* Btree handle holding this lock */ 313 Btree *pBtree; /* Btree handle holding this lock */
321 Pgno iTable; /* Root page of table */ 314 Pgno iTable; /* Root page of table */
322 u8 eLock; /* READ_LOCK or WRITE_LOCK */ 315 u8 eLock; /* READ_LOCK or WRITE_LOCK */
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 #define get4byte sqlite3Get4byte 685 #define get4byte sqlite3Get4byte
693 #define put4byte sqlite3Put4byte 686 #define put4byte sqlite3Put4byte
694 687
695 /* 688 /*
696 ** get2byteAligned(), unlike get2byte(), requires that its argument point to a 689 ** get2byteAligned(), unlike get2byte(), requires that its argument point to a
697 ** two-byte aligned address. get2bytea() is only used for accessing the 690 ** two-byte aligned address. get2bytea() is only used for accessing the
698 ** cell addresses in a btree header. 691 ** cell addresses in a btree header.
699 */ 692 */
700 #if SQLITE_BYTEORDER==4321 693 #if SQLITE_BYTEORDER==4321
701 # define get2byteAligned(x) (*(u16*)(x)) 694 # define get2byteAligned(x) (*(u16*)(x))
702 #elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ 695 #elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4008000
703 && GCC_VERSION>=4008000
704 # define get2byteAligned(x) __builtin_bswap16(*(u16*)(x)) 696 # define get2byteAligned(x) __builtin_bswap16(*(u16*)(x))
705 #elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ 697 #elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300
706 && defined(_MSC_VER) && _MSC_VER>=1300
707 # define get2byteAligned(x) _byteswap_ushort(*(u16*)(x)) 698 # define get2byteAligned(x) _byteswap_ushort(*(u16*)(x))
708 #else 699 #else
709 # define get2byteAligned(x) ((x)[0]<<8 | (x)[1]) 700 # define get2byteAligned(x) ((x)[0]<<8 | (x)[1])
710 #endif 701 #endif
OLDNEW
« no previous file with comments | « third_party/sqlite/src/src/btree.c ('k') | third_party/sqlite/src/src/build.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698