1 /*
2 ** 2003 September 6
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 ** This file contains code used for creating, destroying, and populating
13 ** a VDBE (or an "sqlite_vm" as it is known to the outside world.) Prior
14 ** to version 2.8.7, all this code was combined into the vdbe.c source file.
15 ** But that file was getting too big so this subroutines were split out.
16 */
17 #include "sqliteInt.h"
18 #include "os.h"
19 #include <ctype.h>
20 #include "vdbeInt.h"
21
22
23 /*
24 ** When debugging the code generator in a symbolic debugger, one can
25 ** set the sqlite_vdbe_addop_trace to 1 and all opcodes will be printed
26 ** as they are added to the instruction stream.
27 */
28 #ifndef NDEBUG
29 int sqlite_vdbe_addop_trace = 0;
30 #endif
31
32
33 /*
34 ** Create a new virtual database engine.
35 */
sqliteVdbeCreate(sqlite * db)36 Vdbe *sqliteVdbeCreate(sqlite *db){
37 Vdbe *p;
38 p = sqliteMalloc( sizeof(Vdbe) );
39 if( p==0 ) return 0;
40 p->db = db;
41 if( db->pVdbe ){
42 db->pVdbe->pPrev = p;
43 }
44 p->pNext = db->pVdbe;
45 p->pPrev = 0;
46 db->pVdbe = p;
47 p->magic = VDBE_MAGIC_INIT;
48 return p;
49 }
50
51 /*
52 ** Turn tracing on or off
53 */
sqliteVdbeTrace(Vdbe * p,FILE * trace)54 void sqliteVdbeTrace(Vdbe *p, FILE *trace){
55 p->trace = trace;
56 }
57
58 /*
59 ** Add a new instruction to the list of instructions current in the
60 ** VDBE. Return the address of the new instruction.
61 **
62 ** Parameters:
63 **
64 ** p Pointer to the VDBE
65 **
66 ** op The opcode for this instruction
67 **
68 ** p1, p2 First two of the three possible operands.
69 **
70 ** Use the sqliteVdbeResolveLabel() function to fix an address and
71 ** the sqliteVdbeChangeP3() function to change the value of the P3
72 ** operand.
73 */
sqliteVdbeAddOp(Vdbe * p,int op,int p1,int p2)74 int sqliteVdbeAddOp(Vdbe *p, int op, int p1, int p2){
75 int i;
76 VdbeOp *pOp;
77
78 i = p->nOp;
79 p->nOp++;
80 assert( p->magic==VDBE_MAGIC_INIT );
81 if( i>=p->nOpAlloc ){
82 int oldSize = p->nOpAlloc;
83 Op *aNew;
84 p->nOpAlloc = p->nOpAlloc*2 + 100;
85 aNew = sqliteRealloc(p->aOp, p->nOpAlloc*sizeof(Op));
86 if( aNew==0 ){
87 p->nOpAlloc = oldSize;
88 return 0;
89 }
90 p->aOp = aNew;
91 memset(&p->aOp[oldSize], 0, (p->nOpAlloc-oldSize)*sizeof(Op));
92 }
93 pOp = &p->aOp[i];
94 pOp->opcode = op;
95 pOp->p1 = p1;
96 if( p2<0 && (-1-p2)<p->nLabel && p->aLabel[-1-p2]>=0 ){
97 p2 = p->aLabel[-1-p2];
98 }
99 pOp->p2 = p2;
100 pOp->p3 = 0;
101 pOp->p3type = P3_NOTUSED;
102 #ifndef NDEBUG
103 if( sqlite_vdbe_addop_trace ) sqliteVdbePrintOp(0, i, &p->aOp[i]);
104 #endif
105 return i;
106 }
107
108 /*
109 ** Add an opcode that includes the p3 value.
110 */
sqliteVdbeOp3(Vdbe * p,int op,int p1,int p2,const char * zP3,int p3type)111 int sqliteVdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3, int p3type){
112 int addr = sqliteVdbeAddOp(p, op, p1, p2);
113 sqliteVdbeChangeP3(p, addr, zP3, p3type);
114 return addr;
115 }
116
117 /*
118 ** Add multiple opcodes. The list is terminated by an opcode of 0.
119 */
sqliteVdbeCode(Vdbe * p,...)120 int sqliteVdbeCode(Vdbe *p, ...){
121 int addr;
122 va_list ap;
123 int opcode, p1, p2;
124 va_start(ap, p);
125 addr = p->nOp;
126 while( (opcode = va_arg(ap,int))!=0 ){
127 p1 = va_arg(ap,int);
128 p2 = va_arg(ap,int);
129 sqliteVdbeAddOp(p, opcode, p1, p2);
130 }
131 va_end(ap);
132 return addr;
133 }
134
135
136
137 /*
138 ** Create a new symbolic label for an instruction that has yet to be
139 ** coded. The symbolic label is really just a negative number. The
140 ** label can be used as the P2 value of an operation. Later, when
141 ** the label is resolved to a specific address, the VDBE will scan
142 ** through its operation list and change all values of P2 which match
143 ** the label into the resolved address.
144 **
145 ** The VDBE knows that a P2 value is a label because labels are
146 ** always negative and P2 values are suppose to be non-negative.
147 ** Hence, a negative P2 value is a label that has yet to be resolved.
148 */
sqliteVdbeMakeLabel(Vdbe * p)149 int sqliteVdbeMakeLabel(Vdbe *p){
150 int i;
151 i = p->nLabel++;
152 assert( p->magic==VDBE_MAGIC_INIT );
153 if( i>=p->nLabelAlloc ){
154 int *aNew;
155 p->nLabelAlloc = p->nLabelAlloc*2 + 10;
156 aNew = sqliteRealloc( p->aLabel, p->nLabelAlloc*sizeof(p->aLabel[0]));
157 if( aNew==0 ){
158 sqliteFree(p->aLabel);
159 }
160 p->aLabel = aNew;
161 }
162 if( p->aLabel==0 ){
163 p->nLabel = 0;
164 p->nLabelAlloc = 0;
165 return 0;
166 }
167 p->aLabel[i] = -1;
168 return -1-i;
169 }
170
171 /*
172 ** Resolve label "x" to be the address of the next instruction to
173 ** be inserted. The parameter "x" must have been obtained from
174 ** a prior call to sqliteVdbeMakeLabel().
175 */
sqliteVdbeResolveLabel(Vdbe * p,int x)176 void sqliteVdbeResolveLabel(Vdbe *p, int x){
177 int j;
178 assert( p->magic==VDBE_MAGIC_INIT );
179 if( x<0 && (-x)<=p->nLabel && p->aOp ){
180 if( p->aLabel[-1-x]==p->nOp ) return;
181 assert( p->aLabel[-1-x]<0 );
182 p->aLabel[-1-x] = p->nOp;
183 for(j=0; j<p->nOp; j++){
184 if( p->aOp[j].p2==x ) p->aOp[j].p2 = p->nOp;
185 }
186 }
187 }
188
189 /*
190 ** Return the address of the next instruction to be inserted.
191 */
sqliteVdbeCurrentAddr(Vdbe * p)192 int sqliteVdbeCurrentAddr(Vdbe *p){
193 assert( p->magic==VDBE_MAGIC_INIT );
194 return p->nOp;
195 }
196
197 /*
198 ** Add a whole list of operations to the operation stack. Return the
199 ** address of the first operation added.
200 */
sqliteVdbeAddOpList(Vdbe * p,int nOp,VdbeOpList const * aOp)201 int sqliteVdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
202 int addr;
203 assert( p->magic==VDBE_MAGIC_INIT );
204 if( p->nOp + nOp >= p->nOpAlloc ){
205 int oldSize = p->nOpAlloc;
206 Op *aNew;
207 p->nOpAlloc = p->nOpAlloc*2 + nOp + 10;
208 aNew = sqliteRealloc(p->aOp, p->nOpAlloc*sizeof(Op));
209 if( aNew==0 ){
210 p->nOpAlloc = oldSize;
211 return 0;
212 }
213 p->aOp = aNew;
214 memset(&p->aOp[oldSize], 0, (p->nOpAlloc-oldSize)*sizeof(Op));
215 }
216 addr = p->nOp;
217 if( nOp>0 ){
218 int i;
219 VdbeOpList const *pIn = aOp;
220 for(i=0; i<nOp; i++, pIn++){
221 int p2 = pIn->p2;
222 VdbeOp *pOut = &p->aOp[i+addr];
223 pOut->opcode = pIn->opcode;
224 pOut->p1 = pIn->p1;
225 pOut->p2 = p2<0 ? addr + ADDR(p2) : p2;
226 pOut->p3 = pIn->p3;
227 pOut->p3type = pIn->p3 ? P3_STATIC : P3_NOTUSED;
228 #ifndef NDEBUG
229 if( sqlite_vdbe_addop_trace ){
230 sqliteVdbePrintOp(0, i+addr, &p->aOp[i+addr]);
231 }
232 #endif
233 }
234 p->nOp += nOp;
235 }
236 return addr;
237 }
238
239 /*
240 ** Change the value of the P1 operand for a specific instruction.
241 ** This routine is useful when a large program is loaded from a
242 ** static array using sqliteVdbeAddOpList but we want to make a
243 ** few minor changes to the program.
244 */
sqliteVdbeChangeP1(Vdbe * p,int addr,int val)245 void sqliteVdbeChangeP1(Vdbe *p, int addr, int val){
246 assert( p->magic==VDBE_MAGIC_INIT );
247 if( p && addr>=0 && p->nOp>addr && p->aOp ){
248 p->aOp[addr].p1 = val;
249 }
250 }
251
252 /*
253 ** Change the value of the P2 operand for a specific instruction.
254 ** This routine is useful for setting a jump destination.
255 */
sqliteVdbeChangeP2(Vdbe * p,int addr,int val)256 void sqliteVdbeChangeP2(Vdbe *p, int addr, int val){
257 assert( val>=0 );
258 assert( p->magic==VDBE_MAGIC_INIT );
259 if( p && addr>=0 && p->nOp>addr && p->aOp ){
260 p->aOp[addr].p2 = val;
261 }
262 }
263
264 /*
265 ** Change the value of the P3 operand for a specific instruction.
266 ** This routine is useful when a large program is loaded from a
267 ** static array using sqliteVdbeAddOpList but we want to make a
268 ** few minor changes to the program.
269 **
270 ** If n>=0 then the P3 operand is dynamic, meaning that a copy of
271 ** the string is made into memory obtained from sqliteMalloc().
272 ** A value of n==0 means copy bytes of zP3 up to and including the
273 ** first null byte. If n>0 then copy n+1 bytes of zP3.
274 **
275 ** If n==P3_STATIC it means that zP3 is a pointer to a constant static
276 ** string and we can just copy the pointer. n==P3_POINTER means zP3 is
277 ** a pointer to some object other than a string.
278 **
279 ** If addr<0 then change P3 on the most recently inserted instruction.
280 */
sqliteVdbeChangeP3(Vdbe * p,int addr,const char * zP3,int n)281 void sqliteVdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){
282 Op *pOp;
283 assert( p->magic==VDBE_MAGIC_INIT );
284 if( p==0 || p->aOp==0 ) return;
285 if( addr<0 || addr>=p->nOp ){
286 addr = p->nOp - 1;
287 if( addr<0 ) return;
288 }
289 pOp = &p->aOp[addr];
290 if( pOp->p3 && pOp->p3type==P3_DYNAMIC ){
291 sqliteFree(pOp->p3);
292 pOp->p3 = 0;
293 }
294 if( zP3==0 ){
295 pOp->p3 = 0;
296 pOp->p3type = P3_NOTUSED;
297 }else if( n<0 ){
298 pOp->p3 = (char*)zP3;
299 pOp->p3type = n;
300 }else{
301 sqliteSetNString(&pOp->p3, zP3, n, 0);
302 pOp->p3type = P3_DYNAMIC;
303 }
304 }
305
306 /*
307 ** If the P3 operand to the specified instruction appears
308 ** to be a quoted string token, then this procedure removes
309 ** the quotes.
310 **
311 ** The quoting operator can be either a grave ascent (ASCII 0x27)
312 ** or a double quote character (ASCII 0x22). Two quotes in a row
313 ** resolve to be a single actual quote character within the string.
314 */
sqliteVdbeDequoteP3(Vdbe * p,int addr)315 void sqliteVdbeDequoteP3(Vdbe *p, int addr){
316 Op *pOp;
317 assert( p->magic==VDBE_MAGIC_INIT );
318 if( p->aOp==0 ) return;
319 if( addr<0 || addr>=p->nOp ){
320 addr = p->nOp - 1;
321 if( addr<0 ) return;
322 }
323 pOp = &p->aOp[addr];
324 if( pOp->p3==0 || pOp->p3[0]==0 ) return;
325 if( pOp->p3type==P3_POINTER ) return;
326 if( pOp->p3type!=P3_DYNAMIC ){
327 pOp->p3 = sqliteStrDup(pOp->p3);
328 pOp->p3type = P3_DYNAMIC;
329 }
330 sqliteDequote(pOp->p3);
331 }
332
333 /*
334 ** On the P3 argument of the given instruction, change all
335 ** strings of whitespace characters into a single space and
336 ** delete leading and trailing whitespace.
337 */
sqliteVdbeCompressSpace(Vdbe * p,int addr)338 void sqliteVdbeCompressSpace(Vdbe *p, int addr){
339 unsigned char *z;
340 int i, j;
341 Op *pOp;
342 assert( p->magic==VDBE_MAGIC_INIT );
343 if( p->aOp==0 || addr<0 || addr>=p->nOp ) return;
344 pOp = &p->aOp[addr];
345 if( pOp->p3type==P3_POINTER ){
346 return;
347 }
348 if( pOp->p3type!=P3_DYNAMIC ){
349 pOp->p3 = sqliteStrDup(pOp->p3);
350 pOp->p3type = P3_DYNAMIC;
351 }
352 z = (unsigned char*)pOp->p3;
353 if( z==0 ) return;
354 i = j = 0;
355 while( isspace(z[i]) ){ i++; }
356 while( z[i] ){
357 if( isspace(z[i]) ){
358 z[j++] = ' ';
359 while( isspace(z[++i]) ){}
360 }else{
361 z[j++] = z[i++];
362 }
363 }
364 while( j>0 && isspace(z[j-1]) ){ j--; }
365 z[j] = 0;
366 }
367
368 /*
369 ** Search for the current program for the given opcode and P2
370 ** value. Return the address plus 1 if found and 0 if not found.
371 */
sqliteVdbeFindOp(Vdbe * p,int op,int p2)372 int sqliteVdbeFindOp(Vdbe *p, int op, int p2){
373 int i;
374 assert( p->magic==VDBE_MAGIC_INIT );
375 for(i=0; i<p->nOp; i++){
376 if( p->aOp[i].opcode==op && p->aOp[i].p2==p2 ) return i+1;
377 }
378 return 0;
379 }
380
381 /*
382 ** Return the opcode for a given address.
383 */
sqliteVdbeGetOp(Vdbe * p,int addr)384 VdbeOp *sqliteVdbeGetOp(Vdbe *p, int addr){
385 assert( p->magic==VDBE_MAGIC_INIT );
386 assert( addr>=0 && addr<p->nOp );
387 return &p->aOp[addr];
388 }
389
390 /*
391 ** The following group or routines are employed by installable functions
392 ** to return their results.
393 **
394 ** The sqlite_set_result_string() routine can be used to return a string
395 ** value or to return a NULL. To return a NULL, pass in NULL for zResult.
396 ** A copy is made of the string before this routine returns so it is safe
397 ** to pass in an ephemeral string.
398 **
399 ** sqlite_set_result_error() works like sqlite_set_result_string() except
400 ** that it signals a fatal error. The string argument, if any, is the
401 ** error message. If the argument is NULL a generic substitute error message
402 ** is used.
403 **
404 ** The sqlite_set_result_int() and sqlite_set_result_double() set the return
405 ** value of the user function to an integer or a double.
406 **
407 ** These routines are defined here in vdbe.c because they depend on knowing
408 ** the internals of the sqlite_func structure which is only defined in
409 ** this source file.
410 */
sqlite_set_result_string(sqlite_func * p,const char * zResult,int n)411 char *sqlite_set_result_string(sqlite_func *p, const char *zResult, int n){
412 assert( !p->isStep );
413 if( p->s.flags & MEM_Dyn ){
414 sqliteFree(p->s.z);
415 }
416 if( zResult==0 ){
417 p->s.flags = MEM_Null;
418 n = 0;
419 p->s.z = 0;
420 p->s.n = 0;
421 }else{
422 if( n<0 ) n = strlen(zResult);
423 if( n<NBFS-1 ){
424 memcpy(p->s.zShort, zResult, n);
425 p->s.zShort[n] = 0;
426 p->s.flags = MEM_Str | MEM_Short;
427 p->s.z = p->s.zShort;
428 }else{
429 p->s.z = sqliteMallocRaw( n+1 );
430 if( p->s.z ){
431 memcpy(p->s.z, zResult, n);
432 p->s.z[n] = 0;
433 }
434 p->s.flags = MEM_Str | MEM_Dyn;
435 }
436 p->s.n = n+1;
437 }
438 return p->s.z;
439 }
sqlite_set_result_int(sqlite_func * p,int iResult)440 void sqlite_set_result_int(sqlite_func *p, int iResult){
441 assert( !p->isStep );
442 if( p->s.flags & MEM_Dyn ){
443 sqliteFree(p->s.z);
444 }
445 p->s.i = iResult;
446 p->s.flags = MEM_Int;
447 }
sqlite_set_result_double(sqlite_func * p,double rResult)448 void sqlite_set_result_double(sqlite_func *p, double rResult){
449 assert( !p->isStep );
450 if( p->s.flags & MEM_Dyn ){
451 sqliteFree(p->s.z);
452 }
453 p->s.r = rResult;
454 p->s.flags = MEM_Real;
455 }
sqlite_set_result_error(sqlite_func * p,const char * zMsg,int n)456 void sqlite_set_result_error(sqlite_func *p, const char *zMsg, int n){
457 assert( !p->isStep );
458 sqlite_set_result_string(p, zMsg, n);
459 p->isError = 1;
460 }
461
462 /*
463 ** Extract the user data from a sqlite_func structure and return a
464 ** pointer to it.
465 */
sqlite_user_data(sqlite_func * p)466 void *sqlite_user_data(sqlite_func *p){
467 assert( p && p->pFunc );
468 return p->pFunc->pUserData;
469 }
470
471 /*
472 ** Allocate or return the aggregate context for a user function. A new
473 ** context is allocated on the first call. Subsequent calls return the
474 ** same context that was returned on prior calls.
475 **
476 ** This routine is defined here in vdbe.c because it depends on knowing
477 ** the internals of the sqlite_func structure which is only defined in
478 ** this source file.
479 */
sqlite_aggregate_context(sqlite_func * p,int nByte)480 void *sqlite_aggregate_context(sqlite_func *p, int nByte){
481 assert( p && p->pFunc && p->pFunc->xStep );
482 if( p->pAgg==0 ){
483 if( nByte<=NBFS ){
484 p->pAgg = (void*)p->s.z;
485 memset(p->pAgg, 0, nByte);
486 }else{
487 p->pAgg = sqliteMalloc( nByte );
488 }
489 }
490 return p->pAgg;
491 }
492
493 /*
494 ** Return the number of times the Step function of a aggregate has been
495 ** called.
496 **
497 ** This routine is defined here in vdbe.c because it depends on knowing
498 ** the internals of the sqlite_func structure which is only defined in
499 ** this source file.
500 */
sqlite_aggregate_count(sqlite_func * p)501 int sqlite_aggregate_count(sqlite_func *p){
502 assert( p && p->pFunc && p->pFunc->xStep );
503 return p->cnt;
504 }
505
506 #if !defined(NDEBUG) || defined(VDBE_PROFILE)
507 /*
508 ** Print a single opcode. This routine is used for debugging only.
509 */
sqliteVdbePrintOp(FILE * pOut,int pc,Op * pOp)510 void sqliteVdbePrintOp(FILE *pOut, int pc, Op *pOp){
511 char *zP3;
512 char zPtr[40];
513 if( pOp->p3type==P3_POINTER ){
514 sprintf(zPtr, "ptr(%#lx)", (long)pOp->p3);
515 zP3 = zPtr;
516 }else{
517 zP3 = pOp->p3;
518 }
519 if( pOut==0 ) pOut = stdout;
520 fprintf(pOut,"%4d %-12s %4d %4d %s\n",
521 pc, sqliteOpcodeNames[pOp->opcode], pOp->p1, pOp->p2, zP3 ? zP3 : "");
522 fflush(pOut);
523 }
524 #endif
525
526 /*
527 ** Give a listing of the program in the virtual machine.
528 **
529 ** The interface is the same as sqliteVdbeExec(). But instead of
530 ** running the code, it invokes the callback once for each instruction.
531 ** This feature is used to implement "EXPLAIN".
532 */
sqliteVdbeList(Vdbe * p)533 int sqliteVdbeList(
534 Vdbe *p /* The VDBE */
535 ){
536 sqlite *db = p->db;
537 int i;
538 int rc = SQLITE_OK;
539 static char *azColumnNames[] = {
540 "addr", "opcode", "p1", "p2", "p3",
541 "int", "text", "int", "int", "text",
542 0
543 };
544
545 assert( p->popStack==0 );
546 assert( p->explain );
547 p->azColName = azColumnNames;
548 p->azResColumn = p->zArgv;
549 for(i=0; i<5; i++) p->zArgv[i] = p->aStack[i].zShort;
550 i = p->pc;
551 if( i>=p->nOp ){
552 p->rc = SQLITE_OK;
553 rc = SQLITE_DONE;
554 }else if( db->flags & SQLITE_Interrupt ){
555 db->flags &= ~SQLITE_Interrupt;
556 if( db->magic!=SQLITE_MAGIC_BUSY ){
557 p->rc = SQLITE_MISUSE;
558 }else{
559 p->rc = SQLITE_INTERRUPT;
560 }
561 rc = SQLITE_ERROR;
562 sqliteSetString(&p->zErrMsg, sqlite_error_string(p->rc), (char*)0);
563 }else{
564 sprintf(p->zArgv[0],"%d",i);
565 sprintf(p->zArgv[2],"%d", p->aOp[i].p1);
566 sprintf(p->zArgv[3],"%d", p->aOp[i].p2);
567 if( p->aOp[i].p3type==P3_POINTER ){
568 sprintf(p->aStack[4].zShort, "ptr(%#lx)", (long)p->aOp[i].p3);
569 p->zArgv[4] = p->aStack[4].zShort;
570 }else{
571 p->zArgv[4] = p->aOp[i].p3;
572 }
573 p->zArgv[1] = sqliteOpcodeNames[p->aOp[i].opcode];
574 p->pc = i+1;
575 p->azResColumn = p->zArgv;
576 p->nResColumn = 5;
577 p->rc = SQLITE_OK;
578 rc = SQLITE_ROW;
579 }
580 return rc;
581 }
582
583 /*
584 ** Prepare a virtual machine for execution. This involves things such
585 ** as allocating stack space and initializing the program counter.
586 ** After the VDBE has be prepped, it can be executed by one or more
587 ** calls to sqliteVdbeExec().
588 */
sqliteVdbeMakeReady(Vdbe * p,int nVar,int isExplain)589 void sqliteVdbeMakeReady(
590 Vdbe *p, /* The VDBE */
591 int nVar, /* Number of '?' see in the SQL statement */
592 int isExplain /* True if the EXPLAIN keywords is present */
593 ){
594 int n;
595
596 assert( p!=0 );
597 assert( p->magic==VDBE_MAGIC_INIT );
598
599 /* Add a HALT instruction to the very end of the program.
600 */
601 if( p->nOp==0 || (p->aOp && p->aOp[p->nOp-1].opcode!=OP_Halt) ){
602 sqliteVdbeAddOp(p, OP_Halt, 0, 0);
603 }
604
605 /* No instruction ever pushes more than a single element onto the
606 ** stack. And the stack never grows on successive executions of the
607 ** same loop. So the total number of instructions is an upper bound
608 ** on the maximum stack depth required.
609 **
610 ** Allocation all the stack space we will ever need.
611 */
612 if( p->aStack==0 ){
613 p->nVar = nVar;
614 assert( nVar>=0 );
615 n = isExplain ? 10 : p->nOp;
616 p->aStack = sqliteMalloc(
617 n*(sizeof(p->aStack[0]) + 2*sizeof(char*)) /* aStack and zArgv */
618 + p->nVar*(sizeof(char*)+sizeof(int)+1) /* azVar, anVar, abVar */
619 );
620 p->zArgv = (char**)&p->aStack[n];
621 p->azColName = (char**)&p->zArgv[n];
622 p->azVar = (char**)&p->azColName[n];
623 p->anVar = (int*)&p->azVar[p->nVar];
624 p->abVar = (u8*)&p->anVar[p->nVar];
625 }
626
627 sqliteHashInit(&p->agg.hash, SQLITE_HASH_BINARY, 0);
628 p->agg.pSearch = 0;
629 #ifdef MEMORY_DEBUG
630 if( sqliteOsFileExists("vdbe_trace") ){
631 p->trace = stdout;
632 }
633 #endif
634 p->pTos = &p->aStack[-1];
635 p->pc = 0;
636 p->rc = SQLITE_OK;
637 p->uniqueCnt = 0;
638 p->returnDepth = 0;
639 p->errorAction = OE_Abort;
640 p->undoTransOnError = 0;
641 p->popStack = 0;
642 p->explain |= isExplain;
643 p->magic = VDBE_MAGIC_RUN;
644 #ifdef VDBE_PROFILE
645 {
646 int i;
647 for(i=0; i<p->nOp; i++){
648 p->aOp[i].cnt = 0;
649 p->aOp[i].cycles = 0;
650 }
651 }
652 #endif
653 }
654
655
656 /*
657 ** Remove any elements that remain on the sorter for the VDBE given.
658 */
sqliteVdbeSorterReset(Vdbe * p)659 void sqliteVdbeSorterReset(Vdbe *p){
660 while( p->pSort ){
661 Sorter *pSorter = p->pSort;
662 p->pSort = pSorter->pNext;
663 sqliteFree(pSorter->zKey);
664 sqliteFree(pSorter->pData);
665 sqliteFree(pSorter);
666 }
667 }
668
669 /*
670 ** Reset an Agg structure. Delete all its contents.
671 **
672 ** For installable aggregate functions, if the step function has been
673 ** called, make sure the finalizer function has also been called. The
674 ** finalizer might need to free memory that was allocated as part of its
675 ** private context. If the finalizer has not been called yet, call it
676 ** now.
677 */
sqliteVdbeAggReset(Agg * pAgg)678 void sqliteVdbeAggReset(Agg *pAgg){
679 int i;
680 HashElem *p;
681 for(p = sqliteHashFirst(&pAgg->hash); p; p = sqliteHashNext(p)){
682 AggElem *pElem = sqliteHashData(p);
683 assert( pAgg->apFunc!=0 );
684 for(i=0; i<pAgg->nMem; i++){
685 Mem *pMem = &pElem->aMem[i];
686 if( pAgg->apFunc[i] && (pMem->flags & MEM_AggCtx)!=0 ){
687 sqlite_func ctx;
688 ctx.pFunc = pAgg->apFunc[i];
689 ctx.s.flags = MEM_Null;
690 ctx.pAgg = pMem->z;
691 ctx.cnt = pMem->i;
692 ctx.isStep = 0;
693 ctx.isError = 0;
694 (*pAgg->apFunc[i]->xFinalize)(&ctx);
695 if( pMem->z!=0 && pMem->z!=pMem->zShort ){
696 sqliteFree(pMem->z);
697 }
698 if( ctx.s.flags & MEM_Dyn ){
699 sqliteFree(ctx.s.z);
700 }
701 }else if( pMem->flags & MEM_Dyn ){
702 sqliteFree(pMem->z);
703 }
704 }
705 sqliteFree(pElem);
706 }
707 sqliteHashClear(&pAgg->hash);
708 sqliteFree(pAgg->apFunc);
709 pAgg->apFunc = 0;
710 pAgg->pCurrent = 0;
711 pAgg->pSearch = 0;
712 pAgg->nMem = 0;
713 }
714
715 /*
716 ** Delete a keylist
717 */
sqliteVdbeKeylistFree(Keylist * p)718 void sqliteVdbeKeylistFree(Keylist *p){
719 while( p ){
720 Keylist *pNext = p->pNext;
721 sqliteFree(p);
722 p = pNext;
723 }
724 }
725
726 /*
727 ** Close a cursor and release all the resources that cursor happens
728 ** to hold.
729 */
sqliteVdbeCleanupCursor(Cursor * pCx)730 void sqliteVdbeCleanupCursor(Cursor *pCx){
731 if( pCx->pCursor ){
732 sqliteBtreeCloseCursor(pCx->pCursor);
733 }
734 if( pCx->pBt ){
735 sqliteBtreeClose(pCx->pBt);
736 }
737 sqliteFree(pCx->pData);
738 memset(pCx, 0, sizeof(Cursor));
739 }
740
741 /*
742 ** Close all cursors
743 */
closeAllCursors(Vdbe * p)744 static void closeAllCursors(Vdbe *p){
745 int i;
746 for(i=0; i<p->nCursor; i++){
747 sqliteVdbeCleanupCursor(&p->aCsr[i]);
748 }
749 sqliteFree(p->aCsr);
750 p->aCsr = 0;
751 p->nCursor = 0;
752 }
753
754 /*
755 ** Clean up the VM after execution.
756 **
757 ** This routine will automatically close any cursors, lists, and/or
758 ** sorters that were left open. It also deletes the values of
759 ** variables in the azVariable[] array.
760 */
Cleanup(Vdbe * p)761 static void Cleanup(Vdbe *p){
762 int i;
763 if( p->aStack ){
764 Mem *pTos = p->pTos;
765 while( pTos>=p->aStack ){
766 if( pTos->flags & MEM_Dyn ){
767 sqliteFree(pTos->z);
768 }
769 pTos--;
770 }
771 p->pTos = pTos;
772 }
773 closeAllCursors(p);
774 if( p->aMem ){
775 for(i=0; i<p->nMem; i++){
776 if( p->aMem[i].flags & MEM_Dyn ){
777 sqliteFree(p->aMem[i].z);
778 }
779 }
780 }
781 sqliteFree(p->aMem);
782 p->aMem = 0;
783 p->nMem = 0;
784 if( p->pList ){
785 sqliteVdbeKeylistFree(p->pList);
786 p->pList = 0;
787 }
788 sqliteVdbeSorterReset(p);
789 if( p->pFile ){
790 if( p->pFile!=stdin ) fclose(p->pFile);
791 p->pFile = 0;
792 }
793 if( p->azField ){
794 sqliteFree(p->azField);
795 p->azField = 0;
796 }
797 p->nField = 0;
798 if( p->zLine ){
799 sqliteFree(p->zLine);
800 p->zLine = 0;
801 }
802 p->nLineAlloc = 0;
803 sqliteVdbeAggReset(&p->agg);
804 if( p->aSet ){
805 for(i=0; i<p->nSet; i++){
806 sqliteHashClear(&p->aSet[i].hash);
807 }
808 }
809 sqliteFree(p->aSet);
810 p->aSet = 0;
811 p->nSet = 0;
812 if( p->keylistStack ){
813 int ii;
814 for(ii = 0; ii < p->keylistStackDepth; ii++){
815 sqliteVdbeKeylistFree(p->keylistStack[ii]);
816 }
817 sqliteFree(p->keylistStack);
818 p->keylistStackDepth = 0;
819 p->keylistStack = 0;
820 }
821 sqliteFree(p->contextStack);
822 p->contextStack = 0;
823 sqliteFree(p->zErrMsg);
824 p->zErrMsg = 0;
825 }
826
827 /*
828 ** Clean up a VDBE after execution but do not delete the VDBE just yet.
829 ** Write any error messages into *pzErrMsg. Return the result code.
830 **
831 ** After this routine is run, the VDBE should be ready to be executed
832 ** again.
833 */
sqliteVdbeReset(Vdbe * p,char ** pzErrMsg)834 int sqliteVdbeReset(Vdbe *p, char **pzErrMsg){
835 sqlite *db = p->db;
836 int i;
837
838 if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){
839 sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
840 return SQLITE_MISUSE;
841 }
842 if( p->zErrMsg ){
843 if( pzErrMsg && *pzErrMsg==0 ){
844 *pzErrMsg = p->zErrMsg;
845 }else{
846 sqliteFree(p->zErrMsg);
847 }
848 p->zErrMsg = 0;
849 }else if( p->rc ){
850 sqliteSetString(pzErrMsg, sqlite_error_string(p->rc), (char*)0);
851 }
852 Cleanup(p);
853 if( p->rc!=SQLITE_OK ){
854 switch( p->errorAction ){
855 case OE_Abort: {
856 if( !p->undoTransOnError ){
857 for(i=0; i<db->nDb; i++){
858 if( db->aDb[i].pBt ){
859 sqliteBtreeRollbackCkpt(db->aDb[i].pBt);
860 }
861 }
862 break;
863 }
864 /* Fall through to ROLLBACK */
865 }
866 case OE_Rollback: {
867 sqliteRollbackAll(db);
868 db->flags &= ~SQLITE_InTrans;
869 db->onError = OE_Default;
870 break;
871 }
872 default: {
873 if( p->undoTransOnError ){
874 sqliteRollbackAll(db);
875 db->flags &= ~SQLITE_InTrans;
876 db->onError = OE_Default;
877 }
878 break;
879 }
880 }
881 sqliteRollbackInternalChanges(db);
882 }
883 for(i=0; i<db->nDb; i++){
884 if( db->aDb[i].pBt && db->aDb[i].inTrans==2 ){
885 sqliteBtreeCommitCkpt(db->aDb[i].pBt);
886 db->aDb[i].inTrans = 1;
887 }
888 }
889 assert( p->pTos<&p->aStack[p->pc] || sqlite_malloc_failed==1 );
890 #ifdef VDBE_PROFILE
891 {
892 FILE *out = fopen("vdbe_profile.out", "a");
893 if( out ){
894 int i;
895 fprintf(out, "---- ");
896 for(i=0; i<p->nOp; i++){
897 fprintf(out, "%02x", p->aOp[i].opcode);
898 }
899 fprintf(out, "\n");
900 for(i=0; i<p->nOp; i++){
901 fprintf(out, "%6d %10lld %8lld ",
902 p->aOp[i].cnt,
903 p->aOp[i].cycles,
904 p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
905 );
906 sqliteVdbePrintOp(out, i, &p->aOp[i]);
907 }
908 fclose(out);
909 }
910 }
911 #endif
912 p->magic = VDBE_MAGIC_INIT;
913 return p->rc;
914 }
915
916 /*
917 ** Clean up and delete a VDBE after execution. Return an integer which is
918 ** the result code. Write any error message text into *pzErrMsg.
919 */
sqliteVdbeFinalize(Vdbe * p,char ** pzErrMsg)920 int sqliteVdbeFinalize(Vdbe *p, char **pzErrMsg){
921 int rc;
922 sqlite *db;
923
924 if( p->magic!=VDBE_MAGIC_RUN && p->magic!=VDBE_MAGIC_HALT ){
925 sqliteSetString(pzErrMsg, sqlite_error_string(SQLITE_MISUSE), (char*)0);
926 return SQLITE_MISUSE;
927 }
928 db = p->db;
929 rc = sqliteVdbeReset(p, pzErrMsg);
930 sqliteVdbeDelete(p);
931 if( db->want_to_close && db->pVdbe==0 ){
932 sqlite_close(db);
933 }
934 if( rc==SQLITE_SCHEMA ){
935 sqliteResetInternalSchema(db, 0);
936 }
937 return rc;
938 }
939
940 /*
941 ** Set the values of all variables. Variable $1 in the original SQL will
942 ** be the string azValue[0]. $2 will have the value azValue[1]. And
943 ** so forth. If a value is out of range (for example $3 when nValue==2)
944 ** then its value will be NULL.
945 **
946 ** This routine overrides any prior call.
947 */
sqlite_bind(sqlite_vm * pVm,int i,const char * zVal,int len,int copy)948 int sqlite_bind(sqlite_vm *pVm, int i, const char *zVal, int len, int copy){
949 Vdbe *p = (Vdbe*)pVm;
950 if( p->magic!=VDBE_MAGIC_RUN || p->pc!=0 ){
951 return SQLITE_MISUSE;
952 }
953 if( i<1 || i>p->nVar ){
954 return SQLITE_RANGE;
955 }
956 i--;
957 if( p->abVar[i] ){
958 sqliteFree(p->azVar[i]);
959 }
960 if( zVal==0 ){
961 copy = 0;
962 len = 0;
963 }
964 if( len<0 ){
965 len = strlen(zVal)+1;
966 }
967 if( copy ){
968 p->azVar[i] = sqliteMalloc( len );
969 if( p->azVar[i] ) memcpy(p->azVar[i], zVal, len);
970 }else{
971 p->azVar[i] = (char*)zVal;
972 }
973 p->abVar[i] = copy;
974 p->anVar[i] = len;
975 return SQLITE_OK;
976 }
977
978
979 /*
980 ** Delete an entire VDBE.
981 */
sqliteVdbeDelete(Vdbe * p)982 void sqliteVdbeDelete(Vdbe *p){
983 int i;
984 if( p==0 ) return;
985 Cleanup(p);
986 if( p->pPrev ){
987 p->pPrev->pNext = p->pNext;
988 }else{
989 assert( p->db->pVdbe==p );
990 p->db->pVdbe = p->pNext;
991 }
992 if( p->pNext ){
993 p->pNext->pPrev = p->pPrev;
994 }
995 p->pPrev = p->pNext = 0;
996 if( p->nOpAlloc==0 ){
997 p->aOp = 0;
998 p->nOp = 0;
999 }
1000 for(i=0; i<p->nOp; i++){
1001 if( p->aOp[i].p3type==P3_DYNAMIC ){
1002 sqliteFree(p->aOp[i].p3);
1003 }
1004 }
1005 for(i=0; i<p->nVar; i++){
1006 if( p->abVar[i] ) sqliteFree(p->azVar[i]);
1007 }
1008 sqliteFree(p->aOp);
1009 sqliteFree(p->aLabel);
1010 sqliteFree(p->aStack);
1011 p->magic = VDBE_MAGIC_DEAD;
1012 sqliteFree(p);
1013 }
1014
1015 /*
1016 ** Convert an integer in between the native integer format and
1017 ** the bigEndian format used as the record number for tables.
1018 **
1019 ** The bigEndian format (most significant byte first) is used for
1020 ** record numbers so that records will sort into the correct order
1021 ** even though memcmp() is used to compare the keys. On machines
1022 ** whose native integer format is little endian (ex: i486) the
1023 ** order of bytes is reversed. On native big-endian machines
1024 ** (ex: Alpha, Sparc, Motorola) the byte order is the same.
1025 **
1026 ** This function is its own inverse. In other words
1027 **
1028 ** X == byteSwap(byteSwap(X))
1029 */
sqliteVdbeByteSwap(int x)1030 int sqliteVdbeByteSwap(int x){
1031 union {
1032 char zBuf[sizeof(int)];
1033 int i;
1034 } ux;
1035 ux.zBuf[3] = x&0xff;
1036 ux.zBuf[2] = (x>>8)&0xff;
1037 ux.zBuf[1] = (x>>16)&0xff;
1038 ux.zBuf[0] = (x>>24)&0xff;
1039 return ux.i;
1040 }
1041
1042 /*
1043 ** If a MoveTo operation is pending on the given cursor, then do that
1044 ** MoveTo now. Return an error code. If no MoveTo is pending, this
1045 ** routine does nothing and returns SQLITE_OK.
1046 */
sqliteVdbeCursorMoveto(Cursor * p)1047 int sqliteVdbeCursorMoveto(Cursor *p){
1048 if( p->deferredMoveto ){
1049 int res;
1050 extern int sqlite_search_count;
1051 sqliteBtreeMoveto(p->pCursor, (char*)&p->movetoTarget, sizeof(int), &res);
1052 p->lastRecno = keyToInt(p->movetoTarget);
1053 p->recnoIsValid = res==0;
1054 if( res<0 ){
1055 sqliteBtreeNext(p->pCursor, &res);
1056 }
1057 sqlite_search_count++;
1058 p->deferredMoveto = 0;
1059 }
1060 return SQLITE_OK;
1061 }
1062