source: trunk/src/3rdparty/sqlite/vdbeaux.c@ 205

Last change on this file since 205 was 205, checked in by rudi, 14 years ago

Added SQLite 2.8.17 sources. This allows to build at least one of the sql drivers / plugins.

File size: 26.9 KB
Line 
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
29int sqlite_vdbe_addop_trace = 0;
30#endif
31
32
33/*
34** Create a new virtual database engine.
35*/
36Vdbe *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*/
54void 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*/
74int 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*/
111int 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*/
120int 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*/
149int 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*/
176void 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*/
192int 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*/
201int 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*/
245void 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*/
256void 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*/
281void 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*/
315void 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*/
338void 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*/
372int 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*/
384VdbeOp *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*/
411char *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}
440void 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}
448void 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}
456void 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*/
466void *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*/
480void *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*/
501int 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*/
510void 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*/
533int 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*/
589void 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*/
659void 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*/
678void 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*/
718void 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*/
730void 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*/
744static 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*/
761static 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*/
834int 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*/
920int 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*/
948int 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*/
982void 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*/
1030int 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*/
1047int 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}
Note: See TracBrowser for help on using the repository browser.