xref: /sqlite-3.40.0/src/vdbeaux.c (revision dfe4e6bb)
1 /*
2 ** 2003 September 6
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains code used for creating, destroying, and populating
13 ** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.)
14 */
15 #include "sqliteInt.h"
16 #include "vdbeInt.h"
17 
18 /*
19 ** Create a new virtual database engine.
20 */
21 Vdbe *sqlite3VdbeCreate(Parse *pParse){
22   sqlite3 *db = pParse->db;
23   Vdbe *p;
24   p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) );
25   if( p==0 ) return 0;
26   memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp));
27   p->db = db;
28   if( db->pVdbe ){
29     db->pVdbe->pPrev = p;
30   }
31   p->pNext = db->pVdbe;
32   p->pPrev = 0;
33   db->pVdbe = p;
34   p->magic = VDBE_MAGIC_INIT;
35   p->pParse = pParse;
36   assert( pParse->aLabel==0 );
37   assert( pParse->nLabel==0 );
38   assert( pParse->nOpAlloc==0 );
39   assert( pParse->szOpAlloc==0 );
40   return p;
41 }
42 
43 /*
44 ** Change the error string stored in Vdbe.zErrMsg
45 */
46 void sqlite3VdbeError(Vdbe *p, const char *zFormat, ...){
47   va_list ap;
48   sqlite3DbFree(p->db, p->zErrMsg);
49   va_start(ap, zFormat);
50   p->zErrMsg = sqlite3VMPrintf(p->db, zFormat, ap);
51   va_end(ap);
52 }
53 
54 /*
55 ** Remember the SQL string for a prepared statement.
56 */
57 void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
58   assert( isPrepareV2==1 || isPrepareV2==0 );
59   if( p==0 ) return;
60 #if defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_ENABLE_SQLLOG)
61   if( !isPrepareV2 ) return;
62 #endif
63   assert( p->zSql==0 );
64   p->zSql = sqlite3DbStrNDup(p->db, z, n);
65   p->isPrepareV2 = (u8)isPrepareV2;
66 }
67 
68 /*
69 ** Swap all content between two VDBE structures.
70 */
71 void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
72   Vdbe tmp, *pTmp;
73   char *zTmp;
74   assert( pA->db==pB->db );
75   tmp = *pA;
76   *pA = *pB;
77   *pB = tmp;
78   pTmp = pA->pNext;
79   pA->pNext = pB->pNext;
80   pB->pNext = pTmp;
81   pTmp = pA->pPrev;
82   pA->pPrev = pB->pPrev;
83   pB->pPrev = pTmp;
84   zTmp = pA->zSql;
85   pA->zSql = pB->zSql;
86   pB->zSql = zTmp;
87   pB->isPrepareV2 = pA->isPrepareV2;
88 }
89 
90 /*
91 ** Resize the Vdbe.aOp array so that it is at least nOp elements larger
92 ** than its current size. nOp is guaranteed to be less than or equal
93 ** to 1024/sizeof(Op).
94 **
95 ** If an out-of-memory error occurs while resizing the array, return
96 ** SQLITE_NOMEM. In this case Vdbe.aOp and Parse.nOpAlloc remain
97 ** unchanged (this is so that any opcodes already allocated can be
98 ** correctly deallocated along with the rest of the Vdbe).
99 */
100 static int growOpArray(Vdbe *v, int nOp){
101   VdbeOp *pNew;
102   Parse *p = v->pParse;
103 
104   /* The SQLITE_TEST_REALLOC_STRESS compile-time option is designed to force
105   ** more frequent reallocs and hence provide more opportunities for
106   ** simulated OOM faults.  SQLITE_TEST_REALLOC_STRESS is generally used
107   ** during testing only.  With SQLITE_TEST_REALLOC_STRESS grow the op array
108   ** by the minimum* amount required until the size reaches 512.  Normal
109   ** operation (without SQLITE_TEST_REALLOC_STRESS) is to double the current
110   ** size of the op array or add 1KB of space, whichever is smaller. */
111 #ifdef SQLITE_TEST_REALLOC_STRESS
112   int nNew = (p->nOpAlloc>=512 ? p->nOpAlloc*2 : p->nOpAlloc+nOp);
113 #else
114   int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
115   UNUSED_PARAMETER(nOp);
116 #endif
117 
118   assert( nOp<=(1024/sizeof(Op)) );
119   assert( nNew>=(p->nOpAlloc+nOp) );
120   pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op));
121   if( pNew ){
122     p->szOpAlloc = sqlite3DbMallocSize(p->db, pNew);
123     p->nOpAlloc = p->szOpAlloc/sizeof(Op);
124     v->aOp = pNew;
125   }
126   return (pNew ? SQLITE_OK : SQLITE_NOMEM_BKPT);
127 }
128 
129 #ifdef SQLITE_DEBUG
130 /* This routine is just a convenient place to set a breakpoint that will
131 ** fire after each opcode is inserted and displayed using
132 ** "PRAGMA vdbe_addoptrace=on".
133 */
134 static void test_addop_breakpoint(void){
135   static int n = 0;
136   n++;
137 }
138 #endif
139 
140 /*
141 ** Add a new instruction to the list of instructions current in the
142 ** VDBE.  Return the address of the new instruction.
143 **
144 ** Parameters:
145 **
146 **    p               Pointer to the VDBE
147 **
148 **    op              The opcode for this instruction
149 **
150 **    p1, p2, p3      Operands
151 **
152 ** Use the sqlite3VdbeResolveLabel() function to fix an address and
153 ** the sqlite3VdbeChangeP4() function to change the value of the P4
154 ** operand.
155 */
156 static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){
157   assert( p->pParse->nOpAlloc<=p->nOp );
158   if( growOpArray(p, 1) ) return 1;
159   assert( p->pParse->nOpAlloc>p->nOp );
160   return sqlite3VdbeAddOp3(p, op, p1, p2, p3);
161 }
162 int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
163   int i;
164   VdbeOp *pOp;
165 
166   i = p->nOp;
167   assert( p->magic==VDBE_MAGIC_INIT );
168   assert( op>=0 && op<0xff );
169   if( p->pParse->nOpAlloc<=i ){
170     return growOp3(p, op, p1, p2, p3);
171   }
172   p->nOp++;
173   pOp = &p->aOp[i];
174   pOp->opcode = (u8)op;
175   pOp->p5 = 0;
176   pOp->p1 = p1;
177   pOp->p2 = p2;
178   pOp->p3 = p3;
179   pOp->p4.p = 0;
180   pOp->p4type = P4_NOTUSED;
181 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
182   pOp->zComment = 0;
183 #endif
184 #ifdef SQLITE_DEBUG
185   if( p->db->flags & SQLITE_VdbeAddopTrace ){
186     int jj, kk;
187     Parse *pParse = p->pParse;
188     for(jj=kk=0; jj<pParse->nColCache; jj++){
189       struct yColCache *x = pParse->aColCache + jj;
190       printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn);
191       kk++;
192     }
193     if( kk ) printf("\n");
194     sqlite3VdbePrintOp(0, i, &p->aOp[i]);
195     test_addop_breakpoint();
196   }
197 #endif
198 #ifdef VDBE_PROFILE
199   pOp->cycles = 0;
200   pOp->cnt = 0;
201 #endif
202 #ifdef SQLITE_VDBE_COVERAGE
203   pOp->iSrcLine = 0;
204 #endif
205   return i;
206 }
207 int sqlite3VdbeAddOp0(Vdbe *p, int op){
208   return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
209 }
210 int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
211   return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
212 }
213 int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
214   return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
215 }
216 
217 /* Generate code for an unconditional jump to instruction iDest
218 */
219 int sqlite3VdbeGoto(Vdbe *p, int iDest){
220   return sqlite3VdbeAddOp3(p, OP_Goto, 0, iDest, 0);
221 }
222 
223 /* Generate code to cause the string zStr to be loaded into
224 ** register iDest
225 */
226 int sqlite3VdbeLoadString(Vdbe *p, int iDest, const char *zStr){
227   return sqlite3VdbeAddOp4(p, OP_String8, 0, iDest, 0, zStr, 0);
228 }
229 
230 /*
231 ** Generate code that initializes multiple registers to string or integer
232 ** constants.  The registers begin with iDest and increase consecutively.
233 ** One register is initialized for each characgter in zTypes[].  For each
234 ** "s" character in zTypes[], the register is a string if the argument is
235 ** not NULL, or OP_Null if the value is a null pointer.  For each "i" character
236 ** in zTypes[], the register is initialized to an integer.
237 */
238 void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, ...){
239   va_list ap;
240   int i;
241   char c;
242   va_start(ap, zTypes);
243   for(i=0; (c = zTypes[i])!=0; i++){
244     if( c=='s' ){
245       const char *z = va_arg(ap, const char*);
246       sqlite3VdbeAddOp4(p, z==0 ? OP_Null : OP_String8, 0, iDest++, 0, z, 0);
247     }else{
248       assert( c=='i' );
249       sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest++);
250     }
251   }
252   va_end(ap);
253 }
254 
255 /*
256 ** Add an opcode that includes the p4 value as a pointer.
257 */
258 int sqlite3VdbeAddOp4(
259   Vdbe *p,            /* Add the opcode to this VM */
260   int op,             /* The new opcode */
261   int p1,             /* The P1 operand */
262   int p2,             /* The P2 operand */
263   int p3,             /* The P3 operand */
264   const char *zP4,    /* The P4 operand */
265   int p4type          /* P4 operand type */
266 ){
267   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
268   sqlite3VdbeChangeP4(p, addr, zP4, p4type);
269   return addr;
270 }
271 
272 /*
273 ** Add an opcode that includes the p4 value with a P4_INT64 or
274 ** P4_REAL type.
275 */
276 int sqlite3VdbeAddOp4Dup8(
277   Vdbe *p,            /* Add the opcode to this VM */
278   int op,             /* The new opcode */
279   int p1,             /* The P1 operand */
280   int p2,             /* The P2 operand */
281   int p3,             /* The P3 operand */
282   const u8 *zP4,      /* The P4 operand */
283   int p4type          /* P4 operand type */
284 ){
285   char *p4copy = sqlite3DbMallocRawNN(sqlite3VdbeDb(p), 8);
286   if( p4copy ) memcpy(p4copy, zP4, 8);
287   return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type);
288 }
289 
290 /*
291 ** Add an OP_ParseSchema opcode.  This routine is broken out from
292 ** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees
293 ** as having been used.
294 **
295 ** The zWhere string must have been obtained from sqlite3_malloc().
296 ** This routine will take ownership of the allocated memory.
297 */
298 void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
299   int j;
300   sqlite3VdbeAddOp4(p, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC);
301   for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
302 }
303 
304 /*
305 ** Add an opcode that includes the p4 value as an integer.
306 */
307 int sqlite3VdbeAddOp4Int(
308   Vdbe *p,            /* Add the opcode to this VM */
309   int op,             /* The new opcode */
310   int p1,             /* The P1 operand */
311   int p2,             /* The P2 operand */
312   int p3,             /* The P3 operand */
313   int p4              /* The P4 operand as an integer */
314 ){
315   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
316   sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32);
317   return addr;
318 }
319 
320 /* Insert the end of a co-routine
321 */
322 void sqlite3VdbeEndCoroutine(Vdbe *v, int regYield){
323   sqlite3VdbeAddOp1(v, OP_EndCoroutine, regYield);
324 
325   /* Clear the temporary register cache, thereby ensuring that each
326   ** co-routine has its own independent set of registers, because co-routines
327   ** might expect their registers to be preserved across an OP_Yield, and
328   ** that could cause problems if two or more co-routines are using the same
329   ** temporary register.
330   */
331   v->pParse->nTempReg = 0;
332   v->pParse->nRangeReg = 0;
333 }
334 
335 /*
336 ** Create a new symbolic label for an instruction that has yet to be
337 ** coded.  The symbolic label is really just a negative number.  The
338 ** label can be used as the P2 value of an operation.  Later, when
339 ** the label is resolved to a specific address, the VDBE will scan
340 ** through its operation list and change all values of P2 which match
341 ** the label into the resolved address.
342 **
343 ** The VDBE knows that a P2 value is a label because labels are
344 ** always negative and P2 values are suppose to be non-negative.
345 ** Hence, a negative P2 value is a label that has yet to be resolved.
346 **
347 ** Zero is returned if a malloc() fails.
348 */
349 int sqlite3VdbeMakeLabel(Vdbe *v){
350   Parse *p = v->pParse;
351   int i = p->nLabel++;
352   assert( v->magic==VDBE_MAGIC_INIT );
353   if( (i & (i-1))==0 ){
354     p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
355                                        (i*2+1)*sizeof(p->aLabel[0]));
356   }
357   if( p->aLabel ){
358     p->aLabel[i] = -1;
359   }
360   return ADDR(i);
361 }
362 
363 /*
364 ** Resolve label "x" to be the address of the next instruction to
365 ** be inserted.  The parameter "x" must have been obtained from
366 ** a prior call to sqlite3VdbeMakeLabel().
367 */
368 void sqlite3VdbeResolveLabel(Vdbe *v, int x){
369   Parse *p = v->pParse;
370   int j = ADDR(x);
371   assert( v->magic==VDBE_MAGIC_INIT );
372   assert( j<p->nLabel );
373   assert( j>=0 );
374   if( p->aLabel ){
375     p->aLabel[j] = v->nOp;
376   }
377 }
378 
379 /*
380 ** Mark the VDBE as one that can only be run one time.
381 */
382 void sqlite3VdbeRunOnlyOnce(Vdbe *p){
383   p->runOnlyOnce = 1;
384 }
385 
386 /*
387 ** Mark the VDBE as one that can only be run multiple times.
388 */
389 void sqlite3VdbeReusable(Vdbe *p){
390   p->runOnlyOnce = 0;
391 }
392 
393 #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */
394 
395 /*
396 ** The following type and function are used to iterate through all opcodes
397 ** in a Vdbe main program and each of the sub-programs (triggers) it may
398 ** invoke directly or indirectly. It should be used as follows:
399 **
400 **   Op *pOp;
401 **   VdbeOpIter sIter;
402 **
403 **   memset(&sIter, 0, sizeof(sIter));
404 **   sIter.v = v;                            // v is of type Vdbe*
405 **   while( (pOp = opIterNext(&sIter)) ){
406 **     // Do something with pOp
407 **   }
408 **   sqlite3DbFree(v->db, sIter.apSub);
409 **
410 */
411 typedef struct VdbeOpIter VdbeOpIter;
412 struct VdbeOpIter {
413   Vdbe *v;                   /* Vdbe to iterate through the opcodes of */
414   SubProgram **apSub;        /* Array of subprograms */
415   int nSub;                  /* Number of entries in apSub */
416   int iAddr;                 /* Address of next instruction to return */
417   int iSub;                  /* 0 = main program, 1 = first sub-program etc. */
418 };
419 static Op *opIterNext(VdbeOpIter *p){
420   Vdbe *v = p->v;
421   Op *pRet = 0;
422   Op *aOp;
423   int nOp;
424 
425   if( p->iSub<=p->nSub ){
426 
427     if( p->iSub==0 ){
428       aOp = v->aOp;
429       nOp = v->nOp;
430     }else{
431       aOp = p->apSub[p->iSub-1]->aOp;
432       nOp = p->apSub[p->iSub-1]->nOp;
433     }
434     assert( p->iAddr<nOp );
435 
436     pRet = &aOp[p->iAddr];
437     p->iAddr++;
438     if( p->iAddr==nOp ){
439       p->iSub++;
440       p->iAddr = 0;
441     }
442 
443     if( pRet->p4type==P4_SUBPROGRAM ){
444       int nByte = (p->nSub+1)*sizeof(SubProgram*);
445       int j;
446       for(j=0; j<p->nSub; j++){
447         if( p->apSub[j]==pRet->p4.pProgram ) break;
448       }
449       if( j==p->nSub ){
450         p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte);
451         if( !p->apSub ){
452           pRet = 0;
453         }else{
454           p->apSub[p->nSub++] = pRet->p4.pProgram;
455         }
456       }
457     }
458   }
459 
460   return pRet;
461 }
462 
463 /*
464 ** Check if the program stored in the VM associated with pParse may
465 ** throw an ABORT exception (causing the statement, but not entire transaction
466 ** to be rolled back). This condition is true if the main program or any
467 ** sub-programs contains any of the following:
468 **
469 **   *  OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
470 **   *  OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
471 **   *  OP_Destroy
472 **   *  OP_VUpdate
473 **   *  OP_VRename
474 **   *  OP_FkCounter with P2==0 (immediate foreign key constraint)
475 **   *  OP_CreateTable and OP_InitCoroutine (for CREATE TABLE AS SELECT ...)
476 **
477 ** Then check that the value of Parse.mayAbort is true if an
478 ** ABORT may be thrown, or false otherwise. Return true if it does
479 ** match, or false otherwise. This function is intended to be used as
480 ** part of an assert statement in the compiler. Similar to:
481 **
482 **   assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
483 */
484 int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
485   int hasAbort = 0;
486   int hasFkCounter = 0;
487   int hasCreateTable = 0;
488   int hasInitCoroutine = 0;
489   Op *pOp;
490   VdbeOpIter sIter;
491   memset(&sIter, 0, sizeof(sIter));
492   sIter.v = v;
493 
494   while( (pOp = opIterNext(&sIter))!=0 ){
495     int opcode = pOp->opcode;
496     if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
497      || ((opcode==OP_Halt || opcode==OP_HaltIfNull)
498       && ((pOp->p1&0xff)==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
499     ){
500       hasAbort = 1;
501       break;
502     }
503     if( opcode==OP_CreateTable ) hasCreateTable = 1;
504     if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1;
505 #ifndef SQLITE_OMIT_FOREIGN_KEY
506     if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){
507       hasFkCounter = 1;
508     }
509 #endif
510   }
511   sqlite3DbFree(v->db, sIter.apSub);
512 
513   /* Return true if hasAbort==mayAbort. Or if a malloc failure occurred.
514   ** If malloc failed, then the while() loop above may not have iterated
515   ** through all opcodes and hasAbort may be set incorrectly. Return
516   ** true for this case to prevent the assert() in the callers frame
517   ** from failing.  */
518   return ( v->db->mallocFailed || hasAbort==mayAbort || hasFkCounter
519               || (hasCreateTable && hasInitCoroutine) );
520 }
521 #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
522 
523 /*
524 ** This routine is called after all opcodes have been inserted.  It loops
525 ** through all the opcodes and fixes up some details.
526 **
527 ** (1) For each jump instruction with a negative P2 value (a label)
528 **     resolve the P2 value to an actual address.
529 **
530 ** (2) Compute the maximum number of arguments used by any SQL function
531 **     and store that value in *pMaxFuncArgs.
532 **
533 ** (3) Update the Vdbe.readOnly and Vdbe.bIsReader flags to accurately
534 **     indicate what the prepared statement actually does.
535 **
536 ** (4) Initialize the p4.xAdvance pointer on opcodes that use it.
537 **
538 ** (5) Reclaim the memory allocated for storing labels.
539 **
540 ** This routine will only function correctly if the mkopcodeh.tcl generator
541 ** script numbers the opcodes correctly.  Changes to this routine must be
542 ** coordinated with changes to mkopcodeh.tcl.
543 */
544 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
545   int nMaxArgs = *pMaxFuncArgs;
546   Op *pOp;
547   Parse *pParse = p->pParse;
548   int *aLabel = pParse->aLabel;
549   p->readOnly = 1;
550   p->bIsReader = 0;
551   pOp = &p->aOp[p->nOp-1];
552   while(1){
553 
554     /* Only JUMP opcodes and the short list of special opcodes in the switch
555     ** below need to be considered.  The mkopcodeh.tcl generator script groups
556     ** all these opcodes together near the front of the opcode list.  Skip
557     ** any opcode that does not need processing by virtual of the fact that
558     ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization.
559     */
560     if( pOp->opcode<=SQLITE_MX_JUMP_OPCODE ){
561       /* NOTE: Be sure to update mkopcodeh.tcl when adding or removing
562       ** cases from this switch! */
563       switch( pOp->opcode ){
564         case OP_Transaction: {
565           if( pOp->p2!=0 ) p->readOnly = 0;
566           /* fall thru */
567         }
568         case OP_AutoCommit:
569         case OP_Savepoint: {
570           p->bIsReader = 1;
571           break;
572         }
573 #ifndef SQLITE_OMIT_WAL
574         case OP_Checkpoint:
575 #endif
576         case OP_Vacuum:
577         case OP_JournalMode: {
578           p->readOnly = 0;
579           p->bIsReader = 1;
580           break;
581         }
582 #ifndef SQLITE_OMIT_VIRTUALTABLE
583         case OP_VUpdate: {
584           if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
585           break;
586         }
587         case OP_VFilter: {
588           int n;
589           assert( (pOp - p->aOp) >= 3 );
590           assert( pOp[-1].opcode==OP_Integer );
591           n = pOp[-1].p1;
592           if( n>nMaxArgs ) nMaxArgs = n;
593           break;
594         }
595 #endif
596         case OP_Next:
597         case OP_NextIfOpen:
598         case OP_SorterNext: {
599           pOp->p4.xAdvance = sqlite3BtreeNext;
600           pOp->p4type = P4_ADVANCE;
601           break;
602         }
603         case OP_Prev:
604         case OP_PrevIfOpen: {
605           pOp->p4.xAdvance = sqlite3BtreePrevious;
606           pOp->p4type = P4_ADVANCE;
607           break;
608         }
609       }
610       if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 && pOp->p2<0 ){
611         assert( ADDR(pOp->p2)<pParse->nLabel );
612         pOp->p2 = aLabel[ADDR(pOp->p2)];
613       }
614     }
615     if( pOp==p->aOp ) break;
616     pOp--;
617   }
618   sqlite3DbFree(p->db, pParse->aLabel);
619   pParse->aLabel = 0;
620   pParse->nLabel = 0;
621   *pMaxFuncArgs = nMaxArgs;
622   assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
623 }
624 
625 /*
626 ** Return the address of the next instruction to be inserted.
627 */
628 int sqlite3VdbeCurrentAddr(Vdbe *p){
629   assert( p->magic==VDBE_MAGIC_INIT );
630   return p->nOp;
631 }
632 
633 /*
634 ** Verify that at least N opcode slots are available in p without
635 ** having to malloc for more space (except when compiled using
636 ** SQLITE_TEST_REALLOC_STRESS).  This interface is used during testing
637 ** to verify that certain calls to sqlite3VdbeAddOpList() can never
638 ** fail due to a OOM fault and hence that the return value from
639 ** sqlite3VdbeAddOpList() will always be non-NULL.
640 */
641 #if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS)
642 void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N){
643   assert( p->nOp + N <= p->pParse->nOpAlloc );
644 }
645 #endif
646 
647 /*
648 ** This function returns a pointer to the array of opcodes associated with
649 ** the Vdbe passed as the first argument. It is the callers responsibility
650 ** to arrange for the returned array to be eventually freed using the
651 ** vdbeFreeOpArray() function.
652 **
653 ** Before returning, *pnOp is set to the number of entries in the returned
654 ** array. Also, *pnMaxArg is set to the larger of its current value and
655 ** the number of entries in the Vdbe.apArg[] array required to execute the
656 ** returned program.
657 */
658 VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
659   VdbeOp *aOp = p->aOp;
660   assert( aOp && !p->db->mallocFailed );
661 
662   /* Check that sqlite3VdbeUsesBtree() was not called on this VM */
663   assert( DbMaskAllZero(p->btreeMask) );
664 
665   resolveP2Values(p, pnMaxArg);
666   *pnOp = p->nOp;
667   p->aOp = 0;
668   return aOp;
669 }
670 
671 /*
672 ** Add a whole list of operations to the operation stack.  Return a
673 ** pointer to the first operation inserted.
674 **
675 ** Non-zero P2 arguments to jump instructions are automatically adjusted
676 ** so that the jump target is relative to the first operation inserted.
677 */
678 VdbeOp *sqlite3VdbeAddOpList(
679   Vdbe *p,                     /* Add opcodes to the prepared statement */
680   int nOp,                     /* Number of opcodes to add */
681   VdbeOpList const *aOp,       /* The opcodes to be added */
682   int iLineno                  /* Source-file line number of first opcode */
683 ){
684   int i;
685   VdbeOp *pOut, *pFirst;
686   assert( nOp>0 );
687   assert( p->magic==VDBE_MAGIC_INIT );
688   if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p, nOp) ){
689     return 0;
690   }
691   pFirst = pOut = &p->aOp[p->nOp];
692   for(i=0; i<nOp; i++, aOp++, pOut++){
693     pOut->opcode = aOp->opcode;
694     pOut->p1 = aOp->p1;
695     pOut->p2 = aOp->p2;
696     assert( aOp->p2>=0 );
697     if( (sqlite3OpcodeProperty[aOp->opcode] & OPFLG_JUMP)!=0 && aOp->p2>0 ){
698       pOut->p2 += p->nOp;
699     }
700     pOut->p3 = aOp->p3;
701     pOut->p4type = P4_NOTUSED;
702     pOut->p4.p = 0;
703     pOut->p5 = 0;
704 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
705     pOut->zComment = 0;
706 #endif
707 #ifdef SQLITE_VDBE_COVERAGE
708     pOut->iSrcLine = iLineno+i;
709 #else
710     (void)iLineno;
711 #endif
712 #ifdef SQLITE_DEBUG
713     if( p->db->flags & SQLITE_VdbeAddopTrace ){
714       sqlite3VdbePrintOp(0, i+p->nOp, &p->aOp[i+p->nOp]);
715     }
716 #endif
717   }
718   p->nOp += nOp;
719   return pFirst;
720 }
721 
722 #if defined(SQLITE_ENABLE_STMT_SCANSTATUS)
723 /*
724 ** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus().
725 */
726 void sqlite3VdbeScanStatus(
727   Vdbe *p,                        /* VM to add scanstatus() to */
728   int addrExplain,                /* Address of OP_Explain (or 0) */
729   int addrLoop,                   /* Address of loop counter */
730   int addrVisit,                  /* Address of rows visited counter */
731   LogEst nEst,                    /* Estimated number of output rows */
732   const char *zName               /* Name of table or index being scanned */
733 ){
734   int nByte = (p->nScan+1) * sizeof(ScanStatus);
735   ScanStatus *aNew;
736   aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
737   if( aNew ){
738     ScanStatus *pNew = &aNew[p->nScan++];
739     pNew->addrExplain = addrExplain;
740     pNew->addrLoop = addrLoop;
741     pNew->addrVisit = addrVisit;
742     pNew->nEst = nEst;
743     pNew->zName = sqlite3DbStrDup(p->db, zName);
744     p->aScan = aNew;
745   }
746 }
747 #endif
748 
749 
750 /*
751 ** Change the value of the opcode, or P1, P2, P3, or P5 operands
752 ** for a specific instruction.
753 */
754 void sqlite3VdbeChangeOpcode(Vdbe *p, u32 addr, u8 iNewOpcode){
755   sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode;
756 }
757 void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
758   sqlite3VdbeGetOp(p,addr)->p1 = val;
759 }
760 void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
761   sqlite3VdbeGetOp(p,addr)->p2 = val;
762 }
763 void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
764   sqlite3VdbeGetOp(p,addr)->p3 = val;
765 }
766 void sqlite3VdbeChangeP5(Vdbe *p, u8 p5){
767   assert( p->nOp>0 || p->db->mallocFailed );
768   if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5;
769 }
770 
771 /*
772 ** Change the P2 operand of instruction addr so that it points to
773 ** the address of the next instruction to be coded.
774 */
775 void sqlite3VdbeJumpHere(Vdbe *p, int addr){
776   sqlite3VdbeChangeP2(p, addr, p->nOp);
777 }
778 
779 
780 /*
781 ** If the input FuncDef structure is ephemeral, then free it.  If
782 ** the FuncDef is not ephermal, then do nothing.
783 */
784 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
785   if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){
786     sqlite3DbFree(db, pDef);
787   }
788 }
789 
790 static void vdbeFreeOpArray(sqlite3 *, Op *, int);
791 
792 /*
793 ** Delete a P4 value if necessary.
794 */
795 static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){
796   if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
797   sqlite3DbFree(db, p);
798 }
799 static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){
800   freeEphemeralFunction(db, p->pFunc);
801   sqlite3DbFree(db, p);
802 }
803 static void freeP4(sqlite3 *db, int p4type, void *p4){
804   assert( db );
805   switch( p4type ){
806     case P4_FUNCCTX: {
807       freeP4FuncCtx(db, (sqlite3_context*)p4);
808       break;
809     }
810     case P4_REAL:
811     case P4_INT64:
812     case P4_DYNAMIC:
813     case P4_INTARRAY: {
814       sqlite3DbFree(db, p4);
815       break;
816     }
817     case P4_KEYINFO: {
818       if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4);
819       break;
820     }
821 #ifdef SQLITE_ENABLE_CURSOR_HINTS
822     case P4_EXPR: {
823       sqlite3ExprDelete(db, (Expr*)p4);
824       break;
825     }
826 #endif
827     case P4_MPRINTF: {
828       if( db->pnBytesFreed==0 ) sqlite3_free(p4);
829       break;
830     }
831     case P4_FUNCDEF: {
832       freeEphemeralFunction(db, (FuncDef*)p4);
833       break;
834     }
835     case P4_MEM: {
836       if( db->pnBytesFreed==0 ){
837         sqlite3ValueFree((sqlite3_value*)p4);
838       }else{
839         freeP4Mem(db, (Mem*)p4);
840       }
841       break;
842     }
843     case P4_VTAB : {
844       if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4);
845       break;
846     }
847   }
848 }
849 
850 /*
851 ** Free the space allocated for aOp and any p4 values allocated for the
852 ** opcodes contained within. If aOp is not NULL it is assumed to contain
853 ** nOp entries.
854 */
855 static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
856   if( aOp ){
857     Op *pOp;
858     for(pOp=aOp; pOp<&aOp[nOp]; pOp++){
859       if( pOp->p4type ) freeP4(db, pOp->p4type, pOp->p4.p);
860 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
861       sqlite3DbFree(db, pOp->zComment);
862 #endif
863     }
864   }
865   sqlite3DbFree(db, aOp);
866 }
867 
868 /*
869 ** Link the SubProgram object passed as the second argument into the linked
870 ** list at Vdbe.pSubProgram. This list is used to delete all sub-program
871 ** objects when the VM is no longer required.
872 */
873 void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
874   p->pNext = pVdbe->pProgram;
875   pVdbe->pProgram = p;
876 }
877 
878 /*
879 ** Change the opcode at addr into OP_Noop
880 */
881 int sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
882   VdbeOp *pOp;
883   if( p->db->mallocFailed ) return 0;
884   assert( addr>=0 && addr<p->nOp );
885   pOp = &p->aOp[addr];
886   freeP4(p->db, pOp->p4type, pOp->p4.p);
887   pOp->p4type = P4_NOTUSED;
888   pOp->p4.z = 0;
889   pOp->opcode = OP_Noop;
890   return 1;
891 }
892 
893 /*
894 ** If the last opcode is "op" and it is not a jump destination,
895 ** then remove it.  Return true if and only if an opcode was removed.
896 */
897 int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){
898   if( p->nOp>0 && p->aOp[p->nOp-1].opcode==op ){
899     return sqlite3VdbeChangeToNoop(p, p->nOp-1);
900   }else{
901     return 0;
902   }
903 }
904 
905 /*
906 ** Change the value of the P4 operand for a specific instruction.
907 ** This routine is useful when a large program is loaded from a
908 ** static array using sqlite3VdbeAddOpList but we want to make a
909 ** few minor changes to the program.
910 **
911 ** If n>=0 then the P4 operand is dynamic, meaning that a copy of
912 ** the string is made into memory obtained from sqlite3_malloc().
913 ** A value of n==0 means copy bytes of zP4 up to and including the
914 ** first null byte.  If n>0 then copy n+1 bytes of zP4.
915 **
916 ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points
917 ** to a string or structure that is guaranteed to exist for the lifetime of
918 ** the Vdbe. In these cases we can just copy the pointer.
919 **
920 ** If addr<0 then change P4 on the most recently inserted instruction.
921 */
922 static void SQLITE_NOINLINE vdbeChangeP4Full(
923   Vdbe *p,
924   Op *pOp,
925   const char *zP4,
926   int n
927 ){
928   if( pOp->p4type ){
929     freeP4(p->db, pOp->p4type, pOp->p4.p);
930     pOp->p4type = 0;
931     pOp->p4.p = 0;
932   }
933   if( n<0 ){
934     sqlite3VdbeChangeP4(p, (int)(pOp - p->aOp), zP4, n);
935   }else{
936     if( n==0 ) n = sqlite3Strlen30(zP4);
937     pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n);
938     pOp->p4type = P4_DYNAMIC;
939   }
940 }
941 void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
942   Op *pOp;
943   sqlite3 *db;
944   assert( p!=0 );
945   db = p->db;
946   assert( p->magic==VDBE_MAGIC_INIT );
947   assert( p->aOp!=0 || db->mallocFailed );
948   if( db->mallocFailed ){
949     if( n!=P4_VTAB ) freeP4(db, n, (void*)*(char**)&zP4);
950     return;
951   }
952   assert( p->nOp>0 );
953   assert( addr<p->nOp );
954   if( addr<0 ){
955     addr = p->nOp - 1;
956   }
957   pOp = &p->aOp[addr];
958   if( n>=0 || pOp->p4type ){
959     vdbeChangeP4Full(p, pOp, zP4, n);
960     return;
961   }
962   if( n==P4_INT32 ){
963     /* Note: this cast is safe, because the origin data point was an int
964     ** that was cast to a (const char *). */
965     pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
966     pOp->p4type = P4_INT32;
967   }else if( zP4!=0 ){
968     assert( n<0 );
969     pOp->p4.p = (void*)zP4;
970     pOp->p4type = (signed char)n;
971     if( n==P4_VTAB ) sqlite3VtabLock((VTable*)zP4);
972   }
973 }
974 
975 /*
976 ** Set the P4 on the most recently added opcode to the KeyInfo for the
977 ** index given.
978 */
979 void sqlite3VdbeSetP4KeyInfo(Parse *pParse, Index *pIdx){
980   Vdbe *v = pParse->pVdbe;
981   assert( v!=0 );
982   assert( pIdx!=0 );
983   sqlite3VdbeChangeP4(v, -1, (char*)sqlite3KeyInfoOfIndex(pParse, pIdx),
984                       P4_KEYINFO);
985 }
986 
987 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
988 /*
989 ** Change the comment on the most recently coded instruction.  Or
990 ** insert a No-op and add the comment to that new instruction.  This
991 ** makes the code easier to read during debugging.  None of this happens
992 ** in a production build.
993 */
994 static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){
995   assert( p->nOp>0 || p->aOp==0 );
996   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
997   if( p->nOp ){
998     assert( p->aOp );
999     sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment);
1000     p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap);
1001   }
1002 }
1003 void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
1004   va_list ap;
1005   if( p ){
1006     va_start(ap, zFormat);
1007     vdbeVComment(p, zFormat, ap);
1008     va_end(ap);
1009   }
1010 }
1011 void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){
1012   va_list ap;
1013   if( p ){
1014     sqlite3VdbeAddOp0(p, OP_Noop);
1015     va_start(ap, zFormat);
1016     vdbeVComment(p, zFormat, ap);
1017     va_end(ap);
1018   }
1019 }
1020 #endif  /* NDEBUG */
1021 
1022 #ifdef SQLITE_VDBE_COVERAGE
1023 /*
1024 ** Set the value if the iSrcLine field for the previously coded instruction.
1025 */
1026 void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
1027   sqlite3VdbeGetOp(v,-1)->iSrcLine = iLine;
1028 }
1029 #endif /* SQLITE_VDBE_COVERAGE */
1030 
1031 /*
1032 ** Return the opcode for a given address.  If the address is -1, then
1033 ** return the most recently inserted opcode.
1034 **
1035 ** If a memory allocation error has occurred prior to the calling of this
1036 ** routine, then a pointer to a dummy VdbeOp will be returned.  That opcode
1037 ** is readable but not writable, though it is cast to a writable value.
1038 ** The return of a dummy opcode allows the call to continue functioning
1039 ** after an OOM fault without having to check to see if the return from
1040 ** this routine is a valid pointer.  But because the dummy.opcode is 0,
1041 ** dummy will never be written to.  This is verified by code inspection and
1042 ** by running with Valgrind.
1043 */
1044 VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
1045   /* C89 specifies that the constant "dummy" will be initialized to all
1046   ** zeros, which is correct.  MSVC generates a warning, nevertheless. */
1047   static VdbeOp dummy;  /* Ignore the MSVC warning about no initializer */
1048   assert( p->magic==VDBE_MAGIC_INIT );
1049   if( addr<0 ){
1050     addr = p->nOp - 1;
1051   }
1052   assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
1053   if( p->db->mallocFailed ){
1054     return (VdbeOp*)&dummy;
1055   }else{
1056     return &p->aOp[addr];
1057   }
1058 }
1059 
1060 #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS)
1061 /*
1062 ** Return an integer value for one of the parameters to the opcode pOp
1063 ** determined by character c.
1064 */
1065 static int translateP(char c, const Op *pOp){
1066   if( c=='1' ) return pOp->p1;
1067   if( c=='2' ) return pOp->p2;
1068   if( c=='3' ) return pOp->p3;
1069   if( c=='4' ) return pOp->p4.i;
1070   return pOp->p5;
1071 }
1072 
1073 /*
1074 ** Compute a string for the "comment" field of a VDBE opcode listing.
1075 **
1076 ** The Synopsis: field in comments in the vdbe.c source file gets converted
1077 ** to an extra string that is appended to the sqlite3OpcodeName().  In the
1078 ** absence of other comments, this synopsis becomes the comment on the opcode.
1079 ** Some translation occurs:
1080 **
1081 **       "PX"      ->  "r[X]"
1082 **       "PX@PY"   ->  "r[X..X+Y-1]"  or "r[x]" if y is 0 or 1
1083 **       "PX@PY+1" ->  "r[X..X+Y]"    or "r[x]" if y is 0
1084 **       "PY..PY"  ->  "r[X..Y]"      or "r[x]" if y<=x
1085 */
1086 static int displayComment(
1087   const Op *pOp,     /* The opcode to be commented */
1088   const char *zP4,   /* Previously obtained value for P4 */
1089   char *zTemp,       /* Write result here */
1090   int nTemp          /* Space available in zTemp[] */
1091 ){
1092   const char *zOpName;
1093   const char *zSynopsis;
1094   int nOpName;
1095   int ii, jj;
1096   char zAlt[50];
1097   zOpName = sqlite3OpcodeName(pOp->opcode);
1098   nOpName = sqlite3Strlen30(zOpName);
1099   if( zOpName[nOpName+1] ){
1100     int seenCom = 0;
1101     char c;
1102     zSynopsis = zOpName += nOpName + 1;
1103     if( strncmp(zSynopsis,"IF ",3)==0 ){
1104       if( pOp->p5 & SQLITE_STOREP2 ){
1105         sqlite3_snprintf(sizeof(zAlt), zAlt, "r[P2] = (%s)", zSynopsis+3);
1106       }else{
1107         sqlite3_snprintf(sizeof(zAlt), zAlt, "if %s goto P2", zSynopsis+3);
1108       }
1109       zSynopsis = zAlt;
1110     }
1111     for(ii=jj=0; jj<nTemp-1 && (c = zSynopsis[ii])!=0; ii++){
1112       if( c=='P' ){
1113         c = zSynopsis[++ii];
1114         if( c=='4' ){
1115           sqlite3_snprintf(nTemp-jj, zTemp+jj, "%s", zP4);
1116         }else if( c=='X' ){
1117           sqlite3_snprintf(nTemp-jj, zTemp+jj, "%s", pOp->zComment);
1118           seenCom = 1;
1119         }else{
1120           int v1 = translateP(c, pOp);
1121           int v2;
1122           sqlite3_snprintf(nTemp-jj, zTemp+jj, "%d", v1);
1123           if( strncmp(zSynopsis+ii+1, "@P", 2)==0 ){
1124             ii += 3;
1125             jj += sqlite3Strlen30(zTemp+jj);
1126             v2 = translateP(zSynopsis[ii], pOp);
1127             if( strncmp(zSynopsis+ii+1,"+1",2)==0 ){
1128               ii += 2;
1129               v2++;
1130             }
1131             if( v2>1 ){
1132               sqlite3_snprintf(nTemp-jj, zTemp+jj, "..%d", v1+v2-1);
1133             }
1134           }else if( strncmp(zSynopsis+ii+1, "..P3", 4)==0 && pOp->p3==0 ){
1135             ii += 4;
1136           }
1137         }
1138         jj += sqlite3Strlen30(zTemp+jj);
1139       }else{
1140         zTemp[jj++] = c;
1141       }
1142     }
1143     if( !seenCom && jj<nTemp-5 && pOp->zComment ){
1144       sqlite3_snprintf(nTemp-jj, zTemp+jj, "; %s", pOp->zComment);
1145       jj += sqlite3Strlen30(zTemp+jj);
1146     }
1147     if( jj<nTemp ) zTemp[jj] = 0;
1148   }else if( pOp->zComment ){
1149     sqlite3_snprintf(nTemp, zTemp, "%s", pOp->zComment);
1150     jj = sqlite3Strlen30(zTemp);
1151   }else{
1152     zTemp[0] = 0;
1153     jj = 0;
1154   }
1155   return jj;
1156 }
1157 #endif /* SQLITE_DEBUG */
1158 
1159 #if VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS)
1160 /*
1161 ** Translate the P4.pExpr value for an OP_CursorHint opcode into text
1162 ** that can be displayed in the P4 column of EXPLAIN output.
1163 */
1164 static void displayP4Expr(StrAccum *p, Expr *pExpr){
1165   const char *zOp = 0;
1166   switch( pExpr->op ){
1167     case TK_STRING:
1168       sqlite3XPrintf(p, "%Q", pExpr->u.zToken);
1169       break;
1170     case TK_INTEGER:
1171       sqlite3XPrintf(p, "%d", pExpr->u.iValue);
1172       break;
1173     case TK_NULL:
1174       sqlite3XPrintf(p, "NULL");
1175       break;
1176     case TK_REGISTER: {
1177       sqlite3XPrintf(p, "r[%d]", pExpr->iTable);
1178       break;
1179     }
1180     case TK_COLUMN: {
1181       if( pExpr->iColumn<0 ){
1182         sqlite3XPrintf(p, "rowid");
1183       }else{
1184         sqlite3XPrintf(p, "c%d", (int)pExpr->iColumn);
1185       }
1186       break;
1187     }
1188     case TK_LT:      zOp = "LT";      break;
1189     case TK_LE:      zOp = "LE";      break;
1190     case TK_GT:      zOp = "GT";      break;
1191     case TK_GE:      zOp = "GE";      break;
1192     case TK_NE:      zOp = "NE";      break;
1193     case TK_EQ:      zOp = "EQ";      break;
1194     case TK_IS:      zOp = "IS";      break;
1195     case TK_ISNOT:   zOp = "ISNOT";   break;
1196     case TK_AND:     zOp = "AND";     break;
1197     case TK_OR:      zOp = "OR";      break;
1198     case TK_PLUS:    zOp = "ADD";     break;
1199     case TK_STAR:    zOp = "MUL";     break;
1200     case TK_MINUS:   zOp = "SUB";     break;
1201     case TK_REM:     zOp = "REM";     break;
1202     case TK_BITAND:  zOp = "BITAND";  break;
1203     case TK_BITOR:   zOp = "BITOR";   break;
1204     case TK_SLASH:   zOp = "DIV";     break;
1205     case TK_LSHIFT:  zOp = "LSHIFT";  break;
1206     case TK_RSHIFT:  zOp = "RSHIFT";  break;
1207     case TK_CONCAT:  zOp = "CONCAT";  break;
1208     case TK_UMINUS:  zOp = "MINUS";   break;
1209     case TK_UPLUS:   zOp = "PLUS";    break;
1210     case TK_BITNOT:  zOp = "BITNOT";  break;
1211     case TK_NOT:     zOp = "NOT";     break;
1212     case TK_ISNULL:  zOp = "ISNULL";  break;
1213     case TK_NOTNULL: zOp = "NOTNULL"; break;
1214 
1215     default:
1216       sqlite3XPrintf(p, "%s", "expr");
1217       break;
1218   }
1219 
1220   if( zOp ){
1221     sqlite3XPrintf(p, "%s(", zOp);
1222     displayP4Expr(p, pExpr->pLeft);
1223     if( pExpr->pRight ){
1224       sqlite3StrAccumAppend(p, ",", 1);
1225       displayP4Expr(p, pExpr->pRight);
1226     }
1227     sqlite3StrAccumAppend(p, ")", 1);
1228   }
1229 }
1230 #endif /* VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS) */
1231 
1232 
1233 #if VDBE_DISPLAY_P4
1234 /*
1235 ** Compute a string that describes the P4 parameter for an opcode.
1236 ** Use zTemp for any required temporary buffer space.
1237 */
1238 static char *displayP4(Op *pOp, char *zTemp, int nTemp){
1239   char *zP4 = zTemp;
1240   StrAccum x;
1241   assert( nTemp>=20 );
1242   sqlite3StrAccumInit(&x, 0, zTemp, nTemp, 0);
1243   switch( pOp->p4type ){
1244     case P4_KEYINFO: {
1245       int j;
1246       KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
1247       assert( pKeyInfo->aSortOrder!=0 );
1248       sqlite3XPrintf(&x, "k(%d", pKeyInfo->nField);
1249       for(j=0; j<pKeyInfo->nField; j++){
1250         CollSeq *pColl = pKeyInfo->aColl[j];
1251         const char *zColl = pColl ? pColl->zName : "";
1252         if( strcmp(zColl, "BINARY")==0 ) zColl = "B";
1253         sqlite3XPrintf(&x, ",%s%s", pKeyInfo->aSortOrder[j] ? "-" : "", zColl);
1254       }
1255       sqlite3StrAccumAppend(&x, ")", 1);
1256       break;
1257     }
1258 #ifdef SQLITE_ENABLE_CURSOR_HINTS
1259     case P4_EXPR: {
1260       displayP4Expr(&x, pOp->p4.pExpr);
1261       break;
1262     }
1263 #endif
1264     case P4_COLLSEQ: {
1265       CollSeq *pColl = pOp->p4.pColl;
1266       sqlite3XPrintf(&x, "(%.20s)", pColl->zName);
1267       break;
1268     }
1269     case P4_FUNCDEF: {
1270       FuncDef *pDef = pOp->p4.pFunc;
1271       sqlite3XPrintf(&x, "%s(%d)", pDef->zName, pDef->nArg);
1272       break;
1273     }
1274 #ifdef SQLITE_DEBUG
1275     case P4_FUNCCTX: {
1276       FuncDef *pDef = pOp->p4.pCtx->pFunc;
1277       sqlite3XPrintf(&x, "%s(%d)", pDef->zName, pDef->nArg);
1278       break;
1279     }
1280 #endif
1281     case P4_INT64: {
1282       sqlite3XPrintf(&x, "%lld", *pOp->p4.pI64);
1283       break;
1284     }
1285     case P4_INT32: {
1286       sqlite3XPrintf(&x, "%d", pOp->p4.i);
1287       break;
1288     }
1289     case P4_REAL: {
1290       sqlite3XPrintf(&x, "%.16g", *pOp->p4.pReal);
1291       break;
1292     }
1293     case P4_MEM: {
1294       Mem *pMem = pOp->p4.pMem;
1295       if( pMem->flags & MEM_Str ){
1296         zP4 = pMem->z;
1297       }else if( pMem->flags & MEM_Int ){
1298         sqlite3XPrintf(&x, "%lld", pMem->u.i);
1299       }else if( pMem->flags & MEM_Real ){
1300         sqlite3XPrintf(&x, "%.16g", pMem->u.r);
1301       }else if( pMem->flags & MEM_Null ){
1302         zP4 = "NULL";
1303       }else{
1304         assert( pMem->flags & MEM_Blob );
1305         zP4 = "(blob)";
1306       }
1307       break;
1308     }
1309 #ifndef SQLITE_OMIT_VIRTUALTABLE
1310     case P4_VTAB: {
1311       sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
1312       sqlite3XPrintf(&x, "vtab:%p", pVtab);
1313       break;
1314     }
1315 #endif
1316     case P4_INTARRAY: {
1317       int i;
1318       int *ai = pOp->p4.ai;
1319       int n = ai[0];   /* The first element of an INTARRAY is always the
1320                        ** count of the number of elements to follow */
1321       for(i=1; i<n; i++){
1322         sqlite3XPrintf(&x, ",%d", ai[i]);
1323       }
1324       zTemp[0] = '[';
1325       sqlite3StrAccumAppend(&x, "]", 1);
1326       break;
1327     }
1328     case P4_SUBPROGRAM: {
1329       sqlite3XPrintf(&x, "program");
1330       break;
1331     }
1332     case P4_ADVANCE: {
1333       zTemp[0] = 0;
1334       break;
1335     }
1336     case P4_TABLE: {
1337       sqlite3XPrintf(&x, "%s", pOp->p4.pTab->zName);
1338       break;
1339     }
1340     default: {
1341       zP4 = pOp->p4.z;
1342       if( zP4==0 ){
1343         zP4 = zTemp;
1344         zTemp[0] = 0;
1345       }
1346     }
1347   }
1348   sqlite3StrAccumFinish(&x);
1349   assert( zP4!=0 );
1350   return zP4;
1351 }
1352 #endif /* VDBE_DISPLAY_P4 */
1353 
1354 /*
1355 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
1356 **
1357 ** The prepared statements need to know in advance the complete set of
1358 ** attached databases that will be use.  A mask of these databases
1359 ** is maintained in p->btreeMask.  The p->lockMask value is the subset of
1360 ** p->btreeMask of databases that will require a lock.
1361 */
1362 void sqlite3VdbeUsesBtree(Vdbe *p, int i){
1363   assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
1364   assert( i<(int)sizeof(p->btreeMask)*8 );
1365   DbMaskSet(p->btreeMask, i);
1366   if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
1367     DbMaskSet(p->lockMask, i);
1368   }
1369 }
1370 
1371 #if !defined(SQLITE_OMIT_SHARED_CACHE)
1372 /*
1373 ** If SQLite is compiled to support shared-cache mode and to be threadsafe,
1374 ** this routine obtains the mutex associated with each BtShared structure
1375 ** that may be accessed by the VM passed as an argument. In doing so it also
1376 ** sets the BtShared.db member of each of the BtShared structures, ensuring
1377 ** that the correct busy-handler callback is invoked if required.
1378 **
1379 ** If SQLite is not threadsafe but does support shared-cache mode, then
1380 ** sqlite3BtreeEnter() is invoked to set the BtShared.db variables
1381 ** of all of BtShared structures accessible via the database handle
1382 ** associated with the VM.
1383 **
1384 ** If SQLite is not threadsafe and does not support shared-cache mode, this
1385 ** function is a no-op.
1386 **
1387 ** The p->btreeMask field is a bitmask of all btrees that the prepared
1388 ** statement p will ever use.  Let N be the number of bits in p->btreeMask
1389 ** corresponding to btrees that use shared cache.  Then the runtime of
1390 ** this routine is N*N.  But as N is rarely more than 1, this should not
1391 ** be a problem.
1392 */
1393 void sqlite3VdbeEnter(Vdbe *p){
1394   int i;
1395   sqlite3 *db;
1396   Db *aDb;
1397   int nDb;
1398   if( DbMaskAllZero(p->lockMask) ) return;  /* The common case */
1399   db = p->db;
1400   aDb = db->aDb;
1401   nDb = db->nDb;
1402   for(i=0; i<nDb; i++){
1403     if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){
1404       sqlite3BtreeEnter(aDb[i].pBt);
1405     }
1406   }
1407 }
1408 #endif
1409 
1410 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
1411 /*
1412 ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
1413 */
1414 static SQLITE_NOINLINE void vdbeLeave(Vdbe *p){
1415   int i;
1416   sqlite3 *db;
1417   Db *aDb;
1418   int nDb;
1419   db = p->db;
1420   aDb = db->aDb;
1421   nDb = db->nDb;
1422   for(i=0; i<nDb; i++){
1423     if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){
1424       sqlite3BtreeLeave(aDb[i].pBt);
1425     }
1426   }
1427 }
1428 void sqlite3VdbeLeave(Vdbe *p){
1429   if( DbMaskAllZero(p->lockMask) ) return;  /* The common case */
1430   vdbeLeave(p);
1431 }
1432 #endif
1433 
1434 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
1435 /*
1436 ** Print a single opcode.  This routine is used for debugging only.
1437 */
1438 void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
1439   char *zP4;
1440   char zPtr[50];
1441   char zCom[100];
1442   static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-13s %.2X %s\n";
1443   if( pOut==0 ) pOut = stdout;
1444   zP4 = displayP4(pOp, zPtr, sizeof(zPtr));
1445 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
1446   displayComment(pOp, zP4, zCom, sizeof(zCom));
1447 #else
1448   zCom[0] = 0;
1449 #endif
1450   /* NB:  The sqlite3OpcodeName() function is implemented by code created
1451   ** by the mkopcodeh.awk and mkopcodec.awk scripts which extract the
1452   ** information from the vdbe.c source text */
1453   fprintf(pOut, zFormat1, pc,
1454       sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
1455       zCom
1456   );
1457   fflush(pOut);
1458 }
1459 #endif
1460 
1461 /*
1462 ** Initialize an array of N Mem element.
1463 */
1464 static void initMemArray(Mem *p, int N, sqlite3 *db, u16 flags){
1465   while( (N--)>0 ){
1466     p->db = db;
1467     p->flags = flags;
1468     p->szMalloc = 0;
1469 #ifdef SQLITE_DEBUG
1470     p->pScopyFrom = 0;
1471 #endif
1472     p++;
1473   }
1474 }
1475 
1476 /*
1477 ** Release an array of N Mem elements
1478 */
1479 static void releaseMemArray(Mem *p, int N){
1480   if( p && N ){
1481     Mem *pEnd = &p[N];
1482     sqlite3 *db = p->db;
1483     if( db->pnBytesFreed ){
1484       do{
1485         if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
1486       }while( (++p)<pEnd );
1487       return;
1488     }
1489     do{
1490       assert( (&p[1])==pEnd || p[0].db==p[1].db );
1491       assert( sqlite3VdbeCheckMemInvariants(p) );
1492 
1493       /* This block is really an inlined version of sqlite3VdbeMemRelease()
1494       ** that takes advantage of the fact that the memory cell value is
1495       ** being set to NULL after releasing any dynamic resources.
1496       **
1497       ** The justification for duplicating code is that according to
1498       ** callgrind, this causes a certain test case to hit the CPU 4.7
1499       ** percent less (x86 linux, gcc version 4.1.2, -O6) than if
1500       ** sqlite3MemRelease() were called from here. With -O2, this jumps
1501       ** to 6.6 percent. The test case is inserting 1000 rows into a table
1502       ** with no indexes using a single prepared INSERT statement, bind()
1503       ** and reset(). Inserts are grouped into a transaction.
1504       */
1505       testcase( p->flags & MEM_Agg );
1506       testcase( p->flags & MEM_Dyn );
1507       testcase( p->flags & MEM_Frame );
1508       testcase( p->flags & MEM_RowSet );
1509       if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
1510         sqlite3VdbeMemRelease(p);
1511       }else if( p->szMalloc ){
1512         sqlite3DbFree(db, p->zMalloc);
1513         p->szMalloc = 0;
1514       }
1515 
1516       p->flags = MEM_Undefined;
1517     }while( (++p)<pEnd );
1518   }
1519 }
1520 
1521 /*
1522 ** Delete a VdbeFrame object and its contents. VdbeFrame objects are
1523 ** allocated by the OP_Program opcode in sqlite3VdbeExec().
1524 */
1525 void sqlite3VdbeFrameDelete(VdbeFrame *p){
1526   int i;
1527   Mem *aMem = VdbeFrameMem(p);
1528   VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
1529   for(i=0; i<p->nChildCsr; i++){
1530     sqlite3VdbeFreeCursor(p->v, apCsr[i]);
1531   }
1532   releaseMemArray(aMem, p->nChildMem);
1533   sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0);
1534   sqlite3DbFree(p->v->db, p);
1535 }
1536 
1537 #ifndef SQLITE_OMIT_EXPLAIN
1538 /*
1539 ** Give a listing of the program in the virtual machine.
1540 **
1541 ** The interface is the same as sqlite3VdbeExec().  But instead of
1542 ** running the code, it invokes the callback once for each instruction.
1543 ** This feature is used to implement "EXPLAIN".
1544 **
1545 ** When p->explain==1, each instruction is listed.  When
1546 ** p->explain==2, only OP_Explain instructions are listed and these
1547 ** are shown in a different format.  p->explain==2 is used to implement
1548 ** EXPLAIN QUERY PLAN.
1549 **
1550 ** When p->explain==1, first the main program is listed, then each of
1551 ** the trigger subprograms are listed one by one.
1552 */
1553 int sqlite3VdbeList(
1554   Vdbe *p                   /* The VDBE */
1555 ){
1556   int nRow;                            /* Stop when row count reaches this */
1557   int nSub = 0;                        /* Number of sub-vdbes seen so far */
1558   SubProgram **apSub = 0;              /* Array of sub-vdbes */
1559   Mem *pSub = 0;                       /* Memory cell hold array of subprogs */
1560   sqlite3 *db = p->db;                 /* The database connection */
1561   int i;                               /* Loop counter */
1562   int rc = SQLITE_OK;                  /* Return code */
1563   Mem *pMem = &p->aMem[1];             /* First Mem of result set */
1564 
1565   assert( p->explain );
1566   assert( p->magic==VDBE_MAGIC_RUN );
1567   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
1568 
1569   /* Even though this opcode does not use dynamic strings for
1570   ** the result, result columns may become dynamic if the user calls
1571   ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
1572   */
1573   releaseMemArray(pMem, 8);
1574   p->pResultSet = 0;
1575 
1576   if( p->rc==SQLITE_NOMEM_BKPT ){
1577     /* This happens if a malloc() inside a call to sqlite3_column_text() or
1578     ** sqlite3_column_text16() failed.  */
1579     sqlite3OomFault(db);
1580     return SQLITE_ERROR;
1581   }
1582 
1583   /* When the number of output rows reaches nRow, that means the
1584   ** listing has finished and sqlite3_step() should return SQLITE_DONE.
1585   ** nRow is the sum of the number of rows in the main program, plus
1586   ** the sum of the number of rows in all trigger subprograms encountered
1587   ** so far.  The nRow value will increase as new trigger subprograms are
1588   ** encountered, but p->pc will eventually catch up to nRow.
1589   */
1590   nRow = p->nOp;
1591   if( p->explain==1 ){
1592     /* The first 8 memory cells are used for the result set.  So we will
1593     ** commandeer the 9th cell to use as storage for an array of pointers
1594     ** to trigger subprograms.  The VDBE is guaranteed to have at least 9
1595     ** cells.  */
1596     assert( p->nMem>9 );
1597     pSub = &p->aMem[9];
1598     if( pSub->flags&MEM_Blob ){
1599       /* On the first call to sqlite3_step(), pSub will hold a NULL.  It is
1600       ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */
1601       nSub = pSub->n/sizeof(Vdbe*);
1602       apSub = (SubProgram **)pSub->z;
1603     }
1604     for(i=0; i<nSub; i++){
1605       nRow += apSub[i]->nOp;
1606     }
1607   }
1608 
1609   do{
1610     i = p->pc++;
1611   }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
1612   if( i>=nRow ){
1613     p->rc = SQLITE_OK;
1614     rc = SQLITE_DONE;
1615   }else if( db->u1.isInterrupted ){
1616     p->rc = SQLITE_INTERRUPT;
1617     rc = SQLITE_ERROR;
1618     sqlite3VdbeError(p, sqlite3ErrStr(p->rc));
1619   }else{
1620     char *zP4;
1621     Op *pOp;
1622     if( i<p->nOp ){
1623       /* The output line number is small enough that we are still in the
1624       ** main program. */
1625       pOp = &p->aOp[i];
1626     }else{
1627       /* We are currently listing subprograms.  Figure out which one and
1628       ** pick up the appropriate opcode. */
1629       int j;
1630       i -= p->nOp;
1631       for(j=0; i>=apSub[j]->nOp; j++){
1632         i -= apSub[j]->nOp;
1633       }
1634       pOp = &apSub[j]->aOp[i];
1635     }
1636     if( p->explain==1 ){
1637       pMem->flags = MEM_Int;
1638       pMem->u.i = i;                                /* Program counter */
1639       pMem++;
1640 
1641       pMem->flags = MEM_Static|MEM_Str|MEM_Term;
1642       pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
1643       assert( pMem->z!=0 );
1644       pMem->n = sqlite3Strlen30(pMem->z);
1645       pMem->enc = SQLITE_UTF8;
1646       pMem++;
1647 
1648       /* When an OP_Program opcode is encounter (the only opcode that has
1649       ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
1650       ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
1651       ** has not already been seen.
1652       */
1653       if( pOp->p4type==P4_SUBPROGRAM ){
1654         int nByte = (nSub+1)*sizeof(SubProgram*);
1655         int j;
1656         for(j=0; j<nSub; j++){
1657           if( apSub[j]==pOp->p4.pProgram ) break;
1658         }
1659         if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, nSub!=0) ){
1660           apSub = (SubProgram **)pSub->z;
1661           apSub[nSub++] = pOp->p4.pProgram;
1662           pSub->flags |= MEM_Blob;
1663           pSub->n = nSub*sizeof(SubProgram*);
1664         }
1665       }
1666     }
1667 
1668     pMem->flags = MEM_Int;
1669     pMem->u.i = pOp->p1;                          /* P1 */
1670     pMem++;
1671 
1672     pMem->flags = MEM_Int;
1673     pMem->u.i = pOp->p2;                          /* P2 */
1674     pMem++;
1675 
1676     pMem->flags = MEM_Int;
1677     pMem->u.i = pOp->p3;                          /* P3 */
1678     pMem++;
1679 
1680     if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */
1681       assert( p->db->mallocFailed );
1682       return SQLITE_ERROR;
1683     }
1684     pMem->flags = MEM_Str|MEM_Term;
1685     zP4 = displayP4(pOp, pMem->z, pMem->szMalloc);
1686     if( zP4!=pMem->z ){
1687       pMem->n = 0;
1688       sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0);
1689     }else{
1690       assert( pMem->z!=0 );
1691       pMem->n = sqlite3Strlen30(pMem->z);
1692       pMem->enc = SQLITE_UTF8;
1693     }
1694     pMem++;
1695 
1696     if( p->explain==1 ){
1697       if( sqlite3VdbeMemClearAndResize(pMem, 4) ){
1698         assert( p->db->mallocFailed );
1699         return SQLITE_ERROR;
1700       }
1701       pMem->flags = MEM_Str|MEM_Term;
1702       pMem->n = 2;
1703       sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5);   /* P5 */
1704       pMem->enc = SQLITE_UTF8;
1705       pMem++;
1706 
1707 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
1708       if( sqlite3VdbeMemClearAndResize(pMem, 500) ){
1709         assert( p->db->mallocFailed );
1710         return SQLITE_ERROR;
1711       }
1712       pMem->flags = MEM_Str|MEM_Term;
1713       pMem->n = displayComment(pOp, zP4, pMem->z, 500);
1714       pMem->enc = SQLITE_UTF8;
1715 #else
1716       pMem->flags = MEM_Null;                       /* Comment */
1717 #endif
1718     }
1719 
1720     p->nResColumn = 8 - 4*(p->explain-1);
1721     p->pResultSet = &p->aMem[1];
1722     p->rc = SQLITE_OK;
1723     rc = SQLITE_ROW;
1724   }
1725   return rc;
1726 }
1727 #endif /* SQLITE_OMIT_EXPLAIN */
1728 
1729 #ifdef SQLITE_DEBUG
1730 /*
1731 ** Print the SQL that was used to generate a VDBE program.
1732 */
1733 void sqlite3VdbePrintSql(Vdbe *p){
1734   const char *z = 0;
1735   if( p->zSql ){
1736     z = p->zSql;
1737   }else if( p->nOp>=1 ){
1738     const VdbeOp *pOp = &p->aOp[0];
1739     if( pOp->opcode==OP_Init && pOp->p4.z!=0 ){
1740       z = pOp->p4.z;
1741       while( sqlite3Isspace(*z) ) z++;
1742     }
1743   }
1744   if( z ) printf("SQL: [%s]\n", z);
1745 }
1746 #endif
1747 
1748 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
1749 /*
1750 ** Print an IOTRACE message showing SQL content.
1751 */
1752 void sqlite3VdbeIOTraceSql(Vdbe *p){
1753   int nOp = p->nOp;
1754   VdbeOp *pOp;
1755   if( sqlite3IoTrace==0 ) return;
1756   if( nOp<1 ) return;
1757   pOp = &p->aOp[0];
1758   if( pOp->opcode==OP_Init && pOp->p4.z!=0 ){
1759     int i, j;
1760     char z[1000];
1761     sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z);
1762     for(i=0; sqlite3Isspace(z[i]); i++){}
1763     for(j=0; z[i]; i++){
1764       if( sqlite3Isspace(z[i]) ){
1765         if( z[i-1]!=' ' ){
1766           z[j++] = ' ';
1767         }
1768       }else{
1769         z[j++] = z[i];
1770       }
1771     }
1772     z[j] = 0;
1773     sqlite3IoTrace("SQL %s\n", z);
1774   }
1775 }
1776 #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
1777 
1778 /* An instance of this object describes bulk memory available for use
1779 ** by subcomponents of a prepared statement.  Space is allocated out
1780 ** of a ReusableSpace object by the allocSpace() routine below.
1781 */
1782 struct ReusableSpace {
1783   u8 *pSpace;          /* Available memory */
1784   int nFree;           /* Bytes of available memory */
1785   int nNeeded;         /* Total bytes that could not be allocated */
1786 };
1787 
1788 /* Try to allocate nByte bytes of 8-byte aligned bulk memory for pBuf
1789 ** from the ReusableSpace object.  Return a pointer to the allocated
1790 ** memory on success.  If insufficient memory is available in the
1791 ** ReusableSpace object, increase the ReusableSpace.nNeeded
1792 ** value by the amount needed and return NULL.
1793 **
1794 ** If pBuf is not initially NULL, that means that the memory has already
1795 ** been allocated by a prior call to this routine, so just return a copy
1796 ** of pBuf and leave ReusableSpace unchanged.
1797 **
1798 ** This allocator is employed to repurpose unused slots at the end of the
1799 ** opcode array of prepared state for other memory needs of the prepared
1800 ** statement.
1801 */
1802 static void *allocSpace(
1803   struct ReusableSpace *p,  /* Bulk memory available for allocation */
1804   void *pBuf,               /* Pointer to a prior allocation */
1805   int nByte                 /* Bytes of memory needed */
1806 ){
1807   assert( EIGHT_BYTE_ALIGNMENT(p->pSpace) );
1808   if( pBuf==0 ){
1809     nByte = ROUND8(nByte);
1810     if( nByte <= p->nFree ){
1811       p->nFree -= nByte;
1812       pBuf = &p->pSpace[p->nFree];
1813     }else{
1814       p->nNeeded += nByte;
1815     }
1816   }
1817   assert( EIGHT_BYTE_ALIGNMENT(pBuf) );
1818   return pBuf;
1819 }
1820 
1821 /*
1822 ** Rewind the VDBE back to the beginning in preparation for
1823 ** running it.
1824 */
1825 void sqlite3VdbeRewind(Vdbe *p){
1826 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
1827   int i;
1828 #endif
1829   assert( p!=0 );
1830   assert( p->magic==VDBE_MAGIC_INIT || p->magic==VDBE_MAGIC_RESET );
1831 
1832   /* There should be at least one opcode.
1833   */
1834   assert( p->nOp>0 );
1835 
1836   /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
1837   p->magic = VDBE_MAGIC_RUN;
1838 
1839 #ifdef SQLITE_DEBUG
1840   for(i=0; i<p->nMem; i++){
1841     assert( p->aMem[i].db==p->db );
1842   }
1843 #endif
1844   p->pc = -1;
1845   p->rc = SQLITE_OK;
1846   p->errorAction = OE_Abort;
1847   p->nChange = 0;
1848   p->cacheCtr = 1;
1849   p->minWriteFileFormat = 255;
1850   p->iStatement = 0;
1851   p->nFkConstraint = 0;
1852 #ifdef VDBE_PROFILE
1853   for(i=0; i<p->nOp; i++){
1854     p->aOp[i].cnt = 0;
1855     p->aOp[i].cycles = 0;
1856   }
1857 #endif
1858 }
1859 
1860 /*
1861 ** Prepare a virtual machine for execution for the first time after
1862 ** creating the virtual machine.  This involves things such
1863 ** as allocating registers and initializing the program counter.
1864 ** After the VDBE has be prepped, it can be executed by one or more
1865 ** calls to sqlite3VdbeExec().
1866 **
1867 ** This function may be called exactly once on each virtual machine.
1868 ** After this routine is called the VM has been "packaged" and is ready
1869 ** to run.  After this routine is called, further calls to
1870 ** sqlite3VdbeAddOp() functions are prohibited.  This routine disconnects
1871 ** the Vdbe from the Parse object that helped generate it so that the
1872 ** the Vdbe becomes an independent entity and the Parse object can be
1873 ** destroyed.
1874 **
1875 ** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back
1876 ** to its initial state after it has been run.
1877 */
1878 void sqlite3VdbeMakeReady(
1879   Vdbe *p,                       /* The VDBE */
1880   Parse *pParse                  /* Parsing context */
1881 ){
1882   sqlite3 *db;                   /* The database connection */
1883   int nVar;                      /* Number of parameters */
1884   int nMem;                      /* Number of VM memory registers */
1885   int nCursor;                   /* Number of cursors required */
1886   int nArg;                      /* Number of arguments in subprograms */
1887   int n;                         /* Loop counter */
1888   struct ReusableSpace x;        /* Reusable bulk memory */
1889 
1890   assert( p!=0 );
1891   assert( p->nOp>0 );
1892   assert( pParse!=0 );
1893   assert( p->magic==VDBE_MAGIC_INIT );
1894   assert( pParse==p->pParse );
1895   db = p->db;
1896   assert( db->mallocFailed==0 );
1897   nVar = pParse->nVar;
1898   nMem = pParse->nMem;
1899   nCursor = pParse->nTab;
1900   nArg = pParse->nMaxArg;
1901 
1902   /* Each cursor uses a memory cell.  The first cursor (cursor 0) can
1903   ** use aMem[0] which is not otherwise used by the VDBE program.  Allocate
1904   ** space at the end of aMem[] for cursors 1 and greater.
1905   ** See also: allocateCursor().
1906   */
1907   nMem += nCursor;
1908   if( nCursor==0 && nMem>0 ) nMem++;  /* Space for aMem[0] even if not used */
1909 
1910   /* Figure out how much reusable memory is available at the end of the
1911   ** opcode array.  This extra memory will be reallocated for other elements
1912   ** of the prepared statement.
1913   */
1914   n = ROUND8(sizeof(Op)*p->nOp);              /* Bytes of opcode memory used */
1915   x.pSpace = &((u8*)p->aOp)[n];               /* Unused opcode memory */
1916   assert( EIGHT_BYTE_ALIGNMENT(x.pSpace) );
1917   x.nFree = ROUNDDOWN8(pParse->szOpAlloc - n);  /* Bytes of unused memory */
1918   assert( x.nFree>=0 );
1919   assert( EIGHT_BYTE_ALIGNMENT(&x.pSpace[x.nFree]) );
1920 
1921   resolveP2Values(p, &nArg);
1922   p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
1923   if( pParse->explain && nMem<10 ){
1924     nMem = 10;
1925   }
1926   p->expired = 0;
1927 
1928   /* Memory for registers, parameters, cursor, etc, is allocated in one or two
1929   ** passes.  On the first pass, we try to reuse unused memory at the
1930   ** end of the opcode array.  If we are unable to satisfy all memory
1931   ** requirements by reusing the opcode array tail, then the second
1932   ** pass will fill in the remainder using a fresh memory allocation.
1933   **
1934   ** This two-pass approach that reuses as much memory as possible from
1935   ** the leftover memory at the end of the opcode array.  This can significantly
1936   ** reduce the amount of memory held by a prepared statement.
1937   */
1938   do {
1939     x.nNeeded = 0;
1940     p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem));
1941     p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem));
1942     p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*));
1943     p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*));
1944 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1945     p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64));
1946 #endif
1947     if( x.nNeeded==0 ) break;
1948     x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded);
1949     x.nFree = x.nNeeded;
1950   }while( !db->mallocFailed );
1951 
1952   p->nzVar = pParse->nzVar;
1953   p->azVar = pParse->azVar;
1954   pParse->nzVar =  0;
1955   pParse->azVar = 0;
1956   p->explain = pParse->explain;
1957   if( db->mallocFailed ){
1958     p->nVar = 0;
1959     p->nCursor = 0;
1960     p->nMem = 0;
1961   }else{
1962     p->nCursor = nCursor;
1963     p->nVar = (ynVar)nVar;
1964     initMemArray(p->aVar, nVar, db, MEM_Null);
1965     p->nMem = nMem;
1966     initMemArray(p->aMem, nMem, db, MEM_Undefined);
1967     memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*));
1968 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1969     memset(p->anExec, 0, p->nOp*sizeof(i64));
1970 #endif
1971   }
1972   sqlite3VdbeRewind(p);
1973 }
1974 
1975 /*
1976 ** Close a VDBE cursor and release all the resources that cursor
1977 ** happens to hold.
1978 */
1979 void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
1980   if( pCx==0 ){
1981     return;
1982   }
1983   assert( pCx->pBt==0 || pCx->eCurType==CURTYPE_BTREE );
1984   switch( pCx->eCurType ){
1985     case CURTYPE_SORTER: {
1986       sqlite3VdbeSorterClose(p->db, pCx);
1987       break;
1988     }
1989     case CURTYPE_BTREE: {
1990       if( pCx->pBt ){
1991         sqlite3BtreeClose(pCx->pBt);
1992         /* The pCx->pCursor will be close automatically, if it exists, by
1993         ** the call above. */
1994       }else{
1995         assert( pCx->uc.pCursor!=0 );
1996         sqlite3BtreeCloseCursor(pCx->uc.pCursor);
1997       }
1998       break;
1999     }
2000 #ifndef SQLITE_OMIT_VIRTUALTABLE
2001     case CURTYPE_VTAB: {
2002       sqlite3_vtab_cursor *pVCur = pCx->uc.pVCur;
2003       const sqlite3_module *pModule = pVCur->pVtab->pModule;
2004       assert( pVCur->pVtab->nRef>0 );
2005       pVCur->pVtab->nRef--;
2006       pModule->xClose(pVCur);
2007       break;
2008     }
2009 #endif
2010   }
2011 }
2012 
2013 /*
2014 ** Close all cursors in the current frame.
2015 */
2016 static void closeCursorsInFrame(Vdbe *p){
2017   if( p->apCsr ){
2018     int i;
2019     for(i=0; i<p->nCursor; i++){
2020       VdbeCursor *pC = p->apCsr[i];
2021       if( pC ){
2022         sqlite3VdbeFreeCursor(p, pC);
2023         p->apCsr[i] = 0;
2024       }
2025     }
2026   }
2027 }
2028 
2029 /*
2030 ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
2031 ** is used, for example, when a trigger sub-program is halted to restore
2032 ** control to the main program.
2033 */
2034 int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
2035   Vdbe *v = pFrame->v;
2036   closeCursorsInFrame(v);
2037 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
2038   v->anExec = pFrame->anExec;
2039 #endif
2040   v->aOp = pFrame->aOp;
2041   v->nOp = pFrame->nOp;
2042   v->aMem = pFrame->aMem;
2043   v->nMem = pFrame->nMem;
2044   v->apCsr = pFrame->apCsr;
2045   v->nCursor = pFrame->nCursor;
2046   v->db->lastRowid = pFrame->lastRowid;
2047   v->nChange = pFrame->nChange;
2048   v->db->nChange = pFrame->nDbChange;
2049   sqlite3VdbeDeleteAuxData(v->db, &v->pAuxData, -1, 0);
2050   v->pAuxData = pFrame->pAuxData;
2051   pFrame->pAuxData = 0;
2052   return pFrame->pc;
2053 }
2054 
2055 /*
2056 ** Close all cursors.
2057 **
2058 ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory
2059 ** cell array. This is necessary as the memory cell array may contain
2060 ** pointers to VdbeFrame objects, which may in turn contain pointers to
2061 ** open cursors.
2062 */
2063 static void closeAllCursors(Vdbe *p){
2064   if( p->pFrame ){
2065     VdbeFrame *pFrame;
2066     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
2067     sqlite3VdbeFrameRestore(pFrame);
2068     p->pFrame = 0;
2069     p->nFrame = 0;
2070   }
2071   assert( p->nFrame==0 );
2072   closeCursorsInFrame(p);
2073   if( p->aMem ){
2074     releaseMemArray(p->aMem, p->nMem);
2075   }
2076   while( p->pDelFrame ){
2077     VdbeFrame *pDel = p->pDelFrame;
2078     p->pDelFrame = pDel->pParent;
2079     sqlite3VdbeFrameDelete(pDel);
2080   }
2081 
2082   /* Delete any auxdata allocations made by the VM */
2083   if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p->db, &p->pAuxData, -1, 0);
2084   assert( p->pAuxData==0 );
2085 }
2086 
2087 /*
2088 ** Clean up the VM after a single run.
2089 */
2090 static void Cleanup(Vdbe *p){
2091   sqlite3 *db = p->db;
2092 
2093 #ifdef SQLITE_DEBUG
2094   /* Execute assert() statements to ensure that the Vdbe.apCsr[] and
2095   ** Vdbe.aMem[] arrays have already been cleaned up.  */
2096   int i;
2097   if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
2098   if( p->aMem ){
2099     for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined );
2100   }
2101 #endif
2102 
2103   sqlite3DbFree(db, p->zErrMsg);
2104   p->zErrMsg = 0;
2105   p->pResultSet = 0;
2106 }
2107 
2108 /*
2109 ** Set the number of result columns that will be returned by this SQL
2110 ** statement. This is now set at compile time, rather than during
2111 ** execution of the vdbe program so that sqlite3_column_count() can
2112 ** be called on an SQL statement before sqlite3_step().
2113 */
2114 void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
2115   Mem *pColName;
2116   int n;
2117   sqlite3 *db = p->db;
2118 
2119   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
2120   sqlite3DbFree(db, p->aColName);
2121   n = nResColumn*COLNAME_N;
2122   p->nResColumn = (u16)nResColumn;
2123   p->aColName = pColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n );
2124   if( p->aColName==0 ) return;
2125   initMemArray(p->aColName, n, p->db, MEM_Null);
2126 }
2127 
2128 /*
2129 ** Set the name of the idx'th column to be returned by the SQL statement.
2130 ** zName must be a pointer to a nul terminated string.
2131 **
2132 ** This call must be made after a call to sqlite3VdbeSetNumCols().
2133 **
2134 ** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC
2135 ** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed
2136 ** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed.
2137 */
2138 int sqlite3VdbeSetColName(
2139   Vdbe *p,                         /* Vdbe being configured */
2140   int idx,                         /* Index of column zName applies to */
2141   int var,                         /* One of the COLNAME_* constants */
2142   const char *zName,               /* Pointer to buffer containing name */
2143   void (*xDel)(void*)              /* Memory management strategy for zName */
2144 ){
2145   int rc;
2146   Mem *pColName;
2147   assert( idx<p->nResColumn );
2148   assert( var<COLNAME_N );
2149   if( p->db->mallocFailed ){
2150     assert( !zName || xDel!=SQLITE_DYNAMIC );
2151     return SQLITE_NOMEM_BKPT;
2152   }
2153   assert( p->aColName!=0 );
2154   pColName = &(p->aColName[idx+var*p->nResColumn]);
2155   rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
2156   assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
2157   return rc;
2158 }
2159 
2160 /*
2161 ** A read or write transaction may or may not be active on database handle
2162 ** db. If a transaction is active, commit it. If there is a
2163 ** write-transaction spanning more than one database file, this routine
2164 ** takes care of the master journal trickery.
2165 */
2166 static int vdbeCommit(sqlite3 *db, Vdbe *p){
2167   int i;
2168   int nTrans = 0;  /* Number of databases with an active write-transaction
2169                    ** that are candidates for a two-phase commit using a
2170                    ** master-journal */
2171   int rc = SQLITE_OK;
2172   int needXcommit = 0;
2173 
2174 #ifdef SQLITE_OMIT_VIRTUALTABLE
2175   /* With this option, sqlite3VtabSync() is defined to be simply
2176   ** SQLITE_OK so p is not used.
2177   */
2178   UNUSED_PARAMETER(p);
2179 #endif
2180 
2181   /* Before doing anything else, call the xSync() callback for any
2182   ** virtual module tables written in this transaction. This has to
2183   ** be done before determining whether a master journal file is
2184   ** required, as an xSync() callback may add an attached database
2185   ** to the transaction.
2186   */
2187   rc = sqlite3VtabSync(db, p);
2188 
2189   /* This loop determines (a) if the commit hook should be invoked and
2190   ** (b) how many database files have open write transactions, not
2191   ** including the temp database. (b) is important because if more than
2192   ** one database file has an open write transaction, a master journal
2193   ** file is required for an atomic commit.
2194   */
2195   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
2196     Btree *pBt = db->aDb[i].pBt;
2197     if( sqlite3BtreeIsInTrans(pBt) ){
2198       /* Whether or not a database might need a master journal depends upon
2199       ** its journal mode (among other things).  This matrix determines which
2200       ** journal modes use a master journal and which do not */
2201       static const u8 aMJNeeded[] = {
2202         /* DELETE   */  1,
2203         /* PERSIST   */ 1,
2204         /* OFF       */ 0,
2205         /* TRUNCATE  */ 1,
2206         /* MEMORY    */ 0,
2207         /* WAL       */ 0
2208       };
2209       Pager *pPager;   /* Pager associated with pBt */
2210       needXcommit = 1;
2211       sqlite3BtreeEnter(pBt);
2212       pPager = sqlite3BtreePager(pBt);
2213       if( db->aDb[i].safety_level!=PAGER_SYNCHRONOUS_OFF
2214        && aMJNeeded[sqlite3PagerGetJournalMode(pPager)]
2215       ){
2216         assert( i!=1 );
2217         nTrans++;
2218       }
2219       rc = sqlite3PagerExclusiveLock(pPager);
2220       sqlite3BtreeLeave(pBt);
2221     }
2222   }
2223   if( rc!=SQLITE_OK ){
2224     return rc;
2225   }
2226 
2227   /* If there are any write-transactions at all, invoke the commit hook */
2228   if( needXcommit && db->xCommitCallback ){
2229     rc = db->xCommitCallback(db->pCommitArg);
2230     if( rc ){
2231       return SQLITE_CONSTRAINT_COMMITHOOK;
2232     }
2233   }
2234 
2235   /* The simple case - no more than one database file (not counting the
2236   ** TEMP database) has a transaction active.   There is no need for the
2237   ** master-journal.
2238   **
2239   ** If the return value of sqlite3BtreeGetFilename() is a zero length
2240   ** string, it means the main database is :memory: or a temp file.  In
2241   ** that case we do not support atomic multi-file commits, so use the
2242   ** simple case then too.
2243   */
2244   if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt))
2245    || nTrans<=1
2246   ){
2247     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
2248       Btree *pBt = db->aDb[i].pBt;
2249       if( pBt ){
2250         rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
2251       }
2252     }
2253 
2254     /* Do the commit only if all databases successfully complete phase 1.
2255     ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
2256     ** IO error while deleting or truncating a journal file. It is unlikely,
2257     ** but could happen. In this case abandon processing and return the error.
2258     */
2259     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
2260       Btree *pBt = db->aDb[i].pBt;
2261       if( pBt ){
2262         rc = sqlite3BtreeCommitPhaseTwo(pBt, 0);
2263       }
2264     }
2265     if( rc==SQLITE_OK ){
2266       sqlite3VtabCommit(db);
2267     }
2268   }
2269 
2270   /* The complex case - There is a multi-file write-transaction active.
2271   ** This requires a master journal file to ensure the transaction is
2272   ** committed atomically.
2273   */
2274 #ifndef SQLITE_OMIT_DISKIO
2275   else{
2276     sqlite3_vfs *pVfs = db->pVfs;
2277     char *zMaster = 0;   /* File-name for the master journal */
2278     char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
2279     sqlite3_file *pMaster = 0;
2280     i64 offset = 0;
2281     int res;
2282     int retryCount = 0;
2283     int nMainFile;
2284 
2285     /* Select a master journal file name */
2286     nMainFile = sqlite3Strlen30(zMainFile);
2287     zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XXz", zMainFile);
2288     if( zMaster==0 ) return SQLITE_NOMEM_BKPT;
2289     do {
2290       u32 iRandom;
2291       if( retryCount ){
2292         if( retryCount>100 ){
2293           sqlite3_log(SQLITE_FULL, "MJ delete: %s", zMaster);
2294           sqlite3OsDelete(pVfs, zMaster, 0);
2295           break;
2296         }else if( retryCount==1 ){
2297           sqlite3_log(SQLITE_FULL, "MJ collide: %s", zMaster);
2298         }
2299       }
2300       retryCount++;
2301       sqlite3_randomness(sizeof(iRandom), &iRandom);
2302       sqlite3_snprintf(13, &zMaster[nMainFile], "-mj%06X9%02X",
2303                                (iRandom>>8)&0xffffff, iRandom&0xff);
2304       /* The antipenultimate character of the master journal name must
2305       ** be "9" to avoid name collisions when using 8+3 filenames. */
2306       assert( zMaster[sqlite3Strlen30(zMaster)-3]=='9' );
2307       sqlite3FileSuffix3(zMainFile, zMaster);
2308       rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
2309     }while( rc==SQLITE_OK && res );
2310     if( rc==SQLITE_OK ){
2311       /* Open the master journal. */
2312       rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster,
2313           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
2314           SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
2315       );
2316     }
2317     if( rc!=SQLITE_OK ){
2318       sqlite3DbFree(db, zMaster);
2319       return rc;
2320     }
2321 
2322     /* Write the name of each database file in the transaction into the new
2323     ** master journal file. If an error occurs at this point close
2324     ** and delete the master journal file. All the individual journal files
2325     ** still have 'null' as the master journal pointer, so they will roll
2326     ** back independently if a failure occurs.
2327     */
2328     for(i=0; i<db->nDb; i++){
2329       Btree *pBt = db->aDb[i].pBt;
2330       if( sqlite3BtreeIsInTrans(pBt) ){
2331         char const *zFile = sqlite3BtreeGetJournalname(pBt);
2332         if( zFile==0 ){
2333           continue;  /* Ignore TEMP and :memory: databases */
2334         }
2335         assert( zFile[0]!=0 );
2336         rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
2337         offset += sqlite3Strlen30(zFile)+1;
2338         if( rc!=SQLITE_OK ){
2339           sqlite3OsCloseFree(pMaster);
2340           sqlite3OsDelete(pVfs, zMaster, 0);
2341           sqlite3DbFree(db, zMaster);
2342           return rc;
2343         }
2344       }
2345     }
2346 
2347     /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
2348     ** flag is set this is not required.
2349     */
2350     if( 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)
2351      && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))
2352     ){
2353       sqlite3OsCloseFree(pMaster);
2354       sqlite3OsDelete(pVfs, zMaster, 0);
2355       sqlite3DbFree(db, zMaster);
2356       return rc;
2357     }
2358 
2359     /* Sync all the db files involved in the transaction. The same call
2360     ** sets the master journal pointer in each individual journal. If
2361     ** an error occurs here, do not delete the master journal file.
2362     **
2363     ** If the error occurs during the first call to
2364     ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
2365     ** master journal file will be orphaned. But we cannot delete it,
2366     ** in case the master journal file name was written into the journal
2367     ** file before the failure occurred.
2368     */
2369     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
2370       Btree *pBt = db->aDb[i].pBt;
2371       if( pBt ){
2372         rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
2373       }
2374     }
2375     sqlite3OsCloseFree(pMaster);
2376     assert( rc!=SQLITE_BUSY );
2377     if( rc!=SQLITE_OK ){
2378       sqlite3DbFree(db, zMaster);
2379       return rc;
2380     }
2381 
2382     /* Delete the master journal file. This commits the transaction. After
2383     ** doing this the directory is synced again before any individual
2384     ** transaction files are deleted.
2385     */
2386     rc = sqlite3OsDelete(pVfs, zMaster, 1);
2387     sqlite3DbFree(db, zMaster);
2388     zMaster = 0;
2389     if( rc ){
2390       return rc;
2391     }
2392 
2393     /* All files and directories have already been synced, so the following
2394     ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
2395     ** deleting or truncating journals. If something goes wrong while
2396     ** this is happening we don't really care. The integrity of the
2397     ** transaction is already guaranteed, but some stray 'cold' journals
2398     ** may be lying around. Returning an error code won't help matters.
2399     */
2400     disable_simulated_io_errors();
2401     sqlite3BeginBenignMalloc();
2402     for(i=0; i<db->nDb; i++){
2403       Btree *pBt = db->aDb[i].pBt;
2404       if( pBt ){
2405         sqlite3BtreeCommitPhaseTwo(pBt, 1);
2406       }
2407     }
2408     sqlite3EndBenignMalloc();
2409     enable_simulated_io_errors();
2410 
2411     sqlite3VtabCommit(db);
2412   }
2413 #endif
2414 
2415   return rc;
2416 }
2417 
2418 /*
2419 ** This routine checks that the sqlite3.nVdbeActive count variable
2420 ** matches the number of vdbe's in the list sqlite3.pVdbe that are
2421 ** currently active. An assertion fails if the two counts do not match.
2422 ** This is an internal self-check only - it is not an essential processing
2423 ** step.
2424 **
2425 ** This is a no-op if NDEBUG is defined.
2426 */
2427 #ifndef NDEBUG
2428 static void checkActiveVdbeCnt(sqlite3 *db){
2429   Vdbe *p;
2430   int cnt = 0;
2431   int nWrite = 0;
2432   int nRead = 0;
2433   p = db->pVdbe;
2434   while( p ){
2435     if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){
2436       cnt++;
2437       if( p->readOnly==0 ) nWrite++;
2438       if( p->bIsReader ) nRead++;
2439     }
2440     p = p->pNext;
2441   }
2442   assert( cnt==db->nVdbeActive );
2443   assert( nWrite==db->nVdbeWrite );
2444   assert( nRead==db->nVdbeRead );
2445 }
2446 #else
2447 #define checkActiveVdbeCnt(x)
2448 #endif
2449 
2450 /*
2451 ** If the Vdbe passed as the first argument opened a statement-transaction,
2452 ** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or
2453 ** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement
2454 ** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the
2455 ** statement transaction is committed.
2456 **
2457 ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned.
2458 ** Otherwise SQLITE_OK.
2459 */
2460 int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
2461   sqlite3 *const db = p->db;
2462   int rc = SQLITE_OK;
2463 
2464   /* If p->iStatement is greater than zero, then this Vdbe opened a
2465   ** statement transaction that should be closed here. The only exception
2466   ** is that an IO error may have occurred, causing an emergency rollback.
2467   ** In this case (db->nStatement==0), and there is nothing to do.
2468   */
2469   if( db->nStatement && p->iStatement ){
2470     int i;
2471     const int iSavepoint = p->iStatement-1;
2472 
2473     assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE);
2474     assert( db->nStatement>0 );
2475     assert( p->iStatement==(db->nStatement+db->nSavepoint) );
2476 
2477     for(i=0; i<db->nDb; i++){
2478       int rc2 = SQLITE_OK;
2479       Btree *pBt = db->aDb[i].pBt;
2480       if( pBt ){
2481         if( eOp==SAVEPOINT_ROLLBACK ){
2482           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint);
2483         }
2484         if( rc2==SQLITE_OK ){
2485           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint);
2486         }
2487         if( rc==SQLITE_OK ){
2488           rc = rc2;
2489         }
2490       }
2491     }
2492     db->nStatement--;
2493     p->iStatement = 0;
2494 
2495     if( rc==SQLITE_OK ){
2496       if( eOp==SAVEPOINT_ROLLBACK ){
2497         rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint);
2498       }
2499       if( rc==SQLITE_OK ){
2500         rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint);
2501       }
2502     }
2503 
2504     /* If the statement transaction is being rolled back, also restore the
2505     ** database handles deferred constraint counter to the value it had when
2506     ** the statement transaction was opened.  */
2507     if( eOp==SAVEPOINT_ROLLBACK ){
2508       db->nDeferredCons = p->nStmtDefCons;
2509       db->nDeferredImmCons = p->nStmtDefImmCons;
2510     }
2511   }
2512   return rc;
2513 }
2514 
2515 /*
2516 ** This function is called when a transaction opened by the database
2517 ** handle associated with the VM passed as an argument is about to be
2518 ** committed. If there are outstanding deferred foreign key constraint
2519 ** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK.
2520 **
2521 ** If there are outstanding FK violations and this function returns
2522 ** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT_FOREIGNKEY
2523 ** and write an error message to it. Then return SQLITE_ERROR.
2524 */
2525 #ifndef SQLITE_OMIT_FOREIGN_KEY
2526 int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
2527   sqlite3 *db = p->db;
2528   if( (deferred && (db->nDeferredCons+db->nDeferredImmCons)>0)
2529    || (!deferred && p->nFkConstraint>0)
2530   ){
2531     p->rc = SQLITE_CONSTRAINT_FOREIGNKEY;
2532     p->errorAction = OE_Abort;
2533     sqlite3VdbeError(p, "FOREIGN KEY constraint failed");
2534     return SQLITE_ERROR;
2535   }
2536   return SQLITE_OK;
2537 }
2538 #endif
2539 
2540 /*
2541 ** This routine is called the when a VDBE tries to halt.  If the VDBE
2542 ** has made changes and is in autocommit mode, then commit those
2543 ** changes.  If a rollback is needed, then do the rollback.
2544 **
2545 ** This routine is the only way to move the state of a VM from
2546 ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT.  It is harmless to
2547 ** call this on a VM that is in the SQLITE_MAGIC_HALT state.
2548 **
2549 ** Return an error code.  If the commit could not complete because of
2550 ** lock contention, return SQLITE_BUSY.  If SQLITE_BUSY is returned, it
2551 ** means the close did not happen and needs to be repeated.
2552 */
2553 int sqlite3VdbeHalt(Vdbe *p){
2554   int rc;                         /* Used to store transient return codes */
2555   sqlite3 *db = p->db;
2556 
2557   /* This function contains the logic that determines if a statement or
2558   ** transaction will be committed or rolled back as a result of the
2559   ** execution of this virtual machine.
2560   **
2561   ** If any of the following errors occur:
2562   **
2563   **     SQLITE_NOMEM
2564   **     SQLITE_IOERR
2565   **     SQLITE_FULL
2566   **     SQLITE_INTERRUPT
2567   **
2568   ** Then the internal cache might have been left in an inconsistent
2569   ** state.  We need to rollback the statement transaction, if there is
2570   ** one, or the complete transaction if there is no statement transaction.
2571   */
2572 
2573   if( db->mallocFailed ){
2574     p->rc = SQLITE_NOMEM_BKPT;
2575   }
2576   closeAllCursors(p);
2577   if( p->magic!=VDBE_MAGIC_RUN ){
2578     return SQLITE_OK;
2579   }
2580   checkActiveVdbeCnt(db);
2581 
2582   /* No commit or rollback needed if the program never started or if the
2583   ** SQL statement does not read or write a database file.  */
2584   if( p->pc>=0 && p->bIsReader ){
2585     int mrc;   /* Primary error code from p->rc */
2586     int eStatementOp = 0;
2587     int isSpecialError;            /* Set to true if a 'special' error */
2588 
2589     /* Lock all btrees used by the statement */
2590     sqlite3VdbeEnter(p);
2591 
2592     /* Check for one of the special errors */
2593     mrc = p->rc & 0xff;
2594     isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
2595                      || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
2596     if( isSpecialError ){
2597       /* If the query was read-only and the error code is SQLITE_INTERRUPT,
2598       ** no rollback is necessary. Otherwise, at least a savepoint
2599       ** transaction must be rolled back to restore the database to a
2600       ** consistent state.
2601       **
2602       ** Even if the statement is read-only, it is important to perform
2603       ** a statement or transaction rollback operation. If the error
2604       ** occurred while writing to the journal, sub-journal or database
2605       ** file as part of an effort to free up cache space (see function
2606       ** pagerStress() in pager.c), the rollback is required to restore
2607       ** the pager to a consistent state.
2608       */
2609       if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
2610         if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
2611           eStatementOp = SAVEPOINT_ROLLBACK;
2612         }else{
2613           /* We are forced to roll back the active transaction. Before doing
2614           ** so, abort any other statements this handle currently has active.
2615           */
2616           sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2617           sqlite3CloseSavepoints(db);
2618           db->autoCommit = 1;
2619           p->nChange = 0;
2620         }
2621       }
2622     }
2623 
2624     /* Check for immediate foreign key violations. */
2625     if( p->rc==SQLITE_OK ){
2626       sqlite3VdbeCheckFk(p, 0);
2627     }
2628 
2629     /* If the auto-commit flag is set and this is the only active writer
2630     ** VM, then we do either a commit or rollback of the current transaction.
2631     **
2632     ** Note: This block also runs if one of the special errors handled
2633     ** above has occurred.
2634     */
2635     if( !sqlite3VtabInSync(db)
2636      && db->autoCommit
2637      && db->nVdbeWrite==(p->readOnly==0)
2638     ){
2639       if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
2640         rc = sqlite3VdbeCheckFk(p, 1);
2641         if( rc!=SQLITE_OK ){
2642           if( NEVER(p->readOnly) ){
2643             sqlite3VdbeLeave(p);
2644             return SQLITE_ERROR;
2645           }
2646           rc = SQLITE_CONSTRAINT_FOREIGNKEY;
2647         }else{
2648           /* The auto-commit flag is true, the vdbe program was successful
2649           ** or hit an 'OR FAIL' constraint and there are no deferred foreign
2650           ** key constraints to hold up the transaction. This means a commit
2651           ** is required. */
2652           rc = vdbeCommit(db, p);
2653         }
2654         if( rc==SQLITE_BUSY && p->readOnly ){
2655           sqlite3VdbeLeave(p);
2656           return SQLITE_BUSY;
2657         }else if( rc!=SQLITE_OK ){
2658           p->rc = rc;
2659           sqlite3RollbackAll(db, SQLITE_OK);
2660           p->nChange = 0;
2661         }else{
2662           db->nDeferredCons = 0;
2663           db->nDeferredImmCons = 0;
2664           db->flags &= ~SQLITE_DeferFKs;
2665           sqlite3CommitInternalChanges(db);
2666         }
2667       }else{
2668         sqlite3RollbackAll(db, SQLITE_OK);
2669         p->nChange = 0;
2670       }
2671       db->nStatement = 0;
2672     }else if( eStatementOp==0 ){
2673       if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
2674         eStatementOp = SAVEPOINT_RELEASE;
2675       }else if( p->errorAction==OE_Abort ){
2676         eStatementOp = SAVEPOINT_ROLLBACK;
2677       }else{
2678         sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2679         sqlite3CloseSavepoints(db);
2680         db->autoCommit = 1;
2681         p->nChange = 0;
2682       }
2683     }
2684 
2685     /* If eStatementOp is non-zero, then a statement transaction needs to
2686     ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
2687     ** do so. If this operation returns an error, and the current statement
2688     ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
2689     ** current statement error code.
2690     */
2691     if( eStatementOp ){
2692       rc = sqlite3VdbeCloseStatement(p, eStatementOp);
2693       if( rc ){
2694         if( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ){
2695           p->rc = rc;
2696           sqlite3DbFree(db, p->zErrMsg);
2697           p->zErrMsg = 0;
2698         }
2699         sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2700         sqlite3CloseSavepoints(db);
2701         db->autoCommit = 1;
2702         p->nChange = 0;
2703       }
2704     }
2705 
2706     /* If this was an INSERT, UPDATE or DELETE and no statement transaction
2707     ** has been rolled back, update the database connection change-counter.
2708     */
2709     if( p->changeCntOn ){
2710       if( eStatementOp!=SAVEPOINT_ROLLBACK ){
2711         sqlite3VdbeSetChanges(db, p->nChange);
2712       }else{
2713         sqlite3VdbeSetChanges(db, 0);
2714       }
2715       p->nChange = 0;
2716     }
2717 
2718     /* Release the locks */
2719     sqlite3VdbeLeave(p);
2720   }
2721 
2722   /* We have successfully halted and closed the VM.  Record this fact. */
2723   if( p->pc>=0 ){
2724     db->nVdbeActive--;
2725     if( !p->readOnly ) db->nVdbeWrite--;
2726     if( p->bIsReader ) db->nVdbeRead--;
2727     assert( db->nVdbeActive>=db->nVdbeRead );
2728     assert( db->nVdbeRead>=db->nVdbeWrite );
2729     assert( db->nVdbeWrite>=0 );
2730   }
2731   p->magic = VDBE_MAGIC_HALT;
2732   checkActiveVdbeCnt(db);
2733   if( db->mallocFailed ){
2734     p->rc = SQLITE_NOMEM_BKPT;
2735   }
2736 
2737   /* If the auto-commit flag is set to true, then any locks that were held
2738   ** by connection db have now been released. Call sqlite3ConnectionUnlocked()
2739   ** to invoke any required unlock-notify callbacks.
2740   */
2741   if( db->autoCommit ){
2742     sqlite3ConnectionUnlocked(db);
2743   }
2744 
2745   assert( db->nVdbeActive>0 || db->autoCommit==0 || db->nStatement==0 );
2746   return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK);
2747 }
2748 
2749 
2750 /*
2751 ** Each VDBE holds the result of the most recent sqlite3_step() call
2752 ** in p->rc.  This routine sets that result back to SQLITE_OK.
2753 */
2754 void sqlite3VdbeResetStepResult(Vdbe *p){
2755   p->rc = SQLITE_OK;
2756 }
2757 
2758 /*
2759 ** Copy the error code and error message belonging to the VDBE passed
2760 ** as the first argument to its database handle (so that they will be
2761 ** returned by calls to sqlite3_errcode() and sqlite3_errmsg()).
2762 **
2763 ** This function does not clear the VDBE error code or message, just
2764 ** copies them to the database handle.
2765 */
2766 int sqlite3VdbeTransferError(Vdbe *p){
2767   sqlite3 *db = p->db;
2768   int rc = p->rc;
2769   if( p->zErrMsg ){
2770     db->bBenignMalloc++;
2771     sqlite3BeginBenignMalloc();
2772     if( db->pErr==0 ) db->pErr = sqlite3ValueNew(db);
2773     sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
2774     sqlite3EndBenignMalloc();
2775     db->bBenignMalloc--;
2776     db->errCode = rc;
2777   }else{
2778     sqlite3Error(db, rc);
2779   }
2780   return rc;
2781 }
2782 
2783 #ifdef SQLITE_ENABLE_SQLLOG
2784 /*
2785 ** If an SQLITE_CONFIG_SQLLOG hook is registered and the VM has been run,
2786 ** invoke it.
2787 */
2788 static void vdbeInvokeSqllog(Vdbe *v){
2789   if( sqlite3GlobalConfig.xSqllog && v->rc==SQLITE_OK && v->zSql && v->pc>=0 ){
2790     char *zExpanded = sqlite3VdbeExpandSql(v, v->zSql);
2791     assert( v->db->init.busy==0 );
2792     if( zExpanded ){
2793       sqlite3GlobalConfig.xSqllog(
2794           sqlite3GlobalConfig.pSqllogArg, v->db, zExpanded, 1
2795       );
2796       sqlite3DbFree(v->db, zExpanded);
2797     }
2798   }
2799 }
2800 #else
2801 # define vdbeInvokeSqllog(x)
2802 #endif
2803 
2804 /*
2805 ** Clean up a VDBE after execution but do not delete the VDBE just yet.
2806 ** Write any error messages into *pzErrMsg.  Return the result code.
2807 **
2808 ** After this routine is run, the VDBE should be ready to be executed
2809 ** again.
2810 **
2811 ** To look at it another way, this routine resets the state of the
2812 ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
2813 ** VDBE_MAGIC_INIT.
2814 */
2815 int sqlite3VdbeReset(Vdbe *p){
2816   sqlite3 *db;
2817   db = p->db;
2818 
2819   /* If the VM did not run to completion or if it encountered an
2820   ** error, then it might not have been halted properly.  So halt
2821   ** it now.
2822   */
2823   sqlite3VdbeHalt(p);
2824 
2825   /* If the VDBE has be run even partially, then transfer the error code
2826   ** and error message from the VDBE into the main database structure.  But
2827   ** if the VDBE has just been set to run but has not actually executed any
2828   ** instructions yet, leave the main database error information unchanged.
2829   */
2830   if( p->pc>=0 ){
2831     vdbeInvokeSqllog(p);
2832     sqlite3VdbeTransferError(p);
2833     sqlite3DbFree(db, p->zErrMsg);
2834     p->zErrMsg = 0;
2835     if( p->runOnlyOnce ) p->expired = 1;
2836   }else if( p->rc && p->expired ){
2837     /* The expired flag was set on the VDBE before the first call
2838     ** to sqlite3_step(). For consistency (since sqlite3_step() was
2839     ** called), set the database error in this case as well.
2840     */
2841     sqlite3ErrorWithMsg(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
2842     sqlite3DbFree(db, p->zErrMsg);
2843     p->zErrMsg = 0;
2844   }
2845 
2846   /* Reclaim all memory used by the VDBE
2847   */
2848   Cleanup(p);
2849 
2850   /* Save profiling information from this VDBE run.
2851   */
2852 #ifdef VDBE_PROFILE
2853   {
2854     FILE *out = fopen("vdbe_profile.out", "a");
2855     if( out ){
2856       int i;
2857       fprintf(out, "---- ");
2858       for(i=0; i<p->nOp; i++){
2859         fprintf(out, "%02x", p->aOp[i].opcode);
2860       }
2861       fprintf(out, "\n");
2862       if( p->zSql ){
2863         char c, pc = 0;
2864         fprintf(out, "-- ");
2865         for(i=0; (c = p->zSql[i])!=0; i++){
2866           if( pc=='\n' ) fprintf(out, "-- ");
2867           putc(c, out);
2868           pc = c;
2869         }
2870         if( pc!='\n' ) fprintf(out, "\n");
2871       }
2872       for(i=0; i<p->nOp; i++){
2873         char zHdr[100];
2874         sqlite3_snprintf(sizeof(zHdr), zHdr, "%6u %12llu %8llu ",
2875            p->aOp[i].cnt,
2876            p->aOp[i].cycles,
2877            p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
2878         );
2879         fprintf(out, "%s", zHdr);
2880         sqlite3VdbePrintOp(out, i, &p->aOp[i]);
2881       }
2882       fclose(out);
2883     }
2884   }
2885 #endif
2886   p->iCurrentTime = 0;
2887   p->magic = VDBE_MAGIC_RESET;
2888   return p->rc & db->errMask;
2889 }
2890 
2891 /*
2892 ** Clean up and delete a VDBE after execution.  Return an integer which is
2893 ** the result code.  Write any error message text into *pzErrMsg.
2894 */
2895 int sqlite3VdbeFinalize(Vdbe *p){
2896   int rc = SQLITE_OK;
2897   if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
2898     rc = sqlite3VdbeReset(p);
2899     assert( (rc & p->db->errMask)==rc );
2900   }
2901   sqlite3VdbeDelete(p);
2902   return rc;
2903 }
2904 
2905 /*
2906 ** If parameter iOp is less than zero, then invoke the destructor for
2907 ** all auxiliary data pointers currently cached by the VM passed as
2908 ** the first argument.
2909 **
2910 ** Or, if iOp is greater than or equal to zero, then the destructor is
2911 ** only invoked for those auxiliary data pointers created by the user
2912 ** function invoked by the OP_Function opcode at instruction iOp of
2913 ** VM pVdbe, and only then if:
2914 **
2915 **    * the associated function parameter is the 32nd or later (counting
2916 **      from left to right), or
2917 **
2918 **    * the corresponding bit in argument mask is clear (where the first
2919 **      function parameter corresponds to bit 0 etc.).
2920 */
2921 void sqlite3VdbeDeleteAuxData(sqlite3 *db, AuxData **pp, int iOp, int mask){
2922   while( *pp ){
2923     AuxData *pAux = *pp;
2924     if( (iOp<0)
2925      || (pAux->iOp==iOp && (pAux->iArg>31 || !(mask & MASKBIT32(pAux->iArg))))
2926     ){
2927       testcase( pAux->iArg==31 );
2928       if( pAux->xDelete ){
2929         pAux->xDelete(pAux->pAux);
2930       }
2931       *pp = pAux->pNext;
2932       sqlite3DbFree(db, pAux);
2933     }else{
2934       pp= &pAux->pNext;
2935     }
2936   }
2937 }
2938 
2939 /*
2940 ** Free all memory associated with the Vdbe passed as the second argument,
2941 ** except for object itself, which is preserved.
2942 **
2943 ** The difference between this function and sqlite3VdbeDelete() is that
2944 ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
2945 ** the database connection and frees the object itself.
2946 */
2947 void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
2948   SubProgram *pSub, *pNext;
2949   int i;
2950   assert( p->db==0 || p->db==db );
2951   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
2952   for(pSub=p->pProgram; pSub; pSub=pNext){
2953     pNext = pSub->pNext;
2954     vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
2955     sqlite3DbFree(db, pSub);
2956   }
2957   if( p->magic!=VDBE_MAGIC_INIT ){
2958     releaseMemArray(p->aVar, p->nVar);
2959     for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
2960     sqlite3DbFree(db, p->azVar);
2961     sqlite3DbFree(db, p->pFree);
2962   }
2963   vdbeFreeOpArray(db, p->aOp, p->nOp);
2964   sqlite3DbFree(db, p->aColName);
2965   sqlite3DbFree(db, p->zSql);
2966 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
2967   for(i=0; i<p->nScan; i++){
2968     sqlite3DbFree(db, p->aScan[i].zName);
2969   }
2970   sqlite3DbFree(db, p->aScan);
2971 #endif
2972 }
2973 
2974 /*
2975 ** Delete an entire VDBE.
2976 */
2977 void sqlite3VdbeDelete(Vdbe *p){
2978   sqlite3 *db;
2979 
2980   if( NEVER(p==0) ) return;
2981   db = p->db;
2982   assert( sqlite3_mutex_held(db->mutex) );
2983   sqlite3VdbeClearObject(db, p);
2984   if( p->pPrev ){
2985     p->pPrev->pNext = p->pNext;
2986   }else{
2987     assert( db->pVdbe==p );
2988     db->pVdbe = p->pNext;
2989   }
2990   if( p->pNext ){
2991     p->pNext->pPrev = p->pPrev;
2992   }
2993   p->magic = VDBE_MAGIC_DEAD;
2994   p->db = 0;
2995   sqlite3DbFree(db, p);
2996 }
2997 
2998 /*
2999 ** The cursor "p" has a pending seek operation that has not yet been
3000 ** carried out.  Seek the cursor now.  If an error occurs, return
3001 ** the appropriate error code.
3002 */
3003 static int SQLITE_NOINLINE handleDeferredMoveto(VdbeCursor *p){
3004   int res, rc;
3005 #ifdef SQLITE_TEST
3006   extern int sqlite3_search_count;
3007 #endif
3008   assert( p->deferredMoveto );
3009   assert( p->isTable );
3010   assert( p->eCurType==CURTYPE_BTREE );
3011   rc = sqlite3BtreeMovetoUnpacked(p->uc.pCursor, 0, p->movetoTarget, 0, &res);
3012   if( rc ) return rc;
3013   if( res!=0 ) return SQLITE_CORRUPT_BKPT;
3014 #ifdef SQLITE_TEST
3015   sqlite3_search_count++;
3016 #endif
3017   p->deferredMoveto = 0;
3018   p->cacheStatus = CACHE_STALE;
3019   return SQLITE_OK;
3020 }
3021 
3022 /*
3023 ** Something has moved cursor "p" out of place.  Maybe the row it was
3024 ** pointed to was deleted out from under it.  Or maybe the btree was
3025 ** rebalanced.  Whatever the cause, try to restore "p" to the place it
3026 ** is supposed to be pointing.  If the row was deleted out from under the
3027 ** cursor, set the cursor to point to a NULL row.
3028 */
3029 static int SQLITE_NOINLINE handleMovedCursor(VdbeCursor *p){
3030   int isDifferentRow, rc;
3031   assert( p->eCurType==CURTYPE_BTREE );
3032   assert( p->uc.pCursor!=0 );
3033   assert( sqlite3BtreeCursorHasMoved(p->uc.pCursor) );
3034   rc = sqlite3BtreeCursorRestore(p->uc.pCursor, &isDifferentRow);
3035   p->cacheStatus = CACHE_STALE;
3036   if( isDifferentRow ) p->nullRow = 1;
3037   return rc;
3038 }
3039 
3040 /*
3041 ** Check to ensure that the cursor is valid.  Restore the cursor
3042 ** if need be.  Return any I/O error from the restore operation.
3043 */
3044 int sqlite3VdbeCursorRestore(VdbeCursor *p){
3045   assert( p->eCurType==CURTYPE_BTREE );
3046   if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
3047     return handleMovedCursor(p);
3048   }
3049   return SQLITE_OK;
3050 }
3051 
3052 /*
3053 ** Make sure the cursor p is ready to read or write the row to which it
3054 ** was last positioned.  Return an error code if an OOM fault or I/O error
3055 ** prevents us from positioning the cursor to its correct position.
3056 **
3057 ** If a MoveTo operation is pending on the given cursor, then do that
3058 ** MoveTo now.  If no move is pending, check to see if the row has been
3059 ** deleted out from under the cursor and if it has, mark the row as
3060 ** a NULL row.
3061 **
3062 ** If the cursor is already pointing to the correct row and that row has
3063 ** not been deleted out from under the cursor, then this routine is a no-op.
3064 */
3065 int sqlite3VdbeCursorMoveto(VdbeCursor **pp, int *piCol){
3066   VdbeCursor *p = *pp;
3067   if( p->eCurType==CURTYPE_BTREE ){
3068     if( p->deferredMoveto ){
3069       int iMap;
3070       if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 ){
3071         *pp = p->pAltCursor;
3072         *piCol = iMap - 1;
3073         return SQLITE_OK;
3074       }
3075       return handleDeferredMoveto(p);
3076     }
3077     if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
3078       return handleMovedCursor(p);
3079     }
3080   }
3081   return SQLITE_OK;
3082 }
3083 
3084 /*
3085 ** The following functions:
3086 **
3087 ** sqlite3VdbeSerialType()
3088 ** sqlite3VdbeSerialTypeLen()
3089 ** sqlite3VdbeSerialLen()
3090 ** sqlite3VdbeSerialPut()
3091 ** sqlite3VdbeSerialGet()
3092 **
3093 ** encapsulate the code that serializes values for storage in SQLite
3094 ** data and index records. Each serialized value consists of a
3095 ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
3096 ** integer, stored as a varint.
3097 **
3098 ** In an SQLite index record, the serial type is stored directly before
3099 ** the blob of data that it corresponds to. In a table record, all serial
3100 ** types are stored at the start of the record, and the blobs of data at
3101 ** the end. Hence these functions allow the caller to handle the
3102 ** serial-type and data blob separately.
3103 **
3104 ** The following table describes the various storage classes for data:
3105 **
3106 **   serial type        bytes of data      type
3107 **   --------------     ---------------    ---------------
3108 **      0                     0            NULL
3109 **      1                     1            signed integer
3110 **      2                     2            signed integer
3111 **      3                     3            signed integer
3112 **      4                     4            signed integer
3113 **      5                     6            signed integer
3114 **      6                     8            signed integer
3115 **      7                     8            IEEE float
3116 **      8                     0            Integer constant 0
3117 **      9                     0            Integer constant 1
3118 **     10,11                               reserved for expansion
3119 **    N>=12 and even       (N-12)/2        BLOB
3120 **    N>=13 and odd        (N-13)/2        text
3121 **
3122 ** The 8 and 9 types were added in 3.3.0, file format 4.  Prior versions
3123 ** of SQLite will not understand those serial types.
3124 */
3125 
3126 /*
3127 ** Return the serial-type for the value stored in pMem.
3128 */
3129 u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
3130   int flags = pMem->flags;
3131   u32 n;
3132 
3133   assert( pLen!=0 );
3134   if( flags&MEM_Null ){
3135     *pLen = 0;
3136     return 0;
3137   }
3138   if( flags&MEM_Int ){
3139     /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
3140 #   define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
3141     i64 i = pMem->u.i;
3142     u64 u;
3143     if( i<0 ){
3144       u = ~i;
3145     }else{
3146       u = i;
3147     }
3148     if( u<=127 ){
3149       if( (i&1)==i && file_format>=4 ){
3150         *pLen = 0;
3151         return 8+(u32)u;
3152       }else{
3153         *pLen = 1;
3154         return 1;
3155       }
3156     }
3157     if( u<=32767 ){ *pLen = 2; return 2; }
3158     if( u<=8388607 ){ *pLen = 3; return 3; }
3159     if( u<=2147483647 ){ *pLen = 4; return 4; }
3160     if( u<=MAX_6BYTE ){ *pLen = 6; return 5; }
3161     *pLen = 8;
3162     return 6;
3163   }
3164   if( flags&MEM_Real ){
3165     *pLen = 8;
3166     return 7;
3167   }
3168   assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
3169   assert( pMem->n>=0 );
3170   n = (u32)pMem->n;
3171   if( flags & MEM_Zero ){
3172     n += pMem->u.nZero;
3173   }
3174   *pLen = n;
3175   return ((n*2) + 12 + ((flags&MEM_Str)!=0));
3176 }
3177 
3178 /*
3179 ** The sizes for serial types less than 128
3180 */
3181 static const u8 sqlite3SmallTypeSizes[] = {
3182         /*  0   1   2   3   4   5   6   7   8   9 */
3183 /*   0 */   0,  1,  2,  3,  4,  6,  8,  8,  0,  0,
3184 /*  10 */   0,  0,  0,  0,  1,  1,  2,  2,  3,  3,
3185 /*  20 */   4,  4,  5,  5,  6,  6,  7,  7,  8,  8,
3186 /*  30 */   9,  9, 10, 10, 11, 11, 12, 12, 13, 13,
3187 /*  40 */  14, 14, 15, 15, 16, 16, 17, 17, 18, 18,
3188 /*  50 */  19, 19, 20, 20, 21, 21, 22, 22, 23, 23,
3189 /*  60 */  24, 24, 25, 25, 26, 26, 27, 27, 28, 28,
3190 /*  70 */  29, 29, 30, 30, 31, 31, 32, 32, 33, 33,
3191 /*  80 */  34, 34, 35, 35, 36, 36, 37, 37, 38, 38,
3192 /*  90 */  39, 39, 40, 40, 41, 41, 42, 42, 43, 43,
3193 /* 100 */  44, 44, 45, 45, 46, 46, 47, 47, 48, 48,
3194 /* 110 */  49, 49, 50, 50, 51, 51, 52, 52, 53, 53,
3195 /* 120 */  54, 54, 55, 55, 56, 56, 57, 57
3196 };
3197 
3198 /*
3199 ** Return the length of the data corresponding to the supplied serial-type.
3200 */
3201 u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
3202   if( serial_type>=128 ){
3203     return (serial_type-12)/2;
3204   }else{
3205     assert( serial_type<12
3206             || sqlite3SmallTypeSizes[serial_type]==(serial_type - 12)/2 );
3207     return sqlite3SmallTypeSizes[serial_type];
3208   }
3209 }
3210 u8 sqlite3VdbeOneByteSerialTypeLen(u8 serial_type){
3211   assert( serial_type<128 );
3212   return sqlite3SmallTypeSizes[serial_type];
3213 }
3214 
3215 /*
3216 ** If we are on an architecture with mixed-endian floating
3217 ** points (ex: ARM7) then swap the lower 4 bytes with the
3218 ** upper 4 bytes.  Return the result.
3219 **
3220 ** For most architectures, this is a no-op.
3221 **
3222 ** (later):  It is reported to me that the mixed-endian problem
3223 ** on ARM7 is an issue with GCC, not with the ARM7 chip.  It seems
3224 ** that early versions of GCC stored the two words of a 64-bit
3225 ** float in the wrong order.  And that error has been propagated
3226 ** ever since.  The blame is not necessarily with GCC, though.
3227 ** GCC might have just copying the problem from a prior compiler.
3228 ** I am also told that newer versions of GCC that follow a different
3229 ** ABI get the byte order right.
3230 **
3231 ** Developers using SQLite on an ARM7 should compile and run their
3232 ** application using -DSQLITE_DEBUG=1 at least once.  With DEBUG
3233 ** enabled, some asserts below will ensure that the byte order of
3234 ** floating point values is correct.
3235 **
3236 ** (2007-08-30)  Frank van Vugt has studied this problem closely
3237 ** and has send his findings to the SQLite developers.  Frank
3238 ** writes that some Linux kernels offer floating point hardware
3239 ** emulation that uses only 32-bit mantissas instead of a full
3240 ** 48-bits as required by the IEEE standard.  (This is the
3241 ** CONFIG_FPE_FASTFPE option.)  On such systems, floating point
3242 ** byte swapping becomes very complicated.  To avoid problems,
3243 ** the necessary byte swapping is carried out using a 64-bit integer
3244 ** rather than a 64-bit float.  Frank assures us that the code here
3245 ** works for him.  We, the developers, have no way to independently
3246 ** verify this, but Frank seems to know what he is talking about
3247 ** so we trust him.
3248 */
3249 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
3250 static u64 floatSwap(u64 in){
3251   union {
3252     u64 r;
3253     u32 i[2];
3254   } u;
3255   u32 t;
3256 
3257   u.r = in;
3258   t = u.i[0];
3259   u.i[0] = u.i[1];
3260   u.i[1] = t;
3261   return u.r;
3262 }
3263 # define swapMixedEndianFloat(X)  X = floatSwap(X)
3264 #else
3265 # define swapMixedEndianFloat(X)
3266 #endif
3267 
3268 /*
3269 ** Write the serialized data blob for the value stored in pMem into
3270 ** buf. It is assumed that the caller has allocated sufficient space.
3271 ** Return the number of bytes written.
3272 **
3273 ** nBuf is the amount of space left in buf[].  The caller is responsible
3274 ** for allocating enough space to buf[] to hold the entire field, exclusive
3275 ** of the pMem->u.nZero bytes for a MEM_Zero value.
3276 **
3277 ** Return the number of bytes actually written into buf[].  The number
3278 ** of bytes in the zero-filled tail is included in the return value only
3279 ** if those bytes were zeroed in buf[].
3280 */
3281 u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){
3282   u32 len;
3283 
3284   /* Integer and Real */
3285   if( serial_type<=7 && serial_type>0 ){
3286     u64 v;
3287     u32 i;
3288     if( serial_type==7 ){
3289       assert( sizeof(v)==sizeof(pMem->u.r) );
3290       memcpy(&v, &pMem->u.r, sizeof(v));
3291       swapMixedEndianFloat(v);
3292     }else{
3293       v = pMem->u.i;
3294     }
3295     len = i = sqlite3SmallTypeSizes[serial_type];
3296     assert( i>0 );
3297     do{
3298       buf[--i] = (u8)(v&0xFF);
3299       v >>= 8;
3300     }while( i );
3301     return len;
3302   }
3303 
3304   /* String or blob */
3305   if( serial_type>=12 ){
3306     assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
3307              == (int)sqlite3VdbeSerialTypeLen(serial_type) );
3308     len = pMem->n;
3309     if( len>0 ) memcpy(buf, pMem->z, len);
3310     return len;
3311   }
3312 
3313   /* NULL or constants 0 or 1 */
3314   return 0;
3315 }
3316 
3317 /* Input "x" is a sequence of unsigned characters that represent a
3318 ** big-endian integer.  Return the equivalent native integer
3319 */
3320 #define ONE_BYTE_INT(x)    ((i8)(x)[0])
3321 #define TWO_BYTE_INT(x)    (256*(i8)((x)[0])|(x)[1])
3322 #define THREE_BYTE_INT(x)  (65536*(i8)((x)[0])|((x)[1]<<8)|(x)[2])
3323 #define FOUR_BYTE_UINT(x)  (((u32)(x)[0]<<24)|((x)[1]<<16)|((x)[2]<<8)|(x)[3])
3324 #define FOUR_BYTE_INT(x) (16777216*(i8)((x)[0])|((x)[1]<<16)|((x)[2]<<8)|(x)[3])
3325 
3326 /*
3327 ** Deserialize the data blob pointed to by buf as serial type serial_type
3328 ** and store the result in pMem.  Return the number of bytes read.
3329 **
3330 ** This function is implemented as two separate routines for performance.
3331 ** The few cases that require local variables are broken out into a separate
3332 ** routine so that in most cases the overhead of moving the stack pointer
3333 ** is avoided.
3334 */
3335 static u32 SQLITE_NOINLINE serialGet(
3336   const unsigned char *buf,     /* Buffer to deserialize from */
3337   u32 serial_type,              /* Serial type to deserialize */
3338   Mem *pMem                     /* Memory cell to write value into */
3339 ){
3340   u64 x = FOUR_BYTE_UINT(buf);
3341   u32 y = FOUR_BYTE_UINT(buf+4);
3342   x = (x<<32) + y;
3343   if( serial_type==6 ){
3344     /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit
3345     ** twos-complement integer. */
3346     pMem->u.i = *(i64*)&x;
3347     pMem->flags = MEM_Int;
3348     testcase( pMem->u.i<0 );
3349   }else{
3350     /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit
3351     ** floating point number. */
3352 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
3353     /* Verify that integers and floating point values use the same
3354     ** byte order.  Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
3355     ** defined that 64-bit floating point values really are mixed
3356     ** endian.
3357     */
3358     static const u64 t1 = ((u64)0x3ff00000)<<32;
3359     static const double r1 = 1.0;
3360     u64 t2 = t1;
3361     swapMixedEndianFloat(t2);
3362     assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
3363 #endif
3364     assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 );
3365     swapMixedEndianFloat(x);
3366     memcpy(&pMem->u.r, &x, sizeof(x));
3367     pMem->flags = sqlite3IsNaN(pMem->u.r) ? MEM_Null : MEM_Real;
3368   }
3369   return 8;
3370 }
3371 u32 sqlite3VdbeSerialGet(
3372   const unsigned char *buf,     /* Buffer to deserialize from */
3373   u32 serial_type,              /* Serial type to deserialize */
3374   Mem *pMem                     /* Memory cell to write value into */
3375 ){
3376   switch( serial_type ){
3377     case 10:   /* Reserved for future use */
3378     case 11:   /* Reserved for future use */
3379     case 0: {  /* Null */
3380       /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
3381       pMem->flags = MEM_Null;
3382       break;
3383     }
3384     case 1: {
3385       /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
3386       ** integer. */
3387       pMem->u.i = ONE_BYTE_INT(buf);
3388       pMem->flags = MEM_Int;
3389       testcase( pMem->u.i<0 );
3390       return 1;
3391     }
3392     case 2: { /* 2-byte signed integer */
3393       /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
3394       ** twos-complement integer. */
3395       pMem->u.i = TWO_BYTE_INT(buf);
3396       pMem->flags = MEM_Int;
3397       testcase( pMem->u.i<0 );
3398       return 2;
3399     }
3400     case 3: { /* 3-byte signed integer */
3401       /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
3402       ** twos-complement integer. */
3403       pMem->u.i = THREE_BYTE_INT(buf);
3404       pMem->flags = MEM_Int;
3405       testcase( pMem->u.i<0 );
3406       return 3;
3407     }
3408     case 4: { /* 4-byte signed integer */
3409       /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
3410       ** twos-complement integer. */
3411       pMem->u.i = FOUR_BYTE_INT(buf);
3412 #ifdef __HP_cc
3413       /* Work around a sign-extension bug in the HP compiler for HP/UX */
3414       if( buf[0]&0x80 ) pMem->u.i |= 0xffffffff80000000LL;
3415 #endif
3416       pMem->flags = MEM_Int;
3417       testcase( pMem->u.i<0 );
3418       return 4;
3419     }
3420     case 5: { /* 6-byte signed integer */
3421       /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
3422       ** twos-complement integer. */
3423       pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
3424       pMem->flags = MEM_Int;
3425       testcase( pMem->u.i<0 );
3426       return 6;
3427     }
3428     case 6:   /* 8-byte signed integer */
3429     case 7: { /* IEEE floating point */
3430       /* These use local variables, so do them in a separate routine
3431       ** to avoid having to move the frame pointer in the common case */
3432       return serialGet(buf,serial_type,pMem);
3433     }
3434     case 8:    /* Integer 0 */
3435     case 9: {  /* Integer 1 */
3436       /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */
3437       /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
3438       pMem->u.i = serial_type-8;
3439       pMem->flags = MEM_Int;
3440       return 0;
3441     }
3442     default: {
3443       /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
3444       ** length.
3445       ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and
3446       ** (N-13)/2 bytes in length. */
3447       static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
3448       pMem->z = (char *)buf;
3449       pMem->n = (serial_type-12)/2;
3450       pMem->flags = aFlag[serial_type&1];
3451       return pMem->n;
3452     }
3453   }
3454   return 0;
3455 }
3456 /*
3457 ** This routine is used to allocate sufficient space for an UnpackedRecord
3458 ** structure large enough to be used with sqlite3VdbeRecordUnpack() if
3459 ** the first argument is a pointer to KeyInfo structure pKeyInfo.
3460 **
3461 ** The space is either allocated using sqlite3DbMallocRaw() or from within
3462 ** the unaligned buffer passed via the second and third arguments (presumably
3463 ** stack space). If the former, then *ppFree is set to a pointer that should
3464 ** be eventually freed by the caller using sqlite3DbFree(). Or, if the
3465 ** allocation comes from the pSpace/szSpace buffer, *ppFree is set to NULL
3466 ** before returning.
3467 **
3468 ** If an OOM error occurs, NULL is returned.
3469 */
3470 UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
3471   KeyInfo *pKeyInfo,              /* Description of the record */
3472   char *pSpace,                   /* Unaligned space available */
3473   int szSpace,                    /* Size of pSpace[] in bytes */
3474   char **ppFree                   /* OUT: Caller should free this pointer */
3475 ){
3476   UnpackedRecord *p;              /* Unpacked record to return */
3477   int nOff;                       /* Increment pSpace by nOff to align it */
3478   int nByte;                      /* Number of bytes required for *p */
3479 
3480   /* We want to shift the pointer pSpace up such that it is 8-byte aligned.
3481   ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift
3482   ** it by.  If pSpace is already 8-byte aligned, nOff should be zero.
3483   */
3484   nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7;
3485   nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
3486   if( nByte>szSpace+nOff ){
3487     p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte);
3488     *ppFree = (char *)p;
3489     if( !p ) return 0;
3490   }else{
3491     p = (UnpackedRecord*)&pSpace[nOff];
3492     *ppFree = 0;
3493   }
3494 
3495   p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
3496   assert( pKeyInfo->aSortOrder!=0 );
3497   p->pKeyInfo = pKeyInfo;
3498   p->nField = pKeyInfo->nField + 1;
3499   return p;
3500 }
3501 
3502 /*
3503 ** Given the nKey-byte encoding of a record in pKey[], populate the
3504 ** UnpackedRecord structure indicated by the fourth argument with the
3505 ** contents of the decoded record.
3506 */
3507 void sqlite3VdbeRecordUnpack(
3508   KeyInfo *pKeyInfo,     /* Information about the record format */
3509   int nKey,              /* Size of the binary record */
3510   const void *pKey,      /* The binary record */
3511   UnpackedRecord *p      /* Populate this structure before returning. */
3512 ){
3513   const unsigned char *aKey = (const unsigned char *)pKey;
3514   int d;
3515   u32 idx;                        /* Offset in aKey[] to read from */
3516   u16 u;                          /* Unsigned loop counter */
3517   u32 szHdr;
3518   Mem *pMem = p->aMem;
3519 
3520   p->default_rc = 0;
3521   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
3522   idx = getVarint32(aKey, szHdr);
3523   d = szHdr;
3524   u = 0;
3525   while( idx<szHdr && d<=nKey ){
3526     u32 serial_type;
3527 
3528     idx += getVarint32(&aKey[idx], serial_type);
3529     pMem->enc = pKeyInfo->enc;
3530     pMem->db = pKeyInfo->db;
3531     /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
3532     pMem->szMalloc = 0;
3533     pMem->z = 0;
3534     d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
3535     pMem++;
3536     if( (++u)>=p->nField ) break;
3537   }
3538   assert( u<=pKeyInfo->nField + 1 );
3539   p->nField = u;
3540 }
3541 
3542 #if SQLITE_DEBUG
3543 /*
3544 ** This function compares two index or table record keys in the same way
3545 ** as the sqlite3VdbeRecordCompare() routine. Unlike VdbeRecordCompare(),
3546 ** this function deserializes and compares values using the
3547 ** sqlite3VdbeSerialGet() and sqlite3MemCompare() functions. It is used
3548 ** in assert() statements to ensure that the optimized code in
3549 ** sqlite3VdbeRecordCompare() returns results with these two primitives.
3550 **
3551 ** Return true if the result of comparison is equivalent to desiredResult.
3552 ** Return false if there is a disagreement.
3553 */
3554 static int vdbeRecordCompareDebug(
3555   int nKey1, const void *pKey1, /* Left key */
3556   const UnpackedRecord *pPKey2, /* Right key */
3557   int desiredResult             /* Correct answer */
3558 ){
3559   u32 d1;            /* Offset into aKey[] of next data element */
3560   u32 idx1;          /* Offset into aKey[] of next header element */
3561   u32 szHdr1;        /* Number of bytes in header */
3562   int i = 0;
3563   int rc = 0;
3564   const unsigned char *aKey1 = (const unsigned char *)pKey1;
3565   KeyInfo *pKeyInfo;
3566   Mem mem1;
3567 
3568   pKeyInfo = pPKey2->pKeyInfo;
3569   if( pKeyInfo->db==0 ) return 1;
3570   mem1.enc = pKeyInfo->enc;
3571   mem1.db = pKeyInfo->db;
3572   /* mem1.flags = 0;  // Will be initialized by sqlite3VdbeSerialGet() */
3573   VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
3574 
3575   /* Compilers may complain that mem1.u.i is potentially uninitialized.
3576   ** We could initialize it, as shown here, to silence those complaints.
3577   ** But in fact, mem1.u.i will never actually be used uninitialized, and doing
3578   ** the unnecessary initialization has a measurable negative performance
3579   ** impact, since this routine is a very high runner.  And so, we choose
3580   ** to ignore the compiler warnings and leave this variable uninitialized.
3581   */
3582   /*  mem1.u.i = 0;  // not needed, here to silence compiler warning */
3583 
3584   idx1 = getVarint32(aKey1, szHdr1);
3585   if( szHdr1>98307 ) return SQLITE_CORRUPT;
3586   d1 = szHdr1;
3587   assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB );
3588   assert( pKeyInfo->aSortOrder!=0 );
3589   assert( pKeyInfo->nField>0 );
3590   assert( idx1<=szHdr1 || CORRUPT_DB );
3591   do{
3592     u32 serial_type1;
3593 
3594     /* Read the serial types for the next element in each key. */
3595     idx1 += getVarint32( aKey1+idx1, serial_type1 );
3596 
3597     /* Verify that there is enough key space remaining to avoid
3598     ** a buffer overread.  The "d1+serial_type1+2" subexpression will
3599     ** always be greater than or equal to the amount of required key space.
3600     ** Use that approximation to avoid the more expensive call to
3601     ** sqlite3VdbeSerialTypeLen() in the common case.
3602     */
3603     if( d1+serial_type1+2>(u32)nKey1
3604      && d1+sqlite3VdbeSerialTypeLen(serial_type1)>(u32)nKey1
3605     ){
3606       break;
3607     }
3608 
3609     /* Extract the values to be compared.
3610     */
3611     d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
3612 
3613     /* Do the comparison
3614     */
3615     rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], pKeyInfo->aColl[i]);
3616     if( rc!=0 ){
3617       assert( mem1.szMalloc==0 );  /* See comment below */
3618       if( pKeyInfo->aSortOrder[i] ){
3619         rc = -rc;  /* Invert the result for DESC sort order. */
3620       }
3621       goto debugCompareEnd;
3622     }
3623     i++;
3624   }while( idx1<szHdr1 && i<pPKey2->nField );
3625 
3626   /* No memory allocation is ever used on mem1.  Prove this using
3627   ** the following assert().  If the assert() fails, it indicates a
3628   ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
3629   */
3630   assert( mem1.szMalloc==0 );
3631 
3632   /* rc==0 here means that one of the keys ran out of fields and
3633   ** all the fields up to that point were equal. Return the default_rc
3634   ** value.  */
3635   rc = pPKey2->default_rc;
3636 
3637 debugCompareEnd:
3638   if( desiredResult==0 && rc==0 ) return 1;
3639   if( desiredResult<0 && rc<0 ) return 1;
3640   if( desiredResult>0 && rc>0 ) return 1;
3641   if( CORRUPT_DB ) return 1;
3642   if( pKeyInfo->db->mallocFailed ) return 1;
3643   return 0;
3644 }
3645 #endif
3646 
3647 #if SQLITE_DEBUG
3648 /*
3649 ** Count the number of fields (a.k.a. columns) in the record given by
3650 ** pKey,nKey.  The verify that this count is less than or equal to the
3651 ** limit given by pKeyInfo->nField + pKeyInfo->nXField.
3652 **
3653 ** If this constraint is not satisfied, it means that the high-speed
3654 ** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will
3655 ** not work correctly.  If this assert() ever fires, it probably means
3656 ** that the KeyInfo.nField or KeyInfo.nXField values were computed
3657 ** incorrectly.
3658 */
3659 static void vdbeAssertFieldCountWithinLimits(
3660   int nKey, const void *pKey,   /* The record to verify */
3661   const KeyInfo *pKeyInfo       /* Compare size with this KeyInfo */
3662 ){
3663   int nField = 0;
3664   u32 szHdr;
3665   u32 idx;
3666   u32 notUsed;
3667   const unsigned char *aKey = (const unsigned char*)pKey;
3668 
3669   if( CORRUPT_DB ) return;
3670   idx = getVarint32(aKey, szHdr);
3671   assert( nKey>=0 );
3672   assert( szHdr<=(u32)nKey );
3673   while( idx<szHdr ){
3674     idx += getVarint32(aKey+idx, notUsed);
3675     nField++;
3676   }
3677   assert( nField <= pKeyInfo->nField+pKeyInfo->nXField );
3678 }
3679 #else
3680 # define vdbeAssertFieldCountWithinLimits(A,B,C)
3681 #endif
3682 
3683 /*
3684 ** Both *pMem1 and *pMem2 contain string values. Compare the two values
3685 ** using the collation sequence pColl. As usual, return a negative , zero
3686 ** or positive value if *pMem1 is less than, equal to or greater than
3687 ** *pMem2, respectively. Similar in spirit to "rc = (*pMem1) - (*pMem2);".
3688 */
3689 static int vdbeCompareMemString(
3690   const Mem *pMem1,
3691   const Mem *pMem2,
3692   const CollSeq *pColl,
3693   u8 *prcErr                      /* If an OOM occurs, set to SQLITE_NOMEM */
3694 ){
3695   if( pMem1->enc==pColl->enc ){
3696     /* The strings are already in the correct encoding.  Call the
3697      ** comparison function directly */
3698     return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
3699   }else{
3700     int rc;
3701     const void *v1, *v2;
3702     int n1, n2;
3703     Mem c1;
3704     Mem c2;
3705     sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null);
3706     sqlite3VdbeMemInit(&c2, pMem1->db, MEM_Null);
3707     sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
3708     sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
3709     v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
3710     n1 = v1==0 ? 0 : c1.n;
3711     v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
3712     n2 = v2==0 ? 0 : c2.n;
3713     rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
3714     if( (v1==0 || v2==0) && prcErr ) *prcErr = SQLITE_NOMEM_BKPT;
3715     sqlite3VdbeMemRelease(&c1);
3716     sqlite3VdbeMemRelease(&c2);
3717     return rc;
3718   }
3719 }
3720 
3721 /*
3722 ** The input pBlob is guaranteed to be a Blob that is not marked
3723 ** with MEM_Zero.  Return true if it could be a zero-blob.
3724 */
3725 static int isAllZero(const char *z, int n){
3726   int i;
3727   for(i=0; i<n; i++){
3728     if( z[i] ) return 0;
3729   }
3730   return 1;
3731 }
3732 
3733 /*
3734 ** Compare two blobs.  Return negative, zero, or positive if the first
3735 ** is less than, equal to, or greater than the second, respectively.
3736 ** If one blob is a prefix of the other, then the shorter is the lessor.
3737 */
3738 static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){
3739   int c;
3740   int n1 = pB1->n;
3741   int n2 = pB2->n;
3742 
3743   /* It is possible to have a Blob value that has some non-zero content
3744   ** followed by zero content.  But that only comes up for Blobs formed
3745   ** by the OP_MakeRecord opcode, and such Blobs never get passed into
3746   ** sqlite3MemCompare(). */
3747   assert( (pB1->flags & MEM_Zero)==0 || n1==0 );
3748   assert( (pB2->flags & MEM_Zero)==0 || n2==0 );
3749 
3750   if( (pB1->flags|pB2->flags) & MEM_Zero ){
3751     if( pB1->flags & pB2->flags & MEM_Zero ){
3752       return pB1->u.nZero - pB2->u.nZero;
3753     }else if( pB1->flags & MEM_Zero ){
3754       if( !isAllZero(pB2->z, pB2->n) ) return -1;
3755       return pB1->u.nZero - n2;
3756     }else{
3757       if( !isAllZero(pB1->z, pB1->n) ) return +1;
3758       return n1 - pB2->u.nZero;
3759     }
3760   }
3761   c = memcmp(pB1->z, pB2->z, n1>n2 ? n2 : n1);
3762   if( c ) return c;
3763   return n1 - n2;
3764 }
3765 
3766 /*
3767 ** Do a comparison between a 64-bit signed integer and a 64-bit floating-point
3768 ** number.  Return negative, zero, or positive if the first (i64) is less than,
3769 ** equal to, or greater than the second (double).
3770 */
3771 static int sqlite3IntFloatCompare(i64 i, double r){
3772   if( sizeof(LONGDOUBLE_TYPE)>8 ){
3773     LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i;
3774     if( x<r ) return -1;
3775     if( x>r ) return +1;
3776     return 0;
3777   }else{
3778     i64 y;
3779     double s;
3780     if( r<-9223372036854775808.0 ) return +1;
3781     if( r>9223372036854775807.0 ) return -1;
3782     y = (i64)r;
3783     if( i<y ) return -1;
3784     if( i>y ){
3785       if( y==SMALLEST_INT64 && r>0.0 ) return -1;
3786       return +1;
3787     }
3788     s = (double)i;
3789     if( s<r ) return -1;
3790     if( s>r ) return +1;
3791     return 0;
3792   }
3793 }
3794 
3795 /*
3796 ** Compare the values contained by the two memory cells, returning
3797 ** negative, zero or positive if pMem1 is less than, equal to, or greater
3798 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
3799 ** and reals) sorted numerically, followed by text ordered by the collating
3800 ** sequence pColl and finally blob's ordered by memcmp().
3801 **
3802 ** Two NULL values are considered equal by this function.
3803 */
3804 int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
3805   int f1, f2;
3806   int combined_flags;
3807 
3808   f1 = pMem1->flags;
3809   f2 = pMem2->flags;
3810   combined_flags = f1|f2;
3811   assert( (combined_flags & MEM_RowSet)==0 );
3812 
3813   /* If one value is NULL, it is less than the other. If both values
3814   ** are NULL, return 0.
3815   */
3816   if( combined_flags&MEM_Null ){
3817     return (f2&MEM_Null) - (f1&MEM_Null);
3818   }
3819 
3820   /* At least one of the two values is a number
3821   */
3822   if( combined_flags&(MEM_Int|MEM_Real) ){
3823     if( (f1 & f2 & MEM_Int)!=0 ){
3824       if( pMem1->u.i < pMem2->u.i ) return -1;
3825       if( pMem1->u.i > pMem2->u.i ) return +1;
3826       return 0;
3827     }
3828     if( (f1 & f2 & MEM_Real)!=0 ){
3829       if( pMem1->u.r < pMem2->u.r ) return -1;
3830       if( pMem1->u.r > pMem2->u.r ) return +1;
3831       return 0;
3832     }
3833     if( (f1&MEM_Int)!=0 ){
3834       if( (f2&MEM_Real)!=0 ){
3835         return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r);
3836       }else{
3837         return -1;
3838       }
3839     }
3840     if( (f1&MEM_Real)!=0 ){
3841       if( (f2&MEM_Int)!=0 ){
3842         return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r);
3843       }else{
3844         return -1;
3845       }
3846     }
3847     return +1;
3848   }
3849 
3850   /* If one value is a string and the other is a blob, the string is less.
3851   ** If both are strings, compare using the collating functions.
3852   */
3853   if( combined_flags&MEM_Str ){
3854     if( (f1 & MEM_Str)==0 ){
3855       return 1;
3856     }
3857     if( (f2 & MEM_Str)==0 ){
3858       return -1;
3859     }
3860 
3861     assert( pMem1->enc==pMem2->enc || pMem1->db->mallocFailed );
3862     assert( pMem1->enc==SQLITE_UTF8 ||
3863             pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
3864 
3865     /* The collation sequence must be defined at this point, even if
3866     ** the user deletes the collation sequence after the vdbe program is
3867     ** compiled (this was not always the case).
3868     */
3869     assert( !pColl || pColl->xCmp );
3870 
3871     if( pColl ){
3872       return vdbeCompareMemString(pMem1, pMem2, pColl, 0);
3873     }
3874     /* If a NULL pointer was passed as the collate function, fall through
3875     ** to the blob case and use memcmp().  */
3876   }
3877 
3878   /* Both values must be blobs.  Compare using memcmp().  */
3879   return sqlite3BlobCompare(pMem1, pMem2);
3880 }
3881 
3882 
3883 /*
3884 ** The first argument passed to this function is a serial-type that
3885 ** corresponds to an integer - all values between 1 and 9 inclusive
3886 ** except 7. The second points to a buffer containing an integer value
3887 ** serialized according to serial_type. This function deserializes
3888 ** and returns the value.
3889 */
3890 static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){
3891   u32 y;
3892   assert( CORRUPT_DB || (serial_type>=1 && serial_type<=9 && serial_type!=7) );
3893   switch( serial_type ){
3894     case 0:
3895     case 1:
3896       testcase( aKey[0]&0x80 );
3897       return ONE_BYTE_INT(aKey);
3898     case 2:
3899       testcase( aKey[0]&0x80 );
3900       return TWO_BYTE_INT(aKey);
3901     case 3:
3902       testcase( aKey[0]&0x80 );
3903       return THREE_BYTE_INT(aKey);
3904     case 4: {
3905       testcase( aKey[0]&0x80 );
3906       y = FOUR_BYTE_UINT(aKey);
3907       return (i64)*(int*)&y;
3908     }
3909     case 5: {
3910       testcase( aKey[0]&0x80 );
3911       return FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
3912     }
3913     case 6: {
3914       u64 x = FOUR_BYTE_UINT(aKey);
3915       testcase( aKey[0]&0x80 );
3916       x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
3917       return (i64)*(i64*)&x;
3918     }
3919   }
3920 
3921   return (serial_type - 8);
3922 }
3923 
3924 /*
3925 ** This function compares the two table rows or index records
3926 ** specified by {nKey1, pKey1} and pPKey2.  It returns a negative, zero
3927 ** or positive integer if key1 is less than, equal to or
3928 ** greater than key2.  The {nKey1, pKey1} key must be a blob
3929 ** created by the OP_MakeRecord opcode of the VDBE.  The pPKey2
3930 ** key must be a parsed key such as obtained from
3931 ** sqlite3VdbeParseRecord.
3932 **
3933 ** If argument bSkip is non-zero, it is assumed that the caller has already
3934 ** determined that the first fields of the keys are equal.
3935 **
3936 ** Key1 and Key2 do not have to contain the same number of fields. If all
3937 ** fields that appear in both keys are equal, then pPKey2->default_rc is
3938 ** returned.
3939 **
3940 ** If database corruption is discovered, set pPKey2->errCode to
3941 ** SQLITE_CORRUPT and return 0. If an OOM error is encountered,
3942 ** pPKey2->errCode is set to SQLITE_NOMEM and, if it is not NULL, the
3943 ** malloc-failed flag set on database handle (pPKey2->pKeyInfo->db).
3944 */
3945 int sqlite3VdbeRecordCompareWithSkip(
3946   int nKey1, const void *pKey1,   /* Left key */
3947   UnpackedRecord *pPKey2,         /* Right key */
3948   int bSkip                       /* If true, skip the first field */
3949 ){
3950   u32 d1;                         /* Offset into aKey[] of next data element */
3951   int i;                          /* Index of next field to compare */
3952   u32 szHdr1;                     /* Size of record header in bytes */
3953   u32 idx1;                       /* Offset of first type in header */
3954   int rc = 0;                     /* Return value */
3955   Mem *pRhs = pPKey2->aMem;       /* Next field of pPKey2 to compare */
3956   KeyInfo *pKeyInfo = pPKey2->pKeyInfo;
3957   const unsigned char *aKey1 = (const unsigned char *)pKey1;
3958   Mem mem1;
3959 
3960   /* If bSkip is true, then the caller has already determined that the first
3961   ** two elements in the keys are equal. Fix the various stack variables so
3962   ** that this routine begins comparing at the second field. */
3963   if( bSkip ){
3964     u32 s1;
3965     idx1 = 1 + getVarint32(&aKey1[1], s1);
3966     szHdr1 = aKey1[0];
3967     d1 = szHdr1 + sqlite3VdbeSerialTypeLen(s1);
3968     i = 1;
3969     pRhs++;
3970   }else{
3971     idx1 = getVarint32(aKey1, szHdr1);
3972     d1 = szHdr1;
3973     if( d1>(unsigned)nKey1 ){
3974       pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
3975       return 0;  /* Corruption */
3976     }
3977     i = 0;
3978   }
3979 
3980   VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
3981   assert( pPKey2->pKeyInfo->nField+pPKey2->pKeyInfo->nXField>=pPKey2->nField
3982        || CORRUPT_DB );
3983   assert( pPKey2->pKeyInfo->aSortOrder!=0 );
3984   assert( pPKey2->pKeyInfo->nField>0 );
3985   assert( idx1<=szHdr1 || CORRUPT_DB );
3986   do{
3987     u32 serial_type;
3988 
3989     /* RHS is an integer */
3990     if( pRhs->flags & MEM_Int ){
3991       serial_type = aKey1[idx1];
3992       testcase( serial_type==12 );
3993       if( serial_type>=10 ){
3994         rc = +1;
3995       }else if( serial_type==0 ){
3996         rc = -1;
3997       }else if( serial_type==7 ){
3998         sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
3999         rc = -sqlite3IntFloatCompare(pRhs->u.i, mem1.u.r);
4000       }else{
4001         i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]);
4002         i64 rhs = pRhs->u.i;
4003         if( lhs<rhs ){
4004           rc = -1;
4005         }else if( lhs>rhs ){
4006           rc = +1;
4007         }
4008       }
4009     }
4010 
4011     /* RHS is real */
4012     else if( pRhs->flags & MEM_Real ){
4013       serial_type = aKey1[idx1];
4014       if( serial_type>=10 ){
4015         /* Serial types 12 or greater are strings and blobs (greater than
4016         ** numbers). Types 10 and 11 are currently "reserved for future
4017         ** use", so it doesn't really matter what the results of comparing
4018         ** them to numberic values are.  */
4019         rc = +1;
4020       }else if( serial_type==0 ){
4021         rc = -1;
4022       }else{
4023         sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
4024         if( serial_type==7 ){
4025           if( mem1.u.r<pRhs->u.r ){
4026             rc = -1;
4027           }else if( mem1.u.r>pRhs->u.r ){
4028             rc = +1;
4029           }
4030         }else{
4031           rc = sqlite3IntFloatCompare(mem1.u.i, pRhs->u.r);
4032         }
4033       }
4034     }
4035 
4036     /* RHS is a string */
4037     else if( pRhs->flags & MEM_Str ){
4038       getVarint32(&aKey1[idx1], serial_type);
4039       testcase( serial_type==12 );
4040       if( serial_type<12 ){
4041         rc = -1;
4042       }else if( !(serial_type & 0x01) ){
4043         rc = +1;
4044       }else{
4045         mem1.n = (serial_type - 12) / 2;
4046         testcase( (d1+mem1.n)==(unsigned)nKey1 );
4047         testcase( (d1+mem1.n+1)==(unsigned)nKey1 );
4048         if( (d1+mem1.n) > (unsigned)nKey1 ){
4049           pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
4050           return 0;                /* Corruption */
4051         }else if( pKeyInfo->aColl[i] ){
4052           mem1.enc = pKeyInfo->enc;
4053           mem1.db = pKeyInfo->db;
4054           mem1.flags = MEM_Str;
4055           mem1.z = (char*)&aKey1[d1];
4056           rc = vdbeCompareMemString(
4057               &mem1, pRhs, pKeyInfo->aColl[i], &pPKey2->errCode
4058           );
4059         }else{
4060           int nCmp = MIN(mem1.n, pRhs->n);
4061           rc = memcmp(&aKey1[d1], pRhs->z, nCmp);
4062           if( rc==0 ) rc = mem1.n - pRhs->n;
4063         }
4064       }
4065     }
4066 
4067     /* RHS is a blob */
4068     else if( pRhs->flags & MEM_Blob ){
4069       assert( (pRhs->flags & MEM_Zero)==0 || pRhs->n==0 );
4070       getVarint32(&aKey1[idx1], serial_type);
4071       testcase( serial_type==12 );
4072       if( serial_type<12 || (serial_type & 0x01) ){
4073         rc = -1;
4074       }else{
4075         int nStr = (serial_type - 12) / 2;
4076         testcase( (d1+nStr)==(unsigned)nKey1 );
4077         testcase( (d1+nStr+1)==(unsigned)nKey1 );
4078         if( (d1+nStr) > (unsigned)nKey1 ){
4079           pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
4080           return 0;                /* Corruption */
4081         }else if( pRhs->flags & MEM_Zero ){
4082           if( !isAllZero((const char*)&aKey1[d1],nStr) ){
4083             rc = 1;
4084           }else{
4085             rc = nStr - pRhs->u.nZero;
4086           }
4087         }else{
4088           int nCmp = MIN(nStr, pRhs->n);
4089           rc = memcmp(&aKey1[d1], pRhs->z, nCmp);
4090           if( rc==0 ) rc = nStr - pRhs->n;
4091         }
4092       }
4093     }
4094 
4095     /* RHS is null */
4096     else{
4097       serial_type = aKey1[idx1];
4098       rc = (serial_type!=0);
4099     }
4100 
4101     if( rc!=0 ){
4102       if( pKeyInfo->aSortOrder[i] ){
4103         rc = -rc;
4104       }
4105       assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, rc) );
4106       assert( mem1.szMalloc==0 );  /* See comment below */
4107       return rc;
4108     }
4109 
4110     i++;
4111     pRhs++;
4112     d1 += sqlite3VdbeSerialTypeLen(serial_type);
4113     idx1 += sqlite3VarintLen(serial_type);
4114   }while( idx1<(unsigned)szHdr1 && i<pPKey2->nField && d1<=(unsigned)nKey1 );
4115 
4116   /* No memory allocation is ever used on mem1.  Prove this using
4117   ** the following assert().  If the assert() fails, it indicates a
4118   ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).  */
4119   assert( mem1.szMalloc==0 );
4120 
4121   /* rc==0 here means that one or both of the keys ran out of fields and
4122   ** all the fields up to that point were equal. Return the default_rc
4123   ** value.  */
4124   assert( CORRUPT_DB
4125        || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc)
4126        || pKeyInfo->db->mallocFailed
4127   );
4128   pPKey2->eqSeen = 1;
4129   return pPKey2->default_rc;
4130 }
4131 int sqlite3VdbeRecordCompare(
4132   int nKey1, const void *pKey1,   /* Left key */
4133   UnpackedRecord *pPKey2          /* Right key */
4134 ){
4135   return sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 0);
4136 }
4137 
4138 
4139 /*
4140 ** This function is an optimized version of sqlite3VdbeRecordCompare()
4141 ** that (a) the first field of pPKey2 is an integer, and (b) the
4142 ** size-of-header varint at the start of (pKey1/nKey1) fits in a single
4143 ** byte (i.e. is less than 128).
4144 **
4145 ** To avoid concerns about buffer overreads, this routine is only used
4146 ** on schemas where the maximum valid header size is 63 bytes or less.
4147 */
4148 static int vdbeRecordCompareInt(
4149   int nKey1, const void *pKey1, /* Left key */
4150   UnpackedRecord *pPKey2        /* Right key */
4151 ){
4152   const u8 *aKey = &((const u8*)pKey1)[*(const u8*)pKey1 & 0x3F];
4153   int serial_type = ((const u8*)pKey1)[1];
4154   int res;
4155   u32 y;
4156   u64 x;
4157   i64 v;
4158   i64 lhs;
4159 
4160   vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo);
4161   assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB );
4162   switch( serial_type ){
4163     case 1: { /* 1-byte signed integer */
4164       lhs = ONE_BYTE_INT(aKey);
4165       testcase( lhs<0 );
4166       break;
4167     }
4168     case 2: { /* 2-byte signed integer */
4169       lhs = TWO_BYTE_INT(aKey);
4170       testcase( lhs<0 );
4171       break;
4172     }
4173     case 3: { /* 3-byte signed integer */
4174       lhs = THREE_BYTE_INT(aKey);
4175       testcase( lhs<0 );
4176       break;
4177     }
4178     case 4: { /* 4-byte signed integer */
4179       y = FOUR_BYTE_UINT(aKey);
4180       lhs = (i64)*(int*)&y;
4181       testcase( lhs<0 );
4182       break;
4183     }
4184     case 5: { /* 6-byte signed integer */
4185       lhs = FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey);
4186       testcase( lhs<0 );
4187       break;
4188     }
4189     case 6: { /* 8-byte signed integer */
4190       x = FOUR_BYTE_UINT(aKey);
4191       x = (x<<32) | FOUR_BYTE_UINT(aKey+4);
4192       lhs = *(i64*)&x;
4193       testcase( lhs<0 );
4194       break;
4195     }
4196     case 8:
4197       lhs = 0;
4198       break;
4199     case 9:
4200       lhs = 1;
4201       break;
4202 
4203     /* This case could be removed without changing the results of running
4204     ** this code. Including it causes gcc to generate a faster switch
4205     ** statement (since the range of switch targets now starts at zero and
4206     ** is contiguous) but does not cause any duplicate code to be generated
4207     ** (as gcc is clever enough to combine the two like cases). Other
4208     ** compilers might be similar.  */
4209     case 0: case 7:
4210       return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2);
4211 
4212     default:
4213       return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2);
4214   }
4215 
4216   v = pPKey2->aMem[0].u.i;
4217   if( v>lhs ){
4218     res = pPKey2->r1;
4219   }else if( v<lhs ){
4220     res = pPKey2->r2;
4221   }else if( pPKey2->nField>1 ){
4222     /* The first fields of the two keys are equal. Compare the trailing
4223     ** fields.  */
4224     res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
4225   }else{
4226     /* The first fields of the two keys are equal and there are no trailing
4227     ** fields. Return pPKey2->default_rc in this case. */
4228     res = pPKey2->default_rc;
4229     pPKey2->eqSeen = 1;
4230   }
4231 
4232   assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) );
4233   return res;
4234 }
4235 
4236 /*
4237 ** This function is an optimized version of sqlite3VdbeRecordCompare()
4238 ** that (a) the first field of pPKey2 is a string, that (b) the first field
4239 ** uses the collation sequence BINARY and (c) that the size-of-header varint
4240 ** at the start of (pKey1/nKey1) fits in a single byte.
4241 */
4242 static int vdbeRecordCompareString(
4243   int nKey1, const void *pKey1, /* Left key */
4244   UnpackedRecord *pPKey2        /* Right key */
4245 ){
4246   const u8 *aKey1 = (const u8*)pKey1;
4247   int serial_type;
4248   int res;
4249 
4250   assert( pPKey2->aMem[0].flags & MEM_Str );
4251   vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo);
4252   getVarint32(&aKey1[1], serial_type);
4253   if( serial_type<12 ){
4254     res = pPKey2->r1;      /* (pKey1/nKey1) is a number or a null */
4255   }else if( !(serial_type & 0x01) ){
4256     res = pPKey2->r2;      /* (pKey1/nKey1) is a blob */
4257   }else{
4258     int nCmp;
4259     int nStr;
4260     int szHdr = aKey1[0];
4261 
4262     nStr = (serial_type-12) / 2;
4263     if( (szHdr + nStr) > nKey1 ){
4264       pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
4265       return 0;    /* Corruption */
4266     }
4267     nCmp = MIN( pPKey2->aMem[0].n, nStr );
4268     res = memcmp(&aKey1[szHdr], pPKey2->aMem[0].z, nCmp);
4269 
4270     if( res==0 ){
4271       res = nStr - pPKey2->aMem[0].n;
4272       if( res==0 ){
4273         if( pPKey2->nField>1 ){
4274           res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
4275         }else{
4276           res = pPKey2->default_rc;
4277           pPKey2->eqSeen = 1;
4278         }
4279       }else if( res>0 ){
4280         res = pPKey2->r2;
4281       }else{
4282         res = pPKey2->r1;
4283       }
4284     }else if( res>0 ){
4285       res = pPKey2->r2;
4286     }else{
4287       res = pPKey2->r1;
4288     }
4289   }
4290 
4291   assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res)
4292        || CORRUPT_DB
4293        || pPKey2->pKeyInfo->db->mallocFailed
4294   );
4295   return res;
4296 }
4297 
4298 /*
4299 ** Return a pointer to an sqlite3VdbeRecordCompare() compatible function
4300 ** suitable for comparing serialized records to the unpacked record passed
4301 ** as the only argument.
4302 */
4303 RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
4304   /* varintRecordCompareInt() and varintRecordCompareString() both assume
4305   ** that the size-of-header varint that occurs at the start of each record
4306   ** fits in a single byte (i.e. is 127 or less). varintRecordCompareInt()
4307   ** also assumes that it is safe to overread a buffer by at least the
4308   ** maximum possible legal header size plus 8 bytes. Because there is
4309   ** guaranteed to be at least 74 (but not 136) bytes of padding following each
4310   ** buffer passed to varintRecordCompareInt() this makes it convenient to
4311   ** limit the size of the header to 64 bytes in cases where the first field
4312   ** is an integer.
4313   **
4314   ** The easiest way to enforce this limit is to consider only records with
4315   ** 13 fields or less. If the first field is an integer, the maximum legal
4316   ** header size is (12*5 + 1 + 1) bytes.  */
4317   if( (p->pKeyInfo->nField + p->pKeyInfo->nXField)<=13 ){
4318     int flags = p->aMem[0].flags;
4319     if( p->pKeyInfo->aSortOrder[0] ){
4320       p->r1 = 1;
4321       p->r2 = -1;
4322     }else{
4323       p->r1 = -1;
4324       p->r2 = 1;
4325     }
4326     if( (flags & MEM_Int) ){
4327       return vdbeRecordCompareInt;
4328     }
4329     testcase( flags & MEM_Real );
4330     testcase( flags & MEM_Null );
4331     testcase( flags & MEM_Blob );
4332     if( (flags & (MEM_Real|MEM_Null|MEM_Blob))==0 && p->pKeyInfo->aColl[0]==0 ){
4333       assert( flags & MEM_Str );
4334       return vdbeRecordCompareString;
4335     }
4336   }
4337 
4338   return sqlite3VdbeRecordCompare;
4339 }
4340 
4341 /*
4342 ** pCur points at an index entry created using the OP_MakeRecord opcode.
4343 ** Read the rowid (the last field in the record) and store it in *rowid.
4344 ** Return SQLITE_OK if everything works, or an error code otherwise.
4345 **
4346 ** pCur might be pointing to text obtained from a corrupt database file.
4347 ** So the content cannot be trusted.  Do appropriate checks on the content.
4348 */
4349 int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
4350   i64 nCellKey = 0;
4351   int rc;
4352   u32 szHdr;        /* Size of the header */
4353   u32 typeRowid;    /* Serial type of the rowid */
4354   u32 lenRowid;     /* Size of the rowid */
4355   Mem m, v;
4356 
4357   /* Get the size of the index entry.  Only indices entries of less
4358   ** than 2GiB are support - anything large must be database corruption.
4359   ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
4360   ** this code can safely assume that nCellKey is 32-bits
4361   */
4362   assert( sqlite3BtreeCursorIsValid(pCur) );
4363   nCellKey = sqlite3BtreePayloadSize(pCur);
4364   assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
4365 
4366   /* Read in the complete content of the index entry */
4367   sqlite3VdbeMemInit(&m, db, 0);
4368   rc = sqlite3VdbeMemFromBtree(pCur, 0, (u32)nCellKey, 1, &m);
4369   if( rc ){
4370     return rc;
4371   }
4372 
4373   /* The index entry must begin with a header size */
4374   (void)getVarint32((u8*)m.z, szHdr);
4375   testcase( szHdr==3 );
4376   testcase( szHdr==m.n );
4377   if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
4378     goto idx_rowid_corruption;
4379   }
4380 
4381   /* The last field of the index should be an integer - the ROWID.
4382   ** Verify that the last entry really is an integer. */
4383   (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid);
4384   testcase( typeRowid==1 );
4385   testcase( typeRowid==2 );
4386   testcase( typeRowid==3 );
4387   testcase( typeRowid==4 );
4388   testcase( typeRowid==5 );
4389   testcase( typeRowid==6 );
4390   testcase( typeRowid==8 );
4391   testcase( typeRowid==9 );
4392   if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
4393     goto idx_rowid_corruption;
4394   }
4395   lenRowid = sqlite3SmallTypeSizes[typeRowid];
4396   testcase( (u32)m.n==szHdr+lenRowid );
4397   if( unlikely((u32)m.n<szHdr+lenRowid) ){
4398     goto idx_rowid_corruption;
4399   }
4400 
4401   /* Fetch the integer off the end of the index record */
4402   sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
4403   *rowid = v.u.i;
4404   sqlite3VdbeMemRelease(&m);
4405   return SQLITE_OK;
4406 
4407   /* Jump here if database corruption is detected after m has been
4408   ** allocated.  Free the m object and return SQLITE_CORRUPT. */
4409 idx_rowid_corruption:
4410   testcase( m.szMalloc!=0 );
4411   sqlite3VdbeMemRelease(&m);
4412   return SQLITE_CORRUPT_BKPT;
4413 }
4414 
4415 /*
4416 ** Compare the key of the index entry that cursor pC is pointing to against
4417 ** the key string in pUnpacked.  Write into *pRes a number
4418 ** that is negative, zero, or positive if pC is less than, equal to,
4419 ** or greater than pUnpacked.  Return SQLITE_OK on success.
4420 **
4421 ** pUnpacked is either created without a rowid or is truncated so that it
4422 ** omits the rowid at the end.  The rowid at the end of the index entry
4423 ** is ignored as well.  Hence, this routine only compares the prefixes
4424 ** of the keys prior to the final rowid, not the entire key.
4425 */
4426 int sqlite3VdbeIdxKeyCompare(
4427   sqlite3 *db,                     /* Database connection */
4428   VdbeCursor *pC,                  /* The cursor to compare against */
4429   UnpackedRecord *pUnpacked,       /* Unpacked version of key */
4430   int *res                         /* Write the comparison result here */
4431 ){
4432   i64 nCellKey = 0;
4433   int rc;
4434   BtCursor *pCur;
4435   Mem m;
4436 
4437   assert( pC->eCurType==CURTYPE_BTREE );
4438   pCur = pC->uc.pCursor;
4439   assert( sqlite3BtreeCursorIsValid(pCur) );
4440   nCellKey = sqlite3BtreePayloadSize(pCur);
4441   /* nCellKey will always be between 0 and 0xffffffff because of the way
4442   ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
4443   if( nCellKey<=0 || nCellKey>0x7fffffff ){
4444     *res = 0;
4445     return SQLITE_CORRUPT_BKPT;
4446   }
4447   sqlite3VdbeMemInit(&m, db, 0);
4448   rc = sqlite3VdbeMemFromBtree(pCur, 0, (u32)nCellKey, 1, &m);
4449   if( rc ){
4450     return rc;
4451   }
4452   *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
4453   sqlite3VdbeMemRelease(&m);
4454   return SQLITE_OK;
4455 }
4456 
4457 /*
4458 ** This routine sets the value to be returned by subsequent calls to
4459 ** sqlite3_changes() on the database handle 'db'.
4460 */
4461 void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
4462   assert( sqlite3_mutex_held(db->mutex) );
4463   db->nChange = nChange;
4464   db->nTotalChange += nChange;
4465 }
4466 
4467 /*
4468 ** Set a flag in the vdbe to update the change counter when it is finalised
4469 ** or reset.
4470 */
4471 void sqlite3VdbeCountChanges(Vdbe *v){
4472   v->changeCntOn = 1;
4473 }
4474 
4475 /*
4476 ** Mark every prepared statement associated with a database connection
4477 ** as expired.
4478 **
4479 ** An expired statement means that recompilation of the statement is
4480 ** recommend.  Statements expire when things happen that make their
4481 ** programs obsolete.  Removing user-defined functions or collating
4482 ** sequences, or changing an authorization function are the types of
4483 ** things that make prepared statements obsolete.
4484 */
4485 void sqlite3ExpirePreparedStatements(sqlite3 *db){
4486   Vdbe *p;
4487   for(p = db->pVdbe; p; p=p->pNext){
4488     p->expired = 1;
4489   }
4490 }
4491 
4492 /*
4493 ** Return the database associated with the Vdbe.
4494 */
4495 sqlite3 *sqlite3VdbeDb(Vdbe *v){
4496   return v->db;
4497 }
4498 
4499 /*
4500 ** Return a pointer to an sqlite3_value structure containing the value bound
4501 ** parameter iVar of VM v. Except, if the value is an SQL NULL, return
4502 ** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_*
4503 ** constants) to the value before returning it.
4504 **
4505 ** The returned value must be freed by the caller using sqlite3ValueFree().
4506 */
4507 sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff){
4508   assert( iVar>0 );
4509   if( v ){
4510     Mem *pMem = &v->aVar[iVar-1];
4511     if( 0==(pMem->flags & MEM_Null) ){
4512       sqlite3_value *pRet = sqlite3ValueNew(v->db);
4513       if( pRet ){
4514         sqlite3VdbeMemCopy((Mem *)pRet, pMem);
4515         sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
4516       }
4517       return pRet;
4518     }
4519   }
4520   return 0;
4521 }
4522 
4523 /*
4524 ** Configure SQL variable iVar so that binding a new value to it signals
4525 ** to sqlite3_reoptimize() that re-preparing the statement may result
4526 ** in a better query plan.
4527 */
4528 void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
4529   assert( iVar>0 );
4530   if( iVar>32 ){
4531     v->expmask = 0xffffffff;
4532   }else{
4533     v->expmask |= ((u32)1 << (iVar-1));
4534   }
4535 }
4536 
4537 #ifndef SQLITE_OMIT_VIRTUALTABLE
4538 /*
4539 ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
4540 ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
4541 ** in memory obtained from sqlite3DbMalloc).
4542 */
4543 void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){
4544   if( pVtab->zErrMsg ){
4545     sqlite3 *db = p->db;
4546     sqlite3DbFree(db, p->zErrMsg);
4547     p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
4548     sqlite3_free(pVtab->zErrMsg);
4549     pVtab->zErrMsg = 0;
4550   }
4551 }
4552 #endif /* SQLITE_OMIT_VIRTUALTABLE */
4553 
4554 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
4555 
4556 /*
4557 ** If the second argument is not NULL, release any allocations associated
4558 ** with the memory cells in the p->aMem[] array. Also free the UnpackedRecord
4559 ** structure itself, using sqlite3DbFree().
4560 **
4561 ** This function is used to free UnpackedRecord structures allocated by
4562 ** the vdbeUnpackRecord() function found in vdbeapi.c.
4563 */
4564 static void vdbeFreeUnpacked(sqlite3 *db, UnpackedRecord *p){
4565   if( p ){
4566     int i;
4567     for(i=0; i<p->nField; i++){
4568       Mem *pMem = &p->aMem[i];
4569       if( pMem->zMalloc ) sqlite3VdbeMemRelease(pMem);
4570     }
4571     sqlite3DbFree(db, p);
4572   }
4573 }
4574 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
4575 
4576 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
4577 /*
4578 ** Invoke the pre-update hook. If this is an UPDATE or DELETE pre-update call,
4579 ** then cursor passed as the second argument should point to the row about
4580 ** to be update or deleted. If the application calls sqlite3_preupdate_old(),
4581 ** the required value will be read from the row the cursor points to.
4582 */
4583 void sqlite3VdbePreUpdateHook(
4584   Vdbe *v,                        /* Vdbe pre-update hook is invoked by */
4585   VdbeCursor *pCsr,               /* Cursor to grab old.* values from */
4586   int op,                         /* SQLITE_INSERT, UPDATE or DELETE */
4587   const char *zDb,                /* Database name */
4588   Table *pTab,                    /* Modified table */
4589   i64 iKey1,                      /* Initial key value */
4590   int iReg                        /* Register for new.* record */
4591 ){
4592   sqlite3 *db = v->db;
4593   i64 iKey2;
4594   PreUpdate preupdate;
4595   const char *zTbl = pTab->zName;
4596   static const u8 fakeSortOrder = 0;
4597 
4598   assert( db->pPreUpdate==0 );
4599   memset(&preupdate, 0, sizeof(PreUpdate));
4600   if( op==SQLITE_UPDATE ){
4601     iKey2 = v->aMem[iReg].u.i;
4602   }else{
4603     iKey2 = iKey1;
4604   }
4605 
4606   assert( pCsr->nField==pTab->nCol
4607        || (pCsr->nField==pTab->nCol+1 && op==SQLITE_DELETE && iReg==-1)
4608   );
4609 
4610   preupdate.v = v;
4611   preupdate.pCsr = pCsr;
4612   preupdate.op = op;
4613   preupdate.iNewReg = iReg;
4614   preupdate.keyinfo.db = db;
4615   preupdate.keyinfo.enc = ENC(db);
4616   preupdate.keyinfo.nField = pTab->nCol;
4617   preupdate.keyinfo.aSortOrder = (u8*)&fakeSortOrder;
4618   preupdate.iKey1 = iKey1;
4619   preupdate.iKey2 = iKey2;
4620   preupdate.iPKey = pTab->iPKey;
4621 
4622   db->pPreUpdate = &preupdate;
4623   db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2);
4624   db->pPreUpdate = 0;
4625   sqlite3DbFree(db, preupdate.aRecord);
4626   vdbeFreeUnpacked(db, preupdate.pUnpacked);
4627   vdbeFreeUnpacked(db, preupdate.pNewUnpacked);
4628   if( preupdate.aNew ){
4629     int i;
4630     for(i=0; i<pCsr->nField; i++){
4631       sqlite3VdbeMemRelease(&preupdate.aNew[i]);
4632     }
4633     sqlite3DbFree(db, preupdate.aNew);
4634   }
4635 }
4636 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
4637