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