| 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 55469cff906b286083dfa71698106b096f93dea5..a28a6a297e5730d92b9dc5fde639f71d4a83e8b4 100644 | 
| --- a/third_party/sqlite/src/src/btreeInt.h | 
| +++ b/third_party/sqlite/src/src/btreeInt.h | 
| @@ -9,7 +9,7 @@ | 
| **    May you share freely, never taking more than you give. | 
| ** | 
| ************************************************************************* | 
| -** This file implements a external (disk-based) database using BTrees. | 
| +** This file implements an external (disk-based) database using BTrees. | 
| ** For a detailed discussion of BTrees, refer to | 
| ** | 
| **     Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3: | 
| @@ -56,13 +56,13 @@ | 
| ** | 
| **   OFFSET   SIZE    DESCRIPTION | 
| **      0      16     Header string: "SQLite format 3\000" | 
| -**     16       2     Page size in bytes. | 
| +**     16       2     Page size in bytes.  (1 means 65536) | 
| **     18       1     File format write version | 
| **     19       1     File format read version | 
| **     20       1     Bytes of unused space at the end of each page | 
| -**     21       1     Max embedded payload fraction | 
| -**     22       1     Min embedded payload fraction | 
| -**     23       1     Min leaf payload fraction | 
| +**     21       1     Max embedded payload fraction (must be 64) | 
| +**     22       1     Min embedded payload fraction (must be 32) | 
| +**     23       1     Min leaf payload fraction (must be 32) | 
| **     24       4     File change counter | 
| **     28       4     Reserved for future use | 
| **     32       4     First freelist page | 
| @@ -76,9 +76,10 @@ | 
| **     56       4     1=UTF-8 2=UTF16le 3=UTF16be | 
| **     60       4     User version | 
| **     64       4     Incremental vacuum mode | 
| -**     68       4     unused | 
| -**     72       4     unused | 
| -**     76       4     unused | 
| +**     68       4     Application-ID | 
| +**     72      20     unused | 
| +**     92       4     The version-valid-for number | 
| +**     96       4     SQLITE_VERSION_NUMBER | 
| ** | 
| ** All of the integer values are big-endian (most significant byte first). | 
| ** | 
| @@ -134,7 +135,7 @@ | 
| ** | 
| ** The flags define the format of this btree page.  The leaf flag means that | 
| ** this page has no children.  The zerodata flag means that this page carries | 
| -** only keys and no data.  The intkey flag means that the key is a integer | 
| +** only keys and no data.  The intkey flag means that the key is an integer | 
| ** which is stored in the key size entry of the cell header rather than in | 
| ** the payload area. | 
| ** | 
| @@ -272,23 +273,26 @@ typedef struct BtLock BtLock; | 
| struct MemPage { | 
| u8 isInit;           /* True if previously initialized. MUST BE FIRST! */ | 
| u8 nOverflow;        /* Number of overflow cell bodies in aCell[] */ | 
| -  u8 intKey;           /* True if intkey flag is set */ | 
| -  u8 leaf;             /* True if leaf flag is set */ | 
| -  u8 hasData;          /* True if this page stores data */ | 
| +  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) */ | 
| +  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) */ | 
| 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 */ | 
| -  struct _OvflCell {   /* Cells that will not fit on aData[] */ | 
| -    u8 *pCell;          /* Pointers to the body of the overflow cell */ | 
| -    u16 idx;            /* Insert this cell before idx-th non-overflow cell */ | 
| -  } aOvfl[5]; | 
| +  u16 aiOvfl[5];       /* Insert the i-th overflow cell before the aiOvfl-th | 
| +                       ** non-overflow cell */ | 
| +  u8 *apOvfl[5];       /* 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 */ | 
| +  u8 *aCellIdx;        /* The cell index area */ | 
| DbPage *pDbPage;     /* Pager page handle */ | 
| Pgno pgno;           /* Page number for this page */ | 
| }; | 
| @@ -368,7 +372,7 @@ struct Btree { | 
| /* | 
| ** An instance of this object represents a single database file. | 
| ** | 
| -** A single database file can be in use as the same time by two | 
| +** A single database file can be in use at the same time by two | 
| ** or more database connections.  When two or more connections are | 
| ** sharing the same database file, each connection has it own | 
| ** private Btree object for the file and each of those Btrees points | 
| @@ -405,17 +409,15 @@ struct BtShared { | 
| sqlite3 *db;          /* Database connection currently using this Btree */ | 
| BtCursor *pCursor;    /* A list of all open cursors */ | 
| MemPage *pPage1;      /* First page of the database */ | 
| -  u8 readOnly;          /* True if the underlying file is readonly */ | 
| -  u8 pageSizeFixed;     /* True if the page size can no longer be changed */ | 
| -  u8 secureDelete;      /* True if secure_delete is enabled */ | 
| -  u8 initiallyEmpty;    /* Database is empty at start of transaction */ | 
| u8 openFlags;         /* Flags to sqlite3BtreeOpen() */ | 
| #ifndef SQLITE_OMIT_AUTOVACUUM | 
| u8 autoVacuum;        /* True if auto-vacuum is enabled */ | 
| u8 incrVacuum;        /* True if incr-vacuum is enabled */ | 
| +  u8 bDoTruncate;       /* True to truncate db on commit */ | 
| #endif | 
| u8 inTransaction;     /* Transaction state */ | 
| -  u8 doNotUseWAL;       /* If true, do not open write-ahead-log file */ | 
| +  u8 max1bytePayload;   /* Maximum first byte of cell for a 1-byte payload */ | 
| +  u16 btsFlags;         /* Boolean parameters.  See BTS_* macros below */ | 
| u16 maxLocal;         /* Maximum local payload in non-LEAFDATA tables */ | 
| u16 minLocal;         /* Minimum local payload in non-LEAFDATA tables */ | 
| u16 maxLeaf;          /* Maximum local payload in a LEAFDATA table */ | 
| @@ -433,25 +435,32 @@ struct BtShared { | 
| BtShared *pNext;      /* Next on a list of sharable BtShared structs */ | 
| BtLock *pLock;        /* List of locks held on this shared-btree struct */ | 
| Btree *pWriter;       /* Btree with currently open write transaction */ | 
| -  u8 isExclusive;       /* True if pWriter has an EXCLUSIVE lock on the db */ | 
| -  u8 isPending;         /* If waiting for read-locks to clear */ | 
| #endif | 
| -  u8 *pTmpSpace;        /* BtShared.pageSize bytes of space for tmp use */ | 
| +  u8 *pTmpSpace;        /* Temp space sufficient to hold a single cell */ | 
| }; | 
|  | 
| /* | 
| +** Allowed values for BtShared.btsFlags | 
| +*/ | 
| +#define BTS_READ_ONLY        0x0001   /* Underlying file is readonly */ | 
| +#define BTS_PAGESIZE_FIXED   0x0002   /* Page size can no longer be changed */ | 
| +#define BTS_SECURE_DELETE    0x0004   /* PRAGMA secure_delete is enabled */ | 
| +#define BTS_INITIALLY_EMPTY  0x0008   /* Database was empty at trans start */ | 
| +#define BTS_NO_WAL           0x0010   /* Do not open write-ahead-log files */ | 
| +#define BTS_EXCLUSIVE        0x0020   /* pWriter has an exclusive lock */ | 
| +#define BTS_PENDING          0x0040   /* Waiting for read-locks to clear */ | 
| + | 
| +/* | 
| ** An instance of the following structure is used to hold information | 
| ** about a cell.  The parseCellPtr() function fills in this structure | 
| ** based on information extract from the raw disk page. | 
| */ | 
| typedef struct CellInfo CellInfo; | 
| struct CellInfo { | 
| -  i64 nKey;      /* The key for INTKEY tables, or number of bytes in key */ | 
| -  u8 *pCell;     /* Pointer to the start of cell content */ | 
| -  u32 nData;     /* Number of bytes of data */ | 
| -  u32 nPayload;  /* Total amount of payload */ | 
| -  u16 nHeader;   /* Size of the cell content header in bytes */ | 
| -  u16 nLocal;    /* Amount of payload held locally */ | 
| +  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 iOverflow; /* Offset to overflow page number.  Zero if no overflow */ | 
| u16 nSize;     /* Size of the cell content on the main b-tree page */ | 
| }; | 
| @@ -474,48 +483,64 @@ struct CellInfo { | 
| ** The entry is identified by its MemPage and the index in | 
| ** MemPage.aCell[] of the entry. | 
| ** | 
| -** A single database file can shared by two more database connections, | 
| +** A single database file can be shared by two more database connections, | 
| ** but cursors cannot be shared.  Each cursor is associated with a | 
| ** particular database connection identified BtCursor.pBtree.db. | 
| ** | 
| ** Fields in this structure are accessed under the BtShared.mutex | 
| ** found at self->pBt->mutex. | 
| +** | 
| +** skipNext meaning: | 
| +**    eState==SKIPNEXT && skipNext>0:  Next sqlite3BtreeNext() is no-op. | 
| +**    eState==SKIPNEXT && skipNext<0:  Next sqlite3BtreePrevious() is no-op. | 
| +**    eState==FAULT:                   Cursor fault with skipNext as error code. | 
| */ | 
| struct BtCursor { | 
| Btree *pBtree;            /* The Btree to which this cursor belongs */ | 
| BtShared *pBt;            /* The BtShared this cursor points to */ | 
| BtCursor *pNext, *pPrev;  /* Forms a linked list of all cursors */ | 
| struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */ | 
| -  Pgno pgnoRoot;            /* The root page of this tree */ | 
| -  sqlite3_int64 cachedRowid; /* Next rowid cache.  0 means not valid */ | 
| +  Pgno *aOverflow;          /* Cache of overflow page locations */ | 
| CellInfo info;            /* A parse of the cell we are pointing at */ | 
| -  i64 nKey;        /* Size of pKey, or last integer key */ | 
| -  void *pKey;      /* Saved key that was cursor's last known position */ | 
| -  int skipNext;    /* Prev() is noop if negative. Next() is noop if positive */ | 
| -  u8 wrFlag;                /* True if writable */ | 
| -  u8 atLast;                /* Cursor pointing to the last entry */ | 
| -  u8 validNKey;             /* True if info.nKey is valid */ | 
| +  i64 nKey;                 /* Size of pKey, or last integer key */ | 
| +  void *pKey;               /* Saved key that was cursor last known position */ | 
| +  Pgno pgnoRoot;            /* The root page of this tree */ | 
| +  int nOvflAlloc;           /* Allocated size of aOverflow[] array */ | 
| +  int skipNext;    /* Prev() is noop if negative. Next() is noop if positive. | 
| +                   ** Error code if eState==CURSOR_FAULT */ | 
| +  u8 curFlags;              /* zero or more BTCF_* flags defined below */ | 
| u8 eState;                /* One of the CURSOR_XXX constants (see below) */ | 
| -#ifndef SQLITE_OMIT_INCRBLOB | 
| -  Pgno *aOverflow;          /* Cache of overflow page locations */ | 
| -  u8 isIncrblobHandle;      /* True if this cursor is an incr. io handle */ | 
| -#endif | 
| +  u8 hints;                             /* As configured by CursorSetHints() */ | 
| i16 iPage;                            /* Index of current page in apPage */ | 
| u16 aiIdx[BTCURSOR_MAX_DEPTH];        /* Current index in apPage[i] */ | 
| MemPage *apPage[BTCURSOR_MAX_DEPTH];  /* Pages from root to current page */ | 
| }; | 
|  | 
| /* | 
| +** Legal values for BtCursor.curFlags | 
| +*/ | 
| +#define BTCF_WriteFlag    0x01   /* True if a write cursor */ | 
| +#define BTCF_ValidNKey    0x02   /* True if info.nKey is valid */ | 
| +#define BTCF_ValidOvfl    0x04   /* True if aOverflow is valid */ | 
| +#define BTCF_AtLast       0x08   /* Cursor is pointing ot the last entry */ | 
| +#define BTCF_Incrblob     0x10   /* True if an incremental I/O handle */ | 
| + | 
| +/* | 
| ** Potential values for BtCursor.eState. | 
| ** | 
| -** CURSOR_VALID: | 
| -**   Cursor points to a valid entry. getPayload() etc. may be called. | 
| -** | 
| ** CURSOR_INVALID: | 
| **   Cursor does not point to a valid entry. This can happen (for example) | 
| **   because the table is empty or because BtreeCursorFirst() has not been | 
| **   called. | 
| ** | 
| +** CURSOR_VALID: | 
| +**   Cursor points to a valid entry. getPayload() etc. may be called. | 
| +** | 
| +** CURSOR_SKIPNEXT: | 
| +**   Cursor is valid except that the Cursor.skipNext field is non-zero | 
| +**   indicating that the next sqlite3BtreeNext() or sqlite3BtreePrevious() | 
| +**   operation should be a no-op. | 
| +** | 
| ** CURSOR_REQUIRESEEK: | 
| **   The table that this cursor was opened on still exists, but has been | 
| **   modified since the cursor was last used. The cursor position is saved | 
| @@ -524,16 +549,17 @@ struct BtCursor { | 
| **   seek the cursor to the saved position. | 
| ** | 
| ** CURSOR_FAULT: | 
| -**   A unrecoverable error (an I/O error or a malloc failure) has occurred | 
| +**   An unrecoverable error (an I/O error or a malloc failure) has occurred | 
| **   on a different connection that shares the BtShared cache with this | 
| **   cursor.  The error has left the cache in an inconsistent state. | 
| **   Do nothing else with this cursor.  Any attempt to use the cursor | 
| -**   should return the error code stored in BtCursor.skip | 
| +**   should return the error code stored in BtCursor.skipNext | 
| */ | 
| #define CURSOR_INVALID           0 | 
| #define CURSOR_VALID             1 | 
| -#define CURSOR_REQUIRESEEK       2 | 
| -#define CURSOR_FAULT             3 | 
| +#define CURSOR_SKIPNEXT          2 | 
| +#define CURSOR_REQUIRESEEK       3 | 
| +#define CURSOR_FAULT             4 | 
|  | 
| /* | 
| ** The database page the PENDING_BYTE occupies. This page is never used. | 
| @@ -621,21 +647,29 @@ struct BtCursor { | 
| /* | 
| ** This structure is passed around through all the sanity checking routines | 
| ** in order to keep track of some global state information. | 
| +** | 
| +** The aRef[] array is allocated so that there is 1 bit for each page in | 
| +** the database. As the integrity-check proceeds, for each page used in | 
| +** the database the corresponding bit is set. This allows integrity-check to | 
| +** detect pages that are used twice and orphaned pages (both of which | 
| +** indicate corruption). | 
| */ | 
| typedef struct IntegrityCk IntegrityCk; | 
| struct IntegrityCk { | 
| BtShared *pBt;    /* The tree being checked out */ | 
| Pager *pPager;    /* The associated pager.  Also accessible by pBt->pPager */ | 
| +  u8 *aPgRef;       /* 1 bit per page in the db (see above) */ | 
| Pgno nPage;       /* Number of pages in the database */ | 
| -  int *anRef;       /* Number of times each page is referenced */ | 
| int mxErr;        /* Stop accumulating errors when this reaches zero */ | 
| int nErr;         /* Number of messages written to zErrMsg so far */ | 
| int mallocFailed; /* A memory allocation error has occurred */ | 
| +  const char *zPfx; /* Error message prefix */ | 
| +  int v1, v2;       /* Values for up to two %d fields in zPfx */ | 
| StrAccum errMsg;  /* Accumulate the error message text here */ | 
| }; | 
|  | 
| /* | 
| -** Read or write a two- and four-byte big-endian integer values. | 
| +** Routines to read or write a two- and four-byte big-endian integer values. | 
| */ | 
| #define get2byte(x)   ((x)[0]<<8 | (x)[1]) | 
| #define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v)) | 
|  |