1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/extensions/sqlite/sqlite-source/vdbeaux.c Sun Mar 30 07:00:22 2008 +0000
1.3 @@ -0,0 +1,2243 @@
1.4 +/*
1.5 +** 2003 September 6
1.6 +**
1.7 +** The author disclaims copyright to this source code. In place of
1.8 +** a legal notice, here is a blessing:
1.9 +**
1.10 +** May you do good and not evil.
1.11 +** May you find forgiveness for yourself and forgive others.
1.12 +** May you share freely, never taking more than you give.
1.13 +**
1.14 +*************************************************************************
1.15 +** This file contains code used for creating, destroying, and populating
1.16 +** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior
1.17 +** to version 2.8.7, all this code was combined into the vdbe.c source file.
1.18 +** But that file was getting too big so this subroutines were split out.
1.19 +*/
1.20 +#include "sqliteInt.h"
1.21 +#include <ctype.h>
1.22 +#include "vdbeInt.h"
1.23 +
1.24 +
1.25 +
1.26 +/*
1.27 +** When debugging the code generator in a symbolic debugger, one can
1.28 +** set the sqlite3_vdbe_addop_trace to 1 and all opcodes will be printed
1.29 +** as they are added to the instruction stream.
1.30 +*/
1.31 +#ifdef SQLITE_DEBUG
1.32 +int sqlite3_vdbe_addop_trace = 0;
1.33 +#endif
1.34 +
1.35 +
1.36 +/*
1.37 +** Create a new virtual database engine.
1.38 +*/
1.39 +Vdbe *sqlite3VdbeCreate(sqlite3 *db){
1.40 + Vdbe *p;
1.41 + p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
1.42 + if( p==0 ) return 0;
1.43 + p->db = db;
1.44 + if( db->pVdbe ){
1.45 + db->pVdbe->pPrev = p;
1.46 + }
1.47 + p->pNext = db->pVdbe;
1.48 + p->pPrev = 0;
1.49 + db->pVdbe = p;
1.50 + p->magic = VDBE_MAGIC_INIT;
1.51 + return p;
1.52 +}
1.53 +
1.54 +/*
1.55 +** Remember the SQL string for a prepared statement.
1.56 +*/
1.57 +void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n){
1.58 + if( p==0 ) return;
1.59 + assert( p->zSql==0 );
1.60 + p->zSql = sqlite3DbStrNDup(p->db, z, n);
1.61 +}
1.62 +
1.63 +/*
1.64 +** Return the SQL associated with a prepared statement
1.65 +*/
1.66 +const char *sqlite3VdbeGetSql(Vdbe *p){
1.67 + return p->zSql;
1.68 +}
1.69 +
1.70 +/*
1.71 +** Swap all content between two VDBE structures.
1.72 +*/
1.73 +void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
1.74 + Vdbe tmp, *pTmp;
1.75 + char *zTmp;
1.76 + int nTmp;
1.77 + tmp = *pA;
1.78 + *pA = *pB;
1.79 + *pB = tmp;
1.80 + pTmp = pA->pNext;
1.81 + pA->pNext = pB->pNext;
1.82 + pB->pNext = pTmp;
1.83 + pTmp = pA->pPrev;
1.84 + pA->pPrev = pB->pPrev;
1.85 + pB->pPrev = pTmp;
1.86 + zTmp = pA->zSql;
1.87 + pA->zSql = pB->zSql;
1.88 + pB->zSql = zTmp;
1.89 + nTmp = pA->nSql;
1.90 + pA->nSql = pB->nSql;
1.91 + pB->nSql = nTmp;
1.92 +}
1.93 +
1.94 +#ifdef SQLITE_DEBUG
1.95 +/*
1.96 +** Turn tracing on or off
1.97 +*/
1.98 +void sqlite3VdbeTrace(Vdbe *p, FILE *trace){
1.99 + p->trace = trace;
1.100 +}
1.101 +#endif
1.102 +
1.103 +/*
1.104 +** Resize the Vdbe.aOp array so that it contains at least N
1.105 +** elements. If the Vdbe is in VDBE_MAGIC_RUN state, then
1.106 +** the Vdbe.aOp array will be sized to contain exactly N
1.107 +** elements. Vdbe.nOpAlloc is set to reflect the new size of
1.108 +** the array.
1.109 +**
1.110 +** If an out-of-memory error occurs while resizing the array,
1.111 +** Vdbe.aOp and Vdbe.nOpAlloc remain unchanged (this is so that
1.112 +** any opcodes already allocated can be correctly deallocated
1.113 +** along with the rest of the Vdbe).
1.114 +*/
1.115 +static void resizeOpArray(Vdbe *p, int N){
1.116 + int runMode = p->magic==VDBE_MAGIC_RUN;
1.117 + if( runMode || p->nOpAlloc<N ){
1.118 + VdbeOp *pNew;
1.119 + int nNew = N + 100*(!runMode);
1.120 + int oldSize = p->nOpAlloc;
1.121 + pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
1.122 + if( pNew ){
1.123 + p->nOpAlloc = nNew;
1.124 + p->aOp = pNew;
1.125 + if( nNew>oldSize ){
1.126 + memset(&p->aOp[oldSize], 0, (nNew-oldSize)*sizeof(Op));
1.127 + }
1.128 + }
1.129 + }
1.130 +}
1.131 +
1.132 +/*
1.133 +** Add a new instruction to the list of instructions current in the
1.134 +** VDBE. Return the address of the new instruction.
1.135 +**
1.136 +** Parameters:
1.137 +**
1.138 +** p Pointer to the VDBE
1.139 +**
1.140 +** op The opcode for this instruction
1.141 +**
1.142 +** p1, p2 First two of the three possible operands.
1.143 +**
1.144 +** Use the sqlite3VdbeResolveLabel() function to fix an address and
1.145 +** the sqlite3VdbeChangeP3() function to change the value of the P3
1.146 +** operand.
1.147 +*/
1.148 +int sqlite3VdbeAddOp(Vdbe *p, int op, int p1, int p2){
1.149 + int i;
1.150 + VdbeOp *pOp;
1.151 +
1.152 + i = p->nOp;
1.153 + assert( p->magic==VDBE_MAGIC_INIT );
1.154 + if( p->nOpAlloc<=i ){
1.155 + resizeOpArray(p, i+1);
1.156 + if( p->db->mallocFailed ){
1.157 + return 0;
1.158 + }
1.159 + }
1.160 + p->nOp++;
1.161 + pOp = &p->aOp[i];
1.162 + pOp->opcode = op;
1.163 + pOp->p1 = p1;
1.164 + pOp->p2 = p2;
1.165 + pOp->p3 = 0;
1.166 + pOp->p3type = P3_NOTUSED;
1.167 + p->expired = 0;
1.168 +#ifdef SQLITE_DEBUG
1.169 + if( sqlite3_vdbe_addop_trace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]);
1.170 +#endif
1.171 + return i;
1.172 +}
1.173 +
1.174 +/*
1.175 +** Add an opcode that includes the p3 value.
1.176 +*/
1.177 +int sqlite3VdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3,int p3type){
1.178 + int addr = sqlite3VdbeAddOp(p, op, p1, p2);
1.179 + sqlite3VdbeChangeP3(p, addr, zP3, p3type);
1.180 + return addr;
1.181 +}
1.182 +
1.183 +/*
1.184 +** Create a new symbolic label for an instruction that has yet to be
1.185 +** coded. The symbolic label is really just a negative number. The
1.186 +** label can be used as the P2 value of an operation. Later, when
1.187 +** the label is resolved to a specific address, the VDBE will scan
1.188 +** through its operation list and change all values of P2 which match
1.189 +** the label into the resolved address.
1.190 +**
1.191 +** The VDBE knows that a P2 value is a label because labels are
1.192 +** always negative and P2 values are suppose to be non-negative.
1.193 +** Hence, a negative P2 value is a label that has yet to be resolved.
1.194 +**
1.195 +** Zero is returned if a malloc() fails.
1.196 +*/
1.197 +int sqlite3VdbeMakeLabel(Vdbe *p){
1.198 + int i;
1.199 + i = p->nLabel++;
1.200 + assert( p->magic==VDBE_MAGIC_INIT );
1.201 + if( i>=p->nLabelAlloc ){
1.202 + p->nLabelAlloc = p->nLabelAlloc*2 + 10;
1.203 + p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
1.204 + p->nLabelAlloc*sizeof(p->aLabel[0]));
1.205 + }
1.206 + if( p->aLabel ){
1.207 + p->aLabel[i] = -1;
1.208 + }
1.209 + return -1-i;
1.210 +}
1.211 +
1.212 +/*
1.213 +** Resolve label "x" to be the address of the next instruction to
1.214 +** be inserted. The parameter "x" must have been obtained from
1.215 +** a prior call to sqlite3VdbeMakeLabel().
1.216 +*/
1.217 +void sqlite3VdbeResolveLabel(Vdbe *p, int x){
1.218 + int j = -1-x;
1.219 + assert( p->magic==VDBE_MAGIC_INIT );
1.220 + assert( j>=0 && j<p->nLabel );
1.221 + if( p->aLabel ){
1.222 + p->aLabel[j] = p->nOp;
1.223 + }
1.224 +}
1.225 +
1.226 +/*
1.227 +** Return non-zero if opcode 'op' is guarenteed not to push more values
1.228 +** onto the VDBE stack than it pops off.
1.229 +*/
1.230 +static int opcodeNoPush(u8 op){
1.231 + /* The 10 NOPUSH_MASK_n constants are defined in the automatically
1.232 + ** generated header file opcodes.h. Each is a 16-bit bitmask, one
1.233 + ** bit corresponding to each opcode implemented by the virtual
1.234 + ** machine in vdbe.c. The bit is true if the word "no-push" appears
1.235 + ** in a comment on the same line as the "case OP_XXX:" in
1.236 + ** sqlite3VdbeExec() in vdbe.c.
1.237 + **
1.238 + ** If the bit is true, then the corresponding opcode is guarenteed not
1.239 + ** to grow the stack when it is executed. Otherwise, it may grow the
1.240 + ** stack by at most one entry.
1.241 + **
1.242 + ** NOPUSH_MASK_0 corresponds to opcodes 0 to 15. NOPUSH_MASK_1 contains
1.243 + ** one bit for opcodes 16 to 31, and so on.
1.244 + **
1.245 + ** 16-bit bitmasks (rather than 32-bit) are specified in opcodes.h
1.246 + ** because the file is generated by an awk program. Awk manipulates
1.247 + ** all numbers as floating-point and we don't want to risk a rounding
1.248 + ** error if someone builds with an awk that uses (for example) 32-bit
1.249 + ** IEEE floats.
1.250 + */
1.251 + static const u32 masks[5] = {
1.252 + NOPUSH_MASK_0 + (((unsigned)NOPUSH_MASK_1)<<16),
1.253 + NOPUSH_MASK_2 + (((unsigned)NOPUSH_MASK_3)<<16),
1.254 + NOPUSH_MASK_4 + (((unsigned)NOPUSH_MASK_5)<<16),
1.255 + NOPUSH_MASK_6 + (((unsigned)NOPUSH_MASK_7)<<16),
1.256 + NOPUSH_MASK_8 + (((unsigned)NOPUSH_MASK_9)<<16)
1.257 + };
1.258 + assert( op<32*5 );
1.259 + return (masks[op>>5] & (1<<(op&0x1F)));
1.260 +}
1.261 +
1.262 +#ifndef NDEBUG
1.263 +int sqlite3VdbeOpcodeNoPush(u8 op){
1.264 + return opcodeNoPush(op);
1.265 +}
1.266 +#endif
1.267 +
1.268 +/*
1.269 +** Loop through the program looking for P2 values that are negative.
1.270 +** Each such value is a label. Resolve the label by setting the P2
1.271 +** value to its correct non-zero value.
1.272 +**
1.273 +** This routine is called once after all opcodes have been inserted.
1.274 +**
1.275 +** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument
1.276 +** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by
1.277 +** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
1.278 +**
1.279 +** The integer *pMaxStack is set to the maximum number of vdbe stack
1.280 +** entries that static analysis reveals this program might need.
1.281 +**
1.282 +** This routine also does the following optimization: It scans for
1.283 +** Halt instructions where P1==SQLITE_CONSTRAINT or P2==OE_Abort or for
1.284 +** IdxInsert instructions where P2!=0. If no such instruction is
1.285 +** found, then every Statement instruction is changed to a Noop. In
1.286 +** this way, we avoid creating the statement journal file unnecessarily.
1.287 +*/
1.288 +static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs, int *pMaxStack){
1.289 + int i;
1.290 + int nMaxArgs = 0;
1.291 + int nMaxStack = p->nOp;
1.292 + Op *pOp;
1.293 + int *aLabel = p->aLabel;
1.294 + int doesStatementRollback = 0;
1.295 + int hasStatementBegin = 0;
1.296 + for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
1.297 + u8 opcode = pOp->opcode;
1.298 +
1.299 + if( opcode==OP_Function || opcode==OP_AggStep
1.300 +#ifndef SQLITE_OMIT_VIRTUALTABLE
1.301 + || opcode==OP_VUpdate
1.302 +#endif
1.303 + ){
1.304 + if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
1.305 + }
1.306 + if( opcode==OP_Halt ){
1.307 + if( pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort ){
1.308 + doesStatementRollback = 1;
1.309 + }
1.310 + }else if( opcode==OP_Statement ){
1.311 + hasStatementBegin = 1;
1.312 +#ifndef SQLITE_OMIT_VIRTUALTABLE
1.313 + }else if( opcode==OP_VUpdate || opcode==OP_VRename ){
1.314 + doesStatementRollback = 1;
1.315 + }else if( opcode==OP_VFilter ){
1.316 + int n;
1.317 + assert( p->nOp - i >= 3 );
1.318 + assert( pOp[-2].opcode==OP_Integer );
1.319 + n = pOp[-2].p1;
1.320 + if( n>nMaxArgs ) nMaxArgs = n;
1.321 +#endif
1.322 + }
1.323 + if( opcodeNoPush(opcode) ){
1.324 + nMaxStack--;
1.325 + }
1.326 +
1.327 + if( pOp->p2>=0 ) continue;
1.328 + assert( -1-pOp->p2<p->nLabel );
1.329 + pOp->p2 = aLabel[-1-pOp->p2];
1.330 + }
1.331 + sqlite3_free(p->aLabel);
1.332 + p->aLabel = 0;
1.333 +
1.334 + *pMaxFuncArgs = nMaxArgs;
1.335 + *pMaxStack = nMaxStack;
1.336 +
1.337 + /* If we never rollback a statement transaction, then statement
1.338 + ** transactions are not needed. So change every OP_Statement
1.339 + ** opcode into an OP_Noop. This avoid a call to sqlite3OsOpenExclusive()
1.340 + ** which can be expensive on some platforms.
1.341 + */
1.342 + if( hasStatementBegin && !doesStatementRollback ){
1.343 + for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
1.344 + if( pOp->opcode==OP_Statement ){
1.345 + pOp->opcode = OP_Noop;
1.346 + }
1.347 + }
1.348 + }
1.349 +}
1.350 +
1.351 +/*
1.352 +** Return the address of the next instruction to be inserted.
1.353 +*/
1.354 +int sqlite3VdbeCurrentAddr(Vdbe *p){
1.355 + assert( p->magic==VDBE_MAGIC_INIT );
1.356 + return p->nOp;
1.357 +}
1.358 +
1.359 +/*
1.360 +** Add a whole list of operations to the operation stack. Return the
1.361 +** address of the first operation added.
1.362 +*/
1.363 +int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
1.364 + int addr;
1.365 + assert( p->magic==VDBE_MAGIC_INIT );
1.366 + resizeOpArray(p, p->nOp + nOp);
1.367 + if( p->db->mallocFailed ){
1.368 + return 0;
1.369 + }
1.370 + addr = p->nOp;
1.371 + if( nOp>0 ){
1.372 + int i;
1.373 + VdbeOpList const *pIn = aOp;
1.374 + for(i=0; i<nOp; i++, pIn++){
1.375 + int p2 = pIn->p2;
1.376 + VdbeOp *pOut = &p->aOp[i+addr];
1.377 + pOut->opcode = pIn->opcode;
1.378 + pOut->p1 = pIn->p1;
1.379 + pOut->p2 = p2<0 ? addr + ADDR(p2) : p2;
1.380 + pOut->p3 = pIn->p3;
1.381 + pOut->p3type = pIn->p3 ? P3_STATIC : P3_NOTUSED;
1.382 +#ifdef SQLITE_DEBUG
1.383 + if( sqlite3_vdbe_addop_trace ){
1.384 + sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
1.385 + }
1.386 +#endif
1.387 + }
1.388 + p->nOp += nOp;
1.389 + }
1.390 + return addr;
1.391 +}
1.392 +
1.393 +/*
1.394 +** Change the value of the P1 operand for a specific instruction.
1.395 +** This routine is useful when a large program is loaded from a
1.396 +** static array using sqlite3VdbeAddOpList but we want to make a
1.397 +** few minor changes to the program.
1.398 +*/
1.399 +void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
1.400 + assert( p==0 || p->magic==VDBE_MAGIC_INIT );
1.401 + if( p && addr>=0 && p->nOp>addr && p->aOp ){
1.402 + p->aOp[addr].p1 = val;
1.403 + }
1.404 +}
1.405 +
1.406 +/*
1.407 +** Change the value of the P2 operand for a specific instruction.
1.408 +** This routine is useful for setting a jump destination.
1.409 +*/
1.410 +void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
1.411 + assert( val>=0 );
1.412 + assert( p==0 || p->magic==VDBE_MAGIC_INIT );
1.413 + if( p && addr>=0 && p->nOp>addr && p->aOp ){
1.414 + p->aOp[addr].p2 = val;
1.415 + }
1.416 +}
1.417 +
1.418 +/*
1.419 +** Change the P2 operand of instruction addr so that it points to
1.420 +** the address of the next instruction to be coded.
1.421 +*/
1.422 +void sqlite3VdbeJumpHere(Vdbe *p, int addr){
1.423 + sqlite3VdbeChangeP2(p, addr, p->nOp);
1.424 +}
1.425 +
1.426 +
1.427 +/*
1.428 +** If the input FuncDef structure is ephemeral, then free it. If
1.429 +** the FuncDef is not ephermal, then do nothing.
1.430 +*/
1.431 +static void freeEphemeralFunction(FuncDef *pDef){
1.432 + if( pDef && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
1.433 + sqlite3_free(pDef);
1.434 + }
1.435 +}
1.436 +
1.437 +/*
1.438 +** Delete a P3 value if necessary.
1.439 +*/
1.440 +static void freeP3(int p3type, void *p3){
1.441 + if( p3 ){
1.442 + switch( p3type ){
1.443 + case P3_DYNAMIC:
1.444 + case P3_KEYINFO:
1.445 + case P3_KEYINFO_HANDOFF: {
1.446 + sqlite3_free(p3);
1.447 + break;
1.448 + }
1.449 + case P3_MPRINTF: {
1.450 + sqlite3_free(p3);
1.451 + break;
1.452 + }
1.453 + case P3_VDBEFUNC: {
1.454 + VdbeFunc *pVdbeFunc = (VdbeFunc *)p3;
1.455 + freeEphemeralFunction(pVdbeFunc->pFunc);
1.456 + sqlite3VdbeDeleteAuxData(pVdbeFunc, 0);
1.457 + sqlite3_free(pVdbeFunc);
1.458 + break;
1.459 + }
1.460 + case P3_FUNCDEF: {
1.461 + freeEphemeralFunction((FuncDef*)p3);
1.462 + break;
1.463 + }
1.464 + case P3_MEM: {
1.465 + sqlite3ValueFree((sqlite3_value*)p3);
1.466 + break;
1.467 + }
1.468 + }
1.469 + }
1.470 +}
1.471 +
1.472 +
1.473 +/*
1.474 +** Change N opcodes starting at addr to No-ops.
1.475 +*/
1.476 +void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){
1.477 + if( p && p->aOp ){
1.478 + VdbeOp *pOp = &p->aOp[addr];
1.479 + while( N-- ){
1.480 + freeP3(pOp->p3type, pOp->p3);
1.481 + memset(pOp, 0, sizeof(pOp[0]));
1.482 + pOp->opcode = OP_Noop;
1.483 + pOp++;
1.484 + }
1.485 + }
1.486 +}
1.487 +
1.488 +/*
1.489 +** Change the value of the P3 operand for a specific instruction.
1.490 +** This routine is useful when a large program is loaded from a
1.491 +** static array using sqlite3VdbeAddOpList but we want to make a
1.492 +** few minor changes to the program.
1.493 +**
1.494 +** If n>=0 then the P3 operand is dynamic, meaning that a copy of
1.495 +** the string is made into memory obtained from sqlite3_malloc().
1.496 +** A value of n==0 means copy bytes of zP3 up to and including the
1.497 +** first null byte. If n>0 then copy n+1 bytes of zP3.
1.498 +**
1.499 +** If n==P3_KEYINFO it means that zP3 is a pointer to a KeyInfo structure.
1.500 +** A copy is made of the KeyInfo structure into memory obtained from
1.501 +** sqlite3_malloc, to be freed when the Vdbe is finalized.
1.502 +** n==P3_KEYINFO_HANDOFF indicates that zP3 points to a KeyInfo structure
1.503 +** stored in memory that the caller has obtained from sqlite3_malloc. The
1.504 +** caller should not free the allocation, it will be freed when the Vdbe is
1.505 +** finalized.
1.506 +**
1.507 +** Other values of n (P3_STATIC, P3_COLLSEQ etc.) indicate that zP3 points
1.508 +** to a string or structure that is guaranteed to exist for the lifetime of
1.509 +** the Vdbe. In these cases we can just copy the pointer.
1.510 +**
1.511 +** If addr<0 then change P3 on the most recently inserted instruction.
1.512 +*/
1.513 +void sqlite3VdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){
1.514 + Op *pOp;
1.515 + assert( p==0 || p->magic==VDBE_MAGIC_INIT );
1.516 + if( p==0 || p->aOp==0 || p->db->mallocFailed ){
1.517 + if (n != P3_KEYINFO) {
1.518 + freeP3(n, (void*)*(char**)&zP3);
1.519 + }
1.520 + return;
1.521 + }
1.522 + if( addr<0 || addr>=p->nOp ){
1.523 + addr = p->nOp - 1;
1.524 + if( addr<0 ) return;
1.525 + }
1.526 + pOp = &p->aOp[addr];
1.527 + freeP3(pOp->p3type, pOp->p3);
1.528 + pOp->p3 = 0;
1.529 + if( zP3==0 ){
1.530 + pOp->p3 = 0;
1.531 + pOp->p3type = P3_NOTUSED;
1.532 + }else if( n==P3_KEYINFO ){
1.533 + KeyInfo *pKeyInfo;
1.534 + int nField, nByte;
1.535 +
1.536 + nField = ((KeyInfo*)zP3)->nField;
1.537 + nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField;
1.538 + pKeyInfo = sqlite3_malloc( nByte );
1.539 + pOp->p3 = (char*)pKeyInfo;
1.540 + if( pKeyInfo ){
1.541 + unsigned char *aSortOrder;
1.542 + memcpy(pKeyInfo, zP3, nByte);
1.543 + aSortOrder = pKeyInfo->aSortOrder;
1.544 + if( aSortOrder ){
1.545 + pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField];
1.546 + memcpy(pKeyInfo->aSortOrder, aSortOrder, nField);
1.547 + }
1.548 + pOp->p3type = P3_KEYINFO;
1.549 + }else{
1.550 + p->db->mallocFailed = 1;
1.551 + pOp->p3type = P3_NOTUSED;
1.552 + }
1.553 + }else if( n==P3_KEYINFO_HANDOFF ){
1.554 + pOp->p3 = (char*)zP3;
1.555 + pOp->p3type = P3_KEYINFO;
1.556 + }else if( n<0 ){
1.557 + pOp->p3 = (char*)zP3;
1.558 + pOp->p3type = n;
1.559 + }else{
1.560 + if( n==0 ) n = strlen(zP3);
1.561 + pOp->p3 = sqlite3DbStrNDup(p->db, zP3, n);
1.562 + pOp->p3type = P3_DYNAMIC;
1.563 + }
1.564 +}
1.565 +
1.566 +#ifndef NDEBUG
1.567 +/*
1.568 +** Replace the P3 field of the most recently coded instruction with
1.569 +** comment text.
1.570 +*/
1.571 +void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
1.572 + va_list ap;
1.573 + assert( p->nOp>0 || p->aOp==0 );
1.574 + assert( p->aOp==0 || p->aOp[p->nOp-1].p3==0 || p->db->mallocFailed );
1.575 + va_start(ap, zFormat);
1.576 + sqlite3VdbeChangeP3(p, -1, sqlite3VMPrintf(p->db, zFormat, ap), P3_DYNAMIC);
1.577 + va_end(ap);
1.578 +}
1.579 +#endif
1.580 +
1.581 +/*
1.582 +** Return the opcode for a given address.
1.583 +*/
1.584 +VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
1.585 + assert( p->magic==VDBE_MAGIC_INIT );
1.586 + assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
1.587 + return ((addr>=0 && addr<p->nOp)?(&p->aOp[addr]):0);
1.588 +}
1.589 +
1.590 +#if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
1.591 + || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
1.592 +/*
1.593 +** Compute a string that describes the P3 parameter for an opcode.
1.594 +** Use zTemp for any required temporary buffer space.
1.595 +*/
1.596 +static char *displayP3(Op *pOp, char *zTemp, int nTemp){
1.597 + char *zP3;
1.598 + assert( nTemp>=20 );
1.599 + switch( pOp->p3type ){
1.600 + case P3_KEYINFO: {
1.601 + int i, j;
1.602 + KeyInfo *pKeyInfo = (KeyInfo*)pOp->p3;
1.603 + sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField);
1.604 + i = strlen(zTemp);
1.605 + for(j=0; j<pKeyInfo->nField; j++){
1.606 + CollSeq *pColl = pKeyInfo->aColl[j];
1.607 + if( pColl ){
1.608 + int n = strlen(pColl->zName);
1.609 + if( i+n>nTemp-6 ){
1.610 + memcpy(&zTemp[i],",...",4);
1.611 + break;
1.612 + }
1.613 + zTemp[i++] = ',';
1.614 + if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){
1.615 + zTemp[i++] = '-';
1.616 + }
1.617 + memcpy(&zTemp[i], pColl->zName,n+1);
1.618 + i += n;
1.619 + }else if( i+4<nTemp-6 ){
1.620 + memcpy(&zTemp[i],",nil",4);
1.621 + i += 4;
1.622 + }
1.623 + }
1.624 + zTemp[i++] = ')';
1.625 + zTemp[i] = 0;
1.626 + assert( i<nTemp );
1.627 + zP3 = zTemp;
1.628 + break;
1.629 + }
1.630 + case P3_COLLSEQ: {
1.631 + CollSeq *pColl = (CollSeq*)pOp->p3;
1.632 + sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName);
1.633 + zP3 = zTemp;
1.634 + break;
1.635 + }
1.636 + case P3_FUNCDEF: {
1.637 + FuncDef *pDef = (FuncDef*)pOp->p3;
1.638 + sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
1.639 + zP3 = zTemp;
1.640 + break;
1.641 + }
1.642 +#ifndef SQLITE_OMIT_VIRTUALTABLE
1.643 + case P3_VTAB: {
1.644 + sqlite3_vtab *pVtab = (sqlite3_vtab*)pOp->p3;
1.645 + sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
1.646 + zP3 = zTemp;
1.647 + break;
1.648 + }
1.649 +#endif
1.650 + default: {
1.651 + zP3 = pOp->p3;
1.652 + if( zP3==0 || pOp->opcode==OP_Noop ){
1.653 + zP3 = "";
1.654 + }
1.655 + }
1.656 + }
1.657 + assert( zP3!=0 );
1.658 + return zP3;
1.659 +}
1.660 +#endif
1.661 +
1.662 +/*
1.663 +** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
1.664 +**
1.665 +*/
1.666 +void sqlite3VdbeUsesBtree(Vdbe *p, int i){
1.667 + int mask;
1.668 + assert( i>=0 && i<p->db->nDb );
1.669 + assert( i<sizeof(p->btreeMask)*8 );
1.670 + mask = 1<<i;
1.671 + if( (p->btreeMask & mask)==0 ){
1.672 + p->btreeMask |= mask;
1.673 + sqlite3BtreeMutexArrayInsert(&p->aMutex, p->db->aDb[i].pBt);
1.674 + }
1.675 +}
1.676 +
1.677 +
1.678 +#if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
1.679 +/*
1.680 +** Print a single opcode. This routine is used for debugging only.
1.681 +*/
1.682 +void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
1.683 + char *zP3;
1.684 + char zPtr[50];
1.685 + static const char *zFormat1 = "%4d %-13s %4d %4d %s\n";
1.686 + if( pOut==0 ) pOut = stdout;
1.687 + zP3 = displayP3(pOp, zPtr, sizeof(zPtr));
1.688 + fprintf(pOut, zFormat1,
1.689 + pc, sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, zP3);
1.690 + fflush(pOut);
1.691 +}
1.692 +#endif
1.693 +
1.694 +/*
1.695 +** Release an array of N Mem elements
1.696 +*/
1.697 +static void releaseMemArray(Mem *p, int N){
1.698 + if( p ){
1.699 + while( N-->0 ){
1.700 + assert( N<2 || p[0].db==p[1].db );
1.701 + sqlite3VdbeMemRelease(p++);
1.702 + }
1.703 + }
1.704 +}
1.705 +
1.706 +#ifndef SQLITE_OMIT_EXPLAIN
1.707 +/*
1.708 +** Give a listing of the program in the virtual machine.
1.709 +**
1.710 +** The interface is the same as sqlite3VdbeExec(). But instead of
1.711 +** running the code, it invokes the callback once for each instruction.
1.712 +** This feature is used to implement "EXPLAIN".
1.713 +*/
1.714 +int sqlite3VdbeList(
1.715 + Vdbe *p /* The VDBE */
1.716 +){
1.717 + sqlite3 *db = p->db;
1.718 + int i;
1.719 + int rc = SQLITE_OK;
1.720 +
1.721 + assert( p->explain );
1.722 + if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE;
1.723 + assert( db->magic==SQLITE_MAGIC_BUSY );
1.724 + assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
1.725 +
1.726 + /* Even though this opcode does not put dynamic strings onto the
1.727 + ** the stack, they may become dynamic if the user calls
1.728 + ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
1.729 + */
1.730 + if( p->pTos==&p->aStack[4] ){
1.731 + releaseMemArray(p->aStack, 5);
1.732 + }
1.733 + p->resOnStack = 0;
1.734 +
1.735 + do{
1.736 + i = p->pc++;
1.737 + }while( i<p->nOp && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
1.738 + if( i>=p->nOp ){
1.739 + p->rc = SQLITE_OK;
1.740 + rc = SQLITE_DONE;
1.741 + }else if( db->u1.isInterrupted ){
1.742 + p->rc = SQLITE_INTERRUPT;
1.743 + rc = SQLITE_ERROR;
1.744 + sqlite3SetString(&p->zErrMsg, sqlite3ErrStr(p->rc), (char*)0);
1.745 + }else{
1.746 + Op *pOp = &p->aOp[i];
1.747 + Mem *pMem = p->aStack;
1.748 + pMem->flags = MEM_Int;
1.749 + pMem->type = SQLITE_INTEGER;
1.750 + pMem->u.i = i; /* Program counter */
1.751 + pMem++;
1.752 +
1.753 + pMem->flags = MEM_Static|MEM_Str|MEM_Term;
1.754 + pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
1.755 + assert( pMem->z!=0 );
1.756 + pMem->n = strlen(pMem->z);
1.757 + pMem->type = SQLITE_TEXT;
1.758 + pMem->enc = SQLITE_UTF8;
1.759 + pMem++;
1.760 +
1.761 + pMem->flags = MEM_Int;
1.762 + pMem->u.i = pOp->p1; /* P1 */
1.763 + pMem->type = SQLITE_INTEGER;
1.764 + pMem++;
1.765 +
1.766 + pMem->flags = MEM_Int;
1.767 + pMem->u.i = pOp->p2; /* P2 */
1.768 + pMem->type = SQLITE_INTEGER;
1.769 + pMem++;
1.770 +
1.771 + pMem->flags = MEM_Ephem|MEM_Str|MEM_Term; /* P3 */
1.772 + pMem->z = displayP3(pOp, pMem->zShort, sizeof(pMem->zShort));
1.773 + assert( pMem->z!=0 );
1.774 + pMem->n = strlen(pMem->z);
1.775 + pMem->type = SQLITE_TEXT;
1.776 + pMem->enc = SQLITE_UTF8;
1.777 +
1.778 + p->nResColumn = 5 - 2*(p->explain-1);
1.779 + p->pTos = pMem;
1.780 + p->rc = SQLITE_OK;
1.781 + p->resOnStack = 1;
1.782 + rc = SQLITE_ROW;
1.783 + }
1.784 + return rc;
1.785 +}
1.786 +#endif /* SQLITE_OMIT_EXPLAIN */
1.787 +
1.788 +#ifdef SQLITE_DEBUG
1.789 +/*
1.790 +** Print the SQL that was used to generate a VDBE program.
1.791 +*/
1.792 +void sqlite3VdbePrintSql(Vdbe *p){
1.793 + int nOp = p->nOp;
1.794 + VdbeOp *pOp;
1.795 + if( nOp<1 ) return;
1.796 + pOp = &p->aOp[nOp-1];
1.797 + if( pOp->opcode==OP_Noop && pOp->p3!=0 ){
1.798 + const char *z = pOp->p3;
1.799 + while( isspace(*(u8*)z) ) z++;
1.800 + printf("SQL: [%s]\n", z);
1.801 + }
1.802 +}
1.803 +#endif
1.804 +
1.805 +#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
1.806 +/*
1.807 +** Print an IOTRACE message showing SQL content.
1.808 +*/
1.809 +void sqlite3VdbeIOTraceSql(Vdbe *p){
1.810 + int nOp = p->nOp;
1.811 + VdbeOp *pOp;
1.812 + if( sqlite3_io_trace==0 ) return;
1.813 + if( nOp<1 ) return;
1.814 + pOp = &p->aOp[nOp-1];
1.815 + if( pOp->opcode==OP_Noop && pOp->p3!=0 ){
1.816 + int i, j;
1.817 + char z[1000];
1.818 + sqlite3_snprintf(sizeof(z), z, "%s", pOp->p3);
1.819 + for(i=0; isspace((unsigned char)z[i]); i++){}
1.820 + for(j=0; z[i]; i++){
1.821 + if( isspace((unsigned char)z[i]) ){
1.822 + if( z[i-1]!=' ' ){
1.823 + z[j++] = ' ';
1.824 + }
1.825 + }else{
1.826 + z[j++] = z[i];
1.827 + }
1.828 + }
1.829 + z[j] = 0;
1.830 + sqlite3_io_trace("SQL %s\n", z);
1.831 + }
1.832 +}
1.833 +#endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
1.834 +
1.835 +
1.836 +/*
1.837 +** Prepare a virtual machine for execution. This involves things such
1.838 +** as allocating stack space and initializing the program counter.
1.839 +** After the VDBE has be prepped, it can be executed by one or more
1.840 +** calls to sqlite3VdbeExec().
1.841 +**
1.842 +** This is the only way to move a VDBE from VDBE_MAGIC_INIT to
1.843 +** VDBE_MAGIC_RUN.
1.844 +*/
1.845 +void sqlite3VdbeMakeReady(
1.846 + Vdbe *p, /* The VDBE */
1.847 + int nVar, /* Number of '?' see in the SQL statement */
1.848 + int nMem, /* Number of memory cells to allocate */
1.849 + int nCursor, /* Number of cursors to allocate */
1.850 + int isExplain /* True if the EXPLAIN keywords is present */
1.851 +){
1.852 + int n;
1.853 + sqlite3 *db = p->db;
1.854 +
1.855 + assert( p!=0 );
1.856 + assert( p->magic==VDBE_MAGIC_INIT );
1.857 +
1.858 + /* There should be at least one opcode.
1.859 + */
1.860 + assert( p->nOp>0 );
1.861 +
1.862 + /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. This
1.863 + * is because the call to resizeOpArray() below may shrink the
1.864 + * p->aOp[] array to save memory if called when in VDBE_MAGIC_RUN
1.865 + * state.
1.866 + */
1.867 + p->magic = VDBE_MAGIC_RUN;
1.868 +
1.869 + /* No instruction ever pushes more than a single element onto the
1.870 + ** stack. And the stack never grows on successive executions of the
1.871 + ** same loop. So the total number of instructions is an upper bound
1.872 + ** on the maximum stack depth required. (Added later:) The
1.873 + ** resolveP2Values() call computes a tighter upper bound on the
1.874 + ** stack size.
1.875 + **
1.876 + ** Allocation all the stack space we will ever need.
1.877 + */
1.878 + if( p->aStack==0 ){
1.879 + int nArg; /* Maximum number of args passed to a user function. */
1.880 + int nStack; /* Maximum number of stack entries required */
1.881 + resolveP2Values(p, &nArg, &nStack);
1.882 + resizeOpArray(p, p->nOp);
1.883 + assert( nVar>=0 );
1.884 + assert( nStack<p->nOp );
1.885 + if( isExplain ){
1.886 + nStack = 10;
1.887 + }
1.888 + p->aStack = sqlite3DbMallocZero(db,
1.889 + nStack*sizeof(p->aStack[0]) /* aStack */
1.890 + + nArg*sizeof(Mem*) /* apArg */
1.891 + + nVar*sizeof(Mem) /* aVar */
1.892 + + nVar*sizeof(char*) /* azVar */
1.893 + + nMem*sizeof(Mem) /* aMem */
1.894 + + nCursor*sizeof(Cursor*) /* apCsr */
1.895 + );
1.896 + if( !db->mallocFailed ){
1.897 + p->aMem = &p->aStack[nStack];
1.898 + p->nMem = nMem;
1.899 + p->aVar = &p->aMem[nMem];
1.900 + p->nVar = nVar;
1.901 + p->okVar = 0;
1.902 + p->apArg = (Mem**)&p->aVar[nVar];
1.903 + p->azVar = (char**)&p->apArg[nArg];
1.904 + p->apCsr = (Cursor**)&p->azVar[nVar];
1.905 + p->nCursor = nCursor;
1.906 + for(n=0; n<nVar; n++){
1.907 + p->aVar[n].flags = MEM_Null;
1.908 + p->aVar[n].db = db;
1.909 + }
1.910 + for(n=0; n<nStack; n++){
1.911 + p->aStack[n].db = db;
1.912 + }
1.913 + }
1.914 + }
1.915 + for(n=0; n<p->nMem; n++){
1.916 + p->aMem[n].flags = MEM_Null;
1.917 + p->aMem[n].db = db;
1.918 + }
1.919 +
1.920 + p->pTos = &p->aStack[-1];
1.921 + p->pc = -1;
1.922 + p->rc = SQLITE_OK;
1.923 + p->uniqueCnt = 0;
1.924 + p->returnDepth = 0;
1.925 + p->errorAction = OE_Abort;
1.926 + p->popStack = 0;
1.927 + p->explain |= isExplain;
1.928 + p->magic = VDBE_MAGIC_RUN;
1.929 + p->nChange = 0;
1.930 + p->cacheCtr = 1;
1.931 + p->minWriteFileFormat = 255;
1.932 + p->openedStatement = 0;
1.933 +#ifdef VDBE_PROFILE
1.934 + {
1.935 + int i;
1.936 + for(i=0; i<p->nOp; i++){
1.937 + p->aOp[i].cnt = 0;
1.938 + p->aOp[i].cycles = 0;
1.939 + }
1.940 + }
1.941 +#endif
1.942 +}
1.943 +
1.944 +/*
1.945 +** Close a VDBE cursor and release all the resources that cursor happens
1.946 +** to hold.
1.947 +*/
1.948 +void sqlite3VdbeFreeCursor(Vdbe *p, Cursor *pCx){
1.949 + if( pCx==0 ){
1.950 + return;
1.951 + }
1.952 + if( pCx->pCursor ){
1.953 + sqlite3BtreeCloseCursor(pCx->pCursor);
1.954 + }
1.955 + if( pCx->pBt ){
1.956 + sqlite3BtreeClose(pCx->pBt);
1.957 + }
1.958 +#ifndef SQLITE_OMIT_VIRTUALTABLE
1.959 + if( pCx->pVtabCursor ){
1.960 + sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
1.961 + const sqlite3_module *pModule = pCx->pModule;
1.962 + p->inVtabMethod = 1;
1.963 + sqlite3SafetyOff(p->db);
1.964 + pModule->xClose(pVtabCursor);
1.965 + sqlite3SafetyOn(p->db);
1.966 + p->inVtabMethod = 0;
1.967 + }
1.968 +#endif
1.969 + sqlite3_free(pCx->pData);
1.970 + sqlite3_free(pCx->aType);
1.971 + sqlite3_free(pCx);
1.972 +}
1.973 +
1.974 +/*
1.975 +** Close all cursors except for VTab cursors that are currently
1.976 +** in use.
1.977 +*/
1.978 +static void closeAllCursorsExceptActiveVtabs(Vdbe *p){
1.979 + int i;
1.980 + if( p->apCsr==0 ) return;
1.981 + for(i=0; i<p->nCursor; i++){
1.982 + Cursor *pC = p->apCsr[i];
1.983 + if( pC && (!p->inVtabMethod || !pC->pVtabCursor) ){
1.984 + sqlite3VdbeFreeCursor(p, pC);
1.985 + p->apCsr[i] = 0;
1.986 + }
1.987 + }
1.988 +}
1.989 +
1.990 +/*
1.991 +** Clean up the VM after execution.
1.992 +**
1.993 +** This routine will automatically close any cursors, lists, and/or
1.994 +** sorters that were left open. It also deletes the values of
1.995 +** variables in the aVar[] array.
1.996 +*/
1.997 +static void Cleanup(Vdbe *p){
1.998 + int i;
1.999 + if( p->aStack ){
1.1000 + releaseMemArray(p->aStack, 1 + (p->pTos - p->aStack));
1.1001 + p->pTos = &p->aStack[-1];
1.1002 + }
1.1003 + closeAllCursorsExceptActiveVtabs(p);
1.1004 + releaseMemArray(p->aMem, p->nMem);
1.1005 + sqlite3VdbeFifoClear(&p->sFifo);
1.1006 + if( p->contextStack ){
1.1007 + for(i=0; i<p->contextStackTop; i++){
1.1008 + sqlite3VdbeFifoClear(&p->contextStack[i].sFifo);
1.1009 + }
1.1010 + sqlite3_free(p->contextStack);
1.1011 + }
1.1012 + p->contextStack = 0;
1.1013 + p->contextStackDepth = 0;
1.1014 + p->contextStackTop = 0;
1.1015 + sqlite3_free(p->zErrMsg);
1.1016 + p->zErrMsg = 0;
1.1017 + p->resOnStack = 0;
1.1018 +}
1.1019 +
1.1020 +/*
1.1021 +** Set the number of result columns that will be returned by this SQL
1.1022 +** statement. This is now set at compile time, rather than during
1.1023 +** execution of the vdbe program so that sqlite3_column_count() can
1.1024 +** be called on an SQL statement before sqlite3_step().
1.1025 +*/
1.1026 +void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
1.1027 + Mem *pColName;
1.1028 + int n;
1.1029 +
1.1030 + releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
1.1031 + sqlite3_free(p->aColName);
1.1032 + n = nResColumn*COLNAME_N;
1.1033 + p->nResColumn = nResColumn;
1.1034 + p->aColName = pColName = (Mem*)sqlite3DbMallocZero(p->db, sizeof(Mem)*n );
1.1035 + if( p->aColName==0 ) return;
1.1036 + while( n-- > 0 ){
1.1037 + pColName->flags = MEM_Null;
1.1038 + pColName->db = p->db;
1.1039 + pColName++;
1.1040 + }
1.1041 +}
1.1042 +
1.1043 +/*
1.1044 +** Set the name of the idx'th column to be returned by the SQL statement.
1.1045 +** zName must be a pointer to a nul terminated string.
1.1046 +**
1.1047 +** This call must be made after a call to sqlite3VdbeSetNumCols().
1.1048 +**
1.1049 +** If N==P3_STATIC it means that zName is a pointer to a constant static
1.1050 +** string and we can just copy the pointer. If it is P3_DYNAMIC, then
1.1051 +** the string is freed using sqlite3_free() when the vdbe is finished with
1.1052 +** it. Otherwise, N bytes of zName are copied.
1.1053 +*/
1.1054 +int sqlite3VdbeSetColName(Vdbe *p, int idx, int var, const char *zName, int N){
1.1055 + int rc;
1.1056 + Mem *pColName;
1.1057 + assert( idx<p->nResColumn );
1.1058 + assert( var<COLNAME_N );
1.1059 + if( p->db->mallocFailed ) return SQLITE_NOMEM;
1.1060 + assert( p->aColName!=0 );
1.1061 + pColName = &(p->aColName[idx+var*p->nResColumn]);
1.1062 + if( N==P3_DYNAMIC || N==P3_STATIC ){
1.1063 + rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, SQLITE_STATIC);
1.1064 + }else{
1.1065 + rc = sqlite3VdbeMemSetStr(pColName, zName, N, SQLITE_UTF8,SQLITE_TRANSIENT);
1.1066 + }
1.1067 + if( rc==SQLITE_OK && N==P3_DYNAMIC ){
1.1068 + pColName->flags = (pColName->flags&(~MEM_Static))|MEM_Dyn;
1.1069 + pColName->xDel = 0;
1.1070 + }
1.1071 + return rc;
1.1072 +}
1.1073 +
1.1074 +/*
1.1075 +** A read or write transaction may or may not be active on database handle
1.1076 +** db. If a transaction is active, commit it. If there is a
1.1077 +** write-transaction spanning more than one database file, this routine
1.1078 +** takes care of the master journal trickery.
1.1079 +*/
1.1080 +static int vdbeCommit(sqlite3 *db){
1.1081 + int i;
1.1082 + int nTrans = 0; /* Number of databases with an active write-transaction */
1.1083 + int rc = SQLITE_OK;
1.1084 + int needXcommit = 0;
1.1085 +
1.1086 + /* Before doing anything else, call the xSync() callback for any
1.1087 + ** virtual module tables written in this transaction. This has to
1.1088 + ** be done before determining whether a master journal file is
1.1089 + ** required, as an xSync() callback may add an attached database
1.1090 + ** to the transaction.
1.1091 + */
1.1092 + rc = sqlite3VtabSync(db, rc);
1.1093 + if( rc!=SQLITE_OK ){
1.1094 + return rc;
1.1095 + }
1.1096 +
1.1097 + /* This loop determines (a) if the commit hook should be invoked and
1.1098 + ** (b) how many database files have open write transactions, not
1.1099 + ** including the temp database. (b) is important because if more than
1.1100 + ** one database file has an open write transaction, a master journal
1.1101 + ** file is required for an atomic commit.
1.1102 + */
1.1103 + for(i=0; i<db->nDb; i++){
1.1104 + Btree *pBt = db->aDb[i].pBt;
1.1105 + if( sqlite3BtreeIsInTrans(pBt) ){
1.1106 + needXcommit = 1;
1.1107 + if( i!=1 ) nTrans++;
1.1108 + }
1.1109 + }
1.1110 +
1.1111 + /* If there are any write-transactions at all, invoke the commit hook */
1.1112 + if( needXcommit && db->xCommitCallback ){
1.1113 + sqlite3SafetyOff(db);
1.1114 + rc = db->xCommitCallback(db->pCommitArg);
1.1115 + sqlite3SafetyOn(db);
1.1116 + if( rc ){
1.1117 + return SQLITE_CONSTRAINT;
1.1118 + }
1.1119 + }
1.1120 +
1.1121 + /* The simple case - no more than one database file (not counting the
1.1122 + ** TEMP database) has a transaction active. There is no need for the
1.1123 + ** master-journal.
1.1124 + **
1.1125 + ** If the return value of sqlite3BtreeGetFilename() is a zero length
1.1126 + ** string, it means the main database is :memory:. In that case we do
1.1127 + ** not support atomic multi-file commits, so use the simple case then
1.1128 + ** too.
1.1129 + */
1.1130 + if( 0==strlen(sqlite3BtreeGetFilename(db->aDb[0].pBt)) || nTrans<=1 ){
1.1131 + for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
1.1132 + Btree *pBt = db->aDb[i].pBt;
1.1133 + if( pBt ){
1.1134 + rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
1.1135 + }
1.1136 + }
1.1137 +
1.1138 + /* Do the commit only if all databases successfully complete phase 1.
1.1139 + ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
1.1140 + ** IO error while deleting or truncating a journal file. It is unlikely,
1.1141 + ** but could happen. In this case abandon processing and return the error.
1.1142 + */
1.1143 + for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
1.1144 + Btree *pBt = db->aDb[i].pBt;
1.1145 + if( pBt ){
1.1146 + rc = sqlite3BtreeCommitPhaseTwo(pBt);
1.1147 + }
1.1148 + }
1.1149 + if( rc==SQLITE_OK ){
1.1150 + sqlite3VtabCommit(db);
1.1151 + }
1.1152 + }
1.1153 +
1.1154 + /* The complex case - There is a multi-file write-transaction active.
1.1155 + ** This requires a master journal file to ensure the transaction is
1.1156 + ** committed atomicly.
1.1157 + */
1.1158 +#ifndef SQLITE_OMIT_DISKIO
1.1159 + else{
1.1160 + sqlite3_vfs *pVfs = db->pVfs;
1.1161 + int needSync = 0;
1.1162 + char *zMaster = 0; /* File-name for the master journal */
1.1163 + char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
1.1164 + sqlite3_file *pMaster = 0;
1.1165 + i64 offset = 0;
1.1166 +
1.1167 + /* Select a master journal file name */
1.1168 + do {
1.1169 + u32 random;
1.1170 + sqlite3_free(zMaster);
1.1171 + sqlite3Randomness(sizeof(random), &random);
1.1172 + zMaster = sqlite3MPrintf(db, "%s-mj%08X", zMainFile, random&0x7fffffff);
1.1173 + if( !zMaster ){
1.1174 + return SQLITE_NOMEM;
1.1175 + }
1.1176 + }while( sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS) );
1.1177 +
1.1178 + /* Open the master journal. */
1.1179 + rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster,
1.1180 + SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
1.1181 + SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
1.1182 + );
1.1183 + if( rc!=SQLITE_OK ){
1.1184 + sqlite3_free(zMaster);
1.1185 + return rc;
1.1186 + }
1.1187 +
1.1188 + /* Write the name of each database file in the transaction into the new
1.1189 + ** master journal file. If an error occurs at this point close
1.1190 + ** and delete the master journal file. All the individual journal files
1.1191 + ** still have 'null' as the master journal pointer, so they will roll
1.1192 + ** back independently if a failure occurs.
1.1193 + */
1.1194 + for(i=0; i<db->nDb; i++){
1.1195 + Btree *pBt = db->aDb[i].pBt;
1.1196 + if( i==1 ) continue; /* Ignore the TEMP database */
1.1197 + if( sqlite3BtreeIsInTrans(pBt) ){
1.1198 + char const *zFile = sqlite3BtreeGetJournalname(pBt);
1.1199 + if( zFile[0]==0 ) continue; /* Ignore :memory: databases */
1.1200 + if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
1.1201 + needSync = 1;
1.1202 + }
1.1203 + rc = sqlite3OsWrite(pMaster, zFile, strlen(zFile)+1, offset);
1.1204 + offset += strlen(zFile)+1;
1.1205 + if( rc!=SQLITE_OK ){
1.1206 + sqlite3OsCloseFree(pMaster);
1.1207 + sqlite3OsDelete(pVfs, zMaster, 0);
1.1208 + sqlite3_free(zMaster);
1.1209 + return rc;
1.1210 + }
1.1211 + }
1.1212 + }
1.1213 +
1.1214 + /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
1.1215 + ** flag is set this is not required.
1.1216 + */
1.1217 + zMainFile = sqlite3BtreeGetDirname(db->aDb[0].pBt);
1.1218 + if( (needSync
1.1219 + && (0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL))
1.1220 + && (rc=sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))!=SQLITE_OK) ){
1.1221 + sqlite3OsCloseFree(pMaster);
1.1222 + sqlite3OsDelete(pVfs, zMaster, 0);
1.1223 + sqlite3_free(zMaster);
1.1224 + return rc;
1.1225 + }
1.1226 +
1.1227 + /* Sync all the db files involved in the transaction. The same call
1.1228 + ** sets the master journal pointer in each individual journal. If
1.1229 + ** an error occurs here, do not delete the master journal file.
1.1230 + **
1.1231 + ** If the error occurs during the first call to
1.1232 + ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
1.1233 + ** master journal file will be orphaned. But we cannot delete it,
1.1234 + ** in case the master journal file name was written into the journal
1.1235 + ** file before the failure occured.
1.1236 + */
1.1237 + for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
1.1238 + Btree *pBt = db->aDb[i].pBt;
1.1239 + if( pBt ){
1.1240 + rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
1.1241 + }
1.1242 + }
1.1243 + sqlite3OsCloseFree(pMaster);
1.1244 + if( rc!=SQLITE_OK ){
1.1245 + sqlite3_free(zMaster);
1.1246 + return rc;
1.1247 + }
1.1248 +
1.1249 + /* Delete the master journal file. This commits the transaction. After
1.1250 + ** doing this the directory is synced again before any individual
1.1251 + ** transaction files are deleted.
1.1252 + */
1.1253 + rc = sqlite3OsDelete(pVfs, zMaster, 1);
1.1254 + sqlite3_free(zMaster);
1.1255 + zMaster = 0;
1.1256 + if( rc ){
1.1257 + return rc;
1.1258 + }
1.1259 +
1.1260 + /* All files and directories have already been synced, so the following
1.1261 + ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
1.1262 + ** deleting or truncating journals. If something goes wrong while
1.1263 + ** this is happening we don't really care. The integrity of the
1.1264 + ** transaction is already guaranteed, but some stray 'cold' journals
1.1265 + ** may be lying around. Returning an error code won't help matters.
1.1266 + */
1.1267 + disable_simulated_io_errors();
1.1268 + for(i=0; i<db->nDb; i++){
1.1269 + Btree *pBt = db->aDb[i].pBt;
1.1270 + if( pBt ){
1.1271 + sqlite3BtreeCommitPhaseTwo(pBt);
1.1272 + }
1.1273 + }
1.1274 + enable_simulated_io_errors();
1.1275 +
1.1276 + sqlite3VtabCommit(db);
1.1277 + }
1.1278 +#endif
1.1279 +
1.1280 + return rc;
1.1281 +}
1.1282 +
1.1283 +/*
1.1284 +** This routine checks that the sqlite3.activeVdbeCnt count variable
1.1285 +** matches the number of vdbe's in the list sqlite3.pVdbe that are
1.1286 +** currently active. An assertion fails if the two counts do not match.
1.1287 +** This is an internal self-check only - it is not an essential processing
1.1288 +** step.
1.1289 +**
1.1290 +** This is a no-op if NDEBUG is defined.
1.1291 +*/
1.1292 +#ifndef NDEBUG
1.1293 +static void checkActiveVdbeCnt(sqlite3 *db){
1.1294 + Vdbe *p;
1.1295 + int cnt = 0;
1.1296 + p = db->pVdbe;
1.1297 + while( p ){
1.1298 + if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
1.1299 + cnt++;
1.1300 + }
1.1301 + p = p->pNext;
1.1302 + }
1.1303 + assert( cnt==db->activeVdbeCnt );
1.1304 +}
1.1305 +#else
1.1306 +#define checkActiveVdbeCnt(x)
1.1307 +#endif
1.1308 +
1.1309 +/*
1.1310 +** For every Btree that in database connection db which
1.1311 +** has been modified, "trip" or invalidate each cursor in
1.1312 +** that Btree might have been modified so that the cursor
1.1313 +** can never be used again. This happens when a rollback
1.1314 +*** occurs. We have to trip all the other cursors, even
1.1315 +** cursor from other VMs in different database connections,
1.1316 +** so that none of them try to use the data at which they
1.1317 +** were pointing and which now may have been changed due
1.1318 +** to the rollback.
1.1319 +**
1.1320 +** Remember that a rollback can delete tables complete and
1.1321 +** reorder rootpages. So it is not sufficient just to save
1.1322 +** the state of the cursor. We have to invalidate the cursor
1.1323 +** so that it is never used again.
1.1324 +*/
1.1325 +void invalidateCursorsOnModifiedBtrees(sqlite3 *db){
1.1326 + int i;
1.1327 + for(i=0; i<db->nDb; i++){
1.1328 + Btree *p = db->aDb[i].pBt;
1.1329 + if( p && sqlite3BtreeIsInTrans(p) ){
1.1330 + sqlite3BtreeTripAllCursors(p, SQLITE_ABORT);
1.1331 + }
1.1332 + }
1.1333 +}
1.1334 +
1.1335 +/*
1.1336 +** This routine is called the when a VDBE tries to halt. If the VDBE
1.1337 +** has made changes and is in autocommit mode, then commit those
1.1338 +** changes. If a rollback is needed, then do the rollback.
1.1339 +**
1.1340 +** This routine is the only way to move the state of a VM from
1.1341 +** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to
1.1342 +** call this on a VM that is in the SQLITE_MAGIC_HALT state.
1.1343 +**
1.1344 +** Return an error code. If the commit could not complete because of
1.1345 +** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it
1.1346 +** means the close did not happen and needs to be repeated.
1.1347 +*/
1.1348 +int sqlite3VdbeHalt(Vdbe *p){
1.1349 + sqlite3 *db = p->db;
1.1350 + int i;
1.1351 + int (*xFunc)(Btree *pBt) = 0; /* Function to call on each btree backend */
1.1352 + int isSpecialError; /* Set to true if SQLITE_NOMEM or IOERR */
1.1353 +
1.1354 + /* This function contains the logic that determines if a statement or
1.1355 + ** transaction will be committed or rolled back as a result of the
1.1356 + ** execution of this virtual machine.
1.1357 + **
1.1358 + ** If any of the following errors occur:
1.1359 + **
1.1360 + ** SQLITE_NOMEM
1.1361 + ** SQLITE_IOERR
1.1362 + ** SQLITE_FULL
1.1363 + ** SQLITE_INTERRUPT
1.1364 + **
1.1365 + ** Then the internal cache might have been left in an inconsistent
1.1366 + ** state. We need to rollback the statement transaction, if there is
1.1367 + ** one, or the complete transaction if there is no statement transaction.
1.1368 + */
1.1369 +
1.1370 + if( p->db->mallocFailed ){
1.1371 + p->rc = SQLITE_NOMEM;
1.1372 + }
1.1373 + closeAllCursorsExceptActiveVtabs(p);
1.1374 + if( p->magic!=VDBE_MAGIC_RUN ){
1.1375 + return SQLITE_OK;
1.1376 + }
1.1377 + checkActiveVdbeCnt(db);
1.1378 +
1.1379 + /* No commit or rollback needed if the program never started */
1.1380 + if( p->pc>=0 ){
1.1381 + int mrc; /* Primary error code from p->rc */
1.1382 +
1.1383 + /* Lock all btrees used by the statement */
1.1384 + sqlite3BtreeMutexArrayEnter(&p->aMutex);
1.1385 +
1.1386 + /* Check for one of the special errors */
1.1387 + mrc = p->rc & 0xff;
1.1388 + isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
1.1389 + || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL ;
1.1390 + if( isSpecialError ){
1.1391 + /* This loop does static analysis of the query to see which of the
1.1392 + ** following three categories it falls into:
1.1393 + **
1.1394 + ** Read-only
1.1395 + ** Query with statement journal
1.1396 + ** Query without statement journal
1.1397 + **
1.1398 + ** We could do something more elegant than this static analysis (i.e.
1.1399 + ** store the type of query as part of the compliation phase), but
1.1400 + ** handling malloc() or IO failure is a fairly obscure edge case so
1.1401 + ** this is probably easier. Todo: Might be an opportunity to reduce
1.1402 + ** code size a very small amount though...
1.1403 + */
1.1404 + int notReadOnly = 0;
1.1405 + int isStatement = 0;
1.1406 + assert(p->aOp || p->nOp==0);
1.1407 + for(i=0; i<p->nOp; i++){
1.1408 + switch( p->aOp[i].opcode ){
1.1409 + case OP_Transaction:
1.1410 + notReadOnly |= p->aOp[i].p2;
1.1411 + break;
1.1412 + case OP_Statement:
1.1413 + isStatement = 1;
1.1414 + break;
1.1415 + }
1.1416 + }
1.1417 +
1.1418 +
1.1419 + /* If the query was read-only, we need do no rollback at all. Otherwise,
1.1420 + ** proceed with the special handling.
1.1421 + */
1.1422 + if( notReadOnly || mrc!=SQLITE_INTERRUPT ){
1.1423 + if( p->rc==SQLITE_IOERR_BLOCKED && isStatement ){
1.1424 + xFunc = sqlite3BtreeRollbackStmt;
1.1425 + p->rc = SQLITE_BUSY;
1.1426 + } else if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && isStatement ){
1.1427 + xFunc = sqlite3BtreeRollbackStmt;
1.1428 + }else{
1.1429 + /* We are forced to roll back the active transaction. Before doing
1.1430 + ** so, abort any other statements this handle currently has active.
1.1431 + */
1.1432 + invalidateCursorsOnModifiedBtrees(db);
1.1433 + sqlite3RollbackAll(db);
1.1434 + db->autoCommit = 1;
1.1435 + }
1.1436 + }
1.1437 + }
1.1438 +
1.1439 + /* If the auto-commit flag is set and this is the only active vdbe, then
1.1440 + ** we do either a commit or rollback of the current transaction.
1.1441 + **
1.1442 + ** Note: This block also runs if one of the special errors handled
1.1443 + ** above has occured.
1.1444 + */
1.1445 + if( db->autoCommit && db->activeVdbeCnt==1 ){
1.1446 + if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
1.1447 + /* The auto-commit flag is true, and the vdbe program was
1.1448 + ** successful or hit an 'OR FAIL' constraint. This means a commit
1.1449 + ** is required.
1.1450 + */
1.1451 + int rc = vdbeCommit(db);
1.1452 + if( rc==SQLITE_BUSY ){
1.1453 + sqlite3BtreeMutexArrayLeave(&p->aMutex);
1.1454 + return SQLITE_BUSY;
1.1455 + }else if( rc!=SQLITE_OK ){
1.1456 + p->rc = rc;
1.1457 + sqlite3RollbackAll(db);
1.1458 + }else{
1.1459 + sqlite3CommitInternalChanges(db);
1.1460 + }
1.1461 + }else{
1.1462 + sqlite3RollbackAll(db);
1.1463 + }
1.1464 + }else if( !xFunc ){
1.1465 + if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
1.1466 + if( p->openedStatement ){
1.1467 + xFunc = sqlite3BtreeCommitStmt;
1.1468 + }
1.1469 + }else if( p->errorAction==OE_Abort ){
1.1470 + xFunc = sqlite3BtreeRollbackStmt;
1.1471 + }else{
1.1472 + invalidateCursorsOnModifiedBtrees(db);
1.1473 + sqlite3RollbackAll(db);
1.1474 + db->autoCommit = 1;
1.1475 + }
1.1476 + }
1.1477 +
1.1478 + /* If xFunc is not NULL, then it is one of sqlite3BtreeRollbackStmt or
1.1479 + ** sqlite3BtreeCommitStmt. Call it once on each backend. If an error occurs
1.1480 + ** and the return code is still SQLITE_OK, set the return code to the new
1.1481 + ** error value.
1.1482 + */
1.1483 + assert(!xFunc ||
1.1484 + xFunc==sqlite3BtreeCommitStmt ||
1.1485 + xFunc==sqlite3BtreeRollbackStmt
1.1486 + );
1.1487 + for(i=0; xFunc && i<db->nDb; i++){
1.1488 + int rc;
1.1489 + Btree *pBt = db->aDb[i].pBt;
1.1490 + if( pBt ){
1.1491 + rc = xFunc(pBt);
1.1492 + if( rc && (p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT) ){
1.1493 + p->rc = rc;
1.1494 + sqlite3SetString(&p->zErrMsg, 0);
1.1495 + }
1.1496 + }
1.1497 + }
1.1498 +
1.1499 + /* If this was an INSERT, UPDATE or DELETE and the statement was committed,
1.1500 + ** set the change counter.
1.1501 + */
1.1502 + if( p->changeCntOn && p->pc>=0 ){
1.1503 + if( !xFunc || xFunc==sqlite3BtreeCommitStmt ){
1.1504 + sqlite3VdbeSetChanges(db, p->nChange);
1.1505 + }else{
1.1506 + sqlite3VdbeSetChanges(db, 0);
1.1507 + }
1.1508 + p->nChange = 0;
1.1509 + }
1.1510 +
1.1511 + /* Rollback or commit any schema changes that occurred. */
1.1512 + if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){
1.1513 + sqlite3ResetInternalSchema(db, 0);
1.1514 + db->flags = (db->flags | SQLITE_InternChanges);
1.1515 + }
1.1516 +
1.1517 + /* Release the locks */
1.1518 + sqlite3BtreeMutexArrayLeave(&p->aMutex);
1.1519 + }
1.1520 +
1.1521 + /* We have successfully halted and closed the VM. Record this fact. */
1.1522 + if( p->pc>=0 ){
1.1523 + db->activeVdbeCnt--;
1.1524 + }
1.1525 + p->magic = VDBE_MAGIC_HALT;
1.1526 + checkActiveVdbeCnt(db);
1.1527 + if( p->db->mallocFailed ){
1.1528 + p->rc = SQLITE_NOMEM;
1.1529 + }
1.1530 + checkActiveVdbeCnt(db);
1.1531 +
1.1532 + return SQLITE_OK;
1.1533 +}
1.1534 +
1.1535 +
1.1536 +/*
1.1537 +** Each VDBE holds the result of the most recent sqlite3_step() call
1.1538 +** in p->rc. This routine sets that result back to SQLITE_OK.
1.1539 +*/
1.1540 +void sqlite3VdbeResetStepResult(Vdbe *p){
1.1541 + p->rc = SQLITE_OK;
1.1542 +}
1.1543 +
1.1544 +/*
1.1545 +** Clean up a VDBE after execution but do not delete the VDBE just yet.
1.1546 +** Write any error messages into *pzErrMsg. Return the result code.
1.1547 +**
1.1548 +** After this routine is run, the VDBE should be ready to be executed
1.1549 +** again.
1.1550 +**
1.1551 +** To look at it another way, this routine resets the state of the
1.1552 +** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
1.1553 +** VDBE_MAGIC_INIT.
1.1554 +*/
1.1555 +int sqlite3VdbeReset(Vdbe *p){
1.1556 + sqlite3 *db;
1.1557 + db = p->db;
1.1558 +
1.1559 + /* If the VM did not run to completion or if it encountered an
1.1560 + ** error, then it might not have been halted properly. So halt
1.1561 + ** it now.
1.1562 + */
1.1563 + sqlite3SafetyOn(db);
1.1564 + sqlite3VdbeHalt(p);
1.1565 + sqlite3SafetyOff(db);
1.1566 +
1.1567 + /* If the VDBE has be run even partially, then transfer the error code
1.1568 + ** and error message from the VDBE into the main database structure. But
1.1569 + ** if the VDBE has just been set to run but has not actually executed any
1.1570 + ** instructions yet, leave the main database error information unchanged.
1.1571 + */
1.1572 + if( p->pc>=0 ){
1.1573 + if( p->zErrMsg ){
1.1574 + sqlite3ValueSetStr(db->pErr,-1,p->zErrMsg,SQLITE_UTF8,sqlite3_free);
1.1575 + db->errCode = p->rc;
1.1576 + p->zErrMsg = 0;
1.1577 + }else if( p->rc ){
1.1578 + sqlite3Error(db, p->rc, 0);
1.1579 + }else{
1.1580 + sqlite3Error(db, SQLITE_OK, 0);
1.1581 + }
1.1582 + }else if( p->rc && p->expired ){
1.1583 + /* The expired flag was set on the VDBE before the first call
1.1584 + ** to sqlite3_step(). For consistency (since sqlite3_step() was
1.1585 + ** called), set the database error in this case as well.
1.1586 + */
1.1587 + sqlite3Error(db, p->rc, 0);
1.1588 + }
1.1589 +
1.1590 + /* Reclaim all memory used by the VDBE
1.1591 + */
1.1592 + Cleanup(p);
1.1593 +
1.1594 + /* Save profiling information from this VDBE run.
1.1595 + */
1.1596 + assert( p->pTos<&p->aStack[p->pc<0?0:p->pc] || !p->aStack );
1.1597 +#ifdef VDBE_PROFILE
1.1598 + {
1.1599 + FILE *out = fopen("vdbe_profile.out", "a");
1.1600 + if( out ){
1.1601 + int i;
1.1602 + fprintf(out, "---- ");
1.1603 + for(i=0; i<p->nOp; i++){
1.1604 + fprintf(out, "%02x", p->aOp[i].opcode);
1.1605 + }
1.1606 + fprintf(out, "\n");
1.1607 + for(i=0; i<p->nOp; i++){
1.1608 + fprintf(out, "%6d %10lld %8lld ",
1.1609 + p->aOp[i].cnt,
1.1610 + p->aOp[i].cycles,
1.1611 + p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
1.1612 + );
1.1613 + sqlite3VdbePrintOp(out, i, &p->aOp[i]);
1.1614 + }
1.1615 + fclose(out);
1.1616 + }
1.1617 + }
1.1618 +#endif
1.1619 + p->magic = VDBE_MAGIC_INIT;
1.1620 + p->aborted = 0;
1.1621 + return p->rc & db->errMask;
1.1622 +}
1.1623 +
1.1624 +/*
1.1625 +** Clean up and delete a VDBE after execution. Return an integer which is
1.1626 +** the result code. Write any error message text into *pzErrMsg.
1.1627 +*/
1.1628 +int sqlite3VdbeFinalize(Vdbe *p){
1.1629 + int rc = SQLITE_OK;
1.1630 + if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
1.1631 + rc = sqlite3VdbeReset(p);
1.1632 + assert( (rc & p->db->errMask)==rc );
1.1633 + }else if( p->magic!=VDBE_MAGIC_INIT ){
1.1634 + return SQLITE_MISUSE;
1.1635 + }
1.1636 + sqlite3VdbeDelete(p);
1.1637 + return rc;
1.1638 +}
1.1639 +
1.1640 +/*
1.1641 +** Call the destructor for each auxdata entry in pVdbeFunc for which
1.1642 +** the corresponding bit in mask is clear. Auxdata entries beyond 31
1.1643 +** are always destroyed. To destroy all auxdata entries, call this
1.1644 +** routine with mask==0.
1.1645 +*/
1.1646 +void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
1.1647 + int i;
1.1648 + for(i=0; i<pVdbeFunc->nAux; i++){
1.1649 + struct AuxData *pAux = &pVdbeFunc->apAux[i];
1.1650 + if( (i>31 || !(mask&(1<<i))) && pAux->pAux ){
1.1651 + if( pAux->xDelete ){
1.1652 + pAux->xDelete(pAux->pAux);
1.1653 + }
1.1654 + pAux->pAux = 0;
1.1655 + }
1.1656 + }
1.1657 +}
1.1658 +
1.1659 +/*
1.1660 +** Delete an entire VDBE.
1.1661 +*/
1.1662 +void sqlite3VdbeDelete(Vdbe *p){
1.1663 + int i;
1.1664 + if( p==0 ) return;
1.1665 + Cleanup(p);
1.1666 + if( p->pPrev ){
1.1667 + p->pPrev->pNext = p->pNext;
1.1668 + }else{
1.1669 + assert( p->db->pVdbe==p );
1.1670 + p->db->pVdbe = p->pNext;
1.1671 + }
1.1672 + if( p->pNext ){
1.1673 + p->pNext->pPrev = p->pPrev;
1.1674 + }
1.1675 + if( p->aOp ){
1.1676 + for(i=0; i<p->nOp; i++){
1.1677 + Op *pOp = &p->aOp[i];
1.1678 + freeP3(pOp->p3type, pOp->p3);
1.1679 + }
1.1680 + sqlite3_free(p->aOp);
1.1681 + }
1.1682 + releaseMemArray(p->aVar, p->nVar);
1.1683 + sqlite3_free(p->aLabel);
1.1684 + sqlite3_free(p->aStack);
1.1685 + releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
1.1686 + sqlite3_free(p->aColName);
1.1687 + sqlite3_free(p->zSql);
1.1688 + p->magic = VDBE_MAGIC_DEAD;
1.1689 + sqlite3_free(p);
1.1690 +}
1.1691 +
1.1692 +/*
1.1693 +** If a MoveTo operation is pending on the given cursor, then do that
1.1694 +** MoveTo now. Return an error code. If no MoveTo is pending, this
1.1695 +** routine does nothing and returns SQLITE_OK.
1.1696 +*/
1.1697 +int sqlite3VdbeCursorMoveto(Cursor *p){
1.1698 + if( p->deferredMoveto ){
1.1699 + int res, rc;
1.1700 +#ifdef SQLITE_TEST
1.1701 + extern int sqlite3_search_count;
1.1702 +#endif
1.1703 + assert( p->isTable );
1.1704 + rc = sqlite3BtreeMoveto(p->pCursor, 0, p->movetoTarget, 0, &res);
1.1705 + if( rc ) return rc;
1.1706 + *p->pIncrKey = 0;
1.1707 + p->lastRowid = keyToInt(p->movetoTarget);
1.1708 + p->rowidIsValid = res==0;
1.1709 + if( res<0 ){
1.1710 + rc = sqlite3BtreeNext(p->pCursor, &res);
1.1711 + if( rc ) return rc;
1.1712 + }
1.1713 +#ifdef SQLITE_TEST
1.1714 + sqlite3_search_count++;
1.1715 +#endif
1.1716 + p->deferredMoveto = 0;
1.1717 + p->cacheStatus = CACHE_STALE;
1.1718 + }
1.1719 + return SQLITE_OK;
1.1720 +}
1.1721 +
1.1722 +/*
1.1723 +** The following functions:
1.1724 +**
1.1725 +** sqlite3VdbeSerialType()
1.1726 +** sqlite3VdbeSerialTypeLen()
1.1727 +** sqlite3VdbeSerialRead()
1.1728 +** sqlite3VdbeSerialLen()
1.1729 +** sqlite3VdbeSerialWrite()
1.1730 +**
1.1731 +** encapsulate the code that serializes values for storage in SQLite
1.1732 +** data and index records. Each serialized value consists of a
1.1733 +** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
1.1734 +** integer, stored as a varint.
1.1735 +**
1.1736 +** In an SQLite index record, the serial type is stored directly before
1.1737 +** the blob of data that it corresponds to. In a table record, all serial
1.1738 +** types are stored at the start of the record, and the blobs of data at
1.1739 +** the end. Hence these functions allow the caller to handle the
1.1740 +** serial-type and data blob seperately.
1.1741 +**
1.1742 +** The following table describes the various storage classes for data:
1.1743 +**
1.1744 +** serial type bytes of data type
1.1745 +** -------------- --------------- ---------------
1.1746 +** 0 0 NULL
1.1747 +** 1 1 signed integer
1.1748 +** 2 2 signed integer
1.1749 +** 3 3 signed integer
1.1750 +** 4 4 signed integer
1.1751 +** 5 6 signed integer
1.1752 +** 6 8 signed integer
1.1753 +** 7 8 IEEE float
1.1754 +** 8 0 Integer constant 0
1.1755 +** 9 0 Integer constant 1
1.1756 +** 10,11 reserved for expansion
1.1757 +** N>=12 and even (N-12)/2 BLOB
1.1758 +** N>=13 and odd (N-13)/2 text
1.1759 +**
1.1760 +** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions
1.1761 +** of SQLite will not understand those serial types.
1.1762 +*/
1.1763 +
1.1764 +/*
1.1765 +** Return the serial-type for the value stored in pMem.
1.1766 +*/
1.1767 +u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
1.1768 + int flags = pMem->flags;
1.1769 + int n;
1.1770 +
1.1771 + if( flags&MEM_Null ){
1.1772 + return 0;
1.1773 + }
1.1774 + if( flags&MEM_Int ){
1.1775 + /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
1.1776 +# define MAX_6BYTE ((((i64)0x00001000)<<32)-1)
1.1777 + i64 i = pMem->u.i;
1.1778 + u64 u;
1.1779 + if( file_format>=4 && (i&1)==i ){
1.1780 + return 8+i;
1.1781 + }
1.1782 + u = i<0 ? -i : i;
1.1783 + if( u<=127 ) return 1;
1.1784 + if( u<=32767 ) return 2;
1.1785 + if( u<=8388607 ) return 3;
1.1786 + if( u<=2147483647 ) return 4;
1.1787 + if( u<=MAX_6BYTE ) return 5;
1.1788 + return 6;
1.1789 + }
1.1790 + if( flags&MEM_Real ){
1.1791 + return 7;
1.1792 + }
1.1793 + assert( flags&(MEM_Str|MEM_Blob) );
1.1794 + n = pMem->n;
1.1795 + if( flags & MEM_Zero ){
1.1796 + n += pMem->u.i;
1.1797 + }
1.1798 + assert( n>=0 );
1.1799 + return ((n*2) + 12 + ((flags&MEM_Str)!=0));
1.1800 +}
1.1801 +
1.1802 +/*
1.1803 +** Return the length of the data corresponding to the supplied serial-type.
1.1804 +*/
1.1805 +int sqlite3VdbeSerialTypeLen(u32 serial_type){
1.1806 + if( serial_type>=12 ){
1.1807 + return (serial_type-12)/2;
1.1808 + }else{
1.1809 + static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
1.1810 + return aSize[serial_type];
1.1811 + }
1.1812 +}
1.1813 +
1.1814 +/*
1.1815 +** If we are on an architecture with mixed-endian floating
1.1816 +** points (ex: ARM7) then swap the lower 4 bytes with the
1.1817 +** upper 4 bytes. Return the result.
1.1818 +**
1.1819 +** For most architectures, this is a no-op.
1.1820 +**
1.1821 +** (later): It is reported to me that the mixed-endian problem
1.1822 +** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems
1.1823 +** that early versions of GCC stored the two words of a 64-bit
1.1824 +** float in the wrong order. And that error has been propagated
1.1825 +** ever since. The blame is not necessarily with GCC, though.
1.1826 +** GCC might have just copying the problem from a prior compiler.
1.1827 +** I am also told that newer versions of GCC that follow a different
1.1828 +** ABI get the byte order right.
1.1829 +**
1.1830 +** Developers using SQLite on an ARM7 should compile and run their
1.1831 +** application using -DSQLITE_DEBUG=1 at least once. With DEBUG
1.1832 +** enabled, some asserts below will ensure that the byte order of
1.1833 +** floating point values is correct.
1.1834 +**
1.1835 +** (2007-08-30) Frank van Vugt has studied this problem closely
1.1836 +** and has send his findings to the SQLite developers. Frank
1.1837 +** writes that some Linux kernels offer floating point hardware
1.1838 +** emulation that uses only 32-bit mantissas instead of a full
1.1839 +** 48-bits as required by the IEEE standard. (This is the
1.1840 +** CONFIG_FPE_FASTFPE option.) On such systems, floating point
1.1841 +** byte swapping becomes very complicated. To avoid problems,
1.1842 +** the necessary byte swapping is carried out using a 64-bit integer
1.1843 +** rather than a 64-bit float. Frank assures us that the code here
1.1844 +** works for him. We, the developers, have no way to independently
1.1845 +** verify this, but Frank seems to know what he is talking about
1.1846 +** so we trust him.
1.1847 +*/
1.1848 +#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
1.1849 +static u64 floatSwap(u64 in){
1.1850 + union {
1.1851 + u64 r;
1.1852 + u32 i[2];
1.1853 + } u;
1.1854 + u32 t;
1.1855 +
1.1856 + u.r = in;
1.1857 + t = u.i[0];
1.1858 + u.i[0] = u.i[1];
1.1859 + u.i[1] = t;
1.1860 + return u.r;
1.1861 +}
1.1862 +# define swapMixedEndianFloat(X) X = floatSwap(X)
1.1863 +#else
1.1864 +# define swapMixedEndianFloat(X)
1.1865 +#endif
1.1866 +
1.1867 +/*
1.1868 +** Write the serialized data blob for the value stored in pMem into
1.1869 +** buf. It is assumed that the caller has allocated sufficient space.
1.1870 +** Return the number of bytes written.
1.1871 +**
1.1872 +** nBuf is the amount of space left in buf[]. nBuf must always be
1.1873 +** large enough to hold the entire field. Except, if the field is
1.1874 +** a blob with a zero-filled tail, then buf[] might be just the right
1.1875 +** size to hold everything except for the zero-filled tail. If buf[]
1.1876 +** is only big enough to hold the non-zero prefix, then only write that
1.1877 +** prefix into buf[]. But if buf[] is large enough to hold both the
1.1878 +** prefix and the tail then write the prefix and set the tail to all
1.1879 +** zeros.
1.1880 +**
1.1881 +** Return the number of bytes actually written into buf[]. The number
1.1882 +** of bytes in the zero-filled tail is included in the return value only
1.1883 +** if those bytes were zeroed in buf[].
1.1884 +*/
1.1885 +int sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){
1.1886 + u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
1.1887 + int len;
1.1888 +
1.1889 + /* Integer and Real */
1.1890 + if( serial_type<=7 && serial_type>0 ){
1.1891 + u64 v;
1.1892 + int i;
1.1893 + if( serial_type==7 ){
1.1894 + assert( sizeof(v)==sizeof(pMem->r) );
1.1895 + memcpy(&v, &pMem->r, sizeof(v));
1.1896 + swapMixedEndianFloat(v);
1.1897 + }else{
1.1898 + v = pMem->u.i;
1.1899 + }
1.1900 + len = i = sqlite3VdbeSerialTypeLen(serial_type);
1.1901 + assert( len<=nBuf );
1.1902 + while( i-- ){
1.1903 + buf[i] = (v&0xFF);
1.1904 + v >>= 8;
1.1905 + }
1.1906 + return len;
1.1907 + }
1.1908 +
1.1909 + /* String or blob */
1.1910 + if( serial_type>=12 ){
1.1911 + assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.i:0)
1.1912 + == sqlite3VdbeSerialTypeLen(serial_type) );
1.1913 + assert( pMem->n<=nBuf );
1.1914 + len = pMem->n;
1.1915 + memcpy(buf, pMem->z, len);
1.1916 + if( pMem->flags & MEM_Zero ){
1.1917 + len += pMem->u.i;
1.1918 + if( len>nBuf ){
1.1919 + len = nBuf;
1.1920 + }
1.1921 + memset(&buf[pMem->n], 0, len-pMem->n);
1.1922 + }
1.1923 + return len;
1.1924 + }
1.1925 +
1.1926 + /* NULL or constants 0 or 1 */
1.1927 + return 0;
1.1928 +}
1.1929 +
1.1930 +/*
1.1931 +** Deserialize the data blob pointed to by buf as serial type serial_type
1.1932 +** and store the result in pMem. Return the number of bytes read.
1.1933 +*/
1.1934 +int sqlite3VdbeSerialGet(
1.1935 + const unsigned char *buf, /* Buffer to deserialize from */
1.1936 + u32 serial_type, /* Serial type to deserialize */
1.1937 + Mem *pMem /* Memory cell to write value into */
1.1938 +){
1.1939 + switch( serial_type ){
1.1940 + case 10: /* Reserved for future use */
1.1941 + case 11: /* Reserved for future use */
1.1942 + case 0: { /* NULL */
1.1943 + pMem->flags = MEM_Null;
1.1944 + break;
1.1945 + }
1.1946 + case 1: { /* 1-byte signed integer */
1.1947 + pMem->u.i = (signed char)buf[0];
1.1948 + pMem->flags = MEM_Int;
1.1949 + return 1;
1.1950 + }
1.1951 + case 2: { /* 2-byte signed integer */
1.1952 + pMem->u.i = (((signed char)buf[0])<<8) | buf[1];
1.1953 + pMem->flags = MEM_Int;
1.1954 + return 2;
1.1955 + }
1.1956 + case 3: { /* 3-byte signed integer */
1.1957 + pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
1.1958 + pMem->flags = MEM_Int;
1.1959 + return 3;
1.1960 + }
1.1961 + case 4: { /* 4-byte signed integer */
1.1962 + pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
1.1963 + pMem->flags = MEM_Int;
1.1964 + return 4;
1.1965 + }
1.1966 + case 5: { /* 6-byte signed integer */
1.1967 + u64 x = (((signed char)buf[0])<<8) | buf[1];
1.1968 + u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
1.1969 + x = (x<<32) | y;
1.1970 + pMem->u.i = *(i64*)&x;
1.1971 + pMem->flags = MEM_Int;
1.1972 + return 6;
1.1973 + }
1.1974 + case 6: /* 8-byte signed integer */
1.1975 + case 7: { /* IEEE floating point */
1.1976 + u64 x;
1.1977 + u32 y;
1.1978 +#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
1.1979 + /* Verify that integers and floating point values use the same
1.1980 + ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
1.1981 + ** defined that 64-bit floating point values really are mixed
1.1982 + ** endian.
1.1983 + */
1.1984 + static const u64 t1 = ((u64)0x3ff00000)<<32;
1.1985 + static const double r1 = 1.0;
1.1986 + u64 t2 = t1;
1.1987 + swapMixedEndianFloat(t2);
1.1988 + assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
1.1989 +#endif
1.1990 +
1.1991 + x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
1.1992 + y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
1.1993 + x = (x<<32) | y;
1.1994 + if( serial_type==6 ){
1.1995 + pMem->u.i = *(i64*)&x;
1.1996 + pMem->flags = MEM_Int;
1.1997 + }else{
1.1998 + assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
1.1999 + swapMixedEndianFloat(x);
1.2000 + memcpy(&pMem->r, &x, sizeof(x));
1.2001 + pMem->flags = MEM_Real;
1.2002 + }
1.2003 + return 8;
1.2004 + }
1.2005 + case 8: /* Integer 0 */
1.2006 + case 9: { /* Integer 1 */
1.2007 + pMem->u.i = serial_type-8;
1.2008 + pMem->flags = MEM_Int;
1.2009 + return 0;
1.2010 + }
1.2011 + default: {
1.2012 + int len = (serial_type-12)/2;
1.2013 + pMem->z = (char *)buf;
1.2014 + pMem->n = len;
1.2015 + pMem->xDel = 0;
1.2016 + if( serial_type&0x01 ){
1.2017 + pMem->flags = MEM_Str | MEM_Ephem;
1.2018 + }else{
1.2019 + pMem->flags = MEM_Blob | MEM_Ephem;
1.2020 + }
1.2021 + return len;
1.2022 + }
1.2023 + }
1.2024 + return 0;
1.2025 +}
1.2026 +
1.2027 +/*
1.2028 +** The header of a record consists of a sequence variable-length integers.
1.2029 +** These integers are almost always small and are encoded as a single byte.
1.2030 +** The following macro takes advantage this fact to provide a fast decode
1.2031 +** of the integers in a record header. It is faster for the common case
1.2032 +** where the integer is a single byte. It is a little slower when the
1.2033 +** integer is two or more bytes. But overall it is faster.
1.2034 +**
1.2035 +** The following expressions are equivalent:
1.2036 +**
1.2037 +** x = sqlite3GetVarint32( A, &B );
1.2038 +**
1.2039 +** x = GetVarint( A, B );
1.2040 +**
1.2041 +*/
1.2042 +#define GetVarint(A,B) ((B = *(A))<=0x7f ? 1 : sqlite3GetVarint32(A, &B))
1.2043 +
1.2044 +/*
1.2045 +** This function compares the two table rows or index records specified by
1.2046 +** {nKey1, pKey1} and {nKey2, pKey2}, returning a negative, zero
1.2047 +** or positive integer if {nKey1, pKey1} is less than, equal to or
1.2048 +** greater than {nKey2, pKey2}. Both Key1 and Key2 must be byte strings
1.2049 +** composed by the OP_MakeRecord opcode of the VDBE.
1.2050 +*/
1.2051 +int sqlite3VdbeRecordCompare(
1.2052 + void *userData,
1.2053 + int nKey1, const void *pKey1,
1.2054 + int nKey2, const void *pKey2
1.2055 +){
1.2056 + KeyInfo *pKeyInfo = (KeyInfo*)userData;
1.2057 + u32 d1, d2; /* Offset into aKey[] of next data element */
1.2058 + u32 idx1, idx2; /* Offset into aKey[] of next header element */
1.2059 + u32 szHdr1, szHdr2; /* Number of bytes in header */
1.2060 + int i = 0;
1.2061 + int nField;
1.2062 + int rc = 0;
1.2063 + const unsigned char *aKey1 = (const unsigned char *)pKey1;
1.2064 + const unsigned char *aKey2 = (const unsigned char *)pKey2;
1.2065 +
1.2066 + Mem mem1;
1.2067 + Mem mem2;
1.2068 + mem1.enc = pKeyInfo->enc;
1.2069 + mem1.db = pKeyInfo->db;
1.2070 + mem2.enc = pKeyInfo->enc;
1.2071 + mem2.db = pKeyInfo->db;
1.2072 +
1.2073 + idx1 = GetVarint(aKey1, szHdr1);
1.2074 + d1 = szHdr1;
1.2075 + idx2 = GetVarint(aKey2, szHdr2);
1.2076 + d2 = szHdr2;
1.2077 + nField = pKeyInfo->nField;
1.2078 + while( idx1<szHdr1 && idx2<szHdr2 ){
1.2079 + u32 serial_type1;
1.2080 + u32 serial_type2;
1.2081 +
1.2082 + /* Read the serial types for the next element in each key. */
1.2083 + idx1 += GetVarint( aKey1+idx1, serial_type1 );
1.2084 + if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
1.2085 + idx2 += GetVarint( aKey2+idx2, serial_type2 );
1.2086 + if( d2>=nKey2 && sqlite3VdbeSerialTypeLen(serial_type2)>0 ) break;
1.2087 +
1.2088 + /* Extract the values to be compared.
1.2089 + */
1.2090 + d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
1.2091 + d2 += sqlite3VdbeSerialGet(&aKey2[d2], serial_type2, &mem2);
1.2092 +
1.2093 + /* Do the comparison
1.2094 + */
1.2095 + rc = sqlite3MemCompare(&mem1, &mem2, i<nField ? pKeyInfo->aColl[i] : 0);
1.2096 + if( mem1.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem1);
1.2097 + if( mem2.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem2);
1.2098 + if( rc!=0 ){
1.2099 + break;
1.2100 + }
1.2101 + i++;
1.2102 + }
1.2103 +
1.2104 + /* One of the keys ran out of fields, but all the fields up to that point
1.2105 + ** were equal. If the incrKey flag is true, then the second key is
1.2106 + ** treated as larger.
1.2107 + */
1.2108 + if( rc==0 ){
1.2109 + if( pKeyInfo->incrKey ){
1.2110 + rc = -1;
1.2111 + }else if( d1<nKey1 ){
1.2112 + rc = 1;
1.2113 + }else if( d2<nKey2 ){
1.2114 + rc = -1;
1.2115 + }
1.2116 + }else if( pKeyInfo->aSortOrder && i<pKeyInfo->nField
1.2117 + && pKeyInfo->aSortOrder[i] ){
1.2118 + rc = -rc;
1.2119 + }
1.2120 +
1.2121 + return rc;
1.2122 +}
1.2123 +
1.2124 +/*
1.2125 +** The argument is an index entry composed using the OP_MakeRecord opcode.
1.2126 +** The last entry in this record should be an integer (specifically
1.2127 +** an integer rowid). This routine returns the number of bytes in
1.2128 +** that integer.
1.2129 +*/
1.2130 +int sqlite3VdbeIdxRowidLen(const u8 *aKey){
1.2131 + u32 szHdr; /* Size of the header */
1.2132 + u32 typeRowid; /* Serial type of the rowid */
1.2133 +
1.2134 + sqlite3GetVarint32(aKey, &szHdr);
1.2135 + sqlite3GetVarint32(&aKey[szHdr-1], &typeRowid);
1.2136 + return sqlite3VdbeSerialTypeLen(typeRowid);
1.2137 +}
1.2138 +
1.2139 +
1.2140 +/*
1.2141 +** pCur points at an index entry created using the OP_MakeRecord opcode.
1.2142 +** Read the rowid (the last field in the record) and store it in *rowid.
1.2143 +** Return SQLITE_OK if everything works, or an error code otherwise.
1.2144 +*/
1.2145 +int sqlite3VdbeIdxRowid(BtCursor *pCur, i64 *rowid){
1.2146 + i64 nCellKey = 0;
1.2147 + int rc;
1.2148 + u32 szHdr; /* Size of the header */
1.2149 + u32 typeRowid; /* Serial type of the rowid */
1.2150 + u32 lenRowid; /* Size of the rowid */
1.2151 + Mem m, v;
1.2152 +
1.2153 + sqlite3BtreeKeySize(pCur, &nCellKey);
1.2154 + if( nCellKey<=0 ){
1.2155 + return SQLITE_CORRUPT_BKPT;
1.2156 + }
1.2157 + rc = sqlite3VdbeMemFromBtree(pCur, 0, nCellKey, 1, &m);
1.2158 + if( rc ){
1.2159 + return rc;
1.2160 + }
1.2161 + sqlite3GetVarint32((u8*)m.z, &szHdr);
1.2162 + sqlite3GetVarint32((u8*)&m.z[szHdr-1], &typeRowid);
1.2163 + lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
1.2164 + sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
1.2165 + *rowid = v.u.i;
1.2166 + sqlite3VdbeMemRelease(&m);
1.2167 + return SQLITE_OK;
1.2168 +}
1.2169 +
1.2170 +/*
1.2171 +** Compare the key of the index entry that cursor pC is point to against
1.2172 +** the key string in pKey (of length nKey). Write into *pRes a number
1.2173 +** that is negative, zero, or positive if pC is less than, equal to,
1.2174 +** or greater than pKey. Return SQLITE_OK on success.
1.2175 +**
1.2176 +** pKey is either created without a rowid or is truncated so that it
1.2177 +** omits the rowid at the end. The rowid at the end of the index entry
1.2178 +** is ignored as well.
1.2179 +*/
1.2180 +int sqlite3VdbeIdxKeyCompare(
1.2181 + Cursor *pC, /* The cursor to compare against */
1.2182 + int nKey, const u8 *pKey, /* The key to compare */
1.2183 + int *res /* Write the comparison result here */
1.2184 +){
1.2185 + i64 nCellKey = 0;
1.2186 + int rc;
1.2187 + BtCursor *pCur = pC->pCursor;
1.2188 + int lenRowid;
1.2189 + Mem m;
1.2190 +
1.2191 + sqlite3BtreeKeySize(pCur, &nCellKey);
1.2192 + if( nCellKey<=0 ){
1.2193 + *res = 0;
1.2194 + return SQLITE_OK;
1.2195 + }
1.2196 + rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, nCellKey, 1, &m);
1.2197 + if( rc ){
1.2198 + return rc;
1.2199 + }
1.2200 + lenRowid = sqlite3VdbeIdxRowidLen((u8*)m.z);
1.2201 + *res = sqlite3VdbeRecordCompare(pC->pKeyInfo, m.n-lenRowid, m.z, nKey, pKey);
1.2202 + sqlite3VdbeMemRelease(&m);
1.2203 + return SQLITE_OK;
1.2204 +}
1.2205 +
1.2206 +/*
1.2207 +** This routine sets the value to be returned by subsequent calls to
1.2208 +** sqlite3_changes() on the database handle 'db'.
1.2209 +*/
1.2210 +void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
1.2211 + assert( sqlite3_mutex_held(db->mutex) );
1.2212 + db->nChange = nChange;
1.2213 + db->nTotalChange += nChange;
1.2214 +}
1.2215 +
1.2216 +/*
1.2217 +** Set a flag in the vdbe to update the change counter when it is finalised
1.2218 +** or reset.
1.2219 +*/
1.2220 +void sqlite3VdbeCountChanges(Vdbe *v){
1.2221 + v->changeCntOn = 1;
1.2222 +}
1.2223 +
1.2224 +/*
1.2225 +** Mark every prepared statement associated with a database connection
1.2226 +** as expired.
1.2227 +**
1.2228 +** An expired statement means that recompilation of the statement is
1.2229 +** recommend. Statements expire when things happen that make their
1.2230 +** programs obsolete. Removing user-defined functions or collating
1.2231 +** sequences, or changing an authorization function are the types of
1.2232 +** things that make prepared statements obsolete.
1.2233 +*/
1.2234 +void sqlite3ExpirePreparedStatements(sqlite3 *db){
1.2235 + Vdbe *p;
1.2236 + for(p = db->pVdbe; p; p=p->pNext){
1.2237 + p->expired = 1;
1.2238 + }
1.2239 +}
1.2240 +
1.2241 +/*
1.2242 +** Return the database associated with the Vdbe.
1.2243 +*/
1.2244 +sqlite3 *sqlite3VdbeDb(Vdbe *v){
1.2245 + return v->db;
1.2246 +}