extensions/sqlite/sqlite-source/vdbeaux.c
branchrefac-jit
changeset 2284 026da5437111
parent 2192 7602d7fb60d9
child 2288 15c77b21589a
     1.1 --- a/extensions/sqlite/sqlite-source/vdbeaux.c	Fri Jul 11 06:51:21 2008 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,2243 +0,0 @@
     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 -}