OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_) */ |
OLD | NEW |