Annotation of embedaddon/sqlite3/src/vdbe.c, revision 1.1

1.1     ! misho       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:   p->nOp = pProgram->nOp;
        !          5171:   pc = -1;
        !          5172:   memset(p->aOnceFlag, 0, p->nOnceFlag);
        !          5173: 
        !          5174:   break;
        !          5175: }
        !          5176: 
        !          5177: /* Opcode: Param P1 P2 * * *
        !          5178: **
        !          5179: ** This opcode is only ever present in sub-programs called via the 
        !          5180: ** OP_Program instruction. Copy a value currently stored in a memory 
        !          5181: ** cell of the calling (parent) frame to cell P2 in the current frames 
        !          5182: ** address space. This is used by trigger programs to access the new.* 
        !          5183: ** and old.* values.
        !          5184: **
        !          5185: ** The address of the cell in the parent frame is determined by adding
        !          5186: ** the value of the P1 argument to the value of the P1 argument to the
        !          5187: ** calling OP_Program instruction.
        !          5188: */
        !          5189: case OP_Param: {           /* out2-prerelease */
        !          5190:   VdbeFrame *pFrame;
        !          5191:   Mem *pIn;
        !          5192:   pFrame = p->pFrame;
        !          5193:   pIn = &pFrame->aMem[pOp->p1 + pFrame->aOp[pFrame->pc].p1];   
        !          5194:   sqlite3VdbeMemShallowCopy(pOut, pIn, MEM_Ephem);
        !          5195:   break;
        !          5196: }
        !          5197: 
        !          5198: #endif /* #ifndef SQLITE_OMIT_TRIGGER */
        !          5199: 
        !          5200: #ifndef SQLITE_OMIT_FOREIGN_KEY
        !          5201: /* Opcode: FkCounter P1 P2 * * *
        !          5202: **
        !          5203: ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
        !          5204: ** If P1 is non-zero, the database constraint counter is incremented 
        !          5205: ** (deferred foreign key constraints). Otherwise, if P1 is zero, the 
        !          5206: ** statement counter is incremented (immediate foreign key constraints).
        !          5207: */
        !          5208: case OP_FkCounter: {
        !          5209:   if( pOp->p1 ){
        !          5210:     db->nDeferredCons += pOp->p2;
        !          5211:   }else{
        !          5212:     p->nFkConstraint += pOp->p2;
        !          5213:   }
        !          5214:   break;
        !          5215: }
        !          5216: 
        !          5217: /* Opcode: FkIfZero P1 P2 * * *
        !          5218: **
        !          5219: ** This opcode tests if a foreign key constraint-counter is currently zero.
        !          5220: ** If so, jump to instruction P2. Otherwise, fall through to the next 
        !          5221: ** instruction.
        !          5222: **
        !          5223: ** If P1 is non-zero, then the jump is taken if the database constraint-counter
        !          5224: ** is zero (the one that counts deferred constraint violations). If P1 is
        !          5225: ** zero, the jump is taken if the statement constraint-counter is zero
        !          5226: ** (immediate foreign key constraint violations).
        !          5227: */
        !          5228: case OP_FkIfZero: {         /* jump */
        !          5229:   if( pOp->p1 ){
        !          5230:     if( db->nDeferredCons==0 ) pc = pOp->p2-1;
        !          5231:   }else{
        !          5232:     if( p->nFkConstraint==0 ) pc = pOp->p2-1;
        !          5233:   }
        !          5234:   break;
        !          5235: }
        !          5236: #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
        !          5237: 
        !          5238: #ifndef SQLITE_OMIT_AUTOINCREMENT
        !          5239: /* Opcode: MemMax P1 P2 * * *
        !          5240: **
        !          5241: ** P1 is a register in the root frame of this VM (the root frame is
        !          5242: ** different from the current frame if this instruction is being executed
        !          5243: ** within a sub-program). Set the value of register P1 to the maximum of 
        !          5244: ** its current value and the value in register P2.
        !          5245: **
        !          5246: ** This instruction throws an error if the memory cell is not initially
        !          5247: ** an integer.
        !          5248: */
        !          5249: case OP_MemMax: {        /* in2 */
        !          5250:   Mem *pIn1;
        !          5251:   VdbeFrame *pFrame;
        !          5252:   if( p->pFrame ){
        !          5253:     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
        !          5254:     pIn1 = &pFrame->aMem[pOp->p1];
        !          5255:   }else{
        !          5256:     pIn1 = &aMem[pOp->p1];
        !          5257:   }
        !          5258:   assert( memIsValid(pIn1) );
        !          5259:   sqlite3VdbeMemIntegerify(pIn1);
        !          5260:   pIn2 = &aMem[pOp->p2];
        !          5261:   sqlite3VdbeMemIntegerify(pIn2);
        !          5262:   if( pIn1->u.i<pIn2->u.i){
        !          5263:     pIn1->u.i = pIn2->u.i;
        !          5264:   }
        !          5265:   break;
        !          5266: }
        !          5267: #endif /* SQLITE_OMIT_AUTOINCREMENT */
        !          5268: 
        !          5269: /* Opcode: IfPos P1 P2 * * *
        !          5270: **
        !          5271: ** If the value of register P1 is 1 or greater, jump to P2.
        !          5272: **
        !          5273: ** It is illegal to use this instruction on a register that does
        !          5274: ** not contain an integer.  An assertion fault will result if you try.
        !          5275: */
        !          5276: case OP_IfPos: {        /* jump, in1 */
        !          5277:   pIn1 = &aMem[pOp->p1];
        !          5278:   assert( pIn1->flags&MEM_Int );
        !          5279:   if( pIn1->u.i>0 ){
        !          5280:      pc = pOp->p2 - 1;
        !          5281:   }
        !          5282:   break;
        !          5283: }
        !          5284: 
        !          5285: /* Opcode: IfNeg P1 P2 * * *
        !          5286: **
        !          5287: ** If the value of register P1 is less than zero, jump to P2. 
        !          5288: **
        !          5289: ** It is illegal to use this instruction on a register that does
        !          5290: ** not contain an integer.  An assertion fault will result if you try.
        !          5291: */
        !          5292: case OP_IfNeg: {        /* jump, in1 */
        !          5293:   pIn1 = &aMem[pOp->p1];
        !          5294:   assert( pIn1->flags&MEM_Int );
        !          5295:   if( pIn1->u.i<0 ){
        !          5296:      pc = pOp->p2 - 1;
        !          5297:   }
        !          5298:   break;
        !          5299: }
        !          5300: 
        !          5301: /* Opcode: IfZero P1 P2 P3 * *
        !          5302: **
        !          5303: ** The register P1 must contain an integer.  Add literal P3 to the
        !          5304: ** value in register P1.  If the result is exactly 0, jump to P2. 
        !          5305: **
        !          5306: ** It is illegal to use this instruction on a register that does
        !          5307: ** not contain an integer.  An assertion fault will result if you try.
        !          5308: */
        !          5309: case OP_IfZero: {        /* jump, in1 */
        !          5310:   pIn1 = &aMem[pOp->p1];
        !          5311:   assert( pIn1->flags&MEM_Int );
        !          5312:   pIn1->u.i += pOp->p3;
        !          5313:   if( pIn1->u.i==0 ){
        !          5314:      pc = pOp->p2 - 1;
        !          5315:   }
        !          5316:   break;
        !          5317: }
        !          5318: 
        !          5319: /* Opcode: AggStep * P2 P3 P4 P5
        !          5320: **
        !          5321: ** Execute the step function for an aggregate.  The
        !          5322: ** function has P5 arguments.   P4 is a pointer to the FuncDef
        !          5323: ** structure that specifies the function.  Use register
        !          5324: ** P3 as the accumulator.
        !          5325: **
        !          5326: ** The P5 arguments are taken from register P2 and its
        !          5327: ** successors.
        !          5328: */
        !          5329: case OP_AggStep: {
        !          5330:   int n;
        !          5331:   int i;
        !          5332:   Mem *pMem;
        !          5333:   Mem *pRec;
        !          5334:   sqlite3_context ctx;
        !          5335:   sqlite3_value **apVal;
        !          5336: 
        !          5337:   n = pOp->p5;
        !          5338:   assert( n>=0 );
        !          5339:   pRec = &aMem[pOp->p2];
        !          5340:   apVal = p->apArg;
        !          5341:   assert( apVal || n==0 );
        !          5342:   for(i=0; i<n; i++, pRec++){
        !          5343:     assert( memIsValid(pRec) );
        !          5344:     apVal[i] = pRec;
        !          5345:     memAboutToChange(p, pRec);
        !          5346:     sqlite3VdbeMemStoreType(pRec);
        !          5347:   }
        !          5348:   ctx.pFunc = pOp->p4.pFunc;
        !          5349:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
        !          5350:   ctx.pMem = pMem = &aMem[pOp->p3];
        !          5351:   pMem->n++;
        !          5352:   ctx.s.flags = MEM_Null;
        !          5353:   ctx.s.z = 0;
        !          5354:   ctx.s.zMalloc = 0;
        !          5355:   ctx.s.xDel = 0;
        !          5356:   ctx.s.db = db;
        !          5357:   ctx.isError = 0;
        !          5358:   ctx.pColl = 0;
        !          5359:   if( ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
        !          5360:     assert( pOp>p->aOp );
        !          5361:     assert( pOp[-1].p4type==P4_COLLSEQ );
        !          5362:     assert( pOp[-1].opcode==OP_CollSeq );
        !          5363:     ctx.pColl = pOp[-1].p4.pColl;
        !          5364:   }
        !          5365:   (ctx.pFunc->xStep)(&ctx, n, apVal); /* IMP: R-24505-23230 */
        !          5366:   if( ctx.isError ){
        !          5367:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s));
        !          5368:     rc = ctx.isError;
        !          5369:   }
        !          5370: 
        !          5371:   sqlite3VdbeMemRelease(&ctx.s);
        !          5372: 
        !          5373:   break;
        !          5374: }
        !          5375: 
        !          5376: /* Opcode: AggFinal P1 P2 * P4 *
        !          5377: **
        !          5378: ** Execute the finalizer function for an aggregate.  P1 is
        !          5379: ** the memory location that is the accumulator for the aggregate.
        !          5380: **
        !          5381: ** P2 is the number of arguments that the step function takes and
        !          5382: ** P4 is a pointer to the FuncDef for this function.  The P2
        !          5383: ** argument is not used by this opcode.  It is only there to disambiguate
        !          5384: ** functions that can take varying numbers of arguments.  The
        !          5385: ** P4 argument is only needed for the degenerate case where
        !          5386: ** the step function was not previously called.
        !          5387: */
        !          5388: case OP_AggFinal: {
        !          5389:   Mem *pMem;
        !          5390:   assert( pOp->p1>0 && pOp->p1<=p->nMem );
        !          5391:   pMem = &aMem[pOp->p1];
        !          5392:   assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
        !          5393:   rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc);
        !          5394:   if( rc ){
        !          5395:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(pMem));
        !          5396:   }
        !          5397:   sqlite3VdbeChangeEncoding(pMem, encoding);
        !          5398:   UPDATE_MAX_BLOBSIZE(pMem);
        !          5399:   if( sqlite3VdbeMemTooBig(pMem) ){
        !          5400:     goto too_big;
        !          5401:   }
        !          5402:   break;
        !          5403: }
        !          5404: 
        !          5405: #ifndef SQLITE_OMIT_WAL
        !          5406: /* Opcode: Checkpoint P1 P2 P3 * *
        !          5407: **
        !          5408: ** Checkpoint database P1. This is a no-op if P1 is not currently in
        !          5409: ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
        !          5410: ** or RESTART.  Write 1 or 0 into mem[P3] if the checkpoint returns
        !          5411: ** SQLITE_BUSY or not, respectively.  Write the number of pages in the
        !          5412: ** WAL after the checkpoint into mem[P3+1] and the number of pages
        !          5413: ** in the WAL that have been checkpointed after the checkpoint
        !          5414: ** completes into mem[P3+2].  However on an error, mem[P3+1] and
        !          5415: ** mem[P3+2] are initialized to -1.
        !          5416: */
        !          5417: case OP_Checkpoint: {
        !          5418:   int i;                          /* Loop counter */
        !          5419:   int aRes[3];                    /* Results */
        !          5420:   Mem *pMem;                      /* Write results here */
        !          5421: 
        !          5422:   aRes[0] = 0;
        !          5423:   aRes[1] = aRes[2] = -1;
        !          5424:   assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
        !          5425:        || pOp->p2==SQLITE_CHECKPOINT_FULL
        !          5426:        || pOp->p2==SQLITE_CHECKPOINT_RESTART
        !          5427:   );
        !          5428:   rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]);
        !          5429:   if( rc==SQLITE_BUSY ){
        !          5430:     rc = SQLITE_OK;
        !          5431:     aRes[0] = 1;
        !          5432:   }
        !          5433:   for(i=0, pMem = &aMem[pOp->p3]; i<3; i++, pMem++){
        !          5434:     sqlite3VdbeMemSetInt64(pMem, (i64)aRes[i]);
        !          5435:   }    
        !          5436:   break;
        !          5437: };  
        !          5438: #endif
        !          5439: 
        !          5440: #ifndef SQLITE_OMIT_PRAGMA
        !          5441: /* Opcode: JournalMode P1 P2 P3 * P5
        !          5442: **
        !          5443: ** Change the journal mode of database P1 to P3. P3 must be one of the
        !          5444: ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
        !          5445: ** modes (delete, truncate, persist, off and memory), this is a simple
        !          5446: ** operation. No IO is required.
        !          5447: **
        !          5448: ** If changing into or out of WAL mode the procedure is more complicated.
        !          5449: **
        !          5450: ** Write a string containing the final journal-mode to register P2.
        !          5451: */
        !          5452: case OP_JournalMode: {    /* out2-prerelease */
        !          5453:   Btree *pBt;                     /* Btree to change journal mode of */
        !          5454:   Pager *pPager;                  /* Pager associated with pBt */
        !          5455:   int eNew;                       /* New journal mode */
        !          5456:   int eOld;                       /* The old journal mode */
        !          5457:   const char *zFilename;          /* Name of database file for pPager */
        !          5458: 
        !          5459:   eNew = pOp->p3;
        !          5460:   assert( eNew==PAGER_JOURNALMODE_DELETE 
        !          5461:        || eNew==PAGER_JOURNALMODE_TRUNCATE 
        !          5462:        || eNew==PAGER_JOURNALMODE_PERSIST 
        !          5463:        || eNew==PAGER_JOURNALMODE_OFF
        !          5464:        || eNew==PAGER_JOURNALMODE_MEMORY
        !          5465:        || eNew==PAGER_JOURNALMODE_WAL
        !          5466:        || eNew==PAGER_JOURNALMODE_QUERY
        !          5467:   );
        !          5468:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
        !          5469: 
        !          5470:   pBt = db->aDb[pOp->p1].pBt;
        !          5471:   pPager = sqlite3BtreePager(pBt);
        !          5472:   eOld = sqlite3PagerGetJournalMode(pPager);
        !          5473:   if( eNew==PAGER_JOURNALMODE_QUERY ) eNew = eOld;
        !          5474:   if( !sqlite3PagerOkToChangeJournalMode(pPager) ) eNew = eOld;
        !          5475: 
        !          5476: #ifndef SQLITE_OMIT_WAL
        !          5477:   zFilename = sqlite3PagerFilename(pPager);
        !          5478: 
        !          5479:   /* Do not allow a transition to journal_mode=WAL for a database
        !          5480:   ** in temporary storage or if the VFS does not support shared memory 
        !          5481:   */
        !          5482:   if( eNew==PAGER_JOURNALMODE_WAL
        !          5483:    && (sqlite3Strlen30(zFilename)==0           /* Temp file */
        !          5484:        || !sqlite3PagerWalSupported(pPager))   /* No shared-memory support */
        !          5485:   ){
        !          5486:     eNew = eOld;
        !          5487:   }
        !          5488: 
        !          5489:   if( (eNew!=eOld)
        !          5490:    && (eOld==PAGER_JOURNALMODE_WAL || eNew==PAGER_JOURNALMODE_WAL)
        !          5491:   ){
        !          5492:     if( !db->autoCommit || db->activeVdbeCnt>1 ){
        !          5493:       rc = SQLITE_ERROR;
        !          5494:       sqlite3SetString(&p->zErrMsg, db, 
        !          5495:           "cannot change %s wal mode from within a transaction",
        !          5496:           (eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
        !          5497:       );
        !          5498:       break;
        !          5499:     }else{
        !          5500:  
        !          5501:       if( eOld==PAGER_JOURNALMODE_WAL ){
        !          5502:         /* If leaving WAL mode, close the log file. If successful, the call
        !          5503:         ** to PagerCloseWal() checkpoints and deletes the write-ahead-log 
        !          5504:         ** file. An EXCLUSIVE lock may still be held on the database file 
        !          5505:         ** after a successful return. 
        !          5506:         */
        !          5507:         rc = sqlite3PagerCloseWal(pPager);
        !          5508:         if( rc==SQLITE_OK ){
        !          5509:           sqlite3PagerSetJournalMode(pPager, eNew);
        !          5510:         }
        !          5511:       }else if( eOld==PAGER_JOURNALMODE_MEMORY ){
        !          5512:         /* Cannot transition directly from MEMORY to WAL.  Use mode OFF
        !          5513:         ** as an intermediate */
        !          5514:         sqlite3PagerSetJournalMode(pPager, PAGER_JOURNALMODE_OFF);
        !          5515:       }
        !          5516:   
        !          5517:       /* Open a transaction on the database file. Regardless of the journal
        !          5518:       ** mode, this transaction always uses a rollback journal.
        !          5519:       */
        !          5520:       assert( sqlite3BtreeIsInTrans(pBt)==0 );
        !          5521:       if( rc==SQLITE_OK ){
        !          5522:         rc = sqlite3BtreeSetVersion(pBt, (eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
        !          5523:       }
        !          5524:     }
        !          5525:   }
        !          5526: #endif /* ifndef SQLITE_OMIT_WAL */
        !          5527: 
        !          5528:   if( rc ){
        !          5529:     eNew = eOld;
        !          5530:   }
        !          5531:   eNew = sqlite3PagerSetJournalMode(pPager, eNew);
        !          5532: 
        !          5533:   pOut = &aMem[pOp->p2];
        !          5534:   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
        !          5535:   pOut->z = (char *)sqlite3JournalModename(eNew);
        !          5536:   pOut->n = sqlite3Strlen30(pOut->z);
        !          5537:   pOut->enc = SQLITE_UTF8;
        !          5538:   sqlite3VdbeChangeEncoding(pOut, encoding);
        !          5539:   break;
        !          5540: };
        !          5541: #endif /* SQLITE_OMIT_PRAGMA */
        !          5542: 
        !          5543: #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
        !          5544: /* Opcode: Vacuum * * * * *
        !          5545: **
        !          5546: ** Vacuum the entire database.  This opcode will cause other virtual
        !          5547: ** machines to be created and run.  It may not be called from within
        !          5548: ** a transaction.
        !          5549: */
        !          5550: case OP_Vacuum: {
        !          5551:   rc = sqlite3RunVacuum(&p->zErrMsg, db);
        !          5552:   break;
        !          5553: }
        !          5554: #endif
        !          5555: 
        !          5556: #if !defined(SQLITE_OMIT_AUTOVACUUM)
        !          5557: /* Opcode: IncrVacuum P1 P2 * * *
        !          5558: **
        !          5559: ** Perform a single step of the incremental vacuum procedure on
        !          5560: ** the P1 database. If the vacuum has finished, jump to instruction
        !          5561: ** P2. Otherwise, fall through to the next instruction.
        !          5562: */
        !          5563: case OP_IncrVacuum: {        /* jump */
        !          5564:   Btree *pBt;
        !          5565: 
        !          5566:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
        !          5567:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
        !          5568:   pBt = db->aDb[pOp->p1].pBt;
        !          5569:   rc = sqlite3BtreeIncrVacuum(pBt);
        !          5570:   if( rc==SQLITE_DONE ){
        !          5571:     pc = pOp->p2 - 1;
        !          5572:     rc = SQLITE_OK;
        !          5573:   }
        !          5574:   break;
        !          5575: }
        !          5576: #endif
        !          5577: 
        !          5578: /* Opcode: Expire P1 * * * *
        !          5579: **
        !          5580: ** Cause precompiled statements to become expired. An expired statement
        !          5581: ** fails with an error code of SQLITE_SCHEMA if it is ever executed 
        !          5582: ** (via sqlite3_step()).
        !          5583: ** 
        !          5584: ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
        !          5585: ** then only the currently executing statement is affected. 
        !          5586: */
        !          5587: case OP_Expire: {
        !          5588:   if( !pOp->p1 ){
        !          5589:     sqlite3ExpirePreparedStatements(db);
        !          5590:   }else{
        !          5591:     p->expired = 1;
        !          5592:   }
        !          5593:   break;
        !          5594: }
        !          5595: 
        !          5596: #ifndef SQLITE_OMIT_SHARED_CACHE
        !          5597: /* Opcode: TableLock P1 P2 P3 P4 *
        !          5598: **
        !          5599: ** Obtain a lock on a particular table. This instruction is only used when
        !          5600: ** the shared-cache feature is enabled. 
        !          5601: **
        !          5602: ** P1 is the index of the database in sqlite3.aDb[] of the database
        !          5603: ** on which the lock is acquired.  A readlock is obtained if P3==0 or
        !          5604: ** a write lock if P3==1.
        !          5605: **
        !          5606: ** P2 contains the root-page of the table to lock.
        !          5607: **
        !          5608: ** P4 contains a pointer to the name of the table being locked. This is only
        !          5609: ** used to generate an error message if the lock cannot be obtained.
        !          5610: */
        !          5611: case OP_TableLock: {
        !          5612:   u8 isWriteLock = (u8)pOp->p3;
        !          5613:   if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
        !          5614:     int p1 = pOp->p1; 
        !          5615:     assert( p1>=0 && p1<db->nDb );
        !          5616:     assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
        !          5617:     assert( isWriteLock==0 || isWriteLock==1 );
        !          5618:     rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
        !          5619:     if( (rc&0xFF)==SQLITE_LOCKED ){
        !          5620:       const char *z = pOp->p4.z;
        !          5621:       sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
        !          5622:     }
        !          5623:   }
        !          5624:   break;
        !          5625: }
        !          5626: #endif /* SQLITE_OMIT_SHARED_CACHE */
        !          5627: 
        !          5628: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5629: /* Opcode: VBegin * * * P4 *
        !          5630: **
        !          5631: ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the 
        !          5632: ** xBegin method for that table.
        !          5633: **
        !          5634: ** Also, whether or not P4 is set, check that this is not being called from
        !          5635: ** within a callback to a virtual table xSync() method. If it is, the error
        !          5636: ** code will be set to SQLITE_LOCKED.
        !          5637: */
        !          5638: case OP_VBegin: {
        !          5639:   VTable *pVTab;
        !          5640:   pVTab = pOp->p4.pVtab;
        !          5641:   rc = sqlite3VtabBegin(db, pVTab);
        !          5642:   if( pVTab ) importVtabErrMsg(p, pVTab->pVtab);
        !          5643:   break;
        !          5644: }
        !          5645: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5646: 
        !          5647: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5648: /* Opcode: VCreate P1 * * P4 *
        !          5649: **
        !          5650: ** P4 is the name of a virtual table in database P1. Call the xCreate method
        !          5651: ** for that table.
        !          5652: */
        !          5653: case OP_VCreate: {
        !          5654:   rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
        !          5655:   break;
        !          5656: }
        !          5657: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5658: 
        !          5659: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5660: /* Opcode: VDestroy P1 * * P4 *
        !          5661: **
        !          5662: ** P4 is the name of a virtual table in database P1.  Call the xDestroy method
        !          5663: ** of that table.
        !          5664: */
        !          5665: case OP_VDestroy: {
        !          5666:   p->inVtabMethod = 2;
        !          5667:   rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
        !          5668:   p->inVtabMethod = 0;
        !          5669:   break;
        !          5670: }
        !          5671: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5672: 
        !          5673: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5674: /* Opcode: VOpen P1 * * P4 *
        !          5675: **
        !          5676: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
        !          5677: ** P1 is a cursor number.  This opcode opens a cursor to the virtual
        !          5678: ** table and stores that cursor in P1.
        !          5679: */
        !          5680: case OP_VOpen: {
        !          5681:   VdbeCursor *pCur;
        !          5682:   sqlite3_vtab_cursor *pVtabCursor;
        !          5683:   sqlite3_vtab *pVtab;
        !          5684:   sqlite3_module *pModule;
        !          5685: 
        !          5686:   pCur = 0;
        !          5687:   pVtabCursor = 0;
        !          5688:   pVtab = pOp->p4.pVtab->pVtab;
        !          5689:   pModule = (sqlite3_module *)pVtab->pModule;
        !          5690:   assert(pVtab && pModule);
        !          5691:   rc = pModule->xOpen(pVtab, &pVtabCursor);
        !          5692:   importVtabErrMsg(p, pVtab);
        !          5693:   if( SQLITE_OK==rc ){
        !          5694:     /* Initialize sqlite3_vtab_cursor base class */
        !          5695:     pVtabCursor->pVtab = pVtab;
        !          5696: 
        !          5697:     /* Initialise vdbe cursor object */
        !          5698:     pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
        !          5699:     if( pCur ){
        !          5700:       pCur->pVtabCursor = pVtabCursor;
        !          5701:       pCur->pModule = pVtabCursor->pVtab->pModule;
        !          5702:     }else{
        !          5703:       db->mallocFailed = 1;
        !          5704:       pModule->xClose(pVtabCursor);
        !          5705:     }
        !          5706:   }
        !          5707:   break;
        !          5708: }
        !          5709: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5710: 
        !          5711: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5712: /* Opcode: VFilter P1 P2 P3 P4 *
        !          5713: **
        !          5714: ** P1 is a cursor opened using VOpen.  P2 is an address to jump to if
        !          5715: ** the filtered result set is empty.
        !          5716: **
        !          5717: ** P4 is either NULL or a string that was generated by the xBestIndex
        !          5718: ** method of the module.  The interpretation of the P4 string is left
        !          5719: ** to the module implementation.
        !          5720: **
        !          5721: ** This opcode invokes the xFilter method on the virtual table specified
        !          5722: ** by P1.  The integer query plan parameter to xFilter is stored in register
        !          5723: ** P3. Register P3+1 stores the argc parameter to be passed to the
        !          5724: ** xFilter method. Registers P3+2..P3+1+argc are the argc
        !          5725: ** additional parameters which are passed to
        !          5726: ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
        !          5727: **
        !          5728: ** A jump is made to P2 if the result set after filtering would be empty.
        !          5729: */
        !          5730: case OP_VFilter: {   /* jump */
        !          5731:   int nArg;
        !          5732:   int iQuery;
        !          5733:   const sqlite3_module *pModule;
        !          5734:   Mem *pQuery;
        !          5735:   Mem *pArgc;
        !          5736:   sqlite3_vtab_cursor *pVtabCursor;
        !          5737:   sqlite3_vtab *pVtab;
        !          5738:   VdbeCursor *pCur;
        !          5739:   int res;
        !          5740:   int i;
        !          5741:   Mem **apArg;
        !          5742: 
        !          5743:   pQuery = &aMem[pOp->p3];
        !          5744:   pArgc = &pQuery[1];
        !          5745:   pCur = p->apCsr[pOp->p1];
        !          5746:   assert( memIsValid(pQuery) );
        !          5747:   REGISTER_TRACE(pOp->p3, pQuery);
        !          5748:   assert( pCur->pVtabCursor );
        !          5749:   pVtabCursor = pCur->pVtabCursor;
        !          5750:   pVtab = pVtabCursor->pVtab;
        !          5751:   pModule = pVtab->pModule;
        !          5752: 
        !          5753:   /* Grab the index number and argc parameters */
        !          5754:   assert( (pQuery->flags&MEM_Int)!=0 && pArgc->flags==MEM_Int );
        !          5755:   nArg = (int)pArgc->u.i;
        !          5756:   iQuery = (int)pQuery->u.i;
        !          5757: 
        !          5758:   /* Invoke the xFilter method */
        !          5759:   {
        !          5760:     res = 0;
        !          5761:     apArg = p->apArg;
        !          5762:     for(i = 0; i<nArg; i++){
        !          5763:       apArg[i] = &pArgc[i+1];
        !          5764:       sqlite3VdbeMemStoreType(apArg[i]);
        !          5765:     }
        !          5766: 
        !          5767:     p->inVtabMethod = 1;
        !          5768:     rc = pModule->xFilter(pVtabCursor, iQuery, pOp->p4.z, nArg, apArg);
        !          5769:     p->inVtabMethod = 0;
        !          5770:     importVtabErrMsg(p, pVtab);
        !          5771:     if( rc==SQLITE_OK ){
        !          5772:       res = pModule->xEof(pVtabCursor);
        !          5773:     }
        !          5774: 
        !          5775:     if( res ){
        !          5776:       pc = pOp->p2 - 1;
        !          5777:     }
        !          5778:   }
        !          5779:   pCur->nullRow = 0;
        !          5780: 
        !          5781:   break;
        !          5782: }
        !          5783: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5784: 
        !          5785: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5786: /* Opcode: VColumn P1 P2 P3 * *
        !          5787: **
        !          5788: ** Store the value of the P2-th column of
        !          5789: ** the row of the virtual-table that the 
        !          5790: ** P1 cursor is pointing to into register P3.
        !          5791: */
        !          5792: case OP_VColumn: {
        !          5793:   sqlite3_vtab *pVtab;
        !          5794:   const sqlite3_module *pModule;
        !          5795:   Mem *pDest;
        !          5796:   sqlite3_context sContext;
        !          5797: 
        !          5798:   VdbeCursor *pCur = p->apCsr[pOp->p1];
        !          5799:   assert( pCur->pVtabCursor );
        !          5800:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
        !          5801:   pDest = &aMem[pOp->p3];
        !          5802:   memAboutToChange(p, pDest);
        !          5803:   if( pCur->nullRow ){
        !          5804:     sqlite3VdbeMemSetNull(pDest);
        !          5805:     break;
        !          5806:   }
        !          5807:   pVtab = pCur->pVtabCursor->pVtab;
        !          5808:   pModule = pVtab->pModule;
        !          5809:   assert( pModule->xColumn );
        !          5810:   memset(&sContext, 0, sizeof(sContext));
        !          5811: 
        !          5812:   /* The output cell may already have a buffer allocated. Move
        !          5813:   ** the current contents to sContext.s so in case the user-function 
        !          5814:   ** can use the already allocated buffer instead of allocating a 
        !          5815:   ** new one.
        !          5816:   */
        !          5817:   sqlite3VdbeMemMove(&sContext.s, pDest);
        !          5818:   MemSetTypeFlag(&sContext.s, MEM_Null);
        !          5819: 
        !          5820:   rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2);
        !          5821:   importVtabErrMsg(p, pVtab);
        !          5822:   if( sContext.isError ){
        !          5823:     rc = sContext.isError;
        !          5824:   }
        !          5825: 
        !          5826:   /* Copy the result of the function to the P3 register. We
        !          5827:   ** do this regardless of whether or not an error occurred to ensure any
        !          5828:   ** dynamic allocation in sContext.s (a Mem struct) is  released.
        !          5829:   */
        !          5830:   sqlite3VdbeChangeEncoding(&sContext.s, encoding);
        !          5831:   sqlite3VdbeMemMove(pDest, &sContext.s);
        !          5832:   REGISTER_TRACE(pOp->p3, pDest);
        !          5833:   UPDATE_MAX_BLOBSIZE(pDest);
        !          5834: 
        !          5835:   if( sqlite3VdbeMemTooBig(pDest) ){
        !          5836:     goto too_big;
        !          5837:   }
        !          5838:   break;
        !          5839: }
        !          5840: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5841: 
        !          5842: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5843: /* Opcode: VNext P1 P2 * * *
        !          5844: **
        !          5845: ** Advance virtual table P1 to the next row in its result set and
        !          5846: ** jump to instruction P2.  Or, if the virtual table has reached
        !          5847: ** the end of its result set, then fall through to the next instruction.
        !          5848: */
        !          5849: case OP_VNext: {   /* jump */
        !          5850:   sqlite3_vtab *pVtab;
        !          5851:   const sqlite3_module *pModule;
        !          5852:   int res;
        !          5853:   VdbeCursor *pCur;
        !          5854: 
        !          5855:   res = 0;
        !          5856:   pCur = p->apCsr[pOp->p1];
        !          5857:   assert( pCur->pVtabCursor );
        !          5858:   if( pCur->nullRow ){
        !          5859:     break;
        !          5860:   }
        !          5861:   pVtab = pCur->pVtabCursor->pVtab;
        !          5862:   pModule = pVtab->pModule;
        !          5863:   assert( pModule->xNext );
        !          5864: 
        !          5865:   /* Invoke the xNext() method of the module. There is no way for the
        !          5866:   ** underlying implementation to return an error if one occurs during
        !          5867:   ** xNext(). Instead, if an error occurs, true is returned (indicating that 
        !          5868:   ** data is available) and the error code returned when xColumn or
        !          5869:   ** some other method is next invoked on the save virtual table cursor.
        !          5870:   */
        !          5871:   p->inVtabMethod = 1;
        !          5872:   rc = pModule->xNext(pCur->pVtabCursor);
        !          5873:   p->inVtabMethod = 0;
        !          5874:   importVtabErrMsg(p, pVtab);
        !          5875:   if( rc==SQLITE_OK ){
        !          5876:     res = pModule->xEof(pCur->pVtabCursor);
        !          5877:   }
        !          5878: 
        !          5879:   if( !res ){
        !          5880:     /* If there is data, jump to P2 */
        !          5881:     pc = pOp->p2 - 1;
        !          5882:   }
        !          5883:   break;
        !          5884: }
        !          5885: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5886: 
        !          5887: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5888: /* Opcode: VRename P1 * * P4 *
        !          5889: **
        !          5890: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
        !          5891: ** This opcode invokes the corresponding xRename method. The value
        !          5892: ** in register P1 is passed as the zName argument to the xRename method.
        !          5893: */
        !          5894: case OP_VRename: {
        !          5895:   sqlite3_vtab *pVtab;
        !          5896:   Mem *pName;
        !          5897: 
        !          5898:   pVtab = pOp->p4.pVtab->pVtab;
        !          5899:   pName = &aMem[pOp->p1];
        !          5900:   assert( pVtab->pModule->xRename );
        !          5901:   assert( memIsValid(pName) );
        !          5902:   REGISTER_TRACE(pOp->p1, pName);
        !          5903:   assert( pName->flags & MEM_Str );
        !          5904:   testcase( pName->enc==SQLITE_UTF8 );
        !          5905:   testcase( pName->enc==SQLITE_UTF16BE );
        !          5906:   testcase( pName->enc==SQLITE_UTF16LE );
        !          5907:   rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8);
        !          5908:   if( rc==SQLITE_OK ){
        !          5909:     rc = pVtab->pModule->xRename(pVtab, pName->z);
        !          5910:     importVtabErrMsg(p, pVtab);
        !          5911:     p->expired = 0;
        !          5912:   }
        !          5913:   break;
        !          5914: }
        !          5915: #endif
        !          5916: 
        !          5917: #ifndef SQLITE_OMIT_VIRTUALTABLE
        !          5918: /* Opcode: VUpdate P1 P2 P3 P4 *
        !          5919: **
        !          5920: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
        !          5921: ** This opcode invokes the corresponding xUpdate method. P2 values
        !          5922: ** are contiguous memory cells starting at P3 to pass to the xUpdate 
        !          5923: ** invocation. The value in register (P3+P2-1) corresponds to the 
        !          5924: ** p2th element of the argv array passed to xUpdate.
        !          5925: **
        !          5926: ** The xUpdate method will do a DELETE or an INSERT or both.
        !          5927: ** The argv[0] element (which corresponds to memory cell P3)
        !          5928: ** is the rowid of a row to delete.  If argv[0] is NULL then no 
        !          5929: ** deletion occurs.  The argv[1] element is the rowid of the new 
        !          5930: ** row.  This can be NULL to have the virtual table select the new 
        !          5931: ** rowid for itself.  The subsequent elements in the array are 
        !          5932: ** the values of columns in the new row.
        !          5933: **
        !          5934: ** If P2==1 then no insert is performed.  argv[0] is the rowid of
        !          5935: ** a row to delete.
        !          5936: **
        !          5937: ** P1 is a boolean flag. If it is set to true and the xUpdate call
        !          5938: ** is successful, then the value returned by sqlite3_last_insert_rowid() 
        !          5939: ** is set to the value of the rowid for the row just inserted.
        !          5940: */
        !          5941: case OP_VUpdate: {
        !          5942:   sqlite3_vtab *pVtab;
        !          5943:   sqlite3_module *pModule;
        !          5944:   int nArg;
        !          5945:   int i;
        !          5946:   sqlite_int64 rowid;
        !          5947:   Mem **apArg;
        !          5948:   Mem *pX;
        !          5949: 
        !          5950:   assert( pOp->p2==1        || pOp->p5==OE_Fail   || pOp->p5==OE_Rollback 
        !          5951:        || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
        !          5952:   );
        !          5953:   pVtab = pOp->p4.pVtab->pVtab;
        !          5954:   pModule = (sqlite3_module *)pVtab->pModule;
        !          5955:   nArg = pOp->p2;
        !          5956:   assert( pOp->p4type==P4_VTAB );
        !          5957:   if( ALWAYS(pModule->xUpdate) ){
        !          5958:     u8 vtabOnConflict = db->vtabOnConflict;
        !          5959:     apArg = p->apArg;
        !          5960:     pX = &aMem[pOp->p3];
        !          5961:     for(i=0; i<nArg; i++){
        !          5962:       assert( memIsValid(pX) );
        !          5963:       memAboutToChange(p, pX);
        !          5964:       sqlite3VdbeMemStoreType(pX);
        !          5965:       apArg[i] = pX;
        !          5966:       pX++;
        !          5967:     }
        !          5968:     db->vtabOnConflict = pOp->p5;
        !          5969:     rc = pModule->xUpdate(pVtab, nArg, apArg, &rowid);
        !          5970:     db->vtabOnConflict = vtabOnConflict;
        !          5971:     importVtabErrMsg(p, pVtab);
        !          5972:     if( rc==SQLITE_OK && pOp->p1 ){
        !          5973:       assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) );
        !          5974:       db->lastRowid = lastRowid = rowid;
        !          5975:     }
        !          5976:     if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){
        !          5977:       if( pOp->p5==OE_Ignore ){
        !          5978:         rc = SQLITE_OK;
        !          5979:       }else{
        !          5980:         p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5);
        !          5981:       }
        !          5982:     }else{
        !          5983:       p->nChange++;
        !          5984:     }
        !          5985:   }
        !          5986:   break;
        !          5987: }
        !          5988: #endif /* SQLITE_OMIT_VIRTUALTABLE */
        !          5989: 
        !          5990: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
        !          5991: /* Opcode: Pagecount P1 P2 * * *
        !          5992: **
        !          5993: ** Write the current number of pages in database P1 to memory cell P2.
        !          5994: */
        !          5995: case OP_Pagecount: {            /* out2-prerelease */
        !          5996:   pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
        !          5997:   break;
        !          5998: }
        !          5999: #endif
        !          6000: 
        !          6001: 
        !          6002: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
        !          6003: /* Opcode: MaxPgcnt P1 P2 P3 * *
        !          6004: **
        !          6005: ** Try to set the maximum page count for database P1 to the value in P3.
        !          6006: ** Do not let the maximum page count fall below the current page count and
        !          6007: ** do not change the maximum page count value if P3==0.
        !          6008: **
        !          6009: ** Store the maximum page count after the change in register P2.
        !          6010: */
        !          6011: case OP_MaxPgcnt: {            /* out2-prerelease */
        !          6012:   unsigned int newMax;
        !          6013:   Btree *pBt;
        !          6014: 
        !          6015:   pBt = db->aDb[pOp->p1].pBt;
        !          6016:   newMax = 0;
        !          6017:   if( pOp->p3 ){
        !          6018:     newMax = sqlite3BtreeLastPage(pBt);
        !          6019:     if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
        !          6020:   }
        !          6021:   pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
        !          6022:   break;
        !          6023: }
        !          6024: #endif
        !          6025: 
        !          6026: 
        !          6027: #ifndef SQLITE_OMIT_TRACE
        !          6028: /* Opcode: Trace * * * P4 *
        !          6029: **
        !          6030: ** If tracing is enabled (by the sqlite3_trace()) interface, then
        !          6031: ** the UTF-8 string contained in P4 is emitted on the trace callback.
        !          6032: */
        !          6033: case OP_Trace: {
        !          6034:   char *zTrace;
        !          6035:   char *z;
        !          6036: 
        !          6037:   if( db->xTrace && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){
        !          6038:     z = sqlite3VdbeExpandSql(p, zTrace);
        !          6039:     db->xTrace(db->pTraceArg, z);
        !          6040:     sqlite3DbFree(db, z);
        !          6041:   }
        !          6042: #ifdef SQLITE_DEBUG
        !          6043:   if( (db->flags & SQLITE_SqlTrace)!=0
        !          6044:    && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
        !          6045:   ){
        !          6046:     sqlite3DebugPrintf("SQL-trace: %s\n", zTrace);
        !          6047:   }
        !          6048: #endif /* SQLITE_DEBUG */
        !          6049:   break;
        !          6050: }
        !          6051: #endif
        !          6052: 
        !          6053: 
        !          6054: /* Opcode: Noop * * * * *
        !          6055: **
        !          6056: ** Do nothing.  This instruction is often useful as a jump
        !          6057: ** destination.
        !          6058: */
        !          6059: /*
        !          6060: ** The magic Explain opcode are only inserted when explain==2 (which
        !          6061: ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
        !          6062: ** This opcode records information from the optimizer.  It is the
        !          6063: ** the same as a no-op.  This opcodesnever appears in a real VM program.
        !          6064: */
        !          6065: default: {          /* This is really OP_Noop and OP_Explain */
        !          6066:   assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
        !          6067:   break;
        !          6068: }
        !          6069: 
        !          6070: /*****************************************************************************
        !          6071: ** The cases of the switch statement above this line should all be indented
        !          6072: ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
        !          6073: ** readability.  From this point on down, the normal indentation rules are
        !          6074: ** restored.
        !          6075: *****************************************************************************/
        !          6076:     }
        !          6077: 
        !          6078: #ifdef VDBE_PROFILE
        !          6079:     {
        !          6080:       u64 elapsed = sqlite3Hwtime() - start;
        !          6081:       pOp->cycles += elapsed;
        !          6082:       pOp->cnt++;
        !          6083: #if 0
        !          6084:         fprintf(stdout, "%10llu ", elapsed);
        !          6085:         sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
        !          6086: #endif
        !          6087:     }
        !          6088: #endif
        !          6089: 
        !          6090:     /* The following code adds nothing to the actual functionality
        !          6091:     ** of the program.  It is only here for testing and debugging.
        !          6092:     ** On the other hand, it does burn CPU cycles every time through
        !          6093:     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
        !          6094:     */
        !          6095: #ifndef NDEBUG
        !          6096:     assert( pc>=-1 && pc<p->nOp );
        !          6097: 
        !          6098: #ifdef SQLITE_DEBUG
        !          6099:     if( p->trace ){
        !          6100:       if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
        !          6101:       if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
        !          6102:         registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
        !          6103:       }
        !          6104:       if( pOp->opflags & OPFLG_OUT3 ){
        !          6105:         registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
        !          6106:       }
        !          6107:     }
        !          6108: #endif  /* SQLITE_DEBUG */
        !          6109: #endif  /* NDEBUG */
        !          6110:   }  /* The end of the for(;;) loop the loops through opcodes */
        !          6111: 
        !          6112:   /* If we reach this point, it means that execution is finished with
        !          6113:   ** an error of some kind.
        !          6114:   */
        !          6115: vdbe_error_halt:
        !          6116:   assert( rc );
        !          6117:   p->rc = rc;
        !          6118:   testcase( sqlite3GlobalConfig.xLog!=0 );
        !          6119:   sqlite3_log(rc, "statement aborts at %d: [%s] %s", 
        !          6120:                    pc, p->zSql, p->zErrMsg);
        !          6121:   sqlite3VdbeHalt(p);
        !          6122:   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
        !          6123:   rc = SQLITE_ERROR;
        !          6124:   if( resetSchemaOnFault>0 ){
        !          6125:     sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
        !          6126:   }
        !          6127: 
        !          6128:   /* This is the only way out of this procedure.  We have to
        !          6129:   ** release the mutexes on btrees that were acquired at the
        !          6130:   ** top. */
        !          6131: vdbe_return:
        !          6132:   db->lastRowid = lastRowid;
        !          6133:   sqlite3VdbeLeave(p);
        !          6134:   return rc;
        !          6135: 
        !          6136:   /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
        !          6137:   ** is encountered.
        !          6138:   */
        !          6139: too_big:
        !          6140:   sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
        !          6141:   rc = SQLITE_TOOBIG;
        !          6142:   goto vdbe_error_halt;
        !          6143: 
        !          6144:   /* Jump to here if a malloc() fails.
        !          6145:   */
        !          6146: no_mem:
        !          6147:   db->mallocFailed = 1;
        !          6148:   sqlite3SetString(&p->zErrMsg, db, "out of memory");
        !          6149:   rc = SQLITE_NOMEM;
        !          6150:   goto vdbe_error_halt;
        !          6151: 
        !          6152:   /* Jump to here for any other kind of fatal error.  The "rc" variable
        !          6153:   ** should hold the error number.
        !          6154:   */
        !          6155: abort_due_to_error:
        !          6156:   assert( p->zErrMsg==0 );
        !          6157:   if( db->mallocFailed ) rc = SQLITE_NOMEM;
        !          6158:   if( rc!=SQLITE_IOERR_NOMEM ){
        !          6159:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
        !          6160:   }
        !          6161:   goto vdbe_error_halt;
        !          6162: 
        !          6163:   /* Jump to here if the sqlite3_interrupt() API sets the interrupt
        !          6164:   ** flag.
        !          6165:   */
        !          6166: abort_due_to_interrupt:
        !          6167:   assert( db->u1.isInterrupted );
        !          6168:   rc = SQLITE_INTERRUPT;
        !          6169:   p->rc = rc;
        !          6170:   sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
        !          6171:   goto vdbe_error_halt;
        !          6172: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>