An instance of the virtual machine.
This structure contains the complete state of the virtual machine.
1struct Vdbe { 2 sqlite3 *db; /* The database connection that owns this statement */ 3 Op *aOp; /* Space to hold the virtual machine's program */ 4 Mem *aMem; /* The memory locations */ 5 Mem **apArg; /* Arguments to currently executing user function */ 6 Mem *aColName; /* Column names to return */ 7 Mem *pResultSet; /* Pointer to an array of results */ 8 Parse *pParse; /* Parsing context used to create this Vdbe */ 9 int nMem; /* Number of memory locations currently allocated */ 10 int nOp; /* Number of instructions in the program */ 11 int nCursor; /* Number of slots in apCsr[] */ 12 u32 magic; /* Magic number for sanity checking */ 13 char *zErrMsg; /* Error message written here */ 14 Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ 15 VdbeCursor **apCsr; /* One element of this array for each open cursor */ 16 Mem *aVar; /* Values for the OP_Variable opcode. */ 17 char **azVar; /* Name of variables */ 18 ynVar nVar; /* Number of entries in aVar[] */ 19 ynVar nzVar; /* Number of entries in azVar[] */ 20 u32 cacheCtr; /* VdbeCursor row cache generation counter */ 21 int pc; /* The program counter */ 22 int rc; /* Value to return */ 23 24#ifdef SQLITE_DEBUG 25 int rcApp; /* errcode set by sqlite3_result_error_code() */ 26#endif 27 28 u16 nResColumn; /* Number of columns in one row of the result set */ 29 u8 errorAction; /* Recovery action to do in case of an error */ 30 u8 minWriteFileFormat; /* Minimum file format for writable database files */ 31 bft explain:2; /* True if EXPLAIN present on SQL command */ 32 bft changeCntOn:1; /* True to update the change-counter */ 33 bft expired:1; /* True if the VM needs to be recompiled */ 34 bft runOnlyOnce:1; /* Automatically expire on reset */ 35 bft usesStmtJournal:1; /* True if uses a statement journal */ 36 bft readOnly:1; /* True for statements that do not write */ 37 bft bIsReader:1; /* True for statements that read */ 38 bft isPrepareV2:1; /* True if prepared with prepare_v2() */ 39 bft doingRerun:1; /* True if rerunning after an auto-reprepare */ 40 int nChange; /* Number of db changes made since last reset */ 41 yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */ 42 yDbMask lockMask; /* Subset of btreeMask that requires a lock */ 43 int iStatement; /* Statement number (or 0 if has not opened stmt) */ 44 u32 aCounter[5]; /* Counters used by sqlite3_stmt_status() */ 45 46#ifndef SQLITE_OMIT_TRACE 47 i64 startTime; /* Time when query started - used for profiling */ 48#endif 49 50 i64 iCurrentTime; /* Value of julianday('now') for this statement */ 51 i64 nFkConstraint; /* Number of imm. FK constraints this VM */ 52 i64 nStmtDefCons; /* Number of def. constraints when stmt started */ 53 i64 nStmtDefImmCons; /* Number of def. imm constraints when stmt started */ 54 char *zSql; /* Text of the SQL statement that generated this */ 55 void *pFree; /* Free this when deleting the vdbe */ 56 VdbeFrame *pFrame; /* Parent frame */ 57 VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */ 58 int nFrame; /* Number of frames in pFrame list */ 59 u32 expmask; /* Binding to these vars invalidates VM */ 60 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */ 61 int nOnceFlag; /* Size of array aOnceFlag[] */ 62 u8 *aOnceFlag; /* Flags for OP_Once */ 63 AuxData *pAuxData; /* Linked list of auxdata allocations */ 64 65#ifdef SQLITE_ENABLE_STMT_SCANSTATUS 66 i64 *anExec; /* Number of times each op has been executed */ 67 int nScan; /* Entries in aScan[] */ 68 ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */ 69#endif 70};