xref: /titanic_44/usr/src/lib/libsqlite/src/vdbe.c (revision c5c4113dfcabb1eed3d4bdf7609de5170027a794)
1 /*
2  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 /*
9 ** 2001 September 15
10 **
11 ** The author disclaims copyright to this source code.  In place of
12 ** a legal notice, here is a blessing:
13 **
14 **    May you do good and not evil.
15 **    May you find forgiveness for yourself and forgive others.
16 **    May you share freely, never taking more than you give.
17 **
18 *************************************************************************
19 ** The code in this file implements execution method of the
20 ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")
21 ** handles housekeeping details such as creating and deleting
22 ** VDBE instances.  This file is solely interested in executing
23 ** the VDBE program.
24 **
25 ** In the external interface, an "sqlite_vm*" is an opaque pointer
26 ** to a VDBE.
27 **
28 ** The SQL parser generates a program which is then executed by
29 ** the VDBE to do the work of the SQL statement.  VDBE programs are
30 ** similar in form to assembly language.  The program consists of
31 ** a linear sequence of operations.  Each operation has an opcode
32 ** and 3 operands.  Operands P1 and P2 are integers.  Operand P3
33 ** is a null-terminated string.   The P2 operand must be non-negative.
34 ** Opcodes will typically ignore one or more operands.  Many opcodes
35 ** ignore all three operands.
36 **
37 ** Computation results are stored on a stack.  Each entry on the
38 ** stack is either an integer, a null-terminated string, a floating point
39 ** number, or the SQL "NULL" value.  An inplicit conversion from one
40 ** type to the other occurs as necessary.
41 **
42 ** Most of the code in this file is taken up by the sqliteVdbeExec()
43 ** function which does the work of interpreting a VDBE program.
44 ** But other routines are also provided to help in building up
45 ** a program instruction by instruction.
46 **
47 ** Various scripts scan this source file in order to generate HTML
48 ** documentation, headers files, or other derived files.  The formatting
49 ** of the code in this file is, therefore, important.  See other comments
50 ** in this file for details.  If in doubt, do not deviate from existing
51 ** commenting and indentation practices when changing or adding code.
52 **
53 ** $Id: vdbe.c,v 1.268.2.3 2004/07/19 19:30:50 drh Exp $
54 */
55 #include "sqliteInt.h"
56 #include "os.h"
57 #include <ctype.h>
58 #include "vdbeInt.h"
59 
60 /*
61 ** The following global variable is incremented every time a cursor
62 ** moves, either by the OP_MoveTo or the OP_Next opcode.  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 int sqlite_search_count = 0;
68 
69 /*
70 ** When this global variable is positive, it gets decremented once before
71 ** each instruction in the VDBE.  When reaches zero, the SQLITE_Interrupt
72 ** of the db.flags field is set in order to simulate an interrupt.
73 **
74 ** This facility is used for testing purposes only.  It does not function
75 ** in an ordinary build.
76 */
77 int sqlite_interrupt_count = 0;
78 
79 /*
80 ** Advance the virtual machine to the next output row.
81 **
82 ** The return vale will be either SQLITE_BUSY, SQLITE_DONE,
83 ** SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE.
84 **
85 ** SQLITE_BUSY means that the virtual machine attempted to open
86 ** a locked database and there is no busy callback registered.
87 ** Call sqlite_step() again to retry the open.  *pN is set to 0
88 ** and *pazColName and *pazValue are both set to NULL.
89 **
90 ** SQLITE_DONE means that the virtual machine has finished
91 ** executing.  sqlite_step() should not be called again on this
92 ** virtual machine.  *pN and *pazColName are set appropriately
93 ** but *pazValue is set to NULL.
94 **
95 ** SQLITE_ROW means that the virtual machine has generated another
96 ** row of the result set.  *pN is set to the number of columns in
97 ** the row.  *pazColName is set to the names of the columns followed
98 ** by the column datatypes.  *pazValue is set to the values of each
99 ** column in the row.  The value of the i-th column is (*pazValue)[i].
100 ** The name of the i-th column is (*pazColName)[i] and the datatype
101 ** of the i-th column is (*pazColName)[i+*pN].
102 **
103 ** SQLITE_ERROR means that a run-time error (such as a constraint
104 ** violation) has occurred.  The details of the error will be returned
105 ** by the next call to sqlite_finalize().  sqlite_step() should not
106 ** be called again on the VM.
107 **
108 ** SQLITE_MISUSE means that the this routine was called inappropriately.
109 ** Perhaps it was called on a virtual machine that had already been
110 ** finalized or on one that had previously returned SQLITE_ERROR or
111 ** SQLITE_DONE.  Or it could be the case the the same database connection
112 ** is being used simulataneously by two or more threads.
113 */
sqlite_step(sqlite_vm * pVm,int * pN,const char *** pazValue,const char *** pazColName)114 int sqlite_step(
115   sqlite_vm *pVm,              /* The virtual machine to execute */
116   int *pN,                     /* OUT: Number of columns in result */
117   const char ***pazValue,      /* OUT: Column data */
118   const char ***pazColName     /* OUT: Column names and datatypes */
119 ){
120   Vdbe *p = (Vdbe*)pVm;
121   sqlite *db;
122   int rc;
123 
124   if( p->magic!=VDBE_MAGIC_RUN ){
125     return SQLITE_MISUSE;
126   }
127   db = p->db;
128   if( sqliteSafetyOn(db) ){
129     p->rc = SQLITE_MISUSE;
130     return SQLITE_MISUSE;
131   }
132   if( p->explain ){
133     rc = sqliteVdbeList(p);
134   }else{
135     rc = sqliteVdbeExec(p);
136   }
137   if( rc==SQLITE_DONE || rc==SQLITE_ROW ){
138     if( pazColName ) *pazColName = (const char**)p->azColName;
139     if( pN ) *pN = p->nResColumn;
140   }else{
141     if( pazColName) *pazColName = 0;
142     if( pN ) *pN = 0;
143   }
144   if( pazValue ){
145     if( rc==SQLITE_ROW ){
146       *pazValue = (const char**)p->azResColumn;
147     }else{
148       *pazValue = 0;
149     }
150   }
151   if( sqliteSafetyOff(db) ){
152     return SQLITE_MISUSE;
153   }
154   return rc;
155 }
156 
157 /*
158 ** Insert a new aggregate element and make it the element that
159 ** has focus.
160 **
161 ** Return 0 on success and 1 if memory is exhausted.
162 */
AggInsert(Agg * p,char * zKey,int nKey)163 static int AggInsert(Agg *p, char *zKey, int nKey){
164   AggElem *pElem, *pOld;
165   int i;
166   Mem *pMem;
167   pElem = sqliteMalloc( sizeof(AggElem) + nKey +
168                         (p->nMem-1)*sizeof(pElem->aMem[0]) );
169   if( pElem==0 ) return 1;
170   pElem->zKey = (char*)&pElem->aMem[p->nMem];
171   memcpy(pElem->zKey, zKey, nKey);
172   pElem->nKey = nKey;
173   pOld = sqliteHashInsert(&p->hash, pElem->zKey, pElem->nKey, pElem);
174   if( pOld!=0 ){
175     assert( pOld==pElem );  /* Malloc failed on insert */
176     sqliteFree(pOld);
177     return 0;
178   }
179   for(i=0, pMem=pElem->aMem; i<p->nMem; i++, pMem++){
180     pMem->flags = MEM_Null;
181   }
182   p->pCurrent = pElem;
183   return 0;
184 }
185 
186 /*
187 ** Get the AggElem currently in focus
188 */
189 #define AggInFocus(P)   ((P).pCurrent ? (P).pCurrent : _AggInFocus(&(P)))
_AggInFocus(Agg * p)190 static AggElem *_AggInFocus(Agg *p){
191   HashElem *pElem = sqliteHashFirst(&p->hash);
192   if( pElem==0 ){
193     AggInsert(p,"",1);
194     pElem = sqliteHashFirst(&p->hash);
195   }
196   return pElem ? sqliteHashData(pElem) : 0;
197 }
198 
199 /*
200 ** Convert the given stack entity into a string if it isn't one
201 ** already.
202 */
203 #define Stringify(P) if(((P)->flags & MEM_Str)==0){hardStringify(P);}
hardStringify(Mem * pStack)204 static int hardStringify(Mem *pStack){
205   int fg = pStack->flags;
206   if( fg & MEM_Real ){
207     sqlite_snprintf(sizeof(pStack->zShort),pStack->zShort,"%.15g",pStack->r);
208   }else if( fg & MEM_Int ){
209     sqlite_snprintf(sizeof(pStack->zShort),pStack->zShort,"%d",pStack->i);
210   }else{
211     pStack->zShort[0] = 0;
212   }
213   pStack->z = pStack->zShort;
214   pStack->n = strlen(pStack->zShort)+1;
215   pStack->flags = MEM_Str | MEM_Short;
216   return 0;
217 }
218 
219 /*
220 ** Convert the given stack entity into a string that has been obtained
221 ** from sqliteMalloc().  This is different from Stringify() above in that
222 ** Stringify() will use the NBFS bytes of static string space if the string
223 ** will fit but this routine always mallocs for space.
224 ** Return non-zero if we run out of memory.
225 */
226 #define Dynamicify(P) (((P)->flags & MEM_Dyn)==0 ? hardDynamicify(P):0)
hardDynamicify(Mem * pStack)227 static int hardDynamicify(Mem *pStack){
228   int fg = pStack->flags;
229   char *z;
230   if( (fg & MEM_Str)==0 ){
231     hardStringify(pStack);
232   }
233   assert( (fg & MEM_Dyn)==0 );
234   z = sqliteMallocRaw( pStack->n );
235   if( z==0 ) return 1;
236   memcpy(z, pStack->z, pStack->n);
237   pStack->z = z;
238   pStack->flags |= MEM_Dyn;
239   return 0;
240 }
241 
242 /*
243 ** An ephemeral string value (signified by the MEM_Ephem flag) contains
244 ** a pointer to a dynamically allocated string where some other entity
245 ** is responsible for deallocating that string.  Because the stack entry
246 ** does not control the string, it might be deleted without the stack
247 ** entry knowing it.
248 **
249 ** This routine converts an ephemeral string into a dynamically allocated
250 ** string that the stack entry itself controls.  In other words, it
251 ** converts an MEM_Ephem string into an MEM_Dyn string.
252 */
253 #define Deephemeralize(P) \
254    if( ((P)->flags&MEM_Ephem)!=0 && hardDeephem(P) ){ goto no_mem;}
hardDeephem(Mem * pStack)255 static int hardDeephem(Mem *pStack){
256   char *z;
257   assert( (pStack->flags & MEM_Ephem)!=0 );
258   z = sqliteMallocRaw( pStack->n );
259   if( z==0 ) return 1;
260   memcpy(z, pStack->z, pStack->n);
261   pStack->z = z;
262   pStack->flags &= ~MEM_Ephem;
263   pStack->flags |= MEM_Dyn;
264   return 0;
265 }
266 
267 /*
268 ** Release the memory associated with the given stack level.  This
269 ** leaves the Mem.flags field in an inconsistent state.
270 */
271 #define	Release(P) \
272 	if ((P)->flags & MEM_Dyn) { \
273 		sqliteFree((P)->z); \
274 		(P)->z = NULL; \
275 	}
276 
277 /*
278 ** Pop the stack N times.
279 */
popStack(Mem ** ppTos,int N)280 static void popStack(Mem **ppTos, int N){
281   Mem *pTos = *ppTos;
282   while( N>0 ){
283     N--;
284     Release(pTos);
285     pTos--;
286   }
287   *ppTos = pTos;
288 }
289 
290 /*
291 ** Return TRUE if zNum is a 32-bit signed integer and write
292 ** the value of the integer into *pNum.  If zNum is not an integer
293 ** or is an integer that is too large to be expressed with just 32
294 ** bits, then return false.
295 **
296 ** Under Linux (RedHat 7.2) this routine is much faster than atoi()
297 ** for converting strings into integers.
298 */
toInt(const char * zNum,int * pNum)299 static int toInt(const char *zNum, int *pNum){
300   int v = 0;
301   int neg;
302   int i, c;
303   if( *zNum=='-' ){
304     neg = 1;
305     zNum++;
306   }else if( *zNum=='+' ){
307     neg = 0;
308     zNum++;
309   }else{
310     neg = 0;
311   }
312   for(i=0; (c=zNum[i])>='0' && c<='9'; i++){
313     v = v*10 + c - '0';
314   }
315   *pNum = neg ? -v : v;
316   return c==0 && i>0 && (i<10 || (i==10 && memcmp(zNum,"2147483647",10)<=0));
317 }
318 
319 /*
320 ** Convert the given stack entity into a integer if it isn't one
321 ** already.
322 **
323 ** Any prior string or real representation is invalidated.
324 ** NULLs are converted into 0.
325 */
326 #define Integerify(P) if(((P)->flags&MEM_Int)==0){ hardIntegerify(P); }
hardIntegerify(Mem * pStack)327 static void hardIntegerify(Mem *pStack){
328   if( pStack->flags & MEM_Real ){
329     pStack->i = (int)pStack->r;
330     Release(pStack);
331   }else if( pStack->flags & MEM_Str ){
332     toInt(pStack->z, &pStack->i);
333     Release(pStack);
334   }else{
335     pStack->i = 0;
336   }
337   pStack->flags = MEM_Int;
338 }
339 
340 /*
341 ** Get a valid Real representation for the given stack element.
342 **
343 ** Any prior string or integer representation is retained.
344 ** NULLs are converted into 0.0.
345 */
346 #define Realify(P) if(((P)->flags&MEM_Real)==0){ hardRealify(P); }
hardRealify(Mem * pStack)347 static void hardRealify(Mem *pStack){
348   if( pStack->flags & MEM_Str ){
349     pStack->r = sqliteAtoF(pStack->z, 0);
350   }else if( pStack->flags & MEM_Int ){
351     pStack->r = pStack->i;
352   }else{
353     pStack->r = 0.0;
354   }
355   pStack->flags |= MEM_Real;
356 }
357 
358 /*
359 ** The parameters are pointers to the head of two sorted lists
360 ** of Sorter structures.  Merge these two lists together and return
361 ** a single sorted list.  This routine forms the core of the merge-sort
362 ** algorithm.
363 **
364 ** In the case of a tie, left sorts in front of right.
365 */
Merge(Sorter * pLeft,Sorter * pRight)366 static Sorter *Merge(Sorter *pLeft, Sorter *pRight){
367   Sorter sHead;
368   Sorter *pTail;
369   pTail = &sHead;
370   pTail->pNext = 0;
371   while( pLeft && pRight ){
372     int c = sqliteSortCompare(pLeft->zKey, pRight->zKey);
373     if( c<=0 ){
374       pTail->pNext = pLeft;
375       pLeft = pLeft->pNext;
376     }else{
377       pTail->pNext = pRight;
378       pRight = pRight->pNext;
379     }
380     pTail = pTail->pNext;
381   }
382   if( pLeft ){
383     pTail->pNext = pLeft;
384   }else if( pRight ){
385     pTail->pNext = pRight;
386   }
387   return sHead.pNext;
388 }
389 
390 /*
391 ** The following routine works like a replacement for the standard
392 ** library routine fgets().  The difference is in how end-of-line (EOL)
393 ** is handled.  Standard fgets() uses LF for EOL under unix, CRLF
394 ** under windows, and CR under mac.  This routine accepts any of these
395 ** character sequences as an EOL mark.  The EOL mark is replaced by
396 ** a single LF character in zBuf.
397 */
vdbe_fgets(char * zBuf,int nBuf,FILE * in)398 static char *vdbe_fgets(char *zBuf, int nBuf, FILE *in){
399   int i, c;
400   for(i=0; i<nBuf-1 && (c=getc(in))!=EOF; i++){
401     zBuf[i] = c;
402     if( c=='\r' || c=='\n' ){
403       if( c=='\r' ){
404         zBuf[i] = '\n';
405         c = getc(in);
406         if( c!=EOF && c!='\n' ) ungetc(c, in);
407       }
408       i++;
409       break;
410     }
411   }
412   zBuf[i]  = 0;
413   return i>0 ? zBuf : 0;
414 }
415 
416 /*
417 ** Make sure there is space in the Vdbe structure to hold at least
418 ** mxCursor cursors.  If there is not currently enough space, then
419 ** allocate more.
420 **
421 ** If a memory allocation error occurs, return 1.  Return 0 if
422 ** everything works.
423 */
expandCursorArraySize(Vdbe * p,int mxCursor)424 static int expandCursorArraySize(Vdbe *p, int mxCursor){
425   if( mxCursor>=p->nCursor ){
426     Cursor *aCsr = sqliteRealloc( p->aCsr, (mxCursor+1)*sizeof(Cursor) );
427     if( aCsr==0 ) return 1;
428     p->aCsr = aCsr;
429     memset(&p->aCsr[p->nCursor], 0, sizeof(Cursor)*(mxCursor+1-p->nCursor));
430     p->nCursor = mxCursor+1;
431   }
432   return 0;
433 }
434 
435 #ifdef VDBE_PROFILE
436 /*
437 ** The following routine only works on pentium-class processors.
438 ** It uses the RDTSC opcode to read cycle count value out of the
439 ** processor and returns that value.  This can be used for high-res
440 ** profiling.
441 */
hwtime(void)442 __inline__ unsigned long long int hwtime(void){
443   unsigned long long int x;
444   __asm__("rdtsc\n\t"
445           "mov %%edx, %%ecx\n\t"
446           :"=A" (x));
447   return x;
448 }
449 #endif
450 
451 /*
452 ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
453 ** sqlite_interrupt() routine has been called.  If it has been, then
454 ** processing of the VDBE program is interrupted.
455 **
456 ** This macro added to every instruction that does a jump in order to
457 ** implement a loop.  This test used to be on every single instruction,
458 ** but that meant we more testing that we needed.  By only testing the
459 ** flag on jump instructions, we get a (small) speed improvement.
460 */
461 #define CHECK_FOR_INTERRUPT \
462    if( db->flags & SQLITE_Interrupt ) goto abort_due_to_interrupt;
463 
464 
465 /*
466 ** Execute as much of a VDBE program as we can then return.
467 **
468 ** sqliteVdbeMakeReady() must be called before this routine in order to
469 ** close the program with a final OP_Halt and to set up the callbacks
470 ** and the error message pointer.
471 **
472 ** Whenever a row or result data is available, this routine will either
473 ** invoke the result callback (if there is one) or return with
474 ** SQLITE_ROW.
475 **
476 ** If an attempt is made to open a locked database, then this routine
477 ** will either invoke the busy callback (if there is one) or it will
478 ** return SQLITE_BUSY.
479 **
480 ** If an error occurs, an error message is written to memory obtained
481 ** from sqliteMalloc() and p->zErrMsg is made to point to that memory.
482 ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
483 **
484 ** If the callback ever returns non-zero, then the program exits
485 ** immediately.  There will be no error message but the p->rc field is
486 ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
487 **
488 ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
489 ** routine to return SQLITE_ERROR.
490 **
491 ** Other fatal errors return SQLITE_ERROR.
492 **
493 ** After this routine has finished, sqliteVdbeFinalize() should be
494 ** used to clean up the mess that was left behind.
495 */
sqliteVdbeExec(Vdbe * p)496 int sqliteVdbeExec(
497   Vdbe *p                    /* The VDBE */
498 ){
499   int pc;                    /* The program counter */
500   Op *pOp;                   /* Current operation */
501   int rc = SQLITE_OK;        /* Value to return */
502   sqlite *db = p->db;        /* The database */
503   Mem *pTos;                 /* Top entry in the operand stack */
504   char zBuf[100];            /* Space to sprintf() an integer */
505 #ifdef VDBE_PROFILE
506   unsigned long long start;  /* CPU clock count at start of opcode */
507   int origPc;                /* Program counter at start of opcode */
508 #endif
509 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
510   int nProgressOps = 0;      /* Opcodes executed since progress callback. */
511 #endif
512 
513   if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE;
514   assert( db->magic==SQLITE_MAGIC_BUSY );
515   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
516   p->rc = SQLITE_OK;
517   assert( p->explain==0 );
518   if( sqlite_malloc_failed ) goto no_mem;
519   pTos = p->pTos;
520   if( p->popStack ){
521     popStack(&pTos, p->popStack);
522     p->popStack = 0;
523   }
524   CHECK_FOR_INTERRUPT;
525   for(pc=p->pc; rc==SQLITE_OK; pc++){
526     assert( pc>=0 && pc<p->nOp );
527     assert( pTos<=&p->aStack[pc] );
528 #ifdef VDBE_PROFILE
529     origPc = pc;
530     start = hwtime();
531 #endif
532     pOp = &p->aOp[pc];
533 
534     /* Only allow tracing if NDEBUG is not defined.
535     */
536 #ifndef NDEBUG
537     if( p->trace ){
538       sqliteVdbePrintOp(p->trace, pc, pOp);
539     }
540 #endif
541 
542     /* Check to see if we need to simulate an interrupt.  This only happens
543     ** if we have a special test build.
544     */
545 #ifdef SQLITE_TEST
546     if( sqlite_interrupt_count>0 ){
547       sqlite_interrupt_count--;
548       if( sqlite_interrupt_count==0 ){
549         sqlite_interrupt(db);
550       }
551     }
552 #endif
553 
554 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
555     /* Call the progress callback if it is configured and the required number
556     ** of VDBE ops have been executed (either since this invocation of
557     ** sqliteVdbeExec() or since last time the progress callback was called).
558     ** If the progress callback returns non-zero, exit the virtual machine with
559     ** a return code SQLITE_ABORT.
560     */
561     if( db->xProgress ){
562       if( db->nProgressOps==nProgressOps ){
563         if( db->xProgress(db->pProgressArg)!=0 ){
564           rc = SQLITE_ABORT;
565           continue; /* skip to the next iteration of the for loop */
566         }
567         nProgressOps = 0;
568       }
569       nProgressOps++;
570     }
571 #endif
572 
573     switch( pOp->opcode ){
574 
575 /*****************************************************************************
576 ** What follows is a massive switch statement where each case implements a
577 ** separate instruction in the virtual machine.  If we follow the usual
578 ** indentation conventions, each case should be indented by 6 spaces.  But
579 ** that is a lot of wasted space on the left margin.  So the code within
580 ** the switch statement will break with convention and be flush-left. Another
581 ** big comment (similar to this one) will mark the point in the code where
582 ** we transition back to normal indentation.
583 **
584 ** The formatting of each case is important.  The makefile for SQLite
585 ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
586 ** file looking for lines that begin with "case OP_".  The opcodes.h files
587 ** will be filled with #defines that give unique integer values to each
588 ** opcode and the opcodes.c file is filled with an array of strings where
589 ** each string is the symbolic name for the corresponding opcode.
590 **
591 ** Documentation about VDBE opcodes is generated by scanning this file
592 ** for lines of that contain "Opcode:".  That line and all subsequent
593 ** comment lines are used in the generation of the opcode.html documentation
594 ** file.
595 **
596 ** SUMMARY:
597 **
598 **     Formatting is important to scripts that scan this file.
599 **     Do not deviate from the formatting style currently in use.
600 **
601 *****************************************************************************/
602 
603 /* Opcode:  Goto * P2 *
604 **
605 ** An unconditional jump to address P2.
606 ** The next instruction executed will be
607 ** the one at index P2 from the beginning of
608 ** the program.
609 */
610 case OP_Goto: {
611   CHECK_FOR_INTERRUPT;
612   pc = pOp->p2 - 1;
613   break;
614 }
615 
616 /* Opcode:  Gosub * P2 *
617 **
618 ** Push the current address plus 1 onto the return address stack
619 ** and then jump to address P2.
620 **
621 ** The return address stack is of limited depth.  If too many
622 ** OP_Gosub operations occur without intervening OP_Returns, then
623 ** the return address stack will fill up and processing will abort
624 ** with a fatal error.
625 */
626 case OP_Gosub: {
627   if( p->returnDepth>=sizeof(p->returnStack)/sizeof(p->returnStack[0]) ){
628     sqliteSetString(&p->zErrMsg, "return address stack overflow", (char*)0);
629     p->rc = SQLITE_INTERNAL;
630     return SQLITE_ERROR;
631   }
632   p->returnStack[p->returnDepth++] = pc+1;
633   pc = pOp->p2 - 1;
634   break;
635 }
636 
637 /* Opcode:  Return * * *
638 **
639 ** Jump immediately to the next instruction after the last unreturned
640 ** OP_Gosub.  If an OP_Return has occurred for all OP_Gosubs, then
641 ** processing aborts with a fatal error.
642 */
643 case OP_Return: {
644   if( p->returnDepth<=0 ){
645     sqliteSetString(&p->zErrMsg, "return address stack underflow", (char*)0);
646     p->rc = SQLITE_INTERNAL;
647     return SQLITE_ERROR;
648   }
649   p->returnDepth--;
650   pc = p->returnStack[p->returnDepth] - 1;
651   break;
652 }
653 
654 /* Opcode:  Halt P1 P2 *
655 **
656 ** Exit immediately.  All open cursors, Lists, Sorts, etc are closed
657 ** automatically.
658 **
659 ** P1 is the result code returned by sqlite_exec().  For a normal
660 ** halt, this should be SQLITE_OK (0).  For errors, it can be some
661 ** other value.  If P1!=0 then P2 will determine whether or not to
662 ** rollback the current transaction.  Do not rollback if P2==OE_Fail.
663 ** Do the rollback if P2==OE_Rollback.  If P2==OE_Abort, then back
664 ** out all changes that have occurred during this execution of the
665 ** VDBE, but do not rollback the transaction.
666 **
667 ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
668 ** every program.  So a jump past the last instruction of the program
669 ** is the same as executing Halt.
670 */
671 case OP_Halt: {
672   p->magic = VDBE_MAGIC_HALT;
673   p->pTos = pTos;
674   if( pOp->p1!=SQLITE_OK ){
675     p->rc = pOp->p1;
676     p->errorAction = pOp->p2;
677     if( pOp->p3 ){
678       sqliteSetString(&p->zErrMsg, pOp->p3, (char*)0);
679     }
680     return SQLITE_ERROR;
681   }else{
682     p->rc = SQLITE_OK;
683     return SQLITE_DONE;
684   }
685 }
686 
687 /* Opcode: Integer P1 * P3
688 **
689 ** The integer value P1 is pushed onto the stack.  If P3 is not zero
690 ** then it is assumed to be a string representation of the same integer.
691 */
692 case OP_Integer: {
693   pTos++;
694   pTos->i = pOp->p1;
695   pTos->flags = MEM_Int;
696   if( pOp->p3 ){
697     pTos->z = pOp->p3;
698     pTos->flags |= MEM_Str | MEM_Static;
699     pTos->n = strlen(pOp->p3)+1;
700   }
701   break;
702 }
703 
704 /* Opcode: String * * P3
705 **
706 ** The string value P3 is pushed onto the stack.  If P3==0 then a
707 ** NULL is pushed onto the stack.
708 */
709 case OP_String: {
710   char *z = pOp->p3;
711   pTos++;
712   if( z==0 ){
713     pTos->flags = MEM_Null;
714   }else{
715     pTos->z = z;
716     pTos->n = strlen(z) + 1;
717     pTos->flags = MEM_Str | MEM_Static;
718   }
719   break;
720 }
721 
722 /* Opcode: Variable P1 * *
723 **
724 ** Push the value of variable P1 onto the stack.  A variable is
725 ** an unknown in the original SQL string as handed to sqlite_compile().
726 ** Any occurance of the '?' character in the original SQL is considered
727 ** a variable.  Variables in the SQL string are number from left to
728 ** right beginning with 1.  The values of variables are set using the
729 ** sqlite_bind() API.
730 */
731 case OP_Variable: {
732   int j = pOp->p1 - 1;
733   pTos++;
734   if( j>=0 && j<p->nVar && p->azVar[j]!=0 ){
735     pTos->z = p->azVar[j];
736     pTos->n = p->anVar[j];
737     pTos->flags = MEM_Str | MEM_Static;
738   }else{
739     pTos->flags = MEM_Null;
740   }
741   break;
742 }
743 
744 /* Opcode: Pop P1 * *
745 **
746 ** P1 elements are popped off of the top of stack and discarded.
747 */
748 case OP_Pop: {
749   assert( pOp->p1>=0 );
750   popStack(&pTos, pOp->p1);
751   assert( pTos>=&p->aStack[-1] );
752   break;
753 }
754 
755 /* Opcode: Dup P1 P2 *
756 **
757 ** A copy of the P1-th element of the stack
758 ** is made and pushed onto the top of the stack.
759 ** The top of the stack is element 0.  So the
760 ** instruction "Dup 0 0 0" will make a copy of the
761 ** top of the stack.
762 **
763 ** If the content of the P1-th element is a dynamically
764 ** allocated string, then a new copy of that string
765 ** is made if P2==0.  If P2!=0, then just a pointer
766 ** to the string is copied.
767 **
768 ** Also see the Pull instruction.
769 */
770 case OP_Dup: {
771   Mem *pFrom = &pTos[-pOp->p1];
772   assert( pFrom<=pTos && pFrom>=p->aStack );
773   pTos++;
774   memcpy(pTos, pFrom, sizeof(*pFrom)-NBFS);
775   if( pTos->flags & MEM_Str ){
776     if( pOp->p2 && (pTos->flags & (MEM_Dyn|MEM_Ephem)) ){
777       pTos->flags &= ~MEM_Dyn;
778       pTos->flags |= MEM_Ephem;
779     }else if( pTos->flags & MEM_Short ){
780       memcpy(pTos->zShort, pFrom->zShort, pTos->n);
781       pTos->z = pTos->zShort;
782     }else if( (pTos->flags & MEM_Static)==0 ){
783       pTos->z = sqliteMallocRaw(pFrom->n);
784       if( sqlite_malloc_failed ) goto no_mem;
785       memcpy(pTos->z, pFrom->z, pFrom->n);
786       pTos->flags &= ~(MEM_Static|MEM_Ephem|MEM_Short);
787       pTos->flags |= MEM_Dyn;
788     }
789   }
790   break;
791 }
792 
793 /* Opcode: Pull P1 * *
794 **
795 ** The P1-th element is removed from its current location on
796 ** the stack and pushed back on top of the stack.  The
797 ** top of the stack is element 0, so "Pull 0 0 0" is
798 ** a no-op.  "Pull 1 0 0" swaps the top two elements of
799 ** the stack.
800 **
801 ** See also the Dup instruction.
802 */
803 case OP_Pull: {
804   Mem *pFrom = &pTos[-pOp->p1];
805   int i;
806   Mem ts;
807 
808   ts = *pFrom;
809   Deephemeralize(pTos);
810   for(i=0; i<pOp->p1; i++, pFrom++){
811     Deephemeralize(&pFrom[1]);
812     *pFrom = pFrom[1];
813     assert( (pFrom->flags & MEM_Ephem)==0 );
814     if( pFrom->flags & MEM_Short ){
815       assert( pFrom->flags & MEM_Str );
816       assert( pFrom->z==pFrom[1].zShort );
817       pFrom->z = pFrom->zShort;
818     }
819   }
820   *pTos = ts;
821   if( pTos->flags & MEM_Short ){
822     assert( pTos->flags & MEM_Str );
823     assert( pTos->z==pTos[-pOp->p1].zShort );
824     pTos->z = pTos->zShort;
825   }
826   break;
827 }
828 
829 /* Opcode: Push P1 * *
830 **
831 ** Overwrite the value of the P1-th element down on the
832 ** stack (P1==0 is the top of the stack) with the value
833 ** of the top of the stack.  Then pop the top of the stack.
834 */
835 case OP_Push: {
836   Mem *pTo = &pTos[-pOp->p1];
837 
838   assert( pTo>=p->aStack );
839   Deephemeralize(pTos);
840   Release(pTo);
841   *pTo = *pTos;
842   if( pTo->flags & MEM_Short ){
843     assert( pTo->z==pTos->zShort );
844     pTo->z = pTo->zShort;
845   }
846   pTos--;
847   break;
848 }
849 
850 
851 /* Opcode: ColumnName P1 P2 P3
852 **
853 ** P3 becomes the P1-th column name (first is 0).  An array of pointers
854 ** to all column names is passed as the 4th parameter to the callback.
855 ** If P2==1 then this is the last column in the result set and thus the
856 ** number of columns in the result set will be P1.  There must be at least
857 ** one OP_ColumnName with a P2==1 before invoking OP_Callback and the
858 ** number of columns specified in OP_Callback must one more than the P1
859 ** value of the OP_ColumnName that has P2==1.
860 */
861 case OP_ColumnName: {
862   assert( pOp->p1>=0 && pOp->p1<p->nOp );
863   p->azColName[pOp->p1] = pOp->p3;
864   p->nCallback = 0;
865   if( pOp->p2 ) p->nResColumn = pOp->p1+1;
866   break;
867 }
868 
869 /* Opcode: Callback P1 * *
870 **
871 ** Pop P1 values off the stack and form them into an array.  Then
872 ** invoke the callback function using the newly formed array as the
873 ** 3rd parameter.
874 */
875 case OP_Callback: {
876   int i;
877   char **azArgv = p->zArgv;
878   Mem *pCol;
879 
880   pCol = &pTos[1-pOp->p1];
881   assert( pCol>=p->aStack );
882   for(i=0; i<pOp->p1; i++, pCol++){
883     if( pCol->flags & MEM_Null ){
884       azArgv[i] = 0;
885     }else{
886       Stringify(pCol);
887       azArgv[i] = pCol->z;
888     }
889   }
890   azArgv[i] = 0;
891   p->nCallback++;
892   p->azResColumn = azArgv;
893   assert( p->nResColumn==pOp->p1 );
894   p->popStack = pOp->p1;
895   p->pc = pc + 1;
896   p->pTos = pTos;
897   return SQLITE_ROW;
898 }
899 
900 /* Opcode: Concat P1 P2 P3
901 **
902 ** Look at the first P1 elements of the stack.  Append them all
903 ** together with the lowest element first.  Use P3 as a separator.
904 ** Put the result on the top of the stack.  The original P1 elements
905 ** are popped from the stack if P2==0 and retained if P2==1.  If
906 ** any element of the stack is NULL, then the result is NULL.
907 **
908 ** If P3 is NULL, then use no separator.  When P1==1, this routine
909 ** makes a copy of the top stack element into memory obtained
910 ** from sqliteMalloc().
911 */
912 case OP_Concat: {
913   char *zNew;
914   int nByte;
915   int nField;
916   int i, j;
917   char *zSep;
918   int nSep;
919   Mem *pTerm;
920 
921   nField = pOp->p1;
922   zSep = pOp->p3;
923   if( zSep==0 ) zSep = "";
924   nSep = strlen(zSep);
925   assert( &pTos[1-nField] >= p->aStack );
926   nByte = 1 - nSep;
927   pTerm = &pTos[1-nField];
928   for(i=0; i<nField; i++, pTerm++){
929     if( pTerm->flags & MEM_Null ){
930       nByte = -1;
931       break;
932     }else{
933       Stringify(pTerm);
934       nByte += pTerm->n - 1 + nSep;
935     }
936   }
937   if( nByte<0 ){
938     if( pOp->p2==0 ){
939       popStack(&pTos, nField);
940     }
941     pTos++;
942     pTos->flags = MEM_Null;
943     break;
944   }
945   zNew = sqliteMallocRaw( nByte );
946   if( zNew==0 ) goto no_mem;
947   j = 0;
948   pTerm = &pTos[1-nField];
949   for(i=j=0; i<nField; i++, pTerm++){
950     assert( pTerm->flags & MEM_Str );
951     memcpy(&zNew[j], pTerm->z, pTerm->n-1);
952     j += pTerm->n-1;
953     if( nSep>0 && i<nField-1 ){
954       memcpy(&zNew[j], zSep, nSep);
955       j += nSep;
956     }
957   }
958   zNew[j] = 0;
959   if( pOp->p2==0 ){
960     popStack(&pTos, nField);
961   }
962   pTos++;
963   pTos->n = nByte;
964   pTos->flags = MEM_Str|MEM_Dyn;
965   pTos->z = zNew;
966   break;
967 }
968 
969 /* Opcode: Add * * *
970 **
971 ** Pop the top two elements from the stack, add them together,
972 ** and push the result back onto the stack.  If either element
973 ** is a string then it is converted to a double using the atof()
974 ** function before the addition.
975 ** If either operand is NULL, the result is NULL.
976 */
977 /* Opcode: Multiply * * *
978 **
979 ** Pop the top two elements from the stack, multiply them together,
980 ** and push the result back onto the stack.  If either element
981 ** is a string then it is converted to a double using the atof()
982 ** function before the multiplication.
983 ** If either operand is NULL, the result is NULL.
984 */
985 /* Opcode: Subtract * * *
986 **
987 ** Pop the top two elements from the stack, subtract the
988 ** first (what was on top of the stack) from the second (the
989 ** next on stack)
990 ** and push the result back onto the stack.  If either element
991 ** is a string then it is converted to a double using the atof()
992 ** function before the subtraction.
993 ** If either operand is NULL, the result is NULL.
994 */
995 /* Opcode: Divide * * *
996 **
997 ** Pop the top two elements from the stack, divide the
998 ** first (what was on top of the stack) from the second (the
999 ** next on stack)
1000 ** and push the result back onto the stack.  If either element
1001 ** is a string then it is converted to a double using the atof()
1002 ** function before the division.  Division by zero returns NULL.
1003 ** If either operand is NULL, the result is NULL.
1004 */
1005 /* Opcode: Remainder * * *
1006 **
1007 ** Pop the top two elements from the stack, divide the
1008 ** first (what was on top of the stack) from the second (the
1009 ** next on stack)
1010 ** and push the remainder after division onto the stack.  If either element
1011 ** is a string then it is converted to a double using the atof()
1012 ** function before the division.  Division by zero returns NULL.
1013 ** If either operand is NULL, the result is NULL.
1014 */
1015 case OP_Add:
1016 case OP_Subtract:
1017 case OP_Multiply:
1018 case OP_Divide:
1019 case OP_Remainder: {
1020   Mem *pNos = &pTos[-1];
1021   assert( pNos>=p->aStack );
1022   if( ((pTos->flags | pNos->flags) & MEM_Null)!=0 ){
1023     Release(pTos);
1024     pTos--;
1025     Release(pTos);
1026     pTos->flags = MEM_Null;
1027   }else if( (pTos->flags & pNos->flags & MEM_Int)==MEM_Int ){
1028     int a, b;
1029     a = pTos->i;
1030     b = pNos->i;
1031     switch( pOp->opcode ){
1032       case OP_Add:         b += a;       break;
1033       case OP_Subtract:    b -= a;       break;
1034       case OP_Multiply:    b *= a;       break;
1035       case OP_Divide: {
1036         if( a==0 ) goto divide_by_zero;
1037         b /= a;
1038         break;
1039       }
1040       default: {
1041         if( a==0 ) goto divide_by_zero;
1042         b %= a;
1043         break;
1044       }
1045     }
1046     Release(pTos);
1047     pTos--;
1048     Release(pTos);
1049     pTos->i = b;
1050     pTos->flags = MEM_Int;
1051   }else{
1052     double a, b;
1053     Realify(pTos);
1054     Realify(pNos);
1055     a = pTos->r;
1056     b = pNos->r;
1057     switch( pOp->opcode ){
1058       case OP_Add:         b += a;       break;
1059       case OP_Subtract:    b -= a;       break;
1060       case OP_Multiply:    b *= a;       break;
1061       case OP_Divide: {
1062         if( a==0.0 ) goto divide_by_zero;
1063         b /= a;
1064         break;
1065       }
1066       default: {
1067         int ia = (int)a;
1068         int ib = (int)b;
1069         if( ia==0.0 ) goto divide_by_zero;
1070         b = ib % ia;
1071         break;
1072       }
1073     }
1074     Release(pTos);
1075     pTos--;
1076     Release(pTos);
1077     pTos->r = b;
1078     pTos->flags = MEM_Real;
1079   }
1080   break;
1081 
1082 divide_by_zero:
1083   Release(pTos);
1084   pTos--;
1085   Release(pTos);
1086   pTos->flags = MEM_Null;
1087   break;
1088 }
1089 
1090 /* Opcode: Function P1 * P3
1091 **
1092 ** Invoke a user function (P3 is a pointer to a Function structure that
1093 ** defines the function) with P1 string arguments taken from the stack.
1094 ** Pop all arguments from the stack and push back the result.
1095 **
1096 ** See also: AggFunc
1097 */
1098 case OP_Function: {
1099   int n, i;
1100   Mem *pArg;
1101   char **azArgv;
1102   sqlite_func ctx;
1103 
1104   n = pOp->p1;
1105   pArg = &pTos[1-n];
1106   azArgv = p->zArgv;
1107   for(i=0; i<n; i++, pArg++){
1108     if( pArg->flags & MEM_Null ){
1109       azArgv[i] = 0;
1110     }else{
1111       Stringify(pArg);
1112       azArgv[i] = pArg->z;
1113     }
1114   }
1115   ctx.pFunc = (FuncDef*)pOp->p3;
1116   ctx.s.flags = MEM_Null;
1117   ctx.s.z = 0;
1118   ctx.isError = 0;
1119   ctx.isStep = 0;
1120   if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
1121   (*ctx.pFunc->xFunc)(&ctx, n, (const char**)azArgv);
1122   if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
1123   popStack(&pTos, n);
1124   pTos++;
1125   *pTos = ctx.s;
1126   if( pTos->flags & MEM_Short ){
1127     pTos->z = pTos->zShort;
1128   }
1129   if( ctx.isError ){
1130     sqliteSetString(&p->zErrMsg,
1131        (pTos->flags & MEM_Str)!=0 ? pTos->z : "user function error", (char*)0);
1132     rc = SQLITE_ERROR;
1133   }
1134   break;
1135 }
1136 
1137 /* Opcode: BitAnd * * *
1138 **
1139 ** Pop the top two elements from the stack.  Convert both elements
1140 ** to integers.  Push back onto the stack the bit-wise AND of the
1141 ** two elements.
1142 ** If either operand is NULL, the result is NULL.
1143 */
1144 /* Opcode: BitOr * * *
1145 **
1146 ** Pop the top two elements from the stack.  Convert both elements
1147 ** to integers.  Push back onto the stack the bit-wise OR of the
1148 ** two elements.
1149 ** If either operand is NULL, the result is NULL.
1150 */
1151 /* Opcode: ShiftLeft * * *
1152 **
1153 ** Pop the top two elements from the stack.  Convert both elements
1154 ** to integers.  Push back onto the stack the top element shifted
1155 ** left by N bits where N is the second element on the stack.
1156 ** If either operand is NULL, the result is NULL.
1157 */
1158 /* Opcode: ShiftRight * * *
1159 **
1160 ** Pop the top two elements from the stack.  Convert both elements
1161 ** to integers.  Push back onto the stack the top element shifted
1162 ** right by N bits where N is the second element on the stack.
1163 ** If either operand is NULL, the result is NULL.
1164 */
1165 case OP_BitAnd:
1166 case OP_BitOr:
1167 case OP_ShiftLeft:
1168 case OP_ShiftRight: {
1169   Mem *pNos = &pTos[-1];
1170   int a, b;
1171 
1172   assert( pNos>=p->aStack );
1173   if( (pTos->flags | pNos->flags) & MEM_Null ){
1174     popStack(&pTos, 2);
1175     pTos++;
1176     pTos->flags = MEM_Null;
1177     break;
1178   }
1179   Integerify(pTos);
1180   Integerify(pNos);
1181   a = pTos->i;
1182   b = pNos->i;
1183   switch( pOp->opcode ){
1184     case OP_BitAnd:      a &= b;     break;
1185     case OP_BitOr:       a |= b;     break;
1186     case OP_ShiftLeft:   a <<= b;    break;
1187     case OP_ShiftRight:  a >>= b;    break;
1188     default:   /* CANT HAPPEN */     break;
1189   }
1190   assert( (pTos->flags & MEM_Dyn)==0 );
1191   assert( (pNos->flags & MEM_Dyn)==0 );
1192   pTos--;
1193   Release(pTos);
1194   pTos->i = a;
1195   pTos->flags = MEM_Int;
1196   break;
1197 }
1198 
1199 /* Opcode: AddImm  P1 * *
1200 **
1201 ** Add the value P1 to whatever is on top of the stack.  The result
1202 ** is always an integer.
1203 **
1204 ** To force the top of the stack to be an integer, just add 0.
1205 */
1206 case OP_AddImm: {
1207   assert( pTos>=p->aStack );
1208   Integerify(pTos);
1209   pTos->i += pOp->p1;
1210   break;
1211 }
1212 
1213 /* Opcode: ForceInt P1 P2 *
1214 **
1215 ** Convert the top of the stack into an integer.  If the current top of
1216 ** the stack is not numeric (meaning that is is a NULL or a string that
1217 ** does not look like an integer or floating point number) then pop the
1218 ** stack and jump to P2.  If the top of the stack is numeric then
1219 ** convert it into the least integer that is greater than or equal to its
1220 ** current value if P1==0, or to the least integer that is strictly
1221 ** greater than its current value if P1==1.
1222 */
1223 case OP_ForceInt: {
1224   int v;
1225   assert( pTos>=p->aStack );
1226   if( (pTos->flags & (MEM_Int|MEM_Real))==0
1227          && ((pTos->flags & MEM_Str)==0 || sqliteIsNumber(pTos->z)==0) ){
1228     Release(pTos);
1229     pTos--;
1230     pc = pOp->p2 - 1;
1231     break;
1232   }
1233   if( pTos->flags & MEM_Int ){
1234     v = pTos->i + (pOp->p1!=0);
1235   }else{
1236     Realify(pTos);
1237     v = (int)pTos->r;
1238     if( pTos->r>(double)v ) v++;
1239     if( pOp->p1 && pTos->r==(double)v ) v++;
1240   }
1241   Release(pTos);
1242   pTos->i = v;
1243   pTos->flags = MEM_Int;
1244   break;
1245 }
1246 
1247 /* Opcode: MustBeInt P1 P2 *
1248 **
1249 ** Force the top of the stack to be an integer.  If the top of the
1250 ** stack is not an integer and cannot be converted into an integer
1251 ** with out data loss, then jump immediately to P2, or if P2==0
1252 ** raise an SQLITE_MISMATCH exception.
1253 **
1254 ** If the top of the stack is not an integer and P2 is not zero and
1255 ** P1 is 1, then the stack is popped.  In all other cases, the depth
1256 ** of the stack is unchanged.
1257 */
1258 case OP_MustBeInt: {
1259   assert( pTos>=p->aStack );
1260   if( pTos->flags & MEM_Int ){
1261     /* Do nothing */
1262   }else if( pTos->flags & MEM_Real ){
1263     int i = (int)pTos->r;
1264     double r = (double)i;
1265     if( r!=pTos->r ){
1266       goto mismatch;
1267     }
1268     pTos->i = i;
1269   }else if( pTos->flags & MEM_Str ){
1270     int v;
1271     if( !toInt(pTos->z, &v) ){
1272       double r;
1273       if( !sqliteIsNumber(pTos->z) ){
1274         goto mismatch;
1275       }
1276       Realify(pTos);
1277       v = (int)pTos->r;
1278       r = (double)v;
1279       if( r!=pTos->r ){
1280         goto mismatch;
1281       }
1282     }
1283     pTos->i = v;
1284   }else{
1285     goto mismatch;
1286   }
1287   Release(pTos);
1288   pTos->flags = MEM_Int;
1289   break;
1290 
1291 mismatch:
1292   if( pOp->p2==0 ){
1293     rc = SQLITE_MISMATCH;
1294     goto abort_due_to_error;
1295   }else{
1296     if( pOp->p1 ) popStack(&pTos, 1);
1297     pc = pOp->p2 - 1;
1298   }
1299   break;
1300 }
1301 
1302 /* Opcode: Eq P1 P2 *
1303 **
1304 ** Pop the top two elements from the stack.  If they are equal, then
1305 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1306 **
1307 ** If either operand is NULL (and thus if the result is unknown) then
1308 ** take the jump if P1 is true.
1309 **
1310 ** If both values are numeric, they are converted to doubles using atof()
1311 ** and compared for equality that way.  Otherwise the strcmp() library
1312 ** routine is used for the comparison.  For a pure text comparison
1313 ** use OP_StrEq.
1314 **
1315 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1316 ** stack if the jump would have been taken, or a 0 if not.  Push a
1317 ** NULL if either operand was NULL.
1318 */
1319 /* Opcode: Ne P1 P2 *
1320 **
1321 ** Pop the top two elements from the stack.  If they are not equal, then
1322 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1323 **
1324 ** If either operand is NULL (and thus if the result is unknown) then
1325 ** take the jump if P1 is true.
1326 **
1327 ** If both values are numeric, they are converted to doubles using atof()
1328 ** and compared in that format.  Otherwise the strcmp() library
1329 ** routine is used for the comparison.  For a pure text comparison
1330 ** use OP_StrNe.
1331 **
1332 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1333 ** stack if the jump would have been taken, or a 0 if not.  Push a
1334 ** NULL if either operand was NULL.
1335 */
1336 /* Opcode: Lt P1 P2 *
1337 **
1338 ** Pop the top two elements from the stack.  If second element (the
1339 ** next on stack) is less than the first (the top of stack), then
1340 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1341 ** In other words, jump if NOS<TOS.
1342 **
1343 ** If either operand is NULL (and thus if the result is unknown) then
1344 ** take the jump if P1 is true.
1345 **
1346 ** If both values are numeric, they are converted to doubles using atof()
1347 ** and compared in that format.  Numeric values are always less than
1348 ** non-numeric values.  If both operands are non-numeric, the strcmp() library
1349 ** routine is used for the comparison.  For a pure text comparison
1350 ** use OP_StrLt.
1351 **
1352 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1353 ** stack if the jump would have been taken, or a 0 if not.  Push a
1354 ** NULL if either operand was NULL.
1355 */
1356 /* Opcode: Le P1 P2 *
1357 **
1358 ** Pop the top two elements from the stack.  If second element (the
1359 ** next on stack) is less than or equal to the first (the top of stack),
1360 ** then jump to instruction P2. In other words, jump if NOS<=TOS.
1361 **
1362 ** If either operand is NULL (and thus if the result is unknown) then
1363 ** take the jump if P1 is true.
1364 **
1365 ** If both values are numeric, they are converted to doubles using atof()
1366 ** and compared in that format.  Numeric values are always less than
1367 ** non-numeric values.  If both operands are non-numeric, the strcmp() library
1368 ** routine is used for the comparison.  For a pure text comparison
1369 ** use OP_StrLe.
1370 **
1371 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1372 ** stack if the jump would have been taken, or a 0 if not.  Push a
1373 ** NULL if either operand was NULL.
1374 */
1375 /* Opcode: Gt P1 P2 *
1376 **
1377 ** Pop the top two elements from the stack.  If second element (the
1378 ** next on stack) is greater than the first (the top of stack),
1379 ** then jump to instruction P2. In other words, jump if NOS>TOS.
1380 **
1381 ** If either operand is NULL (and thus if the result is unknown) then
1382 ** take the jump if P1 is true.
1383 **
1384 ** If both values are numeric, they are converted to doubles using atof()
1385 ** and compared in that format.  Numeric values are always less than
1386 ** non-numeric values.  If both operands are non-numeric, the strcmp() library
1387 ** routine is used for the comparison.  For a pure text comparison
1388 ** use OP_StrGt.
1389 **
1390 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1391 ** stack if the jump would have been taken, or a 0 if not.  Push a
1392 ** NULL if either operand was NULL.
1393 */
1394 /* Opcode: Ge P1 P2 *
1395 **
1396 ** Pop the top two elements from the stack.  If second element (the next
1397 ** on stack) is greater than or equal to the first (the top of stack),
1398 ** then jump to instruction P2. In other words, jump if NOS>=TOS.
1399 **
1400 ** If either operand is NULL (and thus if the result is unknown) then
1401 ** take the jump if P1 is true.
1402 **
1403 ** If both values are numeric, they are converted to doubles using atof()
1404 ** and compared in that format.  Numeric values are always less than
1405 ** non-numeric values.  If both operands are non-numeric, the strcmp() library
1406 ** routine is used for the comparison.  For a pure text comparison
1407 ** use OP_StrGe.
1408 **
1409 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1410 ** stack if the jump would have been taken, or a 0 if not.  Push a
1411 ** NULL if either operand was NULL.
1412 */
1413 case OP_Eq:
1414 case OP_Ne:
1415 case OP_Lt:
1416 case OP_Le:
1417 case OP_Gt:
1418 case OP_Ge: {
1419   Mem *pNos = &pTos[-1];
1420   int c, v;
1421   int ft, fn;
1422   assert( pNos>=p->aStack );
1423   ft = pTos->flags;
1424   fn = pNos->flags;
1425   if( (ft | fn) & MEM_Null ){
1426     popStack(&pTos, 2);
1427     if( pOp->p2 ){
1428       if( pOp->p1 ) pc = pOp->p2-1;
1429     }else{
1430       pTos++;
1431       pTos->flags = MEM_Null;
1432     }
1433     break;
1434   }else if( (ft & fn & MEM_Int)==MEM_Int ){
1435     c = pNos->i - pTos->i;
1436   }else if( (ft & MEM_Int)!=0 && (fn & MEM_Str)!=0 && toInt(pNos->z,&v) ){
1437     c = v - pTos->i;
1438   }else if( (fn & MEM_Int)!=0 && (ft & MEM_Str)!=0 && toInt(pTos->z,&v) ){
1439     c = pNos->i - v;
1440   }else{
1441     Stringify(pTos);
1442     Stringify(pNos);
1443     c = sqliteCompare(pNos->z, pTos->z);
1444   }
1445   switch( pOp->opcode ){
1446     case OP_Eq:    c = c==0;     break;
1447     case OP_Ne:    c = c!=0;     break;
1448     case OP_Lt:    c = c<0;      break;
1449     case OP_Le:    c = c<=0;     break;
1450     case OP_Gt:    c = c>0;      break;
1451     default:       c = c>=0;     break;
1452   }
1453   popStack(&pTos, 2);
1454   if( pOp->p2 ){
1455     if( c ) pc = pOp->p2-1;
1456   }else{
1457     pTos++;
1458     pTos->i = c;
1459     pTos->flags = MEM_Int;
1460   }
1461   break;
1462 }
1463 /* INSERT NO CODE HERE!
1464 **
1465 ** The opcode numbers are extracted from this source file by doing
1466 **
1467 **    grep '^case OP_' vdbe.c | ... >opcodes.h
1468 **
1469 ** The opcodes are numbered in the order that they appear in this file.
1470 ** But in order for the expression generating code to work right, the
1471 ** string comparison operators that follow must be numbered exactly 6
1472 ** greater than the numeric comparison opcodes above.  So no other
1473 ** cases can appear between the two.
1474 */
1475 /* Opcode: StrEq P1 P2 *
1476 **
1477 ** Pop the top two elements from the stack.  If they are equal, then
1478 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1479 **
1480 ** If either operand is NULL (and thus if the result is unknown) then
1481 ** take the jump if P1 is true.
1482 **
1483 ** The strcmp() library routine is used for the comparison.  For a
1484 ** numeric comparison, use OP_Eq.
1485 **
1486 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1487 ** stack if the jump would have been taken, or a 0 if not.  Push a
1488 ** NULL if either operand was NULL.
1489 */
1490 /* Opcode: StrNe P1 P2 *
1491 **
1492 ** Pop the top two elements from the stack.  If they are not equal, then
1493 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1494 **
1495 ** If either operand is NULL (and thus if the result is unknown) then
1496 ** take the jump if P1 is true.
1497 **
1498 ** The strcmp() library routine is used for the comparison.  For a
1499 ** numeric comparison, use OP_Ne.
1500 **
1501 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1502 ** stack if the jump would have been taken, or a 0 if not.  Push a
1503 ** NULL if either operand was NULL.
1504 */
1505 /* Opcode: StrLt P1 P2 *
1506 **
1507 ** Pop the top two elements from the stack.  If second element (the
1508 ** next on stack) is less than the first (the top of stack), then
1509 ** jump to instruction P2.  Otherwise, continue to the next instruction.
1510 ** In other words, jump if NOS<TOS.
1511 **
1512 ** If either operand is NULL (and thus if the result is unknown) then
1513 ** take the jump if P1 is true.
1514 **
1515 ** The strcmp() library routine is used for the comparison.  For a
1516 ** numeric comparison, use OP_Lt.
1517 **
1518 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1519 ** stack if the jump would have been taken, or a 0 if not.  Push a
1520 ** NULL if either operand was NULL.
1521 */
1522 /* Opcode: StrLe P1 P2 *
1523 **
1524 ** Pop the top two elements from the stack.  If second element (the
1525 ** next on stack) is less than or equal to the first (the top of stack),
1526 ** then jump to instruction P2. In other words, jump if NOS<=TOS.
1527 **
1528 ** If either operand is NULL (and thus if the result is unknown) then
1529 ** take the jump if P1 is true.
1530 **
1531 ** The strcmp() library routine is used for the comparison.  For a
1532 ** numeric comparison, use OP_Le.
1533 **
1534 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1535 ** stack if the jump would have been taken, or a 0 if not.  Push a
1536 ** NULL if either operand was NULL.
1537 */
1538 /* Opcode: StrGt P1 P2 *
1539 **
1540 ** Pop the top two elements from the stack.  If second element (the
1541 ** next on stack) is greater than the first (the top of stack),
1542 ** then jump to instruction P2. In other words, jump if NOS>TOS.
1543 **
1544 ** If either operand is NULL (and thus if the result is unknown) then
1545 ** take the jump if P1 is true.
1546 **
1547 ** The strcmp() library routine is used for the comparison.  For a
1548 ** numeric comparison, use OP_Gt.
1549 **
1550 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1551 ** stack if the jump would have been taken, or a 0 if not.  Push a
1552 ** NULL if either operand was NULL.
1553 */
1554 /* Opcode: StrGe P1 P2 *
1555 **
1556 ** Pop the top two elements from the stack.  If second element (the next
1557 ** on stack) is greater than or equal to the first (the top of stack),
1558 ** then jump to instruction P2. In other words, jump if NOS>=TOS.
1559 **
1560 ** If either operand is NULL (and thus if the result is unknown) then
1561 ** take the jump if P1 is true.
1562 **
1563 ** The strcmp() library routine is used for the comparison.  For a
1564 ** numeric comparison, use OP_Ge.
1565 **
1566 ** If P2 is zero, do not jump.  Instead, push an integer 1 onto the
1567 ** stack if the jump would have been taken, or a 0 if not.  Push a
1568 ** NULL if either operand was NULL.
1569 */
1570 case OP_StrEq:
1571 case OP_StrNe:
1572 case OP_StrLt:
1573 case OP_StrLe:
1574 case OP_StrGt:
1575 case OP_StrGe: {
1576   Mem *pNos = &pTos[-1];
1577   int c;
1578   assert( pNos>=p->aStack );
1579   if( (pNos->flags | pTos->flags) & MEM_Null ){
1580     popStack(&pTos, 2);
1581     if( pOp->p2 ){
1582       if( pOp->p1 ) pc = pOp->p2-1;
1583     }else{
1584       pTos++;
1585       pTos->flags = MEM_Null;
1586     }
1587     break;
1588   }else{
1589     Stringify(pTos);
1590     Stringify(pNos);
1591     c = strcmp(pNos->z, pTos->z);
1592   }
1593   /* The asserts on each case of the following switch are there to verify
1594   ** that string comparison opcodes are always exactly 6 greater than the
1595   ** corresponding numeric comparison opcodes.  The code generator depends
1596   ** on this fact.
1597   */
1598   switch( pOp->opcode ){
1599     case OP_StrEq:    c = c==0;    assert( pOp->opcode-6==OP_Eq );   break;
1600     case OP_StrNe:    c = c!=0;    assert( pOp->opcode-6==OP_Ne );   break;
1601     case OP_StrLt:    c = c<0;     assert( pOp->opcode-6==OP_Lt );   break;
1602     case OP_StrLe:    c = c<=0;    assert( pOp->opcode-6==OP_Le );   break;
1603     case OP_StrGt:    c = c>0;     assert( pOp->opcode-6==OP_Gt );   break;
1604     default:          c = c>=0;    assert( pOp->opcode-6==OP_Ge );   break;
1605   }
1606   popStack(&pTos, 2);
1607   if( pOp->p2 ){
1608     if( c ) pc = pOp->p2-1;
1609   }else{
1610     pTos++;
1611     pTos->flags = MEM_Int;
1612     pTos->i = c;
1613   }
1614   break;
1615 }
1616 
1617 /* Opcode: And * * *
1618 **
1619 ** Pop two values off the stack.  Take the logical AND of the
1620 ** two values and push the resulting boolean value back onto the
1621 ** stack.
1622 */
1623 /* Opcode: Or * * *
1624 **
1625 ** Pop two values off the stack.  Take the logical OR of the
1626 ** two values and push the resulting boolean value back onto the
1627 ** stack.
1628 */
1629 case OP_And:
1630 case OP_Or: {
1631   Mem *pNos = &pTos[-1];
1632   int v1, v2;    /* 0==TRUE, 1==FALSE, 2==UNKNOWN or NULL */
1633 
1634   assert( pNos>=p->aStack );
1635   if( pTos->flags & MEM_Null ){
1636     v1 = 2;
1637   }else{
1638     Integerify(pTos);
1639     v1 = pTos->i==0;
1640   }
1641   if( pNos->flags & MEM_Null ){
1642     v2 = 2;
1643   }else{
1644     Integerify(pNos);
1645     v2 = pNos->i==0;
1646   }
1647   if( pOp->opcode==OP_And ){
1648     static const unsigned char and_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
1649     v1 = and_logic[v1*3+v2];
1650   }else{
1651     static const unsigned char or_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
1652     v1 = or_logic[v1*3+v2];
1653   }
1654   popStack(&pTos, 2);
1655   pTos++;
1656   if( v1==2 ){
1657     pTos->flags = MEM_Null;
1658   }else{
1659     pTos->i = v1==0;
1660     pTos->flags = MEM_Int;
1661   }
1662   break;
1663 }
1664 
1665 /* Opcode: Negative * * *
1666 **
1667 ** Treat the top of the stack as a numeric quantity.  Replace it
1668 ** with its additive inverse.  If the top of the stack is NULL
1669 ** its value is unchanged.
1670 */
1671 /* Opcode: AbsValue * * *
1672 **
1673 ** Treat the top of the stack as a numeric quantity.  Replace it
1674 ** with its absolute value. If the top of the stack is NULL
1675 ** its value is unchanged.
1676 */
1677 case OP_Negative:
1678 case OP_AbsValue: {
1679   assert( pTos>=p->aStack );
1680   if( pTos->flags & MEM_Real ){
1681     Release(pTos);
1682     if( pOp->opcode==OP_Negative || pTos->r<0.0 ){
1683       pTos->r = -pTos->r;
1684     }
1685     pTos->flags = MEM_Real;
1686   }else if( pTos->flags & MEM_Int ){
1687     Release(pTos);
1688     if( pOp->opcode==OP_Negative || pTos->i<0 ){
1689       pTos->i = -pTos->i;
1690     }
1691     pTos->flags = MEM_Int;
1692   }else if( pTos->flags & MEM_Null ){
1693     /* Do nothing */
1694   }else{
1695     Realify(pTos);
1696     Release(pTos);
1697     if( pOp->opcode==OP_Negative || pTos->r<0.0 ){
1698       pTos->r = -pTos->r;
1699     }
1700     pTos->flags = MEM_Real;
1701   }
1702   break;
1703 }
1704 
1705 /* Opcode: Not * * *
1706 **
1707 ** Interpret the top of the stack as a boolean value.  Replace it
1708 ** with its complement.  If the top of the stack is NULL its value
1709 ** is unchanged.
1710 */
1711 case OP_Not: {
1712   assert( pTos>=p->aStack );
1713   if( pTos->flags & MEM_Null ) break;  /* Do nothing to NULLs */
1714   Integerify(pTos);
1715   Release(pTos);
1716   pTos->i = !pTos->i;
1717   pTos->flags = MEM_Int;
1718   break;
1719 }
1720 
1721 /* Opcode: BitNot * * *
1722 **
1723 ** Interpret the top of the stack as an value.  Replace it
1724 ** with its ones-complement.  If the top of the stack is NULL its
1725 ** value is unchanged.
1726 */
1727 case OP_BitNot: {
1728   assert( pTos>=p->aStack );
1729   if( pTos->flags & MEM_Null ) break;  /* Do nothing to NULLs */
1730   Integerify(pTos);
1731   Release(pTos);
1732   pTos->i = ~pTos->i;
1733   pTos->flags = MEM_Int;
1734   break;
1735 }
1736 
1737 /* Opcode: Noop * * *
1738 **
1739 ** Do nothing.  This instruction is often useful as a jump
1740 ** destination.
1741 */
1742 case OP_Noop: {
1743   break;
1744 }
1745 
1746 /* Opcode: If P1 P2 *
1747 **
1748 ** Pop a single boolean from the stack.  If the boolean popped is
1749 ** true, then jump to p2.  Otherwise continue to the next instruction.
1750 ** An integer is false if zero and true otherwise.  A string is
1751 ** false if it has zero length and true otherwise.
1752 **
1753 ** If the value popped of the stack is NULL, then take the jump if P1
1754 ** is true and fall through if P1 is false.
1755 */
1756 /* Opcode: IfNot P1 P2 *
1757 **
1758 ** Pop a single boolean from the stack.  If the boolean popped is
1759 ** false, then jump to p2.  Otherwise continue to the next instruction.
1760 ** An integer is false if zero and true otherwise.  A string is
1761 ** false if it has zero length and true otherwise.
1762 **
1763 ** If the value popped of the stack is NULL, then take the jump if P1
1764 ** is true and fall through if P1 is false.
1765 */
1766 case OP_If:
1767 case OP_IfNot: {
1768   int c;
1769   assert( pTos>=p->aStack );
1770   if( pTos->flags & MEM_Null ){
1771     c = pOp->p1;
1772   }else{
1773     Integerify(pTos);
1774     c = pTos->i;
1775     if( pOp->opcode==OP_IfNot ) c = !c;
1776   }
1777   assert( (pTos->flags & MEM_Dyn)==0 );
1778   pTos--;
1779   if( c ) pc = pOp->p2-1;
1780   break;
1781 }
1782 
1783 /* Opcode: IsNull P1 P2 *
1784 **
1785 ** If any of the top abs(P1) values on the stack are NULL, then jump
1786 ** to P2.  Pop the stack P1 times if P1>0.   If P1<0 leave the stack
1787 ** unchanged.
1788 */
1789 case OP_IsNull: {
1790   int i, cnt;
1791   Mem *pTerm;
1792   cnt = pOp->p1;
1793   if( cnt<0 ) cnt = -cnt;
1794   pTerm = &pTos[1-cnt];
1795   assert( pTerm>=p->aStack );
1796   for(i=0; i<cnt; i++, pTerm++){
1797     if( pTerm->flags & MEM_Null ){
1798       pc = pOp->p2-1;
1799       break;
1800     }
1801   }
1802   if( pOp->p1>0 ) popStack(&pTos, cnt);
1803   break;
1804 }
1805 
1806 /* Opcode: NotNull P1 P2 *
1807 **
1808 ** Jump to P2 if the top P1 values on the stack are all not NULL.  Pop the
1809 ** stack if P1 times if P1 is greater than zero.  If P1 is less than
1810 ** zero then leave the stack unchanged.
1811 */
1812 case OP_NotNull: {
1813   int i, cnt;
1814   cnt = pOp->p1;
1815   if( cnt<0 ) cnt = -cnt;
1816   assert( &pTos[1-cnt] >= p->aStack );
1817   for(i=0; i<cnt && (pTos[1+i-cnt].flags & MEM_Null)==0; i++){}
1818   if( i>=cnt ) pc = pOp->p2-1;
1819   if( pOp->p1>0 ) popStack(&pTos, cnt);
1820   break;
1821 }
1822 
1823 /* Opcode: MakeRecord P1 P2 *
1824 **
1825 ** Convert the top P1 entries of the stack into a single entry
1826 ** suitable for use as a data record in a database table.  The
1827 ** details of the format are irrelevant as long as the OP_Column
1828 ** opcode can decode the record later.  Refer to source code
1829 ** comments for the details of the record format.
1830 **
1831 ** If P2 is true (non-zero) and one or more of the P1 entries
1832 ** that go into building the record is NULL, then add some extra
1833 ** bytes to the record to make it distinct for other entries created
1834 ** during the same run of the VDBE.  The extra bytes added are a
1835 ** counter that is reset with each run of the VDBE, so records
1836 ** created this way will not necessarily be distinct across runs.
1837 ** But they should be distinct for transient tables (created using
1838 ** OP_OpenTemp) which is what they are intended for.
1839 **
1840 ** (Later:) The P2==1 option was intended to make NULLs distinct
1841 ** for the UNION operator.  But I have since discovered that NULLs
1842 ** are indistinct for UNION.  So this option is never used.
1843 */
1844 case OP_MakeRecord: {
1845   char *zNewRecord;
1846   int nByte;
1847   int nField;
1848   int i, j;
1849   int idxWidth;
1850   u32 addr;
1851   Mem *pRec;
1852   int addUnique = 0;   /* True to cause bytes to be added to make the
1853                        ** generated record distinct */
1854   char zTemp[NBFS];    /* Temp space for small records */
1855 
1856   /* Assuming the record contains N fields, the record format looks
1857   ** like this:
1858   **
1859   **   -------------------------------------------------------------------
1860   **   | idx0 | idx1 | ... | idx(N-1) | idx(N) | data0 | ... | data(N-1) |
1861   **   -------------------------------------------------------------------
1862   **
1863   ** All data fields are converted to strings before being stored and
1864   ** are stored with their null terminators.  NULL entries omit the
1865   ** null terminator.  Thus an empty string uses 1 byte and a NULL uses
1866   ** zero bytes.  Data(0) is taken from the lowest element of the stack
1867   ** and data(N-1) is the top of the stack.
1868   **
1869   ** Each of the idx() entries is either 1, 2, or 3 bytes depending on
1870   ** how big the total record is.  Idx(0) contains the offset to the start
1871   ** of data(0).  Idx(k) contains the offset to the start of data(k).
1872   ** Idx(N) contains the total number of bytes in the record.
1873   */
1874   nField = pOp->p1;
1875   pRec = &pTos[1-nField];
1876   assert( pRec>=p->aStack );
1877   nByte = 0;
1878   for(i=0; i<nField; i++, pRec++){
1879     if( pRec->flags & MEM_Null ){
1880       addUnique = pOp->p2;
1881     }else{
1882       Stringify(pRec);
1883       nByte += pRec->n;
1884     }
1885   }
1886   if( addUnique ) nByte += sizeof(p->uniqueCnt);
1887   if( nByte + nField + 1 < 256 ){
1888     idxWidth = 1;
1889   }else if( nByte + 2*nField + 2 < 65536 ){
1890     idxWidth = 2;
1891   }else{
1892     idxWidth = 3;
1893   }
1894   nByte += idxWidth*(nField + 1);
1895   if( nByte>MAX_BYTES_PER_ROW ){
1896     rc = SQLITE_TOOBIG;
1897     goto abort_due_to_error;
1898   }
1899   if( nByte<=NBFS ){
1900     zNewRecord = zTemp;
1901   }else{
1902     zNewRecord = sqliteMallocRaw( nByte );
1903     if( zNewRecord==0 ) goto no_mem;
1904   }
1905   j = 0;
1906   addr = idxWidth*(nField+1) + addUnique*sizeof(p->uniqueCnt);
1907   for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){
1908     zNewRecord[j++] = addr & 0xff;
1909     if( idxWidth>1 ){
1910       zNewRecord[j++] = (addr>>8)&0xff;
1911       if( idxWidth>2 ){
1912         zNewRecord[j++] = (addr>>16)&0xff;
1913       }
1914     }
1915     if( (pRec->flags & MEM_Null)==0 ){
1916       addr += pRec->n;
1917     }
1918   }
1919   zNewRecord[j++] = addr & 0xff;
1920   if( idxWidth>1 ){
1921     zNewRecord[j++] = (addr>>8)&0xff;
1922     if( idxWidth>2 ){
1923       zNewRecord[j++] = (addr>>16)&0xff;
1924     }
1925   }
1926   if( addUnique ){
1927     memcpy(&zNewRecord[j], &p->uniqueCnt, sizeof(p->uniqueCnt));
1928     p->uniqueCnt++;
1929     j += sizeof(p->uniqueCnt);
1930   }
1931   for(i=0, pRec=&pTos[1-nField]; i<nField; i++, pRec++){
1932     if( (pRec->flags & MEM_Null)==0 ){
1933       memcpy(&zNewRecord[j], pRec->z, pRec->n);
1934       j += pRec->n;
1935     }
1936   }
1937   popStack(&pTos, nField);
1938   pTos++;
1939   pTos->n = nByte;
1940   if( nByte<=NBFS ){
1941     assert( zNewRecord==zTemp );
1942     memcpy(pTos->zShort, zTemp, nByte);
1943     pTos->z = pTos->zShort;
1944     pTos->flags = MEM_Str | MEM_Short;
1945   }else{
1946     assert( zNewRecord!=zTemp );
1947     pTos->z = zNewRecord;
1948     pTos->flags = MEM_Str | MEM_Dyn;
1949   }
1950   break;
1951 }
1952 
1953 /* Opcode: MakeKey P1 P2 P3
1954 **
1955 ** Convert the top P1 entries of the stack into a single entry suitable
1956 ** for use as the key in an index.  The top P1 records are
1957 ** converted to strings and merged.  The null-terminators
1958 ** are retained and used as separators.
1959 ** The lowest entry in the stack is the first field and the top of the
1960 ** stack becomes the last.
1961 **
1962 ** If P2 is not zero, then the original entries remain on the stack
1963 ** and the new key is pushed on top.  If P2 is zero, the original
1964 ** data is popped off the stack first then the new key is pushed
1965 ** back in its place.
1966 **
1967 ** P3 is a string that is P1 characters long.  Each character is either
1968 ** an 'n' or a 't' to indicates if the argument should be intepreted as
1969 ** numeric or text type.  The first character of P3 corresponds to the
1970 ** lowest element on the stack.  If P3 is NULL then all arguments are
1971 ** assumed to be of the numeric type.
1972 **
1973 ** The type makes a difference in that text-type fields may not be
1974 ** introduced by 'b' (as described in the next paragraph).  The
1975 ** first character of a text-type field must be either 'a' (if it is NULL)
1976 ** or 'c'.  Numeric fields will be introduced by 'b' if their content
1977 ** looks like a well-formed number.  Otherwise the 'a' or 'c' will be
1978 ** used.
1979 **
1980 ** The key is a concatenation of fields.  Each field is terminated by
1981 ** a single 0x00 character.  A NULL field is introduced by an 'a' and
1982 ** is followed immediately by its 0x00 terminator.  A numeric field is
1983 ** introduced by a single character 'b' and is followed by a sequence
1984 ** of characters that represent the number such that a comparison of
1985 ** the character string using memcpy() sorts the numbers in numerical
1986 ** order.  The character strings for numbers are generated using the
1987 ** sqliteRealToSortable() function.  A text field is introduced by a
1988 ** 'c' character and is followed by the exact text of the field.  The
1989 ** use of an 'a', 'b', or 'c' character at the beginning of each field
1990 ** guarantees that NULLs sort before numbers and that numbers sort
1991 ** before text.  0x00 characters do not occur except as separators
1992 ** between fields.
1993 **
1994 ** See also: MakeIdxKey, SortMakeKey
1995 */
1996 /* Opcode: MakeIdxKey P1 P2 P3
1997 **
1998 ** Convert the top P1 entries of the stack into a single entry suitable
1999 ** for use as the key in an index.  In addition, take one additional integer
2000 ** off of the stack, treat that integer as a four-byte record number, and
2001 ** append the four bytes to the key.  Thus a total of P1+1 entries are
2002 ** popped from the stack for this instruction and a single entry is pushed
2003 ** back.  The first P1 entries that are popped are strings and the last
2004 ** entry (the lowest on the stack) is an integer record number.
2005 **
2006 ** The converstion of the first P1 string entries occurs just like in
2007 ** MakeKey.  Each entry is separated from the others by a null.
2008 ** The entire concatenation is null-terminated.  The lowest entry
2009 ** in the stack is the first field and the top of the stack becomes the
2010 ** last.
2011 **
2012 ** If P2 is not zero and one or more of the P1 entries that go into the
2013 ** generated key is NULL, then jump to P2 after the new key has been
2014 ** pushed on the stack.  In other words, jump to P2 if the key is
2015 ** guaranteed to be unique.  This jump can be used to skip a subsequent
2016 ** uniqueness test.
2017 **
2018 ** P3 is a string that is P1 characters long.  Each character is either
2019 ** an 'n' or a 't' to indicates if the argument should be numeric or
2020 ** text.  The first character corresponds to the lowest element on the
2021 ** stack.  If P3 is null then all arguments are assumed to be numeric.
2022 **
2023 ** See also:  MakeKey, SortMakeKey
2024 */
2025 case OP_MakeIdxKey:
2026 case OP_MakeKey: {
2027   char *zNewKey;
2028   int nByte;
2029   int nField;
2030   int addRowid;
2031   int i, j;
2032   int containsNull = 0;
2033   Mem *pRec;
2034   char zTemp[NBFS];
2035 
2036   addRowid = pOp->opcode==OP_MakeIdxKey;
2037   nField = pOp->p1;
2038   pRec = &pTos[1-nField];
2039   assert( pRec>=p->aStack );
2040   nByte = 0;
2041   for(j=0, i=0; i<nField; i++, j++, pRec++){
2042     int flags = pRec->flags;
2043     int len;
2044     char *z;
2045     if( flags & MEM_Null ){
2046       nByte += 2;
2047       containsNull = 1;
2048     }else if( pOp->p3 && pOp->p3[j]=='t' ){
2049       Stringify(pRec);
2050       pRec->flags &= ~(MEM_Int|MEM_Real);
2051       nByte += pRec->n+1;
2052     }else if( (flags & (MEM_Real|MEM_Int))!=0 || sqliteIsNumber(pRec->z) ){
2053       if( (flags & (MEM_Real|MEM_Int))==MEM_Int ){
2054         pRec->r = pRec->i;
2055       }else if( (flags & (MEM_Real|MEM_Int))==0 ){
2056         pRec->r = sqliteAtoF(pRec->z, 0);
2057       }
2058       Release(pRec);
2059       z = pRec->zShort;
2060       sqliteRealToSortable(pRec->r, z);
2061       len = strlen(z);
2062       pRec->z = 0;
2063       pRec->flags = MEM_Real;
2064       pRec->n = len+1;
2065       nByte += pRec->n+1;
2066     }else{
2067       nByte += pRec->n+1;
2068     }
2069   }
2070   if( nByte+sizeof(u32)>MAX_BYTES_PER_ROW ){
2071     rc = SQLITE_TOOBIG;
2072     goto abort_due_to_error;
2073   }
2074   if( addRowid ) nByte += sizeof(u32);
2075   if( nByte<=NBFS ){
2076     zNewKey = zTemp;
2077   }else{
2078     zNewKey = sqliteMallocRaw( nByte );
2079     if( zNewKey==0 ) goto no_mem;
2080   }
2081   j = 0;
2082   pRec = &pTos[1-nField];
2083   for(i=0; i<nField; i++, pRec++){
2084     if( pRec->flags & MEM_Null ){
2085       zNewKey[j++] = 'a';
2086       zNewKey[j++] = 0;
2087     }else if( pRec->flags==MEM_Real ){
2088       zNewKey[j++] = 'b';
2089       memcpy(&zNewKey[j], pRec->zShort, pRec->n);
2090       j += pRec->n;
2091     }else{
2092       assert( pRec->flags & MEM_Str );
2093       zNewKey[j++] = 'c';
2094       memcpy(&zNewKey[j], pRec->z, pRec->n);
2095       j += pRec->n;
2096     }
2097   }
2098   if( addRowid ){
2099     u32 iKey;
2100     pRec = &pTos[-nField];
2101     assert( pRec>=p->aStack );
2102     Integerify(pRec);
2103     iKey = intToKey(pRec->i);
2104     memcpy(&zNewKey[j], &iKey, sizeof(u32));
2105     popStack(&pTos, nField+1);
2106     if( pOp->p2 && containsNull ) pc = pOp->p2 - 1;
2107   }else{
2108     if( pOp->p2==0 ) popStack(&pTos, nField);
2109   }
2110   pTos++;
2111   pTos->n = nByte;
2112   if( nByte<=NBFS ){
2113     assert( zNewKey==zTemp );
2114     pTos->z = pTos->zShort;
2115     memcpy(pTos->zShort, zTemp, nByte);
2116     pTos->flags = MEM_Str | MEM_Short;
2117   }else{
2118     pTos->z = zNewKey;
2119     pTos->flags = MEM_Str | MEM_Dyn;
2120   }
2121   break;
2122 }
2123 
2124 /* Opcode: IncrKey * * *
2125 **
2126 ** The top of the stack should contain an index key generated by
2127 ** The MakeKey opcode.  This routine increases the least significant
2128 ** byte of that key by one.  This is used so that the MoveTo opcode
2129 ** will move to the first entry greater than the key rather than to
2130 ** the key itself.
2131 */
2132 case OP_IncrKey: {
2133   assert( pTos>=p->aStack );
2134   /* The IncrKey opcode is only applied to keys generated by
2135   ** MakeKey or MakeIdxKey and the results of those operands
2136   ** are always dynamic strings or zShort[] strings.  So we
2137   ** are always free to modify the string in place.
2138   */
2139   assert( pTos->flags & (MEM_Dyn|MEM_Short) );
2140   pTos->z[pTos->n-1]++;
2141   break;
2142 }
2143 
2144 /* Opcode: Checkpoint P1 * *
2145 **
2146 ** Begin a checkpoint.  A checkpoint is the beginning of a operation that
2147 ** is part of a larger transaction but which might need to be rolled back
2148 ** itself without effecting the containing transaction.  A checkpoint will
2149 ** be automatically committed or rollback when the VDBE halts.
2150 **
2151 ** The checkpoint is begun on the database file with index P1.  The main
2152 ** database file has an index of 0 and the file used for temporary tables
2153 ** has an index of 1.
2154 */
2155 case OP_Checkpoint: {
2156   int i = pOp->p1;
2157   if( i>=0 && i<db->nDb && db->aDb[i].pBt && db->aDb[i].inTrans==1 ){
2158     rc = sqliteBtreeBeginCkpt(db->aDb[i].pBt);
2159     if( rc==SQLITE_OK ) db->aDb[i].inTrans = 2;
2160   }
2161   break;
2162 }
2163 
2164 /* Opcode: Transaction P1 * *
2165 **
2166 ** Begin a transaction.  The transaction ends when a Commit or Rollback
2167 ** opcode is encountered.  Depending on the ON CONFLICT setting, the
2168 ** transaction might also be rolled back if an error is encountered.
2169 **
2170 ** P1 is the index of the database file on which the transaction is
2171 ** started.  Index 0 is the main database file and index 1 is the
2172 ** file used for temporary tables.
2173 **
2174 ** A write lock is obtained on the database file when a transaction is
2175 ** started.  No other process can read or write the file while the
2176 ** transaction is underway.  Starting a transaction also creates a
2177 ** rollback journal.  A transaction must be started before any changes
2178 ** can be made to the database.
2179 */
2180 case OP_Transaction: {
2181   int busy = 1;
2182   int i = pOp->p1;
2183   assert( i>=0 && i<db->nDb );
2184   if( db->aDb[i].inTrans ) break;
2185   while( db->aDb[i].pBt!=0 && busy ){
2186     rc = sqliteBtreeBeginTrans(db->aDb[i].pBt);
2187     switch( rc ){
2188       case SQLITE_BUSY: {
2189         if( db->xBusyCallback==0 ){
2190           p->pc = pc;
2191           p->undoTransOnError = 1;
2192           p->rc = SQLITE_BUSY;
2193           p->pTos = pTos;
2194           return SQLITE_BUSY;
2195         }else if( (*db->xBusyCallback)(db->pBusyArg, "", busy++)==0 ){
2196           sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
2197           busy = 0;
2198         }
2199         break;
2200       }
2201       case SQLITE_READONLY: {
2202         rc = SQLITE_OK;
2203         /* Fall thru into the next case */
2204       }
2205       case SQLITE_OK: {
2206         p->inTempTrans = 0;
2207         busy = 0;
2208         break;
2209       }
2210       default: {
2211         goto abort_due_to_error;
2212       }
2213     }
2214   }
2215   db->aDb[i].inTrans = 1;
2216   p->undoTransOnError = 1;
2217   break;
2218 }
2219 
2220 /* Opcode: Commit * * *
2221 **
2222 ** Cause all modifications to the database that have been made since the
2223 ** last Transaction to actually take effect.  No additional modifications
2224 ** are allowed until another transaction is started.  The Commit instruction
2225 ** deletes the journal file and releases the write lock on the database.
2226 ** A read lock continues to be held if there are still cursors open.
2227 */
2228 case OP_Commit: {
2229   int i;
2230   if( db->xCommitCallback!=0 ){
2231     if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
2232     if( db->xCommitCallback(db->pCommitArg)!=0 ){
2233       rc = SQLITE_CONSTRAINT;
2234     }
2235     if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
2236   }
2237   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
2238     if( db->aDb[i].inTrans ){
2239       rc = sqliteBtreeCommit(db->aDb[i].pBt);
2240       db->aDb[i].inTrans = 0;
2241     }
2242   }
2243   if( rc==SQLITE_OK ){
2244     sqliteCommitInternalChanges(db);
2245   }else{
2246     sqliteRollbackAll(db);
2247   }
2248   break;
2249 }
2250 
2251 /* Opcode: Rollback P1 * *
2252 **
2253 ** Cause all modifications to the database that have been made since the
2254 ** last Transaction to be undone. The database is restored to its state
2255 ** before the Transaction opcode was executed.  No additional modifications
2256 ** are allowed until another transaction is started.
2257 **
2258 ** P1 is the index of the database file that is committed.  An index of 0
2259 ** is used for the main database and an index of 1 is used for the file used
2260 ** to hold temporary tables.
2261 **
2262 ** This instruction automatically closes all cursors and releases both
2263 ** the read and write locks on the indicated database.
2264 */
2265 case OP_Rollback: {
2266   sqliteRollbackAll(db);
2267   break;
2268 }
2269 
2270 /* Opcode: ReadCookie P1 P2 *
2271 **
2272 ** Read cookie number P2 from database P1 and push it onto the stack.
2273 ** P2==0 is the schema version.  P2==1 is the database format.
2274 ** P2==2 is the recommended pager cache size, and so forth.  P1==0 is
2275 ** the main database file and P1==1 is the database file used to store
2276 ** temporary tables.
2277 **
2278 ** There must be a read-lock on the database (either a transaction
2279 ** must be started or there must be an open cursor) before
2280 ** executing this instruction.
2281 */
2282 case OP_ReadCookie: {
2283   int aMeta[SQLITE_N_BTREE_META];
2284   assert( pOp->p2<SQLITE_N_BTREE_META );
2285   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2286   assert( db->aDb[pOp->p1].pBt!=0 );
2287   rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
2288   pTos++;
2289   pTos->i = aMeta[1+pOp->p2];
2290   pTos->flags = MEM_Int;
2291   break;
2292 }
2293 
2294 /* Opcode: SetCookie P1 P2 *
2295 **
2296 ** Write the top of the stack into cookie number P2 of database P1.
2297 ** P2==0 is the schema version.  P2==1 is the database format.
2298 ** P2==2 is the recommended pager cache size, and so forth.  P1==0 is
2299 ** the main database file and P1==1 is the database file used to store
2300 ** temporary tables.
2301 **
2302 ** A transaction must be started before executing this opcode.
2303 */
2304 case OP_SetCookie: {
2305   int aMeta[SQLITE_N_BTREE_META];
2306   assert( pOp->p2<SQLITE_N_BTREE_META );
2307   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2308   assert( db->aDb[pOp->p1].pBt!=0 );
2309   assert( pTos>=p->aStack );
2310   Integerify(pTos)
2311   rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
2312   if( rc==SQLITE_OK ){
2313     aMeta[1+pOp->p2] = pTos->i;
2314     rc = sqliteBtreeUpdateMeta(db->aDb[pOp->p1].pBt, aMeta);
2315   }
2316   Release(pTos);
2317   pTos--;
2318   break;
2319 }
2320 
2321 /* Opcode: VerifyCookie P1 P2 *
2322 **
2323 ** Check the value of global database parameter number 0 (the
2324 ** schema version) and make sure it is equal to P2.
2325 ** P1 is the database number which is 0 for the main database file
2326 ** and 1 for the file holding temporary tables and some higher number
2327 ** for auxiliary databases.
2328 **
2329 ** The cookie changes its value whenever the database schema changes.
2330 ** This operation is used to detect when that the cookie has changed
2331 ** and that the current process needs to reread the schema.
2332 **
2333 ** Either a transaction needs to have been started or an OP_Open needs
2334 ** to be executed (to establish a read lock) before this opcode is
2335 ** invoked.
2336 */
2337 case OP_VerifyCookie: {
2338   int aMeta[SQLITE_N_BTREE_META];
2339   assert( pOp->p1>=0 && pOp->p1<db->nDb );
2340   rc = sqliteBtreeGetMeta(db->aDb[pOp->p1].pBt, aMeta);
2341   if( rc==SQLITE_OK && aMeta[1]!=pOp->p2 ){
2342     sqliteSetString(&p->zErrMsg, "database schema has changed", (char*)0);
2343     rc = SQLITE_SCHEMA;
2344   }
2345   break;
2346 }
2347 
2348 /* Opcode: OpenRead P1 P2 P3
2349 **
2350 ** Open a read-only cursor for the database table whose root page is
2351 ** P2 in a database file.  The database file is determined by an
2352 ** integer from the top of the stack.  0 means the main database and
2353 ** 1 means the database used for temporary tables.  Give the new
2354 ** cursor an identifier of P1.  The P1 values need not be contiguous
2355 ** but all P1 values should be small integers.  It is an error for
2356 ** P1 to be negative.
2357 **
2358 ** If P2==0 then take the root page number from the next of the stack.
2359 **
2360 ** There will be a read lock on the database whenever there is an
2361 ** open cursor.  If the database was unlocked prior to this instruction
2362 ** then a read lock is acquired as part of this instruction.  A read
2363 ** lock allows other processes to read the database but prohibits
2364 ** any other process from modifying the database.  The read lock is
2365 ** released when all cursors are closed.  If this instruction attempts
2366 ** to get a read lock but fails, the script terminates with an
2367 ** SQLITE_BUSY error code.
2368 **
2369 ** The P3 value is the name of the table or index being opened.
2370 ** The P3 value is not actually used by this opcode and may be
2371 ** omitted.  But the code generator usually inserts the index or
2372 ** table name into P3 to make the code easier to read.
2373 **
2374 ** See also OpenWrite.
2375 */
2376 /* Opcode: OpenWrite P1 P2 P3
2377 **
2378 ** Open a read/write cursor named P1 on the table or index whose root
2379 ** page is P2.  If P2==0 then take the root page number from the stack.
2380 **
2381 ** The P3 value is the name of the table or index being opened.
2382 ** The P3 value is not actually used by this opcode and may be
2383 ** omitted.  But the code generator usually inserts the index or
2384 ** table name into P3 to make the code easier to read.
2385 **
2386 ** This instruction works just like OpenRead except that it opens the cursor
2387 ** in read/write mode.  For a given table, there can be one or more read-only
2388 ** cursors or a single read/write cursor but not both.
2389 **
2390 ** See also OpenRead.
2391 */
2392 case OP_OpenRead:
2393 case OP_OpenWrite: {
2394   int busy = 0;
2395   int i = pOp->p1;
2396   int p2 = pOp->p2;
2397   int wrFlag;
2398   Btree *pX;
2399   int iDb;
2400 
2401   assert( pTos>=p->aStack );
2402   Integerify(pTos);
2403   iDb = pTos->i;
2404   pTos--;
2405   assert( iDb>=0 && iDb<db->nDb );
2406   pX = db->aDb[iDb].pBt;
2407   assert( pX!=0 );
2408   wrFlag = pOp->opcode==OP_OpenWrite;
2409   if( p2<=0 ){
2410     assert( pTos>=p->aStack );
2411     Integerify(pTos);
2412     p2 = pTos->i;
2413     pTos--;
2414     if( p2<2 ){
2415       sqliteSetString(&p->zErrMsg, "root page number less than 2", (char*)0);
2416       rc = SQLITE_INTERNAL;
2417       break;
2418     }
2419   }
2420   assert( i>=0 );
2421   if( expandCursorArraySize(p, i) ) goto no_mem;
2422   sqliteVdbeCleanupCursor(&p->aCsr[i]);
2423   memset(&p->aCsr[i], 0, sizeof(Cursor));
2424   p->aCsr[i].nullRow = 1;
2425   if( pX==0 ) break;
2426   do{
2427     rc = sqliteBtreeCursor(pX, p2, wrFlag, &p->aCsr[i].pCursor);
2428     switch( rc ){
2429       case SQLITE_BUSY: {
2430         if( db->xBusyCallback==0 ){
2431           p->pc = pc;
2432           p->rc = SQLITE_BUSY;
2433           p->pTos = &pTos[1 + (pOp->p2<=0)]; /* Operands must remain on stack */
2434           return SQLITE_BUSY;
2435         }else if( (*db->xBusyCallback)(db->pBusyArg, pOp->p3, ++busy)==0 ){
2436           sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
2437           busy = 0;
2438         }
2439         break;
2440       }
2441       case SQLITE_OK: {
2442         busy = 0;
2443         break;
2444       }
2445       default: {
2446         goto abort_due_to_error;
2447       }
2448     }
2449   }while( busy );
2450   break;
2451 }
2452 
2453 /* Opcode: OpenTemp P1 P2 *
2454 **
2455 ** Open a new cursor to a transient table.
2456 ** The transient cursor is always opened read/write even if
2457 ** the main database is read-only.  The transient table is deleted
2458 ** automatically when the cursor is closed.
2459 **
2460 ** The cursor points to a BTree table if P2==0 and to a BTree index
2461 ** if P2==1.  A BTree table must have an integer key and can have arbitrary
2462 ** data.  A BTree index has no data but can have an arbitrary key.
2463 **
2464 ** This opcode is used for tables that exist for the duration of a single
2465 ** SQL statement only.  Tables created using CREATE TEMPORARY TABLE
2466 ** are opened using OP_OpenRead or OP_OpenWrite.  "Temporary" in the
2467 ** context of this opcode means for the duration of a single SQL statement
2468 ** whereas "Temporary" in the context of CREATE TABLE means for the duration
2469 ** of the connection to the database.  Same word; different meanings.
2470 */
2471 case OP_OpenTemp: {
2472   int i = pOp->p1;
2473   Cursor *pCx;
2474   assert( i>=0 );
2475   if( expandCursorArraySize(p, i) ) goto no_mem;
2476   pCx = &p->aCsr[i];
2477   sqliteVdbeCleanupCursor(pCx);
2478   memset(pCx, 0, sizeof(*pCx));
2479   pCx->nullRow = 1;
2480   rc = sqliteBtreeFactory(db, 0, 1, TEMP_PAGES, &pCx->pBt);
2481 
2482   if( rc==SQLITE_OK ){
2483     rc = sqliteBtreeBeginTrans(pCx->pBt);
2484   }
2485   if( rc==SQLITE_OK ){
2486     if( pOp->p2 ){
2487       int pgno;
2488       rc = sqliteBtreeCreateIndex(pCx->pBt, &pgno);
2489       if( rc==SQLITE_OK ){
2490         rc = sqliteBtreeCursor(pCx->pBt, pgno, 1, &pCx->pCursor);
2491       }
2492     }else{
2493       rc = sqliteBtreeCursor(pCx->pBt, 2, 1, &pCx->pCursor);
2494     }
2495   }
2496   break;
2497 }
2498 
2499 /* Opcode: OpenPseudo P1 * *
2500 **
2501 ** Open a new cursor that points to a fake table that contains a single
2502 ** row of data.  Any attempt to write a second row of data causes the
2503 ** first row to be deleted.  All data is deleted when the cursor is
2504 ** closed.
2505 **
2506 ** A pseudo-table created by this opcode is useful for holding the
2507 ** NEW or OLD tables in a trigger.
2508 */
2509 case OP_OpenPseudo: {
2510   int i = pOp->p1;
2511   Cursor *pCx;
2512   assert( i>=0 );
2513   if( expandCursorArraySize(p, i) ) goto no_mem;
2514   pCx = &p->aCsr[i];
2515   sqliteVdbeCleanupCursor(pCx);
2516   memset(pCx, 0, sizeof(*pCx));
2517   pCx->nullRow = 1;
2518   pCx->pseudoTable = 1;
2519   break;
2520 }
2521 
2522 /* Opcode: Close P1 * *
2523 **
2524 ** Close a cursor previously opened as P1.  If P1 is not
2525 ** currently open, this instruction is a no-op.
2526 */
2527 case OP_Close: {
2528   int i = pOp->p1;
2529   if( i>=0 && i<p->nCursor ){
2530     sqliteVdbeCleanupCursor(&p->aCsr[i]);
2531   }
2532   break;
2533 }
2534 
2535 /* Opcode: MoveTo P1 P2 *
2536 **
2537 ** Pop the top of the stack and use its value as a key.  Reposition
2538 ** cursor P1 so that it points to an entry with a matching key.  If
2539 ** the table contains no record with a matching key, then the cursor
2540 ** is left pointing at the first record that is greater than the key.
2541 ** If there are no records greater than the key and P2 is not zero,
2542 ** then an immediate jump to P2 is made.
2543 **
2544 ** See also: Found, NotFound, Distinct, MoveLt
2545 */
2546 /* Opcode: MoveLt P1 P2 *
2547 **
2548 ** Pop the top of the stack and use its value as a key.  Reposition
2549 ** cursor P1 so that it points to the entry with the largest key that is
2550 ** less than the key popped from the stack.
2551 ** If there are no records less than than the key and P2
2552 ** is not zero then an immediate jump to P2 is made.
2553 **
2554 ** See also: MoveTo
2555 */
2556 case OP_MoveLt:
2557 case OP_MoveTo: {
2558   int i = pOp->p1;
2559   Cursor *pC;
2560 
2561   assert( pTos>=p->aStack );
2562   assert( i>=0 && i<p->nCursor );
2563   pC = &p->aCsr[i];
2564   if( pC->pCursor!=0 ){
2565     int res, oc;
2566     pC->nullRow = 0;
2567     if( pTos->flags & MEM_Int ){
2568       int iKey = intToKey(pTos->i);
2569       if( pOp->p2==0 && pOp->opcode==OP_MoveTo ){
2570         pC->movetoTarget = iKey;
2571         pC->deferredMoveto = 1;
2572         Release(pTos);
2573         pTos--;
2574         break;
2575       }
2576       sqliteBtreeMoveto(pC->pCursor, (char*)&iKey, sizeof(int), &res);
2577       pC->lastRecno = pTos->i;
2578       pC->recnoIsValid = res==0;
2579     }else{
2580       Stringify(pTos);
2581       sqliteBtreeMoveto(pC->pCursor, pTos->z, pTos->n, &res);
2582       pC->recnoIsValid = 0;
2583     }
2584     pC->deferredMoveto = 0;
2585     sqlite_search_count++;
2586     oc = pOp->opcode;
2587     if( oc==OP_MoveTo && res<0 ){
2588       sqliteBtreeNext(pC->pCursor, &res);
2589       pC->recnoIsValid = 0;
2590       if( res && pOp->p2>0 ){
2591         pc = pOp->p2 - 1;
2592       }
2593     }else if( oc==OP_MoveLt ){
2594       if( res>=0 ){
2595         sqliteBtreePrevious(pC->pCursor, &res);
2596         pC->recnoIsValid = 0;
2597       }else{
2598         /* res might be negative because the table is empty.  Check to
2599         ** see if this is the case.
2600         */
2601         int keysize;
2602         res = sqliteBtreeKeySize(pC->pCursor,&keysize)!=0 || keysize==0;
2603       }
2604       if( res && pOp->p2>0 ){
2605         pc = pOp->p2 - 1;
2606       }
2607     }
2608   }
2609   Release(pTos);
2610   pTos--;
2611   break;
2612 }
2613 
2614 /* Opcode: Distinct P1 P2 *
2615 **
2616 ** Use the top of the stack as a string key.  If a record with that key does
2617 ** not exist in the table of cursor P1, then jump to P2.  If the record
2618 ** does already exist, then fall thru.  The cursor is left pointing
2619 ** at the record if it exists. The key is not popped from the stack.
2620 **
2621 ** This operation is similar to NotFound except that this operation
2622 ** does not pop the key from the stack.
2623 **
2624 ** See also: Found, NotFound, MoveTo, IsUnique, NotExists
2625 */
2626 /* Opcode: Found P1 P2 *
2627 **
2628 ** Use the top of the stack as a string key.  If a record with that key
2629 ** does exist in table of P1, then jump to P2.  If the record
2630 ** does not exist, then fall thru.  The cursor is left pointing
2631 ** to the record if it exists.  The key is popped from the stack.
2632 **
2633 ** See also: Distinct, NotFound, MoveTo, IsUnique, NotExists
2634 */
2635 /* Opcode: NotFound P1 P2 *
2636 **
2637 ** Use the top of the stack as a string key.  If a record with that key
2638 ** does not exist in table of P1, then jump to P2.  If the record
2639 ** does exist, then fall thru.  The cursor is left pointing to the
2640 ** record if it exists.  The key is popped from the stack.
2641 **
2642 ** The difference between this operation and Distinct is that
2643 ** Distinct does not pop the key from the stack.
2644 **
2645 ** See also: Distinct, Found, MoveTo, NotExists, IsUnique
2646 */
2647 case OP_Distinct:
2648 case OP_NotFound:
2649 case OP_Found: {
2650   int i = pOp->p1;
2651   int alreadyExists = 0;
2652   Cursor *pC;
2653   assert( pTos>=p->aStack );
2654   assert( i>=0 && i<p->nCursor );
2655   if( (pC = &p->aCsr[i])->pCursor!=0 ){
2656     int res, rx;
2657     Stringify(pTos);
2658     rx = sqliteBtreeMoveto(pC->pCursor, pTos->z, pTos->n, &res);
2659     alreadyExists = rx==SQLITE_OK && res==0;
2660     pC->deferredMoveto = 0;
2661   }
2662   if( pOp->opcode==OP_Found ){
2663     if( alreadyExists ) pc = pOp->p2 - 1;
2664   }else{
2665     if( !alreadyExists ) pc = pOp->p2 - 1;
2666   }
2667   if( pOp->opcode!=OP_Distinct ){
2668     Release(pTos);
2669     pTos--;
2670   }
2671   break;
2672 }
2673 
2674 /* Opcode: IsUnique P1 P2 *
2675 **
2676 ** The top of the stack is an integer record number.  Call this
2677 ** record number R.  The next on the stack is an index key created
2678 ** using MakeIdxKey.  Call it K.  This instruction pops R from the
2679 ** stack but it leaves K unchanged.
2680 **
2681 ** P1 is an index.  So all but the last four bytes of K are an
2682 ** index string.  The last four bytes of K are a record number.
2683 **
2684 ** This instruction asks if there is an entry in P1 where the
2685 ** index string matches K but the record number is different
2686 ** from R.  If there is no such entry, then there is an immediate
2687 ** jump to P2.  If any entry does exist where the index string
2688 ** matches K but the record number is not R, then the record
2689 ** number for that entry is pushed onto the stack and control
2690 ** falls through to the next instruction.
2691 **
2692 ** See also: Distinct, NotFound, NotExists, Found
2693 */
2694 case OP_IsUnique: {
2695   int i = pOp->p1;
2696   Mem *pNos = &pTos[-1];
2697   BtCursor *pCrsr;
2698   int R;
2699 
2700   /* Pop the value R off the top of the stack
2701   */
2702   assert( pNos>=p->aStack );
2703   Integerify(pTos);
2704   R = pTos->i;
2705   pTos--;
2706   assert( i>=0 && i<=p->nCursor );
2707   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
2708     int res, rc;
2709     int v;         /* The record number on the P1 entry that matches K */
2710     char *zKey;    /* The value of K */
2711     int nKey;      /* Number of bytes in K */
2712 
2713     /* Make sure K is a string and make zKey point to K
2714     */
2715     Stringify(pNos);
2716     zKey = pNos->z;
2717     nKey = pNos->n;
2718     assert( nKey >= 4 );
2719 
2720     /* Search for an entry in P1 where all but the last four bytes match K.
2721     ** If there is no such entry, jump immediately to P2.
2722     */
2723     assert( p->aCsr[i].deferredMoveto==0 );
2724     rc = sqliteBtreeMoveto(pCrsr, zKey, nKey-4, &res);
2725     if( rc!=SQLITE_OK ) goto abort_due_to_error;
2726     if( res<0 ){
2727       rc = sqliteBtreeNext(pCrsr, &res);
2728       if( res ){
2729         pc = pOp->p2 - 1;
2730         break;
2731       }
2732     }
2733     rc = sqliteBtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &res);
2734     if( rc!=SQLITE_OK ) goto abort_due_to_error;
2735     if( res>0 ){
2736       pc = pOp->p2 - 1;
2737       break;
2738     }
2739 
2740     /* At this point, pCrsr is pointing to an entry in P1 where all but
2741     ** the last for bytes of the key match K.  Check to see if the last
2742     ** four bytes of the key are different from R.  If the last four
2743     ** bytes equal R then jump immediately to P2.
2744     */
2745     sqliteBtreeKey(pCrsr, nKey - 4, 4, (char*)&v);
2746     v = keyToInt(v);
2747     if( v==R ){
2748       pc = pOp->p2 - 1;
2749       break;
2750     }
2751 
2752     /* The last four bytes of the key are different from R.  Convert the
2753     ** last four bytes of the key into an integer and push it onto the
2754     ** stack.  (These bytes are the record number of an entry that
2755     ** violates a UNIQUE constraint.)
2756     */
2757     pTos++;
2758     pTos->i = v;
2759     pTos->flags = MEM_Int;
2760   }
2761   break;
2762 }
2763 
2764 /* Opcode: NotExists P1 P2 *
2765 **
2766 ** Use the top of the stack as a integer key.  If a record with that key
2767 ** does not exist in table of P1, then jump to P2.  If the record
2768 ** does exist, then fall thru.  The cursor is left pointing to the
2769 ** record if it exists.  The integer key is popped from the stack.
2770 **
2771 ** The difference between this operation and NotFound is that this
2772 ** operation assumes the key is an integer and NotFound assumes it
2773 ** is a string.
2774 **
2775 ** See also: Distinct, Found, MoveTo, NotFound, IsUnique
2776 */
2777 case OP_NotExists: {
2778   int i = pOp->p1;
2779   BtCursor *pCrsr;
2780   assert( pTos>=p->aStack );
2781   assert( i>=0 && i<p->nCursor );
2782   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
2783     int res, rx, iKey;
2784     assert( pTos->flags & MEM_Int );
2785     iKey = intToKey(pTos->i);
2786     rx = sqliteBtreeMoveto(pCrsr, (char*)&iKey, sizeof(int), &res);
2787     p->aCsr[i].lastRecno = pTos->i;
2788     p->aCsr[i].recnoIsValid = res==0;
2789     p->aCsr[i].nullRow = 0;
2790     if( rx!=SQLITE_OK || res!=0 ){
2791       pc = pOp->p2 - 1;
2792       p->aCsr[i].recnoIsValid = 0;
2793     }
2794   }
2795   Release(pTos);
2796   pTos--;
2797   break;
2798 }
2799 
2800 /* Opcode: NewRecno P1 * *
2801 **
2802 ** Get a new integer record number used as the key to a table.
2803 ** The record number is not previously used as a key in the database
2804 ** table that cursor P1 points to.  The new record number is pushed
2805 ** onto the stack.
2806 */
2807 case OP_NewRecno: {
2808   int i = pOp->p1;
2809   int v = 0;
2810   Cursor *pC;
2811   assert( i>=0 && i<p->nCursor );
2812   if( (pC = &p->aCsr[i])->pCursor==0 ){
2813     v = 0;
2814   }else{
2815     /* The next rowid or record number (different terms for the same
2816     ** thing) is obtained in a two-step algorithm.
2817     **
2818     ** First we attempt to find the largest existing rowid and add one
2819     ** to that.  But if the largest existing rowid is already the maximum
2820     ** positive integer, we have to fall through to the second
2821     ** probabilistic algorithm
2822     **
2823     ** The second algorithm is to select a rowid at random and see if
2824     ** it already exists in the table.  If it does not exist, we have
2825     ** succeeded.  If the random rowid does exist, we select a new one
2826     ** and try again, up to 1000 times.
2827     **
2828     ** For a table with less than 2 billion entries, the probability
2829     ** of not finding a unused rowid is about 1.0e-300.  This is a
2830     ** non-zero probability, but it is still vanishingly small and should
2831     ** never cause a problem.  You are much, much more likely to have a
2832     ** hardware failure than for this algorithm to fail.
2833     **
2834     ** The analysis in the previous paragraph assumes that you have a good
2835     ** source of random numbers.  Is a library function like lrand48()
2836     ** good enough?  Maybe. Maybe not. It's hard to know whether there
2837     ** might be subtle bugs is some implementations of lrand48() that
2838     ** could cause problems. To avoid uncertainty, SQLite uses its own
2839     ** random number generator based on the RC4 algorithm.
2840     **
2841     ** To promote locality of reference for repetitive inserts, the
2842     ** first few attempts at chosing a random rowid pick values just a little
2843     ** larger than the previous rowid.  This has been shown experimentally
2844     ** to double the speed of the COPY operation.
2845     */
2846     int res, rx, cnt, x;
2847     cnt = 0;
2848     if( !pC->useRandomRowid ){
2849       if( pC->nextRowidValid ){
2850         v = pC->nextRowid;
2851       }else{
2852         rx = sqliteBtreeLast(pC->pCursor, &res);
2853         if( res ){
2854           v = 1;
2855         }else{
2856           sqliteBtreeKey(pC->pCursor, 0, sizeof(v), (void*)&v);
2857           v = keyToInt(v);
2858           if( v==0x7fffffff ){
2859             pC->useRandomRowid = 1;
2860           }else{
2861             v++;
2862           }
2863         }
2864       }
2865       if( v<0x7fffffff ){
2866         pC->nextRowidValid = 1;
2867         pC->nextRowid = v+1;
2868       }else{
2869         pC->nextRowidValid = 0;
2870       }
2871     }
2872     if( pC->useRandomRowid ){
2873       v = db->priorNewRowid;
2874       cnt = 0;
2875       do{
2876         if( v==0 || cnt>2 ){
2877           sqliteRandomness(sizeof(v), &v);
2878           if( cnt<5 ) v &= 0xffffff;
2879         }else{
2880           unsigned char r;
2881           sqliteRandomness(1, &r);
2882           v += r + 1;
2883         }
2884         if( v==0 ) continue;
2885         x = intToKey(v);
2886         rx = sqliteBtreeMoveto(pC->pCursor, &x, sizeof(int), &res);
2887         cnt++;
2888       }while( cnt<1000 && rx==SQLITE_OK && res==0 );
2889       db->priorNewRowid = v;
2890       if( rx==SQLITE_OK && res==0 ){
2891         rc = SQLITE_FULL;
2892         goto abort_due_to_error;
2893       }
2894     }
2895     pC->recnoIsValid = 0;
2896     pC->deferredMoveto = 0;
2897   }
2898   pTos++;
2899   pTos->i = v;
2900   pTos->flags = MEM_Int;
2901   break;
2902 }
2903 
2904 /* Opcode: PutIntKey P1 P2 *
2905 **
2906 ** Write an entry into the table of cursor P1.  A new entry is
2907 ** created if it doesn't already exist or the data for an existing
2908 ** entry is overwritten.  The data is the value on the top of the
2909 ** stack.  The key is the next value down on the stack.  The key must
2910 ** be an integer.  The stack is popped twice by this instruction.
2911 **
2912 ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
2913 ** incremented (otherwise not).  If the OPFLAG_CSCHANGE flag is set,
2914 ** then the current statement change count is incremented (otherwise not).
2915 ** If the OPFLAG_LASTROWID flag of P2 is set, then rowid is
2916 ** stored for subsequent return by the sqlite_last_insert_rowid() function
2917 ** (otherwise it's unmodified).
2918 */
2919 /* Opcode: PutStrKey P1 * *
2920 **
2921 ** Write an entry into the table of cursor P1.  A new entry is
2922 ** created if it doesn't already exist or the data for an existing
2923 ** entry is overwritten.  The data is the value on the top of the
2924 ** stack.  The key is the next value down on the stack.  The key must
2925 ** be a string.  The stack is popped twice by this instruction.
2926 **
2927 ** P1 may not be a pseudo-table opened using the OpenPseudo opcode.
2928 */
2929 case OP_PutIntKey:
2930 case OP_PutStrKey: {
2931   Mem *pNos = &pTos[-1];
2932   int i = pOp->p1;
2933   Cursor *pC;
2934   assert( pNos>=p->aStack );
2935   assert( i>=0 && i<p->nCursor );
2936   if( ((pC = &p->aCsr[i])->pCursor!=0 || pC->pseudoTable) ){
2937     char *zKey;
2938     int nKey, iKey;
2939     if( pOp->opcode==OP_PutStrKey ){
2940       Stringify(pNos);
2941       nKey = pNos->n;
2942       zKey = pNos->z;
2943     }else{
2944       assert( pNos->flags & MEM_Int );
2945       nKey = sizeof(int);
2946       iKey = intToKey(pNos->i);
2947       zKey = (char*)&iKey;
2948       if( pOp->p2 & OPFLAG_NCHANGE ) db->nChange++;
2949       if( pOp->p2 & OPFLAG_LASTROWID ) db->lastRowid = pNos->i;
2950       if( pOp->p2 & OPFLAG_CSCHANGE ) db->csChange++;
2951       if( pC->nextRowidValid && pTos->i>=pC->nextRowid ){
2952         pC->nextRowidValid = 0;
2953       }
2954     }
2955     if( pTos->flags & MEM_Null ){
2956       pTos->z = 0;
2957       pTos->n = 0;
2958     }else{
2959       assert( pTos->flags & MEM_Str );
2960     }
2961     if( pC->pseudoTable ){
2962       /* PutStrKey does not work for pseudo-tables.
2963       ** The following assert makes sure we are not trying to use
2964       ** PutStrKey on a pseudo-table
2965       */
2966       assert( pOp->opcode==OP_PutIntKey );
2967       sqliteFree(pC->pData);
2968       pC->iKey = iKey;
2969       pC->nData = pTos->n;
2970       if( pTos->flags & MEM_Dyn ){
2971         pC->pData = pTos->z;
2972         pTos->flags = MEM_Null;
2973       }else{
2974         pC->pData = sqliteMallocRaw( pC->nData );
2975         if( pC->pData ){
2976           memcpy(pC->pData, pTos->z, pC->nData);
2977         }
2978       }
2979       pC->nullRow = 0;
2980     }else{
2981       rc = sqliteBtreeInsert(pC->pCursor, zKey, nKey, pTos->z, pTos->n);
2982     }
2983     pC->recnoIsValid = 0;
2984     pC->deferredMoveto = 0;
2985   }
2986   popStack(&pTos, 2);
2987   break;
2988 }
2989 
2990 /* Opcode: Delete P1 P2 *
2991 **
2992 ** Delete the record at which the P1 cursor is currently pointing.
2993 **
2994 ** The cursor will be left pointing at either the next or the previous
2995 ** record in the table. If it is left pointing at the next record, then
2996 ** the next Next instruction will be a no-op.  Hence it is OK to delete
2997 ** a record from within an Next loop.
2998 **
2999 ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
3000 ** incremented (otherwise not).  If OPFLAG_CSCHANGE flag is set,
3001 ** then the current statement change count is incremented (otherwise not).
3002 **
3003 ** If P1 is a pseudo-table, then this instruction is a no-op.
3004 */
3005 case OP_Delete: {
3006   int i = pOp->p1;
3007   Cursor *pC;
3008   assert( i>=0 && i<p->nCursor );
3009   pC = &p->aCsr[i];
3010   if( pC->pCursor!=0 ){
3011     sqliteVdbeCursorMoveto(pC);
3012     rc = sqliteBtreeDelete(pC->pCursor);
3013     pC->nextRowidValid = 0;
3014   }
3015   if( pOp->p2 & OPFLAG_NCHANGE ) db->nChange++;
3016   if( pOp->p2 & OPFLAG_CSCHANGE ) db->csChange++;
3017   break;
3018 }
3019 
3020 /* Opcode: SetCounts * * *
3021 **
3022 ** Called at end of statement.  Updates lsChange (last statement change count)
3023 ** and resets csChange (current statement change count) to 0.
3024 */
3025 case OP_SetCounts: {
3026   db->lsChange=db->csChange;
3027   db->csChange=0;
3028   break;
3029 }
3030 
3031 /* Opcode: KeyAsData P1 P2 *
3032 **
3033 ** Turn the key-as-data mode for cursor P1 either on (if P2==1) or
3034 ** off (if P2==0).  In key-as-data mode, the OP_Column opcode pulls
3035 ** data off of the key rather than the data.  This is used for
3036 ** processing compound selects.
3037 */
3038 case OP_KeyAsData: {
3039   int i = pOp->p1;
3040   assert( i>=0 && i<p->nCursor );
3041   p->aCsr[i].keyAsData = pOp->p2;
3042   break;
3043 }
3044 
3045 /* Opcode: RowData P1 * *
3046 **
3047 ** Push onto the stack the complete row data for cursor P1.
3048 ** There is no interpretation of the data.  It is just copied
3049 ** onto the stack exactly as it is found in the database file.
3050 **
3051 ** If the cursor is not pointing to a valid row, a NULL is pushed
3052 ** onto the stack.
3053 */
3054 /* Opcode: RowKey P1 * *
3055 **
3056 ** Push onto the stack the complete row key for cursor P1.
3057 ** There is no interpretation of the key.  It is just copied
3058 ** onto the stack exactly as it is found in the database file.
3059 **
3060 ** If the cursor is not pointing to a valid row, a NULL is pushed
3061 ** onto the stack.
3062 */
3063 case OP_RowKey:
3064 case OP_RowData: {
3065   int i = pOp->p1;
3066   Cursor *pC;
3067   int n;
3068 
3069   pTos++;
3070   assert( i>=0 && i<p->nCursor );
3071   pC = &p->aCsr[i];
3072   if( pC->nullRow ){
3073     pTos->flags = MEM_Null;
3074   }else if( pC->pCursor!=0 ){
3075     BtCursor *pCrsr = pC->pCursor;
3076     sqliteVdbeCursorMoveto(pC);
3077     if( pC->nullRow ){
3078       pTos->flags = MEM_Null;
3079       break;
3080     }else if( pC->keyAsData || pOp->opcode==OP_RowKey ){
3081       sqliteBtreeKeySize(pCrsr, &n);
3082     }else{
3083       sqliteBtreeDataSize(pCrsr, &n);
3084     }
3085     pTos->n = n;
3086     if( n<=NBFS ){
3087       pTos->flags = MEM_Str | MEM_Short;
3088       pTos->z = pTos->zShort;
3089     }else{
3090       char *z = sqliteMallocRaw( n );
3091       if( z==0 ) goto no_mem;
3092       pTos->flags = MEM_Str | MEM_Dyn;
3093       pTos->z = z;
3094     }
3095     if( pC->keyAsData || pOp->opcode==OP_RowKey ){
3096       sqliteBtreeKey(pCrsr, 0, n, pTos->z);
3097     }else{
3098       sqliteBtreeData(pCrsr, 0, n, pTos->z);
3099     }
3100   }else if( pC->pseudoTable ){
3101     pTos->n = pC->nData;
3102     pTos->z = pC->pData;
3103     pTos->flags = MEM_Str|MEM_Ephem;
3104   }else{
3105     pTos->flags = MEM_Null;
3106   }
3107   break;
3108 }
3109 
3110 /* Opcode: Column P1 P2 *
3111 **
3112 ** Interpret the data that cursor P1 points to as
3113 ** a structure built using the MakeRecord instruction.
3114 ** (See the MakeRecord opcode for additional information about
3115 ** the format of the data.)
3116 ** Push onto the stack the value of the P2-th column contained
3117 ** in the data.
3118 **
3119 ** If the KeyAsData opcode has previously executed on this cursor,
3120 ** then the field might be extracted from the key rather than the
3121 ** data.
3122 **
3123 ** If P1 is negative, then the record is stored on the stack rather
3124 ** than in a table.  For P1==-1, the top of the stack is used.
3125 ** For P1==-2, the next on the stack is used.  And so forth.  The
3126 ** value pushed is always just a pointer into the record which is
3127 ** stored further down on the stack.  The column value is not copied.
3128 */
3129 case OP_Column: {
3130   int amt, offset, end, payloadSize;
3131   int i = pOp->p1;
3132   int p2 = pOp->p2;
3133   Cursor *pC;
3134   char *zRec;
3135   BtCursor *pCrsr;
3136   int idxWidth;
3137   unsigned char aHdr[10];
3138 
3139   assert( i<p->nCursor );
3140   pTos++;
3141   if( i<0 ){
3142     assert( &pTos[i]>=p->aStack );
3143     assert( pTos[i].flags & MEM_Str );
3144     zRec = pTos[i].z;
3145     payloadSize = pTos[i].n;
3146   }else if( (pC = &p->aCsr[i])->pCursor!=0 ){
3147     sqliteVdbeCursorMoveto(pC);
3148     zRec = 0;
3149     pCrsr = pC->pCursor;
3150     if( pC->nullRow ){
3151       payloadSize = 0;
3152     }else if( pC->keyAsData ){
3153       sqliteBtreeKeySize(pCrsr, &payloadSize);
3154     }else{
3155       sqliteBtreeDataSize(pCrsr, &payloadSize);
3156     }
3157   }else if( pC->pseudoTable ){
3158     payloadSize = pC->nData;
3159     zRec = pC->pData;
3160     assert( payloadSize==0 || zRec!=0 );
3161   }else{
3162     payloadSize = 0;
3163   }
3164 
3165   /* Figure out how many bytes in the column data and where the column
3166   ** data begins.
3167   */
3168   if( payloadSize==0 ){
3169     pTos->flags = MEM_Null;
3170     break;
3171   }else if( payloadSize<256 ){
3172     idxWidth = 1;
3173   }else if( payloadSize<65536 ){
3174     idxWidth = 2;
3175   }else{
3176     idxWidth = 3;
3177   }
3178 
3179   /* Figure out where the requested column is stored and how big it is.
3180   */
3181   if( payloadSize < idxWidth*(p2+1) ){
3182     rc = SQLITE_CORRUPT;
3183     goto abort_due_to_error;
3184   }
3185   if( zRec ){
3186     memcpy(aHdr, &zRec[idxWidth*p2], idxWidth*2);
3187   }else if( pC->keyAsData ){
3188     sqliteBtreeKey(pCrsr, idxWidth*p2, idxWidth*2, (char*)aHdr);
3189   }else{
3190     sqliteBtreeData(pCrsr, idxWidth*p2, idxWidth*2, (char*)aHdr);
3191   }
3192   offset = aHdr[0];
3193   end = aHdr[idxWidth];
3194   if( idxWidth>1 ){
3195     offset |= aHdr[1]<<8;
3196     end |= aHdr[idxWidth+1]<<8;
3197     if( idxWidth>2 ){
3198       offset |= aHdr[2]<<16;
3199       end |= aHdr[idxWidth+2]<<16;
3200     }
3201   }
3202   amt = end - offset;
3203   if( amt<0 || offset<0 || end>payloadSize ){
3204     rc = SQLITE_CORRUPT;
3205     goto abort_due_to_error;
3206   }
3207 
3208   /* amt and offset now hold the offset to the start of data and the
3209   ** amount of data.  Go get the data and put it on the stack.
3210   */
3211   pTos->n = amt;
3212   if( amt==0 ){
3213     pTos->flags = MEM_Null;
3214   }else if( zRec ){
3215     pTos->flags = MEM_Str | MEM_Ephem;
3216     pTos->z = &zRec[offset];
3217   }else{
3218     if( amt<=NBFS ){
3219       pTos->flags = MEM_Str | MEM_Short;
3220       pTos->z = pTos->zShort;
3221     }else{
3222       char *z = sqliteMallocRaw( amt );
3223       if( z==0 ) goto no_mem;
3224       pTos->flags = MEM_Str | MEM_Dyn;
3225       pTos->z = z;
3226     }
3227     if( pC->keyAsData ){
3228       sqliteBtreeKey(pCrsr, offset, amt, pTos->z);
3229     }else{
3230       sqliteBtreeData(pCrsr, offset, amt, pTos->z);
3231     }
3232   }
3233   break;
3234 }
3235 
3236 /* Opcode: Recno P1 * *
3237 **
3238 ** Push onto the stack an integer which is the first 4 bytes of the
3239 ** the key to the current entry in a sequential scan of the database
3240 ** file P1.  The sequential scan should have been started using the
3241 ** Next opcode.
3242 */
3243 case OP_Recno: {
3244   int i = pOp->p1;
3245   Cursor *pC;
3246   int v;
3247 
3248   assert( i>=0 && i<p->nCursor );
3249   pC = &p->aCsr[i];
3250   sqliteVdbeCursorMoveto(pC);
3251   pTos++;
3252   if( pC->recnoIsValid ){
3253     v = pC->lastRecno;
3254   }else if( pC->pseudoTable ){
3255     v = keyToInt(pC->iKey);
3256   }else if( pC->nullRow || pC->pCursor==0 ){
3257     pTos->flags = MEM_Null;
3258     break;
3259   }else{
3260     assert( pC->pCursor!=0 );
3261     sqliteBtreeKey(pC->pCursor, 0, sizeof(u32), (char*)&v);
3262     v = keyToInt(v);
3263   }
3264   pTos->i = v;
3265   pTos->flags = MEM_Int;
3266   break;
3267 }
3268 
3269 /* Opcode: FullKey P1 * *
3270 **
3271 ** Extract the complete key from the record that cursor P1 is currently
3272 ** pointing to and push the key onto the stack as a string.
3273 **
3274 ** Compare this opcode to Recno.  The Recno opcode extracts the first
3275 ** 4 bytes of the key and pushes those bytes onto the stack as an
3276 ** integer.  This instruction pushes the entire key as a string.
3277 **
3278 ** This opcode may not be used on a pseudo-table.
3279 */
3280 case OP_FullKey: {
3281   int i = pOp->p1;
3282   BtCursor *pCrsr;
3283 
3284   assert( p->aCsr[i].keyAsData );
3285   assert( !p->aCsr[i].pseudoTable );
3286   assert( i>=0 && i<p->nCursor );
3287   pTos++;
3288   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
3289     int amt;
3290     char *z;
3291 
3292     sqliteVdbeCursorMoveto(&p->aCsr[i]);
3293     sqliteBtreeKeySize(pCrsr, &amt);
3294     if( amt<=0 ){
3295       rc = SQLITE_CORRUPT;
3296       goto abort_due_to_error;
3297     }
3298     if( amt>NBFS ){
3299       z = sqliteMallocRaw( amt );
3300       if( z==0 ) goto no_mem;
3301       pTos->flags = MEM_Str | MEM_Dyn;
3302     }else{
3303       z = pTos->zShort;
3304       pTos->flags = MEM_Str | MEM_Short;
3305     }
3306     sqliteBtreeKey(pCrsr, 0, amt, z);
3307     pTos->z = z;
3308     pTos->n = amt;
3309   }
3310   break;
3311 }
3312 
3313 /* Opcode: NullRow P1 * *
3314 **
3315 ** Move the cursor P1 to a null row.  Any OP_Column operations
3316 ** that occur while the cursor is on the null row will always push
3317 ** a NULL onto the stack.
3318 */
3319 case OP_NullRow: {
3320   int i = pOp->p1;
3321 
3322   assert( i>=0 && i<p->nCursor );
3323   p->aCsr[i].nullRow = 1;
3324   p->aCsr[i].recnoIsValid = 0;
3325   break;
3326 }
3327 
3328 /* Opcode: Last P1 P2 *
3329 **
3330 ** The next use of the Recno or Column or Next instruction for P1
3331 ** will refer to the last entry in the database table or index.
3332 ** If the table or index is empty and P2>0, then jump immediately to P2.
3333 ** If P2 is 0 or if the table or index is not empty, fall through
3334 ** to the following instruction.
3335 */
3336 case OP_Last: {
3337   int i = pOp->p1;
3338   Cursor *pC;
3339   BtCursor *pCrsr;
3340 
3341   assert( i>=0 && i<p->nCursor );
3342   pC = &p->aCsr[i];
3343   if( (pCrsr = pC->pCursor)!=0 ){
3344     int res;
3345     rc = sqliteBtreeLast(pCrsr, &res);
3346     pC->nullRow = res;
3347     pC->deferredMoveto = 0;
3348     if( res && pOp->p2>0 ){
3349       pc = pOp->p2 - 1;
3350     }
3351   }else{
3352     pC->nullRow = 0;
3353   }
3354   break;
3355 }
3356 
3357 /* Opcode: Rewind P1 P2 *
3358 **
3359 ** The next use of the Recno or Column or Next instruction for P1
3360 ** will refer to the first entry in the database table or index.
3361 ** If the table or index is empty and P2>0, then jump immediately to P2.
3362 ** If P2 is 0 or if the table or index is not empty, fall through
3363 ** to the following instruction.
3364 */
3365 case OP_Rewind: {
3366   int i = pOp->p1;
3367   Cursor *pC;
3368   BtCursor *pCrsr;
3369 
3370   assert( i>=0 && i<p->nCursor );
3371   pC = &p->aCsr[i];
3372   if( (pCrsr = pC->pCursor)!=0 ){
3373     int res;
3374     rc = sqliteBtreeFirst(pCrsr, &res);
3375     pC->atFirst = res==0;
3376     pC->nullRow = res;
3377     pC->deferredMoveto = 0;
3378     if( res && pOp->p2>0 ){
3379       pc = pOp->p2 - 1;
3380     }
3381   }else{
3382     pC->nullRow = 0;
3383   }
3384   break;
3385 }
3386 
3387 /* Opcode: Next P1 P2 *
3388 **
3389 ** Advance cursor P1 so that it points to the next key/data pair in its
3390 ** table or index.  If there are no more key/value pairs then fall through
3391 ** to the following instruction.  But if the cursor advance was successful,
3392 ** jump immediately to P2.
3393 **
3394 ** See also: Prev
3395 */
3396 /* Opcode: Prev P1 P2 *
3397 **
3398 ** Back up cursor P1 so that it points to the previous key/data pair in its
3399 ** table or index.  If there is no previous key/value pairs then fall through
3400 ** to the following instruction.  But if the cursor backup was successful,
3401 ** jump immediately to P2.
3402 */
3403 case OP_Prev:
3404 case OP_Next: {
3405   Cursor *pC;
3406   BtCursor *pCrsr;
3407 
3408   CHECK_FOR_INTERRUPT;
3409   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
3410   pC = &p->aCsr[pOp->p1];
3411   if( (pCrsr = pC->pCursor)!=0 ){
3412     int res;
3413     if( pC->nullRow ){
3414       res = 1;
3415     }else{
3416       assert( pC->deferredMoveto==0 );
3417       rc = pOp->opcode==OP_Next ? sqliteBtreeNext(pCrsr, &res) :
3418                                   sqliteBtreePrevious(pCrsr, &res);
3419       pC->nullRow = res;
3420     }
3421     if( res==0 ){
3422       pc = pOp->p2 - 1;
3423       sqlite_search_count++;
3424     }
3425   }else{
3426     pC->nullRow = 1;
3427   }
3428   pC->recnoIsValid = 0;
3429   break;
3430 }
3431 
3432 /* Opcode: IdxPut P1 P2 P3
3433 **
3434 ** The top of the stack holds a SQL index key made using the
3435 ** MakeIdxKey instruction.  This opcode writes that key into the
3436 ** index P1.  Data for the entry is nil.
3437 **
3438 ** If P2==1, then the key must be unique.  If the key is not unique,
3439 ** the program aborts with a SQLITE_CONSTRAINT error and the database
3440 ** is rolled back.  If P3 is not null, then it becomes part of the
3441 ** error message returned with the SQLITE_CONSTRAINT.
3442 */
3443 case OP_IdxPut: {
3444   int i = pOp->p1;
3445   BtCursor *pCrsr;
3446   assert( pTos>=p->aStack );
3447   assert( i>=0 && i<p->nCursor );
3448   assert( pTos->flags & MEM_Str );
3449   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
3450     int nKey = pTos->n;
3451     const char *zKey = pTos->z;
3452     if( pOp->p2 ){
3453       int res, n;
3454       assert( nKey >= 4 );
3455       rc = sqliteBtreeMoveto(pCrsr, zKey, nKey-4, &res);
3456       if( rc!=SQLITE_OK ) goto abort_due_to_error;
3457       while( res!=0 ){
3458         int c;
3459         sqliteBtreeKeySize(pCrsr, &n);
3460         if( n==nKey
3461            && sqliteBtreeKeyCompare(pCrsr, zKey, nKey-4, 4, &c)==SQLITE_OK
3462            && c==0
3463         ){
3464           rc = SQLITE_CONSTRAINT;
3465           if( pOp->p3 && pOp->p3[0] ){
3466             sqliteSetString(&p->zErrMsg, pOp->p3, (char*)0);
3467           }
3468           goto abort_due_to_error;
3469         }
3470         if( res<0 ){
3471           sqliteBtreeNext(pCrsr, &res);
3472           res = +1;
3473         }else{
3474           break;
3475         }
3476       }
3477     }
3478     rc = sqliteBtreeInsert(pCrsr, zKey, nKey, "", 0);
3479     assert( p->aCsr[i].deferredMoveto==0 );
3480   }
3481   Release(pTos);
3482   pTos--;
3483   break;
3484 }
3485 
3486 /* Opcode: IdxDelete P1 * *
3487 **
3488 ** The top of the stack is an index key built using the MakeIdxKey opcode.
3489 ** This opcode removes that entry from the index.
3490 */
3491 case OP_IdxDelete: {
3492   int i = pOp->p1;
3493   BtCursor *pCrsr;
3494   assert( pTos>=p->aStack );
3495   assert( pTos->flags & MEM_Str );
3496   assert( i>=0 && i<p->nCursor );
3497   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
3498     int rx, res;
3499     rx = sqliteBtreeMoveto(pCrsr, pTos->z, pTos->n, &res);
3500     if( rx==SQLITE_OK && res==0 ){
3501       rc = sqliteBtreeDelete(pCrsr);
3502     }
3503     assert( p->aCsr[i].deferredMoveto==0 );
3504   }
3505   Release(pTos);
3506   pTos--;
3507   break;
3508 }
3509 
3510 /* Opcode: IdxRecno P1 * *
3511 **
3512 ** Push onto the stack an integer which is the last 4 bytes of the
3513 ** the key to the current entry in index P1.  These 4 bytes should
3514 ** be the record number of the table entry to which this index entry
3515 ** points.
3516 **
3517 ** See also: Recno, MakeIdxKey.
3518 */
3519 case OP_IdxRecno: {
3520   int i = pOp->p1;
3521   BtCursor *pCrsr;
3522 
3523   assert( i>=0 && i<p->nCursor );
3524   pTos++;
3525   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
3526     int v;
3527     int sz;
3528     assert( p->aCsr[i].deferredMoveto==0 );
3529     sqliteBtreeKeySize(pCrsr, &sz);
3530     if( sz<sizeof(u32) ){
3531       pTos->flags = MEM_Null;
3532     }else{
3533       sqliteBtreeKey(pCrsr, sz - sizeof(u32), sizeof(u32), (char*)&v);
3534       v = keyToInt(v);
3535       pTos->i = v;
3536       pTos->flags = MEM_Int;
3537     }
3538   }else{
3539     pTos->flags = MEM_Null;
3540   }
3541   break;
3542 }
3543 
3544 /* Opcode: IdxGT P1 P2 *
3545 **
3546 ** Compare the top of the stack against the key on the index entry that
3547 ** cursor P1 is currently pointing to.  Ignore the last 4 bytes of the
3548 ** index entry.  If the index entry is greater than the top of the stack
3549 ** then jump to P2.  Otherwise fall through to the next instruction.
3550 ** In either case, the stack is popped once.
3551 */
3552 /* Opcode: IdxGE P1 P2 *
3553 **
3554 ** Compare the top of the stack against the key on the index entry that
3555 ** cursor P1 is currently pointing to.  Ignore the last 4 bytes of the
3556 ** index entry.  If the index entry is greater than or equal to
3557 ** the top of the stack
3558 ** then jump to P2.  Otherwise fall through to the next instruction.
3559 ** In either case, the stack is popped once.
3560 */
3561 /* Opcode: IdxLT P1 P2 *
3562 **
3563 ** Compare the top of the stack against the key on the index entry that
3564 ** cursor P1 is currently pointing to.  Ignore the last 4 bytes of the
3565 ** index entry.  If the index entry is less than the top of the stack
3566 ** then jump to P2.  Otherwise fall through to the next instruction.
3567 ** In either case, the stack is popped once.
3568 */
3569 case OP_IdxLT:
3570 case OP_IdxGT:
3571 case OP_IdxGE: {
3572   int i= pOp->p1;
3573   BtCursor *pCrsr;
3574 
3575   assert( i>=0 && i<p->nCursor );
3576   assert( pTos>=p->aStack );
3577   if( (pCrsr = p->aCsr[i].pCursor)!=0 ){
3578     int res, rc;
3579 
3580     Stringify(pTos);
3581     assert( p->aCsr[i].deferredMoveto==0 );
3582     rc = sqliteBtreeKeyCompare(pCrsr, pTos->z, pTos->n, 4, &res);
3583     if( rc!=SQLITE_OK ){
3584       break;
3585     }
3586     if( pOp->opcode==OP_IdxLT ){
3587       res = -res;
3588     }else if( pOp->opcode==OP_IdxGE ){
3589       res++;
3590     }
3591     if( res>0 ){
3592       pc = pOp->p2 - 1 ;
3593     }
3594   }
3595   Release(pTos);
3596   pTos--;
3597   break;
3598 }
3599 
3600 /* Opcode: IdxIsNull P1 P2 *
3601 **
3602 ** The top of the stack contains an index entry such as might be generated
3603 ** by the MakeIdxKey opcode.  This routine looks at the first P1 fields of
3604 ** that key.  If any of the first P1 fields are NULL, then a jump is made
3605 ** to address P2.  Otherwise we fall straight through.
3606 **
3607 ** The index entry is always popped from the stack.
3608 */
3609 case OP_IdxIsNull: {
3610   int i = pOp->p1;
3611   int k, n;
3612   const char *z;
3613 
3614   assert( pTos>=p->aStack );
3615   assert( pTos->flags & MEM_Str );
3616   z = pTos->z;
3617   n = pTos->n;
3618   for(k=0; k<n && i>0; i--){
3619     if( z[k]=='a' ){
3620       pc = pOp->p2-1;
3621       break;
3622     }
3623     while( k<n && z[k] ){ k++; }
3624     k++;
3625   }
3626   Release(pTos);
3627   pTos--;
3628   break;
3629 }
3630 
3631 /* Opcode: Destroy P1 P2 *
3632 **
3633 ** Delete an entire database table or index whose root page in the database
3634 ** file is given by P1.
3635 **
3636 ** The table being destroyed is in the main database file if P2==0.  If
3637 ** P2==1 then the table to be clear is in the auxiliary database file
3638 ** that is used to store tables create using CREATE TEMPORARY TABLE.
3639 **
3640 ** See also: Clear
3641 */
3642 case OP_Destroy: {
3643   rc = sqliteBtreeDropTable(db->aDb[pOp->p2].pBt, pOp->p1);
3644   break;
3645 }
3646 
3647 /* Opcode: Clear P1 P2 *
3648 **
3649 ** Delete all contents of the database table or index whose root page
3650 ** in the database file is given by P1.  But, unlike Destroy, do not
3651 ** remove the table or index from the database file.
3652 **
3653 ** The table being clear is in the main database file if P2==0.  If
3654 ** P2==1 then the table to be clear is in the auxiliary database file
3655 ** that is used to store tables create using CREATE TEMPORARY TABLE.
3656 **
3657 ** See also: Destroy
3658 */
3659 case OP_Clear: {
3660   rc = sqliteBtreeClearTable(db->aDb[pOp->p2].pBt, pOp->p1);
3661   break;
3662 }
3663 
3664 /* Opcode: CreateTable * P2 P3
3665 **
3666 ** Allocate a new table in the main database file if P2==0 or in the
3667 ** auxiliary database file if P2==1.  Push the page number
3668 ** for the root page of the new table onto the stack.
3669 **
3670 ** The root page number is also written to a memory location that P3
3671 ** points to.  This is the mechanism is used to write the root page
3672 ** number into the parser's internal data structures that describe the
3673 ** new table.
3674 **
3675 ** The difference between a table and an index is this:  A table must
3676 ** have a 4-byte integer key and can have arbitrary data.  An index
3677 ** has an arbitrary key but no data.
3678 **
3679 ** See also: CreateIndex
3680 */
3681 /* Opcode: CreateIndex * P2 P3
3682 **
3683 ** Allocate a new index in the main database file if P2==0 or in the
3684 ** auxiliary database file if P2==1.  Push the page number of the
3685 ** root page of the new index onto the stack.
3686 **
3687 ** See documentation on OP_CreateTable for additional information.
3688 */
3689 case OP_CreateIndex:
3690 case OP_CreateTable: {
3691   int pgno;
3692   assert( pOp->p3!=0 && pOp->p3type==P3_POINTER );
3693   assert( pOp->p2>=0 && pOp->p2<db->nDb );
3694   assert( db->aDb[pOp->p2].pBt!=0 );
3695   if( pOp->opcode==OP_CreateTable ){
3696     rc = sqliteBtreeCreateTable(db->aDb[pOp->p2].pBt, &pgno);
3697   }else{
3698     rc = sqliteBtreeCreateIndex(db->aDb[pOp->p2].pBt, &pgno);
3699   }
3700   pTos++;
3701   if( rc==SQLITE_OK ){
3702     pTos->i = pgno;
3703     pTos->flags = MEM_Int;
3704     *(u32*)pOp->p3 = pgno;
3705     pOp->p3 = 0;
3706   }else{
3707     pTos->flags = MEM_Null;
3708   }
3709   break;
3710 }
3711 
3712 /* Opcode: IntegrityCk P1 P2 *
3713 **
3714 ** Do an analysis of the currently open database.  Push onto the
3715 ** stack the text of an error message describing any problems.
3716 ** If there are no errors, push a "ok" onto the stack.
3717 **
3718 ** P1 is the index of a set that contains the root page numbers
3719 ** for all tables and indices in the main database file.  The set
3720 ** is cleared by this opcode.  In other words, after this opcode
3721 ** has executed, the set will be empty.
3722 **
3723 ** If P2 is not zero, the check is done on the auxiliary database
3724 ** file, not the main database file.
3725 **
3726 ** This opcode is used for testing purposes only.
3727 */
3728 case OP_IntegrityCk: {
3729   int nRoot;
3730   int *aRoot;
3731   int iSet = pOp->p1;
3732   Set *pSet;
3733   int j;
3734   HashElem *i;
3735   char *z;
3736 
3737   assert( iSet>=0 && iSet<p->nSet );
3738   pTos++;
3739   pSet = &p->aSet[iSet];
3740   nRoot = sqliteHashCount(&pSet->hash);
3741   aRoot = sqliteMallocRaw( sizeof(int)*(nRoot+1) );
3742   if( aRoot==0 ) goto no_mem;
3743   for(j=0, i=sqliteHashFirst(&pSet->hash); i; i=sqliteHashNext(i), j++){
3744     toInt((char*)sqliteHashKey(i), &aRoot[j]);
3745   }
3746   aRoot[j] = 0;
3747   sqliteHashClear(&pSet->hash);
3748   pSet->prev = 0;
3749   z = sqliteBtreeIntegrityCheck(db->aDb[pOp->p2].pBt, aRoot, nRoot);
3750   if( z==0 || z[0]==0 ){
3751     if( z ) sqliteFree(z);
3752     pTos->z = "ok";
3753     pTos->n = 3;
3754     pTos->flags = MEM_Str | MEM_Static;
3755   }else{
3756     pTos->z = z;
3757     pTos->n = strlen(z) + 1;
3758     pTos->flags = MEM_Str | MEM_Dyn;
3759   }
3760   sqliteFree(aRoot);
3761   break;
3762 }
3763 
3764 /* Opcode: ListWrite * * *
3765 **
3766 ** Write the integer on the top of the stack
3767 ** into the temporary storage list.
3768 */
3769 case OP_ListWrite: {
3770   Keylist *pKeylist;
3771   assert( pTos>=p->aStack );
3772   pKeylist = p->pList;
3773   if( pKeylist==0 || pKeylist->nUsed>=pKeylist->nKey ){
3774     pKeylist = sqliteMallocRaw( sizeof(Keylist)+999*sizeof(pKeylist->aKey[0]) );
3775     if( pKeylist==0 ) goto no_mem;
3776     pKeylist->nKey = 1000;
3777     pKeylist->nRead = 0;
3778     pKeylist->nUsed = 0;
3779     pKeylist->pNext = p->pList;
3780     p->pList = pKeylist;
3781   }
3782   Integerify(pTos);
3783   pKeylist->aKey[pKeylist->nUsed++] = pTos->i;
3784   Release(pTos);
3785   pTos--;
3786   break;
3787 }
3788 
3789 /* Opcode: ListRewind * * *
3790 **
3791 ** Rewind the temporary buffer back to the beginning.
3792 */
3793 case OP_ListRewind: {
3794   /* What this opcode codes, really, is reverse the order of the
3795   ** linked list of Keylist structures so that they are read out
3796   ** in the same order that they were read in. */
3797   Keylist *pRev, *pTop;
3798   pRev = 0;
3799   while( p->pList ){
3800     pTop = p->pList;
3801     p->pList = pTop->pNext;
3802     pTop->pNext = pRev;
3803     pRev = pTop;
3804   }
3805   p->pList = pRev;
3806   break;
3807 }
3808 
3809 /* Opcode: ListRead * P2 *
3810 **
3811 ** Attempt to read an integer from the temporary storage buffer
3812 ** and push it onto the stack.  If the storage buffer is empty,
3813 ** push nothing but instead jump to P2.
3814 */
3815 case OP_ListRead: {
3816   Keylist *pKeylist;
3817   CHECK_FOR_INTERRUPT;
3818   pKeylist = p->pList;
3819   if( pKeylist!=0 ){
3820     assert( pKeylist->nRead>=0 );
3821     assert( pKeylist->nRead<pKeylist->nUsed );
3822     assert( pKeylist->nRead<pKeylist->nKey );
3823     pTos++;
3824     pTos->i = pKeylist->aKey[pKeylist->nRead++];
3825     pTos->flags = MEM_Int;
3826     if( pKeylist->nRead>=pKeylist->nUsed ){
3827       p->pList = pKeylist->pNext;
3828       sqliteFree(pKeylist);
3829     }
3830   }else{
3831     pc = pOp->p2 - 1;
3832   }
3833   break;
3834 }
3835 
3836 /* Opcode: ListReset * * *
3837 **
3838 ** Reset the temporary storage buffer so that it holds nothing.
3839 */
3840 case OP_ListReset: {
3841   if( p->pList ){
3842     sqliteVdbeKeylistFree(p->pList);
3843     p->pList = 0;
3844   }
3845   break;
3846 }
3847 
3848 /* Opcode: ListPush * * *
3849 **
3850 ** Save the current Vdbe list such that it can be restored by a ListPop
3851 ** opcode. The list is empty after this is executed.
3852 */
3853 case OP_ListPush: {
3854   p->keylistStackDepth++;
3855   assert(p->keylistStackDepth > 0);
3856   p->keylistStack = sqliteRealloc(p->keylistStack,
3857           sizeof(Keylist *) * p->keylistStackDepth);
3858   if( p->keylistStack==0 ) goto no_mem;
3859   p->keylistStack[p->keylistStackDepth - 1] = p->pList;
3860   p->pList = 0;
3861   break;
3862 }
3863 
3864 /* Opcode: ListPop * * *
3865 **
3866 ** Restore the Vdbe list to the state it was in when ListPush was last
3867 ** executed.
3868 */
3869 case OP_ListPop: {
3870   assert(p->keylistStackDepth > 0);
3871   p->keylistStackDepth--;
3872   sqliteVdbeKeylistFree(p->pList);
3873   p->pList = p->keylistStack[p->keylistStackDepth];
3874   p->keylistStack[p->keylistStackDepth] = 0;
3875   if( p->keylistStackDepth == 0 ){
3876     sqliteFree(p->keylistStack);
3877     p->keylistStack = 0;
3878   }
3879   break;
3880 }
3881 
3882 /* Opcode: ContextPush * * *
3883 **
3884 ** Save the current Vdbe context such that it can be restored by a ContextPop
3885 ** opcode. The context stores the last insert row id, the last statement change
3886 ** count, and the current statement change count.
3887 */
3888 case OP_ContextPush: {
3889   p->contextStackDepth++;
3890   assert(p->contextStackDepth > 0);
3891   p->contextStack = sqliteRealloc(p->contextStack,
3892           sizeof(Context) * p->contextStackDepth);
3893   if( p->contextStack==0 ) goto no_mem;
3894   p->contextStack[p->contextStackDepth - 1].lastRowid = p->db->lastRowid;
3895   p->contextStack[p->contextStackDepth - 1].lsChange = p->db->lsChange;
3896   p->contextStack[p->contextStackDepth - 1].csChange = p->db->csChange;
3897   break;
3898 }
3899 
3900 /* Opcode: ContextPop * * *
3901 **
3902 ** Restore the Vdbe context to the state it was in when contextPush was last
3903 ** executed. The context stores the last insert row id, the last statement
3904 ** change count, and the current statement change count.
3905 */
3906 case OP_ContextPop: {
3907   assert(p->contextStackDepth > 0);
3908   p->contextStackDepth--;
3909   p->db->lastRowid = p->contextStack[p->contextStackDepth].lastRowid;
3910   p->db->lsChange = p->contextStack[p->contextStackDepth].lsChange;
3911   p->db->csChange = p->contextStack[p->contextStackDepth].csChange;
3912   if( p->contextStackDepth == 0 ){
3913     sqliteFree(p->contextStack);
3914     p->contextStack = 0;
3915   }
3916   break;
3917 }
3918 
3919 /* Opcode: SortPut * * *
3920 **
3921 ** The TOS is the key and the NOS is the data.  Pop both from the stack
3922 ** and put them on the sorter.  The key and data should have been
3923 ** made using SortMakeKey and SortMakeRec, respectively.
3924 */
3925 case OP_SortPut: {
3926   Mem *pNos = &pTos[-1];
3927   Sorter *pSorter;
3928   assert( pNos>=p->aStack );
3929   if( Dynamicify(pTos) || Dynamicify(pNos) ) goto no_mem;
3930   pSorter = sqliteMallocRaw( sizeof(Sorter) );
3931   if( pSorter==0 ) goto no_mem;
3932   pSorter->pNext = p->pSort;
3933   p->pSort = pSorter;
3934   assert( pTos->flags & MEM_Dyn );
3935   pSorter->nKey = pTos->n;
3936   pSorter->zKey = pTos->z;
3937   assert( pNos->flags & MEM_Dyn );
3938   pSorter->nData = pNos->n;
3939   pSorter->pData = pNos->z;
3940   pTos -= 2;
3941   break;
3942 }
3943 
3944 /* Opcode: SortMakeRec P1 * *
3945 **
3946 ** The top P1 elements are the arguments to a callback.  Form these
3947 ** elements into a single data entry that can be stored on a sorter
3948 ** using SortPut and later fed to a callback using SortCallback.
3949 */
3950 case OP_SortMakeRec: {
3951   char *z;
3952   char **azArg;
3953   int nByte;
3954   int nField;
3955   int i;
3956   Mem *pRec;
3957 
3958   nField = pOp->p1;
3959   pRec = &pTos[1-nField];
3960   assert( pRec>=p->aStack );
3961   nByte = 0;
3962   for(i=0; i<nField; i++, pRec++){
3963     if( (pRec->flags & MEM_Null)==0 ){
3964       Stringify(pRec);
3965       nByte += pRec->n;
3966     }
3967   }
3968   nByte += sizeof(char*)*(nField+1);
3969   azArg = sqliteMallocRaw( nByte );
3970   if( azArg==0 ) goto no_mem;
3971   z = (char*)&azArg[nField+1];
3972   for(pRec=&pTos[1-nField], i=0; i<nField; i++, pRec++){
3973     if( pRec->flags & MEM_Null ){
3974       azArg[i] = 0;
3975     }else{
3976       azArg[i] = z;
3977       memcpy(z, pRec->z, pRec->n);
3978       z += pRec->n;
3979     }
3980   }
3981   popStack(&pTos, nField);
3982   pTos++;
3983   pTos->n = nByte;
3984   pTos->z = (char*)azArg;
3985   pTos->flags = MEM_Str | MEM_Dyn;
3986   break;
3987 }
3988 
3989 /* Opcode: SortMakeKey * * P3
3990 **
3991 ** Convert the top few entries of the stack into a sort key.  The
3992 ** number of stack entries consumed is the number of characters in
3993 ** the string P3.  One character from P3 is prepended to each entry.
3994 ** The first character of P3 is prepended to the element lowest in
3995 ** the stack and the last character of P3 is prepended to the top of
3996 ** the stack.  All stack entries are separated by a \000 character
3997 ** in the result.  The whole key is terminated by two \000 characters
3998 ** in a row.
3999 **
4000 ** "N" is substituted in place of the P3 character for NULL values.
4001 **
4002 ** See also the MakeKey and MakeIdxKey opcodes.
4003 */
4004 case OP_SortMakeKey: {
4005   char *zNewKey;
4006   int nByte;
4007   int nField;
4008   int i, j, k;
4009   Mem *pRec;
4010 
4011   nField = strlen(pOp->p3);
4012   pRec = &pTos[1-nField];
4013   nByte = 1;
4014   for(i=0; i<nField; i++, pRec++){
4015     if( pRec->flags & MEM_Null ){
4016       nByte += 2;
4017     }else{
4018       Stringify(pRec);
4019       nByte += pRec->n+2;
4020     }
4021   }
4022   zNewKey = sqliteMallocRaw( nByte );
4023   if( zNewKey==0 ) goto no_mem;
4024   j = 0;
4025   k = 0;
4026   for(pRec=&pTos[1-nField], i=0; i<nField; i++, pRec++){
4027     if( pRec->flags & MEM_Null ){
4028       zNewKey[j++] = 'N';
4029       zNewKey[j++] = 0;
4030       k++;
4031     }else{
4032       zNewKey[j++] = pOp->p3[k++];
4033       memcpy(&zNewKey[j], pRec->z, pRec->n-1);
4034       j += pRec->n-1;
4035       zNewKey[j++] = 0;
4036     }
4037   }
4038   zNewKey[j] = 0;
4039   assert( j<nByte );
4040   popStack(&pTos, nField);
4041   pTos++;
4042   pTos->n = nByte;
4043   pTos->flags = MEM_Str|MEM_Dyn;
4044   pTos->z = zNewKey;
4045   break;
4046 }
4047 
4048 /* Opcode: Sort * * *
4049 **
4050 ** Sort all elements on the sorter.  The algorithm is a
4051 ** mergesort.
4052 */
4053 case OP_Sort: {
4054   int i;
4055   Sorter *pElem;
4056   Sorter *apSorter[NSORT];
4057   for(i=0; i<NSORT; i++){
4058     apSorter[i] = 0;
4059   }
4060   while( p->pSort ){
4061     pElem = p->pSort;
4062     p->pSort = pElem->pNext;
4063     pElem->pNext = 0;
4064     for(i=0; i<NSORT-1; i++){
4065     if( apSorter[i]==0 ){
4066         apSorter[i] = pElem;
4067         break;
4068       }else{
4069         pElem = Merge(apSorter[i], pElem);
4070         apSorter[i] = 0;
4071       }
4072     }
4073     if( i>=NSORT-1 ){
4074       apSorter[NSORT-1] = Merge(apSorter[NSORT-1],pElem);
4075     }
4076   }
4077   pElem = 0;
4078   for(i=0; i<NSORT; i++){
4079     pElem = Merge(apSorter[i], pElem);
4080   }
4081   p->pSort = pElem;
4082   break;
4083 }
4084 
4085 /* Opcode: SortNext * P2 *
4086 **
4087 ** Push the data for the topmost element in the sorter onto the
4088 ** stack, then remove the element from the sorter.  If the sorter
4089 ** is empty, push nothing on the stack and instead jump immediately
4090 ** to instruction P2.
4091 */
4092 case OP_SortNext: {
4093   Sorter *pSorter = p->pSort;
4094   CHECK_FOR_INTERRUPT;
4095   if( pSorter!=0 ){
4096     p->pSort = pSorter->pNext;
4097     pTos++;
4098     pTos->z = pSorter->pData;
4099     pTos->n = pSorter->nData;
4100     pTos->flags = MEM_Str|MEM_Dyn;
4101     sqliteFree(pSorter->zKey);
4102     sqliteFree(pSorter);
4103   }else{
4104     pc = pOp->p2 - 1;
4105   }
4106   break;
4107 }
4108 
4109 /* Opcode: SortCallback P1 * *
4110 **
4111 ** The top of the stack contains a callback record built using
4112 ** the SortMakeRec operation with the same P1 value as this
4113 ** instruction.  Pop this record from the stack and invoke the
4114 ** callback on it.
4115 */
4116 case OP_SortCallback: {
4117   assert( pTos>=p->aStack );
4118   assert( pTos->flags & MEM_Str );
4119   p->nCallback++;
4120   p->pc = pc+1;
4121   p->azResColumn = (char**)pTos->z;
4122   assert( p->nResColumn==pOp->p1 );
4123   p->popStack = 1;
4124   p->pTos = pTos;
4125   return SQLITE_ROW;
4126 }
4127 
4128 /* Opcode: SortReset * * *
4129 **
4130 ** Remove any elements that remain on the sorter.
4131 */
4132 case OP_SortReset: {
4133   sqliteVdbeSorterReset(p);
4134   break;
4135 }
4136 
4137 /* Opcode: FileOpen * * P3
4138 **
4139 ** Open the file named by P3 for reading using the FileRead opcode.
4140 ** If P3 is "stdin" then open standard input for reading.
4141 */
4142 case OP_FileOpen: {
4143   assert( pOp->p3!=0 );
4144   if( p->pFile ){
4145     if( p->pFile!=stdin ) fclose(p->pFile);
4146     p->pFile = 0;
4147   }
4148   if( sqliteStrICmp(pOp->p3,"stdin")==0 ){
4149     p->pFile = stdin;
4150   }else{
4151     p->pFile = fopen(pOp->p3, "r");
4152   }
4153   if( p->pFile==0 ){
4154     sqliteSetString(&p->zErrMsg,"unable to open file: ", pOp->p3, (char*)0);
4155     rc = SQLITE_ERROR;
4156   }
4157   break;
4158 }
4159 
4160 /* Opcode: FileRead P1 P2 P3
4161 **
4162 ** Read a single line of input from the open file (the file opened using
4163 ** FileOpen).  If we reach end-of-file, jump immediately to P2.  If
4164 ** we are able to get another line, split the line apart using P3 as
4165 ** a delimiter.  There should be P1 fields.  If the input line contains
4166 ** more than P1 fields, ignore the excess.  If the input line contains
4167 ** fewer than P1 fields, assume the remaining fields contain NULLs.
4168 **
4169 ** Input ends if a line consists of just "\.".  A field containing only
4170 ** "\N" is a null field.  The backslash \ character can be used be used
4171 ** to escape newlines or the delimiter.
4172 */
4173 case OP_FileRead: {
4174   int n, eol, nField, i, c, nDelim;
4175   char *zDelim, *z;
4176   CHECK_FOR_INTERRUPT;
4177   if( p->pFile==0 ) goto fileread_jump;
4178   nField = pOp->p1;
4179   if( nField<=0 ) goto fileread_jump;
4180   if( nField!=p->nField || p->azField==0 ){
4181     char **azField = sqliteRealloc(p->azField, sizeof(char*)*nField+1);
4182     if( azField==0 ){ goto no_mem; }
4183     p->azField = azField;
4184     p->nField = nField;
4185   }
4186   n = 0;
4187   eol = 0;
4188   while( eol==0 ){
4189     if( p->zLine==0 || n+200>p->nLineAlloc ){
4190       char *zLine;
4191       p->nLineAlloc = p->nLineAlloc*2 + 300;
4192       zLine = sqliteRealloc(p->zLine, p->nLineAlloc);
4193       if( zLine==0 ){
4194         p->nLineAlloc = 0;
4195         sqliteFree(p->zLine);
4196         p->zLine = 0;
4197         goto no_mem;
4198       }
4199       p->zLine = zLine;
4200     }
4201     if( vdbe_fgets(&p->zLine[n], p->nLineAlloc-n, p->pFile)==0 ){
4202       eol = 1;
4203       p->zLine[n] = 0;
4204     }else{
4205       int c;
4206       while( (c = p->zLine[n])!=0 ){
4207         if( c=='\\' ){
4208           if( p->zLine[n+1]==0 ) break;
4209           n += 2;
4210         }else if( c=='\n' ){
4211           p->zLine[n] = 0;
4212           eol = 1;
4213           break;
4214         }else{
4215           n++;
4216         }
4217       }
4218     }
4219   }
4220   if( n==0 ) goto fileread_jump;
4221   z = p->zLine;
4222   if( z[0]=='\\' && z[1]=='.' && z[2]==0 ){
4223     goto fileread_jump;
4224   }
4225   zDelim = pOp->p3;
4226   if( zDelim==0 ) zDelim = "\t";
4227   c = zDelim[0];
4228   nDelim = strlen(zDelim);
4229   p->azField[0] = z;
4230   for(i=1; *z!=0 && i<=nField; i++){
4231     int from, to;
4232     from = to = 0;
4233     if( z[0]=='\\' && z[1]=='N'
4234        && (z[2]==0 || strncmp(&z[2],zDelim,nDelim)==0) ){
4235       if( i<=nField ) p->azField[i-1] = 0;
4236       z += 2 + nDelim;
4237       if( i<nField ) p->azField[i] = z;
4238       continue;
4239     }
4240     while( z[from] ){
4241       if( z[from]=='\\' && z[from+1]!=0 ){
4242         int tx = z[from+1];
4243         switch( tx ){
4244           case 'b':  tx = '\b'; break;
4245           case 'f':  tx = '\f'; break;
4246           case 'n':  tx = '\n'; break;
4247           case 'r':  tx = '\r'; break;
4248           case 't':  tx = '\t'; break;
4249           case 'v':  tx = '\v'; break;
4250           default:   break;
4251         }
4252         z[to++] = tx;
4253         from += 2;
4254         continue;
4255       }
4256       if( z[from]==c && strncmp(&z[from],zDelim,nDelim)==0 ) break;
4257       z[to++] = z[from++];
4258     }
4259     if( z[from] ){
4260       z[to] = 0;
4261       z += from + nDelim;
4262       if( i<nField ) p->azField[i] = z;
4263     }else{
4264       z[to] = 0;
4265       z = "";
4266     }
4267   }
4268   while( i<nField ){
4269     p->azField[i++] = 0;
4270   }
4271   break;
4272 
4273   /* If we reach end-of-file, or if anything goes wrong, jump here.
4274   ** This code will cause a jump to P2 */
4275 fileread_jump:
4276   pc = pOp->p2 - 1;
4277   break;
4278 }
4279 
4280 /* Opcode: FileColumn P1 * *
4281 **
4282 ** Push onto the stack the P1-th column of the most recently read line
4283 ** from the input file.
4284 */
4285 case OP_FileColumn: {
4286   int i = pOp->p1;
4287   char *z;
4288   assert( i>=0 && i<p->nField );
4289   if( p->azField ){
4290     z = p->azField[i];
4291   }else{
4292     z = 0;
4293   }
4294   pTos++;
4295   if( z ){
4296     pTos->n = strlen(z) + 1;
4297     pTos->z = z;
4298     pTos->flags = MEM_Str | MEM_Ephem;
4299   }else{
4300     pTos->flags = MEM_Null;
4301   }
4302   break;
4303 }
4304 
4305 /* Opcode: MemStore P1 P2 *
4306 **
4307 ** Write the top of the stack into memory location P1.
4308 ** P1 should be a small integer since space is allocated
4309 ** for all memory locations between 0 and P1 inclusive.
4310 **
4311 ** After the data is stored in the memory location, the
4312 ** stack is popped once if P2 is 1.  If P2 is zero, then
4313 ** the original data remains on the stack.
4314 */
4315 case OP_MemStore: {
4316   int i = pOp->p1;
4317   Mem *pMem;
4318   assert( pTos>=p->aStack );
4319   if( i>=p->nMem ){
4320     int nOld = p->nMem;
4321     Mem *aMem;
4322     p->nMem = i + 5;
4323     aMem = sqliteRealloc(p->aMem, p->nMem*sizeof(p->aMem[0]));
4324     if( aMem==0 ) goto no_mem;
4325     if( aMem!=p->aMem ){
4326       int j;
4327       for(j=0; j<nOld; j++){
4328         if( aMem[j].flags & MEM_Short ){
4329           aMem[j].z = aMem[j].zShort;
4330         }
4331       }
4332     }
4333     p->aMem = aMem;
4334     if( nOld<p->nMem ){
4335       memset(&p->aMem[nOld], 0, sizeof(p->aMem[0])*(p->nMem-nOld));
4336     }
4337   }
4338   Deephemeralize(pTos);
4339   pMem = &p->aMem[i];
4340   Release(pMem);
4341   *pMem = *pTos;
4342   if( pMem->flags & MEM_Dyn ){
4343     if( pOp->p2 ){
4344       pTos->flags = MEM_Null;
4345     }else{
4346       pMem->z = sqliteMallocRaw( pMem->n );
4347       if( pMem->z==0 ) goto no_mem;
4348       memcpy(pMem->z, pTos->z, pMem->n);
4349     }
4350   }else if( pMem->flags & MEM_Short ){
4351     pMem->z = pMem->zShort;
4352   }
4353   if( pOp->p2 ){
4354     Release(pTos);
4355     pTos--;
4356   }
4357   break;
4358 }
4359 
4360 /* Opcode: MemLoad P1 * *
4361 **
4362 ** Push a copy of the value in memory location P1 onto the stack.
4363 **
4364 ** If the value is a string, then the value pushed is a pointer to
4365 ** the string that is stored in the memory location.  If the memory
4366 ** location is subsequently changed (using OP_MemStore) then the
4367 ** value pushed onto the stack will change too.
4368 */
4369 case OP_MemLoad: {
4370   int i = pOp->p1;
4371   assert( i>=0 && i<p->nMem );
4372   pTos++;
4373   memcpy(pTos, &p->aMem[i], sizeof(pTos[0])-NBFS);;
4374   if( pTos->flags & MEM_Str ){
4375     pTos->flags |= MEM_Ephem;
4376     pTos->flags &= ~(MEM_Dyn|MEM_Static|MEM_Short);
4377   }
4378   break;
4379 }
4380 
4381 /* Opcode: MemIncr P1 P2 *
4382 **
4383 ** Increment the integer valued memory cell P1 by 1.  If P2 is not zero
4384 ** and the result after the increment is greater than zero, then jump
4385 ** to P2.
4386 **
4387 ** This instruction throws an error if the memory cell is not initially
4388 ** an integer.
4389 */
4390 case OP_MemIncr: {
4391   int i = pOp->p1;
4392   Mem *pMem;
4393   assert( i>=0 && i<p->nMem );
4394   pMem = &p->aMem[i];
4395   assert( pMem->flags==MEM_Int );
4396   pMem->i++;
4397   if( pOp->p2>0 && pMem->i>0 ){
4398      pc = pOp->p2 - 1;
4399   }
4400   break;
4401 }
4402 
4403 /* Opcode: AggReset * P2 *
4404 **
4405 ** Reset the aggregator so that it no longer contains any data.
4406 ** Future aggregator elements will contain P2 values each.
4407 */
4408 case OP_AggReset: {
4409   sqliteVdbeAggReset(&p->agg);
4410   p->agg.nMem = pOp->p2;
4411   p->agg.apFunc = sqliteMalloc( p->agg.nMem*sizeof(p->agg.apFunc[0]) );
4412   if( p->agg.apFunc==0 ) goto no_mem;
4413   break;
4414 }
4415 
4416 /* Opcode: AggInit * P2 P3
4417 **
4418 ** Initialize the function parameters for an aggregate function.
4419 ** The aggregate will operate out of aggregate column P2.
4420 ** P3 is a pointer to the FuncDef structure for the function.
4421 */
4422 case OP_AggInit: {
4423   int i = pOp->p2;
4424   assert( i>=0 && i<p->agg.nMem );
4425   p->agg.apFunc[i] = (FuncDef*)pOp->p3;
4426   break;
4427 }
4428 
4429 /* Opcode: AggFunc * P2 P3
4430 **
4431 ** Execute the step function for an aggregate.  The
4432 ** function has P2 arguments.  P3 is a pointer to the FuncDef
4433 ** structure that specifies the function.
4434 **
4435 ** The top of the stack must be an integer which is the index of
4436 ** the aggregate column that corresponds to this aggregate function.
4437 ** Ideally, this index would be another parameter, but there are
4438 ** no free parameters left.  The integer is popped from the stack.
4439 */
4440 case OP_AggFunc: {
4441   int n = pOp->p2;
4442   int i;
4443   Mem *pMem, *pRec;
4444   char **azArgv = p->zArgv;
4445   sqlite_func ctx;
4446 
4447   assert( n>=0 );
4448   assert( pTos->flags==MEM_Int );
4449   pRec = &pTos[-n];
4450   assert( pRec>=p->aStack );
4451   for(i=0; i<n; i++, pRec++){
4452     if( pRec->flags & MEM_Null ){
4453       azArgv[i] = 0;
4454     }else{
4455       Stringify(pRec);
4456       azArgv[i] = pRec->z;
4457     }
4458   }
4459   i = pTos->i;
4460   assert( i>=0 && i<p->agg.nMem );
4461   ctx.pFunc = (FuncDef*)pOp->p3;
4462   pMem = &p->agg.pCurrent->aMem[i];
4463   ctx.s.z = pMem->zShort;  /* Space used for small aggregate contexts */
4464   ctx.pAgg = pMem->z;
4465   ctx.cnt = ++pMem->i;
4466   ctx.isError = 0;
4467   ctx.isStep = 1;
4468   (ctx.pFunc->xStep)(&ctx, n, (const char**)azArgv);
4469   pMem->z = ctx.pAgg;
4470   pMem->flags = MEM_AggCtx;
4471   popStack(&pTos, n+1);
4472   if( ctx.isError ){
4473     rc = SQLITE_ERROR;
4474   }
4475   break;
4476 }
4477 
4478 /* Opcode: AggFocus * P2 *
4479 **
4480 ** Pop the top of the stack and use that as an aggregator key.  If
4481 ** an aggregator with that same key already exists, then make the
4482 ** aggregator the current aggregator and jump to P2.  If no aggregator
4483 ** with the given key exists, create one and make it current but
4484 ** do not jump.
4485 **
4486 ** The order of aggregator opcodes is important.  The order is:
4487 ** AggReset AggFocus AggNext.  In other words, you must execute
4488 ** AggReset first, then zero or more AggFocus operations, then
4489 ** zero or more AggNext operations.  You must not execute an AggFocus
4490 ** in between an AggNext and an AggReset.
4491 */
4492 case OP_AggFocus: {
4493   AggElem *pElem;
4494   char *zKey;
4495   int nKey;
4496 
4497   assert( pTos>=p->aStack );
4498   Stringify(pTos);
4499   zKey = pTos->z;
4500   nKey = pTos->n;
4501   pElem = sqliteHashFind(&p->agg.hash, zKey, nKey);
4502   if( pElem ){
4503     p->agg.pCurrent = pElem;
4504     pc = pOp->p2 - 1;
4505   }else{
4506     AggInsert(&p->agg, zKey, nKey);
4507     if( sqlite_malloc_failed ) goto no_mem;
4508   }
4509   Release(pTos);
4510   pTos--;
4511   break;
4512 }
4513 
4514 /* Opcode: AggSet * P2 *
4515 **
4516 ** Move the top of the stack into the P2-th field of the current
4517 ** aggregate.  String values are duplicated into new memory.
4518 */
4519 case OP_AggSet: {
4520   AggElem *pFocus = AggInFocus(p->agg);
4521   Mem *pMem;
4522   int i = pOp->p2;
4523   assert( pTos>=p->aStack );
4524   if( pFocus==0 ) goto no_mem;
4525   assert( i>=0 && i<p->agg.nMem );
4526   Deephemeralize(pTos);
4527   pMem = &pFocus->aMem[i];
4528   Release(pMem);
4529   *pMem = *pTos;
4530   if( pMem->flags & MEM_Dyn ){
4531     pTos->flags = MEM_Null;
4532   }else if( pMem->flags & MEM_Short ){
4533     pMem->z = pMem->zShort;
4534   }
4535   Release(pTos);
4536   pTos--;
4537   break;
4538 }
4539 
4540 /* Opcode: AggGet * P2 *
4541 **
4542 ** Push a new entry onto the stack which is a copy of the P2-th field
4543 ** of the current aggregate.  Strings are not duplicated so
4544 ** string values will be ephemeral.
4545 */
4546 case OP_AggGet: {
4547   AggElem *pFocus = AggInFocus(p->agg);
4548   Mem *pMem;
4549   int i = pOp->p2;
4550   if( pFocus==0 ) goto no_mem;
4551   assert( i>=0 && i<p->agg.nMem );
4552   pTos++;
4553   pMem = &pFocus->aMem[i];
4554   *pTos = *pMem;
4555   if( pTos->flags & MEM_Str ){
4556     pTos->flags &= ~(MEM_Dyn|MEM_Static|MEM_Short);
4557     pTos->flags |= MEM_Ephem;
4558   }
4559   break;
4560 }
4561 
4562 /* Opcode: AggNext * P2 *
4563 **
4564 ** Make the next aggregate value the current aggregate.  The prior
4565 ** aggregate is deleted.  If all aggregate values have been consumed,
4566 ** jump to P2.
4567 **
4568 ** The order of aggregator opcodes is important.  The order is:
4569 ** AggReset AggFocus AggNext.  In other words, you must execute
4570 ** AggReset first, then zero or more AggFocus operations, then
4571 ** zero or more AggNext operations.  You must not execute an AggFocus
4572 ** in between an AggNext and an AggReset.
4573 */
4574 case OP_AggNext: {
4575   CHECK_FOR_INTERRUPT;
4576   if( p->agg.pSearch==0 ){
4577     p->agg.pSearch = sqliteHashFirst(&p->agg.hash);
4578   }else{
4579     p->agg.pSearch = sqliteHashNext(p->agg.pSearch);
4580   }
4581   if( p->agg.pSearch==0 ){
4582     pc = pOp->p2 - 1;
4583   } else {
4584     int i;
4585     sqlite_func ctx;
4586     Mem *aMem;
4587     p->agg.pCurrent = sqliteHashData(p->agg.pSearch);
4588     aMem = p->agg.pCurrent->aMem;
4589     for(i=0; i<p->agg.nMem; i++){
4590       int freeCtx;
4591       if( p->agg.apFunc[i]==0 ) continue;
4592       if( p->agg.apFunc[i]->xFinalize==0 ) continue;
4593       ctx.s.flags = MEM_Null;
4594       ctx.s.z = aMem[i].zShort;
4595       ctx.pAgg = (void*)aMem[i].z;
4596       freeCtx = aMem[i].z && aMem[i].z!=aMem[i].zShort;
4597       ctx.cnt = aMem[i].i;
4598       ctx.isStep = 0;
4599       ctx.pFunc = p->agg.apFunc[i];
4600       (*p->agg.apFunc[i]->xFinalize)(&ctx);
4601       if( freeCtx ){
4602         sqliteFree( aMem[i].z );
4603       }
4604       aMem[i] = ctx.s;
4605       if( aMem[i].flags & MEM_Short ){
4606         aMem[i].z = aMem[i].zShort;
4607       }
4608     }
4609   }
4610   break;
4611 }
4612 
4613 /* Opcode: SetInsert P1 * P3
4614 **
4615 ** If Set P1 does not exist then create it.  Then insert value
4616 ** P3 into that set.  If P3 is NULL, then insert the top of the
4617 ** stack into the set.
4618 */
4619 case OP_SetInsert: {
4620   int i = pOp->p1;
4621   if( p->nSet<=i ){
4622     int k;
4623     Set *aSet = sqliteRealloc(p->aSet, (i+1)*sizeof(p->aSet[0]) );
4624     if( aSet==0 ) goto no_mem;
4625     p->aSet = aSet;
4626     for(k=p->nSet; k<=i; k++){
4627       sqliteHashInit(&p->aSet[k].hash, SQLITE_HASH_BINARY, 1);
4628     }
4629     p->nSet = i+1;
4630   }
4631   if( pOp->p3 ){
4632     sqliteHashInsert(&p->aSet[i].hash, pOp->p3, strlen(pOp->p3)+1, p);
4633   }else{
4634     assert( pTos>=p->aStack );
4635     Stringify(pTos);
4636     sqliteHashInsert(&p->aSet[i].hash, pTos->z, pTos->n, p);
4637     Release(pTos);
4638     pTos--;
4639   }
4640   if( sqlite_malloc_failed ) goto no_mem;
4641   break;
4642 }
4643 
4644 /* Opcode: SetFound P1 P2 *
4645 **
4646 ** Pop the stack once and compare the value popped off with the
4647 ** contents of set P1.  If the element popped exists in set P1,
4648 ** then jump to P2.  Otherwise fall through.
4649 */
4650 case OP_SetFound: {
4651   int i = pOp->p1;
4652   assert( pTos>=p->aStack );
4653   Stringify(pTos);
4654   if( i>=0 && i<p->nSet && sqliteHashFind(&p->aSet[i].hash, pTos->z, pTos->n)){
4655     pc = pOp->p2 - 1;
4656   }
4657   Release(pTos);
4658   pTos--;
4659   break;
4660 }
4661 
4662 /* Opcode: SetNotFound P1 P2 *
4663 **
4664 ** Pop the stack once and compare the value popped off with the
4665 ** contents of set P1.  If the element popped does not exists in
4666 ** set P1, then jump to P2.  Otherwise fall through.
4667 */
4668 case OP_SetNotFound: {
4669   int i = pOp->p1;
4670   assert( pTos>=p->aStack );
4671   Stringify(pTos);
4672   if( i<0 || i>=p->nSet ||
4673        sqliteHashFind(&p->aSet[i].hash, pTos->z, pTos->n)==0 ){
4674     pc = pOp->p2 - 1;
4675   }
4676   Release(pTos);
4677   pTos--;
4678   break;
4679 }
4680 
4681 /* Opcode: SetFirst P1 P2 *
4682 **
4683 ** Read the first element from set P1 and push it onto the stack.  If the
4684 ** set is empty, push nothing and jump immediately to P2.  This opcode is
4685 ** used in combination with OP_SetNext to loop over all elements of a set.
4686 */
4687 /* Opcode: SetNext P1 P2 *
4688 **
4689 ** Read the next element from set P1 and push it onto the stack.  If there
4690 ** are no more elements in the set, do not do the push and fall through.
4691 ** Otherwise, jump to P2 after pushing the next set element.
4692 */
4693 case OP_SetFirst:
4694 case OP_SetNext: {
4695   Set *pSet;
4696   CHECK_FOR_INTERRUPT;
4697   if( pOp->p1<0 || pOp->p1>=p->nSet ){
4698     if( pOp->opcode==OP_SetFirst ) pc = pOp->p2 - 1;
4699     break;
4700   }
4701   pSet = &p->aSet[pOp->p1];
4702   if( pOp->opcode==OP_SetFirst ){
4703     pSet->prev = sqliteHashFirst(&pSet->hash);
4704     if( pSet->prev==0 ){
4705       pc = pOp->p2 - 1;
4706       break;
4707     }
4708   }else{
4709     if( pSet->prev ){
4710       pSet->prev = sqliteHashNext(pSet->prev);
4711     }
4712     if( pSet->prev==0 ){
4713       break;
4714     }else{
4715       pc = pOp->p2 - 1;
4716     }
4717   }
4718   pTos++;
4719   pTos->z = sqliteHashKey(pSet->prev);
4720   pTos->n = sqliteHashKeysize(pSet->prev);
4721   pTos->flags = MEM_Str | MEM_Ephem;
4722   break;
4723 }
4724 
4725 /* Opcode: Vacuum * * *
4726 **
4727 ** Vacuum the entire database.  This opcode will cause other virtual
4728 ** machines to be created and run.  It may not be called from within
4729 ** a transaction.
4730 */
4731 case OP_Vacuum: {
4732   if( sqliteSafetyOff(db) ) goto abort_due_to_misuse;
4733   rc = sqliteRunVacuum(&p->zErrMsg, db);
4734   if( sqliteSafetyOn(db) ) goto abort_due_to_misuse;
4735   break;
4736 }
4737 
4738 /* Opcode: StackDepth * * *
4739 **
4740 ** Push an integer onto the stack which is the depth of the stack prior
4741 ** to that integer being pushed.
4742 */
4743 case OP_StackDepth: {
4744   int depth = (&pTos[1]) - p->aStack;
4745   pTos++;
4746   pTos->i = depth;
4747   pTos->flags = MEM_Int;
4748   break;
4749 }
4750 
4751 /* Opcode: StackReset * * *
4752 **
4753 ** Pop a single integer off of the stack.  Then pop the stack
4754 ** as many times as necessary to get the depth of the stack down
4755 ** to the value of the integer that was popped.
4756 */
4757 case OP_StackReset: {
4758   int depth, goal;
4759   assert( pTos>=p->aStack );
4760   Integerify(pTos);
4761   goal = pTos->i;
4762   depth = (&pTos[1]) - p->aStack;
4763   assert( goal<depth );
4764   popStack(&pTos, depth-goal);
4765   break;
4766 }
4767 
4768 /* An other opcode is illegal...
4769 */
4770 default: {
4771   sqlite_snprintf(sizeof(zBuf),zBuf,"%d",pOp->opcode);
4772   sqliteSetString(&p->zErrMsg, "unknown opcode ", zBuf, (char*)0);
4773   rc = SQLITE_INTERNAL;
4774   break;
4775 }
4776 
4777 /*****************************************************************************
4778 ** The cases of the switch statement above this line should all be indented
4779 ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
4780 ** readability.  From this point on down, the normal indentation rules are
4781 ** restored.
4782 *****************************************************************************/
4783     }
4784 
4785 #ifdef VDBE_PROFILE
4786     {
4787       long long elapse = hwtime() - start;
4788       pOp->cycles += elapse;
4789       pOp->cnt++;
4790 #if 0
4791         fprintf(stdout, "%10lld ", elapse);
4792         sqliteVdbePrintOp(stdout, origPc, &p->aOp[origPc]);
4793 #endif
4794     }
4795 #endif
4796 
4797     /* The following code adds nothing to the actual functionality
4798     ** of the program.  It is only here for testing and debugging.
4799     ** On the other hand, it does burn CPU cycles every time through
4800     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
4801     */
4802 #ifndef NDEBUG
4803     /* Sanity checking on the top element of the stack */
4804     if( pTos>=p->aStack ){
4805       assert( pTos->flags!=0 );  /* Must define some type */
4806       if( pTos->flags & MEM_Str ){
4807         int x = pTos->flags & (MEM_Static|MEM_Dyn|MEM_Ephem|MEM_Short);
4808         assert( x!=0 );            /* Strings must define a string subtype */
4809         assert( (x & (x-1))==0 );  /* Only one string subtype can be defined */
4810         assert( pTos->z!=0 );      /* Strings must have a value */
4811         /* Mem.z points to Mem.zShort iff the subtype is MEM_Short */
4812         assert( (pTos->flags & MEM_Short)==0 || pTos->z==pTos->zShort );
4813         assert( (pTos->flags & MEM_Short)!=0 || pTos->z!=pTos->zShort );
4814       }else{
4815         /* Cannot define a string subtype for non-string objects */
4816         assert( (pTos->flags & (MEM_Static|MEM_Dyn|MEM_Ephem|MEM_Short))==0 );
4817       }
4818       /* MEM_Null excludes all other types */
4819       assert( pTos->flags==MEM_Null || (pTos->flags&MEM_Null)==0 );
4820     }
4821     if( pc<-1 || pc>=p->nOp ){
4822       sqliteSetString(&p->zErrMsg, "jump destination out of range", (char*)0);
4823       rc = SQLITE_INTERNAL;
4824     }
4825     if( p->trace && pTos>=p->aStack ){
4826       int i;
4827       fprintf(p->trace, "Stack:");
4828       for(i=0; i>-5 && &pTos[i]>=p->aStack; i--){
4829         if( pTos[i].flags & MEM_Null ){
4830           fprintf(p->trace, " NULL");
4831         }else if( (pTos[i].flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
4832           fprintf(p->trace, " si:%d", pTos[i].i);
4833         }else if( pTos[i].flags & MEM_Int ){
4834           fprintf(p->trace, " i:%d", pTos[i].i);
4835         }else if( pTos[i].flags & MEM_Real ){
4836           fprintf(p->trace, " r:%g", pTos[i].r);
4837         }else if( pTos[i].flags & MEM_Str ){
4838           int j, k;
4839           char zBuf[100];
4840           zBuf[0] = ' ';
4841           if( pTos[i].flags & MEM_Dyn ){
4842             zBuf[1] = 'z';
4843             assert( (pTos[i].flags & (MEM_Static|MEM_Ephem))==0 );
4844           }else if( pTos[i].flags & MEM_Static ){
4845             zBuf[1] = 't';
4846             assert( (pTos[i].flags & (MEM_Dyn|MEM_Ephem))==0 );
4847           }else if( pTos[i].flags & MEM_Ephem ){
4848             zBuf[1] = 'e';
4849             assert( (pTos[i].flags & (MEM_Static|MEM_Dyn))==0 );
4850           }else{
4851             zBuf[1] = 's';
4852           }
4853           zBuf[2] = '[';
4854           k = 3;
4855           for(j=0; j<20 && j<pTos[i].n; j++){
4856             int c = pTos[i].z[j];
4857             if( c==0 && j==pTos[i].n-1 ) break;
4858             if( isprint(c) && !isspace(c) ){
4859               zBuf[k++] = c;
4860             }else{
4861               zBuf[k++] = '.';
4862             }
4863           }
4864           zBuf[k++] = ']';
4865           zBuf[k++] = 0;
4866           fprintf(p->trace, "%s", zBuf);
4867         }else{
4868           fprintf(p->trace, " ???");
4869         }
4870       }
4871       if( rc!=0 ) fprintf(p->trace," rc=%d",rc);
4872       fprintf(p->trace,"\n");
4873     }
4874 #endif
4875   }  /* The end of the for(;;) loop the loops through opcodes */
4876 
4877   /* If we reach this point, it means that execution is finished.
4878   */
4879 vdbe_halt:
4880   CHECK_FOR_INTERRUPT
4881   if( rc ){
4882     p->rc = rc;
4883     rc = SQLITE_ERROR;
4884   }else{
4885     rc = SQLITE_DONE;
4886   }
4887   p->magic = VDBE_MAGIC_HALT;
4888   p->pTos = pTos;
4889   return rc;
4890 
4891   /* Jump to here if a malloc() fails.  It's hard to get a malloc()
4892   ** to fail on a modern VM computer, so this code is untested.
4893   */
4894 no_mem:
4895   sqliteSetString(&p->zErrMsg, "out of memory", (char*)0);
4896   rc = SQLITE_NOMEM;
4897   goto vdbe_halt;
4898 
4899   /* Jump to here for an SQLITE_MISUSE error.
4900   */
4901 abort_due_to_misuse:
4902   rc = SQLITE_MISUSE;
4903   /* Fall thru into abort_due_to_error */
4904 
4905   /* Jump to here for any other kind of fatal error.  The "rc" variable
4906   ** should hold the error number.
4907   */
4908 abort_due_to_error:
4909   if( p->zErrMsg==0 ){
4910     if( sqlite_malloc_failed ) rc = SQLITE_NOMEM;
4911     sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
4912   }
4913   goto vdbe_halt;
4914 
4915   /* Jump to here if the sqlite_interrupt() API sets the interrupt
4916   ** flag.
4917   */
4918 abort_due_to_interrupt:
4919   assert( db->flags & SQLITE_Interrupt );
4920   db->flags &= ~SQLITE_Interrupt;
4921   if( db->magic!=SQLITE_MAGIC_BUSY ){
4922     rc = SQLITE_MISUSE;
4923   }else{
4924     rc = SQLITE_INTERRUPT;
4925   }
4926   sqliteSetString(&p->zErrMsg, sqlite_error_string(rc), (char*)0);
4927   goto vdbe_halt;
4928 }
4929