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