| OLD | NEW | 
 | (Empty) | 
|    1 /* |  | 
|    2 ** 2003 September 6 |  | 
|    3 ** |  | 
|    4 ** The author disclaims copyright to this source code.  In place of |  | 
|    5 ** a legal notice, here is a blessing: |  | 
|    6 ** |  | 
|    7 **    May you do good and not evil. |  | 
|    8 **    May you find forgiveness for yourself and forgive others. |  | 
|    9 **    May you share freely, never taking more than you give. |  | 
|   10 ** |  | 
|   11 ************************************************************************* |  | 
|   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 |  | 
|   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 |  | 
|   16 ** this header information was factored out. |  | 
|   17 ** |  | 
|   18 ** $Id: vdbeInt.h,v 1.174 2009/06/23 14:15:04 drh Exp $ |  | 
|   19 */ |  | 
|   20 #ifndef _VDBEINT_H_ |  | 
|   21 #define _VDBEINT_H_ |  | 
|   22  |  | 
|   23 /* |  | 
|   24 ** SQL is translated into a sequence of instructions to be |  | 
|   25 ** executed by a virtual machine.  Each instruction is an instance |  | 
|   26 ** of the following structure. |  | 
|   27 */ |  | 
|   28 typedef struct VdbeOp Op; |  | 
|   29  |  | 
|   30 /* |  | 
|   31 ** Boolean values |  | 
|   32 */ |  | 
|   33 typedef unsigned char Bool; |  | 
|   34  |  | 
|   35 /* |  | 
|   36 ** A cursor is a pointer into a single BTree within a database file. |  | 
|   37 ** The cursor can seek to a BTree entry with a particular key, or |  | 
|   38 ** loop over all entries of the Btree.  You can also insert new BTree |  | 
|   39 ** entries or retrieve the key or data from the entry that the cursor |  | 
|   40 ** is currently pointing to. |  | 
|   41 **  |  | 
|   42 ** Every cursor that the virtual machine has open is represented by an |  | 
|   43 ** instance of the following structure. |  | 
|   44 ** |  | 
|   45 ** If the VdbeCursor.isTriggerRow flag is set it means that this cursor is |  | 
|   46 ** really a single row that represents the NEW or OLD pseudo-table of |  | 
|   47 ** a row trigger.  The data for the row is stored in VdbeCursor.pData and |  | 
|   48 ** the rowid is in VdbeCursor.iKey. |  | 
|   49 */ |  | 
|   50 struct VdbeCursor { |  | 
|   51   BtCursor *pCursor;    /* The cursor structure of the backend */ |  | 
|   52   int iDb;              /* Index of cursor database in db->aDb[] (or -1) */ |  | 
|   53   i64 lastRowid;        /* Last rowid from a Next or NextIdx operation */ |  | 
|   54   Bool zeroed;          /* True if zeroed out and ready for reuse */ |  | 
|   55   Bool rowidIsValid;    /* True if lastRowid is valid */ |  | 
|   56   Bool atFirst;         /* True if pointing to first entry */ |  | 
|   57   Bool useRandomRowid;  /* Generate new record numbers semi-randomly */ |  | 
|   58   Bool nullRow;         /* True if pointing to a row with no data */ |  | 
|   59   Bool deferredMoveto;  /* A call to sqlite3BtreeMoveto() is needed */ |  | 
|   60   Bool isTable;         /* True if a table requiring integer keys */ |  | 
|   61   Bool isIndex;         /* True if an index containing keys only - no data */ |  | 
|   62   i64 movetoTarget;     /* Argument to the deferred sqlite3BtreeMoveto() */ |  | 
|   63   Btree *pBt;           /* Separate file holding temporary table */ |  | 
|   64   int pseudoTableReg;   /* Register holding pseudotable content. */ |  | 
|   65   KeyInfo *pKeyInfo;    /* Info about index keys needed by index cursors */ |  | 
|   66   int nField;           /* Number of fields in the header */ |  | 
|   67   i64 seqCount;         /* Sequence counter */ |  | 
|   68   sqlite3_vtab_cursor *pVtabCursor;  /* The cursor for a virtual table */ |  | 
|   69   const sqlite3_module *pModule;     /* Module for cursor pVtabCursor */ |  | 
|   70  |  | 
|   71   /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or  |  | 
|   72   ** OP_IsUnique opcode on this cursor. */ |  | 
|   73   int seekResult; |  | 
|   74  |  | 
|   75   /* Cached information about the header for the data record that the |  | 
|   76   ** cursor is currently pointing to.  Only valid if cacheStatus matches |  | 
|   77   ** Vdbe.cacheCtr.  Vdbe.cacheCtr will never take on the value of |  | 
|   78   ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that |  | 
|   79   ** the cache is out of date. |  | 
|   80   ** |  | 
|   81   ** aRow might point to (ephemeral) data for the current row, or it might |  | 
|   82   ** be NULL. |  | 
|   83   */ |  | 
|   84   u32 cacheStatus;      /* Cache is valid if this matches Vdbe.cacheCtr */ |  | 
|   85   int payloadSize;      /* Total number of bytes in the record */ |  | 
|   86   u32 *aType;           /* Type values for all entries in the record */ |  | 
|   87   u32 *aOffset;         /* Cached offsets to the start of each columns data */ |  | 
|   88   u8 *aRow;             /* Data for the current row, if all on one page */ |  | 
|   89 }; |  | 
|   90 typedef struct VdbeCursor VdbeCursor; |  | 
|   91  |  | 
|   92 /* |  | 
|   93 ** When a sub-program is executed (OP_Program), a structure of this type |  | 
|   94 ** is allocated to store the current value of the program counter, as |  | 
|   95 ** well as the current memory cell array and various other frame specific |  | 
|   96 ** values stored in the Vdbe struct. When the sub-program is finished,  |  | 
|   97 ** these values are copied back to the Vdbe from the VdbeFrame structure, |  | 
|   98 ** restoring the state of the VM to as it was before the sub-program |  | 
|   99 ** began executing. |  | 
|  100 ** |  | 
|  101 ** Frames are stored in a linked list headed at Vdbe.pParent. Vdbe.pParent |  | 
|  102 ** is the parent of the current frame, or zero if the current frame |  | 
|  103 ** is the main Vdbe program. |  | 
|  104 */ |  | 
|  105 typedef struct VdbeFrame VdbeFrame; |  | 
|  106 struct VdbeFrame { |  | 
|  107   Vdbe *v;                /* VM this frame belongs to */ |  | 
|  108   int pc;                 /* Program Counter */ |  | 
|  109   Op *aOp;                /* Program instructions */ |  | 
|  110   int nOp;                /* Size of aOp array */ |  | 
|  111   Mem *aMem;              /* Array of memory cells */ |  | 
|  112   int nMem;               /* Number of entries in aMem */ |  | 
|  113   VdbeCursor **apCsr;     /* Element of Vdbe cursors */ |  | 
|  114   u16 nCursor;            /* Number of entries in apCsr */ |  | 
|  115   void *token;            /* Copy of SubProgram.token */ |  | 
|  116   int nChildMem;          /* Number of memory cells for child frame */ |  | 
|  117   int nChildCsr;          /* Number of cursors for child frame */ |  | 
|  118   i64 lastRowid;          /* Last insert rowid (sqlite3.lastRowid) */ |  | 
|  119   int nChange;            /* Statement changes (Vdbe.nChanges)     */ |  | 
|  120   VdbeFrame *pParent;     /* Parent of this frame */ |  | 
|  121 }; |  | 
|  122  |  | 
|  123 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))]) |  | 
|  124  |  | 
|  125 /* |  | 
|  126 ** A value for VdbeCursor.cacheValid that means the cache is always invalid. |  | 
|  127 */ |  | 
|  128 #define CACHE_STALE 0 |  | 
|  129  |  | 
|  130 /* |  | 
|  131 ** Internally, the vdbe manipulates nearly all SQL values as Mem |  | 
|  132 ** structures. Each Mem struct may cache multiple representations (string, |  | 
|  133 ** integer etc.) of the same value.  A value (and therefore Mem structure) |  | 
|  134 ** has the following properties: |  | 
|  135 ** |  | 
|  136 ** Each value has a manifest type. The manifest type of the value stored |  | 
|  137 ** in a Mem struct is returned by the MemType(Mem*) macro. The type is |  | 
|  138 ** one of SQLITE_NULL, SQLITE_INTEGER, SQLITE_REAL, SQLITE_TEXT or |  | 
|  139 ** SQLITE_BLOB. |  | 
|  140 */ |  | 
|  141 struct Mem { |  | 
|  142   union { |  | 
|  143     i64 i;              /* Integer value. */ |  | 
|  144     int nZero;          /* Used when bit MEM_Zero is set in flags */ |  | 
|  145     FuncDef *pDef;      /* Used only when flags==MEM_Agg */ |  | 
|  146     RowSet *pRowSet;    /* Used only when flags==MEM_RowSet */ |  | 
|  147     VdbeFrame *pFrame;  /* Used when flags==MEM_Frame */ |  | 
|  148   } u; |  | 
|  149   double r;           /* Real value */ |  | 
|  150   sqlite3 *db;        /* The associated database connection */ |  | 
|  151   char *z;            /* String or BLOB value */ |  | 
|  152   int n;              /* Number of characters in string value, excluding '\0' */ |  | 
|  153   u16 flags;          /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */ |  | 
|  154   u8  type;           /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */ |  | 
|  155   u8  enc;            /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */ |  | 
|  156   void (*xDel)(void *);  /* If not null, call this function to delete Mem.z */ |  | 
|  157   char *zMalloc;      /* Dynamic buffer allocated by sqlite3_malloc() */ |  | 
|  158 }; |  | 
|  159  |  | 
|  160 /* One or more of the following flags are set to indicate the validOK |  | 
|  161 ** representations of the value stored in the Mem struct. |  | 
|  162 ** |  | 
|  163 ** If the MEM_Null flag is set, then the value is an SQL NULL value. |  | 
|  164 ** No other flags may be set in this case. |  | 
|  165 ** |  | 
|  166 ** If the MEM_Str flag is set then Mem.z points at a string representation. |  | 
|  167 ** Usually this is encoded in the same unicode encoding as the main |  | 
|  168 ** database (see below for exceptions). If the MEM_Term flag is also |  | 
|  169 ** set, then the string is nul terminated. The MEM_Int and MEM_Real  |  | 
|  170 ** flags may coexist with the MEM_Str flag. |  | 
|  171 ** |  | 
|  172 ** Multiple of these values can appear in Mem.flags.  But only one |  | 
|  173 ** at a time can appear in Mem.type. |  | 
|  174 */ |  | 
|  175 #define MEM_Null      0x0001   /* Value is NULL */ |  | 
|  176 #define MEM_Str       0x0002   /* Value is a string */ |  | 
|  177 #define MEM_Int       0x0004   /* Value is an integer */ |  | 
|  178 #define MEM_Real      0x0008   /* Value is a real number */ |  | 
|  179 #define MEM_Blob      0x0010   /* Value is a BLOB */ |  | 
|  180 #define MEM_RowSet    0x0020   /* Value is a RowSet object */ |  | 
|  181 #define MEM_Frame     0x0040   /* Value is a VdbeFrame object */ |  | 
|  182 #define MEM_TypeMask  0x00ff   /* Mask of type bits */ |  | 
|  183  |  | 
|  184 /* Whenever Mem contains a valid string or blob representation, one of |  | 
|  185 ** the following flags must be set to determine the memory management |  | 
|  186 ** policy for Mem.z.  The MEM_Term flag tells us whether or not the |  | 
|  187 ** string is \000 or \u0000 terminated |  | 
|  188 */ |  | 
|  189 #define MEM_Term      0x0200   /* String rep is nul terminated */ |  | 
|  190 #define MEM_Dyn       0x0400   /* Need to call sqliteFree() on Mem.z */ |  | 
|  191 #define MEM_Static    0x0800   /* Mem.z points to a static string */ |  | 
|  192 #define MEM_Ephem     0x1000   /* Mem.z points to an ephemeral string */ |  | 
|  193 #define MEM_Agg       0x2000   /* Mem.z points to an agg function context */ |  | 
|  194 #define MEM_Zero      0x4000   /* Mem.i contains count of 0s appended to blob */ |  | 
|  195  |  | 
|  196 #ifdef SQLITE_OMIT_INCRBLOB |  | 
|  197   #undef MEM_Zero |  | 
|  198   #define MEM_Zero 0x0000 |  | 
|  199 #endif |  | 
|  200  |  | 
|  201  |  | 
|  202 /* |  | 
|  203 ** Clear any existing type flags from a Mem and replace them with f |  | 
|  204 */ |  | 
|  205 #define MemSetTypeFlag(p, f) \ |  | 
|  206    ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f) |  | 
|  207  |  | 
|  208  |  | 
|  209 /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains |  | 
|  210 ** additional information about auxiliary information bound to arguments |  | 
|  211 ** of the function.  This is used to implement the sqlite3_get_auxdata() |  | 
|  212 ** and sqlite3_set_auxdata() APIs.  The "auxdata" is some auxiliary data |  | 
|  213 ** that can be associated with a constant argument to a function.  This |  | 
|  214 ** allows functions such as "regexp" to compile their constant regular |  | 
|  215 ** expression argument once and reused the compiled code for multiple |  | 
|  216 ** invocations. |  | 
|  217 */ |  | 
|  218 struct VdbeFunc { |  | 
|  219   FuncDef *pFunc;               /* The definition of the function */ |  | 
|  220   int nAux;                     /* Number of entries allocated for apAux[] */ |  | 
|  221   struct AuxData { |  | 
|  222     void *pAux;                   /* Aux data for the i-th argument */ |  | 
|  223     void (*xDelete)(void *);      /* Destructor for the aux data */ |  | 
|  224   } apAux[1];                   /* One slot for each function argument */ |  | 
|  225 }; |  | 
|  226  |  | 
|  227 /* |  | 
|  228 ** The "context" argument for a installable function.  A pointer to an |  | 
|  229 ** instance of this structure is the first argument to the routines used |  | 
|  230 ** implement the SQL functions. |  | 
|  231 ** |  | 
|  232 ** There is a typedef for this structure in sqlite.h.  So all routines, |  | 
|  233 ** even the public interface to SQLite, can use a pointer to this structure. |  | 
|  234 ** But this file is the only place where the internal details of this |  | 
|  235 ** structure are known. |  | 
|  236 ** |  | 
|  237 ** This structure is defined inside of vdbeInt.h because it uses substructures |  | 
|  238 ** (Mem) which are only defined there. |  | 
|  239 */ |  | 
|  240 struct sqlite3_context { |  | 
|  241   FuncDef *pFunc;       /* Pointer to function information.  MUST BE FIRST */ |  | 
|  242   VdbeFunc *pVdbeFunc;  /* Auxilary data, if created. */ |  | 
|  243   Mem s;                /* The return value is stored here */ |  | 
|  244   Mem *pMem;            /* Memory cell used to store aggregate context */ |  | 
|  245   int isError;          /* Error code returned by the function. */ |  | 
|  246   CollSeq *pColl;       /* Collating sequence */ |  | 
|  247 }; |  | 
|  248  |  | 
|  249 /* |  | 
|  250 ** A Set structure is used for quick testing to see if a value |  | 
|  251 ** is part of a small set.  Sets are used to implement code like |  | 
|  252 ** this: |  | 
|  253 **            x.y IN ('hi','hoo','hum') |  | 
|  254 */ |  | 
|  255 typedef struct Set Set; |  | 
|  256 struct Set { |  | 
|  257   Hash hash;             /* A set is just a hash table */ |  | 
|  258   HashElem *prev;        /* Previously accessed hash elemen */ |  | 
|  259 }; |  | 
|  260  |  | 
|  261 /* |  | 
|  262 ** An instance of the virtual machine.  This structure contains the complete |  | 
|  263 ** state of the virtual machine. |  | 
|  264 ** |  | 
|  265 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_compile() |  | 
|  266 ** is really a pointer to an instance of this structure. |  | 
|  267 ** |  | 
|  268 ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of |  | 
|  269 ** any virtual table method invocations made by the vdbe program. It is |  | 
|  270 ** set to 2 for xDestroy method calls and 1 for all other methods. This |  | 
|  271 ** variable is used for two purposes: to allow xDestroy methods to execute |  | 
|  272 ** "DROP TABLE" statements and to prevent some nasty side effects of |  | 
|  273 ** malloc failure when SQLite is invoked recursively by a virtual table  |  | 
|  274 ** method function. |  | 
|  275 */ |  | 
|  276 struct Vdbe { |  | 
|  277   sqlite3 *db;            /* The database connection that owns this statement */ |  | 
|  278   Vdbe *pPrev,*pNext;     /* Linked list of VDBEs with the same Vdbe.db */ |  | 
|  279   int nOp;                /* Number of instructions in the program */ |  | 
|  280   int nOpAlloc;           /* Number of slots allocated for aOp[] */ |  | 
|  281   Op *aOp;                /* Space to hold the virtual machine's program */ |  | 
|  282   int nLabel;             /* Number of labels used */ |  | 
|  283   int nLabelAlloc;        /* Number of slots allocated in aLabel[] */ |  | 
|  284   int *aLabel;            /* Space to hold the labels */ |  | 
|  285   Mem **apArg;            /* Arguments to currently executing user function */ |  | 
|  286   Mem *aColName;          /* Column names to return */ |  | 
|  287   Mem *pResultSet;        /* Pointer to an array of results */ |  | 
|  288   u16 nResColumn;         /* Number of columns in one row of the result set */ |  | 
|  289   u16 nCursor;            /* Number of slots in apCsr[] */ |  | 
|  290   VdbeCursor **apCsr;     /* One element of this array for each open cursor */ |  | 
|  291   u8 errorAction;         /* Recovery action to do in case of an error */ |  | 
|  292   u8 okVar;               /* True if azVar[] has been initialized */ |  | 
|  293   u16 nVar;               /* Number of entries in aVar[] */ |  | 
|  294   Mem *aVar;              /* Values for the OP_Variable opcode. */ |  | 
|  295   char **azVar;           /* Name of variables */ |  | 
|  296   u32 magic;              /* Magic number for sanity checking */ |  | 
|  297   int nMem;               /* Number of memory locations currently allocated */ |  | 
|  298   Mem *aMem;              /* The memory locations */ |  | 
|  299   u32 cacheCtr;           /* VdbeCursor row cache generation counter */ |  | 
|  300   int pc;                 /* The program counter */ |  | 
|  301   int rc;                 /* Value to return */ |  | 
|  302   char *zErrMsg;          /* Error message written here */ |  | 
|  303   u8 explain;             /* True if EXPLAIN present on SQL command */ |  | 
|  304   u8 changeCntOn;         /* True to update the change-counter */ |  | 
|  305   u8 expired;             /* True if the VM needs to be recompiled */ |  | 
|  306   u8 minWriteFileFormat;  /* Minimum file format for writable database files */ |  | 
|  307   u8 inVtabMethod;        /* See comments above */ |  | 
|  308   u8 usesStmtJournal;     /* True if uses a statement journal */ |  | 
|  309   u8 readOnly;            /* True for read-only statements */ |  | 
|  310   u8 isPrepareV2;         /* True if prepared with prepare_v2() */ |  | 
|  311   int nChange;            /* Number of db changes made since last reset */ |  | 
|  312   int btreeMask;          /* Bitmask of db->aDb[] entries referenced */ |  | 
|  313   i64 startTime;          /* Time when query started - used for profiling */ |  | 
|  314   BtreeMutexArray aMutex; /* An array of Btree used here and needing locks */ |  | 
|  315   int aCounter[2];        /* Counters used by sqlite3_stmt_status() */ |  | 
|  316   char *zSql;             /* Text of the SQL statement that generated this */ |  | 
|  317   void *pFree;            /* Free this when deleting the vdbe */ |  | 
|  318   int iStatement;         /* Statement number (or 0 if has not opened stmt) */ |  | 
|  319 #ifdef SQLITE_DEBUG |  | 
|  320   FILE *trace;            /* Write an execution trace here, if not NULL */ |  | 
|  321 #endif |  | 
|  322   VdbeFrame *pFrame;      /* Parent frame */ |  | 
|  323   int nFrame;             /* Number of frames in pFrame list */ |  | 
|  324 }; |  | 
|  325  |  | 
|  326 /* |  | 
|  327 ** The following are allowed values for Vdbe.magic |  | 
|  328 */ |  | 
|  329 #define VDBE_MAGIC_INIT     0x26bceaa5    /* Building a VDBE program */ |  | 
|  330 #define VDBE_MAGIC_RUN      0xbdf20da3    /* VDBE is ready to execute */ |  | 
|  331 #define VDBE_MAGIC_HALT     0x519c2973    /* VDBE has completed execution */ |  | 
|  332 #define VDBE_MAGIC_DEAD     0xb606c3c8    /* The VDBE has been deallocated */ |  | 
|  333  |  | 
|  334 /* |  | 
|  335 ** Function prototypes |  | 
|  336 */ |  | 
|  337 void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*); |  | 
|  338 void sqliteVdbePopStack(Vdbe*,int); |  | 
|  339 int sqlite3VdbeCursorMoveto(VdbeCursor*); |  | 
|  340 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) |  | 
|  341 void sqlite3VdbePrintOp(FILE*, int, Op*); |  | 
|  342 #endif |  | 
|  343 u32 sqlite3VdbeSerialTypeLen(u32); |  | 
|  344 u32 sqlite3VdbeSerialType(Mem*, int); |  | 
|  345 u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int); |  | 
|  346 u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*); |  | 
|  347 void sqlite3VdbeDeleteAuxData(VdbeFunc*, int); |  | 
|  348  |  | 
|  349 int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *); |  | 
|  350 int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*); |  | 
|  351 int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *); |  | 
|  352 int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*); |  | 
|  353 int sqlite3VdbeExec(Vdbe*); |  | 
|  354 int sqlite3VdbeList(Vdbe*); |  | 
|  355 int sqlite3VdbeHalt(Vdbe*); |  | 
|  356 int sqlite3VdbeChangeEncoding(Mem *, int); |  | 
|  357 int sqlite3VdbeMemTooBig(Mem*); |  | 
|  358 int sqlite3VdbeMemCopy(Mem*, const Mem*); |  | 
|  359 void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int); |  | 
|  360 void sqlite3VdbeMemMove(Mem*, Mem*); |  | 
|  361 int sqlite3VdbeMemNulTerminate(Mem*); |  | 
|  362 int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*)); |  | 
|  363 void sqlite3VdbeMemSetInt64(Mem*, i64); |  | 
|  364 void sqlite3VdbeMemSetDouble(Mem*, double); |  | 
|  365 void sqlite3VdbeMemSetNull(Mem*); |  | 
|  366 void sqlite3VdbeMemSetZeroBlob(Mem*,int); |  | 
|  367 void sqlite3VdbeMemSetRowSet(Mem*); |  | 
|  368 int sqlite3VdbeMemMakeWriteable(Mem*); |  | 
|  369 int sqlite3VdbeMemStringify(Mem*, int); |  | 
|  370 i64 sqlite3VdbeIntValue(Mem*); |  | 
|  371 int sqlite3VdbeMemIntegerify(Mem*); |  | 
|  372 double sqlite3VdbeRealValue(Mem*); |  | 
|  373 void sqlite3VdbeIntegerAffinity(Mem*); |  | 
|  374 int sqlite3VdbeMemRealify(Mem*); |  | 
|  375 int sqlite3VdbeMemNumerify(Mem*); |  | 
|  376 int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*); |  | 
|  377 void sqlite3VdbeMemRelease(Mem *p); |  | 
|  378 void sqlite3VdbeMemReleaseExternal(Mem *p); |  | 
|  379 int sqlite3VdbeMemFinalize(Mem*, FuncDef*); |  | 
|  380 const char *sqlite3OpcodeName(int); |  | 
|  381 int sqlite3VdbeOpcodeHasProperty(int, int); |  | 
|  382 int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve); |  | 
|  383 int sqlite3VdbeCloseStatement(Vdbe *, int); |  | 
|  384 void sqlite3VdbeFrameDelete(VdbeFrame*); |  | 
|  385 int sqlite3VdbeFrameRestore(VdbeFrame *); |  | 
|  386 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT |  | 
|  387 int sqlite3VdbeReleaseBuffers(Vdbe *p); |  | 
|  388 #endif |  | 
|  389  |  | 
|  390 #ifndef SQLITE_OMIT_SHARED_CACHE |  | 
|  391 void sqlite3VdbeMutexArrayEnter(Vdbe *p); |  | 
|  392 #else |  | 
|  393 # define sqlite3VdbeMutexArrayEnter(p) |  | 
|  394 #endif |  | 
|  395  |  | 
|  396 int sqlite3VdbeMemTranslate(Mem*, u8); |  | 
|  397 #ifdef SQLITE_DEBUG |  | 
|  398   void sqlite3VdbePrintSql(Vdbe*); |  | 
|  399   void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf); |  | 
|  400 #endif |  | 
|  401 int sqlite3VdbeMemHandleBom(Mem *pMem); |  | 
|  402  |  | 
|  403 #ifndef SQLITE_OMIT_INCRBLOB |  | 
|  404   int sqlite3VdbeMemExpandBlob(Mem *); |  | 
|  405 #else |  | 
|  406   #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK |  | 
|  407 #endif |  | 
|  408  |  | 
|  409 #endif /* !defined(_VDBEINT_H_) */ |  | 
| OLD | NEW |