xref: /sqlite-3.40.0/src/vdbe.c (revision 42829635)
1 /*
2 ** 2001 September 15
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 ** The code in this file implements execution method of the
13 ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")
14 ** handles housekeeping details such as creating and deleting
15 ** VDBE instances.  This file is solely interested in executing
16 ** the VDBE program.
17 **
18 ** In the external interface, an "sqlite3_stmt*" is an opaque pointer
19 ** to a VDBE.
20 **
21 ** The SQL parser generates a program which is then executed by
22 ** the VDBE to do the work of the SQL statement.  VDBE programs are
23 ** similar in form to assembly language.  The program consists of
24 ** a linear sequence of operations.  Each operation has an opcode
25 ** and 5 operands.  Operands P1, P2, and P3 are integers.  Operand P4
26 ** is a null-terminated string.  Operand P5 is an unsigned character.
27 ** Few opcodes use all 5 operands.
28 **
29 ** Computation results are stored on a set of registers numbered beginning
30 ** with 1 and going up to Vdbe.nMem.  Each register can store
31 ** either an integer, a null-terminated string, a floating point
32 ** number, or the SQL "NULL" value.  An implicit conversion from one
33 ** type to the other occurs as necessary.
34 **
35 ** Most of the code in this file is taken up by the sqlite3VdbeExec()
36 ** function which does the work of interpreting a VDBE program.
37 ** But other routines are also provided to help in building up
38 ** a program instruction by instruction.
39 **
40 ** Various scripts scan this source file in order to generate HTML
41 ** documentation, headers files, or other derived files.  The formatting
42 ** of the code in this file is, therefore, important.  See other comments
43 ** in this file for details.  If in doubt, do not deviate from existing
44 ** commenting and indentation practices when changing or adding code.
45 */
46 #include "sqliteInt.h"
47 #include "vdbeInt.h"
48 
49 /*
50 ** Invoke this macro on memory cells just prior to changing the
51 ** value of the cell.  This macro verifies that shallow copies are
52 ** not misused.
53 */
54 #ifdef SQLITE_DEBUG
55 # define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M)
56 #else
57 # define memAboutToChange(P,M)
58 #endif
59 
60 /*
61 ** The following global variable is incremented every time a cursor
62 ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes.  The test
63 ** procedures use this information to make sure that indices are
64 ** working correctly.  This variable has no function other than to
65 ** help verify the correct operation of the library.
66 */
67 #ifdef SQLITE_TEST
68 int sqlite3_search_count = 0;
69 #endif
70 
71 /*
72 ** When this global variable is positive, it gets decremented once before
73 ** each instruction in the VDBE.  When it reaches zero, the u1.isInterrupted
74 ** field of the sqlite3 structure is set in order to simulate an interrupt.
75 **
76 ** This facility is used for testing purposes only.  It does not function
77 ** in an ordinary build.
78 */
79 #ifdef SQLITE_TEST
80 int sqlite3_interrupt_count = 0;
81 #endif
82 
83 /*
84 ** The next global variable is incremented each type the OP_Sort opcode
85 ** is executed.  The test procedures use this information to make sure that
86 ** sorting is occurring or not occurring at appropriate times.   This variable
87 ** has no function other than to help verify the correct operation of the
88 ** library.
89 */
90 #ifdef SQLITE_TEST
91 int sqlite3_sort_count = 0;
92 #endif
93 
94 /*
95 ** The next global variable records the size of the largest MEM_Blob
96 ** or MEM_Str that has been used by a VDBE opcode.  The test procedures
97 ** use this information to make sure that the zero-blob functionality
98 ** is working correctly.   This variable has no function other than to
99 ** help verify the correct operation of the library.
100 */
101 #ifdef SQLITE_TEST
102 int sqlite3_max_blobsize = 0;
103 static void updateMaxBlobsize(Mem *p){
104   if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){
105     sqlite3_max_blobsize = p->n;
106   }
107 }
108 #endif
109 
110 /*
111 ** The next global variable is incremented each type the OP_Found opcode
112 ** is executed. This is used to test whether or not the foreign key
113 ** operation implemented using OP_FkIsZero is working. This variable
114 ** has no function other than to help verify the correct operation of the
115 ** library.
116 */
117 #ifdef SQLITE_TEST
118 int sqlite3_found_count = 0;
119 #endif
120 
121 /*
122 ** Test a register to see if it exceeds the current maximum blob size.
123 ** If it does, record the new maximum blob size.
124 */
125 #if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST)
126 # define UPDATE_MAX_BLOBSIZE(P)  updateMaxBlobsize(P)
127 #else
128 # define UPDATE_MAX_BLOBSIZE(P)
129 #endif
130 
131 /*
132 ** Convert the given register into a string if it isn't one
133 ** already. Return non-zero if a malloc() fails.
134 */
135 #define Stringify(P, enc) \
136    if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
137      { goto no_mem; }
138 
139 /*
140 ** An ephemeral string value (signified by the MEM_Ephem flag) contains
141 ** a pointer to a dynamically allocated string where some other entity
142 ** is responsible for deallocating that string.  Because the register
143 ** does not control the string, it might be deleted without the register
144 ** knowing it.
145 **
146 ** This routine converts an ephemeral string into a dynamically allocated
147 ** string that the register itself controls.  In other words, it
148 ** converts an MEM_Ephem string into an MEM_Dyn string.
149 */
150 #define Deephemeralize(P) \
151    if( ((P)->flags&MEM_Ephem)!=0 \
152        && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}
153 
154 /* Return true if the cursor was opened using the OP_OpenSorter opcode. */
155 #ifdef SQLITE_OMIT_MERGE_SORT
156 # define isSorter(x) 0
157 #else
158 # define isSorter(x) ((x)->pSorter!=0)
159 #endif
160 
161 /*
162 ** Argument pMem points at a register that will be passed to a
163 ** user-defined function or returned to the user as the result of a query.
164 ** This routine sets the pMem->type variable used by the sqlite3_value_*()
165 ** routines.
166 */
167 void sqlite3VdbeMemStoreType(Mem *pMem){
168   int flags = pMem->flags;
169   if( flags & MEM_Null ){
170     pMem->type = SQLITE_NULL;
171   }
172   else if( flags & MEM_Int ){
173     pMem->type = SQLITE_INTEGER;
174   }
175   else if( flags & MEM_Real ){
176     pMem->type = SQLITE_FLOAT;
177   }
178   else if( flags & MEM_Str ){
179     pMem->type = SQLITE_TEXT;
180   }else{
181     pMem->type = SQLITE_BLOB;
182   }
183 }
184 
185 /*
186 ** Allocate VdbeCursor number iCur.  Return a pointer to it.  Return NULL
187 ** if we run out of memory.
188 */
189 static VdbeCursor *allocateCursor(
190   Vdbe *p,              /* The virtual machine */
191   int iCur,             /* Index of the new VdbeCursor */
192   int nField,           /* Number of fields in the table or index */
193   int iDb,              /* Database the cursor belongs to, or -1 */
194   int isBtreeCursor     /* True for B-Tree.  False for pseudo-table or vtab */
195 ){
196   /* Find the memory cell that will be used to store the blob of memory
197   ** required for this VdbeCursor structure. It is convenient to use a
198   ** vdbe memory cell to manage the memory allocation required for a
199   ** VdbeCursor structure for the following reasons:
200   **
201   **   * Sometimes cursor numbers are used for a couple of different
202   **     purposes in a vdbe program. The different uses might require
203   **     different sized allocations. Memory cells provide growable
204   **     allocations.
205   **
206   **   * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can
207   **     be freed lazily via the sqlite3_release_memory() API. This
208   **     minimizes the number of malloc calls made by the system.
209   **
210   ** Memory cells for cursors are allocated at the top of the address
211   ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for
212   ** cursor 1 is managed by memory cell (p->nMem-1), etc.
213   */
214   Mem *pMem = &p->aMem[p->nMem-iCur];
215 
216   int nByte;
217   VdbeCursor *pCx = 0;
218   nByte =
219       ROUND8(sizeof(VdbeCursor)) +
220       (isBtreeCursor?sqlite3BtreeCursorSize():0) +
221       2*nField*sizeof(u32);
222 
223   assert( iCur<p->nCursor );
224   if( p->apCsr[iCur] ){
225     sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
226     p->apCsr[iCur] = 0;
227   }
228   if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
229     p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
230     memset(pCx, 0, sizeof(VdbeCursor));
231     pCx->iDb = iDb;
232     pCx->nField = nField;
233     if( nField ){
234       pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))];
235     }
236     if( isBtreeCursor ){
237       pCx->pCursor = (BtCursor*)
238           &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)];
239       sqlite3BtreeCursorZero(pCx->pCursor);
240     }
241   }
242   return pCx;
243 }
244 
245 /*
246 ** Try to convert a value into a numeric representation if we can
247 ** do so without loss of information.  In other words, if the string
248 ** looks like a number, convert it into a number.  If it does not
249 ** look like a number, leave it alone.
250 */
251 static void applyNumericAffinity(Mem *pRec){
252   if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
253     double rValue;
254     i64 iValue;
255     u8 enc = pRec->enc;
256     if( (pRec->flags&MEM_Str)==0 ) return;
257     if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
258     if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
259       pRec->u.i = iValue;
260       pRec->flags |= MEM_Int;
261     }else{
262       pRec->r = rValue;
263       pRec->flags |= MEM_Real;
264     }
265   }
266 }
267 
268 /*
269 ** Processing is determine by the affinity parameter:
270 **
271 ** SQLITE_AFF_INTEGER:
272 ** SQLITE_AFF_REAL:
273 ** SQLITE_AFF_NUMERIC:
274 **    Try to convert pRec to an integer representation or a
275 **    floating-point representation if an integer representation
276 **    is not possible.  Note that the integer representation is
277 **    always preferred, even if the affinity is REAL, because
278 **    an integer representation is more space efficient on disk.
279 **
280 ** SQLITE_AFF_TEXT:
281 **    Convert pRec to a text representation.
282 **
283 ** SQLITE_AFF_NONE:
284 **    No-op.  pRec is unchanged.
285 */
286 static void applyAffinity(
287   Mem *pRec,          /* The value to apply affinity to */
288   char affinity,      /* The affinity to be applied */
289   u8 enc              /* Use this text encoding */
290 ){
291   if( affinity==SQLITE_AFF_TEXT ){
292     /* Only attempt the conversion to TEXT if there is an integer or real
293     ** representation (blob and NULL do not get converted) but no string
294     ** representation.
295     */
296     if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
297       sqlite3VdbeMemStringify(pRec, enc);
298     }
299     pRec->flags &= ~(MEM_Real|MEM_Int);
300   }else if( affinity!=SQLITE_AFF_NONE ){
301     assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
302              || affinity==SQLITE_AFF_NUMERIC );
303     applyNumericAffinity(pRec);
304     if( pRec->flags & MEM_Real ){
305       sqlite3VdbeIntegerAffinity(pRec);
306     }
307   }
308 }
309 
310 /*
311 ** Try to convert the type of a function argument or a result column
312 ** into a numeric representation.  Use either INTEGER or REAL whichever
313 ** is appropriate.  But only do the conversion if it is possible without
314 ** loss of information and return the revised type of the argument.
315 */
316 int sqlite3_value_numeric_type(sqlite3_value *pVal){
317   Mem *pMem = (Mem*)pVal;
318   if( pMem->type==SQLITE_TEXT ){
319     applyNumericAffinity(pMem);
320     sqlite3VdbeMemStoreType(pMem);
321   }
322   return pMem->type;
323 }
324 
325 /*
326 ** Exported version of applyAffinity(). This one works on sqlite3_value*,
327 ** not the internal Mem* type.
328 */
329 void sqlite3ValueApplyAffinity(
330   sqlite3_value *pVal,
331   u8 affinity,
332   u8 enc
333 ){
334   applyAffinity((Mem *)pVal, affinity, enc);
335 }
336 
337 #ifdef SQLITE_DEBUG
338 /*
339 ** Write a nice string representation of the contents of cell pMem
340 ** into buffer zBuf, length nBuf.
341 */
342 void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
343   char *zCsr = zBuf;
344   int f = pMem->flags;
345 
346   static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};
347 
348   if( f&MEM_Blob ){
349     int i;
350     char c;
351     if( f & MEM_Dyn ){
352       c = 'z';
353       assert( (f & (MEM_Static|MEM_Ephem))==0 );
354     }else if( f & MEM_Static ){
355       c = 't';
356       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
357     }else if( f & MEM_Ephem ){
358       c = 'e';
359       assert( (f & (MEM_Static|MEM_Dyn))==0 );
360     }else{
361       c = 's';
362     }
363 
364     sqlite3_snprintf(100, zCsr, "%c", c);
365     zCsr += sqlite3Strlen30(zCsr);
366     sqlite3_snprintf(100, zCsr, "%d[", pMem->n);
367     zCsr += sqlite3Strlen30(zCsr);
368     for(i=0; i<16 && i<pMem->n; i++){
369       sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF));
370       zCsr += sqlite3Strlen30(zCsr);
371     }
372     for(i=0; i<16 && i<pMem->n; i++){
373       char z = pMem->z[i];
374       if( z<32 || z>126 ) *zCsr++ = '.';
375       else *zCsr++ = z;
376     }
377 
378     sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]);
379     zCsr += sqlite3Strlen30(zCsr);
380     if( f & MEM_Zero ){
381       sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero);
382       zCsr += sqlite3Strlen30(zCsr);
383     }
384     *zCsr = '\0';
385   }else if( f & MEM_Str ){
386     int j, k;
387     zBuf[0] = ' ';
388     if( f & MEM_Dyn ){
389       zBuf[1] = 'z';
390       assert( (f & (MEM_Static|MEM_Ephem))==0 );
391     }else if( f & MEM_Static ){
392       zBuf[1] = 't';
393       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
394     }else if( f & MEM_Ephem ){
395       zBuf[1] = 'e';
396       assert( (f & (MEM_Static|MEM_Dyn))==0 );
397     }else{
398       zBuf[1] = 's';
399     }
400     k = 2;
401     sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n);
402     k += sqlite3Strlen30(&zBuf[k]);
403     zBuf[k++] = '[';
404     for(j=0; j<15 && j<pMem->n; j++){
405       u8 c = pMem->z[j];
406       if( c>=0x20 && c<0x7f ){
407         zBuf[k++] = c;
408       }else{
409         zBuf[k++] = '.';
410       }
411     }
412     zBuf[k++] = ']';
413     sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]);
414     k += sqlite3Strlen30(&zBuf[k]);
415     zBuf[k++] = 0;
416   }
417 }
418 #endif
419 
420 #ifdef SQLITE_DEBUG
421 /*
422 ** Print the value of a register for tracing purposes:
423 */
424 static void memTracePrint(FILE *out, Mem *p){
425   if( p->flags & MEM_Null ){
426     fprintf(out, " NULL");
427   }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
428     fprintf(out, " si:%lld", p->u.i);
429   }else if( p->flags & MEM_Int ){
430     fprintf(out, " i:%lld", p->u.i);
431 #ifndef SQLITE_OMIT_FLOATING_POINT
432   }else if( p->flags & MEM_Real ){
433     fprintf(out, " r:%g", p->r);
434 #endif
435   }else if( p->flags & MEM_RowSet ){
436     fprintf(out, " (rowset)");
437   }else{
438     char zBuf[200];
439     sqlite3VdbeMemPrettyPrint(p, zBuf);
440     fprintf(out, " ");
441     fprintf(out, "%s", zBuf);
442   }
443 }
444 static void registerTrace(FILE *out, int iReg, Mem *p){
445   fprintf(out, "REG[%d] = ", iReg);
446   memTracePrint(out, p);
447   fprintf(out, "\n");
448 }
449 #endif
450 
451 #ifdef SQLITE_DEBUG
452 #  define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M)
453 #else
454 #  define REGISTER_TRACE(R,M)
455 #endif
456 
457 
458 #ifdef VDBE_PROFILE
459 
460 /*
461 ** hwtime.h contains inline assembler code for implementing
462 ** high-performance timing routines.
463 */
464 #include "hwtime.h"
465 
466 #endif
467 
468 /*
469 ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
470 ** sqlite3_interrupt() routine has been called.  If it has been, then
471 ** processing of the VDBE program is interrupted.
472 **
473 ** This macro added to every instruction that does a jump in order to
474 ** implement a loop.  This test used to be on every single instruction,
475 ** but that meant we more testing than we needed.  By only testing the
476 ** flag on jump instructions, we get a (small) speed improvement.
477 */
478 #define CHECK_FOR_INTERRUPT \
479    if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
480 
481 
482 #ifndef NDEBUG
483 /*
484 ** This function is only called from within an assert() expression. It
485 ** checks that the sqlite3.nTransaction variable is correctly set to
486 ** the number of non-transaction savepoints currently in the
487 ** linked list starting at sqlite3.pSavepoint.
488 **
489 ** Usage:
490 **
491 **     assert( checkSavepointCount(db) );
492 */
493 static int checkSavepointCount(sqlite3 *db){
494   int n = 0;
495   Savepoint *p;
496   for(p=db->pSavepoint; p; p=p->pNext) n++;
497   assert( n==(db->nSavepoint + db->isTransactionSavepoint) );
498   return 1;
499 }
500 #endif
501 
502 /*
503 ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
504 ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
505 ** in memory obtained from sqlite3DbMalloc).
506 */
507 static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){
508   sqlite3 *db = p->db;
509   sqlite3DbFree(db, p->zErrMsg);
510   p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
511   sqlite3_free(pVtab->zErrMsg);
512   pVtab->zErrMsg = 0;
513 }
514 
515 
516 /*
517 ** Execute as much of a VDBE program as we can then return.
518 **
519 ** sqlite3VdbeMakeReady() must be called before this routine in order to
520 ** close the program with a final OP_Halt and to set up the callbacks
521 ** and the error message pointer.
522 **
523 ** Whenever a row or result data is available, this routine will either
524 ** invoke the result callback (if there is one) or return with
525 ** SQLITE_ROW.
526 **
527 ** If an attempt is made to open a locked database, then this routine
528 ** will either invoke the busy callback (if there is one) or it will
529 ** return SQLITE_BUSY.
530 **
531 ** If an error occurs, an error message is written to memory obtained
532 ** from sqlite3_malloc() and p->zErrMsg is made to point to that memory.
533 ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
534 **
535 ** If the callback ever returns non-zero, then the program exits
536 ** immediately.  There will be no error message but the p->rc field is
537 ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
538 **
539 ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
540 ** routine to return SQLITE_ERROR.
541 **
542 ** Other fatal errors return SQLITE_ERROR.
543 **
544 ** After this routine has finished, sqlite3VdbeFinalize() should be
545 ** used to clean up the mess that was left behind.
546 */
547 int sqlite3VdbeExec(
548   Vdbe *p                    /* The VDBE */
549 ){
550   int pc=0;                  /* The program counter */
551   Op *aOp = p->aOp;          /* Copy of p->aOp */
552   Op *pOp;                   /* Current operation */
553   int rc = SQLITE_OK;        /* Value to return */
554   sqlite3 *db = p->db;       /* The database */
555   u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
556   u8 encoding = ENC(db);     /* The database encoding */
557 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
558   int checkProgress;         /* True if progress callbacks are enabled */
559   int nProgressOps = 0;      /* Opcodes executed since progress callback. */
560 #endif
561   Mem *aMem = p->aMem;       /* Copy of p->aMem */
562   Mem *pIn1 = 0;             /* 1st input operand */
563   Mem *pIn2 = 0;             /* 2nd input operand */
564   Mem *pIn3 = 0;             /* 3rd input operand */
565   Mem *pOut = 0;             /* Output operand */
566   int iCompare = 0;          /* Result of last OP_Compare operation */
567   int *aPermute = 0;         /* Permutation of columns for OP_Compare */
568   i64 lastRowid = db->lastRowid;  /* Saved value of the last insert ROWID */
569 #ifdef VDBE_PROFILE
570   u64 start;                 /* CPU clock count at start of opcode */
571   int origPc;                /* Program counter at start of opcode */
572 #endif
573   /*** INSERT STACK UNION HERE ***/
574 
575   assert( p->magic==VDBE_MAGIC_RUN );  /* sqlite3_step() verifies this */
576   sqlite3VdbeEnter(p);
577   if( p->rc==SQLITE_NOMEM ){
578     /* This happens if a malloc() inside a call to sqlite3_column_text() or
579     ** sqlite3_column_text16() failed.  */
580     goto no_mem;
581   }
582   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
583   p->rc = SQLITE_OK;
584   assert( p->explain==0 );
585   p->pResultSet = 0;
586   db->busyHandler.nBusy = 0;
587   CHECK_FOR_INTERRUPT;
588   sqlite3VdbeIOTraceSql(p);
589 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
590   checkProgress = db->xProgress!=0;
591 #endif
592 #ifdef SQLITE_DEBUG
593   sqlite3BeginBenignMalloc();
594   if( p->pc==0  && (p->db->flags & SQLITE_VdbeListing)!=0 ){
595     int i;
596     printf("VDBE Program Listing:\n");
597     sqlite3VdbePrintSql(p);
598     for(i=0; i<p->nOp; i++){
599       sqlite3VdbePrintOp(stdout, i, &aOp[i]);
600     }
601   }
602   sqlite3EndBenignMalloc();
603 #endif
604   for(pc=p->pc; rc==SQLITE_OK; pc++){
605     assert( pc>=0 && pc<p->nOp );
606     if( db->mallocFailed ) goto no_mem;
607 #ifdef VDBE_PROFILE
608     origPc = pc;
609     start = sqlite3Hwtime();
610 #endif
611     pOp = &aOp[pc];
612 
613     /* Only allow tracing if SQLITE_DEBUG is defined.
614     */
615 #ifdef SQLITE_DEBUG
616     if( p->trace ){
617       if( pc==0 ){
618         printf("VDBE Execution Trace:\n");
619         sqlite3VdbePrintSql(p);
620       }
621       sqlite3VdbePrintOp(p->trace, pc, pOp);
622     }
623 #endif
624 
625 
626     /* Check to see if we need to simulate an interrupt.  This only happens
627     ** if we have a special test build.
628     */
629 #ifdef SQLITE_TEST
630     if( sqlite3_interrupt_count>0 ){
631       sqlite3_interrupt_count--;
632       if( sqlite3_interrupt_count==0 ){
633         sqlite3_interrupt(db);
634       }
635     }
636 #endif
637 
638 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
639     /* Call the progress callback if it is configured and the required number
640     ** of VDBE ops have been executed (either since this invocation of
641     ** sqlite3VdbeExec() or since last time the progress callback was called).
642     ** If the progress callback returns non-zero, exit the virtual machine with
643     ** a return code SQLITE_ABORT.
644     */
645     if( checkProgress ){
646       if( db->nProgressOps==nProgressOps ){
647         int prc;
648         prc = db->xProgress(db->pProgressArg);
649         if( prc!=0 ){
650           rc = SQLITE_INTERRUPT;
651           goto vdbe_error_halt;
652         }
653         nProgressOps = 0;
654       }
655       nProgressOps++;
656     }
657 #endif
658 
659     /* On any opcode with the "out2-prerelase" tag, free any
660     ** external allocations out of mem[p2] and set mem[p2] to be
661     ** an undefined integer.  Opcodes will either fill in the integer
662     ** value or convert mem[p2] to a different type.
663     */
664     assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
665     if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
666       assert( pOp->p2>0 );
667       assert( pOp->p2<=p->nMem );
668       pOut = &aMem[pOp->p2];
669       memAboutToChange(p, pOut);
670       VdbeMemRelease(pOut);
671       pOut->flags = MEM_Int;
672     }
673 
674     /* Sanity checking on other operands */
675 #ifdef SQLITE_DEBUG
676     if( (pOp->opflags & OPFLG_IN1)!=0 ){
677       assert( pOp->p1>0 );
678       assert( pOp->p1<=p->nMem );
679       assert( memIsValid(&aMem[pOp->p1]) );
680       REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
681     }
682     if( (pOp->opflags & OPFLG_IN2)!=0 ){
683       assert( pOp->p2>0 );
684       assert( pOp->p2<=p->nMem );
685       assert( memIsValid(&aMem[pOp->p2]) );
686       REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
687     }
688     if( (pOp->opflags & OPFLG_IN3)!=0 ){
689       assert( pOp->p3>0 );
690       assert( pOp->p3<=p->nMem );
691       assert( memIsValid(&aMem[pOp->p3]) );
692       REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
693     }
694     if( (pOp->opflags & OPFLG_OUT2)!=0 ){
695       assert( pOp->p2>0 );
696       assert( pOp->p2<=p->nMem );
697       memAboutToChange(p, &aMem[pOp->p2]);
698     }
699     if( (pOp->opflags & OPFLG_OUT3)!=0 ){
700       assert( pOp->p3>0 );
701       assert( pOp->p3<=p->nMem );
702       memAboutToChange(p, &aMem[pOp->p3]);
703     }
704 #endif
705 
706     switch( pOp->opcode ){
707 
708 /*****************************************************************************
709 ** What follows is a massive switch statement where each case implements a
710 ** separate instruction in the virtual machine.  If we follow the usual
711 ** indentation conventions, each case should be indented by 6 spaces.  But
712 ** that is a lot of wasted space on the left margin.  So the code within
713 ** the switch statement will break with convention and be flush-left. Another
714 ** big comment (similar to this one) will mark the point in the code where
715 ** we transition back to normal indentation.
716 **
717 ** The formatting of each case is important.  The makefile for SQLite
718 ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
719 ** file looking for lines that begin with "case OP_".  The opcodes.h files
720 ** will be filled with #defines that give unique integer values to each
721 ** opcode and the opcodes.c file is filled with an array of strings where
722 ** each string is the symbolic name for the corresponding opcode.  If the
723 ** case statement is followed by a comment of the form "/# same as ... #/"
724 ** that comment is used to determine the particular value of the opcode.
725 **
726 ** Other keywords in the comment that follows each case are used to
727 ** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[].
728 ** Keywords include: in1, in2, in3, out2_prerelease, out2, out3.  See
729 ** the mkopcodeh.awk script for additional information.
730 **
731 ** Documentation about VDBE opcodes is generated by scanning this file
732 ** for lines of that contain "Opcode:".  That line and all subsequent
733 ** comment lines are used in the generation of the opcode.html documentation
734 ** file.
735 **
736 ** SUMMARY:
737 **
738 **     Formatting is important to scripts that scan this file.
739 **     Do not deviate from the formatting style currently in use.
740 **
741 *****************************************************************************/
742 
743 /* Opcode:  Goto * P2 * * *
744 **
745 ** An unconditional jump to address P2.
746 ** The next instruction executed will be
747 ** the one at index P2 from the beginning of
748 ** the program.
749 */
750 case OP_Goto: {             /* jump */
751   CHECK_FOR_INTERRUPT;
752   pc = pOp->p2 - 1;
753   break;
754 }
755 
756 /* Opcode:  Gosub P1 P2 * * *
757 **
758 ** Write the current address onto register P1
759 ** and then jump to address P2.
760 */
761 case OP_Gosub: {            /* jump */
762   assert( pOp->p1>0 && pOp->p1<=p->nMem );
763   pIn1 = &aMem[pOp->p1];
764   assert( (pIn1->flags & MEM_Dyn)==0 );
765   memAboutToChange(p, pIn1);
766   pIn1->flags = MEM_Int;
767   pIn1->u.i = pc;
768   REGISTER_TRACE(pOp->p1, pIn1);
769   pc = pOp->p2 - 1;
770   break;
771 }
772 
773 /* Opcode:  Return P1 * * * *
774 **
775 ** Jump to the next instruction after the address in register P1.
776 */
777 case OP_Return: {           /* in1 */
778   pIn1 = &aMem[pOp->p1];
779   assert( pIn1->flags & MEM_Int );
780   pc = (int)pIn1->u.i;
781   break;
782 }
783 
784 /* Opcode:  Yield P1 * * * *
785 **
786 ** Swap the program counter with the value in register P1.
787 */
788 case OP_Yield: {            /* in1 */
789   int pcDest;
790   pIn1 = &aMem[pOp->p1];
791   assert( (pIn1->flags & MEM_Dyn)==0 );
792   pIn1->flags = MEM_Int;
793   pcDest = (int)pIn1->u.i;
794   pIn1->u.i = pc;
795   REGISTER_TRACE(pOp->p1, pIn1);
796   pc = pcDest;
797   break;
798 }
799 
800 /* Opcode:  HaltIfNull  P1 P2 P3 P4 *
801 **
802 ** Check the value in register P3.  If it is NULL then Halt using
803 ** parameter P1, P2, and P4 as if this were a Halt instruction.  If the
804 ** value in register P3 is not NULL, then this routine is a no-op.
805 */
806 case OP_HaltIfNull: {      /* in3 */
807   pIn3 = &aMem[pOp->p3];
808   if( (pIn3->flags & MEM_Null)==0 ) break;
809   /* Fall through into OP_Halt */
810 }
811 
812 /* Opcode:  Halt P1 P2 * P4 *
813 **
814 ** Exit immediately.  All open cursors, etc are closed
815 ** automatically.
816 **
817 ** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
818 ** or sqlite3_finalize().  For a normal halt, this should be SQLITE_OK (0).
819 ** For errors, it can be some other value.  If P1!=0 then P2 will determine
820 ** whether or not to rollback the current transaction.  Do not rollback
821 ** if P2==OE_Fail. Do the rollback if P2==OE_Rollback.  If P2==OE_Abort,
822 ** then back out all changes that have occurred during this execution of the
823 ** VDBE, but do not rollback the transaction.
824 **
825 ** If P4 is not null then it is an error message string.
826 **
827 ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
828 ** every program.  So a jump past the last instruction of the program
829 ** is the same as executing Halt.
830 */
831 case OP_Halt: {
832   if( pOp->p1==SQLITE_OK && p->pFrame ){
833     /* Halt the sub-program. Return control to the parent frame. */
834     VdbeFrame *pFrame = p->pFrame;
835     p->pFrame = pFrame->pParent;
836     p->nFrame--;
837     sqlite3VdbeSetChanges(db, p->nChange);
838     pc = sqlite3VdbeFrameRestore(pFrame);
839     lastRowid = db->lastRowid;
840     if( pOp->p2==OE_Ignore ){
841       /* Instruction pc is the OP_Program that invoked the sub-program
842       ** currently being halted. If the p2 instruction of this OP_Halt
843       ** instruction is set to OE_Ignore, then the sub-program is throwing
844       ** an IGNORE exception. In this case jump to the address specified
845       ** as the p2 of the calling OP_Program.  */
846       pc = p->aOp[pc].p2-1;
847     }
848     aOp = p->aOp;
849     aMem = p->aMem;
850     break;
851   }
852 
853   p->rc = pOp->p1;
854   p->errorAction = (u8)pOp->p2;
855   p->pc = pc;
856   if( pOp->p4.z ){
857     assert( p->rc!=SQLITE_OK );
858     sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
859     testcase( sqlite3GlobalConfig.xLog!=0 );
860     sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z);
861   }else if( p->rc ){
862     testcase( sqlite3GlobalConfig.xLog!=0 );
863     sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql);
864   }
865   rc = sqlite3VdbeHalt(p);
866   assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR );
867   if( rc==SQLITE_BUSY ){
868     p->rc = rc = SQLITE_BUSY;
869   }else{
870     assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT );
871     assert( rc==SQLITE_OK || db->nDeferredCons>0 );
872     rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
873   }
874   goto vdbe_return;
875 }
876 
877 /* Opcode: Integer P1 P2 * * *
878 **
879 ** The 32-bit integer value P1 is written into register P2.
880 */
881 case OP_Integer: {         /* out2-prerelease */
882   pOut->u.i = pOp->p1;
883   break;
884 }
885 
886 /* Opcode: Int64 * P2 * P4 *
887 **
888 ** P4 is a pointer to a 64-bit integer value.
889 ** Write that value into register P2.
890 */
891 case OP_Int64: {           /* out2-prerelease */
892   assert( pOp->p4.pI64!=0 );
893   pOut->u.i = *pOp->p4.pI64;
894   break;
895 }
896 
897 #ifndef SQLITE_OMIT_FLOATING_POINT
898 /* Opcode: Real * P2 * P4 *
899 **
900 ** P4 is a pointer to a 64-bit floating point value.
901 ** Write that value into register P2.
902 */
903 case OP_Real: {            /* same as TK_FLOAT, out2-prerelease */
904   pOut->flags = MEM_Real;
905   assert( !sqlite3IsNaN(*pOp->p4.pReal) );
906   pOut->r = *pOp->p4.pReal;
907   break;
908 }
909 #endif
910 
911 /* Opcode: String8 * P2 * P4 *
912 **
913 ** P4 points to a nul terminated UTF-8 string. This opcode is transformed
914 ** into an OP_String before it is executed for the first time.
915 */
916 case OP_String8: {         /* same as TK_STRING, out2-prerelease */
917   assert( pOp->p4.z!=0 );
918   pOp->opcode = OP_String;
919   pOp->p1 = sqlite3Strlen30(pOp->p4.z);
920 
921 #ifndef SQLITE_OMIT_UTF16
922   if( encoding!=SQLITE_UTF8 ){
923     rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
924     if( rc==SQLITE_TOOBIG ) goto too_big;
925     if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
926     assert( pOut->zMalloc==pOut->z );
927     assert( pOut->flags & MEM_Dyn );
928     pOut->zMalloc = 0;
929     pOut->flags |= MEM_Static;
930     pOut->flags &= ~MEM_Dyn;
931     if( pOp->p4type==P4_DYNAMIC ){
932       sqlite3DbFree(db, pOp->p4.z);
933     }
934     pOp->p4type = P4_DYNAMIC;
935     pOp->p4.z = pOut->z;
936     pOp->p1 = pOut->n;
937   }
938 #endif
939   if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
940     goto too_big;
941   }
942   /* Fall through to the next case, OP_String */
943 }
944 
945 /* Opcode: String P1 P2 * P4 *
946 **
947 ** The string value P4 of length P1 (bytes) is stored in register P2.
948 */
949 case OP_String: {          /* out2-prerelease */
950   assert( pOp->p4.z!=0 );
951   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
952   pOut->z = pOp->p4.z;
953   pOut->n = pOp->p1;
954   pOut->enc = encoding;
955   UPDATE_MAX_BLOBSIZE(pOut);
956   break;
957 }
958 
959 /* Opcode: Null * P2 P3 * *
960 **
961 ** Write a NULL into registers P2.  If P3 greater than P2, then also write
962 ** NULL into register P3 and ever register in between P2 and P3.  If P3
963 ** is less than P2 (typically P3 is zero) then only register P2 is
964 ** set to NULL
965 */
966 case OP_Null: {           /* out2-prerelease */
967   int cnt;
968   cnt = pOp->p3-pOp->p2;
969   assert( pOp->p3<=p->nMem );
970   pOut->flags = MEM_Null;
971   while( cnt>0 ){
972     pOut++;
973     memAboutToChange(p, pOut);
974     VdbeMemRelease(pOut);
975     pOut->flags = MEM_Null;
976     cnt--;
977   }
978   break;
979 }
980 
981 
982 /* Opcode: Blob P1 P2 * P4
983 **
984 ** P4 points to a blob of data P1 bytes long.  Store this
985 ** blob in register P2.
986 */
987 case OP_Blob: {                /* out2-prerelease */
988   assert( pOp->p1 <= SQLITE_MAX_LENGTH );
989   sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
990   pOut->enc = encoding;
991   UPDATE_MAX_BLOBSIZE(pOut);
992   break;
993 }
994 
995 /* Opcode: Variable P1 P2 * P4 *
996 **
997 ** Transfer the values of bound parameter P1 into register P2
998 **
999 ** If the parameter is named, then its name appears in P4 and P3==1.
1000 ** The P4 value is used by sqlite3_bind_parameter_name().
1001 */
1002 case OP_Variable: {            /* out2-prerelease */
1003   Mem *pVar;       /* Value being transferred */
1004 
1005   assert( pOp->p1>0 && pOp->p1<=p->nVar );
1006   assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] );
1007   pVar = &p->aVar[pOp->p1 - 1];
1008   if( sqlite3VdbeMemTooBig(pVar) ){
1009     goto too_big;
1010   }
1011   sqlite3VdbeMemShallowCopy(pOut, pVar, MEM_Static);
1012   UPDATE_MAX_BLOBSIZE(pOut);
1013   break;
1014 }
1015 
1016 /* Opcode: Move P1 P2 P3 * *
1017 **
1018 ** Move the values in register P1..P1+P3-1 over into
1019 ** registers P2..P2+P3-1.  Registers P1..P1+P1-1 are
1020 ** left holding a NULL.  It is an error for register ranges
1021 ** P1..P1+P3-1 and P2..P2+P3-1 to overlap.
1022 */
1023 case OP_Move: {
1024   char *zMalloc;   /* Holding variable for allocated memory */
1025   int n;           /* Number of registers left to copy */
1026   int p1;          /* Register to copy from */
1027   int p2;          /* Register to copy to */
1028 
1029   n = pOp->p3;
1030   p1 = pOp->p1;
1031   p2 = pOp->p2;
1032   assert( n>0 && p1>0 && p2>0 );
1033   assert( p1+n<=p2 || p2+n<=p1 );
1034 
1035   pIn1 = &aMem[p1];
1036   pOut = &aMem[p2];
1037   while( n-- ){
1038     assert( pOut<=&aMem[p->nMem] );
1039     assert( pIn1<=&aMem[p->nMem] );
1040     assert( memIsValid(pIn1) );
1041     memAboutToChange(p, pOut);
1042     zMalloc = pOut->zMalloc;
1043     pOut->zMalloc = 0;
1044     sqlite3VdbeMemMove(pOut, pIn1);
1045 #ifdef SQLITE_DEBUG
1046     if( pOut->pScopyFrom>=&aMem[p1] && pOut->pScopyFrom<&aMem[p1+pOp->p3] ){
1047       pOut->pScopyFrom += p1 - pOp->p2;
1048     }
1049 #endif
1050     pIn1->zMalloc = zMalloc;
1051     REGISTER_TRACE(p2++, pOut);
1052     pIn1++;
1053     pOut++;
1054   }
1055   break;
1056 }
1057 
1058 /* Opcode: Copy P1 P2 * * *
1059 **
1060 ** Make a copy of register P1 into register P2.
1061 **
1062 ** This instruction makes a deep copy of the value.  A duplicate
1063 ** is made of any string or blob constant.  See also OP_SCopy.
1064 */
1065 case OP_Copy: {             /* in1, out2 */
1066   pIn1 = &aMem[pOp->p1];
1067   pOut = &aMem[pOp->p2];
1068   assert( pOut!=pIn1 );
1069   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
1070   Deephemeralize(pOut);
1071   REGISTER_TRACE(pOp->p2, pOut);
1072   break;
1073 }
1074 
1075 /* Opcode: SCopy P1 P2 * * *
1076 **
1077 ** Make a shallow copy of register P1 into register P2.
1078 **
1079 ** This instruction makes a shallow copy of the value.  If the value
1080 ** is a string or blob, then the copy is only a pointer to the
1081 ** original and hence if the original changes so will the copy.
1082 ** Worse, if the original is deallocated, the copy becomes invalid.
1083 ** Thus the program must guarantee that the original will not change
1084 ** during the lifetime of the copy.  Use OP_Copy to make a complete
1085 ** copy.
1086 */
1087 case OP_SCopy: {            /* in1, out2 */
1088   pIn1 = &aMem[pOp->p1];
1089   pOut = &aMem[pOp->p2];
1090   assert( pOut!=pIn1 );
1091   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
1092 #ifdef SQLITE_DEBUG
1093   if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
1094 #endif
1095   REGISTER_TRACE(pOp->p2, pOut);
1096   break;
1097 }
1098 
1099 /* Opcode: ResultRow P1 P2 * * *
1100 **
1101 ** The registers P1 through P1+P2-1 contain a single row of
1102 ** results. This opcode causes the sqlite3_step() call to terminate
1103 ** with an SQLITE_ROW return code and it sets up the sqlite3_stmt
1104 ** structure to provide access to the top P1 values as the result
1105 ** row.
1106 */
1107 case OP_ResultRow: {
1108   Mem *pMem;
1109   int i;
1110   assert( p->nResColumn==pOp->p2 );
1111   assert( pOp->p1>0 );
1112   assert( pOp->p1+pOp->p2<=p->nMem+1 );
1113 
1114   /* If this statement has violated immediate foreign key constraints, do
1115   ** not return the number of rows modified. And do not RELEASE the statement
1116   ** transaction. It needs to be rolled back.  */
1117   if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
1118     assert( db->flags&SQLITE_CountRows );
1119     assert( p->usesStmtJournal );
1120     break;
1121   }
1122 
1123   /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
1124   ** DML statements invoke this opcode to return the number of rows
1125   ** modified to the user. This is the only way that a VM that
1126   ** opens a statement transaction may invoke this opcode.
1127   **
1128   ** In case this is such a statement, close any statement transaction
1129   ** opened by this VM before returning control to the user. This is to
1130   ** ensure that statement-transactions are always nested, not overlapping.
1131   ** If the open statement-transaction is not closed here, then the user
1132   ** may step another VM that opens its own statement transaction. This
1133   ** may lead to overlapping statement transactions.
1134   **
1135   ** The statement transaction is never a top-level transaction.  Hence
1136   ** the RELEASE call below can never fail.
1137   */
1138   assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
1139   rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
1140   if( NEVER(rc!=SQLITE_OK) ){
1141     break;
1142   }
1143 
1144   /* Invalidate all ephemeral cursor row caches */
1145   p->cacheCtr = (p->cacheCtr + 2)|1;
1146 
1147   /* Make sure the results of the current row are \000 terminated
1148   ** and have an assigned type.  The results are de-ephemeralized as
1149   ** a side effect.
1150   */
1151   pMem = p->pResultSet = &aMem[pOp->p1];
1152   for(i=0; i<pOp->p2; i++){
1153     assert( memIsValid(&pMem[i]) );
1154     Deephemeralize(&pMem[i]);
1155     assert( (pMem[i].flags & MEM_Ephem)==0
1156             || (pMem[i].flags & (MEM_Str|MEM_Blob))==0 );
1157     sqlite3VdbeMemNulTerminate(&pMem[i]);
1158     sqlite3VdbeMemStoreType(&pMem[i]);
1159     REGISTER_TRACE(pOp->p1+i, &pMem[i]);
1160   }
1161   if( db->mallocFailed ) goto no_mem;
1162 
1163   /* Return SQLITE_ROW
1164   */
1165   p->pc = pc + 1;
1166   rc = SQLITE_ROW;
1167   goto vdbe_return;
1168 }
1169 
1170 /* Opcode: Concat P1 P2 P3 * *
1171 **
1172 ** Add the text in register P1 onto the end of the text in
1173 ** register P2 and store the result in register P3.
1174 ** If either the P1 or P2 text are NULL then store NULL in P3.
1175 **
1176 **   P3 = P2 || P1
1177 **
1178 ** It is illegal for P1 and P3 to be the same register. Sometimes,
1179 ** if P3 is the same register as P2, the implementation is able
1180 ** to avoid a memcpy().
1181 */
1182 case OP_Concat: {           /* same as TK_CONCAT, in1, in2, out3 */
1183   i64 nByte;
1184 
1185   pIn1 = &aMem[pOp->p1];
1186   pIn2 = &aMem[pOp->p2];
1187   pOut = &aMem[pOp->p3];
1188   assert( pIn1!=pOut );
1189   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
1190     sqlite3VdbeMemSetNull(pOut);
1191     break;
1192   }
1193   if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
1194   Stringify(pIn1, encoding);
1195   Stringify(pIn2, encoding);
1196   nByte = pIn1->n + pIn2->n;
1197   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
1198     goto too_big;
1199   }
1200   MemSetTypeFlag(pOut, MEM_Str);
1201   if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){
1202     goto no_mem;
1203   }
1204   if( pOut!=pIn2 ){
1205     memcpy(pOut->z, pIn2->z, pIn2->n);
1206   }
1207   memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
1208   pOut->z[nByte] = 0;
1209   pOut->z[nByte+1] = 0;
1210   pOut->flags |= MEM_Term;
1211   pOut->n = (int)nByte;
1212   pOut->enc = encoding;
1213   UPDATE_MAX_BLOBSIZE(pOut);
1214   break;
1215 }
1216 
1217 /* Opcode: Add P1 P2 P3 * *
1218 **
1219 ** Add the value in register P1 to the value in register P2
1220 ** and store the result in register P3.
1221 ** If either input is NULL, the result is NULL.
1222 */
1223 /* Opcode: Multiply P1 P2 P3 * *
1224 **
1225 **
1226 ** Multiply the value in register P1 by the value in register P2
1227 ** and store the result in register P3.
1228 ** If either input is NULL, the result is NULL.
1229 */
1230 /* Opcode: Subtract P1 P2 P3 * *
1231 **
1232 ** Subtract the value in register P1 from the value in register P2
1233 ** and store the result in register P3.
1234 ** If either input is NULL, the result is NULL.
1235 */
1236 /* Opcode: Divide P1 P2 P3 * *
1237 **
1238 ** Divide the value in register P1 by the value in register P2
1239 ** and store the result in register P3 (P3=P2/P1). If the value in
1240 ** register P1 is zero, then the result is NULL. If either input is
1241 ** NULL, the result is NULL.
1242 */
1243 /* Opcode: Remainder P1 P2 P3 * *
1244 **
1245 ** Compute the remainder after integer division of the value in
1246 ** register P1 by the value in register P2 and store the result in P3.
1247 ** If the value in register P2 is zero the result is NULL.
1248 ** If either operand is NULL, the result is NULL.
1249 */
1250 case OP_Add:                   /* same as TK_PLUS, in1, in2, out3 */
1251 case OP_Subtract:              /* same as TK_MINUS, in1, in2, out3 */
1252 case OP_Multiply:              /* same as TK_STAR, in1, in2, out3 */
1253 case OP_Divide:                /* same as TK_SLASH, in1, in2, out3 */
1254 case OP_Remainder: {           /* same as TK_REM, in1, in2, out3 */
1255   int flags;      /* Combined MEM_* flags from both inputs */
1256   i64 iA;         /* Integer value of left operand */
1257   i64 iB;         /* Integer value of right operand */
1258   double rA;      /* Real value of left operand */
1259   double rB;      /* Real value of right operand */
1260 
1261   pIn1 = &aMem[pOp->p1];
1262   applyNumericAffinity(pIn1);
1263   pIn2 = &aMem[pOp->p2];
1264   applyNumericAffinity(pIn2);
1265   pOut = &aMem[pOp->p3];
1266   flags = pIn1->flags | pIn2->flags;
1267   if( (flags & MEM_Null)!=0 ) goto arithmetic_result_is_null;
1268   if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){
1269     iA = pIn1->u.i;
1270     iB = pIn2->u.i;
1271     switch( pOp->opcode ){
1272       case OP_Add:       if( sqlite3AddInt64(&iB,iA) ) goto fp_math;  break;
1273       case OP_Subtract:  if( sqlite3SubInt64(&iB,iA) ) goto fp_math;  break;
1274       case OP_Multiply:  if( sqlite3MulInt64(&iB,iA) ) goto fp_math;  break;
1275       case OP_Divide: {
1276         if( iA==0 ) goto arithmetic_result_is_null;
1277         if( iA==-1 && iB==SMALLEST_INT64 ) goto fp_math;
1278         iB /= iA;
1279         break;
1280       }
1281       default: {
1282         if( iA==0 ) goto arithmetic_result_is_null;
1283         if( iA==-1 ) iA = 1;
1284         iB %= iA;
1285         break;
1286       }
1287     }
1288     pOut->u.i = iB;
1289     MemSetTypeFlag(pOut, MEM_Int);
1290   }else{
1291 fp_math:
1292     rA = sqlite3VdbeRealValue(pIn1);
1293     rB = sqlite3VdbeRealValue(pIn2);
1294     switch( pOp->opcode ){
1295       case OP_Add:         rB += rA;       break;
1296       case OP_Subtract:    rB -= rA;       break;
1297       case OP_Multiply:    rB *= rA;       break;
1298       case OP_Divide: {
1299         /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
1300         if( rA==(double)0 ) goto arithmetic_result_is_null;
1301         rB /= rA;
1302         break;
1303       }
1304       default: {
1305         iA = (i64)rA;
1306         iB = (i64)rB;
1307         if( iA==0 ) goto arithmetic_result_is_null;
1308         if( iA==-1 ) iA = 1;
1309         rB = (double)(iB % iA);
1310         break;
1311       }
1312     }
1313 #ifdef SQLITE_OMIT_FLOATING_POINT
1314     pOut->u.i = rB;
1315     MemSetTypeFlag(pOut, MEM_Int);
1316 #else
1317     if( sqlite3IsNaN(rB) ){
1318       goto arithmetic_result_is_null;
1319     }
1320     pOut->r = rB;
1321     MemSetTypeFlag(pOut, MEM_Real);
1322     if( (flags & MEM_Real)==0 ){
1323       sqlite3VdbeIntegerAffinity(pOut);
1324     }
1325 #endif
1326   }
1327   break;
1328 
1329 arithmetic_result_is_null:
1330   sqlite3VdbeMemSetNull(pOut);
1331   break;
1332 }
1333 
1334 /* Opcode: CollSeq * * P4
1335 **
1336 ** P4 is a pointer to a CollSeq struct. If the next call to a user function
1337 ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
1338 ** be returned. This is used by the built-in min(), max() and nullif()
1339 ** functions.
1340 **
1341 ** The interface used by the implementation of the aforementioned functions
1342 ** to retrieve the collation sequence set by this opcode is not available
1343 ** publicly, only to user functions defined in func.c.
1344 */
1345 case OP_CollSeq: {
1346   assert( pOp->p4type==P4_COLLSEQ );
1347   break;
1348 }
1349 
1350 /* Opcode: Function P1 P2 P3 P4 P5
1351 **
1352 ** Invoke a user function (P4 is a pointer to a Function structure that
1353 ** defines the function) with P5 arguments taken from register P2 and
1354 ** successors.  The result of the function is stored in register P3.
1355 ** Register P3 must not be one of the function inputs.
1356 **
1357 ** P1 is a 32-bit bitmask indicating whether or not each argument to the
1358 ** function was determined to be constant at compile time. If the first
1359 ** argument was constant then bit 0 of P1 is set. This is used to determine
1360 ** whether meta data associated with a user function argument using the
1361 ** sqlite3_set_auxdata() API may be safely retained until the next
1362 ** invocation of this opcode.
1363 **
1364 ** See also: AggStep and AggFinal
1365 */
1366 case OP_Function: {
1367   int i;
1368   Mem *pArg;
1369   sqlite3_context ctx;
1370   sqlite3_value **apVal;
1371   int n;
1372 
1373   n = pOp->p5;
1374   apVal = p->apArg;
1375   assert( apVal || n==0 );
1376   assert( pOp->p3>0 && pOp->p3<=p->nMem );
1377   pOut = &aMem[pOp->p3];
1378   memAboutToChange(p, pOut);
1379 
1380   assert( n==0 || (pOp->p2>0 && pOp->p2+n<=p->nMem+1) );
1381   assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
1382   pArg = &aMem[pOp->p2];
1383   for(i=0; i<n; i++, pArg++){
1384     assert( memIsValid(pArg) );
1385     apVal[i] = pArg;
1386     Deephemeralize(pArg);
1387     sqlite3VdbeMemStoreType(pArg);
1388     REGISTER_TRACE(pOp->p2+i, pArg);
1389   }
1390 
1391   assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
1392   if( pOp->p4type==P4_FUNCDEF ){
1393     ctx.pFunc = pOp->p4.pFunc;
1394     ctx.pVdbeFunc = 0;
1395   }else{
1396     ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
1397     ctx.pFunc = ctx.pVdbeFunc->pFunc;
1398   }
1399 
1400   ctx.s.flags = MEM_Null;
1401   ctx.s.db = db;
1402   ctx.s.xDel = 0;
1403   ctx.s.zMalloc = 0;
1404 
1405   /* The output cell may already have a buffer allocated. Move
1406   ** the pointer to ctx.s so in case the user-function can use
1407   ** the already allocated buffer instead of allocating a new one.
1408   */
1409   sqlite3VdbeMemMove(&ctx.s, pOut);
1410   MemSetTypeFlag(&ctx.s, MEM_Null);
1411 
1412   ctx.isError = 0;
1413   if( ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
1414     assert( pOp>aOp );
1415     assert( pOp[-1].p4type==P4_COLLSEQ );
1416     assert( pOp[-1].opcode==OP_CollSeq );
1417     ctx.pColl = pOp[-1].p4.pColl;
1418   }
1419   db->lastRowid = lastRowid;
1420   (*ctx.pFunc->xFunc)(&ctx, n, apVal); /* IMP: R-24505-23230 */
1421   lastRowid = db->lastRowid;
1422 
1423   /* If any auxiliary data functions have been called by this user function,
1424   ** immediately call the destructor for any non-static values.
1425   */
1426   if( ctx.pVdbeFunc ){
1427     sqlite3VdbeDeleteAuxData(ctx.pVdbeFunc, pOp->p1);
1428     pOp->p4.pVdbeFunc = ctx.pVdbeFunc;
1429     pOp->p4type = P4_VDBEFUNC;
1430   }
1431 
1432   if( db->mallocFailed ){
1433     /* Even though a malloc() has failed, the implementation of the
1434     ** user function may have called an sqlite3_result_XXX() function
1435     ** to return a value. The following call releases any resources
1436     ** associated with such a value.
1437     */
1438     sqlite3VdbeMemRelease(&ctx.s);
1439     goto no_mem;
1440   }
1441 
1442   /* If the function returned an error, throw an exception */
1443   if( ctx.isError ){
1444     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s));
1445     rc = ctx.isError;
1446   }
1447 
1448   /* Copy the result of the function into register P3 */
1449   sqlite3VdbeChangeEncoding(&ctx.s, encoding);
1450   sqlite3VdbeMemMove(pOut, &ctx.s);
1451   if( sqlite3VdbeMemTooBig(pOut) ){
1452     goto too_big;
1453   }
1454 
1455 #if 0
1456   /* The app-defined function has done something that as caused this
1457   ** statement to expire.  (Perhaps the function called sqlite3_exec()
1458   ** with a CREATE TABLE statement.)
1459   */
1460   if( p->expired ) rc = SQLITE_ABORT;
1461 #endif
1462 
1463   REGISTER_TRACE(pOp->p3, pOut);
1464   UPDATE_MAX_BLOBSIZE(pOut);
1465   break;
1466 }
1467 
1468 /* Opcode: BitAnd P1 P2 P3 * *
1469 **
1470 ** Take the bit-wise AND of the values in register P1 and P2 and
1471 ** store the result in register P3.
1472 ** If either input is NULL, the result is NULL.
1473 */
1474 /* Opcode: BitOr P1 P2 P3 * *
1475 **
1476 ** Take the bit-wise OR of the values in register P1 and P2 and
1477 ** store the result in register P3.
1478 ** If either input is NULL, the result is NULL.
1479 */
1480 /* Opcode: ShiftLeft P1 P2 P3 * *
1481 **
1482 ** Shift the integer value in register P2 to the left by the
1483 ** number of bits specified by the integer in register P1.
1484 ** Store the result in register P3.
1485 ** If either input is NULL, the result is NULL.
1486 */
1487 /* Opcode: ShiftRight P1 P2 P3 * *
1488 **
1489 ** Shift the integer value in register P2 to the right by the
1490 ** number of bits specified by the integer in register P1.
1491 ** Store the result in register P3.
1492 ** If either input is NULL, the result is NULL.
1493 */
1494 case OP_BitAnd:                 /* same as TK_BITAND, in1, in2, out3 */
1495 case OP_BitOr:                  /* same as TK_BITOR, in1, in2, out3 */
1496 case OP_ShiftLeft:              /* same as TK_LSHIFT, in1, in2, out3 */
1497 case OP_ShiftRight: {           /* same as TK_RSHIFT, in1, in2, out3 */
1498   i64 iA;
1499   u64 uA;
1500   i64 iB;
1501   u8 op;
1502 
1503   pIn1 = &aMem[pOp->p1];
1504   pIn2 = &aMem[pOp->p2];
1505   pOut = &aMem[pOp->p3];
1506   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
1507     sqlite3VdbeMemSetNull(pOut);
1508     break;
1509   }
1510   iA = sqlite3VdbeIntValue(pIn2);
1511   iB = sqlite3VdbeIntValue(pIn1);
1512   op = pOp->opcode;
1513   if( op==OP_BitAnd ){
1514     iA &= iB;
1515   }else if( op==OP_BitOr ){
1516     iA |= iB;
1517   }else if( iB!=0 ){
1518     assert( op==OP_ShiftRight || op==OP_ShiftLeft );
1519 
1520     /* If shifting by a negative amount, shift in the other direction */
1521     if( iB<0 ){
1522       assert( OP_ShiftRight==OP_ShiftLeft+1 );
1523       op = 2*OP_ShiftLeft + 1 - op;
1524       iB = iB>(-64) ? -iB : 64;
1525     }
1526 
1527     if( iB>=64 ){
1528       iA = (iA>=0 || op==OP_ShiftLeft) ? 0 : -1;
1529     }else{
1530       memcpy(&uA, &iA, sizeof(uA));
1531       if( op==OP_ShiftLeft ){
1532         uA <<= iB;
1533       }else{
1534         uA >>= iB;
1535         /* Sign-extend on a right shift of a negative number */
1536         if( iA<0 ) uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-iB);
1537       }
1538       memcpy(&iA, &uA, sizeof(iA));
1539     }
1540   }
1541   pOut->u.i = iA;
1542   MemSetTypeFlag(pOut, MEM_Int);
1543   break;
1544 }
1545 
1546 /* Opcode: AddImm  P1 P2 * * *
1547 **
1548 ** Add the constant P2 to the value in register P1.
1549 ** The result is always an integer.
1550 **
1551 ** To force any register to be an integer, just add 0.
1552 */
1553 case OP_AddImm: {            /* in1 */
1554   pIn1 = &aMem[pOp->p1];
1555   memAboutToChange(p, pIn1);
1556   sqlite3VdbeMemIntegerify(pIn1);
1557   pIn1->u.i += pOp->p2;
1558   break;
1559 }
1560 
1561 /* Opcode: MustBeInt P1 P2 * * *
1562 **
1563 ** Force the value in register P1 to be an integer.  If the value
1564 ** in P1 is not an integer and cannot be converted into an integer
1565 ** without data loss, then jump immediately to P2, or if P2==0
1566 ** raise an SQLITE_MISMATCH exception.
1567 */
1568 case OP_MustBeInt: {            /* jump, in1 */
1569   pIn1 = &aMem[pOp->p1];
1570   applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
1571   if( (pIn1->flags & MEM_Int)==0 ){
1572     if( pOp->p2==0 ){
1573       rc = SQLITE_MISMATCH;
1574       goto abort_due_to_error;
1575     }else{
1576       pc = pOp->p2 - 1;
1577     }
1578   }else{
1579     MemSetTypeFlag(pIn1, MEM_Int);
1580   }
1581   break;
1582 }
1583 
1584 #ifndef SQLITE_OMIT_FLOATING_POINT
1585 /* Opcode: RealAffinity P1 * * * *
1586 **
1587 ** If register P1 holds an integer convert it to a real value.
1588 **
1589 ** This opcode is used when extracting information from a column that
1590 ** has REAL affinity.  Such column values may still be stored as
1591 ** integers, for space efficiency, but after extraction we want them
1592 ** to have only a real value.
1593 */
1594 case OP_RealAffinity: {                  /* in1 */
1595   pIn1 = &aMem[pOp->p1];
1596   if( pIn1->flags & MEM_Int ){
1597     sqlite3VdbeMemRealify(pIn1);
1598   }
1599   break;
1600 }
1601 #endif
1602 
1603 #ifndef SQLITE_OMIT_CAST
1604 /* Opcode: ToText P1 * * * *
1605 **
1606 ** Force the value in register P1 to be text.
1607 ** If the value is numeric, convert it to a string using the
1608 ** equivalent of printf().  Blob values are unchanged and
1609 ** are afterwards simply interpreted as text.
1610 **
1611 ** A NULL value is not changed by this routine.  It remains NULL.
1612 */
1613 case OP_ToText: {                  /* same as TK_TO_TEXT, in1 */
1614   pIn1 = &aMem[pOp->p1];
1615   memAboutToChange(p, pIn1);
1616   if( pIn1->flags & MEM_Null ) break;
1617   assert( MEM_Str==(MEM_Blob>>3) );
1618   pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
1619   applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
1620   rc = ExpandBlob(pIn1);
1621   assert( pIn1->flags & MEM_Str || db->mallocFailed );
1622   pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
1623   UPDATE_MAX_BLOBSIZE(pIn1);
1624   break;
1625 }
1626 
1627 /* Opcode: ToBlob P1 * * * *
1628 **
1629 ** Force the value in register P1 to be a BLOB.
1630 ** If the value is numeric, convert it to a string first.
1631 ** Strings are simply reinterpreted as blobs with no change
1632 ** to the underlying data.
1633 **
1634 ** A NULL value is not changed by this routine.  It remains NULL.
1635 */
1636 case OP_ToBlob: {                  /* same as TK_TO_BLOB, in1 */
1637   pIn1 = &aMem[pOp->p1];
1638   if( pIn1->flags & MEM_Null ) break;
1639   if( (pIn1->flags & MEM_Blob)==0 ){
1640     applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
1641     assert( pIn1->flags & MEM_Str || db->mallocFailed );
1642     MemSetTypeFlag(pIn1, MEM_Blob);
1643   }else{
1644     pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
1645   }
1646   UPDATE_MAX_BLOBSIZE(pIn1);
1647   break;
1648 }
1649 
1650 /* Opcode: ToNumeric P1 * * * *
1651 **
1652 ** Force the value in register P1 to be numeric (either an
1653 ** integer or a floating-point number.)
1654 ** If the value is text or blob, try to convert it to an using the
1655 ** equivalent of atoi() or atof() and store 0 if no such conversion
1656 ** is possible.
1657 **
1658 ** A NULL value is not changed by this routine.  It remains NULL.
1659 */
1660 case OP_ToNumeric: {                  /* same as TK_TO_NUMERIC, in1 */
1661   pIn1 = &aMem[pOp->p1];
1662   sqlite3VdbeMemNumerify(pIn1);
1663   break;
1664 }
1665 #endif /* SQLITE_OMIT_CAST */
1666 
1667 /* Opcode: ToInt P1 * * * *
1668 **
1669 ** Force the value in register P1 to be an integer.  If
1670 ** The value is currently a real number, drop its fractional part.
1671 ** If the value is text or blob, try to convert it to an integer using the
1672 ** equivalent of atoi() and store 0 if no such conversion is possible.
1673 **
1674 ** A NULL value is not changed by this routine.  It remains NULL.
1675 */
1676 case OP_ToInt: {                  /* same as TK_TO_INT, in1 */
1677   pIn1 = &aMem[pOp->p1];
1678   if( (pIn1->flags & MEM_Null)==0 ){
1679     sqlite3VdbeMemIntegerify(pIn1);
1680   }
1681   break;
1682 }
1683 
1684 #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
1685 /* Opcode: ToReal P1 * * * *
1686 **
1687 ** Force the value in register P1 to be a floating point number.
1688 ** If The value is currently an integer, convert it.
1689 ** If the value is text or blob, try to convert it to an integer using the
1690 ** equivalent of atoi() and store 0.0 if no such conversion is possible.
1691 **
1692 ** A NULL value is not changed by this routine.  It remains NULL.
1693 */
1694 case OP_ToReal: {                  /* same as TK_TO_REAL, in1 */
1695   pIn1 = &aMem[pOp->p1];
1696   memAboutToChange(p, pIn1);
1697   if( (pIn1->flags & MEM_Null)==0 ){
1698     sqlite3VdbeMemRealify(pIn1);
1699   }
1700   break;
1701 }
1702 #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
1703 
1704 /* Opcode: Lt P1 P2 P3 P4 P5
1705 **
1706 ** Compare the values in register P1 and P3.  If reg(P3)<reg(P1) then
1707 ** jump to address P2.
1708 **
1709 ** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
1710 ** reg(P3) is NULL then take the jump.  If the SQLITE_JUMPIFNULL
1711 ** bit is clear then fall through if either operand is NULL.
1712 **
1713 ** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
1714 ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made
1715 ** to coerce both inputs according to this affinity before the
1716 ** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
1717 ** affinity is used. Note that the affinity conversions are stored
1718 ** back into the input registers P1 and P3.  So this opcode can cause
1719 ** persistent changes to registers P1 and P3.
1720 **
1721 ** Once any conversions have taken place, and neither value is NULL,
1722 ** the values are compared. If both values are blobs then memcmp() is
1723 ** used to determine the results of the comparison.  If both values
1724 ** are text, then the appropriate collating function specified in
1725 ** P4 is  used to do the comparison.  If P4 is not specified then
1726 ** memcmp() is used to compare text string.  If both values are
1727 ** numeric, then a numeric comparison is used. If the two values
1728 ** are of different types, then numbers are considered less than
1729 ** strings and strings are considered less than blobs.
1730 **
1731 ** If the SQLITE_STOREP2 bit of P5 is set, then do not jump.  Instead,
1732 ** store a boolean result (either 0, or 1, or NULL) in register P2.
1733 */
1734 /* Opcode: Ne P1 P2 P3 P4 P5
1735 **
1736 ** This works just like the Lt opcode except that the jump is taken if
1737 ** the operands in registers P1 and P3 are not equal.  See the Lt opcode for
1738 ** additional information.
1739 **
1740 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
1741 ** true or false and is never NULL.  If both operands are NULL then the result
1742 ** of comparison is false.  If either operand is NULL then the result is true.
1743 ** If neither operand is NULL the result is the same as it would be if
1744 ** the SQLITE_NULLEQ flag were omitted from P5.
1745 */
1746 /* Opcode: Eq P1 P2 P3 P4 P5
1747 **
1748 ** This works just like the Lt opcode except that the jump is taken if
1749 ** the operands in registers P1 and P3 are equal.
1750 ** See the Lt opcode for additional information.
1751 **
1752 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
1753 ** true or false and is never NULL.  If both operands are NULL then the result
1754 ** of comparison is true.  If either operand is NULL then the result is false.
1755 ** If neither operand is NULL the result is the same as it would be if
1756 ** the SQLITE_NULLEQ flag were omitted from P5.
1757 */
1758 /* Opcode: Le P1 P2 P3 P4 P5
1759 **
1760 ** This works just like the Lt opcode except that the jump is taken if
1761 ** the content of register P3 is less than or equal to the content of
1762 ** register P1.  See the Lt opcode for additional information.
1763 */
1764 /* Opcode: Gt P1 P2 P3 P4 P5
1765 **
1766 ** This works just like the Lt opcode except that the jump is taken if
1767 ** the content of register P3 is greater than the content of
1768 ** register P1.  See the Lt opcode for additional information.
1769 */
1770 /* Opcode: Ge P1 P2 P3 P4 P5
1771 **
1772 ** This works just like the Lt opcode except that the jump is taken if
1773 ** the content of register P3 is greater than or equal to the content of
1774 ** register P1.  See the Lt opcode for additional information.
1775 */
1776 case OP_Eq:               /* same as TK_EQ, jump, in1, in3 */
1777 case OP_Ne:               /* same as TK_NE, jump, in1, in3 */
1778 case OP_Lt:               /* same as TK_LT, jump, in1, in3 */
1779 case OP_Le:               /* same as TK_LE, jump, in1, in3 */
1780 case OP_Gt:               /* same as TK_GT, jump, in1, in3 */
1781 case OP_Ge: {             /* same as TK_GE, jump, in1, in3 */
1782   int res;            /* Result of the comparison of pIn1 against pIn3 */
1783   char affinity;      /* Affinity to use for comparison */
1784   u16 flags1;         /* Copy of initial value of pIn1->flags */
1785   u16 flags3;         /* Copy of initial value of pIn3->flags */
1786 
1787   pIn1 = &aMem[pOp->p1];
1788   pIn3 = &aMem[pOp->p3];
1789   flags1 = pIn1->flags;
1790   flags3 = pIn3->flags;
1791   if( (flags1 | flags3)&MEM_Null ){
1792     /* One or both operands are NULL */
1793     if( pOp->p5 & SQLITE_NULLEQ ){
1794       /* If SQLITE_NULLEQ is set (which will only happen if the operator is
1795       ** OP_Eq or OP_Ne) then take the jump or not depending on whether
1796       ** or not both operands are null.
1797       */
1798       assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
1799       res = (flags1 & flags3 & MEM_Null)==0;
1800     }else{
1801       /* SQLITE_NULLEQ is clear and at least one operand is NULL,
1802       ** then the result is always NULL.
1803       ** The jump is taken if the SQLITE_JUMPIFNULL bit is set.
1804       */
1805       if( pOp->p5 & SQLITE_STOREP2 ){
1806         pOut = &aMem[pOp->p2];
1807         MemSetTypeFlag(pOut, MEM_Null);
1808         REGISTER_TRACE(pOp->p2, pOut);
1809       }else if( pOp->p5 & SQLITE_JUMPIFNULL ){
1810         pc = pOp->p2-1;
1811       }
1812       break;
1813     }
1814   }else{
1815     /* Neither operand is NULL.  Do a comparison. */
1816     affinity = pOp->p5 & SQLITE_AFF_MASK;
1817     if( affinity ){
1818       applyAffinity(pIn1, affinity, encoding);
1819       applyAffinity(pIn3, affinity, encoding);
1820       if( db->mallocFailed ) goto no_mem;
1821     }
1822 
1823     assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
1824     ExpandBlob(pIn1);
1825     ExpandBlob(pIn3);
1826     res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
1827   }
1828   switch( pOp->opcode ){
1829     case OP_Eq:    res = res==0;     break;
1830     case OP_Ne:    res = res!=0;     break;
1831     case OP_Lt:    res = res<0;      break;
1832     case OP_Le:    res = res<=0;     break;
1833     case OP_Gt:    res = res>0;      break;
1834     default:       res = res>=0;     break;
1835   }
1836 
1837   if( pOp->p5 & SQLITE_STOREP2 ){
1838     pOut = &aMem[pOp->p2];
1839     memAboutToChange(p, pOut);
1840     MemSetTypeFlag(pOut, MEM_Int);
1841     pOut->u.i = res;
1842     REGISTER_TRACE(pOp->p2, pOut);
1843   }else if( res ){
1844     pc = pOp->p2-1;
1845   }
1846 
1847   /* Undo any changes made by applyAffinity() to the input registers. */
1848   pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (flags1&MEM_TypeMask);
1849   pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (flags3&MEM_TypeMask);
1850   break;
1851 }
1852 
1853 /* Opcode: Permutation * * * P4 *
1854 **
1855 ** Set the permutation used by the OP_Compare operator to be the array
1856 ** of integers in P4.
1857 **
1858 ** The permutation is only valid until the next OP_Permutation, OP_Compare,
1859 ** OP_Halt, or OP_ResultRow.  Typically the OP_Permutation should occur
1860 ** immediately prior to the OP_Compare.
1861 */
1862 case OP_Permutation: {
1863   assert( pOp->p4type==P4_INTARRAY );
1864   assert( pOp->p4.ai );
1865   aPermute = pOp->p4.ai;
1866   break;
1867 }
1868 
1869 /* Opcode: Compare P1 P2 P3 P4 *
1870 **
1871 ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
1872 ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B").  Save the result of
1873 ** the comparison for use by the next OP_Jump instruct.
1874 **
1875 ** P4 is a KeyInfo structure that defines collating sequences and sort
1876 ** orders for the comparison.  The permutation applies to registers
1877 ** only.  The KeyInfo elements are used sequentially.
1878 **
1879 ** The comparison is a sort comparison, so NULLs compare equal,
1880 ** NULLs are less than numbers, numbers are less than strings,
1881 ** and strings are less than blobs.
1882 */
1883 case OP_Compare: {
1884   int n;
1885   int i;
1886   int p1;
1887   int p2;
1888   const KeyInfo *pKeyInfo;
1889   int idx;
1890   CollSeq *pColl;    /* Collating sequence to use on this term */
1891   int bRev;          /* True for DESCENDING sort order */
1892 
1893   n = pOp->p3;
1894   pKeyInfo = pOp->p4.pKeyInfo;
1895   assert( n>0 );
1896   assert( pKeyInfo!=0 );
1897   p1 = pOp->p1;
1898   p2 = pOp->p2;
1899 #if SQLITE_DEBUG
1900   if( aPermute ){
1901     int k, mx = 0;
1902     for(k=0; k<n; k++) if( aPermute[k]>mx ) mx = aPermute[k];
1903     assert( p1>0 && p1+mx<=p->nMem+1 );
1904     assert( p2>0 && p2+mx<=p->nMem+1 );
1905   }else{
1906     assert( p1>0 && p1+n<=p->nMem+1 );
1907     assert( p2>0 && p2+n<=p->nMem+1 );
1908   }
1909 #endif /* SQLITE_DEBUG */
1910   for(i=0; i<n; i++){
1911     idx = aPermute ? aPermute[i] : i;
1912     assert( memIsValid(&aMem[p1+idx]) );
1913     assert( memIsValid(&aMem[p2+idx]) );
1914     REGISTER_TRACE(p1+idx, &aMem[p1+idx]);
1915     REGISTER_TRACE(p2+idx, &aMem[p2+idx]);
1916     assert( i<pKeyInfo->nField );
1917     pColl = pKeyInfo->aColl[i];
1918     bRev = pKeyInfo->aSortOrder[i];
1919     iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl);
1920     if( iCompare ){
1921       if( bRev ) iCompare = -iCompare;
1922       break;
1923     }
1924   }
1925   aPermute = 0;
1926   break;
1927 }
1928 
1929 /* Opcode: Jump P1 P2 P3 * *
1930 **
1931 ** Jump to the instruction at address P1, P2, or P3 depending on whether
1932 ** in the most recent OP_Compare instruction the P1 vector was less than
1933 ** equal to, or greater than the P2 vector, respectively.
1934 */
1935 case OP_Jump: {             /* jump */
1936   if( iCompare<0 ){
1937     pc = pOp->p1 - 1;
1938   }else if( iCompare==0 ){
1939     pc = pOp->p2 - 1;
1940   }else{
1941     pc = pOp->p3 - 1;
1942   }
1943   break;
1944 }
1945 
1946 /* Opcode: And P1 P2 P3 * *
1947 **
1948 ** Take the logical AND of the values in registers P1 and P2 and
1949 ** write the result into register P3.
1950 **
1951 ** If either P1 or P2 is 0 (false) then the result is 0 even if
1952 ** the other input is NULL.  A NULL and true or two NULLs give
1953 ** a NULL output.
1954 */
1955 /* Opcode: Or P1 P2 P3 * *
1956 **
1957 ** Take the logical OR of the values in register P1 and P2 and
1958 ** store the answer in register P3.
1959 **
1960 ** If either P1 or P2 is nonzero (true) then the result is 1 (true)
1961 ** even if the other input is NULL.  A NULL and false or two NULLs
1962 ** give a NULL output.
1963 */
1964 case OP_And:              /* same as TK_AND, in1, in2, out3 */
1965 case OP_Or: {             /* same as TK_OR, in1, in2, out3 */
1966   int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
1967   int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
1968 
1969   pIn1 = &aMem[pOp->p1];
1970   if( pIn1->flags & MEM_Null ){
1971     v1 = 2;
1972   }else{
1973     v1 = sqlite3VdbeIntValue(pIn1)!=0;
1974   }
1975   pIn2 = &aMem[pOp->p2];
1976   if( pIn2->flags & MEM_Null ){
1977     v2 = 2;
1978   }else{
1979     v2 = sqlite3VdbeIntValue(pIn2)!=0;
1980   }
1981   if( pOp->opcode==OP_And ){
1982     static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
1983     v1 = and_logic[v1*3+v2];
1984   }else{
1985     static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
1986     v1 = or_logic[v1*3+v2];
1987   }
1988   pOut = &aMem[pOp->p3];
1989   if( v1==2 ){
1990     MemSetTypeFlag(pOut, MEM_Null);
1991   }else{
1992     pOut->u.i = v1;
1993     MemSetTypeFlag(pOut, MEM_Int);
1994   }
1995   break;
1996 }
1997 
1998 /* Opcode: Not P1 P2 * * *
1999 **
2000 ** Interpret the value in register P1 as a boolean value.  Store the
2001 ** boolean complement in register P2.  If the value in register P1 is
2002 ** NULL, then a NULL is stored in P2.
2003 */
2004 case OP_Not: {                /* same as TK_NOT, in1, out2 */
2005   pIn1 = &aMem[pOp->p1];
2006   pOut = &aMem[pOp->p2];
2007   if( pIn1->flags & MEM_Null ){
2008     sqlite3VdbeMemSetNull(pOut);
2009   }else{
2010     sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
2011   }
2012   break;
2013 }
2014 
2015 /* Opcode: BitNot P1 P2 * * *
2016 **
2017 ** Interpret the content of register P1 as an integer.  Store the
2018 ** ones-complement of the P1 value into register P2.  If P1 holds
2019 ** a NULL then store a NULL in P2.
2020 */
2021 case OP_BitNot: {             /* same as TK_BITNOT, in1, out2 */
2022   pIn1 = &aMem[pOp->p1];
2023   pOut = &aMem[pOp->p2];
2024   if( pIn1->flags & MEM_Null ){
2025     sqlite3VdbeMemSetNull(pOut);
2026   }else{
2027     sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
2028   }
2029   break;
2030 }
2031 
2032 /* Opcode: Once P1 P2 * * *
2033 **
2034 ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
2035 ** set the flag and fall through to the next instruction.
2036 **
2037 ** See also: JumpOnce
2038 */
2039 case OP_Once: {             /* jump */
2040   assert( pOp->p1<p->nOnceFlag );
2041   if( p->aOnceFlag[pOp->p1] ){
2042     pc = pOp->p2-1;
2043   }else{
2044     p->aOnceFlag[pOp->p1] = 1;
2045   }
2046   break;
2047 }
2048 
2049 /* Opcode: If P1 P2 P3 * *
2050 **
2051 ** Jump to P2 if the value in register P1 is true.  The value
2052 ** is considered true if it is numeric and non-zero.  If the value
2053 ** in P1 is NULL then take the jump if P3 is non-zero.
2054 */
2055 /* Opcode: IfNot P1 P2 P3 * *
2056 **
2057 ** Jump to P2 if the value in register P1 is False.  The value
2058 ** is considered false if it has a numeric value of zero.  If the value
2059 ** in P1 is NULL then take the jump if P3 is zero.
2060 */
2061 case OP_If:                 /* jump, in1 */
2062 case OP_IfNot: {            /* jump, in1 */
2063   int c;
2064   pIn1 = &aMem[pOp->p1];
2065   if( pIn1->flags & MEM_Null ){
2066     c = pOp->p3;
2067   }else{
2068 #ifdef SQLITE_OMIT_FLOATING_POINT
2069     c = sqlite3VdbeIntValue(pIn1)!=0;
2070 #else
2071     c = sqlite3VdbeRealValue(pIn1)!=0.0;
2072 #endif
2073     if( pOp->opcode==OP_IfNot ) c = !c;
2074   }
2075   if( c ){
2076     pc = pOp->p2-1;
2077   }
2078   break;
2079 }
2080 
2081 /* Opcode: IsNull P1 P2 * * *
2082 **
2083 ** Jump to P2 if the value in register P1 is NULL.
2084 */
2085 case OP_IsNull: {            /* same as TK_ISNULL, jump, in1 */
2086   pIn1 = &aMem[pOp->p1];
2087   if( (pIn1->flags & MEM_Null)!=0 ){
2088     pc = pOp->p2 - 1;
2089   }
2090   break;
2091 }
2092 
2093 /* Opcode: NotNull P1 P2 * * *
2094 **
2095 ** Jump to P2 if the value in register P1 is not NULL.
2096 */
2097 case OP_NotNull: {            /* same as TK_NOTNULL, jump, in1 */
2098   pIn1 = &aMem[pOp->p1];
2099   if( (pIn1->flags & MEM_Null)==0 ){
2100     pc = pOp->p2 - 1;
2101   }
2102   break;
2103 }
2104 
2105 /* Opcode: Column P1 P2 P3 P4 P5
2106 **
2107 ** Interpret the data that cursor P1 points to as a structure built using
2108 ** the MakeRecord instruction.  (See the MakeRecord opcode for additional
2109 ** information about the format of the data.)  Extract the P2-th column
2110 ** from this record.  If there are less that (P2+1)
2111 ** values in the record, extract a NULL.
2112 **
2113 ** The value extracted is stored in register P3.
2114 **
2115 ** If the column contains fewer than P2 fields, then extract a NULL.  Or,
2116 ** if the P4 argument is a P4_MEM use the value of the P4 argument as
2117 ** the result.
2118 **
2119 ** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor,
2120 ** then the cache of the cursor is reset prior to extracting the column.
2121 ** The first OP_Column against a pseudo-table after the value of the content
2122 ** register has changed should have this bit set.
2123 */
2124 case OP_Column: {
2125   u32 payloadSize;   /* Number of bytes in the record */
2126   i64 payloadSize64; /* Number of bytes in the record */
2127   int p1;            /* P1 value of the opcode */
2128   int p2;            /* column number to retrieve */
2129   VdbeCursor *pC;    /* The VDBE cursor */
2130   char *zRec;        /* Pointer to complete record-data */
2131   BtCursor *pCrsr;   /* The BTree cursor */
2132   u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
2133   u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
2134   int nField;        /* number of fields in the record */
2135   int len;           /* The length of the serialized data for the column */
2136   int i;             /* Loop counter */
2137   char *zData;       /* Part of the record being decoded */
2138   Mem *pDest;        /* Where to write the extracted value */
2139   Mem sMem;          /* For storing the record being decoded */
2140   u8 *zIdx;          /* Index into header */
2141   u8 *zEndHdr;       /* Pointer to first byte after the header */
2142   u32 offset;        /* Offset into the data */
2143   u32 szField;       /* Number of bytes in the content of a field */
2144   int szHdr;         /* Size of the header size field at start of record */
2145   int avail;         /* Number of bytes of available data */
2146   u32 t;             /* A type code from the record header */
2147   Mem *pReg;         /* PseudoTable input register */
2148 
2149 
2150   p1 = pOp->p1;
2151   p2 = pOp->p2;
2152   pC = 0;
2153   memset(&sMem, 0, sizeof(sMem));
2154   assert( p1<p->nCursor );
2155   assert( pOp->p3>0 && pOp->p3<=p->nMem );
2156   pDest = &aMem[pOp->p3];
2157   memAboutToChange(p, pDest);
2158   zRec = 0;
2159 
2160   /* This block sets the variable payloadSize to be the total number of
2161   ** bytes in the record.
2162   **
2163   ** zRec is set to be the complete text of the record if it is available.
2164   ** The complete record text is always available for pseudo-tables
2165   ** If the record is stored in a cursor, the complete record text
2166   ** might be available in the  pC->aRow cache.  Or it might not be.
2167   ** If the data is unavailable,  zRec is set to NULL.
2168   **
2169   ** We also compute the number of columns in the record.  For cursors,
2170   ** the number of columns is stored in the VdbeCursor.nField element.
2171   */
2172   pC = p->apCsr[p1];
2173   assert( pC!=0 );
2174 #ifndef SQLITE_OMIT_VIRTUALTABLE
2175   assert( pC->pVtabCursor==0 );
2176 #endif
2177   pCrsr = pC->pCursor;
2178   if( pCrsr!=0 ){
2179     /* The record is stored in a B-Tree */
2180     rc = sqlite3VdbeCursorMoveto(pC);
2181     if( rc ) goto abort_due_to_error;
2182     if( pC->nullRow ){
2183       payloadSize = 0;
2184     }else if( pC->cacheStatus==p->cacheCtr ){
2185       payloadSize = pC->payloadSize;
2186       zRec = (char*)pC->aRow;
2187     }else if( pC->isIndex ){
2188       assert( sqlite3BtreeCursorIsValid(pCrsr) );
2189       VVA_ONLY(rc =) sqlite3BtreeKeySize(pCrsr, &payloadSize64);
2190       assert( rc==SQLITE_OK );   /* True because of CursorMoveto() call above */
2191       /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the
2192       ** payload size, so it is impossible for payloadSize64 to be
2193       ** larger than 32 bits. */
2194       assert( (payloadSize64 & SQLITE_MAX_U32)==(u64)payloadSize64 );
2195       payloadSize = (u32)payloadSize64;
2196     }else{
2197       assert( sqlite3BtreeCursorIsValid(pCrsr) );
2198       VVA_ONLY(rc =) sqlite3BtreeDataSize(pCrsr, &payloadSize);
2199       assert( rc==SQLITE_OK );   /* DataSize() cannot fail */
2200     }
2201   }else if( ALWAYS(pC->pseudoTableReg>0) ){
2202     pReg = &aMem[pC->pseudoTableReg];
2203     assert( pReg->flags & MEM_Blob );
2204     assert( memIsValid(pReg) );
2205     payloadSize = pReg->n;
2206     zRec = pReg->z;
2207     pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
2208     assert( payloadSize==0 || zRec!=0 );
2209   }else{
2210     /* Consider the row to be NULL */
2211     payloadSize = 0;
2212   }
2213 
2214   /* If payloadSize is 0, then just store a NULL.  This can happen because of
2215   ** nullRow or because of a corrupt database. */
2216   if( payloadSize==0 ){
2217     MemSetTypeFlag(pDest, MEM_Null);
2218     goto op_column_out;
2219   }
2220   assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
2221   if( payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
2222     goto too_big;
2223   }
2224 
2225   nField = pC->nField;
2226   assert( p2<nField );
2227 
2228   /* Read and parse the table header.  Store the results of the parse
2229   ** into the record header cache fields of the cursor.
2230   */
2231   aType = pC->aType;
2232   if( pC->cacheStatus==p->cacheCtr ){
2233     aOffset = pC->aOffset;
2234   }else{
2235     assert(aType);
2236     avail = 0;
2237     pC->aOffset = aOffset = &aType[nField];
2238     pC->payloadSize = payloadSize;
2239     pC->cacheStatus = p->cacheCtr;
2240 
2241     /* Figure out how many bytes are in the header */
2242     if( zRec ){
2243       zData = zRec;
2244     }else{
2245       if( pC->isIndex ){
2246         zData = (char*)sqlite3BtreeKeyFetch(pCrsr, &avail);
2247       }else{
2248         zData = (char*)sqlite3BtreeDataFetch(pCrsr, &avail);
2249       }
2250       /* If KeyFetch()/DataFetch() managed to get the entire payload,
2251       ** save the payload in the pC->aRow cache.  That will save us from
2252       ** having to make additional calls to fetch the content portion of
2253       ** the record.
2254       */
2255       assert( avail>=0 );
2256       if( payloadSize <= (u32)avail ){
2257         zRec = zData;
2258         pC->aRow = (u8*)zData;
2259       }else{
2260         pC->aRow = 0;
2261       }
2262     }
2263     /* The following assert is true in all cases accept when
2264     ** the database file has been corrupted externally.
2265     **    assert( zRec!=0 || avail>=payloadSize || avail>=9 ); */
2266     szHdr = getVarint32((u8*)zData, offset);
2267 
2268     /* Make sure a corrupt database has not given us an oversize header.
2269     ** Do this now to avoid an oversize memory allocation.
2270     **
2271     ** Type entries can be between 1 and 5 bytes each.  But 4 and 5 byte
2272     ** types use so much data space that there can only be 4096 and 32 of
2273     ** them, respectively.  So the maximum header length results from a
2274     ** 3-byte type for each of the maximum of 32768 columns plus three
2275     ** extra bytes for the header length itself.  32768*3 + 3 = 98307.
2276     */
2277     if( offset > 98307 ){
2278       rc = SQLITE_CORRUPT_BKPT;
2279       goto op_column_out;
2280     }
2281 
2282     /* Compute in len the number of bytes of data we need to read in order
2283     ** to get nField type values.  offset is an upper bound on this.  But
2284     ** nField might be significantly less than the true number of columns
2285     ** in the table, and in that case, 5*nField+3 might be smaller than offset.
2286     ** We want to minimize len in order to limit the size of the memory
2287     ** allocation, especially if a corrupt database file has caused offset
2288     ** to be oversized. Offset is limited to 98307 above.  But 98307 might
2289     ** still exceed Robson memory allocation limits on some configurations.
2290     ** On systems that cannot tolerate large memory allocations, nField*5+3
2291     ** will likely be much smaller since nField will likely be less than
2292     ** 20 or so.  This insures that Robson memory allocation limits are
2293     ** not exceeded even for corrupt database files.
2294     */
2295     len = nField*5 + 3;
2296     if( len > (int)offset ) len = (int)offset;
2297 
2298     /* The KeyFetch() or DataFetch() above are fast and will get the entire
2299     ** record header in most cases.  But they will fail to get the complete
2300     ** record header if the record header does not fit on a single page
2301     ** in the B-Tree.  When that happens, use sqlite3VdbeMemFromBtree() to
2302     ** acquire the complete header text.
2303     */
2304     if( !zRec && avail<len ){
2305       sMem.flags = 0;
2306       sMem.db = 0;
2307       rc = sqlite3VdbeMemFromBtree(pCrsr, 0, len, pC->isIndex, &sMem);
2308       if( rc!=SQLITE_OK ){
2309         goto op_column_out;
2310       }
2311       zData = sMem.z;
2312     }
2313     zEndHdr = (u8 *)&zData[len];
2314     zIdx = (u8 *)&zData[szHdr];
2315 
2316     /* Scan the header and use it to fill in the aType[] and aOffset[]
2317     ** arrays.  aType[i] will contain the type integer for the i-th
2318     ** column and aOffset[i] will contain the offset from the beginning
2319     ** of the record to the start of the data for the i-th column
2320     */
2321     for(i=0; i<nField; i++){
2322       if( zIdx<zEndHdr ){
2323         aOffset[i] = offset;
2324         if( zIdx[0]<0x80 ){
2325           t = zIdx[0];
2326           zIdx++;
2327         }else{
2328           zIdx += sqlite3GetVarint32(zIdx, &t);
2329         }
2330         aType[i] = t;
2331         szField = sqlite3VdbeSerialTypeLen(t);
2332         offset += szField;
2333         if( offset<szField ){  /* True if offset overflows */
2334           zIdx = &zEndHdr[1];  /* Forces SQLITE_CORRUPT return below */
2335           break;
2336         }
2337       }else{
2338         /* If i is less that nField, then there are less fields in this
2339         ** record than SetNumColumns indicated there are columns in the
2340         ** table. Set the offset for any extra columns not present in
2341         ** the record to 0. This tells code below to store a NULL
2342         ** instead of deserializing a value from the record.
2343         */
2344         aOffset[i] = 0;
2345       }
2346     }
2347     sqlite3VdbeMemRelease(&sMem);
2348     sMem.flags = MEM_Null;
2349 
2350     /* If we have read more header data than was contained in the header,
2351     ** or if the end of the last field appears to be past the end of the
2352     ** record, or if the end of the last field appears to be before the end
2353     ** of the record (when all fields present), then we must be dealing
2354     ** with a corrupt database.
2355     */
2356     if( (zIdx > zEndHdr) || (offset > payloadSize)
2357          || (zIdx==zEndHdr && offset!=payloadSize) ){
2358       rc = SQLITE_CORRUPT_BKPT;
2359       goto op_column_out;
2360     }
2361   }
2362 
2363   /* Get the column information. If aOffset[p2] is non-zero, then
2364   ** deserialize the value from the record. If aOffset[p2] is zero,
2365   ** then there are not enough fields in the record to satisfy the
2366   ** request.  In this case, set the value NULL or to P4 if P4 is
2367   ** a pointer to a Mem object.
2368   */
2369   if( aOffset[p2] ){
2370     assert( rc==SQLITE_OK );
2371     if( zRec ){
2372       VdbeMemRelease(pDest);
2373       sqlite3VdbeSerialGet((u8 *)&zRec[aOffset[p2]], aType[p2], pDest);
2374     }else{
2375       len = sqlite3VdbeSerialTypeLen(aType[p2]);
2376       sqlite3VdbeMemMove(&sMem, pDest);
2377       rc = sqlite3VdbeMemFromBtree(pCrsr, aOffset[p2], len, pC->isIndex, &sMem);
2378       if( rc!=SQLITE_OK ){
2379         goto op_column_out;
2380       }
2381       zData = sMem.z;
2382       sqlite3VdbeSerialGet((u8*)zData, aType[p2], pDest);
2383     }
2384     pDest->enc = encoding;
2385   }else{
2386     if( pOp->p4type==P4_MEM ){
2387       sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static);
2388     }else{
2389       MemSetTypeFlag(pDest, MEM_Null);
2390     }
2391   }
2392 
2393   /* If we dynamically allocated space to hold the data (in the
2394   ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
2395   ** dynamically allocated space over to the pDest structure.
2396   ** This prevents a memory copy.
2397   */
2398   if( sMem.zMalloc ){
2399     assert( sMem.z==sMem.zMalloc );
2400     assert( !(pDest->flags & MEM_Dyn) );
2401     assert( !(pDest->flags & (MEM_Blob|MEM_Str)) || pDest->z==sMem.z );
2402     pDest->flags &= ~(MEM_Ephem|MEM_Static);
2403     pDest->flags |= MEM_Term;
2404     pDest->z = sMem.z;
2405     pDest->zMalloc = sMem.zMalloc;
2406   }
2407 
2408   rc = sqlite3VdbeMemMakeWriteable(pDest);
2409 
2410 op_column_out:
2411   UPDATE_MAX_BLOBSIZE(pDest);
2412   REGISTER_TRACE(pOp->p3, pDest);
2413   break;
2414 }
2415 
2416 /* Opcode: Affinity P1 P2 * P4 *
2417 **
2418 ** Apply affinities to a range of P2 registers starting with P1.
2419 **
2420 ** P4 is a string that is P2 characters long. The nth character of the
2421 ** string indicates the column affinity that should be used for the nth
2422 ** memory cell in the range.
2423 */
2424 case OP_Affinity: {
2425   const char *zAffinity;   /* The affinity to be applied */
2426   char cAff;               /* A single character of affinity */
2427 
2428   zAffinity = pOp->p4.z;
2429   assert( zAffinity!=0 );
2430   assert( zAffinity[pOp->p2]==0 );
2431   pIn1 = &aMem[pOp->p1];
2432   while( (cAff = *(zAffinity++))!=0 ){
2433     assert( pIn1 <= &p->aMem[p->nMem] );
2434     assert( memIsValid(pIn1) );
2435     ExpandBlob(pIn1);
2436     applyAffinity(pIn1, cAff, encoding);
2437     pIn1++;
2438   }
2439   break;
2440 }
2441 
2442 /* Opcode: MakeRecord P1 P2 P3 P4 *
2443 **
2444 ** Convert P2 registers beginning with P1 into the [record format]
2445 ** use as a data record in a database table or as a key
2446 ** in an index.  The OP_Column opcode can decode the record later.
2447 **
2448 ** P4 may be a string that is P2 characters long.  The nth character of the
2449 ** string indicates the column affinity that should be used for the nth
2450 ** field of the index key.
2451 **
2452 ** The mapping from character to affinity is given by the SQLITE_AFF_
2453 ** macros defined in sqliteInt.h.
2454 **
2455 ** If P4 is NULL then all index fields have the affinity NONE.
2456 */
2457 case OP_MakeRecord: {
2458   u8 *zNewRecord;        /* A buffer to hold the data for the new record */
2459   Mem *pRec;             /* The new record */
2460   u64 nData;             /* Number of bytes of data space */
2461   int nHdr;              /* Number of bytes of header space */
2462   i64 nByte;             /* Data space required for this record */
2463   int nZero;             /* Number of zero bytes at the end of the record */
2464   int nVarint;           /* Number of bytes in a varint */
2465   u32 serial_type;       /* Type field */
2466   Mem *pData0;           /* First field to be combined into the record */
2467   Mem *pLast;            /* Last field of the record */
2468   int nField;            /* Number of fields in the record */
2469   char *zAffinity;       /* The affinity string for the record */
2470   int file_format;       /* File format to use for encoding */
2471   int i;                 /* Space used in zNewRecord[] */
2472   int len;               /* Length of a field */
2473 
2474   /* Assuming the record contains N fields, the record format looks
2475   ** like this:
2476   **
2477   ** ------------------------------------------------------------------------
2478   ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 |
2479   ** ------------------------------------------------------------------------
2480   **
2481   ** Data(0) is taken from register P1.  Data(1) comes from register P1+1
2482   ** and so froth.
2483   **
2484   ** Each type field is a varint representing the serial type of the
2485   ** corresponding data element (see sqlite3VdbeSerialType()). The
2486   ** hdr-size field is also a varint which is the offset from the beginning
2487   ** of the record to data0.
2488   */
2489   nData = 0;         /* Number of bytes of data space */
2490   nHdr = 0;          /* Number of bytes of header space */
2491   nZero = 0;         /* Number of zero bytes at the end of the record */
2492   nField = pOp->p1;
2493   zAffinity = pOp->p4.z;
2494   assert( nField>0 && pOp->p2>0 && pOp->p2+nField<=p->nMem+1 );
2495   pData0 = &aMem[nField];
2496   nField = pOp->p2;
2497   pLast = &pData0[nField-1];
2498   file_format = p->minWriteFileFormat;
2499 
2500   /* Identify the output register */
2501   assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
2502   pOut = &aMem[pOp->p3];
2503   memAboutToChange(p, pOut);
2504 
2505   /* Loop through the elements that will make up the record to figure
2506   ** out how much space is required for the new record.
2507   */
2508   for(pRec=pData0; pRec<=pLast; pRec++){
2509     assert( memIsValid(pRec) );
2510     if( zAffinity ){
2511       applyAffinity(pRec, zAffinity[pRec-pData0], encoding);
2512     }
2513     if( pRec->flags&MEM_Zero && pRec->n>0 ){
2514       sqlite3VdbeMemExpandBlob(pRec);
2515     }
2516     serial_type = sqlite3VdbeSerialType(pRec, file_format);
2517     len = sqlite3VdbeSerialTypeLen(serial_type);
2518     nData += len;
2519     nHdr += sqlite3VarintLen(serial_type);
2520     if( pRec->flags & MEM_Zero ){
2521       /* Only pure zero-filled BLOBs can be input to this Opcode.
2522       ** We do not allow blobs with a prefix and a zero-filled tail. */
2523       nZero += pRec->u.nZero;
2524     }else if( len ){
2525       nZero = 0;
2526     }
2527   }
2528 
2529   /* Add the initial header varint and total the size */
2530   nHdr += nVarint = sqlite3VarintLen(nHdr);
2531   if( nVarint<sqlite3VarintLen(nHdr) ){
2532     nHdr++;
2533   }
2534   nByte = nHdr+nData-nZero;
2535   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
2536     goto too_big;
2537   }
2538 
2539   /* Make sure the output register has a buffer large enough to store
2540   ** the new record. The output register (pOp->p3) is not allowed to
2541   ** be one of the input registers (because the following call to
2542   ** sqlite3VdbeMemGrow() could clobber the value before it is used).
2543   */
2544   if( sqlite3VdbeMemGrow(pOut, (int)nByte, 0) ){
2545     goto no_mem;
2546   }
2547   zNewRecord = (u8 *)pOut->z;
2548 
2549   /* Write the record */
2550   i = putVarint32(zNewRecord, nHdr);
2551   for(pRec=pData0; pRec<=pLast; pRec++){
2552     serial_type = sqlite3VdbeSerialType(pRec, file_format);
2553     i += putVarint32(&zNewRecord[i], serial_type);      /* serial type */
2554   }
2555   for(pRec=pData0; pRec<=pLast; pRec++){  /* serial data */
2556     i += sqlite3VdbeSerialPut(&zNewRecord[i], (int)(nByte-i), pRec,file_format);
2557   }
2558   assert( i==nByte );
2559 
2560   assert( pOp->p3>0 && pOp->p3<=p->nMem );
2561   pOut->n = (int)nByte;
2562   pOut->flags = MEM_Blob | MEM_Dyn;
2563   pOut->xDel = 0;
2564   if( nZero ){
2565     pOut->u.nZero = nZero;
2566     pOut->flags |= MEM_Zero;
2567   }
2568   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever converted to text */
2569   REGISTER_TRACE(pOp->p3, pOut);
2570   UPDATE_MAX_BLOBSIZE(pOut);
2571   break;
2572 }
2573 
2574 /* Opcode: Count P1 P2 * * *
2575 **
2576 ** Store the number of entries (an integer value) in the table or index
2577 ** opened by cursor P1 in register P2
2578 */
2579 #ifndef SQLITE_OMIT_BTREECOUNT
2580 case OP_Count: {         /* out2-prerelease */
2581   i64 nEntry;
2582   BtCursor *pCrsr;
2583 
2584   pCrsr = p->apCsr[pOp->p1]->pCursor;
2585   if( ALWAYS(pCrsr) ){
2586     rc = sqlite3BtreeCount(pCrsr, &nEntry);
2587   }else{
2588     nEntry = 0;
2589   }
2590   pOut->u.i = nEntry;
2591   break;
2592 }
2593 #endif
2594 
2595 /* Opcode: Savepoint P1 * * P4 *
2596 **
2597 ** Open, release or rollback the savepoint named by parameter P4, depending
2598 ** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
2599 ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
2600 */
2601 case OP_Savepoint: {
2602   int p1;                         /* Value of P1 operand */
2603   char *zName;                    /* Name of savepoint */
2604   int nName;
2605   Savepoint *pNew;
2606   Savepoint *pSavepoint;
2607   Savepoint *pTmp;
2608   int iSavepoint;
2609   int ii;
2610 
2611   p1 = pOp->p1;
2612   zName = pOp->p4.z;
2613 
2614   /* Assert that the p1 parameter is valid. Also that if there is no open
2615   ** transaction, then there cannot be any savepoints.
2616   */
2617   assert( db->pSavepoint==0 || db->autoCommit==0 );
2618   assert( p1==SAVEPOINT_BEGIN||p1==SAVEPOINT_RELEASE||p1==SAVEPOINT_ROLLBACK );
2619   assert( db->pSavepoint || db->isTransactionSavepoint==0 );
2620   assert( checkSavepointCount(db) );
2621 
2622   if( p1==SAVEPOINT_BEGIN ){
2623     if( db->writeVdbeCnt>0 ){
2624       /* A new savepoint cannot be created if there are active write
2625       ** statements (i.e. open read/write incremental blob handles).
2626       */
2627       sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - "
2628         "SQL statements in progress");
2629       rc = SQLITE_BUSY;
2630     }else{
2631       nName = sqlite3Strlen30(zName);
2632 
2633 #ifndef SQLITE_OMIT_VIRTUALTABLE
2634       /* This call is Ok even if this savepoint is actually a transaction
2635       ** savepoint (and therefore should not prompt xSavepoint()) callbacks.
2636       ** If this is a transaction savepoint being opened, it is guaranteed
2637       ** that the db->aVTrans[] array is empty.  */
2638       assert( db->autoCommit==0 || db->nVTrans==0 );
2639       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN,
2640                                 db->nStatement+db->nSavepoint);
2641       if( rc!=SQLITE_OK ) goto abort_due_to_error;
2642 #endif
2643 
2644       /* Create a new savepoint structure. */
2645       pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+nName+1);
2646       if( pNew ){
2647         pNew->zName = (char *)&pNew[1];
2648         memcpy(pNew->zName, zName, nName+1);
2649 
2650         /* If there is no open transaction, then mark this as a special
2651         ** "transaction savepoint". */
2652         if( db->autoCommit ){
2653           db->autoCommit = 0;
2654           db->isTransactionSavepoint = 1;
2655         }else{
2656           db->nSavepoint++;
2657         }
2658 
2659         /* Link the new savepoint into the database handle's list. */
2660         pNew->pNext = db->pSavepoint;
2661         db->pSavepoint = pNew;
2662         pNew->nDeferredCons = db->nDeferredCons;
2663       }
2664     }
2665   }else{
2666     iSavepoint = 0;
2667 
2668     /* Find the named savepoint. If there is no such savepoint, then an
2669     ** an error is returned to the user.  */
2670     for(
2671       pSavepoint = db->pSavepoint;
2672       pSavepoint && sqlite3StrICmp(pSavepoint->zName, zName);
2673       pSavepoint = pSavepoint->pNext
2674     ){
2675       iSavepoint++;
2676     }
2677     if( !pSavepoint ){
2678       sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", zName);
2679       rc = SQLITE_ERROR;
2680     }else if(
2681         db->writeVdbeCnt>0 || (p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1)
2682     ){
2683       /* It is not possible to release (commit) a savepoint if there are
2684       ** active write statements. It is not possible to rollback a savepoint
2685       ** if there are any active statements at all.
2686       */
2687       sqlite3SetString(&p->zErrMsg, db,
2688         "cannot %s savepoint - SQL statements in progress",
2689         (p1==SAVEPOINT_ROLLBACK ? "rollback": "release")
2690       );
2691       rc = SQLITE_BUSY;
2692     }else{
2693 
2694       /* Determine whether or not this is a transaction savepoint. If so,
2695       ** and this is a RELEASE command, then the current transaction
2696       ** is committed.
2697       */
2698       int isTransaction = pSavepoint->pNext==0 && db->isTransactionSavepoint;
2699       if( isTransaction && p1==SAVEPOINT_RELEASE ){
2700         if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
2701           goto vdbe_return;
2702         }
2703         db->autoCommit = 1;
2704         if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
2705           p->pc = pc;
2706           db->autoCommit = 0;
2707           p->rc = rc = SQLITE_BUSY;
2708           goto vdbe_return;
2709         }
2710         db->isTransactionSavepoint = 0;
2711         rc = p->rc;
2712       }else{
2713         iSavepoint = db->nSavepoint - iSavepoint - 1;
2714         for(ii=0; ii<db->nDb; ii++){
2715           rc = sqlite3BtreeSavepoint(db->aDb[ii].pBt, p1, iSavepoint);
2716           if( rc!=SQLITE_OK ){
2717             goto abort_due_to_error;
2718           }
2719         }
2720         if( p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
2721           sqlite3ExpirePreparedStatements(db);
2722           sqlite3ResetInternalSchema(db, -1);
2723           db->flags = (db->flags | SQLITE_InternChanges);
2724         }
2725       }
2726 
2727       /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
2728       ** savepoints nested inside of the savepoint being operated on. */
2729       while( db->pSavepoint!=pSavepoint ){
2730         pTmp = db->pSavepoint;
2731         db->pSavepoint = pTmp->pNext;
2732         sqlite3DbFree(db, pTmp);
2733         db->nSavepoint--;
2734       }
2735 
2736       /* If it is a RELEASE, then destroy the savepoint being operated on
2737       ** too. If it is a ROLLBACK TO, then set the number of deferred
2738       ** constraint violations present in the database to the value stored
2739       ** when the savepoint was created.  */
2740       if( p1==SAVEPOINT_RELEASE ){
2741         assert( pSavepoint==db->pSavepoint );
2742         db->pSavepoint = pSavepoint->pNext;
2743         sqlite3DbFree(db, pSavepoint);
2744         if( !isTransaction ){
2745           db->nSavepoint--;
2746         }
2747       }else{
2748         db->nDeferredCons = pSavepoint->nDeferredCons;
2749       }
2750 
2751       if( !isTransaction ){
2752         rc = sqlite3VtabSavepoint(db, p1, iSavepoint);
2753         if( rc!=SQLITE_OK ) goto abort_due_to_error;
2754       }
2755     }
2756   }
2757 
2758   break;
2759 }
2760 
2761 /* Opcode: AutoCommit P1 P2 * * *
2762 **
2763 ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
2764 ** back any currently active btree transactions. If there are any active
2765 ** VMs (apart from this one), then a ROLLBACK fails.  A COMMIT fails if
2766 ** there are active writing VMs or active VMs that use shared cache.
2767 **
2768 ** This instruction causes the VM to halt.
2769 */
2770 case OP_AutoCommit: {
2771   int desiredAutoCommit;
2772   int iRollback;
2773   int turnOnAC;
2774 
2775   desiredAutoCommit = pOp->p1;
2776   iRollback = pOp->p2;
2777   turnOnAC = desiredAutoCommit && !db->autoCommit;
2778   assert( desiredAutoCommit==1 || desiredAutoCommit==0 );
2779   assert( desiredAutoCommit==1 || iRollback==0 );
2780   assert( db->activeVdbeCnt>0 );  /* At least this one VM is active */
2781 
2782   if( turnOnAC && iRollback && db->activeVdbeCnt>1 ){
2783     /* If this instruction implements a ROLLBACK and other VMs are
2784     ** still running, and a transaction is active, return an error indicating
2785     ** that the other VMs must complete first.
2786     */
2787     sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
2788         "SQL statements in progress");
2789     rc = SQLITE_BUSY;
2790   }else if( turnOnAC && !iRollback && db->writeVdbeCnt>0 ){
2791     /* If this instruction implements a COMMIT and other VMs are writing
2792     ** return an error indicating that the other VMs must complete first.
2793     */
2794     sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - "
2795         "SQL statements in progress");
2796     rc = SQLITE_BUSY;
2797   }else if( desiredAutoCommit!=db->autoCommit ){
2798     if( iRollback ){
2799       assert( desiredAutoCommit==1 );
2800       sqlite3RollbackAll(db);
2801       db->autoCommit = 1;
2802     }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
2803       goto vdbe_return;
2804     }else{
2805       db->autoCommit = (u8)desiredAutoCommit;
2806       if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
2807         p->pc = pc;
2808         db->autoCommit = (u8)(1-desiredAutoCommit);
2809         p->rc = rc = SQLITE_BUSY;
2810         goto vdbe_return;
2811       }
2812     }
2813     assert( db->nStatement==0 );
2814     sqlite3CloseSavepoints(db);
2815     if( p->rc==SQLITE_OK ){
2816       rc = SQLITE_DONE;
2817     }else{
2818       rc = SQLITE_ERROR;
2819     }
2820     goto vdbe_return;
2821   }else{
2822     sqlite3SetString(&p->zErrMsg, db,
2823         (!desiredAutoCommit)?"cannot start a transaction within a transaction":(
2824         (iRollback)?"cannot rollback - no transaction is active":
2825                    "cannot commit - no transaction is active"));
2826 
2827     rc = SQLITE_ERROR;
2828   }
2829   break;
2830 }
2831 
2832 /* Opcode: Transaction P1 P2 * * *
2833 **
2834 ** Begin a transaction.  The transaction ends when a Commit or Rollback
2835 ** opcode is encountered.  Depending on the ON CONFLICT setting, the
2836 ** transaction might also be rolled back if an error is encountered.
2837 **
2838 ** P1 is the index of the database file on which the transaction is
2839 ** started.  Index 0 is the main database file and index 1 is the
2840 ** file used for temporary tables.  Indices of 2 or more are used for
2841 ** attached databases.
2842 **
2843 ** If P2 is non-zero, then a write-transaction is started.  A RESERVED lock is
2844 ** obtained on the database file when a write-transaction is started.  No
2845 ** other process can start another write transaction while this transaction is
2846 ** underway.  Starting a write transaction also creates a rollback journal. A
2847 ** write transaction must be started before any changes can be made to the
2848 ** database.  If P2 is 2 or greater then an EXCLUSIVE lock is also obtained
2849 ** on the file.
2850 **
2851 ** If a write-transaction is started and the Vdbe.usesStmtJournal flag is
2852 ** true (this flag is set if the Vdbe may modify more than one row and may
2853 ** throw an ABORT exception), a statement transaction may also be opened.
2854 ** More specifically, a statement transaction is opened iff the database
2855 ** connection is currently not in autocommit mode, or if there are other
2856 ** active statements. A statement transaction allows the affects of this
2857 ** VDBE to be rolled back after an error without having to roll back the
2858 ** entire transaction. If no error is encountered, the statement transaction
2859 ** will automatically commit when the VDBE halts.
2860 **
2861 ** If P2 is zero, then a read-lock is obtained on the database file.
2862 */
2863 case OP_Transaction: {
2864   Btree *pBt;
2865 
2866   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2867   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
2868   pBt = db->aDb[pOp->p1].pBt;
2869 
2870   if( pBt ){
2871     rc = sqlite3BtreeBeginTrans(pBt, pOp->p2);
2872     if( rc==SQLITE_BUSY ){
2873       p->pc = pc;
2874       p->rc = rc = SQLITE_BUSY;
2875       goto vdbe_return;
2876     }
2877     if( rc!=SQLITE_OK ){
2878       goto abort_due_to_error;
2879     }
2880 
2881     if( pOp->p2 && p->usesStmtJournal
2882      && (db->autoCommit==0 || db->activeVdbeCnt>1)
2883     ){
2884       assert( sqlite3BtreeIsInTrans(pBt) );
2885       if( p->iStatement==0 ){
2886         assert( db->nStatement>=0 && db->nSavepoint>=0 );
2887         db->nStatement++;
2888         p->iStatement = db->nSavepoint + db->nStatement;
2889       }
2890 
2891       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1);
2892       if( rc==SQLITE_OK ){
2893         rc = sqlite3BtreeBeginStmt(pBt, p->iStatement);
2894       }
2895 
2896       /* Store the current value of the database handles deferred constraint
2897       ** counter. If the statement transaction needs to be rolled back,
2898       ** the value of this counter needs to be restored too.  */
2899       p->nStmtDefCons = db->nDeferredCons;
2900     }
2901   }
2902   break;
2903 }
2904 
2905 /* Opcode: ReadCookie P1 P2 P3 * *
2906 **
2907 ** Read cookie number P3 from database P1 and write it into register P2.
2908 ** P3==1 is the schema version.  P3==2 is the database format.
2909 ** P3==3 is the recommended pager cache size, and so forth.  P1==0 is
2910 ** the main database file and P1==1 is the database file used to store
2911 ** temporary tables.
2912 **
2913 ** There must be a read-lock on the database (either a transaction
2914 ** must be started or there must be an open cursor) before
2915 ** executing this instruction.
2916 */
2917 case OP_ReadCookie: {               /* out2-prerelease */
2918   int iMeta;
2919   int iDb;
2920   int iCookie;
2921 
2922   iDb = pOp->p1;
2923   iCookie = pOp->p3;
2924   assert( pOp->p3<SQLITE_N_BTREE_META );
2925   assert( iDb>=0 && iDb<db->nDb );
2926   assert( db->aDb[iDb].pBt!=0 );
2927   assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
2928 
2929   sqlite3BtreeGetMeta(db->aDb[iDb].pBt, iCookie, (u32 *)&iMeta);
2930   pOut->u.i = iMeta;
2931   break;
2932 }
2933 
2934 /* Opcode: SetCookie P1 P2 P3 * *
2935 **
2936 ** Write the content of register P3 (interpreted as an integer)
2937 ** into cookie number P2 of database P1.  P2==1 is the schema version.
2938 ** P2==2 is the database format. P2==3 is the recommended pager cache
2939 ** size, and so forth.  P1==0 is the main database file and P1==1 is the
2940 ** database file used to store temporary tables.
2941 **
2942 ** A transaction must be started before executing this opcode.
2943 */
2944 case OP_SetCookie: {       /* in3 */
2945   Db *pDb;
2946   assert( pOp->p2<SQLITE_N_BTREE_META );
2947   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2948   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
2949   pDb = &db->aDb[pOp->p1];
2950   assert( pDb->pBt!=0 );
2951   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
2952   pIn3 = &aMem[pOp->p3];
2953   sqlite3VdbeMemIntegerify(pIn3);
2954   /* See note about index shifting on OP_ReadCookie */
2955   rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, (int)pIn3->u.i);
2956   if( pOp->p2==BTREE_SCHEMA_VERSION ){
2957     /* When the schema cookie changes, record the new cookie internally */
2958     pDb->pSchema->schema_cookie = (int)pIn3->u.i;
2959     db->flags |= SQLITE_InternChanges;
2960   }else if( pOp->p2==BTREE_FILE_FORMAT ){
2961     /* Record changes in the file format */
2962     pDb->pSchema->file_format = (u8)pIn3->u.i;
2963   }
2964   if( pOp->p1==1 ){
2965     /* Invalidate all prepared statements whenever the TEMP database
2966     ** schema is changed.  Ticket #1644 */
2967     sqlite3ExpirePreparedStatements(db);
2968     p->expired = 0;
2969   }
2970   break;
2971 }
2972 
2973 /* Opcode: VerifyCookie P1 P2 P3 * *
2974 **
2975 ** Check the value of global database parameter number 0 (the
2976 ** schema version) and make sure it is equal to P2 and that the
2977 ** generation counter on the local schema parse equals P3.
2978 **
2979 ** P1 is the database number which is 0 for the main database file
2980 ** and 1 for the file holding temporary tables and some higher number
2981 ** for auxiliary databases.
2982 **
2983 ** The cookie changes its value whenever the database schema changes.
2984 ** This operation is used to detect when that the cookie has changed
2985 ** and that the current process needs to reread the schema.
2986 **
2987 ** Either a transaction needs to have been started or an OP_Open needs
2988 ** to be executed (to establish a read lock) before this opcode is
2989 ** invoked.
2990 */
2991 case OP_VerifyCookie: {
2992   int iMeta;
2993   int iGen;
2994   Btree *pBt;
2995 
2996   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2997   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
2998   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
2999   pBt = db->aDb[pOp->p1].pBt;
3000   if( pBt ){
3001     sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&iMeta);
3002     iGen = db->aDb[pOp->p1].pSchema->iGeneration;
3003   }else{
3004     iGen = iMeta = 0;
3005   }
3006   if( iMeta!=pOp->p2 || iGen!=pOp->p3 ){
3007     sqlite3DbFree(db, p->zErrMsg);
3008     p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed");
3009     /* If the schema-cookie from the database file matches the cookie
3010     ** stored with the in-memory representation of the schema, do
3011     ** not reload the schema from the database file.
3012     **
3013     ** If virtual-tables are in use, this is not just an optimization.
3014     ** Often, v-tables store their data in other SQLite tables, which
3015     ** are queried from within xNext() and other v-table methods using
3016     ** prepared queries. If such a query is out-of-date, we do not want to
3017     ** discard the database schema, as the user code implementing the
3018     ** v-table would have to be ready for the sqlite3_vtab structure itself
3019     ** to be invalidated whenever sqlite3_step() is called from within
3020     ** a v-table method.
3021     */
3022     if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){
3023       sqlite3ResetInternalSchema(db, pOp->p1);
3024     }
3025 
3026     p->expired = 1;
3027     rc = SQLITE_SCHEMA;
3028   }
3029   break;
3030 }
3031 
3032 /* Opcode: OpenRead P1 P2 P3 P4 P5
3033 **
3034 ** Open a read-only cursor for the database table whose root page is
3035 ** P2 in a database file.  The database file is determined by P3.
3036 ** P3==0 means the main database, P3==1 means the database used for
3037 ** temporary tables, and P3>1 means used the corresponding attached
3038 ** database.  Give the new cursor an identifier of P1.  The P1
3039 ** values need not be contiguous but all P1 values should be small integers.
3040 ** It is an error for P1 to be negative.
3041 **
3042 ** If P5!=0 then use the content of register P2 as the root page, not
3043 ** the value of P2 itself.
3044 **
3045 ** There will be a read lock on the database whenever there is an
3046 ** open cursor.  If the database was unlocked prior to this instruction
3047 ** then a read lock is acquired as part of this instruction.  A read
3048 ** lock allows other processes to read the database but prohibits
3049 ** any other process from modifying the database.  The read lock is
3050 ** released when all cursors are closed.  If this instruction attempts
3051 ** to get a read lock but fails, the script terminates with an
3052 ** SQLITE_BUSY error code.
3053 **
3054 ** The P4 value may be either an integer (P4_INT32) or a pointer to
3055 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
3056 ** structure, then said structure defines the content and collating
3057 ** sequence of the index being opened. Otherwise, if P4 is an integer
3058 ** value, it is set to the number of columns in the table.
3059 **
3060 ** See also OpenWrite.
3061 */
3062 /* Opcode: OpenWrite P1 P2 P3 P4 P5
3063 **
3064 ** Open a read/write cursor named P1 on the table or index whose root
3065 ** page is P2.  Or if P5!=0 use the content of register P2 to find the
3066 ** root page.
3067 **
3068 ** The P4 value may be either an integer (P4_INT32) or a pointer to
3069 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
3070 ** structure, then said structure defines the content and collating
3071 ** sequence of the index being opened. Otherwise, if P4 is an integer
3072 ** value, it is set to the number of columns in the table, or to the
3073 ** largest index of any column of the table that is actually used.
3074 **
3075 ** This instruction works just like OpenRead except that it opens the cursor
3076 ** in read/write mode.  For a given table, there can be one or more read-only
3077 ** cursors or a single read/write cursor but not both.
3078 **
3079 ** See also OpenRead.
3080 */
3081 case OP_OpenRead:
3082 case OP_OpenWrite: {
3083   int nField;
3084   KeyInfo *pKeyInfo;
3085   int p2;
3086   int iDb;
3087   int wrFlag;
3088   Btree *pX;
3089   VdbeCursor *pCur;
3090   Db *pDb;
3091 
3092   if( p->expired ){
3093     rc = SQLITE_ABORT;
3094     break;
3095   }
3096 
3097   nField = 0;
3098   pKeyInfo = 0;
3099   p2 = pOp->p2;
3100   iDb = pOp->p3;
3101   assert( iDb>=0 && iDb<db->nDb );
3102   assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
3103   pDb = &db->aDb[iDb];
3104   pX = pDb->pBt;
3105   assert( pX!=0 );
3106   if( pOp->opcode==OP_OpenWrite ){
3107     wrFlag = 1;
3108     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
3109     if( pDb->pSchema->file_format < p->minWriteFileFormat ){
3110       p->minWriteFileFormat = pDb->pSchema->file_format;
3111     }
3112   }else{
3113     wrFlag = 0;
3114   }
3115   if( pOp->p5 ){
3116     assert( p2>0 );
3117     assert( p2<=p->nMem );
3118     pIn2 = &aMem[p2];
3119     assert( memIsValid(pIn2) );
3120     assert( (pIn2->flags & MEM_Int)!=0 );
3121     sqlite3VdbeMemIntegerify(pIn2);
3122     p2 = (int)pIn2->u.i;
3123     /* The p2 value always comes from a prior OP_CreateTable opcode and
3124     ** that opcode will always set the p2 value to 2 or more or else fail.
3125     ** If there were a failure, the prepared statement would have halted
3126     ** before reaching this instruction. */
3127     if( NEVER(p2<2) ) {
3128       rc = SQLITE_CORRUPT_BKPT;
3129       goto abort_due_to_error;
3130     }
3131   }
3132   if( pOp->p4type==P4_KEYINFO ){
3133     pKeyInfo = pOp->p4.pKeyInfo;
3134     pKeyInfo->enc = ENC(p->db);
3135     nField = pKeyInfo->nField+1;
3136   }else if( pOp->p4type==P4_INT32 ){
3137     nField = pOp->p4.i;
3138   }
3139   assert( pOp->p1>=0 );
3140   pCur = allocateCursor(p, pOp->p1, nField, iDb, 1);
3141   if( pCur==0 ) goto no_mem;
3142   pCur->nullRow = 1;
3143   pCur->isOrdered = 1;
3144   rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->pCursor);
3145   pCur->pKeyInfo = pKeyInfo;
3146 
3147   /* Since it performs no memory allocation or IO, the only value that
3148   ** sqlite3BtreeCursor() may return is SQLITE_OK. */
3149   assert( rc==SQLITE_OK );
3150 
3151   /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
3152   ** SQLite used to check if the root-page flags were sane at this point
3153   ** and report database corruption if they were not, but this check has
3154   ** since moved into the btree layer.  */
3155   pCur->isTable = pOp->p4type!=P4_KEYINFO;
3156   pCur->isIndex = !pCur->isTable;
3157   break;
3158 }
3159 
3160 /* Opcode: OpenEphemeral P1 P2 * P4 P5
3161 **
3162 ** Open a new cursor P1 to a transient table.
3163 ** The cursor is always opened read/write even if
3164 ** the main database is read-only.  The ephemeral
3165 ** table is deleted automatically when the cursor is closed.
3166 **
3167 ** P2 is the number of columns in the ephemeral table.
3168 ** The cursor points to a BTree table if P4==0 and to a BTree index
3169 ** if P4 is not 0.  If P4 is not NULL, it points to a KeyInfo structure
3170 ** that defines the format of keys in the index.
3171 **
3172 ** This opcode was once called OpenTemp.  But that created
3173 ** confusion because the term "temp table", might refer either
3174 ** to a TEMP table at the SQL level, or to a table opened by
3175 ** this opcode.  Then this opcode was call OpenVirtual.  But
3176 ** that created confusion with the whole virtual-table idea.
3177 **
3178 ** The P5 parameter can be a mask of the BTREE_* flags defined
3179 ** in btree.h.  These flags control aspects of the operation of
3180 ** the btree.  The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are
3181 ** added automatically.
3182 */
3183 /* Opcode: OpenAutoindex P1 P2 * P4 *
3184 **
3185 ** This opcode works the same as OP_OpenEphemeral.  It has a
3186 ** different name to distinguish its use.  Tables created using
3187 ** by this opcode will be used for automatically created transient
3188 ** indices in joins.
3189 */
3190 case OP_OpenAutoindex:
3191 case OP_OpenEphemeral: {
3192   VdbeCursor *pCx;
3193   static const int vfsFlags =
3194       SQLITE_OPEN_READWRITE |
3195       SQLITE_OPEN_CREATE |
3196       SQLITE_OPEN_EXCLUSIVE |
3197       SQLITE_OPEN_DELETEONCLOSE |
3198       SQLITE_OPEN_TRANSIENT_DB;
3199 
3200   assert( pOp->p1>=0 );
3201   pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
3202   if( pCx==0 ) goto no_mem;
3203   pCx->nullRow = 1;
3204   rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBt,
3205                         BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
3206   if( rc==SQLITE_OK ){
3207     rc = sqlite3BtreeBeginTrans(pCx->pBt, 1);
3208   }
3209   if( rc==SQLITE_OK ){
3210     /* If a transient index is required, create it by calling
3211     ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
3212     ** opening it. If a transient table is required, just use the
3213     ** automatically created table with root-page 1 (an BLOB_INTKEY table).
3214     */
3215     if( pOp->p4.pKeyInfo ){
3216       int pgno;
3217       assert( pOp->p4type==P4_KEYINFO );
3218       rc = sqlite3BtreeCreateTable(pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5);
3219       if( rc==SQLITE_OK ){
3220         assert( pgno==MASTER_ROOT+1 );
3221         rc = sqlite3BtreeCursor(pCx->pBt, pgno, 1,
3222                                 (KeyInfo*)pOp->p4.z, pCx->pCursor);
3223         pCx->pKeyInfo = pOp->p4.pKeyInfo;
3224         pCx->pKeyInfo->enc = ENC(p->db);
3225       }
3226       pCx->isTable = 0;
3227     }else{
3228       rc = sqlite3BtreeCursor(pCx->pBt, MASTER_ROOT, 1, 0, pCx->pCursor);
3229       pCx->isTable = 1;
3230     }
3231   }
3232   pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
3233   pCx->isIndex = !pCx->isTable;
3234   break;
3235 }
3236 
3237 /* Opcode: OpenSorter P1 P2 * P4 *
3238 **
3239 ** This opcode works like OP_OpenEphemeral except that it opens
3240 ** a transient index that is specifically designed to sort large
3241 ** tables using an external merge-sort algorithm.
3242 */
3243 case OP_SorterOpen: {
3244   VdbeCursor *pCx;
3245 #ifndef SQLITE_OMIT_MERGE_SORT
3246   pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
3247   if( pCx==0 ) goto no_mem;
3248   pCx->pKeyInfo = pOp->p4.pKeyInfo;
3249   pCx->pKeyInfo->enc = ENC(p->db);
3250   pCx->isSorter = 1;
3251   rc = sqlite3VdbeSorterInit(db, pCx);
3252 #else
3253   pOp->opcode = OP_OpenEphemeral;
3254   pc--;
3255 #endif
3256   break;
3257 }
3258 
3259 /* Opcode: OpenPseudo P1 P2 P3 * *
3260 **
3261 ** Open a new cursor that points to a fake table that contains a single
3262 ** row of data.  The content of that one row in the content of memory
3263 ** register P2.  In other words, cursor P1 becomes an alias for the
3264 ** MEM_Blob content contained in register P2.
3265 **
3266 ** A pseudo-table created by this opcode is used to hold a single
3267 ** row output from the sorter so that the row can be decomposed into
3268 ** individual columns using the OP_Column opcode.  The OP_Column opcode
3269 ** is the only cursor opcode that works with a pseudo-table.
3270 **
3271 ** P3 is the number of fields in the records that will be stored by
3272 ** the pseudo-table.
3273 */
3274 case OP_OpenPseudo: {
3275   VdbeCursor *pCx;
3276 
3277   assert( pOp->p1>=0 );
3278   pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0);
3279   if( pCx==0 ) goto no_mem;
3280   pCx->nullRow = 1;
3281   pCx->pseudoTableReg = pOp->p2;
3282   pCx->isTable = 1;
3283   pCx->isIndex = 0;
3284   break;
3285 }
3286 
3287 /* Opcode: Close P1 * * * *
3288 **
3289 ** Close a cursor previously opened as P1.  If P1 is not
3290 ** currently open, this instruction is a no-op.
3291 */
3292 case OP_Close: {
3293   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3294   sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
3295   p->apCsr[pOp->p1] = 0;
3296   break;
3297 }
3298 
3299 /* Opcode: SeekGe P1 P2 P3 P4 *
3300 **
3301 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
3302 ** use the value in register P3 as the key.  If cursor P1 refers
3303 ** to an SQL index, then P3 is the first in an array of P4 registers
3304 ** that are used as an unpacked index key.
3305 **
3306 ** Reposition cursor P1 so that  it points to the smallest entry that
3307 ** is greater than or equal to the key value. If there are no records
3308 ** greater than or equal to the key and P2 is not zero, then jump to P2.
3309 **
3310 ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe
3311 */
3312 /* Opcode: SeekGt P1 P2 P3 P4 *
3313 **
3314 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
3315 ** use the value in register P3 as a key. If cursor P1 refers
3316 ** to an SQL index, then P3 is the first in an array of P4 registers
3317 ** that are used as an unpacked index key.
3318 **
3319 ** Reposition cursor P1 so that  it points to the smallest entry that
3320 ** is greater than the key value. If there are no records greater than
3321 ** the key and P2 is not zero, then jump to P2.
3322 **
3323 ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe
3324 */
3325 /* Opcode: SeekLt P1 P2 P3 P4 *
3326 **
3327 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
3328 ** use the value in register P3 as a key. If cursor P1 refers
3329 ** to an SQL index, then P3 is the first in an array of P4 registers
3330 ** that are used as an unpacked index key.
3331 **
3332 ** Reposition cursor P1 so that  it points to the largest entry that
3333 ** is less than the key value. If there are no records less than
3334 ** the key and P2 is not zero, then jump to P2.
3335 **
3336 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe
3337 */
3338 /* Opcode: SeekLe P1 P2 P3 P4 *
3339 **
3340 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
3341 ** use the value in register P3 as a key. If cursor P1 refers
3342 ** to an SQL index, then P3 is the first in an array of P4 registers
3343 ** that are used as an unpacked index key.
3344 **
3345 ** Reposition cursor P1 so that it points to the largest entry that
3346 ** is less than or equal to the key value. If there are no records
3347 ** less than or equal to the key and P2 is not zero, then jump to P2.
3348 **
3349 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt
3350 */
3351 case OP_SeekLt:         /* jump, in3 */
3352 case OP_SeekLe:         /* jump, in3 */
3353 case OP_SeekGe:         /* jump, in3 */
3354 case OP_SeekGt: {       /* jump, in3 */
3355   int res;
3356   int oc;
3357   VdbeCursor *pC;
3358   UnpackedRecord r;
3359   int nField;
3360   i64 iKey;      /* The rowid we are to seek to */
3361 
3362   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3363   assert( pOp->p2!=0 );
3364   pC = p->apCsr[pOp->p1];
3365   assert( pC!=0 );
3366   assert( pC->pseudoTableReg==0 );
3367   assert( OP_SeekLe == OP_SeekLt+1 );
3368   assert( OP_SeekGe == OP_SeekLt+2 );
3369   assert( OP_SeekGt == OP_SeekLt+3 );
3370   assert( pC->isOrdered );
3371   if( ALWAYS(pC->pCursor!=0) ){
3372     oc = pOp->opcode;
3373     pC->nullRow = 0;
3374     if( pC->isTable ){
3375       /* The input value in P3 might be of any type: integer, real, string,
3376       ** blob, or NULL.  But it needs to be an integer before we can do
3377       ** the seek, so covert it. */
3378       pIn3 = &aMem[pOp->p3];
3379       applyNumericAffinity(pIn3);
3380       iKey = sqlite3VdbeIntValue(pIn3);
3381       pC->rowidIsValid = 0;
3382 
3383       /* If the P3 value could not be converted into an integer without
3384       ** loss of information, then special processing is required... */
3385       if( (pIn3->flags & MEM_Int)==0 ){
3386         if( (pIn3->flags & MEM_Real)==0 ){
3387           /* If the P3 value cannot be converted into any kind of a number,
3388           ** then the seek is not possible, so jump to P2 */
3389           pc = pOp->p2 - 1;
3390           break;
3391         }
3392         /* If we reach this point, then the P3 value must be a floating
3393         ** point number. */
3394         assert( (pIn3->flags & MEM_Real)!=0 );
3395 
3396         if( iKey==SMALLEST_INT64 && (pIn3->r<(double)iKey || pIn3->r>0) ){
3397           /* The P3 value is too large in magnitude to be expressed as an
3398           ** integer. */
3399           res = 1;
3400           if( pIn3->r<0 ){
3401             if( oc>=OP_SeekGe ){  assert( oc==OP_SeekGe || oc==OP_SeekGt );
3402               rc = sqlite3BtreeFirst(pC->pCursor, &res);
3403               if( rc!=SQLITE_OK ) goto abort_due_to_error;
3404             }
3405           }else{
3406             if( oc<=OP_SeekLe ){  assert( oc==OP_SeekLt || oc==OP_SeekLe );
3407               rc = sqlite3BtreeLast(pC->pCursor, &res);
3408               if( rc!=SQLITE_OK ) goto abort_due_to_error;
3409             }
3410           }
3411           if( res ){
3412             pc = pOp->p2 - 1;
3413           }
3414           break;
3415         }else if( oc==OP_SeekLt || oc==OP_SeekGe ){
3416           /* Use the ceiling() function to convert real->int */
3417           if( pIn3->r > (double)iKey ) iKey++;
3418         }else{
3419           /* Use the floor() function to convert real->int */
3420           assert( oc==OP_SeekLe || oc==OP_SeekGt );
3421           if( pIn3->r < (double)iKey ) iKey--;
3422         }
3423       }
3424       rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)iKey, 0, &res);
3425       if( rc!=SQLITE_OK ){
3426         goto abort_due_to_error;
3427       }
3428       if( res==0 ){
3429         pC->rowidIsValid = 1;
3430         pC->lastRowid = iKey;
3431       }
3432     }else{
3433       nField = pOp->p4.i;
3434       assert( pOp->p4type==P4_INT32 );
3435       assert( nField>0 );
3436       r.pKeyInfo = pC->pKeyInfo;
3437       r.nField = (u16)nField;
3438 
3439       /* The next line of code computes as follows, only faster:
3440       **   if( oc==OP_SeekGt || oc==OP_SeekLe ){
3441       **     r.flags = UNPACKED_INCRKEY;
3442       **   }else{
3443       **     r.flags = 0;
3444       **   }
3445       */
3446       r.flags = (u16)(UNPACKED_INCRKEY * (1 & (oc - OP_SeekLt)));
3447       assert( oc!=OP_SeekGt || r.flags==UNPACKED_INCRKEY );
3448       assert( oc!=OP_SeekLe || r.flags==UNPACKED_INCRKEY );
3449       assert( oc!=OP_SeekGe || r.flags==0 );
3450       assert( oc!=OP_SeekLt || r.flags==0 );
3451 
3452       r.aMem = &aMem[pOp->p3];
3453 #ifdef SQLITE_DEBUG
3454       { int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
3455 #endif
3456       ExpandBlob(r.aMem);
3457       rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, &r, 0, 0, &res);
3458       if( rc!=SQLITE_OK ){
3459         goto abort_due_to_error;
3460       }
3461       pC->rowidIsValid = 0;
3462     }
3463     pC->deferredMoveto = 0;
3464     pC->cacheStatus = CACHE_STALE;
3465 #ifdef SQLITE_TEST
3466     sqlite3_search_count++;
3467 #endif
3468     if( oc>=OP_SeekGe ){  assert( oc==OP_SeekGe || oc==OP_SeekGt );
3469       if( res<0 || (res==0 && oc==OP_SeekGt) ){
3470         rc = sqlite3BtreeNext(pC->pCursor, &res);
3471         if( rc!=SQLITE_OK ) goto abort_due_to_error;
3472         pC->rowidIsValid = 0;
3473       }else{
3474         res = 0;
3475       }
3476     }else{
3477       assert( oc==OP_SeekLt || oc==OP_SeekLe );
3478       if( res>0 || (res==0 && oc==OP_SeekLt) ){
3479         rc = sqlite3BtreePrevious(pC->pCursor, &res);
3480         if( rc!=SQLITE_OK ) goto abort_due_to_error;
3481         pC->rowidIsValid = 0;
3482       }else{
3483         /* res might be negative because the table is empty.  Check to
3484         ** see if this is the case.
3485         */
3486         res = sqlite3BtreeEof(pC->pCursor);
3487       }
3488     }
3489     assert( pOp->p2>0 );
3490     if( res ){
3491       pc = pOp->p2 - 1;
3492     }
3493   }else{
3494     /* This happens when attempting to open the sqlite3_master table
3495     ** for read access returns SQLITE_EMPTY. In this case always
3496     ** take the jump (since there are no records in the table).
3497     */
3498     pc = pOp->p2 - 1;
3499   }
3500   break;
3501 }
3502 
3503 /* Opcode: Seek P1 P2 * * *
3504 **
3505 ** P1 is an open table cursor and P2 is a rowid integer.  Arrange
3506 ** for P1 to move so that it points to the rowid given by P2.
3507 **
3508 ** This is actually a deferred seek.  Nothing actually happens until
3509 ** the cursor is used to read a record.  That way, if no reads
3510 ** occur, no unnecessary I/O happens.
3511 */
3512 case OP_Seek: {    /* in2 */
3513   VdbeCursor *pC;
3514 
3515   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3516   pC = p->apCsr[pOp->p1];
3517   assert( pC!=0 );
3518   if( ALWAYS(pC->pCursor!=0) ){
3519     assert( pC->isTable );
3520     pC->nullRow = 0;
3521     pIn2 = &aMem[pOp->p2];
3522     pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
3523     pC->rowidIsValid = 0;
3524     pC->deferredMoveto = 1;
3525   }
3526   break;
3527 }
3528 
3529 
3530 /* Opcode: Found P1 P2 P3 P4 *
3531 **
3532 ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
3533 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
3534 ** record.
3535 **
3536 ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
3537 ** is a prefix of any entry in P1 then a jump is made to P2 and
3538 ** P1 is left pointing at the matching entry.
3539 */
3540 /* Opcode: NotFound P1 P2 P3 P4 *
3541 **
3542 ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
3543 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
3544 ** record.
3545 **
3546 ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
3547 ** is not the prefix of any entry in P1 then a jump is made to P2.  If P1
3548 ** does contain an entry whose prefix matches the P3/P4 record then control
3549 ** falls through to the next instruction and P1 is left pointing at the
3550 ** matching entry.
3551 **
3552 ** See also: Found, NotExists, IsUnique
3553 */
3554 case OP_NotFound:       /* jump, in3 */
3555 case OP_Found: {        /* jump, in3 */
3556   int alreadyExists;
3557   VdbeCursor *pC;
3558   int res;
3559   char *pFree;
3560   UnpackedRecord *pIdxKey;
3561   UnpackedRecord r;
3562   char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
3563 
3564 #ifdef SQLITE_TEST
3565   sqlite3_found_count++;
3566 #endif
3567 
3568   alreadyExists = 0;
3569   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3570   assert( pOp->p4type==P4_INT32 );
3571   pC = p->apCsr[pOp->p1];
3572   assert( pC!=0 );
3573   pIn3 = &aMem[pOp->p3];
3574   if( ALWAYS(pC->pCursor!=0) ){
3575 
3576     assert( pC->isTable==0 );
3577     if( pOp->p4.i>0 ){
3578       r.pKeyInfo = pC->pKeyInfo;
3579       r.nField = (u16)pOp->p4.i;
3580       r.aMem = pIn3;
3581 #ifdef SQLITE_DEBUG
3582       { int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
3583 #endif
3584       r.flags = UNPACKED_PREFIX_MATCH;
3585       pIdxKey = &r;
3586     }else{
3587       pIdxKey = sqlite3VdbeAllocUnpackedRecord(
3588           pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree
3589       );
3590       if( pIdxKey==0 ) goto no_mem;
3591       assert( pIn3->flags & MEM_Blob );
3592       assert( (pIn3->flags & MEM_Zero)==0 );  /* zeroblobs already expanded */
3593       sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey);
3594       pIdxKey->flags |= UNPACKED_PREFIX_MATCH;
3595     }
3596     rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, pIdxKey, 0, 0, &res);
3597     if( pOp->p4.i==0 ){
3598       sqlite3DbFree(db, pFree);
3599     }
3600     if( rc!=SQLITE_OK ){
3601       break;
3602     }
3603     alreadyExists = (res==0);
3604     pC->deferredMoveto = 0;
3605     pC->cacheStatus = CACHE_STALE;
3606   }
3607   if( pOp->opcode==OP_Found ){
3608     if( alreadyExists ) pc = pOp->p2 - 1;
3609   }else{
3610     if( !alreadyExists ) pc = pOp->p2 - 1;
3611   }
3612   break;
3613 }
3614 
3615 /* Opcode: IsUnique P1 P2 P3 P4 *
3616 **
3617 ** Cursor P1 is open on an index b-tree - that is to say, a btree which
3618 ** no data and where the key are records generated by OP_MakeRecord with
3619 ** the list field being the integer ROWID of the entry that the index
3620 ** entry refers to.
3621 **
3622 ** The P3 register contains an integer record number. Call this record
3623 ** number R. Register P4 is the first in a set of N contiguous registers
3624 ** that make up an unpacked index key that can be used with cursor P1.
3625 ** The value of N can be inferred from the cursor. N includes the rowid
3626 ** value appended to the end of the index record. This rowid value may
3627 ** or may not be the same as R.
3628 **
3629 ** If any of the N registers beginning with register P4 contains a NULL
3630 ** value, jump immediately to P2.
3631 **
3632 ** Otherwise, this instruction checks if cursor P1 contains an entry
3633 ** where the first (N-1) fields match but the rowid value at the end
3634 ** of the index entry is not R. If there is no such entry, control jumps
3635 ** to instruction P2. Otherwise, the rowid of the conflicting index
3636 ** entry is copied to register P3 and control falls through to the next
3637 ** instruction.
3638 **
3639 ** See also: NotFound, NotExists, Found
3640 */
3641 case OP_IsUnique: {        /* jump, in3 */
3642   u16 ii;
3643   VdbeCursor *pCx;
3644   BtCursor *pCrsr;
3645   u16 nField;
3646   Mem *aMx;
3647   UnpackedRecord r;                  /* B-Tree index search key */
3648   i64 R;                             /* Rowid stored in register P3 */
3649 
3650   pIn3 = &aMem[pOp->p3];
3651   aMx = &aMem[pOp->p4.i];
3652   /* Assert that the values of parameters P1 and P4 are in range. */
3653   assert( pOp->p4type==P4_INT32 );
3654   assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem );
3655   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3656 
3657   /* Find the index cursor. */
3658   pCx = p->apCsr[pOp->p1];
3659   assert( pCx->deferredMoveto==0 );
3660   pCx->seekResult = 0;
3661   pCx->cacheStatus = CACHE_STALE;
3662   pCrsr = pCx->pCursor;
3663 
3664   /* If any of the values are NULL, take the jump. */
3665   nField = pCx->pKeyInfo->nField;
3666   for(ii=0; ii<nField; ii++){
3667     if( aMx[ii].flags & MEM_Null ){
3668       pc = pOp->p2 - 1;
3669       pCrsr = 0;
3670       break;
3671     }
3672   }
3673   assert( (aMx[nField].flags & MEM_Null)==0 );
3674 
3675   if( pCrsr!=0 ){
3676     /* Populate the index search key. */
3677     r.pKeyInfo = pCx->pKeyInfo;
3678     r.nField = nField + 1;
3679     r.flags = UNPACKED_PREFIX_SEARCH;
3680     r.aMem = aMx;
3681 #ifdef SQLITE_DEBUG
3682     { int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
3683 #endif
3684 
3685     /* Extract the value of R from register P3. */
3686     sqlite3VdbeMemIntegerify(pIn3);
3687     R = pIn3->u.i;
3688 
3689     /* Search the B-Tree index. If no conflicting record is found, jump
3690     ** to P2. Otherwise, copy the rowid of the conflicting record to
3691     ** register P3 and fall through to the next instruction.  */
3692     rc = sqlite3BtreeMovetoUnpacked(pCrsr, &r, 0, 0, &pCx->seekResult);
3693     if( (r.flags & UNPACKED_PREFIX_SEARCH) || r.rowid==R ){
3694       pc = pOp->p2 - 1;
3695     }else{
3696       pIn3->u.i = r.rowid;
3697     }
3698   }
3699   break;
3700 }
3701 
3702 /* Opcode: NotExists P1 P2 P3 * *
3703 **
3704 ** Use the content of register P3 as an integer key.  If a record
3705 ** with that key does not exist in table of P1, then jump to P2.
3706 ** If the record does exist, then fall through.  The cursor is left
3707 ** pointing to the record if it exists.
3708 **
3709 ** The difference between this operation and NotFound is that this
3710 ** operation assumes the key is an integer and that P1 is a table whereas
3711 ** NotFound assumes key is a blob constructed from MakeRecord and
3712 ** P1 is an index.
3713 **
3714 ** See also: Found, NotFound, IsUnique
3715 */
3716 case OP_NotExists: {        /* jump, in3 */
3717   VdbeCursor *pC;
3718   BtCursor *pCrsr;
3719   int res;
3720   u64 iKey;
3721 
3722   pIn3 = &aMem[pOp->p3];
3723   assert( pIn3->flags & MEM_Int );
3724   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3725   pC = p->apCsr[pOp->p1];
3726   assert( pC!=0 );
3727   assert( pC->isTable );
3728   assert( pC->pseudoTableReg==0 );
3729   pCrsr = pC->pCursor;
3730   if( ALWAYS(pCrsr!=0) ){
3731     res = 0;
3732     iKey = pIn3->u.i;
3733     rc = sqlite3BtreeMovetoUnpacked(pCrsr, 0, iKey, 0, &res);
3734     pC->lastRowid = pIn3->u.i;
3735     pC->rowidIsValid = res==0 ?1:0;
3736     pC->nullRow = 0;
3737     pC->cacheStatus = CACHE_STALE;
3738     pC->deferredMoveto = 0;
3739     if( res!=0 ){
3740       pc = pOp->p2 - 1;
3741       assert( pC->rowidIsValid==0 );
3742     }
3743     pC->seekResult = res;
3744   }else{
3745     /* This happens when an attempt to open a read cursor on the
3746     ** sqlite_master table returns SQLITE_EMPTY.
3747     */
3748     pc = pOp->p2 - 1;
3749     assert( pC->rowidIsValid==0 );
3750     pC->seekResult = 0;
3751   }
3752   break;
3753 }
3754 
3755 /* Opcode: Sequence P1 P2 * * *
3756 **
3757 ** Find the next available sequence number for cursor P1.
3758 ** Write the sequence number into register P2.
3759 ** The sequence number on the cursor is incremented after this
3760 ** instruction.
3761 */
3762 case OP_Sequence: {           /* out2-prerelease */
3763   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3764   assert( p->apCsr[pOp->p1]!=0 );
3765   pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
3766   break;
3767 }
3768 
3769 
3770 /* Opcode: NewRowid P1 P2 P3 * *
3771 **
3772 ** Get a new integer record number (a.k.a "rowid") used as the key to a table.
3773 ** The record number is not previously used as a key in the database
3774 ** table that cursor P1 points to.  The new record number is written
3775 ** written to register P2.
3776 **
3777 ** If P3>0 then P3 is a register in the root frame of this VDBE that holds
3778 ** the largest previously generated record number. No new record numbers are
3779 ** allowed to be less than this value. When this value reaches its maximum,
3780 ** an SQLITE_FULL error is generated. The P3 register is updated with the '
3781 ** generated record number. This P3 mechanism is used to help implement the
3782 ** AUTOINCREMENT feature.
3783 */
3784 case OP_NewRowid: {           /* out2-prerelease */
3785   i64 v;                 /* The new rowid */
3786   VdbeCursor *pC;        /* Cursor of table to get the new rowid */
3787   int res;               /* Result of an sqlite3BtreeLast() */
3788   int cnt;               /* Counter to limit the number of searches */
3789   Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
3790   VdbeFrame *pFrame;     /* Root frame of VDBE */
3791 
3792   v = 0;
3793   res = 0;
3794   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3795   pC = p->apCsr[pOp->p1];
3796   assert( pC!=0 );
3797   if( NEVER(pC->pCursor==0) ){
3798     /* The zero initialization above is all that is needed */
3799   }else{
3800     /* The next rowid or record number (different terms for the same
3801     ** thing) is obtained in a two-step algorithm.
3802     **
3803     ** First we attempt to find the largest existing rowid and add one
3804     ** to that.  But if the largest existing rowid is already the maximum
3805     ** positive integer, we have to fall through to the second
3806     ** probabilistic algorithm
3807     **
3808     ** The second algorithm is to select a rowid at random and see if
3809     ** it already exists in the table.  If it does not exist, we have
3810     ** succeeded.  If the random rowid does exist, we select a new one
3811     ** and try again, up to 100 times.
3812     */
3813     assert( pC->isTable );
3814 
3815 #ifdef SQLITE_32BIT_ROWID
3816 #   define MAX_ROWID 0x7fffffff
3817 #else
3818     /* Some compilers complain about constants of the form 0x7fffffffffffffff.
3819     ** Others complain about 0x7ffffffffffffffffLL.  The following macro seems
3820     ** to provide the constant while making all compilers happy.
3821     */
3822 #   define MAX_ROWID  (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff )
3823 #endif
3824 
3825     if( !pC->useRandomRowid ){
3826       v = sqlite3BtreeGetCachedRowid(pC->pCursor);
3827       if( v==0 ){
3828         rc = sqlite3BtreeLast(pC->pCursor, &res);
3829         if( rc!=SQLITE_OK ){
3830           goto abort_due_to_error;
3831         }
3832         if( res ){
3833           v = 1;   /* IMP: R-61914-48074 */
3834         }else{
3835           assert( sqlite3BtreeCursorIsValid(pC->pCursor) );
3836           rc = sqlite3BtreeKeySize(pC->pCursor, &v);
3837           assert( rc==SQLITE_OK );   /* Cannot fail following BtreeLast() */
3838           if( v==MAX_ROWID ){
3839             pC->useRandomRowid = 1;
3840           }else{
3841             v++;   /* IMP: R-29538-34987 */
3842           }
3843         }
3844       }
3845 
3846 #ifndef SQLITE_OMIT_AUTOINCREMENT
3847       if( pOp->p3 ){
3848         /* Assert that P3 is a valid memory cell. */
3849         assert( pOp->p3>0 );
3850         if( p->pFrame ){
3851           for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
3852           /* Assert that P3 is a valid memory cell. */
3853           assert( pOp->p3<=pFrame->nMem );
3854           pMem = &pFrame->aMem[pOp->p3];
3855         }else{
3856           /* Assert that P3 is a valid memory cell. */
3857           assert( pOp->p3<=p->nMem );
3858           pMem = &aMem[pOp->p3];
3859           memAboutToChange(p, pMem);
3860         }
3861         assert( memIsValid(pMem) );
3862 
3863         REGISTER_TRACE(pOp->p3, pMem);
3864         sqlite3VdbeMemIntegerify(pMem);
3865         assert( (pMem->flags & MEM_Int)!=0 );  /* mem(P3) holds an integer */
3866         if( pMem->u.i==MAX_ROWID || pC->useRandomRowid ){
3867           rc = SQLITE_FULL;   /* IMP: R-12275-61338 */
3868           goto abort_due_to_error;
3869         }
3870         if( v<pMem->u.i+1 ){
3871           v = pMem->u.i + 1;
3872         }
3873         pMem->u.i = v;
3874       }
3875 #endif
3876 
3877       sqlite3BtreeSetCachedRowid(pC->pCursor, v<MAX_ROWID ? v+1 : 0);
3878     }
3879     if( pC->useRandomRowid ){
3880       /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
3881       ** largest possible integer (9223372036854775807) then the database
3882       ** engine starts picking positive candidate ROWIDs at random until
3883       ** it finds one that is not previously used. */
3884       assert( pOp->p3==0 );  /* We cannot be in random rowid mode if this is
3885                              ** an AUTOINCREMENT table. */
3886       /* on the first attempt, simply do one more than previous */
3887       v = lastRowid;
3888       v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
3889       v++; /* ensure non-zero */
3890       cnt = 0;
3891       while(   ((rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)v,
3892                                                  0, &res))==SQLITE_OK)
3893             && (res==0)
3894             && (++cnt<100)){
3895         /* collision - try another random rowid */
3896         sqlite3_randomness(sizeof(v), &v);
3897         if( cnt<5 ){
3898           /* try "small" random rowids for the initial attempts */
3899           v &= 0xffffff;
3900         }else{
3901           v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
3902         }
3903         v++; /* ensure non-zero */
3904       }
3905       if( rc==SQLITE_OK && res==0 ){
3906         rc = SQLITE_FULL;   /* IMP: R-38219-53002 */
3907         goto abort_due_to_error;
3908       }
3909       assert( v>0 );  /* EV: R-40812-03570 */
3910     }
3911     pC->rowidIsValid = 0;
3912     pC->deferredMoveto = 0;
3913     pC->cacheStatus = CACHE_STALE;
3914   }
3915   pOut->u.i = v;
3916   break;
3917 }
3918 
3919 /* Opcode: Insert P1 P2 P3 P4 P5
3920 **
3921 ** Write an entry into the table of cursor P1.  A new entry is
3922 ** created if it doesn't already exist or the data for an existing
3923 ** entry is overwritten.  The data is the value MEM_Blob stored in register
3924 ** number P2. The key is stored in register P3. The key must
3925 ** be a MEM_Int.
3926 **
3927 ** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
3928 ** incremented (otherwise not).  If the OPFLAG_LASTROWID flag of P5 is set,
3929 ** then rowid is stored for subsequent return by the
3930 ** sqlite3_last_insert_rowid() function (otherwise it is unmodified).
3931 **
3932 ** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of
3933 ** the last seek operation (OP_NotExists) was a success, then this
3934 ** operation will not attempt to find the appropriate row before doing
3935 ** the insert but will instead overwrite the row that the cursor is
3936 ** currently pointing to.  Presumably, the prior OP_NotExists opcode
3937 ** has already positioned the cursor correctly.  This is an optimization
3938 ** that boosts performance by avoiding redundant seeks.
3939 **
3940 ** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
3941 ** UPDATE operation.  Otherwise (if the flag is clear) then this opcode
3942 ** is part of an INSERT operation.  The difference is only important to
3943 ** the update hook.
3944 **
3945 ** Parameter P4 may point to a string containing the table-name, or
3946 ** may be NULL. If it is not NULL, then the update-hook
3947 ** (sqlite3.xUpdateCallback) is invoked following a successful insert.
3948 **
3949 ** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
3950 ** allocated, then ownership of P2 is transferred to the pseudo-cursor
3951 ** and register P2 becomes ephemeral.  If the cursor is changed, the
3952 ** value of register P2 will then change.  Make sure this does not
3953 ** cause any problems.)
3954 **
3955 ** This instruction only works on tables.  The equivalent instruction
3956 ** for indices is OP_IdxInsert.
3957 */
3958 /* Opcode: InsertInt P1 P2 P3 P4 P5
3959 **
3960 ** This works exactly like OP_Insert except that the key is the
3961 ** integer value P3, not the value of the integer stored in register P3.
3962 */
3963 case OP_Insert:
3964 case OP_InsertInt: {
3965   Mem *pData;       /* MEM cell holding data for the record to be inserted */
3966   Mem *pKey;        /* MEM cell holding key  for the record */
3967   i64 iKey;         /* The integer ROWID or key for the record to be inserted */
3968   VdbeCursor *pC;   /* Cursor to table into which insert is written */
3969   int nZero;        /* Number of zero-bytes to append */
3970   int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
3971   const char *zDb;  /* database name - used by the update hook */
3972   const char *zTbl; /* Table name - used by the opdate hook */
3973   int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
3974 
3975   pData = &aMem[pOp->p2];
3976   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3977   assert( memIsValid(pData) );
3978   pC = p->apCsr[pOp->p1];
3979   assert( pC!=0 );
3980   assert( pC->pCursor!=0 );
3981   assert( pC->pseudoTableReg==0 );
3982   assert( pC->isTable );
3983   REGISTER_TRACE(pOp->p2, pData);
3984 
3985   if( pOp->opcode==OP_Insert ){
3986     pKey = &aMem[pOp->p3];
3987     assert( pKey->flags & MEM_Int );
3988     assert( memIsValid(pKey) );
3989     REGISTER_TRACE(pOp->p3, pKey);
3990     iKey = pKey->u.i;
3991   }else{
3992     assert( pOp->opcode==OP_InsertInt );
3993     iKey = pOp->p3;
3994   }
3995 
3996   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
3997   if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = iKey;
3998   if( pData->flags & MEM_Null ){
3999     pData->z = 0;
4000     pData->n = 0;
4001   }else{
4002     assert( pData->flags & (MEM_Blob|MEM_Str) );
4003   }
4004   seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0);
4005   if( pData->flags & MEM_Zero ){
4006     nZero = pData->u.nZero;
4007   }else{
4008     nZero = 0;
4009   }
4010   sqlite3BtreeSetCachedRowid(pC->pCursor, 0);
4011   rc = sqlite3BtreeInsert(pC->pCursor, 0, iKey,
4012                           pData->z, pData->n, nZero,
4013                           pOp->p5 & OPFLAG_APPEND, seekResult
4014   );
4015   pC->rowidIsValid = 0;
4016   pC->deferredMoveto = 0;
4017   pC->cacheStatus = CACHE_STALE;
4018 
4019   /* Invoke the update-hook if required. */
4020   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
4021     zDb = db->aDb[pC->iDb].zName;
4022     zTbl = pOp->p4.z;
4023     op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
4024     assert( pC->isTable );
4025     db->xUpdateCallback(db->pUpdateArg, op, zDb, zTbl, iKey);
4026     assert( pC->iDb>=0 );
4027   }
4028   break;
4029 }
4030 
4031 /* Opcode: Delete P1 P2 * P4 *
4032 **
4033 ** Delete the record at which the P1 cursor is currently pointing.
4034 **
4035 ** The cursor will be left pointing at either the next or the previous
4036 ** record in the table. If it is left pointing at the next record, then
4037 ** the next Next instruction will be a no-op.  Hence it is OK to delete
4038 ** a record from within an Next loop.
4039 **
4040 ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
4041 ** incremented (otherwise not).
4042 **
4043 ** P1 must not be pseudo-table.  It has to be a real table with
4044 ** multiple rows.
4045 **
4046 ** If P4 is not NULL, then it is the name of the table that P1 is
4047 ** pointing to.  The update hook will be invoked, if it exists.
4048 ** If P4 is not NULL then the P1 cursor must have been positioned
4049 ** using OP_NotFound prior to invoking this opcode.
4050 */
4051 case OP_Delete: {
4052   i64 iKey;
4053   VdbeCursor *pC;
4054 
4055   iKey = 0;
4056   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4057   pC = p->apCsr[pOp->p1];
4058   assert( pC!=0 );
4059   assert( pC->pCursor!=0 );  /* Only valid for real tables, no pseudotables */
4060 
4061   /* If the update-hook will be invoked, set iKey to the rowid of the
4062   ** row being deleted.
4063   */
4064   if( db->xUpdateCallback && pOp->p4.z ){
4065     assert( pC->isTable );
4066     assert( pC->rowidIsValid );  /* lastRowid set by previous OP_NotFound */
4067     iKey = pC->lastRowid;
4068   }
4069 
4070   /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
4071   ** OP_Column on the same table without any intervening operations that
4072   ** might move or invalidate the cursor.  Hence cursor pC is always pointing
4073   ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
4074   ** below is always a no-op and cannot fail.  We will run it anyhow, though,
4075   ** to guard against future changes to the code generator.
4076   **/
4077   assert( pC->deferredMoveto==0 );
4078   rc = sqlite3VdbeCursorMoveto(pC);
4079   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
4080 
4081   sqlite3BtreeSetCachedRowid(pC->pCursor, 0);
4082   rc = sqlite3BtreeDelete(pC->pCursor);
4083   pC->cacheStatus = CACHE_STALE;
4084 
4085   /* Invoke the update-hook if required. */
4086   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
4087     const char *zDb = db->aDb[pC->iDb].zName;
4088     const char *zTbl = pOp->p4.z;
4089     db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, iKey);
4090     assert( pC->iDb>=0 );
4091   }
4092   if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
4093   break;
4094 }
4095 /* Opcode: ResetCount * * * * *
4096 **
4097 ** The value of the change counter is copied to the database handle
4098 ** change counter (returned by subsequent calls to sqlite3_changes()).
4099 ** Then the VMs internal change counter resets to 0.
4100 ** This is used by trigger programs.
4101 */
4102 case OP_ResetCount: {
4103   sqlite3VdbeSetChanges(db, p->nChange);
4104   p->nChange = 0;
4105   break;
4106 }
4107 
4108 /* Opcode: SorterCompare P1 P2 P3
4109 **
4110 ** P1 is a sorter cursor. This instruction compares the record blob in
4111 ** register P3 with the entry that the sorter cursor currently points to.
4112 ** If, excluding the rowid fields at the end, the two records are a match,
4113 ** fall through to the next instruction. Otherwise, jump to instruction P2.
4114 */
4115 case OP_SorterCompare: {
4116   VdbeCursor *pC;
4117   int res;
4118 
4119   pC = p->apCsr[pOp->p1];
4120   assert( isSorter(pC) );
4121   pIn3 = &aMem[pOp->p3];
4122   rc = sqlite3VdbeSorterCompare(pC, pIn3, &res);
4123   if( res ){
4124     pc = pOp->p2-1;
4125   }
4126   break;
4127 };
4128 
4129 /* Opcode: SorterData P1 P2 * * *
4130 **
4131 ** Write into register P2 the current sorter data for sorter cursor P1.
4132 */
4133 case OP_SorterData: {
4134   VdbeCursor *pC;
4135 #ifndef SQLITE_OMIT_MERGE_SORT
4136   pOut = &aMem[pOp->p2];
4137   pC = p->apCsr[pOp->p1];
4138   assert( pC->isSorter );
4139   rc = sqlite3VdbeSorterRowkey(pC, pOut);
4140 #else
4141   pOp->opcode = OP_RowKey;
4142   pc--;
4143 #endif
4144   break;
4145 }
4146 
4147 /* Opcode: RowData P1 P2 * * *
4148 **
4149 ** Write into register P2 the complete row data for cursor P1.
4150 ** There is no interpretation of the data.
4151 ** It is just copied onto the P2 register exactly as
4152 ** it is found in the database file.
4153 **
4154 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
4155 ** of a real table, not a pseudo-table.
4156 */
4157 /* Opcode: RowKey P1 P2 * * *
4158 **
4159 ** Write into register P2 the complete row key for cursor P1.
4160 ** There is no interpretation of the data.
4161 ** The key is copied onto the P3 register exactly as
4162 ** it is found in the database file.
4163 **
4164 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
4165 ** of a real table, not a pseudo-table.
4166 */
4167 case OP_RowKey:
4168 case OP_RowData: {
4169   VdbeCursor *pC;
4170   BtCursor *pCrsr;
4171   u32 n;
4172   i64 n64;
4173 
4174   pOut = &aMem[pOp->p2];
4175   memAboutToChange(p, pOut);
4176 
4177   /* Note that RowKey and RowData are really exactly the same instruction */
4178   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4179   pC = p->apCsr[pOp->p1];
4180   assert( pC->isSorter==0 );
4181   assert( pC->isTable || pOp->opcode!=OP_RowData );
4182   assert( pC->isIndex || pOp->opcode==OP_RowData );
4183   assert( pC!=0 );
4184   assert( pC->nullRow==0 );
4185   assert( pC->pseudoTableReg==0 );
4186   assert( !pC->isSorter );
4187   assert( pC->pCursor!=0 );
4188   pCrsr = pC->pCursor;
4189   assert( sqlite3BtreeCursorIsValid(pCrsr) );
4190 
4191   /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
4192   ** OP_Rewind/Op_Next with no intervening instructions that might invalidate
4193   ** the cursor.  Hence the following sqlite3VdbeCursorMoveto() call is always
4194   ** a no-op and can never fail.  But we leave it in place as a safety.
4195   */
4196   assert( pC->deferredMoveto==0 );
4197   rc = sqlite3VdbeCursorMoveto(pC);
4198   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
4199 
4200   if( pC->isIndex ){
4201     assert( !pC->isTable );
4202     VVA_ONLY(rc =) sqlite3BtreeKeySize(pCrsr, &n64);
4203     assert( rc==SQLITE_OK );    /* True because of CursorMoveto() call above */
4204     if( n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){
4205       goto too_big;
4206     }
4207     n = (u32)n64;
4208   }else{
4209     VVA_ONLY(rc =) sqlite3BtreeDataSize(pCrsr, &n);
4210     assert( rc==SQLITE_OK );    /* DataSize() cannot fail */
4211     if( n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
4212       goto too_big;
4213     }
4214   }
4215   if( sqlite3VdbeMemGrow(pOut, n, 0) ){
4216     goto no_mem;
4217   }
4218   pOut->n = n;
4219   MemSetTypeFlag(pOut, MEM_Blob);
4220   if( pC->isIndex ){
4221     rc = sqlite3BtreeKey(pCrsr, 0, n, pOut->z);
4222   }else{
4223     rc = sqlite3BtreeData(pCrsr, 0, n, pOut->z);
4224   }
4225   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever cast to text */
4226   UPDATE_MAX_BLOBSIZE(pOut);
4227   break;
4228 }
4229 
4230 /* Opcode: Rowid P1 P2 * * *
4231 **
4232 ** Store in register P2 an integer which is the key of the table entry that
4233 ** P1 is currently point to.
4234 **
4235 ** P1 can be either an ordinary table or a virtual table.  There used to
4236 ** be a separate OP_VRowid opcode for use with virtual tables, but this
4237 ** one opcode now works for both table types.
4238 */
4239 case OP_Rowid: {                 /* out2-prerelease */
4240   VdbeCursor *pC;
4241   i64 v;
4242   sqlite3_vtab *pVtab;
4243   const sqlite3_module *pModule;
4244 
4245   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4246   pC = p->apCsr[pOp->p1];
4247   assert( pC!=0 );
4248   assert( pC->pseudoTableReg==0 );
4249   if( pC->nullRow ){
4250     pOut->flags = MEM_Null;
4251     break;
4252   }else if( pC->deferredMoveto ){
4253     v = pC->movetoTarget;
4254 #ifndef SQLITE_OMIT_VIRTUALTABLE
4255   }else if( pC->pVtabCursor ){
4256     pVtab = pC->pVtabCursor->pVtab;
4257     pModule = pVtab->pModule;
4258     assert( pModule->xRowid );
4259     rc = pModule->xRowid(pC->pVtabCursor, &v);
4260     importVtabErrMsg(p, pVtab);
4261 #endif /* SQLITE_OMIT_VIRTUALTABLE */
4262   }else{
4263     assert( pC->pCursor!=0 );
4264     rc = sqlite3VdbeCursorMoveto(pC);
4265     if( rc ) goto abort_due_to_error;
4266     if( pC->rowidIsValid ){
4267       v = pC->lastRowid;
4268     }else{
4269       rc = sqlite3BtreeKeySize(pC->pCursor, &v);
4270       assert( rc==SQLITE_OK );  /* Always so because of CursorMoveto() above */
4271     }
4272   }
4273   pOut->u.i = v;
4274   break;
4275 }
4276 
4277 /* Opcode: NullRow P1 * * * *
4278 **
4279 ** Move the cursor P1 to a null row.  Any OP_Column operations
4280 ** that occur while the cursor is on the null row will always
4281 ** write a NULL.
4282 */
4283 case OP_NullRow: {
4284   VdbeCursor *pC;
4285 
4286   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4287   pC = p->apCsr[pOp->p1];
4288   assert( pC!=0 );
4289   pC->nullRow = 1;
4290   pC->rowidIsValid = 0;
4291   assert( pC->pCursor || pC->pVtabCursor );
4292   if( pC->pCursor ){
4293     sqlite3BtreeClearCursor(pC->pCursor);
4294   }
4295   break;
4296 }
4297 
4298 /* Opcode: Last P1 P2 * * *
4299 **
4300 ** The next use of the Rowid or Column or Next instruction for P1
4301 ** will refer to the last entry in the database table or index.
4302 ** If the table or index is empty and P2>0, then jump immediately to P2.
4303 ** If P2 is 0 or if the table or index is not empty, fall through
4304 ** to the following instruction.
4305 */
4306 case OP_Last: {        /* jump */
4307   VdbeCursor *pC;
4308   BtCursor *pCrsr;
4309   int res;
4310 
4311   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4312   pC = p->apCsr[pOp->p1];
4313   assert( pC!=0 );
4314   pCrsr = pC->pCursor;
4315   res = 0;
4316   if( ALWAYS(pCrsr!=0) ){
4317     rc = sqlite3BtreeLast(pCrsr, &res);
4318   }
4319   pC->nullRow = (u8)res;
4320   pC->deferredMoveto = 0;
4321   pC->rowidIsValid = 0;
4322   pC->cacheStatus = CACHE_STALE;
4323   if( pOp->p2>0 && res ){
4324     pc = pOp->p2 - 1;
4325   }
4326   break;
4327 }
4328 
4329 
4330 /* Opcode: Sort P1 P2 * * *
4331 **
4332 ** This opcode does exactly the same thing as OP_Rewind except that
4333 ** it increments an undocumented global variable used for testing.
4334 **
4335 ** Sorting is accomplished by writing records into a sorting index,
4336 ** then rewinding that index and playing it back from beginning to
4337 ** end.  We use the OP_Sort opcode instead of OP_Rewind to do the
4338 ** rewinding so that the global variable will be incremented and
4339 ** regression tests can determine whether or not the optimizer is
4340 ** correctly optimizing out sorts.
4341 */
4342 case OP_SorterSort:    /* jump */
4343 #ifdef SQLITE_OMIT_MERGE_SORT
4344   pOp->opcode = OP_Sort;
4345 #endif
4346 case OP_Sort: {        /* jump */
4347 #ifdef SQLITE_TEST
4348   sqlite3_sort_count++;
4349   sqlite3_search_count--;
4350 #endif
4351   p->aCounter[SQLITE_STMTSTATUS_SORT-1]++;
4352   /* Fall through into OP_Rewind */
4353 }
4354 /* Opcode: Rewind P1 P2 * * *
4355 **
4356 ** The next use of the Rowid or Column or Next instruction for P1
4357 ** will refer to the first entry in the database table or index.
4358 ** If the table or index is empty and P2>0, then jump immediately to P2.
4359 ** If P2 is 0 or if the table or index is not empty, fall through
4360 ** to the following instruction.
4361 */
4362 case OP_Rewind: {        /* jump */
4363   VdbeCursor *pC;
4364   BtCursor *pCrsr;
4365   int res;
4366 
4367   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4368   pC = p->apCsr[pOp->p1];
4369   assert( pC!=0 );
4370   assert( pC->isSorter==(pOp->opcode==OP_SorterSort) );
4371   res = 1;
4372   if( isSorter(pC) ){
4373     rc = sqlite3VdbeSorterRewind(db, pC, &res);
4374   }else{
4375     pCrsr = pC->pCursor;
4376     assert( pCrsr );
4377     rc = sqlite3BtreeFirst(pCrsr, &res);
4378     pC->atFirst = res==0 ?1:0;
4379     pC->deferredMoveto = 0;
4380     pC->cacheStatus = CACHE_STALE;
4381     pC->rowidIsValid = 0;
4382   }
4383   pC->nullRow = (u8)res;
4384   assert( pOp->p2>0 && pOp->p2<p->nOp );
4385   if( res ){
4386     pc = pOp->p2 - 1;
4387   }
4388   break;
4389 }
4390 
4391 /* Opcode: Next P1 P2 * P4 P5
4392 **
4393 ** Advance cursor P1 so that it points to the next key/data pair in its
4394 ** table or index.  If there are no more key/value pairs then fall through
4395 ** to the following instruction.  But if the cursor advance was successful,
4396 ** jump immediately to P2.
4397 **
4398 ** The P1 cursor must be for a real table, not a pseudo-table.
4399 **
4400 ** P4 is always of type P4_ADVANCE. The function pointer points to
4401 ** sqlite3BtreeNext().
4402 **
4403 ** If P5 is positive and the jump is taken, then event counter
4404 ** number P5-1 in the prepared statement is incremented.
4405 **
4406 ** See also: Prev
4407 */
4408 /* Opcode: Prev P1 P2 * * P5
4409 **
4410 ** Back up cursor P1 so that it points to the previous key/data pair in its
4411 ** table or index.  If there is no previous key/value pairs then fall through
4412 ** to the following instruction.  But if the cursor backup was successful,
4413 ** jump immediately to P2.
4414 **
4415 ** The P1 cursor must be for a real table, not a pseudo-table.
4416 **
4417 ** P4 is always of type P4_ADVANCE. The function pointer points to
4418 ** sqlite3BtreePrevious().
4419 **
4420 ** If P5 is positive and the jump is taken, then event counter
4421 ** number P5-1 in the prepared statement is incremented.
4422 */
4423 case OP_SorterNext:    /* jump */
4424 #ifdef SQLITE_OMIT_MERGE_SORT
4425   pOp->opcode = OP_Next;
4426 #endif
4427 case OP_Prev:          /* jump */
4428 case OP_Next: {        /* jump */
4429   VdbeCursor *pC;
4430   int res;
4431 
4432   CHECK_FOR_INTERRUPT;
4433   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4434   assert( pOp->p5<=ArraySize(p->aCounter) );
4435   pC = p->apCsr[pOp->p1];
4436   if( pC==0 ){
4437     break;  /* See ticket #2273 */
4438   }
4439   assert( pC->isSorter==(pOp->opcode==OP_SorterNext) );
4440   if( isSorter(pC) ){
4441     assert( pOp->opcode==OP_SorterNext );
4442     rc = sqlite3VdbeSorterNext(db, pC, &res);
4443   }else{
4444     res = 1;
4445     assert( pC->deferredMoveto==0 );
4446     assert( pC->pCursor );
4447     assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
4448     assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
4449     rc = pOp->p4.xAdvance(pC->pCursor, &res);
4450   }
4451   pC->nullRow = (u8)res;
4452   pC->cacheStatus = CACHE_STALE;
4453   if( res==0 ){
4454     pc = pOp->p2 - 1;
4455     if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
4456 #ifdef SQLITE_TEST
4457     sqlite3_search_count++;
4458 #endif
4459   }
4460   pC->rowidIsValid = 0;
4461   break;
4462 }
4463 
4464 /* Opcode: IdxInsert P1 P2 P3 * P5
4465 **
4466 ** Register P2 holds an SQL index key made using the
4467 ** MakeRecord instructions.  This opcode writes that key
4468 ** into the index P1.  Data for the entry is nil.
4469 **
4470 ** P3 is a flag that provides a hint to the b-tree layer that this
4471 ** insert is likely to be an append.
4472 **
4473 ** This instruction only works for indices.  The equivalent instruction
4474 ** for tables is OP_Insert.
4475 */
4476 case OP_SorterInsert:       /* in2 */
4477 #ifdef SQLITE_OMIT_MERGE_SORT
4478   pOp->opcode = OP_IdxInsert;
4479 #endif
4480 case OP_IdxInsert: {        /* in2 */
4481   VdbeCursor *pC;
4482   BtCursor *pCrsr;
4483   int nKey;
4484   const char *zKey;
4485 
4486   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4487   pC = p->apCsr[pOp->p1];
4488   assert( pC!=0 );
4489   assert( pC->isSorter==(pOp->opcode==OP_SorterInsert) );
4490   pIn2 = &aMem[pOp->p2];
4491   assert( pIn2->flags & MEM_Blob );
4492   pCrsr = pC->pCursor;
4493   if( ALWAYS(pCrsr!=0) ){
4494     assert( pC->isTable==0 );
4495     rc = ExpandBlob(pIn2);
4496     if( rc==SQLITE_OK ){
4497       if( isSorter(pC) ){
4498         rc = sqlite3VdbeSorterWrite(db, pC, pIn2);
4499       }else{
4500         nKey = pIn2->n;
4501         zKey = pIn2->z;
4502         rc = sqlite3BtreeInsert(pCrsr, zKey, nKey, "", 0, 0, pOp->p3,
4503             ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0)
4504             );
4505         assert( pC->deferredMoveto==0 );
4506         pC->cacheStatus = CACHE_STALE;
4507       }
4508     }
4509   }
4510   break;
4511 }
4512 
4513 /* Opcode: IdxDelete P1 P2 P3 * *
4514 **
4515 ** The content of P3 registers starting at register P2 form
4516 ** an unpacked index key. This opcode removes that entry from the
4517 ** index opened by cursor P1.
4518 */
4519 case OP_IdxDelete: {
4520   VdbeCursor *pC;
4521   BtCursor *pCrsr;
4522   int res;
4523   UnpackedRecord r;
4524 
4525   assert( pOp->p3>0 );
4526   assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 );
4527   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4528   pC = p->apCsr[pOp->p1];
4529   assert( pC!=0 );
4530   pCrsr = pC->pCursor;
4531   if( ALWAYS(pCrsr!=0) ){
4532     r.pKeyInfo = pC->pKeyInfo;
4533     r.nField = (u16)pOp->p3;
4534     r.flags = 0;
4535     r.aMem = &aMem[pOp->p2];
4536 #ifdef SQLITE_DEBUG
4537     { int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
4538 #endif
4539     rc = sqlite3BtreeMovetoUnpacked(pCrsr, &r, 0, 0, &res);
4540     if( rc==SQLITE_OK && res==0 ){
4541       rc = sqlite3BtreeDelete(pCrsr);
4542     }
4543     assert( pC->deferredMoveto==0 );
4544     pC->cacheStatus = CACHE_STALE;
4545   }
4546   break;
4547 }
4548 
4549 /* Opcode: IdxRowid P1 P2 * * *
4550 **
4551 ** Write into register P2 an integer which is the last entry in the record at
4552 ** the end of the index key pointed to by cursor P1.  This integer should be
4553 ** the rowid of the table entry to which this index entry points.
4554 **
4555 ** See also: Rowid, MakeRecord.
4556 */
4557 case OP_IdxRowid: {              /* out2-prerelease */
4558   BtCursor *pCrsr;
4559   VdbeCursor *pC;
4560   i64 rowid;
4561 
4562   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4563   pC = p->apCsr[pOp->p1];
4564   assert( pC!=0 );
4565   pCrsr = pC->pCursor;
4566   pOut->flags = MEM_Null;
4567   if( ALWAYS(pCrsr!=0) ){
4568     rc = sqlite3VdbeCursorMoveto(pC);
4569     if( NEVER(rc) ) goto abort_due_to_error;
4570     assert( pC->deferredMoveto==0 );
4571     assert( pC->isTable==0 );
4572     if( !pC->nullRow ){
4573       rc = sqlite3VdbeIdxRowid(db, pCrsr, &rowid);
4574       if( rc!=SQLITE_OK ){
4575         goto abort_due_to_error;
4576       }
4577       pOut->u.i = rowid;
4578       pOut->flags = MEM_Int;
4579     }
4580   }
4581   break;
4582 }
4583 
4584 /* Opcode: IdxGE P1 P2 P3 P4 P5
4585 **
4586 ** The P4 register values beginning with P3 form an unpacked index
4587 ** key that omits the ROWID.  Compare this key value against the index
4588 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
4589 **
4590 ** If the P1 index entry is greater than or equal to the key value
4591 ** then jump to P2.  Otherwise fall through to the next instruction.
4592 **
4593 ** If P5 is non-zero then the key value is increased by an epsilon
4594 ** prior to the comparison.  This make the opcode work like IdxGT except
4595 ** that if the key from register P3 is a prefix of the key in the cursor,
4596 ** the result is false whereas it would be true with IdxGT.
4597 */
4598 /* Opcode: IdxLT P1 P2 P3 P4 P5
4599 **
4600 ** The P4 register values beginning with P3 form an unpacked index
4601 ** key that omits the ROWID.  Compare this key value against the index
4602 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
4603 **
4604 ** If the P1 index entry is less than the key value then jump to P2.
4605 ** Otherwise fall through to the next instruction.
4606 **
4607 ** If P5 is non-zero then the key value is increased by an epsilon prior
4608 ** to the comparison.  This makes the opcode work like IdxLE.
4609 */
4610 case OP_IdxLT:          /* jump */
4611 case OP_IdxGE: {        /* jump */
4612   VdbeCursor *pC;
4613   int res;
4614   UnpackedRecord r;
4615 
4616   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
4617   pC = p->apCsr[pOp->p1];
4618   assert( pC!=0 );
4619   assert( pC->isOrdered );
4620   if( ALWAYS(pC->pCursor!=0) ){
4621     assert( pC->deferredMoveto==0 );
4622     assert( pOp->p5==0 || pOp->p5==1 );
4623     assert( pOp->p4type==P4_INT32 );
4624     r.pKeyInfo = pC->pKeyInfo;
4625     r.nField = (u16)pOp->p4.i;
4626     if( pOp->p5 ){
4627       r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH;
4628     }else{
4629       r.flags = UNPACKED_PREFIX_MATCH;
4630     }
4631     r.aMem = &aMem[pOp->p3];
4632 #ifdef SQLITE_DEBUG
4633     { int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
4634 #endif
4635     rc = sqlite3VdbeIdxKeyCompare(pC, &r, &res);
4636     if( pOp->opcode==OP_IdxLT ){
4637       res = -res;
4638     }else{
4639       assert( pOp->opcode==OP_IdxGE );
4640       res++;
4641     }
4642     if( res>0 ){
4643       pc = pOp->p2 - 1 ;
4644     }
4645   }
4646   break;
4647 }
4648 
4649 /* Opcode: Destroy P1 P2 P3 * *
4650 **
4651 ** Delete an entire database table or index whose root page in the database
4652 ** file is given by P1.
4653 **
4654 ** The table being destroyed is in the main database file if P3==0.  If
4655 ** P3==1 then the table to be clear is in the auxiliary database file
4656 ** that is used to store tables create using CREATE TEMPORARY TABLE.
4657 **
4658 ** If AUTOVACUUM is enabled then it is possible that another root page
4659 ** might be moved into the newly deleted root page in order to keep all
4660 ** root pages contiguous at the beginning of the database.  The former
4661 ** value of the root page that moved - its value before the move occurred -
4662 ** is stored in register P2.  If no page
4663 ** movement was required (because the table being dropped was already
4664 ** the last one in the database) then a zero is stored in register P2.
4665 ** If AUTOVACUUM is disabled then a zero is stored in register P2.
4666 **
4667 ** See also: Clear
4668 */
4669 case OP_Destroy: {     /* out2-prerelease */
4670   int iMoved;
4671   int iCnt;
4672   Vdbe *pVdbe;
4673   int iDb;
4674 #ifndef SQLITE_OMIT_VIRTUALTABLE
4675   iCnt = 0;
4676   for(pVdbe=db->pVdbe; pVdbe; pVdbe = pVdbe->pNext){
4677     if( pVdbe->magic==VDBE_MAGIC_RUN && pVdbe->inVtabMethod<2 && pVdbe->pc>=0 ){
4678       iCnt++;
4679     }
4680   }
4681 #else
4682   iCnt = db->activeVdbeCnt;
4683 #endif
4684   pOut->flags = MEM_Null;
4685   if( iCnt>1 ){
4686     rc = SQLITE_LOCKED;
4687     p->errorAction = OE_Abort;
4688   }else{
4689     iDb = pOp->p3;
4690     assert( iCnt==1 );
4691     assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
4692     rc = sqlite3BtreeDropTable(db->aDb[iDb].pBt, pOp->p1, &iMoved);
4693     pOut->flags = MEM_Int;
4694     pOut->u.i = iMoved;
4695 #ifndef SQLITE_OMIT_AUTOVACUUM
4696     if( rc==SQLITE_OK && iMoved!=0 ){
4697       sqlite3RootPageMoved(db, iDb, iMoved, pOp->p1);
4698       /* All OP_Destroy operations occur on the same btree */
4699       assert( resetSchemaOnFault==0 || resetSchemaOnFault==iDb+1 );
4700       resetSchemaOnFault = iDb+1;
4701     }
4702 #endif
4703   }
4704   break;
4705 }
4706 
4707 /* Opcode: Clear P1 P2 P3
4708 **
4709 ** Delete all contents of the database table or index whose root page
4710 ** in the database file is given by P1.  But, unlike Destroy, do not
4711 ** remove the table or index from the database file.
4712 **
4713 ** The table being clear is in the main database file if P2==0.  If
4714 ** P2==1 then the table to be clear is in the auxiliary database file
4715 ** that is used to store tables create using CREATE TEMPORARY TABLE.
4716 **
4717 ** If the P3 value is non-zero, then the table referred to must be an
4718 ** intkey table (an SQL table, not an index). In this case the row change
4719 ** count is incremented by the number of rows in the table being cleared.
4720 ** If P3 is greater than zero, then the value stored in register P3 is
4721 ** also incremented by the number of rows in the table being cleared.
4722 **
4723 ** See also: Destroy
4724 */
4725 case OP_Clear: {
4726   int nChange;
4727 
4728   nChange = 0;
4729   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
4730   rc = sqlite3BtreeClearTable(
4731       db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &nChange : 0)
4732   );
4733   if( pOp->p3 ){
4734     p->nChange += nChange;
4735     if( pOp->p3>0 ){
4736       assert( memIsValid(&aMem[pOp->p3]) );
4737       memAboutToChange(p, &aMem[pOp->p3]);
4738       aMem[pOp->p3].u.i += nChange;
4739     }
4740   }
4741   break;
4742 }
4743 
4744 /* Opcode: CreateTable P1 P2 * * *
4745 **
4746 ** Allocate a new table in the main database file if P1==0 or in the
4747 ** auxiliary database file if P1==1 or in an attached database if
4748 ** P1>1.  Write the root page number of the new table into
4749 ** register P2
4750 **
4751 ** The difference between a table and an index is this:  A table must
4752 ** have a 4-byte integer key and can have arbitrary data.  An index
4753 ** has an arbitrary key but no data.
4754 **
4755 ** See also: CreateIndex
4756 */
4757 /* Opcode: CreateIndex P1 P2 * * *
4758 **
4759 ** Allocate a new index in the main database file if P1==0 or in the
4760 ** auxiliary database file if P1==1 or in an attached database if
4761 ** P1>1.  Write the root page number of the new table into
4762 ** register P2.
4763 **
4764 ** See documentation on OP_CreateTable for additional information.
4765 */
4766 case OP_CreateIndex:            /* out2-prerelease */
4767 case OP_CreateTable: {          /* out2-prerelease */
4768   int pgno;
4769   int flags;
4770   Db *pDb;
4771 
4772   pgno = 0;
4773   assert( pOp->p1>=0 && pOp->p1<db->nDb );
4774   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
4775   pDb = &db->aDb[pOp->p1];
4776   assert( pDb->pBt!=0 );
4777   if( pOp->opcode==OP_CreateTable ){
4778     /* flags = BTREE_INTKEY; */
4779     flags = BTREE_INTKEY;
4780   }else{
4781     flags = BTREE_BLOBKEY;
4782   }
4783   rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, flags);
4784   pOut->u.i = pgno;
4785   break;
4786 }
4787 
4788 /* Opcode: ParseSchema P1 * * P4 *
4789 **
4790 ** Read and parse all entries from the SQLITE_MASTER table of database P1
4791 ** that match the WHERE clause P4.
4792 **
4793 ** This opcode invokes the parser to create a new virtual machine,
4794 ** then runs the new virtual machine.  It is thus a re-entrant opcode.
4795 */
4796 case OP_ParseSchema: {
4797   int iDb;
4798   const char *zMaster;
4799   char *zSql;
4800   InitData initData;
4801 
4802   /* Any prepared statement that invokes this opcode will hold mutexes
4803   ** on every btree.  This is a prerequisite for invoking
4804   ** sqlite3InitCallback().
4805   */
4806 #ifdef SQLITE_DEBUG
4807   for(iDb=0; iDb<db->nDb; iDb++){
4808     assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
4809   }
4810 #endif
4811 
4812   iDb = pOp->p1;
4813   assert( iDb>=0 && iDb<db->nDb );
4814   assert( DbHasProperty(db, iDb, DB_SchemaLoaded) );
4815   /* Used to be a conditional */ {
4816     zMaster = SCHEMA_TABLE(iDb);
4817     initData.db = db;
4818     initData.iDb = pOp->p1;
4819     initData.pzErrMsg = &p->zErrMsg;
4820     zSql = sqlite3MPrintf(db,
4821        "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid",
4822        db->aDb[iDb].zName, zMaster, pOp->p4.z);
4823     if( zSql==0 ){
4824       rc = SQLITE_NOMEM;
4825     }else{
4826       assert( db->init.busy==0 );
4827       db->init.busy = 1;
4828       initData.rc = SQLITE_OK;
4829       assert( !db->mallocFailed );
4830       rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
4831       if( rc==SQLITE_OK ) rc = initData.rc;
4832       sqlite3DbFree(db, zSql);
4833       db->init.busy = 0;
4834     }
4835   }
4836   if( rc==SQLITE_NOMEM ){
4837     goto no_mem;
4838   }
4839   break;
4840 }
4841 
4842 #if !defined(SQLITE_OMIT_ANALYZE)
4843 /* Opcode: LoadAnalysis P1 * * * *
4844 **
4845 ** Read the sqlite_stat1 table for database P1 and load the content
4846 ** of that table into the internal index hash table.  This will cause
4847 ** the analysis to be used when preparing all subsequent queries.
4848 */
4849 case OP_LoadAnalysis: {
4850   assert( pOp->p1>=0 && pOp->p1<db->nDb );
4851   rc = sqlite3AnalysisLoad(db, pOp->p1);
4852   break;
4853 }
4854 #endif /* !defined(SQLITE_OMIT_ANALYZE) */
4855 
4856 /* Opcode: DropTable P1 * * P4 *
4857 **
4858 ** Remove the internal (in-memory) data structures that describe
4859 ** the table named P4 in database P1.  This is called after a table
4860 ** is dropped in order to keep the internal representation of the
4861 ** schema consistent with what is on disk.
4862 */
4863 case OP_DropTable: {
4864   sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
4865   break;
4866 }
4867 
4868 /* Opcode: DropIndex P1 * * P4 *
4869 **
4870 ** Remove the internal (in-memory) data structures that describe
4871 ** the index named P4 in database P1.  This is called after an index
4872 ** is dropped in order to keep the internal representation of the
4873 ** schema consistent with what is on disk.
4874 */
4875 case OP_DropIndex: {
4876   sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
4877   break;
4878 }
4879 
4880 /* Opcode: DropTrigger P1 * * P4 *
4881 **
4882 ** Remove the internal (in-memory) data structures that describe
4883 ** the trigger named P4 in database P1.  This is called after a trigger
4884 ** is dropped in order to keep the internal representation of the
4885 ** schema consistent with what is on disk.
4886 */
4887 case OP_DropTrigger: {
4888   sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
4889   break;
4890 }
4891 
4892 
4893 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
4894 /* Opcode: IntegrityCk P1 P2 P3 * P5
4895 **
4896 ** Do an analysis of the currently open database.  Store in
4897 ** register P1 the text of an error message describing any problems.
4898 ** If no problems are found, store a NULL in register P1.
4899 **
4900 ** The register P3 contains the maximum number of allowed errors.
4901 ** At most reg(P3) errors will be reported.
4902 ** In other words, the analysis stops as soon as reg(P1) errors are
4903 ** seen.  Reg(P1) is updated with the number of errors remaining.
4904 **
4905 ** The root page numbers of all tables in the database are integer
4906 ** stored in reg(P1), reg(P1+1), reg(P1+2), ....  There are P2 tables
4907 ** total.
4908 **
4909 ** If P5 is not zero, the check is done on the auxiliary database
4910 ** file, not the main database file.
4911 **
4912 ** This opcode is used to implement the integrity_check pragma.
4913 */
4914 case OP_IntegrityCk: {
4915   int nRoot;      /* Number of tables to check.  (Number of root pages.) */
4916   int *aRoot;     /* Array of rootpage numbers for tables to be checked */
4917   int j;          /* Loop counter */
4918   int nErr;       /* Number of errors reported */
4919   char *z;        /* Text of the error report */
4920   Mem *pnErr;     /* Register keeping track of errors remaining */
4921 
4922   nRoot = pOp->p2;
4923   assert( nRoot>0 );
4924   aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(nRoot+1) );
4925   if( aRoot==0 ) goto no_mem;
4926   assert( pOp->p3>0 && pOp->p3<=p->nMem );
4927   pnErr = &aMem[pOp->p3];
4928   assert( (pnErr->flags & MEM_Int)!=0 );
4929   assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 );
4930   pIn1 = &aMem[pOp->p1];
4931   for(j=0; j<nRoot; j++){
4932     aRoot[j] = (int)sqlite3VdbeIntValue(&pIn1[j]);
4933   }
4934   aRoot[j] = 0;
4935   assert( pOp->p5<db->nDb );
4936   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
4937   z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
4938                                  (int)pnErr->u.i, &nErr);
4939   sqlite3DbFree(db, aRoot);
4940   pnErr->u.i -= nErr;
4941   sqlite3VdbeMemSetNull(pIn1);
4942   if( nErr==0 ){
4943     assert( z==0 );
4944   }else if( z==0 ){
4945     goto no_mem;
4946   }else{
4947     sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free);
4948   }
4949   UPDATE_MAX_BLOBSIZE(pIn1);
4950   sqlite3VdbeChangeEncoding(pIn1, encoding);
4951   break;
4952 }
4953 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
4954 
4955 /* Opcode: RowSetAdd P1 P2 * * *
4956 **
4957 ** Insert the integer value held by register P2 into a boolean index
4958 ** held in register P1.
4959 **
4960 ** An assertion fails if P2 is not an integer.
4961 */
4962 case OP_RowSetAdd: {       /* in1, in2 */
4963   pIn1 = &aMem[pOp->p1];
4964   pIn2 = &aMem[pOp->p2];
4965   assert( (pIn2->flags & MEM_Int)!=0 );
4966   if( (pIn1->flags & MEM_RowSet)==0 ){
4967     sqlite3VdbeMemSetRowSet(pIn1);
4968     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
4969   }
4970   sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i);
4971   break;
4972 }
4973 
4974 /* Opcode: RowSetRead P1 P2 P3 * *
4975 **
4976 ** Extract the smallest value from boolean index P1 and put that value into
4977 ** register P3.  Or, if boolean index P1 is initially empty, leave P3
4978 ** unchanged and jump to instruction P2.
4979 */
4980 case OP_RowSetRead: {       /* jump, in1, out3 */
4981   i64 val;
4982   CHECK_FOR_INTERRUPT;
4983   pIn1 = &aMem[pOp->p1];
4984   if( (pIn1->flags & MEM_RowSet)==0
4985    || sqlite3RowSetNext(pIn1->u.pRowSet, &val)==0
4986   ){
4987     /* The boolean index is empty */
4988     sqlite3VdbeMemSetNull(pIn1);
4989     pc = pOp->p2 - 1;
4990   }else{
4991     /* A value was pulled from the index */
4992     sqlite3VdbeMemSetInt64(&aMem[pOp->p3], val);
4993   }
4994   break;
4995 }
4996 
4997 /* Opcode: RowSetTest P1 P2 P3 P4
4998 **
4999 ** Register P3 is assumed to hold a 64-bit integer value. If register P1
5000 ** contains a RowSet object and that RowSet object contains
5001 ** the value held in P3, jump to register P2. Otherwise, insert the
5002 ** integer in P3 into the RowSet and continue on to the
5003 ** next opcode.
5004 **
5005 ** The RowSet object is optimized for the case where successive sets
5006 ** of integers, where each set contains no duplicates. Each set
5007 ** of values is identified by a unique P4 value. The first set
5008 ** must have P4==0, the final set P4=-1.  P4 must be either -1 or
5009 ** non-negative.  For non-negative values of P4 only the lower 4
5010 ** bits are significant.
5011 **
5012 ** This allows optimizations: (a) when P4==0 there is no need to test
5013 ** the rowset object for P3, as it is guaranteed not to contain it,
5014 ** (b) when P4==-1 there is no need to insert the value, as it will
5015 ** never be tested for, and (c) when a value that is part of set X is
5016 ** inserted, there is no need to search to see if the same value was
5017 ** previously inserted as part of set X (only if it was previously
5018 ** inserted as part of some other set).
5019 */
5020 case OP_RowSetTest: {                     /* jump, in1, in3 */
5021   int iSet;
5022   int exists;
5023 
5024   pIn1 = &aMem[pOp->p1];
5025   pIn3 = &aMem[pOp->p3];
5026   iSet = pOp->p4.i;
5027   assert( pIn3->flags&MEM_Int );
5028 
5029   /* If there is anything other than a rowset object in memory cell P1,
5030   ** delete it now and initialize P1 with an empty rowset
5031   */
5032   if( (pIn1->flags & MEM_RowSet)==0 ){
5033     sqlite3VdbeMemSetRowSet(pIn1);
5034     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
5035   }
5036 
5037   assert( pOp->p4type==P4_INT32 );
5038   assert( iSet==-1 || iSet>=0 );
5039   if( iSet ){
5040     exists = sqlite3RowSetTest(pIn1->u.pRowSet,
5041                                (u8)(iSet>=0 ? iSet & 0xf : 0xff),
5042                                pIn3->u.i);
5043     if( exists ){
5044       pc = pOp->p2 - 1;
5045       break;
5046     }
5047   }
5048   if( iSet>=0 ){
5049     sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i);
5050   }
5051   break;
5052 }
5053 
5054 
5055 #ifndef SQLITE_OMIT_TRIGGER
5056 
5057 /* Opcode: Program P1 P2 P3 P4 *
5058 **
5059 ** Execute the trigger program passed as P4 (type P4_SUBPROGRAM).
5060 **
5061 ** P1 contains the address of the memory cell that contains the first memory
5062 ** cell in an array of values used as arguments to the sub-program. P2
5063 ** contains the address to jump to if the sub-program throws an IGNORE
5064 ** exception using the RAISE() function. Register P3 contains the address
5065 ** of a memory cell in this (the parent) VM that is used to allocate the
5066 ** memory required by the sub-vdbe at runtime.
5067 **
5068 ** P4 is a pointer to the VM containing the trigger program.
5069 */
5070 case OP_Program: {        /* jump */
5071   int nMem;               /* Number of memory registers for sub-program */
5072   int nByte;              /* Bytes of runtime space required for sub-program */
5073   Mem *pRt;               /* Register to allocate runtime space */
5074   Mem *pMem;              /* Used to iterate through memory cells */
5075   Mem *pEnd;              /* Last memory cell in new array */
5076   VdbeFrame *pFrame;      /* New vdbe frame to execute in */
5077   SubProgram *pProgram;   /* Sub-program to execute */
5078   void *t;                /* Token identifying trigger */
5079 
5080   pProgram = pOp->p4.pProgram;
5081   pRt = &aMem[pOp->p3];
5082   assert( pProgram->nOp>0 );
5083 
5084   /* If the p5 flag is clear, then recursive invocation of triggers is
5085   ** disabled for backwards compatibility (p5 is set if this sub-program
5086   ** is really a trigger, not a foreign key action, and the flag set
5087   ** and cleared by the "PRAGMA recursive_triggers" command is clear).
5088   **
5089   ** It is recursive invocation of triggers, at the SQL level, that is
5090   ** disabled. In some cases a single trigger may generate more than one
5091   ** SubProgram (if the trigger may be executed with more than one different
5092   ** ON CONFLICT algorithm). SubProgram structures associated with a
5093   ** single trigger all have the same value for the SubProgram.token
5094   ** variable.  */
5095   if( pOp->p5 ){
5096     t = pProgram->token;
5097     for(pFrame=p->pFrame; pFrame && pFrame->token!=t; pFrame=pFrame->pParent);
5098     if( pFrame ) break;
5099   }
5100 
5101   if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){
5102     rc = SQLITE_ERROR;
5103     sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion");
5104     break;
5105   }
5106 
5107   /* Register pRt is used to store the memory required to save the state
5108   ** of the current program, and the memory required at runtime to execute
5109   ** the trigger program. If this trigger has been fired before, then pRt
5110   ** is already allocated. Otherwise, it must be initialized.  */
5111   if( (pRt->flags&MEM_Frame)==0 ){
5112     /* SubProgram.nMem is set to the number of memory cells used by the
5113     ** program stored in SubProgram.aOp. As well as these, one memory
5114     ** cell is required for each cursor used by the program. Set local
5115     ** variable nMem (and later, VdbeFrame.nChildMem) to this value.
5116     */
5117     nMem = pProgram->nMem + pProgram->nCsr;
5118     nByte = ROUND8(sizeof(VdbeFrame))
5119               + nMem * sizeof(Mem)
5120               + pProgram->nCsr * sizeof(VdbeCursor *)
5121               + pProgram->nOnce * sizeof(u8);
5122     pFrame = sqlite3DbMallocZero(db, nByte);
5123     if( !pFrame ){
5124       goto no_mem;
5125     }
5126     sqlite3VdbeMemRelease(pRt);
5127     pRt->flags = MEM_Frame;
5128     pRt->u.pFrame = pFrame;
5129 
5130     pFrame->v = p;
5131     pFrame->nChildMem = nMem;
5132     pFrame->nChildCsr = pProgram->nCsr;
5133     pFrame->pc = pc;
5134     pFrame->aMem = p->aMem;
5135     pFrame->nMem = p->nMem;
5136     pFrame->apCsr = p->apCsr;
5137     pFrame->nCursor = p->nCursor;
5138     pFrame->aOp = p->aOp;
5139     pFrame->nOp = p->nOp;
5140     pFrame->token = pProgram->token;
5141     pFrame->aOnceFlag = p->aOnceFlag;
5142     pFrame->nOnceFlag = p->nOnceFlag;
5143 
5144     pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
5145     for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
5146       pMem->flags = MEM_Invalid;
5147       pMem->db = db;
5148     }
5149   }else{
5150     pFrame = pRt->u.pFrame;
5151     assert( pProgram->nMem+pProgram->nCsr==pFrame->nChildMem );
5152     assert( pProgram->nCsr==pFrame->nChildCsr );
5153     assert( pc==pFrame->pc );
5154   }
5155 
5156   p->nFrame++;
5157   pFrame->pParent = p->pFrame;
5158   pFrame->lastRowid = lastRowid;
5159   pFrame->nChange = p->nChange;
5160   p->nChange = 0;
5161   p->pFrame = pFrame;
5162   p->aMem = aMem = &VdbeFrameMem(pFrame)[-1];
5163   p->nMem = pFrame->nChildMem;
5164   p->nCursor = (u16)pFrame->nChildCsr;
5165   p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
5166   p->aOp = aOp = pProgram->aOp;
5167   p->nOp = pProgram->nOp;
5168   p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
5169   p->nOnceFlag = pProgram->nOnce;
5170   pc = -1;
5171   memset(p->aOnceFlag, 0, p->nOnceFlag);
5172 
5173   break;
5174 }
5175 
5176 /* Opcode: Param P1 P2 * * *
5177 **
5178 ** This opcode is only ever present in sub-programs called via the
5179 ** OP_Program instruction. Copy a value currently stored in a memory
5180 ** cell of the calling (parent) frame to cell P2 in the current frames
5181 ** address space. This is used by trigger programs to access the new.*
5182 ** and old.* values.
5183 **
5184 ** The address of the cell in the parent frame is determined by adding
5185 ** the value of the P1 argument to the value of the P1 argument to the
5186 ** calling OP_Program instruction.
5187 */
5188 case OP_Param: {           /* out2-prerelease */
5189   VdbeFrame *pFrame;
5190   Mem *pIn;
5191   pFrame = p->pFrame;
5192   pIn = &pFrame->aMem[pOp->p1 + pFrame->aOp[pFrame->pc].p1];
5193   sqlite3VdbeMemShallowCopy(pOut, pIn, MEM_Ephem);
5194   break;
5195 }
5196 
5197 #endif /* #ifndef SQLITE_OMIT_TRIGGER */
5198 
5199 #ifndef SQLITE_OMIT_FOREIGN_KEY
5200 /* Opcode: FkCounter P1 P2 * * *
5201 **
5202 ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
5203 ** If P1 is non-zero, the database constraint counter is incremented
5204 ** (deferred foreign key constraints). Otherwise, if P1 is zero, the
5205 ** statement counter is incremented (immediate foreign key constraints).
5206 */
5207 case OP_FkCounter: {
5208   if( pOp->p1 ){
5209     db->nDeferredCons += pOp->p2;
5210   }else{
5211     p->nFkConstraint += pOp->p2;
5212   }
5213   break;
5214 }
5215 
5216 /* Opcode: FkIfZero P1 P2 * * *
5217 **
5218 ** This opcode tests if a foreign key constraint-counter is currently zero.
5219 ** If so, jump to instruction P2. Otherwise, fall through to the next
5220 ** instruction.
5221 **
5222 ** If P1 is non-zero, then the jump is taken if the database constraint-counter
5223 ** is zero (the one that counts deferred constraint violations). If P1 is
5224 ** zero, the jump is taken if the statement constraint-counter is zero
5225 ** (immediate foreign key constraint violations).
5226 */
5227 case OP_FkIfZero: {         /* jump */
5228   if( pOp->p1 ){
5229     if( db->nDeferredCons==0 ) pc = pOp->p2-1;
5230   }else{
5231     if( p->nFkConstraint==0 ) pc = pOp->p2-1;
5232   }
5233   break;
5234 }
5235 #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
5236 
5237 #ifndef SQLITE_OMIT_AUTOINCREMENT
5238 /* Opcode: MemMax P1 P2 * * *
5239 **
5240 ** P1 is a register in the root frame of this VM (the root frame is
5241 ** different from the current frame if this instruction is being executed
5242 ** within a sub-program). Set the value of register P1 to the maximum of
5243 ** its current value and the value in register P2.
5244 **
5245 ** This instruction throws an error if the memory cell is not initially
5246 ** an integer.
5247 */
5248 case OP_MemMax: {        /* in2 */
5249   Mem *pIn1;
5250   VdbeFrame *pFrame;
5251   if( p->pFrame ){
5252     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
5253     pIn1 = &pFrame->aMem[pOp->p1];
5254   }else{
5255     pIn1 = &aMem[pOp->p1];
5256   }
5257   assert( memIsValid(pIn1) );
5258   sqlite3VdbeMemIntegerify(pIn1);
5259   pIn2 = &aMem[pOp->p2];
5260   sqlite3VdbeMemIntegerify(pIn2);
5261   if( pIn1->u.i<pIn2->u.i){
5262     pIn1->u.i = pIn2->u.i;
5263   }
5264   break;
5265 }
5266 #endif /* SQLITE_OMIT_AUTOINCREMENT */
5267 
5268 /* Opcode: IfPos P1 P2 * * *
5269 **
5270 ** If the value of register P1 is 1 or greater, jump to P2.
5271 **
5272 ** It is illegal to use this instruction on a register that does
5273 ** not contain an integer.  An assertion fault will result if you try.
5274 */
5275 case OP_IfPos: {        /* jump, in1 */
5276   pIn1 = &aMem[pOp->p1];
5277   assert( pIn1->flags&MEM_Int );
5278   if( pIn1->u.i>0 ){
5279      pc = pOp->p2 - 1;
5280   }
5281   break;
5282 }
5283 
5284 /* Opcode: IfNeg P1 P2 * * *
5285 **
5286 ** If the value of register P1 is less than zero, jump to P2.
5287 **
5288 ** It is illegal to use this instruction on a register that does
5289 ** not contain an integer.  An assertion fault will result if you try.
5290 */
5291 case OP_IfNeg: {        /* jump, in1 */
5292   pIn1 = &aMem[pOp->p1];
5293   assert( pIn1->flags&MEM_Int );
5294   if( pIn1->u.i<0 ){
5295      pc = pOp->p2 - 1;
5296   }
5297   break;
5298 }
5299 
5300 /* Opcode: IfZero P1 P2 P3 * *
5301 **
5302 ** The register P1 must contain an integer.  Add literal P3 to the
5303 ** value in register P1.  If the result is exactly 0, jump to P2.
5304 **
5305 ** It is illegal to use this instruction on a register that does
5306 ** not contain an integer.  An assertion fault will result if you try.
5307 */
5308 case OP_IfZero: {        /* jump, in1 */
5309   pIn1 = &aMem[pOp->p1];
5310   assert( pIn1->flags&MEM_Int );
5311   pIn1->u.i += pOp->p3;
5312   if( pIn1->u.i==0 ){
5313      pc = pOp->p2 - 1;
5314   }
5315   break;
5316 }
5317 
5318 /* Opcode: AggStep * P2 P3 P4 P5
5319 **
5320 ** Execute the step function for an aggregate.  The
5321 ** function has P5 arguments.   P4 is a pointer to the FuncDef
5322 ** structure that specifies the function.  Use register
5323 ** P3 as the accumulator.
5324 **
5325 ** The P5 arguments are taken from register P2 and its
5326 ** successors.
5327 */
5328 case OP_AggStep: {
5329   int n;
5330   int i;
5331   Mem *pMem;
5332   Mem *pRec;
5333   sqlite3_context ctx;
5334   sqlite3_value **apVal;
5335 
5336   n = pOp->p5;
5337   assert( n>=0 );
5338   pRec = &aMem[pOp->p2];
5339   apVal = p->apArg;
5340   assert( apVal || n==0 );
5341   for(i=0; i<n; i++, pRec++){
5342     assert( memIsValid(pRec) );
5343     apVal[i] = pRec;
5344     memAboutToChange(p, pRec);
5345     sqlite3VdbeMemStoreType(pRec);
5346   }
5347   ctx.pFunc = pOp->p4.pFunc;
5348   assert( pOp->p3>0 && pOp->p3<=p->nMem );
5349   ctx.pMem = pMem = &aMem[pOp->p3];
5350   pMem->n++;
5351   ctx.s.flags = MEM_Null;
5352   ctx.s.z = 0;
5353   ctx.s.zMalloc = 0;
5354   ctx.s.xDel = 0;
5355   ctx.s.db = db;
5356   ctx.isError = 0;
5357   ctx.pColl = 0;
5358   if( ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
5359     assert( pOp>p->aOp );
5360     assert( pOp[-1].p4type==P4_COLLSEQ );
5361     assert( pOp[-1].opcode==OP_CollSeq );
5362     ctx.pColl = pOp[-1].p4.pColl;
5363   }
5364   (ctx.pFunc->xStep)(&ctx, n, apVal); /* IMP: R-24505-23230 */
5365   if( ctx.isError ){
5366     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s));
5367     rc = ctx.isError;
5368   }
5369 
5370   sqlite3VdbeMemRelease(&ctx.s);
5371 
5372   break;
5373 }
5374 
5375 /* Opcode: AggFinal P1 P2 * P4 *
5376 **
5377 ** Execute the finalizer function for an aggregate.  P1 is
5378 ** the memory location that is the accumulator for the aggregate.
5379 **
5380 ** P2 is the number of arguments that the step function takes and
5381 ** P4 is a pointer to the FuncDef for this function.  The P2
5382 ** argument is not used by this opcode.  It is only there to disambiguate
5383 ** functions that can take varying numbers of arguments.  The
5384 ** P4 argument is only needed for the degenerate case where
5385 ** the step function was not previously called.
5386 */
5387 case OP_AggFinal: {
5388   Mem *pMem;
5389   assert( pOp->p1>0 && pOp->p1<=p->nMem );
5390   pMem = &aMem[pOp->p1];
5391   assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
5392   rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc);
5393   if( rc ){
5394     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(pMem));
5395   }
5396   sqlite3VdbeChangeEncoding(pMem, encoding);
5397   UPDATE_MAX_BLOBSIZE(pMem);
5398   if( sqlite3VdbeMemTooBig(pMem) ){
5399     goto too_big;
5400   }
5401   break;
5402 }
5403 
5404 #ifndef SQLITE_OMIT_WAL
5405 /* Opcode: Checkpoint P1 P2 P3 * *
5406 **
5407 ** Checkpoint database P1. This is a no-op if P1 is not currently in
5408 ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
5409 ** or RESTART.  Write 1 or 0 into mem[P3] if the checkpoint returns
5410 ** SQLITE_BUSY or not, respectively.  Write the number of pages in the
5411 ** WAL after the checkpoint into mem[P3+1] and the number of pages
5412 ** in the WAL that have been checkpointed after the checkpoint
5413 ** completes into mem[P3+2].  However on an error, mem[P3+1] and
5414 ** mem[P3+2] are initialized to -1.
5415 */
5416 case OP_Checkpoint: {
5417   int i;                          /* Loop counter */
5418   int aRes[3];                    /* Results */
5419   Mem *pMem;                      /* Write results here */
5420 
5421   aRes[0] = 0;
5422   aRes[1] = aRes[2] = -1;
5423   assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
5424        || pOp->p2==SQLITE_CHECKPOINT_FULL
5425        || pOp->p2==SQLITE_CHECKPOINT_RESTART
5426   );
5427   rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]);
5428   if( rc==SQLITE_BUSY ){
5429     rc = SQLITE_OK;
5430     aRes[0] = 1;
5431   }
5432   for(i=0, pMem = &aMem[pOp->p3]; i<3; i++, pMem++){
5433     sqlite3VdbeMemSetInt64(pMem, (i64)aRes[i]);
5434   }
5435   break;
5436 };
5437 #endif
5438 
5439 #ifndef SQLITE_OMIT_PRAGMA
5440 /* Opcode: JournalMode P1 P2 P3 * P5
5441 **
5442 ** Change the journal mode of database P1 to P3. P3 must be one of the
5443 ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
5444 ** modes (delete, truncate, persist, off and memory), this is a simple
5445 ** operation. No IO is required.
5446 **
5447 ** If changing into or out of WAL mode the procedure is more complicated.
5448 **
5449 ** Write a string containing the final journal-mode to register P2.
5450 */
5451 case OP_JournalMode: {    /* out2-prerelease */
5452   Btree *pBt;                     /* Btree to change journal mode of */
5453   Pager *pPager;                  /* Pager associated with pBt */
5454   int eNew;                       /* New journal mode */
5455   int eOld;                       /* The old journal mode */
5456   const char *zFilename;          /* Name of database file for pPager */
5457 
5458   eNew = pOp->p3;
5459   assert( eNew==PAGER_JOURNALMODE_DELETE
5460        || eNew==PAGER_JOURNALMODE_TRUNCATE
5461        || eNew==PAGER_JOURNALMODE_PERSIST
5462        || eNew==PAGER_JOURNALMODE_OFF
5463        || eNew==PAGER_JOURNALMODE_MEMORY
5464        || eNew==PAGER_JOURNALMODE_WAL
5465        || eNew==PAGER_JOURNALMODE_QUERY
5466   );
5467   assert( pOp->p1>=0 && pOp->p1<db->nDb );
5468 
5469   pBt = db->aDb[pOp->p1].pBt;
5470   pPager = sqlite3BtreePager(pBt);
5471   eOld = sqlite3PagerGetJournalMode(pPager);
5472   if( eNew==PAGER_JOURNALMODE_QUERY ) eNew = eOld;
5473   if( !sqlite3PagerOkToChangeJournalMode(pPager) ) eNew = eOld;
5474 
5475 #ifndef SQLITE_OMIT_WAL
5476   zFilename = sqlite3PagerFilename(pPager);
5477 
5478   /* Do not allow a transition to journal_mode=WAL for a database
5479   ** in temporary storage or if the VFS does not support shared memory
5480   */
5481   if( eNew==PAGER_JOURNALMODE_WAL
5482    && (sqlite3Strlen30(zFilename)==0           /* Temp file */
5483        || !sqlite3PagerWalSupported(pPager))   /* No shared-memory support */
5484   ){
5485     eNew = eOld;
5486   }
5487 
5488   if( (eNew!=eOld)
5489    && (eOld==PAGER_JOURNALMODE_WAL || eNew==PAGER_JOURNALMODE_WAL)
5490   ){
5491     if( !db->autoCommit || db->activeVdbeCnt>1 ){
5492       rc = SQLITE_ERROR;
5493       sqlite3SetString(&p->zErrMsg, db,
5494           "cannot change %s wal mode from within a transaction",
5495           (eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
5496       );
5497       break;
5498     }else{
5499 
5500       if( eOld==PAGER_JOURNALMODE_WAL ){
5501         /* If leaving WAL mode, close the log file. If successful, the call
5502         ** to PagerCloseWal() checkpoints and deletes the write-ahead-log
5503         ** file. An EXCLUSIVE lock may still be held on the database file
5504         ** after a successful return.
5505         */
5506         rc = sqlite3PagerCloseWal(pPager);
5507         if( rc==SQLITE_OK ){
5508           sqlite3PagerSetJournalMode(pPager, eNew);
5509         }
5510       }else if( eOld==PAGER_JOURNALMODE_MEMORY ){
5511         /* Cannot transition directly from MEMORY to WAL.  Use mode OFF
5512         ** as an intermediate */
5513         sqlite3PagerSetJournalMode(pPager, PAGER_JOURNALMODE_OFF);
5514       }
5515 
5516       /* Open a transaction on the database file. Regardless of the journal
5517       ** mode, this transaction always uses a rollback journal.
5518       */
5519       assert( sqlite3BtreeIsInTrans(pBt)==0 );
5520       if( rc==SQLITE_OK ){
5521         rc = sqlite3BtreeSetVersion(pBt, (eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
5522       }
5523     }
5524   }
5525 #endif /* ifndef SQLITE_OMIT_WAL */
5526 
5527   if( rc ){
5528     eNew = eOld;
5529   }
5530   eNew = sqlite3PagerSetJournalMode(pPager, eNew);
5531 
5532   pOut = &aMem[pOp->p2];
5533   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
5534   pOut->z = (char *)sqlite3JournalModename(eNew);
5535   pOut->n = sqlite3Strlen30(pOut->z);
5536   pOut->enc = SQLITE_UTF8;
5537   sqlite3VdbeChangeEncoding(pOut, encoding);
5538   break;
5539 };
5540 #endif /* SQLITE_OMIT_PRAGMA */
5541 
5542 #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
5543 /* Opcode: Vacuum * * * * *
5544 **
5545 ** Vacuum the entire database.  This opcode will cause other virtual
5546 ** machines to be created and run.  It may not be called from within
5547 ** a transaction.
5548 */
5549 case OP_Vacuum: {
5550   rc = sqlite3RunVacuum(&p->zErrMsg, db);
5551   break;
5552 }
5553 #endif
5554 
5555 #if !defined(SQLITE_OMIT_AUTOVACUUM)
5556 /* Opcode: IncrVacuum P1 P2 * * *
5557 **
5558 ** Perform a single step of the incremental vacuum procedure on
5559 ** the P1 database. If the vacuum has finished, jump to instruction
5560 ** P2. Otherwise, fall through to the next instruction.
5561 */
5562 case OP_IncrVacuum: {        /* jump */
5563   Btree *pBt;
5564 
5565   assert( pOp->p1>=0 && pOp->p1<db->nDb );
5566   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
5567   pBt = db->aDb[pOp->p1].pBt;
5568   rc = sqlite3BtreeIncrVacuum(pBt);
5569   if( rc==SQLITE_DONE ){
5570     pc = pOp->p2 - 1;
5571     rc = SQLITE_OK;
5572   }
5573   break;
5574 }
5575 #endif
5576 
5577 /* Opcode: Expire P1 * * * *
5578 **
5579 ** Cause precompiled statements to become expired. An expired statement
5580 ** fails with an error code of SQLITE_SCHEMA if it is ever executed
5581 ** (via sqlite3_step()).
5582 **
5583 ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
5584 ** then only the currently executing statement is affected.
5585 */
5586 case OP_Expire: {
5587   if( !pOp->p1 ){
5588     sqlite3ExpirePreparedStatements(db);
5589   }else{
5590     p->expired = 1;
5591   }
5592   break;
5593 }
5594 
5595 #ifndef SQLITE_OMIT_SHARED_CACHE
5596 /* Opcode: TableLock P1 P2 P3 P4 *
5597 **
5598 ** Obtain a lock on a particular table. This instruction is only used when
5599 ** the shared-cache feature is enabled.
5600 **
5601 ** P1 is the index of the database in sqlite3.aDb[] of the database
5602 ** on which the lock is acquired.  A readlock is obtained if P3==0 or
5603 ** a write lock if P3==1.
5604 **
5605 ** P2 contains the root-page of the table to lock.
5606 **
5607 ** P4 contains a pointer to the name of the table being locked. This is only
5608 ** used to generate an error message if the lock cannot be obtained.
5609 */
5610 case OP_TableLock: {
5611   u8 isWriteLock = (u8)pOp->p3;
5612   if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
5613     int p1 = pOp->p1;
5614     assert( p1>=0 && p1<db->nDb );
5615     assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
5616     assert( isWriteLock==0 || isWriteLock==1 );
5617     rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
5618     if( (rc&0xFF)==SQLITE_LOCKED ){
5619       const char *z = pOp->p4.z;
5620       sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
5621     }
5622   }
5623   break;
5624 }
5625 #endif /* SQLITE_OMIT_SHARED_CACHE */
5626 
5627 #ifndef SQLITE_OMIT_VIRTUALTABLE
5628 /* Opcode: VBegin * * * P4 *
5629 **
5630 ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the
5631 ** xBegin method for that table.
5632 **
5633 ** Also, whether or not P4 is set, check that this is not being called from
5634 ** within a callback to a virtual table xSync() method. If it is, the error
5635 ** code will be set to SQLITE_LOCKED.
5636 */
5637 case OP_VBegin: {
5638   VTable *pVTab;
5639   pVTab = pOp->p4.pVtab;
5640   rc = sqlite3VtabBegin(db, pVTab);
5641   if( pVTab ) importVtabErrMsg(p, pVTab->pVtab);
5642   break;
5643 }
5644 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5645 
5646 #ifndef SQLITE_OMIT_VIRTUALTABLE
5647 /* Opcode: VCreate P1 * * P4 *
5648 **
5649 ** P4 is the name of a virtual table in database P1. Call the xCreate method
5650 ** for that table.
5651 */
5652 case OP_VCreate: {
5653   rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
5654   break;
5655 }
5656 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5657 
5658 #ifndef SQLITE_OMIT_VIRTUALTABLE
5659 /* Opcode: VDestroy P1 * * P4 *
5660 **
5661 ** P4 is the name of a virtual table in database P1.  Call the xDestroy method
5662 ** of that table.
5663 */
5664 case OP_VDestroy: {
5665   p->inVtabMethod = 2;
5666   rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
5667   p->inVtabMethod = 0;
5668   break;
5669 }
5670 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5671 
5672 #ifndef SQLITE_OMIT_VIRTUALTABLE
5673 /* Opcode: VOpen P1 * * P4 *
5674 **
5675 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
5676 ** P1 is a cursor number.  This opcode opens a cursor to the virtual
5677 ** table and stores that cursor in P1.
5678 */
5679 case OP_VOpen: {
5680   VdbeCursor *pCur;
5681   sqlite3_vtab_cursor *pVtabCursor;
5682   sqlite3_vtab *pVtab;
5683   sqlite3_module *pModule;
5684 
5685   pCur = 0;
5686   pVtabCursor = 0;
5687   pVtab = pOp->p4.pVtab->pVtab;
5688   pModule = (sqlite3_module *)pVtab->pModule;
5689   assert(pVtab && pModule);
5690   rc = pModule->xOpen(pVtab, &pVtabCursor);
5691   importVtabErrMsg(p, pVtab);
5692   if( SQLITE_OK==rc ){
5693     /* Initialize sqlite3_vtab_cursor base class */
5694     pVtabCursor->pVtab = pVtab;
5695 
5696     /* Initialise vdbe cursor object */
5697     pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
5698     if( pCur ){
5699       pCur->pVtabCursor = pVtabCursor;
5700       pCur->pModule = pVtabCursor->pVtab->pModule;
5701     }else{
5702       db->mallocFailed = 1;
5703       pModule->xClose(pVtabCursor);
5704     }
5705   }
5706   break;
5707 }
5708 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5709 
5710 #ifndef SQLITE_OMIT_VIRTUALTABLE
5711 /* Opcode: VFilter P1 P2 P3 P4 *
5712 **
5713 ** P1 is a cursor opened using VOpen.  P2 is an address to jump to if
5714 ** the filtered result set is empty.
5715 **
5716 ** P4 is either NULL or a string that was generated by the xBestIndex
5717 ** method of the module.  The interpretation of the P4 string is left
5718 ** to the module implementation.
5719 **
5720 ** This opcode invokes the xFilter method on the virtual table specified
5721 ** by P1.  The integer query plan parameter to xFilter is stored in register
5722 ** P3. Register P3+1 stores the argc parameter to be passed to the
5723 ** xFilter method. Registers P3+2..P3+1+argc are the argc
5724 ** additional parameters which are passed to
5725 ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
5726 **
5727 ** A jump is made to P2 if the result set after filtering would be empty.
5728 */
5729 case OP_VFilter: {   /* jump */
5730   int nArg;
5731   int iQuery;
5732   const sqlite3_module *pModule;
5733   Mem *pQuery;
5734   Mem *pArgc;
5735   sqlite3_vtab_cursor *pVtabCursor;
5736   sqlite3_vtab *pVtab;
5737   VdbeCursor *pCur;
5738   int res;
5739   int i;
5740   Mem **apArg;
5741 
5742   pQuery = &aMem[pOp->p3];
5743   pArgc = &pQuery[1];
5744   pCur = p->apCsr[pOp->p1];
5745   assert( memIsValid(pQuery) );
5746   REGISTER_TRACE(pOp->p3, pQuery);
5747   assert( pCur->pVtabCursor );
5748   pVtabCursor = pCur->pVtabCursor;
5749   pVtab = pVtabCursor->pVtab;
5750   pModule = pVtab->pModule;
5751 
5752   /* Grab the index number and argc parameters */
5753   assert( (pQuery->flags&MEM_Int)!=0 && pArgc->flags==MEM_Int );
5754   nArg = (int)pArgc->u.i;
5755   iQuery = (int)pQuery->u.i;
5756 
5757   /* Invoke the xFilter method */
5758   {
5759     res = 0;
5760     apArg = p->apArg;
5761     for(i = 0; i<nArg; i++){
5762       apArg[i] = &pArgc[i+1];
5763       sqlite3VdbeMemStoreType(apArg[i]);
5764     }
5765 
5766     p->inVtabMethod = 1;
5767     rc = pModule->xFilter(pVtabCursor, iQuery, pOp->p4.z, nArg, apArg);
5768     p->inVtabMethod = 0;
5769     importVtabErrMsg(p, pVtab);
5770     if( rc==SQLITE_OK ){
5771       res = pModule->xEof(pVtabCursor);
5772     }
5773 
5774     if( res ){
5775       pc = pOp->p2 - 1;
5776     }
5777   }
5778   pCur->nullRow = 0;
5779 
5780   break;
5781 }
5782 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5783 
5784 #ifndef SQLITE_OMIT_VIRTUALTABLE
5785 /* Opcode: VColumn P1 P2 P3 * *
5786 **
5787 ** Store the value of the P2-th column of
5788 ** the row of the virtual-table that the
5789 ** P1 cursor is pointing to into register P3.
5790 */
5791 case OP_VColumn: {
5792   sqlite3_vtab *pVtab;
5793   const sqlite3_module *pModule;
5794   Mem *pDest;
5795   sqlite3_context sContext;
5796 
5797   VdbeCursor *pCur = p->apCsr[pOp->p1];
5798   assert( pCur->pVtabCursor );
5799   assert( pOp->p3>0 && pOp->p3<=p->nMem );
5800   pDest = &aMem[pOp->p3];
5801   memAboutToChange(p, pDest);
5802   if( pCur->nullRow ){
5803     sqlite3VdbeMemSetNull(pDest);
5804     break;
5805   }
5806   pVtab = pCur->pVtabCursor->pVtab;
5807   pModule = pVtab->pModule;
5808   assert( pModule->xColumn );
5809   memset(&sContext, 0, sizeof(sContext));
5810 
5811   /* The output cell may already have a buffer allocated. Move
5812   ** the current contents to sContext.s so in case the user-function
5813   ** can use the already allocated buffer instead of allocating a
5814   ** new one.
5815   */
5816   sqlite3VdbeMemMove(&sContext.s, pDest);
5817   MemSetTypeFlag(&sContext.s, MEM_Null);
5818 
5819   rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2);
5820   importVtabErrMsg(p, pVtab);
5821   if( sContext.isError ){
5822     rc = sContext.isError;
5823   }
5824 
5825   /* Copy the result of the function to the P3 register. We
5826   ** do this regardless of whether or not an error occurred to ensure any
5827   ** dynamic allocation in sContext.s (a Mem struct) is  released.
5828   */
5829   sqlite3VdbeChangeEncoding(&sContext.s, encoding);
5830   sqlite3VdbeMemMove(pDest, &sContext.s);
5831   REGISTER_TRACE(pOp->p3, pDest);
5832   UPDATE_MAX_BLOBSIZE(pDest);
5833 
5834   if( sqlite3VdbeMemTooBig(pDest) ){
5835     goto too_big;
5836   }
5837   break;
5838 }
5839 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5840 
5841 #ifndef SQLITE_OMIT_VIRTUALTABLE
5842 /* Opcode: VNext P1 P2 * * *
5843 **
5844 ** Advance virtual table P1 to the next row in its result set and
5845 ** jump to instruction P2.  Or, if the virtual table has reached
5846 ** the end of its result set, then fall through to the next instruction.
5847 */
5848 case OP_VNext: {   /* jump */
5849   sqlite3_vtab *pVtab;
5850   const sqlite3_module *pModule;
5851   int res;
5852   VdbeCursor *pCur;
5853 
5854   res = 0;
5855   pCur = p->apCsr[pOp->p1];
5856   assert( pCur->pVtabCursor );
5857   if( pCur->nullRow ){
5858     break;
5859   }
5860   pVtab = pCur->pVtabCursor->pVtab;
5861   pModule = pVtab->pModule;
5862   assert( pModule->xNext );
5863 
5864   /* Invoke the xNext() method of the module. There is no way for the
5865   ** underlying implementation to return an error if one occurs during
5866   ** xNext(). Instead, if an error occurs, true is returned (indicating that
5867   ** data is available) and the error code returned when xColumn or
5868   ** some other method is next invoked on the save virtual table cursor.
5869   */
5870   p->inVtabMethod = 1;
5871   rc = pModule->xNext(pCur->pVtabCursor);
5872   p->inVtabMethod = 0;
5873   importVtabErrMsg(p, pVtab);
5874   if( rc==SQLITE_OK ){
5875     res = pModule->xEof(pCur->pVtabCursor);
5876   }
5877 
5878   if( !res ){
5879     /* If there is data, jump to P2 */
5880     pc = pOp->p2 - 1;
5881   }
5882   break;
5883 }
5884 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5885 
5886 #ifndef SQLITE_OMIT_VIRTUALTABLE
5887 /* Opcode: VRename P1 * * P4 *
5888 **
5889 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
5890 ** This opcode invokes the corresponding xRename method. The value
5891 ** in register P1 is passed as the zName argument to the xRename method.
5892 */
5893 case OP_VRename: {
5894   sqlite3_vtab *pVtab;
5895   Mem *pName;
5896 
5897   pVtab = pOp->p4.pVtab->pVtab;
5898   pName = &aMem[pOp->p1];
5899   assert( pVtab->pModule->xRename );
5900   assert( memIsValid(pName) );
5901   REGISTER_TRACE(pOp->p1, pName);
5902   assert( pName->flags & MEM_Str );
5903   testcase( pName->enc==SQLITE_UTF8 );
5904   testcase( pName->enc==SQLITE_UTF16BE );
5905   testcase( pName->enc==SQLITE_UTF16LE );
5906   rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8);
5907   if( rc==SQLITE_OK ){
5908     rc = pVtab->pModule->xRename(pVtab, pName->z);
5909     importVtabErrMsg(p, pVtab);
5910     p->expired = 0;
5911   }
5912   break;
5913 }
5914 #endif
5915 
5916 #ifndef SQLITE_OMIT_VIRTUALTABLE
5917 /* Opcode: VUpdate P1 P2 P3 P4 *
5918 **
5919 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
5920 ** This opcode invokes the corresponding xUpdate method. P2 values
5921 ** are contiguous memory cells starting at P3 to pass to the xUpdate
5922 ** invocation. The value in register (P3+P2-1) corresponds to the
5923 ** p2th element of the argv array passed to xUpdate.
5924 **
5925 ** The xUpdate method will do a DELETE or an INSERT or both.
5926 ** The argv[0] element (which corresponds to memory cell P3)
5927 ** is the rowid of a row to delete.  If argv[0] is NULL then no
5928 ** deletion occurs.  The argv[1] element is the rowid of the new
5929 ** row.  This can be NULL to have the virtual table select the new
5930 ** rowid for itself.  The subsequent elements in the array are
5931 ** the values of columns in the new row.
5932 **
5933 ** If P2==1 then no insert is performed.  argv[0] is the rowid of
5934 ** a row to delete.
5935 **
5936 ** P1 is a boolean flag. If it is set to true and the xUpdate call
5937 ** is successful, then the value returned by sqlite3_last_insert_rowid()
5938 ** is set to the value of the rowid for the row just inserted.
5939 */
5940 case OP_VUpdate: {
5941   sqlite3_vtab *pVtab;
5942   sqlite3_module *pModule;
5943   int nArg;
5944   int i;
5945   sqlite_int64 rowid;
5946   Mem **apArg;
5947   Mem *pX;
5948 
5949   assert( pOp->p2==1        || pOp->p5==OE_Fail   || pOp->p5==OE_Rollback
5950        || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
5951   );
5952   pVtab = pOp->p4.pVtab->pVtab;
5953   pModule = (sqlite3_module *)pVtab->pModule;
5954   nArg = pOp->p2;
5955   assert( pOp->p4type==P4_VTAB );
5956   if( ALWAYS(pModule->xUpdate) ){
5957     u8 vtabOnConflict = db->vtabOnConflict;
5958     apArg = p->apArg;
5959     pX = &aMem[pOp->p3];
5960     for(i=0; i<nArg; i++){
5961       assert( memIsValid(pX) );
5962       memAboutToChange(p, pX);
5963       sqlite3VdbeMemStoreType(pX);
5964       apArg[i] = pX;
5965       pX++;
5966     }
5967     db->vtabOnConflict = pOp->p5;
5968     rc = pModule->xUpdate(pVtab, nArg, apArg, &rowid);
5969     db->vtabOnConflict = vtabOnConflict;
5970     importVtabErrMsg(p, pVtab);
5971     if( rc==SQLITE_OK && pOp->p1 ){
5972       assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) );
5973       db->lastRowid = lastRowid = rowid;
5974     }
5975     if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){
5976       if( pOp->p5==OE_Ignore ){
5977         rc = SQLITE_OK;
5978       }else{
5979         p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5);
5980       }
5981     }else{
5982       p->nChange++;
5983     }
5984   }
5985   break;
5986 }
5987 #endif /* SQLITE_OMIT_VIRTUALTABLE */
5988 
5989 #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
5990 /* Opcode: Pagecount P1 P2 * * *
5991 **
5992 ** Write the current number of pages in database P1 to memory cell P2.
5993 */
5994 case OP_Pagecount: {            /* out2-prerelease */
5995   pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
5996   break;
5997 }
5998 #endif
5999 
6000 
6001 #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
6002 /* Opcode: MaxPgcnt P1 P2 P3 * *
6003 **
6004 ** Try to set the maximum page count for database P1 to the value in P3.
6005 ** Do not let the maximum page count fall below the current page count and
6006 ** do not change the maximum page count value if P3==0.
6007 **
6008 ** Store the maximum page count after the change in register P2.
6009 */
6010 case OP_MaxPgcnt: {            /* out2-prerelease */
6011   unsigned int newMax;
6012   Btree *pBt;
6013 
6014   pBt = db->aDb[pOp->p1].pBt;
6015   newMax = 0;
6016   if( pOp->p3 ){
6017     newMax = sqlite3BtreeLastPage(pBt);
6018     if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
6019   }
6020   pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
6021   break;
6022 }
6023 #endif
6024 
6025 
6026 #ifndef SQLITE_OMIT_TRACE
6027 /* Opcode: Trace * * * P4 *
6028 **
6029 ** If tracing is enabled (by the sqlite3_trace()) interface, then
6030 ** the UTF-8 string contained in P4 is emitted on the trace callback.
6031 */
6032 case OP_Trace: {
6033   char *zTrace;
6034   char *z;
6035 
6036   if( db->xTrace && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){
6037     z = sqlite3VdbeExpandSql(p, zTrace);
6038     db->xTrace(db->pTraceArg, z);
6039     sqlite3DbFree(db, z);
6040   }
6041 #ifdef SQLITE_DEBUG
6042   if( (db->flags & SQLITE_SqlTrace)!=0
6043    && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
6044   ){
6045     sqlite3DebugPrintf("SQL-trace: %s\n", zTrace);
6046   }
6047 #endif /* SQLITE_DEBUG */
6048   break;
6049 }
6050 #endif
6051 
6052 
6053 /* Opcode: Noop * * * * *
6054 **
6055 ** Do nothing.  This instruction is often useful as a jump
6056 ** destination.
6057 */
6058 /*
6059 ** The magic Explain opcode are only inserted when explain==2 (which
6060 ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
6061 ** This opcode records information from the optimizer.  It is the
6062 ** the same as a no-op.  This opcodesnever appears in a real VM program.
6063 */
6064 default: {          /* This is really OP_Noop and OP_Explain */
6065   assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
6066   break;
6067 }
6068 
6069 /*****************************************************************************
6070 ** The cases of the switch statement above this line should all be indented
6071 ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
6072 ** readability.  From this point on down, the normal indentation rules are
6073 ** restored.
6074 *****************************************************************************/
6075     }
6076 
6077 #ifdef VDBE_PROFILE
6078     {
6079       u64 elapsed = sqlite3Hwtime() - start;
6080       pOp->cycles += elapsed;
6081       pOp->cnt++;
6082 #if 0
6083         fprintf(stdout, "%10llu ", elapsed);
6084         sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
6085 #endif
6086     }
6087 #endif
6088 
6089     /* The following code adds nothing to the actual functionality
6090     ** of the program.  It is only here for testing and debugging.
6091     ** On the other hand, it does burn CPU cycles every time through
6092     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
6093     */
6094 #ifndef NDEBUG
6095     assert( pc>=-1 && pc<p->nOp );
6096 
6097 #ifdef SQLITE_DEBUG
6098     if( p->trace ){
6099       if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
6100       if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
6101         registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
6102       }
6103       if( pOp->opflags & OPFLG_OUT3 ){
6104         registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
6105       }
6106     }
6107 #endif  /* SQLITE_DEBUG */
6108 #endif  /* NDEBUG */
6109   }  /* The end of the for(;;) loop the loops through opcodes */
6110 
6111   /* If we reach this point, it means that execution is finished with
6112   ** an error of some kind.
6113   */
6114 vdbe_error_halt:
6115   assert( rc );
6116   p->rc = rc;
6117   testcase( sqlite3GlobalConfig.xLog!=0 );
6118   sqlite3_log(rc, "statement aborts at %d: [%s] %s",
6119                    pc, p->zSql, p->zErrMsg);
6120   sqlite3VdbeHalt(p);
6121   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
6122   rc = SQLITE_ERROR;
6123   if( resetSchemaOnFault>0 ){
6124     sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
6125   }
6126 
6127   /* This is the only way out of this procedure.  We have to
6128   ** release the mutexes on btrees that were acquired at the
6129   ** top. */
6130 vdbe_return:
6131   db->lastRowid = lastRowid;
6132   sqlite3VdbeLeave(p);
6133   return rc;
6134 
6135   /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
6136   ** is encountered.
6137   */
6138 too_big:
6139   sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
6140   rc = SQLITE_TOOBIG;
6141   goto vdbe_error_halt;
6142 
6143   /* Jump to here if a malloc() fails.
6144   */
6145 no_mem:
6146   db->mallocFailed = 1;
6147   sqlite3SetString(&p->zErrMsg, db, "out of memory");
6148   rc = SQLITE_NOMEM;
6149   goto vdbe_error_halt;
6150 
6151   /* Jump to here for any other kind of fatal error.  The "rc" variable
6152   ** should hold the error number.
6153   */
6154 abort_due_to_error:
6155   assert( p->zErrMsg==0 );
6156   if( db->mallocFailed ) rc = SQLITE_NOMEM;
6157   if( rc!=SQLITE_IOERR_NOMEM ){
6158     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
6159   }
6160   goto vdbe_error_halt;
6161 
6162   /* Jump to here if the sqlite3_interrupt() API sets the interrupt
6163   ** flag.
6164   */
6165 abort_due_to_interrupt:
6166   assert( db->u1.isInterrupted );
6167   rc = SQLITE_INTERRUPT;
6168   p->rc = rc;
6169   sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
6170   goto vdbe_error_halt;
6171 }
6172