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

Side by Side Diff: third_party/sqlite/sqlite-src-3100200/src/vdbeInt.h

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 ** 2003 September 6 2 ** 2003 September 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 **
11 ************************************************************************* 11 *************************************************************************
12 ** This is the header file for information that is private to the 12 ** This is the header file for information that is private to the
13 ** VDBE. This information used to all be at the top of the single 13 ** VDBE. This information used to all be at the top of the single
14 ** source code file "vdbe.c". When that file became too big (over 14 ** source code file "vdbe.c". When that file became too big (over
15 ** 6000 lines long) it was split up into several smaller files and 15 ** 6000 lines long) it was split up into several smaller files and
16 ** this header information was factored out. 16 ** this header information was factored out.
17 */ 17 */
18 #ifndef _VDBEINT_H_ 18 #ifndef _VDBEINT_H_
19 #define _VDBEINT_H_ 19 #define _VDBEINT_H_
20 20
21 /* 21 /*
22 ** The maximum number of times that a statement will try to reparse 22 ** The maximum number of times that a statement will try to reparse
23 ** itself before giving up and returning SQLITE_SCHEMA. 23 ** itself before giving up and returning SQLITE_SCHEMA.
24 */ 24 */
25 #ifndef SQLITE_MAX_SCHEMA_RETRY 25 #ifndef SQLITE_MAX_SCHEMA_RETRY
26 # define SQLITE_MAX_SCHEMA_RETRY 50 26 # define SQLITE_MAX_SCHEMA_RETRY 50
27 #endif 27 #endif
28 28
29 /* 29 /*
30 ** VDBE_DISPLAY_P4 is true or false depending on whether or not the
31 ** "explain" P4 display logic is enabled.
32 */
33 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
34 || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
35 # define VDBE_DISPLAY_P4 1
36 #else
37 # define VDBE_DISPLAY_P4 0
38 #endif
39
40 /*
30 ** SQL is translated into a sequence of instructions to be 41 ** SQL is translated into a sequence of instructions to be
31 ** executed by a virtual machine. Each instruction is an instance 42 ** executed by a virtual machine. Each instruction is an instance
32 ** of the following structure. 43 ** of the following structure.
33 */ 44 */
34 typedef struct VdbeOp Op; 45 typedef struct VdbeOp Op;
35 46
36 /* 47 /*
37 ** Boolean values 48 ** Boolean values
38 */ 49 */
39 typedef unsigned Bool; 50 typedef unsigned Bool;
40 51
41 /* Opaque type used by code in vdbesort.c */ 52 /* Opaque type used by code in vdbesort.c */
42 typedef struct VdbeSorter VdbeSorter; 53 typedef struct VdbeSorter VdbeSorter;
43 54
44 /* Opaque type used by the explainer */ 55 /* Opaque type used by the explainer */
45 typedef struct Explain Explain; 56 typedef struct Explain Explain;
46 57
47 /* Elements of the linked list at Vdbe.pAuxData */ 58 /* Elements of the linked list at Vdbe.pAuxData */
48 typedef struct AuxData AuxData; 59 typedef struct AuxData AuxData;
49 60
61 /* Types of VDBE cursors */
62 #define CURTYPE_BTREE 0
63 #define CURTYPE_SORTER 1
64 #define CURTYPE_VTAB 2
65 #define CURTYPE_PSEUDO 3
66
50 /* 67 /*
51 ** A cursor is a pointer into a single BTree within a database file. 68 ** A VdbeCursor is an superclass (a wrapper) for various cursor objects:
52 ** The cursor can seek to a BTree entry with a particular key, or
53 ** loop over all entries of the Btree. You can also insert new BTree
54 ** entries or retrieve the key or data from the entry that the cursor
55 ** is currently pointing to.
56 ** 69 **
57 ** Cursors can also point to virtual tables, sorters, or "pseudo-tables". 70 ** * A b-tree cursor
58 ** A pseudo-table is a single-row table implemented by registers. 71 ** - In the main database or in an ephemeral database
59 ** 72 ** - On either an index or a table
60 ** Every cursor that the virtual machine has open is represented by an 73 ** * A sorter
61 ** instance of the following structure. 74 ** * A virtual table
75 ** * A one-row "pseudotable" stored in a single register
62 */ 76 */
63 struct VdbeCursor { 77 struct VdbeCursor {
64 BtCursor *pCursor; /* The cursor structure of the backend */ 78 u8 eCurType; /* One of the CURTYPE_* values above */
79 i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */
80 u8 nullRow; /* True if pointing to a row with no data */
81 u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
82 u8 isTable; /* True for rowid tables. False for indexes */
83 #ifdef SQLITE_DEBUG
84 u8 seekOp; /* Most recent seek operation on this cursor */
85 #endif
86 Bool isEphemeral:1; /* True for an ephemeral table */
87 Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */
88 Bool isOrdered:1; /* True if the underlying table is BTREE_UNORDERED */
89 Pgno pgnoRoot; /* Root page of the open btree cursor */
90 i16 nField; /* Number of fields in the header */
91 u16 nHdrParsed; /* Number of header fields parsed so far */
92 union {
93 BtCursor *pCursor; /* CURTYPE_BTREE. Btree cursor */
94 sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB. Vtab cursor */
95 int pseudoTableReg; /* CURTYPE_PSEUDO. Reg holding content. */
96 VdbeSorter *pSorter; /* CURTYPE_SORTER. Sorter object */
97 } uc;
65 Btree *pBt; /* Separate file holding temporary table */ 98 Btree *pBt; /* Separate file holding temporary table */
66 KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */ 99 KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
67 int seekResult; /* Result of previous sqlite3BtreeMoveto() */ 100 int seekResult; /* Result of previous sqlite3BtreeMoveto() */
68 int pseudoTableReg; /* Register holding pseudotable content. */
69 i16 nField; /* Number of fields in the header */
70 u16 nHdrParsed; /* Number of header fields parsed so far */
71 #ifdef SQLITE_DEBUG
72 u8 seekOp; /* Most recent seek operation on this cursor */
73 #endif
74 i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */
75 u8 nullRow; /* True if pointing to a row with no data */
76 u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
77 Bool isEphemeral:1; /* True for an ephemeral table */
78 Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */
79 Bool isTable:1; /* True if a table requiring integer keys */
80 Bool isOrdered:1; /* True if the underlying table is BTREE_UNORDERED */
81 Pgno pgnoRoot; /* Root page of the open btree cursor */
82 sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
83 i64 seqCount; /* Sequence counter */ 101 i64 seqCount; /* Sequence counter */
84 i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */ 102 i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
85 VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */ 103 #ifdef SQLITE_ENABLE_COLUMN_USED_MASK
104 u64 maskUsed; /* Mask of columns used by this cursor */
105 #endif
86 106
87 /* Cached information about the header for the data record that the 107 /* Cached information about the header for the data record that the
88 ** cursor is currently pointing to. Only valid if cacheStatus matches 108 ** cursor is currently pointing to. Only valid if cacheStatus matches
89 ** Vdbe.cacheCtr. Vdbe.cacheCtr will never take on the value of 109 ** Vdbe.cacheCtr. Vdbe.cacheCtr will never take on the value of
90 ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that 110 ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that
91 ** the cache is out of date. 111 ** the cache is out of date.
92 ** 112 **
93 ** aRow might point to (ephemeral) data for the current row, or it might 113 ** aRow might point to (ephemeral) data for the current row, or it might
94 ** be NULL. 114 ** be NULL.
95 */ 115 */
(...skipping 29 matching lines...) Expand all
125 ** child frame are released. 145 ** child frame are released.
126 ** 146 **
127 ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is 147 ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
128 ** set to NULL if the currently executing frame is the main program. 148 ** set to NULL if the currently executing frame is the main program.
129 */ 149 */
130 typedef struct VdbeFrame VdbeFrame; 150 typedef struct VdbeFrame VdbeFrame;
131 struct VdbeFrame { 151 struct VdbeFrame {
132 Vdbe *v; /* VM this frame belongs to */ 152 Vdbe *v; /* VM this frame belongs to */
133 VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ 153 VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
134 Op *aOp; /* Program instructions for parent frame */ 154 Op *aOp; /* Program instructions for parent frame */
155 i64 *anExec; /* Event counters from parent frame */
135 Mem *aMem; /* Array of memory cells for parent frame */ 156 Mem *aMem; /* Array of memory cells for parent frame */
136 u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */ 157 u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
137 VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */ 158 VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
138 void *token; /* Copy of SubProgram.token */ 159 void *token; /* Copy of SubProgram.token */
139 i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */ 160 i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
140 int nCursor; /* Number of entries in apCsr */ 161 int nCursor; /* Number of entries in apCsr */
141 int pc; /* Program Counter in parent (calling) frame */ 162 int pc; /* Program Counter in parent (calling) frame */
142 int nOp; /* Size of aOp array */ 163 int nOp; /* Size of aOp array */
143 int nMem; /* Number of entries in aMem */ 164 int nMem; /* Number of entries in aMem */
144 int nOnceFlag; /* Number of entries in aOnceFlag */ 165 int nOnceFlag; /* Number of entries in aOnceFlag */
145 int nChildMem; /* Number of memory cells for child frame */ 166 int nChildMem; /* Number of memory cells for child frame */
146 int nChildCsr; /* Number of cursors for child frame */ 167 int nChildCsr; /* Number of cursors for child frame */
147 int nChange; /* Statement changes (Vdbe.nChanges) */ 168 int nChange; /* Statement changes (Vdbe.nChange) */
169 int nDbChange; /* Value of db->nChange */
148 }; 170 };
149 171
150 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) 172 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
151 173
152 /* 174 /*
153 ** A value for VdbeCursor.cacheValid that means the cache is always invalid. 175 ** A value for VdbeCursor.cacheValid that means the cache is always invalid.
154 */ 176 */
155 #define CACHE_STALE 0 177 #define CACHE_STALE 0
156 178
157 /* 179 /*
158 ** Internally, the vdbe manipulates nearly all SQL values as Mem 180 ** Internally, the vdbe manipulates nearly all SQL values as Mem
159 ** structures. Each Mem struct may cache multiple representations (string, 181 ** structures. Each Mem struct may cache multiple representations (string,
160 ** integer etc.) of the same value. 182 ** integer etc.) of the same value.
161 */ 183 */
162 struct Mem { 184 struct Mem {
163 union MemValue { 185 union MemValue {
164 double r; /* Real value used when MEM_Real is set in flags */ 186 double r; /* Real value used when MEM_Real is set in flags */
165 i64 i; /* Integer value used when MEM_Int is set in flags */ 187 i64 i; /* Integer value used when MEM_Int is set in flags */
166 int nZero; /* Used when bit MEM_Zero is set in flags */ 188 int nZero; /* Used when bit MEM_Zero is set in flags */
167 FuncDef *pDef; /* Used only when flags==MEM_Agg */ 189 FuncDef *pDef; /* Used only when flags==MEM_Agg */
168 RowSet *pRowSet; /* Used only when flags==MEM_RowSet */ 190 RowSet *pRowSet; /* Used only when flags==MEM_RowSet */
169 VdbeFrame *pFrame; /* Used when flags==MEM_Frame */ 191 VdbeFrame *pFrame; /* Used when flags==MEM_Frame */
170 } u; 192 } u;
171 u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ 193 u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
172 u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ 194 u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
195 u8 eSubtype; /* Subtype for this value */
173 int n; /* Number of characters in string value, excluding '\0' */ 196 int n; /* Number of characters in string value, excluding '\0' */
174 char *z; /* String or BLOB value */ 197 char *z; /* String or BLOB value */
175 /* ShallowCopy only needs to copy the information above */ 198 /* ShallowCopy only needs to copy the information above */
176 char *zMalloc; /* Space to hold MEM_Str or MEM_Blob if szMalloc>0 */ 199 char *zMalloc; /* Space to hold MEM_Str or MEM_Blob if szMalloc>0 */
177 int szMalloc; /* Size of the zMalloc allocation */ 200 int szMalloc; /* Size of the zMalloc allocation */
178 u32 uTemp; /* Transient storage for serial_type in OP_MakeRecord */ 201 u32 uTemp; /* Transient storage for serial_type in OP_MakeRecord */
179 sqlite3 *db; /* The associated database connection */ 202 sqlite3 *db; /* The associated database connection */
180 void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */ 203 void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */
181 #ifdef SQLITE_DEBUG 204 #ifdef SQLITE_DEBUG
182 Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */ 205 Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
183 void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */ 206 void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */
184 #endif 207 #endif
185 }; 208 };
186 209
210 /*
211 ** Size of struct Mem not including the Mem.zMalloc member or anything that
212 ** follows.
213 */
214 #define MEMCELLSIZE offsetof(Mem,zMalloc)
215
187 /* One or more of the following flags are set to indicate the validOK 216 /* One or more of the following flags are set to indicate the validOK
188 ** representations of the value stored in the Mem struct. 217 ** representations of the value stored in the Mem struct.
189 ** 218 **
190 ** If the MEM_Null flag is set, then the value is an SQL NULL value. 219 ** If the MEM_Null flag is set, then the value is an SQL NULL value.
191 ** No other flags may be set in this case. 220 ** No other flags may be set in this case.
192 ** 221 **
193 ** If the MEM_Str flag is set then Mem.z points at a string representation. 222 ** If the MEM_Str flag is set then Mem.z points at a string representation.
194 ** Usually this is encoded in the same unicode encoding as the main 223 ** Usually this is encoded in the same unicode encoding as the main
195 ** database (see below for exceptions). If the MEM_Term flag is also 224 ** database (see below for exceptions). If the MEM_Term flag is also
196 ** set, then the string is nul terminated. The MEM_Int and MEM_Real 225 ** set, then the string is nul terminated. The MEM_Int and MEM_Real
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 ** 290 **
262 ** There is a typedef for this structure in sqlite.h. So all routines, 291 ** There is a typedef for this structure in sqlite.h. So all routines,
263 ** even the public interface to SQLite, can use a pointer to this structure. 292 ** even the public interface to SQLite, can use a pointer to this structure.
264 ** But this file is the only place where the internal details of this 293 ** But this file is the only place where the internal details of this
265 ** structure are known. 294 ** structure are known.
266 ** 295 **
267 ** This structure is defined inside of vdbeInt.h because it uses substructures 296 ** This structure is defined inside of vdbeInt.h because it uses substructures
268 ** (Mem) which are only defined there. 297 ** (Mem) which are only defined there.
269 */ 298 */
270 struct sqlite3_context { 299 struct sqlite3_context {
271 Mem *pOut; /* The return value is stored here */ 300 Mem *pOut; /* The return value is stored here */
272 FuncDef *pFunc; /* Pointer to function information */ 301 FuncDef *pFunc; /* Pointer to function information */
273 Mem *pMem; /* Memory cell used to store aggregate context */ 302 Mem *pMem; /* Memory cell used to store aggregate context */
274 Vdbe *pVdbe; /* The VM that owns this context */ 303 Vdbe *pVdbe; /* The VM that owns this context */
275 int iOp; /* Instruction number of OP_Function */ 304 int iOp; /* Instruction number of OP_Function */
276 int isError; /* Error code returned by the function. */ 305 int isError; /* Error code returned by the function. */
277 u8 skipFlag; /* Skip accumulator loading if true */ 306 u8 skipFlag; /* Skip accumulator loading if true */
278 u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */ 307 u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */
308 u8 argc; /* Number of arguments */
309 sqlite3_value *argv[1]; /* Argument set */
279 }; 310 };
280 311
281 /* 312 /*
282 ** An Explain object accumulates indented output which is helpful 313 ** An Explain object accumulates indented output which is helpful
283 ** in describing recursive data structures. 314 ** in describing recursive data structures.
284 */ 315 */
285 struct Explain { 316 struct Explain {
286 Vdbe *pVdbe; /* Attach the explanation to this Vdbe */ 317 Vdbe *pVdbe; /* Attach the explanation to this Vdbe */
287 StrAccum str; /* The string being accumulated */ 318 StrAccum str; /* The string being accumulated */
288 int nIndent; /* Number of elements in aIndent */ 319 int nIndent; /* Number of elements in aIndent */
289 u16 aIndent[100]; /* Levels of indentation */ 320 u16 aIndent[100]; /* Levels of indentation */
290 char zBase[100]; /* Initial space */ 321 char zBase[100]; /* Initial space */
291 }; 322 };
292 323
293 /* A bitfield type for use inside of structures. Always follow with :N where 324 /* A bitfield type for use inside of structures. Always follow with :N where
294 ** N is the number of bits. 325 ** N is the number of bits.
295 */ 326 */
296 typedef unsigned bft; /* Bit Field Type */ 327 typedef unsigned bft; /* Bit Field Type */
297 328
329 typedef struct ScanStatus ScanStatus;
330 struct ScanStatus {
331 int addrExplain; /* OP_Explain for loop */
332 int addrLoop; /* Address of "loops" counter */
333 int addrVisit; /* Address of "rows visited" counter */
334 int iSelectID; /* The "Select-ID" for this loop */
335 LogEst nEst; /* Estimated output rows per loop */
336 char *zName; /* Name of table or index */
337 };
338
298 /* 339 /*
299 ** An instance of the virtual machine. This structure contains the complete 340 ** An instance of the virtual machine. This structure contains the complete
300 ** state of the virtual machine. 341 ** state of the virtual machine.
301 ** 342 **
302 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare() 343 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
303 ** is really a pointer to an instance of this structure. 344 ** is really a pointer to an instance of this structure.
304 **
305 ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
306 ** any virtual table method invocations made by the vdbe program. It is
307 ** set to 2 for xDestroy method calls and 1 for all other methods. This
308 ** variable is used for two purposes: to allow xDestroy methods to execute
309 ** "DROP TABLE" statements and to prevent some nasty side effects of
310 ** malloc failure when SQLite is invoked recursively by a virtual table
311 ** method function.
312 */ 345 */
313 struct Vdbe { 346 struct Vdbe {
314 sqlite3 *db; /* The database connection that owns this statement */ 347 sqlite3 *db; /* The database connection that owns this statement */
315 Op *aOp; /* Space to hold the virtual machine's program */ 348 Op *aOp; /* Space to hold the virtual machine's program */
316 Mem *aMem; /* The memory locations */ 349 Mem *aMem; /* The memory locations */
317 Mem **apArg; /* Arguments to currently executing user function */ 350 Mem **apArg; /* Arguments to currently executing user function */
318 Mem *aColName; /* Column names to return */ 351 Mem *aColName; /* Column names to return */
319 Mem *pResultSet; /* Pointer to an array of results */ 352 Mem *pResultSet; /* Pointer to an array of results */
320 Parse *pParse; /* Parsing context used to create this Vdbe */ 353 Parse *pParse; /* Parsing context used to create this Vdbe */
321 int nMem; /* Number of memory locations currently allocated */ 354 int nMem; /* Number of memory locations currently allocated */
322 int nOp; /* Number of instructions in the program */ 355 int nOp; /* Number of instructions in the program */
323 int nCursor; /* Number of slots in apCsr[] */ 356 int nCursor; /* Number of slots in apCsr[] */
324 u32 magic; /* Magic number for sanity checking */ 357 u32 magic; /* Magic number for sanity checking */
325 char *zErrMsg; /* Error message written here */ 358 char *zErrMsg; /* Error message written here */
326 Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ 359 Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
327 VdbeCursor **apCsr; /* One element of this array for each open cursor */ 360 VdbeCursor **apCsr; /* One element of this array for each open cursor */
328 Mem *aVar; /* Values for the OP_Variable opcode. */ 361 Mem *aVar; /* Values for the OP_Variable opcode. */
329 char **azVar; /* Name of variables */ 362 char **azVar; /* Name of variables */
330 ynVar nVar; /* Number of entries in aVar[] */ 363 ynVar nVar; /* Number of entries in aVar[] */
331 ynVar nzVar; /* Number of entries in azVar[] */ 364 ynVar nzVar; /* Number of entries in azVar[] */
332 u32 cacheCtr; /* VdbeCursor row cache generation counter */ 365 u32 cacheCtr; /* VdbeCursor row cache generation counter */
333 int pc; /* The program counter */ 366 int pc; /* The program counter */
334 int rc; /* Value to return */ 367 int rc; /* Value to return */
368 #ifdef SQLITE_DEBUG
369 int rcApp; /* errcode set by sqlite3_result_error_code() */
370 #endif
335 u16 nResColumn; /* Number of columns in one row of the result set */ 371 u16 nResColumn; /* Number of columns in one row of the result set */
336 u8 errorAction; /* Recovery action to do in case of an error */ 372 u8 errorAction; /* Recovery action to do in case of an error */
337 u8 minWriteFileFormat; /* Minimum file format for writable database files */ 373 u8 minWriteFileFormat; /* Minimum file format for writable database files */
338 bft explain:2; /* True if EXPLAIN present on SQL command */ 374 bft explain:2; /* True if EXPLAIN present on SQL command */
339 bft inVtabMethod:2; /* See comments above */
340 bft changeCntOn:1; /* True to update the change-counter */ 375 bft changeCntOn:1; /* True to update the change-counter */
341 bft expired:1; /* True if the VM needs to be recompiled */ 376 bft expired:1; /* True if the VM needs to be recompiled */
342 bft runOnlyOnce:1; /* Automatically expire on reset */ 377 bft runOnlyOnce:1; /* Automatically expire on reset */
343 bft usesStmtJournal:1; /* True if uses a statement journal */ 378 bft usesStmtJournal:1; /* True if uses a statement journal */
344 bft readOnly:1; /* True for statements that do not write */ 379 bft readOnly:1; /* True for statements that do not write */
345 bft bIsReader:1; /* True for statements that read */ 380 bft bIsReader:1; /* True for statements that read */
346 bft isPrepareV2:1; /* True if prepared with prepare_v2() */ 381 bft isPrepareV2:1; /* True if prepared with prepare_v2() */
347 bft doingRerun:1; /* True if rerunning after an auto-reprepare */ 382 bft doingRerun:1; /* True if rerunning after an auto-reprepare */
348 int nChange; /* Number of db changes made since last reset */ 383 int nChange; /* Number of db changes made since last reset */
349 yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */ 384 yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */
(...skipping 10 matching lines...) Expand all
360 char *zSql; /* Text of the SQL statement that generated this */ 395 char *zSql; /* Text of the SQL statement that generated this */
361 void *pFree; /* Free this when deleting the vdbe */ 396 void *pFree; /* Free this when deleting the vdbe */
362 VdbeFrame *pFrame; /* Parent frame */ 397 VdbeFrame *pFrame; /* Parent frame */
363 VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */ 398 VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */
364 int nFrame; /* Number of frames in pFrame list */ 399 int nFrame; /* Number of frames in pFrame list */
365 u32 expmask; /* Binding to these vars invalidates VM */ 400 u32 expmask; /* Binding to these vars invalidates VM */
366 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */ 401 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
367 int nOnceFlag; /* Size of array aOnceFlag[] */ 402 int nOnceFlag; /* Size of array aOnceFlag[] */
368 u8 *aOnceFlag; /* Flags for OP_Once */ 403 u8 *aOnceFlag; /* Flags for OP_Once */
369 AuxData *pAuxData; /* Linked list of auxdata allocations */ 404 AuxData *pAuxData; /* Linked list of auxdata allocations */
405 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
406 i64 *anExec; /* Number of times each op has been executed */
407 int nScan; /* Entries in aScan[] */
408 ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
409 #endif
370 }; 410 };
371 411
372 /* 412 /*
373 ** The following are allowed values for Vdbe.magic 413 ** The following are allowed values for Vdbe.magic
374 */ 414 */
375 #define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */ 415 #define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */
376 #define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */ 416 #define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */
377 #define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */ 417 #define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */
378 #define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */ 418 #define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */
379 419
380 /* 420 /*
381 ** Function prototypes 421 ** Function prototypes
382 */ 422 */
423 void sqlite3VdbeError(Vdbe*, const char *, ...);
383 void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*); 424 void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
384 void sqliteVdbePopStack(Vdbe*,int); 425 void sqliteVdbePopStack(Vdbe*,int);
385 int sqlite3VdbeCursorMoveto(VdbeCursor*); 426 int sqlite3VdbeCursorMoveto(VdbeCursor*);
386 int sqlite3VdbeCursorRestore(VdbeCursor*); 427 int sqlite3VdbeCursorRestore(VdbeCursor*);
387 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) 428 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
388 void sqlite3VdbePrintOp(FILE*, int, Op*); 429 void sqlite3VdbePrintOp(FILE*, int, Op*);
389 #endif 430 #endif
390 u32 sqlite3VdbeSerialTypeLen(u32); 431 u32 sqlite3VdbeSerialTypeLen(u32);
391 u32 sqlite3VdbeSerialType(Mem*, int); 432 u8 sqlite3VdbeOneByteSerialTypeLen(u8);
433 u32 sqlite3VdbeSerialType(Mem*, int, u32*);
392 u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32); 434 u32 sqlite3VdbeSerialPut(unsigned char*, Mem*, u32);
393 u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); 435 u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
394 void sqlite3VdbeDeleteAuxData(Vdbe*, int, int); 436 void sqlite3VdbeDeleteAuxData(Vdbe*, int, int);
395 437
396 int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); 438 int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
397 int sqlite3VdbeIdxKeyCompare(sqlite3*,VdbeCursor*,UnpackedRecord*,int*); 439 int sqlite3VdbeIdxKeyCompare(sqlite3*,VdbeCursor*,UnpackedRecord*,int*);
398 int sqlite3VdbeIdxRowid(sqlite3*, BtCursor*, i64*); 440 int sqlite3VdbeIdxRowid(sqlite3*, BtCursor*, i64*);
399 int sqlite3VdbeExec(Vdbe*); 441 int sqlite3VdbeExec(Vdbe*);
400 int sqlite3VdbeList(Vdbe*); 442 int sqlite3VdbeList(Vdbe*);
401 int sqlite3VdbeHalt(Vdbe*); 443 int sqlite3VdbeHalt(Vdbe*);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 517
476 #ifndef SQLITE_OMIT_INCRBLOB 518 #ifndef SQLITE_OMIT_INCRBLOB
477 int sqlite3VdbeMemExpandBlob(Mem *); 519 int sqlite3VdbeMemExpandBlob(Mem *);
478 #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0) 520 #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
479 #else 521 #else
480 #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK 522 #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK
481 #define ExpandBlob(P) SQLITE_OK 523 #define ExpandBlob(P) SQLITE_OK
482 #endif 524 #endif
483 525
484 #endif /* !defined(_VDBEINT_H_) */ 526 #endif /* !defined(_VDBEINT_H_) */
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3100200/src/vdbe.c ('k') | third_party/sqlite/sqlite-src-3100200/src/vdbeapi.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698