| Index: third_party/sqlite/sqlite-src-3100200/src/vdbeInt.h
|
| diff --git a/third_party/sqlite/src/src/vdbeInt.h b/third_party/sqlite/sqlite-src-3100200/src/vdbeInt.h
|
| similarity index 85%
|
| copy from third_party/sqlite/src/src/vdbeInt.h
|
| copy to third_party/sqlite/sqlite-src-3100200/src/vdbeInt.h
|
| index bb504d64a1f282be0ee3685164139941d4df612c..d1de55eb1c61e61b9e46ec9e6a97fe8aa153e853 100644
|
| --- a/third_party/sqlite/src/src/vdbeInt.h
|
| +++ b/third_party/sqlite/sqlite-src-3100200/src/vdbeInt.h
|
| @@ -27,6 +27,17 @@
|
| #endif
|
|
|
| /*
|
| +** VDBE_DISPLAY_P4 is true or false depending on whether or not the
|
| +** "explain" P4 display logic is enabled.
|
| +*/
|
| +#if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
|
| + || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
|
| +# define VDBE_DISPLAY_P4 1
|
| +#else
|
| +# define VDBE_DISPLAY_P4 0
|
| +#endif
|
| +
|
| +/*
|
| ** SQL is translated into a sequence of instructions to be
|
| ** executed by a virtual machine. Each instruction is an instance
|
| ** of the following structure.
|
| @@ -47,42 +58,51 @@ typedef struct Explain Explain;
|
| /* Elements of the linked list at Vdbe.pAuxData */
|
| typedef struct AuxData AuxData;
|
|
|
| +/* Types of VDBE cursors */
|
| +#define CURTYPE_BTREE 0
|
| +#define CURTYPE_SORTER 1
|
| +#define CURTYPE_VTAB 2
|
| +#define CURTYPE_PSEUDO 3
|
| +
|
| /*
|
| -** A cursor is a pointer into a single BTree within a database file.
|
| -** The cursor can seek to a BTree entry with a particular key, or
|
| -** loop over all entries of the Btree. You can also insert new BTree
|
| -** entries or retrieve the key or data from the entry that the cursor
|
| -** is currently pointing to.
|
| +** A VdbeCursor is an superclass (a wrapper) for various cursor objects:
|
| **
|
| -** Cursors can also point to virtual tables, sorters, or "pseudo-tables".
|
| -** A pseudo-table is a single-row table implemented by registers.
|
| -**
|
| -** Every cursor that the virtual machine has open is represented by an
|
| -** instance of the following structure.
|
| +** * A b-tree cursor
|
| +** - In the main database or in an ephemeral database
|
| +** - On either an index or a table
|
| +** * A sorter
|
| +** * A virtual table
|
| +** * A one-row "pseudotable" stored in a single register
|
| */
|
| struct VdbeCursor {
|
| - BtCursor *pCursor; /* The cursor structure of the backend */
|
| - Btree *pBt; /* Separate file holding temporary table */
|
| - KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
|
| - int seekResult; /* Result of previous sqlite3BtreeMoveto() */
|
| - int pseudoTableReg; /* Register holding pseudotable content. */
|
| - i16 nField; /* Number of fields in the header */
|
| - u16 nHdrParsed; /* Number of header fields parsed so far */
|
| -#ifdef SQLITE_DEBUG
|
| - u8 seekOp; /* Most recent seek operation on this cursor */
|
| -#endif
|
| + u8 eCurType; /* One of the CURTYPE_* values above */
|
| i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */
|
| u8 nullRow; /* True if pointing to a row with no data */
|
| u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
|
| + u8 isTable; /* True for rowid tables. False for indexes */
|
| +#ifdef SQLITE_DEBUG
|
| + u8 seekOp; /* Most recent seek operation on this cursor */
|
| +#endif
|
| Bool isEphemeral:1; /* True for an ephemeral table */
|
| Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */
|
| - Bool isTable:1; /* True if a table requiring integer keys */
|
| Bool isOrdered:1; /* True if the underlying table is BTREE_UNORDERED */
|
| Pgno pgnoRoot; /* Root page of the open btree cursor */
|
| - sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
|
| + i16 nField; /* Number of fields in the header */
|
| + u16 nHdrParsed; /* Number of header fields parsed so far */
|
| + union {
|
| + BtCursor *pCursor; /* CURTYPE_BTREE. Btree cursor */
|
| + sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB. Vtab cursor */
|
| + int pseudoTableReg; /* CURTYPE_PSEUDO. Reg holding content. */
|
| + VdbeSorter *pSorter; /* CURTYPE_SORTER. Sorter object */
|
| + } uc;
|
| + Btree *pBt; /* Separate file holding temporary table */
|
| + KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
|
| + int seekResult; /* Result of previous sqlite3BtreeMoveto() */
|
| i64 seqCount; /* Sequence counter */
|
| i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
|
| - VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */
|
| +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK
|
| + u64 maskUsed; /* Mask of columns used by this cursor */
|
| +#endif
|
|
|
| /* Cached information about the header for the data record that the
|
| ** cursor is currently pointing to. Only valid if cacheStatus matches
|
| @@ -132,6 +152,7 @@ struct VdbeFrame {
|
| Vdbe *v; /* VM this frame belongs to */
|
| VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
|
| Op *aOp; /* Program instructions for parent frame */
|
| + i64 *anExec; /* Event counters from parent frame */
|
| Mem *aMem; /* Array of memory cells for parent frame */
|
| u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
|
| VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
|
| @@ -144,7 +165,8 @@ struct VdbeFrame {
|
| int nOnceFlag; /* Number of entries in aOnceFlag */
|
| int nChildMem; /* Number of memory cells for child frame */
|
| int nChildCsr; /* Number of cursors for child frame */
|
| - int nChange; /* Statement changes (Vdbe.nChanges) */
|
| + int nChange; /* Statement changes (Vdbe.nChange) */
|
| + int nDbChange; /* Value of db->nChange */
|
| };
|
|
|
| #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
|
| @@ -170,6 +192,7 @@ struct Mem {
|
| } u;
|
| u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
|
| u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
|
| + u8 eSubtype; /* Subtype for this value */
|
| int n; /* Number of characters in string value, excluding '\0' */
|
| char *z; /* String or BLOB value */
|
| /* ShallowCopy only needs to copy the information above */
|
| @@ -184,6 +207,12 @@ struct Mem {
|
| #endif
|
| };
|
|
|
| +/*
|
| +** Size of struct Mem not including the Mem.zMalloc member or anything that
|
| +** follows.
|
| +*/
|
| +#define MEMCELLSIZE offsetof(Mem,zMalloc)
|
| +
|
| /* One or more of the following flags are set to indicate the validOK
|
| ** representations of the value stored in the Mem struct.
|
| **
|
| @@ -268,14 +297,16 @@ struct AuxData {
|
| ** (Mem) which are only defined there.
|
| */
|
| struct sqlite3_context {
|
| - Mem *pOut; /* The return value is stored here */
|
| - FuncDef *pFunc; /* Pointer to function information */
|
| - Mem *pMem; /* Memory cell used to store aggregate context */
|
| - Vdbe *pVdbe; /* The VM that owns this context */
|
| - int iOp; /* Instruction number of OP_Function */
|
| - int isError; /* Error code returned by the function. */
|
| - u8 skipFlag; /* Skip accumulator loading if true */
|
| - u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */
|
| + Mem *pOut; /* The return value is stored here */
|
| + FuncDef *pFunc; /* Pointer to function information */
|
| + Mem *pMem; /* Memory cell used to store aggregate context */
|
| + Vdbe *pVdbe; /* The VM that owns this context */
|
| + int iOp; /* Instruction number of OP_Function */
|
| + int isError; /* Error code returned by the function. */
|
| + u8 skipFlag; /* Skip accumulator loading if true */
|
| + u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */
|
| + u8 argc; /* Number of arguments */
|
| + sqlite3_value *argv[1]; /* Argument set */
|
| };
|
|
|
| /*
|
| @@ -295,20 +326,22 @@ struct Explain {
|
| */
|
| typedef unsigned bft; /* Bit Field Type */
|
|
|
| +typedef struct ScanStatus ScanStatus;
|
| +struct ScanStatus {
|
| + int addrExplain; /* OP_Explain for loop */
|
| + int addrLoop; /* Address of "loops" counter */
|
| + int addrVisit; /* Address of "rows visited" counter */
|
| + int iSelectID; /* The "Select-ID" for this loop */
|
| + LogEst nEst; /* Estimated output rows per loop */
|
| + char *zName; /* Name of table or index */
|
| +};
|
| +
|
| /*
|
| ** An instance of the virtual machine. This structure contains the complete
|
| ** state of the virtual machine.
|
| **
|
| ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
|
| ** is really a pointer to an instance of this structure.
|
| -**
|
| -** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
|
| -** any virtual table method invocations made by the vdbe program. It is
|
| -** set to 2 for xDestroy method calls and 1 for all other methods. This
|
| -** variable is used for two purposes: to allow xDestroy methods to execute
|
| -** "DROP TABLE" statements and to prevent some nasty side effects of
|
| -** malloc failure when SQLite is invoked recursively by a virtual table
|
| -** method function.
|
| */
|
| struct Vdbe {
|
| sqlite3 *db; /* The database connection that owns this statement */
|
| @@ -332,11 +365,13 @@ struct Vdbe {
|
| u32 cacheCtr; /* VdbeCursor row cache generation counter */
|
| int pc; /* The program counter */
|
| int rc; /* Value to return */
|
| +#ifdef SQLITE_DEBUG
|
| + int rcApp; /* errcode set by sqlite3_result_error_code() */
|
| +#endif
|
| u16 nResColumn; /* Number of columns in one row of the result set */
|
| u8 errorAction; /* Recovery action to do in case of an error */
|
| u8 minWriteFileFormat; /* Minimum file format for writable database files */
|
| bft explain:2; /* True if EXPLAIN present on SQL command */
|
| - bft inVtabMethod:2; /* See comments above */
|
| bft changeCntOn:1; /* True to update the change-counter */
|
| bft expired:1; /* True if the VM needs to be recompiled */
|
| bft runOnlyOnce:1; /* Automatically expire on reset */
|
| @@ -367,6 +402,11 @@ struct Vdbe {
|
| int nOnceFlag; /* Size of array aOnceFlag[] */
|
| u8 *aOnceFlag; /* Flags for OP_Once */
|
| AuxData *pAuxData; /* Linked list of auxdata allocations */
|
| +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
| + i64 *anExec; /* Number of times each op has been executed */
|
| + int nScan; /* Entries in aScan[] */
|
| + ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
|
| +#endif
|
| };
|
|
|
| /*
|
| @@ -380,6 +420,7 @@ struct Vdbe {
|
| /*
|
| ** Function prototypes
|
| */
|
| +void sqlite3VdbeError(Vdbe*, const char *, ...);
|
| void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
|
| void sqliteVdbePopStack(Vdbe*,int);
|
| int sqlite3VdbeCursorMoveto(VdbeCursor*);
|
| @@ -388,7 +429,8 @@ int sqlite3VdbeCursorRestore(VdbeCursor*);
|
| void sqlite3VdbePrintOp(FILE*, int, Op*);
|
| #endif
|
| u32 sqlite3VdbeSerialTypeLen(u32);
|
| -u32 sqlite3VdbeSerialType(Mem*, int);
|
| +u8 sqlite3VdbeOneByteSerialTypeLen(u8);
|
| +u32 sqlite3VdbeSerialType(Mem*, int, u32*);
|
| u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32);
|
| u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
|
| void sqlite3VdbeDeleteAuxData(Vdbe*, int, int);
|
|
|