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