|
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 "sqlite3_stmt" 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 <ctype.h> |
|
19 #include "vdbeInt.h" |
|
20 |
|
21 |
|
22 |
|
23 /* |
|
24 ** When debugging the code generator in a symbolic debugger, one can |
|
25 ** set the sqlite3_vdbe_addop_trace to 1 and all opcodes will be printed |
|
26 ** as they are added to the instruction stream. |
|
27 */ |
|
28 #ifdef SQLITE_DEBUG |
|
29 int sqlite3_vdbe_addop_trace = 0; |
|
30 #endif |
|
31 |
|
32 |
|
33 /* |
|
34 ** Create a new virtual database engine. |
|
35 */ |
|
36 Vdbe *sqlite3VdbeCreate(sqlite3 *db){ |
|
37 Vdbe *p; |
|
38 p = (Vdbe*)sqlite3DbMallocZero(db, 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 ** Remember the SQL string for a prepared statement. |
|
53 */ |
|
54 void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n){ |
|
55 if( p==0 ) return; |
|
56 assert( p->zSql==0 ); |
|
57 p->zSql = sqlite3DbStrNDup(p->db, z, n); |
|
58 } |
|
59 |
|
60 /* |
|
61 ** Return the SQL associated with a prepared statement |
|
62 */ |
|
63 EXPORT_C const char *sqlite3_sql(sqlite3_stmt *pStmt){ |
|
64 return ((Vdbe *)pStmt)->zSql; |
|
65 } |
|
66 |
|
67 /* |
|
68 ** Swap all content between two VDBE structures. |
|
69 */ |
|
70 void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ |
|
71 Vdbe tmp, *pTmp; |
|
72 char *zTmp; |
|
73 int nTmp; |
|
74 tmp = *pA; |
|
75 *pA = *pB; |
|
76 *pB = tmp; |
|
77 pTmp = pA->pNext; |
|
78 pA->pNext = pB->pNext; |
|
79 pB->pNext = pTmp; |
|
80 pTmp = pA->pPrev; |
|
81 pA->pPrev = pB->pPrev; |
|
82 pB->pPrev = pTmp; |
|
83 zTmp = pA->zSql; |
|
84 pA->zSql = pB->zSql; |
|
85 pB->zSql = zTmp; |
|
86 nTmp = pA->nSql; |
|
87 pA->nSql = pB->nSql; |
|
88 pB->nSql = nTmp; |
|
89 } |
|
90 |
|
91 #ifdef SQLITE_DEBUG |
|
92 /* |
|
93 ** Turn tracing on or off |
|
94 */ |
|
95 void sqlite3VdbeTrace(Vdbe *p, FILE *trace){ |
|
96 p->trace = trace; |
|
97 } |
|
98 #endif |
|
99 |
|
100 /* |
|
101 ** Resize the Vdbe.aOp array so that it contains at least N |
|
102 ** elements. |
|
103 ** |
|
104 ** If an out-of-memory error occurs while resizing the array, |
|
105 ** Vdbe.aOp and Vdbe.nOpAlloc remain unchanged (this is so that |
|
106 ** any opcodes already allocated can be correctly deallocated |
|
107 ** along with the rest of the Vdbe). |
|
108 */ |
|
109 static void resizeOpArray(Vdbe *p, int N){ |
|
110 VdbeOp *pNew; |
|
111 int oldSize = p->nOpAlloc; |
|
112 pNew = (VdbeOp*)sqlite3DbRealloc(p->db, p->aOp, N*sizeof(Op)); |
|
113 if( pNew ){ |
|
114 p->nOpAlloc = N; |
|
115 p->aOp = pNew; |
|
116 if( N>oldSize ){ |
|
117 memset(&p->aOp[oldSize], 0, (N-oldSize)*sizeof(Op)); |
|
118 } |
|
119 } |
|
120 } |
|
121 |
|
122 /* |
|
123 ** Add a new instruction to the list of instructions current in the |
|
124 ** VDBE. Return the address of the new instruction. |
|
125 ** |
|
126 ** Parameters: |
|
127 ** |
|
128 ** p Pointer to the VDBE |
|
129 ** |
|
130 ** op The opcode for this instruction |
|
131 ** |
|
132 ** p1, p2 First two of the three possible operands. |
|
133 ** |
|
134 ** Use the sqlite3VdbeResolveLabel() function to fix an address and |
|
135 ** the sqlite3VdbeChangeP3() function to change the value of the P3 |
|
136 ** operand. |
|
137 */ |
|
138 int sqlite3VdbeAddOp(Vdbe *p, int op, int p1, int p2){ |
|
139 int i; |
|
140 VdbeOp *pOp; |
|
141 |
|
142 i = p->nOp; |
|
143 assert( p->magic==VDBE_MAGIC_INIT ); |
|
144 if( p->nOpAlloc<=i ){ |
|
145 resizeOpArray(p, p->nOpAlloc*2 + 100); |
|
146 if( p->db->mallocFailed ){ |
|
147 return 0; |
|
148 } |
|
149 } |
|
150 p->nOp++; |
|
151 pOp = &p->aOp[i]; |
|
152 pOp->opcode = op; |
|
153 pOp->p1 = p1; |
|
154 pOp->p2 = p2; |
|
155 pOp->p3 = 0; |
|
156 pOp->p3type = P3_NOTUSED; |
|
157 p->expired = 0; |
|
158 #ifdef SQLITE_DEBUG |
|
159 if( sqlite3_vdbe_addop_trace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]); |
|
160 #endif |
|
161 return i; |
|
162 } |
|
163 |
|
164 /* |
|
165 ** Add an opcode that includes the p3 value. |
|
166 */ |
|
167 int sqlite3VdbeOp3(Vdbe *p, int op, int p1, int p2, const char *zP3,int p3type){ |
|
168 int addr = sqlite3VdbeAddOp(p, op, p1, p2); |
|
169 sqlite3VdbeChangeP3(p, addr, zP3, p3type); |
|
170 return addr; |
|
171 } |
|
172 |
|
173 /* |
|
174 ** Create a new symbolic label for an instruction that has yet to be |
|
175 ** coded. The symbolic label is really just a negative number. The |
|
176 ** label can be used as the P2 value of an operation. Later, when |
|
177 ** the label is resolved to a specific address, the VDBE will scan |
|
178 ** through its operation list and change all values of P2 which match |
|
179 ** the label into the resolved address. |
|
180 ** |
|
181 ** The VDBE knows that a P2 value is a label because labels are |
|
182 ** always negative and P2 values are suppose to be non-negative. |
|
183 ** Hence, a negative P2 value is a label that has yet to be resolved. |
|
184 ** |
|
185 ** Zero is returned if a malloc() fails. |
|
186 */ |
|
187 int sqlite3VdbeMakeLabel(Vdbe *p){ |
|
188 int i; |
|
189 i = p->nLabel++; |
|
190 assert( p->magic==VDBE_MAGIC_INIT ); |
|
191 if( i>=p->nLabelAlloc ){ |
|
192 p->nLabelAlloc = p->nLabelAlloc*2 + 10; |
|
193 p->aLabel = (int*)sqlite3DbReallocOrFree(p->db, p->aLabel, |
|
194 p->nLabelAlloc*sizeof(p->aLabel[0])); |
|
195 } |
|
196 if( p->aLabel ){ |
|
197 p->aLabel[i] = -1; |
|
198 } |
|
199 return -1-i; |
|
200 } |
|
201 |
|
202 /* |
|
203 ** Resolve label "x" to be the address of the next instruction to |
|
204 ** be inserted. The parameter "x" must have been obtained from |
|
205 ** a prior call to sqlite3VdbeMakeLabel(). |
|
206 */ |
|
207 void sqlite3VdbeResolveLabel(Vdbe *p, int x){ |
|
208 int j = -1-x; |
|
209 assert( p->magic==VDBE_MAGIC_INIT ); |
|
210 assert( j>=0 && j<p->nLabel ); |
|
211 if( p->aLabel ){ |
|
212 p->aLabel[j] = p->nOp; |
|
213 } |
|
214 } |
|
215 |
|
216 /* |
|
217 ** Return non-zero if opcode 'op' is guarenteed not to push more values |
|
218 ** onto the VDBE stack than it pops off. |
|
219 */ |
|
220 static int opcodeNoPush(u8 op){ |
|
221 /* The 10 NOPUSH_MASK_n constants are defined in the automatically |
|
222 ** generated header file opcodes.h. Each is a 16-bit bitmask, one |
|
223 ** bit corresponding to each opcode implemented by the virtual |
|
224 ** machine in vdbe.c. The bit is true if the word "no-push" appears |
|
225 ** in a comment on the same line as the "case OP_XXX:" in |
|
226 ** sqlite3VdbeExec() in vdbe.c. |
|
227 ** |
|
228 ** If the bit is true, then the corresponding opcode is guarenteed not |
|
229 ** to grow the stack when it is executed. Otherwise, it may grow the |
|
230 ** stack by at most one entry. |
|
231 ** |
|
232 ** NOPUSH_MASK_0 corresponds to opcodes 0 to 15. NOPUSH_MASK_1 contains |
|
233 ** one bit for opcodes 16 to 31, and so on. |
|
234 ** |
|
235 ** 16-bit bitmasks (rather than 32-bit) are specified in opcodes.h |
|
236 ** because the file is generated by an awk program. Awk manipulates |
|
237 ** all numbers as floating-point and we don't want to risk a rounding |
|
238 ** error if someone builds with an awk that uses (for example) 32-bit |
|
239 ** IEEE floats. |
|
240 */ |
|
241 static const u32 masks[5] = { |
|
242 NOPUSH_MASK_0 + (((unsigned)NOPUSH_MASK_1)<<16), |
|
243 NOPUSH_MASK_2 + (((unsigned)NOPUSH_MASK_3)<<16), |
|
244 NOPUSH_MASK_4 + (((unsigned)NOPUSH_MASK_5)<<16), |
|
245 NOPUSH_MASK_6 + (((unsigned)NOPUSH_MASK_7)<<16), |
|
246 NOPUSH_MASK_8 + (((unsigned)NOPUSH_MASK_9)<<16) |
|
247 }; |
|
248 assert( op<32*5 ); |
|
249 return (masks[op>>5] & (1<<(op&0x1F))); |
|
250 } |
|
251 |
|
252 #ifndef NDEBUG |
|
253 int sqlite3VdbeOpcodeNoPush(u8 op){ |
|
254 return opcodeNoPush(op); |
|
255 } |
|
256 #endif |
|
257 |
|
258 /* |
|
259 ** Loop through the program looking for P2 values that are negative. |
|
260 ** Each such value is a label. Resolve the label by setting the P2 |
|
261 ** value to its correct non-zero value. |
|
262 ** |
|
263 ** This routine is called once after all opcodes have been inserted. |
|
264 ** |
|
265 ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument |
|
266 ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by |
|
267 ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array. |
|
268 ** |
|
269 ** The integer *pMaxStack is set to the maximum number of vdbe stack |
|
270 ** entries that static analysis reveals this program might need. |
|
271 ** |
|
272 ** This routine also does the following optimization: It scans for |
|
273 ** instructions that might cause a statement rollback. Such instructions |
|
274 ** are: |
|
275 ** |
|
276 ** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort. |
|
277 ** * OP_Destroy |
|
278 ** * OP_VUpdate |
|
279 ** * OP_VRename |
|
280 ** |
|
281 ** If no such instruction is found, then every Statement instruction |
|
282 ** is changed to a Noop. In this way, we avoid creating the statement |
|
283 ** journal file unnecessarily. |
|
284 */ |
|
285 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs, int *pMaxStack){ |
|
286 int i; |
|
287 int nMaxArgs = 0; |
|
288 int nMaxStack = p->nOp; |
|
289 Op *pOp; |
|
290 int *aLabel = p->aLabel; |
|
291 int doesStatementRollback = 0; |
|
292 int hasStatementBegin = 0; |
|
293 for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ |
|
294 u8 opcode = pOp->opcode; |
|
295 |
|
296 if( opcode==OP_Function || opcode==OP_AggStep |
|
297 #ifndef SQLITE_OMIT_VIRTUALTABLE |
|
298 || opcode==OP_VUpdate |
|
299 #endif |
|
300 ){ |
|
301 if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; |
|
302 } |
|
303 if( opcode==OP_Halt ){ |
|
304 if( pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort ){ |
|
305 doesStatementRollback = 1; |
|
306 } |
|
307 }else if( opcode==OP_Statement ){ |
|
308 hasStatementBegin = 1; |
|
309 }else if( opcode==OP_Destroy ){ |
|
310 doesStatementRollback = 1; |
|
311 #ifndef SQLITE_OMIT_VIRTUALTABLE |
|
312 }else if( opcode==OP_VUpdate || opcode==OP_VRename ){ |
|
313 doesStatementRollback = 1; |
|
314 }else if( opcode==OP_VFilter ){ |
|
315 int n; |
|
316 assert( p->nOp - i >= 3 ); |
|
317 assert( pOp[-2].opcode==OP_Integer ); |
|
318 n = pOp[-2].p1; |
|
319 if( n>nMaxArgs ) nMaxArgs = n; |
|
320 #endif |
|
321 } |
|
322 if( opcodeNoPush(opcode) ){ |
|
323 nMaxStack--; |
|
324 } |
|
325 |
|
326 if( pOp->p2>=0 ) continue; |
|
327 assert( -1-pOp->p2<p->nLabel ); |
|
328 pOp->p2 = aLabel[-1-pOp->p2]; |
|
329 } |
|
330 sqlite3_free(p->aLabel); |
|
331 p->aLabel = 0; |
|
332 |
|
333 *pMaxFuncArgs = nMaxArgs; |
|
334 *pMaxStack = nMaxStack; |
|
335 |
|
336 /* If we never rollback a statement transaction, then statement |
|
337 ** transactions are not needed. So change every OP_Statement |
|
338 ** opcode into an OP_Noop. This avoid a call to sqlite3OsOpenExclusive() |
|
339 ** which can be expensive on some platforms. |
|
340 */ |
|
341 if( hasStatementBegin && !doesStatementRollback ){ |
|
342 for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ |
|
343 if( pOp->opcode==OP_Statement ){ |
|
344 pOp->opcode = OP_Noop; |
|
345 } |
|
346 } |
|
347 } |
|
348 } |
|
349 |
|
350 /* |
|
351 ** Return the address of the next instruction to be inserted. |
|
352 */ |
|
353 int sqlite3VdbeCurrentAddr(Vdbe *p){ |
|
354 assert( p->magic==VDBE_MAGIC_INIT ); |
|
355 return p->nOp; |
|
356 } |
|
357 |
|
358 /* |
|
359 ** Add a whole list of operations to the operation stack. Return the |
|
360 ** address of the first operation added. |
|
361 */ |
|
362 int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){ |
|
363 int addr; |
|
364 assert( p->magic==VDBE_MAGIC_INIT ); |
|
365 if( p->nOp + nOp > p->nOpAlloc ){ |
|
366 resizeOpArray(p, p->nOp*2 + nOp); |
|
367 } |
|
368 if( p->db->mallocFailed ){ |
|
369 return 0; |
|
370 } |
|
371 addr = p->nOp; |
|
372 if( nOp>0 ){ |
|
373 int i; |
|
374 VdbeOpList const *pIn = aOp; |
|
375 for(i=0; i<nOp; i++, pIn++){ |
|
376 int p2 = pIn->p2; |
|
377 VdbeOp *pOut = &p->aOp[i+addr]; |
|
378 pOut->opcode = pIn->opcode; |
|
379 pOut->p1 = pIn->p1; |
|
380 pOut->p2 = p2<0 ? addr + ADDR(p2) : p2; |
|
381 pOut->p3 = pIn->p3; |
|
382 pOut->p3type = pIn->p3 ? P3_STATIC : P3_NOTUSED; |
|
383 #ifdef SQLITE_DEBUG |
|
384 if( sqlite3_vdbe_addop_trace ){ |
|
385 sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]); |
|
386 } |
|
387 #endif |
|
388 } |
|
389 p->nOp += nOp; |
|
390 } |
|
391 return addr; |
|
392 } |
|
393 |
|
394 /* |
|
395 ** Change the value of the P1 operand for a specific instruction. |
|
396 ** This routine is useful when a large program is loaded from a |
|
397 ** static array using sqlite3VdbeAddOpList but we want to make a |
|
398 ** few minor changes to the program. |
|
399 */ |
|
400 void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ |
|
401 assert( p==0 || p->magic==VDBE_MAGIC_INIT ); |
|
402 if( p && addr>=0 && p->nOp>addr && p->aOp ){ |
|
403 p->aOp[addr].p1 = val; |
|
404 } |
|
405 } |
|
406 |
|
407 /* |
|
408 ** Change the value of the P2 operand for a specific instruction. |
|
409 ** This routine is useful for setting a jump destination. |
|
410 */ |
|
411 void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ |
|
412 assert( val>=0 ); |
|
413 assert( p==0 || p->magic==VDBE_MAGIC_INIT ); |
|
414 if( p && addr>=0 && p->nOp>addr && p->aOp ){ |
|
415 p->aOp[addr].p2 = val; |
|
416 } |
|
417 } |
|
418 |
|
419 /* |
|
420 ** Change the P2 operand of instruction addr so that it points to |
|
421 ** the address of the next instruction to be coded. |
|
422 */ |
|
423 void sqlite3VdbeJumpHere(Vdbe *p, int addr){ |
|
424 sqlite3VdbeChangeP2(p, addr, p->nOp); |
|
425 } |
|
426 |
|
427 |
|
428 /* |
|
429 ** If the input FuncDef structure is ephemeral, then free it. If |
|
430 ** the FuncDef is not ephermal, then do nothing. |
|
431 */ |
|
432 static void freeEphemeralFunction(FuncDef *pDef){ |
|
433 if( pDef && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){ |
|
434 sqlite3_free(pDef); |
|
435 } |
|
436 } |
|
437 |
|
438 /* |
|
439 ** Delete a P3 value if necessary. |
|
440 */ |
|
441 static void freeP3(int p3type, void *p3){ |
|
442 if( p3 ){ |
|
443 switch( p3type ){ |
|
444 case P3_REAL: |
|
445 case P3_INT64: |
|
446 case P3_MPRINTF: |
|
447 case P3_DYNAMIC: |
|
448 case P3_KEYINFO: |
|
449 case P3_KEYINFO_HANDOFF: { |
|
450 sqlite3_free(p3); |
|
451 break; |
|
452 } |
|
453 case P3_VDBEFUNC: { |
|
454 VdbeFunc *pVdbeFunc = (VdbeFunc *)p3; |
|
455 freeEphemeralFunction(pVdbeFunc->pFunc); |
|
456 sqlite3VdbeDeleteAuxData(pVdbeFunc, 0); |
|
457 sqlite3_free(pVdbeFunc); |
|
458 break; |
|
459 } |
|
460 case P3_FUNCDEF: { |
|
461 freeEphemeralFunction((FuncDef*)p3); |
|
462 break; |
|
463 } |
|
464 case P3_MEM: { |
|
465 sqlite3ValueFree((sqlite3_value*)p3); |
|
466 break; |
|
467 } |
|
468 } |
|
469 } |
|
470 } |
|
471 |
|
472 |
|
473 /* |
|
474 ** Change N opcodes starting at addr to No-ops. |
|
475 */ |
|
476 void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){ |
|
477 if( p && p->aOp ){ |
|
478 VdbeOp *pOp = &p->aOp[addr]; |
|
479 while( N-- ){ |
|
480 freeP3(pOp->p3type, pOp->p3); |
|
481 memset(pOp, 0, sizeof(pOp[0])); |
|
482 pOp->opcode = OP_Noop; |
|
483 pOp++; |
|
484 } |
|
485 } |
|
486 } |
|
487 |
|
488 /* |
|
489 ** Change the value of the P3 operand for a specific instruction. |
|
490 ** This routine is useful when a large program is loaded from a |
|
491 ** static array using sqlite3VdbeAddOpList but we want to make a |
|
492 ** few minor changes to the program. |
|
493 ** |
|
494 ** If n>=0 then the P3 operand is dynamic, meaning that a copy of |
|
495 ** the string is made into memory obtained from sqlite3_malloc(). |
|
496 ** A value of n==0 means copy bytes of zP3 up to and including the |
|
497 ** first null byte. If n>0 then copy n+1 bytes of zP3. |
|
498 ** |
|
499 ** If n==P3_KEYINFO it means that zP3 is a pointer to a KeyInfo structure. |
|
500 ** A copy is made of the KeyInfo structure into memory obtained from |
|
501 ** sqlite3_malloc, to be freed when the Vdbe is finalized. |
|
502 ** n==P3_KEYINFO_HANDOFF indicates that zP3 points to a KeyInfo structure |
|
503 ** stored in memory that the caller has obtained from sqlite3_malloc. The |
|
504 ** caller should not free the allocation, it will be freed when the Vdbe is |
|
505 ** finalized. |
|
506 ** |
|
507 ** Other values of n (P3_STATIC, P3_COLLSEQ etc.) indicate that zP3 points |
|
508 ** to a string or structure that is guaranteed to exist for the lifetime of |
|
509 ** the Vdbe. In these cases we can just copy the pointer. |
|
510 ** |
|
511 ** If addr<0 then change P3 on the most recently inserted instruction. |
|
512 */ |
|
513 void sqlite3VdbeChangeP3(Vdbe *p, int addr, const char *zP3, int n){ |
|
514 Op *pOp; |
|
515 assert( p==0 || p->magic==VDBE_MAGIC_INIT ); |
|
516 if( p==0 || p->aOp==0 || p->db->mallocFailed ){ |
|
517 if (n != P3_KEYINFO) { |
|
518 freeP3(n, (void*)*(char**)&zP3); |
|
519 } |
|
520 return; |
|
521 } |
|
522 if( addr<0 || addr>=p->nOp ){ |
|
523 addr = p->nOp - 1; |
|
524 if( addr<0 ) return; |
|
525 } |
|
526 pOp = &p->aOp[addr]; |
|
527 freeP3(pOp->p3type, pOp->p3); |
|
528 pOp->p3 = 0; |
|
529 if( zP3==0 ){ |
|
530 pOp->p3 = 0; |
|
531 pOp->p3type = P3_NOTUSED; |
|
532 }else if( n==P3_KEYINFO ){ |
|
533 KeyInfo *pKeyInfo; |
|
534 int nField, nByte; |
|
535 |
|
536 nField = ((KeyInfo*)zP3)->nField; |
|
537 nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField; |
|
538 pKeyInfo = (KeyInfo*)sqlite3_malloc( nByte ); |
|
539 pOp->p3 = (char*)pKeyInfo; |
|
540 if( pKeyInfo ){ |
|
541 unsigned char *aSortOrder; |
|
542 memcpy(pKeyInfo, zP3, nByte); |
|
543 aSortOrder = pKeyInfo->aSortOrder; |
|
544 if( aSortOrder ){ |
|
545 pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField]; |
|
546 memcpy(pKeyInfo->aSortOrder, aSortOrder, nField); |
|
547 } |
|
548 pOp->p3type = P3_KEYINFO; |
|
549 }else{ |
|
550 p->db->mallocFailed = 1; |
|
551 pOp->p3type = P3_NOTUSED; |
|
552 } |
|
553 }else if( n==P3_KEYINFO_HANDOFF ){ |
|
554 pOp->p3 = (char*)zP3; |
|
555 pOp->p3type = P3_KEYINFO; |
|
556 }else if( n<0 ){ |
|
557 pOp->p3 = (char*)zP3; |
|
558 pOp->p3type = n; |
|
559 }else{ |
|
560 if( n==0 ) n = strlen(zP3); |
|
561 pOp->p3 = sqlite3DbStrNDup(p->db, zP3, n); |
|
562 pOp->p3type = P3_DYNAMIC; |
|
563 } |
|
564 } |
|
565 |
|
566 #ifndef NDEBUG |
|
567 /* |
|
568 ** Replace the P3 field of the most recently coded instruction with |
|
569 ** comment text. |
|
570 */ |
|
571 void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){ |
|
572 va_list ap; |
|
573 assert( p->nOp>0 || p->aOp==0 ); |
|
574 assert( p->aOp==0 || p->aOp[p->nOp-1].p3==0 || p->db->mallocFailed ); |
|
575 va_start(ap, zFormat); |
|
576 sqlite3VdbeChangeP3(p, -1, sqlite3VMPrintf(p->db, zFormat, ap), P3_DYNAMIC); |
|
577 va_end(ap); |
|
578 } |
|
579 #endif |
|
580 |
|
581 /* |
|
582 ** Return the opcode for a given address. |
|
583 */ |
|
584 VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ |
|
585 assert( p->magic==VDBE_MAGIC_INIT ); |
|
586 assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed ); |
|
587 return ((addr>=0 && addr<p->nOp)?(&p->aOp[addr]):0); |
|
588 } |
|
589 |
|
590 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \ |
|
591 || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) |
|
592 /* |
|
593 ** Compute a string that describes the P3 parameter for an opcode. |
|
594 ** Use zTemp for any required temporary buffer space. |
|
595 */ |
|
596 static char *displayP3(Op *pOp, char *zTemp, int nTemp){ |
|
597 char *zP3; |
|
598 assert( nTemp>=20 ); |
|
599 switch( pOp->p3type ){ |
|
600 case P3_KEYINFO: { |
|
601 int i, j; |
|
602 KeyInfo *pKeyInfo = (KeyInfo*)pOp->p3; |
|
603 sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField); |
|
604 i = strlen(zTemp); |
|
605 for(j=0; j<pKeyInfo->nField; j++){ |
|
606 CollSeq *pColl = pKeyInfo->aColl[j]; |
|
607 if( pColl ){ |
|
608 int n = strlen(pColl->zName); |
|
609 if( i+n>nTemp-6 ){ |
|
610 memcpy(&zTemp[i],",...",4); |
|
611 break; |
|
612 } |
|
613 zTemp[i++] = ','; |
|
614 if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){ |
|
615 zTemp[i++] = '-'; |
|
616 } |
|
617 memcpy(&zTemp[i], pColl->zName,n+1); |
|
618 i += n; |
|
619 }else if( i+4<nTemp-6 ){ |
|
620 memcpy(&zTemp[i],",nil",4); |
|
621 i += 4; |
|
622 } |
|
623 } |
|
624 zTemp[i++] = ')'; |
|
625 zTemp[i] = 0; |
|
626 assert( i<nTemp ); |
|
627 zP3 = zTemp; |
|
628 break; |
|
629 } |
|
630 case P3_COLLSEQ: { |
|
631 CollSeq *pColl = (CollSeq*)pOp->p3; |
|
632 sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName); |
|
633 zP3 = zTemp; |
|
634 break; |
|
635 } |
|
636 case P3_FUNCDEF: { |
|
637 FuncDef *pDef = (FuncDef*)pOp->p3; |
|
638 sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg); |
|
639 zP3 = zTemp; |
|
640 break; |
|
641 } |
|
642 case P3_INT64: { |
|
643 sqlite3_snprintf(nTemp, zTemp, "%lld", *(sqlite3_int64*)pOp->p3); |
|
644 zP3 = zTemp; |
|
645 break; |
|
646 } |
|
647 case P3_REAL: { |
|
648 sqlite3_snprintf(nTemp, zTemp, "%.16g", *(double*)pOp->p3); |
|
649 zP3 = zTemp; |
|
650 break; |
|
651 } |
|
652 #ifndef SQLITE_OMIT_VIRTUALTABLE |
|
653 case P3_VTAB: { |
|
654 sqlite3_vtab *pVtab = (sqlite3_vtab*)pOp->p3; |
|
655 sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule); |
|
656 zP3 = zTemp; |
|
657 break; |
|
658 } |
|
659 #endif |
|
660 default: { |
|
661 zP3 = pOp->p3; |
|
662 if( zP3==0 || pOp->opcode==OP_Noop ){ |
|
663 zP3 = ""; |
|
664 } |
|
665 } |
|
666 } |
|
667 assert( zP3!=0 ); |
|
668 return zP3; |
|
669 } |
|
670 #endif |
|
671 |
|
672 /* |
|
673 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used. |
|
674 ** |
|
675 */ |
|
676 void sqlite3VdbeUsesBtree(Vdbe *p, int i){ |
|
677 int mask; |
|
678 assert( i>=0 && i<p->db->nDb ); |
|
679 assert( i<sizeof(p->btreeMask)*8 ); |
|
680 mask = 1<<i; |
|
681 if( (p->btreeMask & mask)==0 ){ |
|
682 p->btreeMask |= mask; |
|
683 sqlite3BtreeMutexArrayInsert(&p->aMutex, p->db->aDb[i].pBt); |
|
684 } |
|
685 } |
|
686 |
|
687 |
|
688 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) |
|
689 /* |
|
690 ** Print a single opcode. This routine is used for debugging only. |
|
691 */ |
|
692 void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ |
|
693 char *zP3; |
|
694 char zPtr[50]; |
|
695 static const char *zFormat1 = "%4d %-13s %4d %4d %s\n"; |
|
696 if( pOut==0 ) pOut = stdout; |
|
697 zP3 = displayP3(pOp, zPtr, sizeof(zPtr)); |
|
698 fprintf(pOut, zFormat1, |
|
699 pc, sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, zP3); |
|
700 fflush(pOut); |
|
701 } |
|
702 #endif |
|
703 |
|
704 /* |
|
705 ** Release an array of N Mem elements |
|
706 */ |
|
707 static void releaseMemArray(Mem *p, int N){ |
|
708 if( p ){ |
|
709 while( N-->0 ){ |
|
710 assert( N<2 || p[0].db==p[1].db ); |
|
711 sqlite3VdbeMemRelease(p++); |
|
712 } |
|
713 } |
|
714 } |
|
715 |
|
716 #ifndef SQLITE_OMIT_EXPLAIN |
|
717 /* |
|
718 ** Give a listing of the program in the virtual machine. |
|
719 ** |
|
720 ** The interface is the same as sqlite3VdbeExec(). But instead of |
|
721 ** running the code, it invokes the callback once for each instruction. |
|
722 ** This feature is used to implement "EXPLAIN". |
|
723 */ |
|
724 int sqlite3VdbeList( |
|
725 Vdbe *p /* The VDBE */ |
|
726 ){ |
|
727 sqlite3 *db = p->db; |
|
728 int i; |
|
729 int rc = SQLITE_OK; |
|
730 |
|
731 assert( p->explain ); |
|
732 if( p->magic!=VDBE_MAGIC_RUN ) return SQLITE_MISUSE; |
|
733 assert( db->magic==SQLITE_MAGIC_BUSY ); |
|
734 assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY ); |
|
735 |
|
736 /* Even though this opcode does not put dynamic strings onto the |
|
737 ** the stack, they may become dynamic if the user calls |
|
738 ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. |
|
739 */ |
|
740 if( p->pTos==&p->aStack[4] ){ |
|
741 releaseMemArray(p->aStack, 5); |
|
742 } |
|
743 p->resOnStack = 0; |
|
744 |
|
745 do{ |
|
746 i = p->pc++; |
|
747 }while( i<p->nOp && p->explain==2 && p->aOp[i].opcode!=OP_Explain ); |
|
748 if( i>=p->nOp ){ |
|
749 p->rc = SQLITE_OK; |
|
750 rc = SQLITE_DONE; |
|
751 }else if( db->u1.isInterrupted ){ |
|
752 p->rc = SQLITE_INTERRUPT; |
|
753 rc = SQLITE_ERROR; |
|
754 sqlite3SetString(&p->zErrMsg, sqlite3ErrStr(p->rc), (char*)0); |
|
755 }else{ |
|
756 Op *pOp = &p->aOp[i]; |
|
757 Mem *pMem = p->aStack; |
|
758 pMem->flags = MEM_Int; |
|
759 pMem->type = SQLITE_INTEGER; |
|
760 pMem->u.i = i; /* Program counter */ |
|
761 pMem++; |
|
762 |
|
763 pMem->flags = MEM_Static|MEM_Str|MEM_Term; |
|
764 pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ |
|
765 assert( pMem->z!=0 ); |
|
766 pMem->n = strlen(pMem->z); |
|
767 pMem->type = SQLITE_TEXT; |
|
768 pMem->enc = SQLITE_UTF8; |
|
769 pMem++; |
|
770 |
|
771 pMem->flags = MEM_Int; |
|
772 pMem->u.i = pOp->p1; /* P1 */ |
|
773 pMem->type = SQLITE_INTEGER; |
|
774 pMem++; |
|
775 |
|
776 pMem->flags = MEM_Int; |
|
777 pMem->u.i = pOp->p2; /* P2 */ |
|
778 pMem->type = SQLITE_INTEGER; |
|
779 pMem++; |
|
780 |
|
781 pMem->flags = MEM_Ephem|MEM_Str|MEM_Term; /* P3 */ |
|
782 pMem->z = displayP3(pOp, pMem->zShort, sizeof(pMem->zShort)); |
|
783 assert( pMem->z!=0 ); |
|
784 pMem->n = strlen(pMem->z); |
|
785 pMem->type = SQLITE_TEXT; |
|
786 pMem->enc = SQLITE_UTF8; |
|
787 |
|
788 p->nResColumn = 5 - 2*(p->explain-1); |
|
789 p->pTos = pMem; |
|
790 p->rc = SQLITE_OK; |
|
791 p->resOnStack = 1; |
|
792 rc = SQLITE_ROW; |
|
793 } |
|
794 return rc; |
|
795 } |
|
796 #endif /* SQLITE_OMIT_EXPLAIN */ |
|
797 |
|
798 #ifdef SQLITE_DEBUG |
|
799 /* |
|
800 ** Print the SQL that was used to generate a VDBE program. |
|
801 */ |
|
802 void sqlite3VdbePrintSql(Vdbe *p){ |
|
803 int nOp = p->nOp; |
|
804 VdbeOp *pOp; |
|
805 if( nOp<1 ) return; |
|
806 pOp = &p->aOp[nOp-1]; |
|
807 if( pOp->opcode==OP_Noop && pOp->p3!=0 ){ |
|
808 const char *z = pOp->p3; |
|
809 while( isspace(*(u8*)z) ) z++; |
|
810 printf("SQL: [%s]\n", z); |
|
811 } |
|
812 } |
|
813 #endif |
|
814 |
|
815 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) |
|
816 /* |
|
817 ** Print an IOTRACE message showing SQL content. |
|
818 */ |
|
819 void sqlite3VdbeIOTraceSql(Vdbe *p){ |
|
820 int nOp = p->nOp; |
|
821 VdbeOp *pOp; |
|
822 if( sqlite3_io_trace==0 ) return; |
|
823 if( nOp<1 ) return; |
|
824 pOp = &p->aOp[nOp-1]; |
|
825 if( pOp->opcode==OP_Noop && pOp->p3!=0 ){ |
|
826 int i, j; |
|
827 char z[1000]; |
|
828 sqlite3_snprintf(sizeof(z), z, "%s", pOp->p3); |
|
829 for(i=0; isspace((unsigned char)z[i]); i++){} |
|
830 for(j=0; z[i]; i++){ |
|
831 if( isspace((unsigned char)z[i]) ){ |
|
832 if( z[i-1]!=' ' ){ |
|
833 z[j++] = ' '; |
|
834 } |
|
835 }else{ |
|
836 z[j++] = z[i]; |
|
837 } |
|
838 } |
|
839 z[j] = 0; |
|
840 sqlite3_io_trace("SQL %s\n", z); |
|
841 } |
|
842 } |
|
843 #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */ |
|
844 |
|
845 |
|
846 /* |
|
847 ** Prepare a virtual machine for execution. This involves things such |
|
848 ** as allocating stack space and initializing the program counter. |
|
849 ** After the VDBE has be prepped, it can be executed by one or more |
|
850 ** calls to sqlite3VdbeExec(). |
|
851 ** |
|
852 ** This is the only way to move a VDBE from VDBE_MAGIC_INIT to |
|
853 ** VDBE_MAGIC_RUN. |
|
854 */ |
|
855 void sqlite3VdbeMakeReady( |
|
856 Vdbe *p, /* The VDBE */ |
|
857 int nVar, /* Number of '?' see in the SQL statement */ |
|
858 int nMem, /* Number of memory cells to allocate */ |
|
859 int nCursor, /* Number of cursors to allocate */ |
|
860 int isExplain /* True if the EXPLAIN keywords is present */ |
|
861 ){ |
|
862 int n; |
|
863 sqlite3 *db = p->db; |
|
864 |
|
865 assert( p!=0 ); |
|
866 assert( p->magic==VDBE_MAGIC_INIT ); |
|
867 |
|
868 /* There should be at least one opcode. |
|
869 */ |
|
870 assert( p->nOp>0 ); |
|
871 |
|
872 /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. This |
|
873 * is because the call to resizeOpArray() below may shrink the |
|
874 * p->aOp[] array to save memory if called when in VDBE_MAGIC_RUN |
|
875 * state. |
|
876 */ |
|
877 p->magic = VDBE_MAGIC_RUN; |
|
878 |
|
879 /* No instruction ever pushes more than a single element onto the |
|
880 ** stack. And the stack never grows on successive executions of the |
|
881 ** same loop. So the total number of instructions is an upper bound |
|
882 ** on the maximum stack depth required. (Added later:) The |
|
883 ** resolveP2Values() call computes a tighter upper bound on the |
|
884 ** stack size. |
|
885 ** |
|
886 ** Allocation all the stack space we will ever need. |
|
887 */ |
|
888 if( p->aStack==0 ){ |
|
889 int nArg; /* Maximum number of args passed to a user function. */ |
|
890 int nStack; /* Maximum number of stack entries required */ |
|
891 resolveP2Values(p, &nArg, &nStack); |
|
892 resizeOpArray(p, p->nOp); |
|
893 assert( nVar>=0 ); |
|
894 assert( nStack<p->nOp ); |
|
895 if( isExplain ){ |
|
896 nStack = 10; |
|
897 } |
|
898 p->aStack = (Mem*)sqlite3DbMallocZero(db, |
|
899 nStack*sizeof(p->aStack[0]) /* aStack */ |
|
900 + nArg*sizeof(Mem*) /* apArg */ |
|
901 + nVar*sizeof(Mem) /* aVar */ |
|
902 + nVar*sizeof(char*) /* azVar */ |
|
903 + nMem*sizeof(Mem) /* aMem */ |
|
904 + nCursor*sizeof(Cursor*) /* apCsr */ |
|
905 ); |
|
906 if( !db->mallocFailed ){ |
|
907 p->aMem = &p->aStack[nStack]; |
|
908 p->nMem = nMem; |
|
909 p->aVar = &p->aMem[nMem]; |
|
910 p->nVar = nVar; |
|
911 p->okVar = 0; |
|
912 p->apArg = (Mem**)&p->aVar[nVar]; |
|
913 p->azVar = (char**)&p->apArg[nArg]; |
|
914 p->apCsr = (Cursor**)&p->azVar[nVar]; |
|
915 p->nCursor = nCursor; |
|
916 for(n=0; n<nVar; n++){ |
|
917 p->aVar[n].flags = MEM_Null; |
|
918 p->aVar[n].db = db; |
|
919 } |
|
920 for(n=0; n<nStack; n++){ |
|
921 p->aStack[n].db = db; |
|
922 } |
|
923 } |
|
924 } |
|
925 for(n=0; n<p->nMem; n++){ |
|
926 p->aMem[n].flags = MEM_Null; |
|
927 p->aMem[n].db = db; |
|
928 } |
|
929 |
|
930 p->pTos = &p->aStack[-1]; |
|
931 p->pc = -1; |
|
932 p->rc = SQLITE_OK; |
|
933 p->uniqueCnt = 0; |
|
934 p->returnDepth = 0; |
|
935 p->errorAction = OE_Abort; |
|
936 p->popStack = 0; |
|
937 p->explain |= isExplain; |
|
938 p->magic = VDBE_MAGIC_RUN; |
|
939 p->nChange = 0; |
|
940 p->cacheCtr = 1; |
|
941 p->minWriteFileFormat = 255; |
|
942 p->openedStatement = 0; |
|
943 #ifdef VDBE_PROFILE |
|
944 { |
|
945 int i; |
|
946 for(i=0; i<p->nOp; i++){ |
|
947 p->aOp[i].cnt = 0; |
|
948 p->aOp[i].cycles = 0; |
|
949 } |
|
950 } |
|
951 #endif |
|
952 } |
|
953 |
|
954 /* |
|
955 ** Close a VDBE cursor and release all the resources that cursor happens |
|
956 ** to hold. |
|
957 */ |
|
958 void sqlite3VdbeFreeCursor(Vdbe *p, Cursor *pCx){ |
|
959 if( pCx==0 ){ |
|
960 return; |
|
961 } |
|
962 if( pCx->pCursor ){ |
|
963 sqlite3BtreeCloseCursor(pCx->pCursor); |
|
964 } |
|
965 if( pCx->pBt ){ |
|
966 sqlite3BtreeClose(pCx->pBt); |
|
967 } |
|
968 #ifndef SQLITE_OMIT_VIRTUALTABLE |
|
969 if( pCx->pVtabCursor ){ |
|
970 sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor; |
|
971 const sqlite3_module *pModule = pCx->pModule; |
|
972 p->inVtabMethod = 1; |
|
973 sqlite3SafetyOff(p->db); |
|
974 pModule->xClose(pVtabCursor); |
|
975 sqlite3SafetyOn(p->db); |
|
976 p->inVtabMethod = 0; |
|
977 } |
|
978 #endif |
|
979 sqlite3_free(pCx->pData); |
|
980 sqlite3_free(pCx->aType); |
|
981 sqlite3_free(pCx); |
|
982 } |
|
983 |
|
984 /* |
|
985 ** Close all cursors except for VTab cursors that are currently |
|
986 ** in use. |
|
987 */ |
|
988 static void closeAllCursorsExceptActiveVtabs(Vdbe *p){ |
|
989 int i; |
|
990 if( p->apCsr==0 ) return; |
|
991 for(i=0; i<p->nCursor; i++){ |
|
992 Cursor *pC = p->apCsr[i]; |
|
993 if( pC && (!p->inVtabMethod || !pC->pVtabCursor) ){ |
|
994 sqlite3VdbeFreeCursor(p, pC); |
|
995 p->apCsr[i] = 0; |
|
996 } |
|
997 } |
|
998 } |
|
999 |
|
1000 /* |
|
1001 ** Clean up the VM after execution. |
|
1002 ** |
|
1003 ** This routine will automatically close any cursors, lists, and/or |
|
1004 ** sorters that were left open. It also deletes the values of |
|
1005 ** variables in the aVar[] array. |
|
1006 */ |
|
1007 static void Cleanup(Vdbe *p){ |
|
1008 int i; |
|
1009 if( p->aStack ){ |
|
1010 releaseMemArray(p->aStack, 1 + (p->pTos - p->aStack)); |
|
1011 p->pTos = &p->aStack[-1]; |
|
1012 } |
|
1013 closeAllCursorsExceptActiveVtabs(p); |
|
1014 releaseMemArray(p->aMem, p->nMem); |
|
1015 sqlite3VdbeFifoClear(&p->sFifo); |
|
1016 if( p->contextStack ){ |
|
1017 for(i=0; i<p->contextStackTop; i++){ |
|
1018 sqlite3VdbeFifoClear(&p->contextStack[i].sFifo); |
|
1019 } |
|
1020 sqlite3_free(p->contextStack); |
|
1021 } |
|
1022 p->contextStack = 0; |
|
1023 p->contextStackDepth = 0; |
|
1024 p->contextStackTop = 0; |
|
1025 sqlite3_free(p->zErrMsg); |
|
1026 p->zErrMsg = 0; |
|
1027 p->resOnStack = 0; |
|
1028 } |
|
1029 |
|
1030 /* |
|
1031 ** Set the number of result columns that will be returned by this SQL |
|
1032 ** statement. This is now set at compile time, rather than during |
|
1033 ** execution of the vdbe program so that sqlite3_column_count() can |
|
1034 ** be called on an SQL statement before sqlite3_step(). |
|
1035 */ |
|
1036 void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ |
|
1037 Mem *pColName; |
|
1038 int n; |
|
1039 |
|
1040 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); |
|
1041 sqlite3_free(p->aColName); |
|
1042 n = nResColumn*COLNAME_N; |
|
1043 p->nResColumn = nResColumn; |
|
1044 p->aColName = pColName = (Mem*)sqlite3DbMallocZero(p->db, sizeof(Mem)*n ); |
|
1045 if( p->aColName==0 ) return; |
|
1046 while( n-- > 0 ){ |
|
1047 pColName->flags = MEM_Null; |
|
1048 pColName->db = p->db; |
|
1049 pColName++; |
|
1050 } |
|
1051 } |
|
1052 |
|
1053 /* |
|
1054 ** Set the name of the idx'th column to be returned by the SQL statement. |
|
1055 ** zName must be a pointer to a nul terminated string. |
|
1056 ** |
|
1057 ** This call must be made after a call to sqlite3VdbeSetNumCols(). |
|
1058 ** |
|
1059 ** If N==P3_STATIC it means that zName is a pointer to a constant static |
|
1060 ** string and we can just copy the pointer. If it is P3_DYNAMIC, then |
|
1061 ** the string is freed using sqlite3_free() when the vdbe is finished with |
|
1062 ** it. Otherwise, N bytes of zName are copied. |
|
1063 */ |
|
1064 int sqlite3VdbeSetColName(Vdbe *p, int idx, int var, const char *zName, int N){ |
|
1065 int rc; |
|
1066 Mem *pColName; |
|
1067 assert( idx<p->nResColumn ); |
|
1068 assert( var<COLNAME_N ); |
|
1069 if( p->db->mallocFailed ) return SQLITE_NOMEM; |
|
1070 assert( p->aColName!=0 ); |
|
1071 pColName = &(p->aColName[idx+var*p->nResColumn]); |
|
1072 if( N==P3_DYNAMIC || N==P3_STATIC ){ |
|
1073 rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, SQLITE_STATIC); |
|
1074 }else{ |
|
1075 rc = sqlite3VdbeMemSetStr(pColName, zName, N, SQLITE_UTF8,SQLITE_TRANSIENT); |
|
1076 } |
|
1077 if( rc==SQLITE_OK && N==P3_DYNAMIC ){ |
|
1078 pColName->flags = (pColName->flags&(~MEM_Static))|MEM_Dyn; |
|
1079 pColName->xDel = 0; |
|
1080 } |
|
1081 return rc; |
|
1082 } |
|
1083 |
|
1084 /* |
|
1085 ** A read or write transaction may or may not be active on database handle |
|
1086 ** db. If a transaction is active, commit it. If there is a |
|
1087 ** write-transaction spanning more than one database file, this routine |
|
1088 ** takes care of the master journal trickery. |
|
1089 */ |
|
1090 static int vdbeCommit(sqlite3 *db){ |
|
1091 int i; |
|
1092 int nTrans = 0; /* Number of databases with an active write-transaction */ |
|
1093 int rc = SQLITE_OK; |
|
1094 int needXcommit = 0; |
|
1095 |
|
1096 /* Before doing anything else, call the xSync() callback for any |
|
1097 ** virtual module tables written in this transaction. This has to |
|
1098 ** be done before determining whether a master journal file is |
|
1099 ** required, as an xSync() callback may add an attached database |
|
1100 ** to the transaction. |
|
1101 */ |
|
1102 rc = sqlite3VtabSync(db, rc); |
|
1103 if( rc!=SQLITE_OK ){ |
|
1104 return rc; |
|
1105 } |
|
1106 |
|
1107 /* This loop determines (a) if the commit hook should be invoked and |
|
1108 ** (b) how many database files have open write transactions, not |
|
1109 ** including the temp database. (b) is important because if more than |
|
1110 ** one database file has an open write transaction, a master journal |
|
1111 ** file is required for an atomic commit. |
|
1112 */ |
|
1113 for(i=0; i<db->nDb; i++){ |
|
1114 Btree *pBt = db->aDb[i].pBt; |
|
1115 if( sqlite3BtreeIsInTrans(pBt) ){ |
|
1116 needXcommit = 1; |
|
1117 if( i!=1 ) nTrans++; |
|
1118 } |
|
1119 } |
|
1120 |
|
1121 /* If there are any write-transactions at all, invoke the commit hook */ |
|
1122 if( needXcommit && db->xCommitCallback ){ |
|
1123 sqlite3SafetyOff(db); |
|
1124 rc = db->xCommitCallback(db->pCommitArg); |
|
1125 sqlite3SafetyOn(db); |
|
1126 if( rc ){ |
|
1127 return SQLITE_CONSTRAINT; |
|
1128 } |
|
1129 } |
|
1130 |
|
1131 /* The simple case - no more than one database file (not counting the |
|
1132 ** TEMP database) has a transaction active. There is no need for the |
|
1133 ** master-journal. |
|
1134 ** |
|
1135 ** If the return value of sqlite3BtreeGetFilename() is a zero length |
|
1136 ** string, it means the main database is :memory:. In that case we do |
|
1137 ** not support atomic multi-file commits, so use the simple case then |
|
1138 ** too. |
|
1139 */ |
|
1140 if( 0==strlen(sqlite3BtreeGetFilename(db->aDb[0].pBt)) || nTrans<=1 ){ |
|
1141 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ |
|
1142 Btree *pBt = db->aDb[i].pBt; |
|
1143 if( pBt ){ |
|
1144 rc = sqlite3BtreeCommitPhaseOne(pBt, 0); |
|
1145 } |
|
1146 } |
|
1147 |
|
1148 /* Do the commit only if all databases successfully complete phase 1. |
|
1149 ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an |
|
1150 ** IO error while deleting or truncating a journal file. It is unlikely, |
|
1151 ** but could happen. In this case abandon processing and return the error. |
|
1152 */ |
|
1153 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ |
|
1154 Btree *pBt = db->aDb[i].pBt; |
|
1155 if( pBt ){ |
|
1156 rc = sqlite3BtreeCommitPhaseTwo(pBt); |
|
1157 } |
|
1158 } |
|
1159 if( rc==SQLITE_OK ){ |
|
1160 sqlite3VtabCommit(db); |
|
1161 } |
|
1162 } |
|
1163 |
|
1164 /* The complex case - There is a multi-file write-transaction active. |
|
1165 ** This requires a master journal file to ensure the transaction is |
|
1166 ** committed atomicly. |
|
1167 */ |
|
1168 #ifndef SQLITE_OMIT_DISKIO |
|
1169 else{ |
|
1170 sqlite3_vfs *pVfs = db->pVfs; |
|
1171 int needSync = 0; |
|
1172 char *zMaster = 0; /* File-name for the master journal */ |
|
1173 char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt); |
|
1174 sqlite3_file *pMaster = 0; |
|
1175 i64 offset = 0; |
|
1176 |
|
1177 /* Select a master journal file name */ |
|
1178 do { |
|
1179 u32 random; |
|
1180 sqlite3_free(zMaster); |
|
1181 sqlite3Randomness(sizeof(random), &random); |
|
1182 zMaster = sqlite3MPrintf(db, "%s-mj%08X", zMainFile, random&0x7fffffff); |
|
1183 if( !zMaster ){ |
|
1184 return SQLITE_NOMEM; |
|
1185 } |
|
1186 }while( sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS) ); |
|
1187 |
|
1188 /* Open the master journal. */ |
|
1189 rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, |
|
1190 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| |
|
1191 SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0 |
|
1192 ); |
|
1193 if( rc!=SQLITE_OK ){ |
|
1194 sqlite3_free(zMaster); |
|
1195 return rc; |
|
1196 } |
|
1197 |
|
1198 /* Write the name of each database file in the transaction into the new |
|
1199 ** master journal file. If an error occurs at this point close |
|
1200 ** and delete the master journal file. All the individual journal files |
|
1201 ** still have 'null' as the master journal pointer, so they will roll |
|
1202 ** back independently if a failure occurs. |
|
1203 */ |
|
1204 for(i=0; i<db->nDb; i++){ |
|
1205 Btree *pBt = db->aDb[i].pBt; |
|
1206 if( i==1 ) continue; /* Ignore the TEMP database */ |
|
1207 if( sqlite3BtreeIsInTrans(pBt) ){ |
|
1208 char const *zFile = sqlite3BtreeGetJournalname(pBt); |
|
1209 if( zFile[0]==0 ) continue; /* Ignore :memory: databases */ |
|
1210 if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){ |
|
1211 needSync = 1; |
|
1212 } |
|
1213 rc = sqlite3OsWrite(pMaster, zFile, strlen(zFile)+1, offset); |
|
1214 offset += strlen(zFile)+1; |
|
1215 if( rc!=SQLITE_OK ){ |
|
1216 sqlite3OsCloseFree(pMaster); |
|
1217 sqlite3OsDelete(pVfs, zMaster, 0); |
|
1218 sqlite3_free(zMaster); |
|
1219 return rc; |
|
1220 } |
|
1221 } |
|
1222 } |
|
1223 |
|
1224 /* Sync the master journal file. If the IOCAP_SEQUENTIAL device |
|
1225 ** flag is set this is not required. |
|
1226 */ |
|
1227 zMainFile = sqlite3BtreeGetDirname(db->aDb[0].pBt); |
|
1228 if( (needSync |
|
1229 && (0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)) |
|
1230 && (rc=sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))!=SQLITE_OK) ){ |
|
1231 sqlite3OsCloseFree(pMaster); |
|
1232 sqlite3OsDelete(pVfs, zMaster, 0); |
|
1233 sqlite3_free(zMaster); |
|
1234 return rc; |
|
1235 } |
|
1236 |
|
1237 /* Sync all the db files involved in the transaction. The same call |
|
1238 ** sets the master journal pointer in each individual journal. If |
|
1239 ** an error occurs here, do not delete the master journal file. |
|
1240 ** |
|
1241 ** If the error occurs during the first call to |
|
1242 ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the |
|
1243 ** master journal file will be orphaned. But we cannot delete it, |
|
1244 ** in case the master journal file name was written into the journal |
|
1245 ** file before the failure occured. |
|
1246 */ |
|
1247 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ |
|
1248 Btree *pBt = db->aDb[i].pBt; |
|
1249 if( pBt ){ |
|
1250 rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster); |
|
1251 } |
|
1252 } |
|
1253 sqlite3OsCloseFree(pMaster); |
|
1254 if( rc!=SQLITE_OK ){ |
|
1255 sqlite3_free(zMaster); |
|
1256 return rc; |
|
1257 } |
|
1258 |
|
1259 /* Delete the master journal file. This commits the transaction. After |
|
1260 ** doing this the directory is synced again before any individual |
|
1261 ** transaction files are deleted. |
|
1262 */ |
|
1263 rc = sqlite3OsDelete(pVfs, zMaster, 1); |
|
1264 sqlite3_free(zMaster); |
|
1265 zMaster = 0; |
|
1266 if( rc ){ |
|
1267 return rc; |
|
1268 } |
|
1269 |
|
1270 /* All files and directories have already been synced, so the following |
|
1271 ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and |
|
1272 ** deleting or truncating journals. If something goes wrong while |
|
1273 ** this is happening we don't really care. The integrity of the |
|
1274 ** transaction is already guaranteed, but some stray 'cold' journals |
|
1275 ** may be lying around. Returning an error code won't help matters. |
|
1276 */ |
|
1277 disable_simulated_io_errors(); |
|
1278 for(i=0; i<db->nDb; i++){ |
|
1279 Btree *pBt = db->aDb[i].pBt; |
|
1280 if( pBt ){ |
|
1281 sqlite3BtreeCommitPhaseTwo(pBt); |
|
1282 } |
|
1283 } |
|
1284 enable_simulated_io_errors(); |
|
1285 |
|
1286 sqlite3VtabCommit(db); |
|
1287 } |
|
1288 #endif |
|
1289 |
|
1290 return rc; |
|
1291 } |
|
1292 |
|
1293 /* |
|
1294 ** This routine checks that the sqlite3.activeVdbeCnt count variable |
|
1295 ** matches the number of vdbe's in the list sqlite3.pVdbe that are |
|
1296 ** currently active. An assertion fails if the two counts do not match. |
|
1297 ** This is an internal self-check only - it is not an essential processing |
|
1298 ** step. |
|
1299 ** |
|
1300 ** This is a no-op if NDEBUG is defined. |
|
1301 */ |
|
1302 #ifndef NDEBUG |
|
1303 static void checkActiveVdbeCnt(sqlite3 *db){ |
|
1304 Vdbe *p; |
|
1305 int cnt = 0; |
|
1306 p = db->pVdbe; |
|
1307 while( p ){ |
|
1308 if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){ |
|
1309 cnt++; |
|
1310 } |
|
1311 p = p->pNext; |
|
1312 } |
|
1313 assert( cnt==db->activeVdbeCnt ); |
|
1314 } |
|
1315 #else |
|
1316 #define checkActiveVdbeCnt(x) |
|
1317 #endif |
|
1318 |
|
1319 /* |
|
1320 ** For every Btree that in database connection db which |
|
1321 ** has been modified, "trip" or invalidate each cursor in |
|
1322 ** that Btree might have been modified so that the cursor |
|
1323 ** can never be used again. This happens when a rollback |
|
1324 *** occurs. We have to trip all the other cursors, even |
|
1325 ** cursor from other VMs in different database connections, |
|
1326 ** so that none of them try to use the data at which they |
|
1327 ** were pointing and which now may have been changed due |
|
1328 ** to the rollback. |
|
1329 ** |
|
1330 ** Remember that a rollback can delete tables complete and |
|
1331 ** reorder rootpages. So it is not sufficient just to save |
|
1332 ** the state of the cursor. We have to invalidate the cursor |
|
1333 ** so that it is never used again. |
|
1334 */ |
|
1335 static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){ |
|
1336 int i; |
|
1337 for(i=0; i<db->nDb; i++){ |
|
1338 Btree *p = db->aDb[i].pBt; |
|
1339 if( p && sqlite3BtreeIsInTrans(p) ){ |
|
1340 sqlite3BtreeTripAllCursors(p, SQLITE_ABORT); |
|
1341 } |
|
1342 } |
|
1343 } |
|
1344 |
|
1345 /* |
|
1346 ** This routine is called the when a VDBE tries to halt. If the VDBE |
|
1347 ** has made changes and is in autocommit mode, then commit those |
|
1348 ** changes. If a rollback is needed, then do the rollback. |
|
1349 ** |
|
1350 ** This routine is the only way to move the state of a VM from |
|
1351 ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to |
|
1352 ** call this on a VM that is in the SQLITE_MAGIC_HALT state. |
|
1353 ** |
|
1354 ** Return an error code. If the commit could not complete because of |
|
1355 ** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it |
|
1356 ** means the close did not happen and needs to be repeated. |
|
1357 */ |
|
1358 int sqlite3VdbeHalt(Vdbe *p){ |
|
1359 sqlite3 *db = p->db; |
|
1360 int i; |
|
1361 int (*xFunc)(Btree *pBt) = 0; /* Function to call on each btree backend */ |
|
1362 int isSpecialError; /* Set to true if SQLITE_NOMEM or IOERR */ |
|
1363 |
|
1364 /* This function contains the logic that determines if a statement or |
|
1365 ** transaction will be committed or rolled back as a result of the |
|
1366 ** execution of this virtual machine. |
|
1367 ** |
|
1368 ** If any of the following errors occur: |
|
1369 ** |
|
1370 ** SQLITE_NOMEM |
|
1371 ** SQLITE_IOERR |
|
1372 ** SQLITE_FULL |
|
1373 ** SQLITE_INTERRUPT |
|
1374 ** |
|
1375 ** Then the internal cache might have been left in an inconsistent |
|
1376 ** state. We need to rollback the statement transaction, if there is |
|
1377 ** one, or the complete transaction if there is no statement transaction. |
|
1378 */ |
|
1379 |
|
1380 if( p->db->mallocFailed ){ |
|
1381 p->rc = SQLITE_NOMEM; |
|
1382 } |
|
1383 closeAllCursorsExceptActiveVtabs(p); |
|
1384 if( p->magic!=VDBE_MAGIC_RUN ){ |
|
1385 return SQLITE_OK; |
|
1386 } |
|
1387 checkActiveVdbeCnt(db); |
|
1388 |
|
1389 /* No commit or rollback needed if the program never started */ |
|
1390 if( p->pc>=0 ){ |
|
1391 int mrc; /* Primary error code from p->rc */ |
|
1392 |
|
1393 /* Lock all btrees used by the statement */ |
|
1394 sqlite3BtreeMutexArrayEnter(&p->aMutex); |
|
1395 |
|
1396 /* Check for one of the special errors */ |
|
1397 mrc = p->rc & 0xff; |
|
1398 isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR |
|
1399 || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL; |
|
1400 if( isSpecialError ){ |
|
1401 /* This loop does static analysis of the query to see which of the |
|
1402 ** following three categories it falls into: |
|
1403 ** |
|
1404 ** Read-only |
|
1405 ** Query with statement journal |
|
1406 ** Query without statement journal |
|
1407 ** |
|
1408 ** We could do something more elegant than this static analysis (i.e. |
|
1409 ** store the type of query as part of the compliation phase), but |
|
1410 ** handling malloc() or IO failure is a fairly obscure edge case so |
|
1411 ** this is probably easier. Todo: Might be an opportunity to reduce |
|
1412 ** code size a very small amount though... |
|
1413 */ |
|
1414 int notReadOnly = 0; |
|
1415 int isStatement = 0; |
|
1416 assert(p->aOp || p->nOp==0); |
|
1417 for(i=0; i<p->nOp; i++){ |
|
1418 switch( p->aOp[i].opcode ){ |
|
1419 case OP_Transaction: |
|
1420 notReadOnly |= p->aOp[i].p2; |
|
1421 break; |
|
1422 case OP_Statement: |
|
1423 isStatement = 1; |
|
1424 break; |
|
1425 } |
|
1426 } |
|
1427 |
|
1428 |
|
1429 /* If the query was read-only, we need do no rollback at all. Otherwise, |
|
1430 ** proceed with the special handling. |
|
1431 */ |
|
1432 if( notReadOnly || mrc!=SQLITE_INTERRUPT ){ |
|
1433 if( p->rc==SQLITE_IOERR_BLOCKED && isStatement ){ |
|
1434 xFunc = sqlite3BtreeRollbackStmt; |
|
1435 p->rc = SQLITE_BUSY; |
|
1436 } else if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && isStatement ){ |
|
1437 xFunc = sqlite3BtreeRollbackStmt; |
|
1438 }else{ |
|
1439 /* We are forced to roll back the active transaction. Before doing |
|
1440 ** so, abort any other statements this handle currently has active. |
|
1441 */ |
|
1442 invalidateCursorsOnModifiedBtrees(db); |
|
1443 sqlite3RollbackAll(db); |
|
1444 db->autoCommit = 1; |
|
1445 } |
|
1446 } |
|
1447 } |
|
1448 |
|
1449 /* If the auto-commit flag is set and this is the only active vdbe, then |
|
1450 ** we do either a commit or rollback of the current transaction. |
|
1451 ** |
|
1452 ** Note: This block also runs if one of the special errors handled |
|
1453 ** above has occured. |
|
1454 */ |
|
1455 if( db->autoCommit && db->activeVdbeCnt==1 ){ |
|
1456 if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ |
|
1457 /* The auto-commit flag is true, and the vdbe program was |
|
1458 ** successful or hit an 'OR FAIL' constraint. This means a commit |
|
1459 ** is required. |
|
1460 */ |
|
1461 int rc = vdbeCommit(db); |
|
1462 if( rc==SQLITE_BUSY ){ |
|
1463 sqlite3BtreeMutexArrayLeave(&p->aMutex); |
|
1464 return SQLITE_BUSY; |
|
1465 }else if( rc!=SQLITE_OK ){ |
|
1466 p->rc = rc; |
|
1467 sqlite3RollbackAll(db); |
|
1468 }else{ |
|
1469 sqlite3CommitInternalChanges(db); |
|
1470 } |
|
1471 }else{ |
|
1472 sqlite3RollbackAll(db); |
|
1473 } |
|
1474 }else if( !xFunc ){ |
|
1475 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ |
|
1476 if( p->openedStatement ){ |
|
1477 xFunc = sqlite3BtreeCommitStmt; |
|
1478 } |
|
1479 }else if( p->errorAction==OE_Abort ){ |
|
1480 xFunc = sqlite3BtreeRollbackStmt; |
|
1481 }else{ |
|
1482 invalidateCursorsOnModifiedBtrees(db); |
|
1483 sqlite3RollbackAll(db); |
|
1484 db->autoCommit = 1; |
|
1485 } |
|
1486 } |
|
1487 |
|
1488 /* If xFunc is not NULL, then it is one of sqlite3BtreeRollbackStmt or |
|
1489 ** sqlite3BtreeCommitStmt. Call it once on each backend. If an error occurs |
|
1490 ** and the return code is still SQLITE_OK, set the return code to the new |
|
1491 ** error value. |
|
1492 */ |
|
1493 assert(!xFunc || |
|
1494 xFunc==sqlite3BtreeCommitStmt || |
|
1495 xFunc==sqlite3BtreeRollbackStmt |
|
1496 ); |
|
1497 for(i=0; xFunc && i<db->nDb; i++){ |
|
1498 int rc; |
|
1499 Btree *pBt = db->aDb[i].pBt; |
|
1500 if( pBt ){ |
|
1501 rc = xFunc(pBt); |
|
1502 if( rc && (p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT) ){ |
|
1503 p->rc = rc; |
|
1504 sqlite3SetString(&p->zErrMsg, 0); |
|
1505 } |
|
1506 } |
|
1507 } |
|
1508 |
|
1509 /* If this was an INSERT, UPDATE or DELETE and the statement was committed, |
|
1510 ** set the change counter. |
|
1511 */ |
|
1512 if( p->changeCntOn && p->pc>=0 ){ |
|
1513 if( !xFunc || xFunc==sqlite3BtreeCommitStmt ){ |
|
1514 sqlite3VdbeSetChanges(db, p->nChange); |
|
1515 }else{ |
|
1516 sqlite3VdbeSetChanges(db, 0); |
|
1517 } |
|
1518 p->nChange = 0; |
|
1519 } |
|
1520 |
|
1521 /* Rollback or commit any schema changes that occurred. */ |
|
1522 if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){ |
|
1523 sqlite3ResetInternalSchema(db, 0); |
|
1524 db->flags = (db->flags | SQLITE_InternChanges); |
|
1525 } |
|
1526 |
|
1527 /* Release the locks */ |
|
1528 sqlite3BtreeMutexArrayLeave(&p->aMutex); |
|
1529 } |
|
1530 |
|
1531 /* We have successfully halted and closed the VM. Record this fact. */ |
|
1532 if( p->pc>=0 ){ |
|
1533 db->activeVdbeCnt--; |
|
1534 } |
|
1535 p->magic = VDBE_MAGIC_HALT; |
|
1536 checkActiveVdbeCnt(db); |
|
1537 if( p->db->mallocFailed ){ |
|
1538 p->rc = SQLITE_NOMEM; |
|
1539 } |
|
1540 checkActiveVdbeCnt(db); |
|
1541 |
|
1542 return SQLITE_OK; |
|
1543 } |
|
1544 |
|
1545 |
|
1546 /* |
|
1547 ** Each VDBE holds the result of the most recent sqlite3_step() call |
|
1548 ** in p->rc. This routine sets that result back to SQLITE_OK. |
|
1549 */ |
|
1550 void sqlite3VdbeResetStepResult(Vdbe *p){ |
|
1551 p->rc = SQLITE_OK; |
|
1552 } |
|
1553 |
|
1554 /* |
|
1555 ** Clean up a VDBE after execution but do not delete the VDBE just yet. |
|
1556 ** Write any error messages into *pzErrMsg. Return the result code. |
|
1557 ** |
|
1558 ** After this routine is run, the VDBE should be ready to be executed |
|
1559 ** again. |
|
1560 ** |
|
1561 ** To look at it another way, this routine resets the state of the |
|
1562 ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to |
|
1563 ** VDBE_MAGIC_INIT. |
|
1564 */ |
|
1565 int sqlite3VdbeReset(Vdbe *p){ |
|
1566 sqlite3 *db; |
|
1567 db = p->db; |
|
1568 |
|
1569 /* If the VM did not run to completion or if it encountered an |
|
1570 ** error, then it might not have been halted properly. So halt |
|
1571 ** it now. |
|
1572 */ |
|
1573 sqlite3SafetyOn(db); |
|
1574 sqlite3VdbeHalt(p); |
|
1575 sqlite3SafetyOff(db); |
|
1576 |
|
1577 /* If the VDBE has be run even partially, then transfer the error code |
|
1578 ** and error message from the VDBE into the main database structure. But |
|
1579 ** if the VDBE has just been set to run but has not actually executed any |
|
1580 ** instructions yet, leave the main database error information unchanged. |
|
1581 */ |
|
1582 if( p->pc>=0 ){ |
|
1583 if( p->zErrMsg ){ |
|
1584 sqlite3ValueSetStr(db->pErr,-1,p->zErrMsg,SQLITE_UTF8,sqlite3_free); |
|
1585 db->errCode = p->rc; |
|
1586 p->zErrMsg = 0; |
|
1587 }else if( p->rc ){ |
|
1588 sqlite3Error(db, p->rc, 0); |
|
1589 }else{ |
|
1590 sqlite3Error(db, SQLITE_OK, 0); |
|
1591 } |
|
1592 }else if( p->rc && p->expired ){ |
|
1593 /* The expired flag was set on the VDBE before the first call |
|
1594 ** to sqlite3_step(). For consistency (since sqlite3_step() was |
|
1595 ** called), set the database error in this case as well. |
|
1596 */ |
|
1597 sqlite3Error(db, p->rc, 0); |
|
1598 sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, sqlite3_free); |
|
1599 p->zErrMsg = 0; |
|
1600 } |
|
1601 |
|
1602 /* Reclaim all memory used by the VDBE |
|
1603 */ |
|
1604 Cleanup(p); |
|
1605 |
|
1606 /* Save profiling information from this VDBE run. |
|
1607 */ |
|
1608 assert( p->pTos<&p->aStack[p->pc<0?0:p->pc] || !p->aStack ); |
|
1609 #ifdef VDBE_PROFILE |
|
1610 { |
|
1611 FILE *out = fopen("vdbe_profile.out", "a"); |
|
1612 if( out ){ |
|
1613 int i; |
|
1614 fprintf(out, "---- "); |
|
1615 for(i=0; i<p->nOp; i++){ |
|
1616 fprintf(out, "%02x", p->aOp[i].opcode); |
|
1617 } |
|
1618 fprintf(out, "\n"); |
|
1619 for(i=0; i<p->nOp; i++){ |
|
1620 fprintf(out, "%6d %10lld %8lld ", |
|
1621 p->aOp[i].cnt, |
|
1622 p->aOp[i].cycles, |
|
1623 p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 |
|
1624 ); |
|
1625 sqlite3VdbePrintOp(out, i, &p->aOp[i]); |
|
1626 } |
|
1627 fclose(out); |
|
1628 } |
|
1629 } |
|
1630 #endif |
|
1631 p->magic = VDBE_MAGIC_INIT; |
|
1632 p->aborted = 0; |
|
1633 return p->rc & db->errMask; |
|
1634 } |
|
1635 |
|
1636 /* |
|
1637 ** Clean up and delete a VDBE after execution. Return an integer which is |
|
1638 ** the result code. Write any error message text into *pzErrMsg. |
|
1639 */ |
|
1640 int sqlite3VdbeFinalize(Vdbe *p){ |
|
1641 int rc = SQLITE_OK; |
|
1642 if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){ |
|
1643 rc = sqlite3VdbeReset(p); |
|
1644 assert( (rc & p->db->errMask)==rc ); |
|
1645 }else if( p->magic!=VDBE_MAGIC_INIT ){ |
|
1646 return SQLITE_MISUSE; |
|
1647 } |
|
1648 sqlite3VdbeDelete(p); |
|
1649 return rc; |
|
1650 } |
|
1651 |
|
1652 /* |
|
1653 ** Call the destructor for each auxdata entry in pVdbeFunc for which |
|
1654 ** the corresponding bit in mask is clear. Auxdata entries beyond 31 |
|
1655 ** are always destroyed. To destroy all auxdata entries, call this |
|
1656 ** routine with mask==0. |
|
1657 */ |
|
1658 void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){ |
|
1659 int i; |
|
1660 for(i=0; i<pVdbeFunc->nAux; i++){ |
|
1661 VdbeFunc::AuxData *pAux = &pVdbeFunc->apAux[i]; |
|
1662 if( (i>31 || !(mask&(1<<i))) && pAux->pAux ){ |
|
1663 if( pAux->xDelete ){ |
|
1664 pAux->xDelete(pAux->pAux); |
|
1665 } |
|
1666 pAux->pAux = 0; |
|
1667 } |
|
1668 } |
|
1669 } |
|
1670 |
|
1671 /* |
|
1672 ** Delete an entire VDBE. |
|
1673 */ |
|
1674 void sqlite3VdbeDelete(Vdbe *p){ |
|
1675 int i; |
|
1676 if( p==0 ) return; |
|
1677 Cleanup(p); |
|
1678 if( p->pPrev ){ |
|
1679 p->pPrev->pNext = p->pNext; |
|
1680 }else{ |
|
1681 assert( p->db->pVdbe==p ); |
|
1682 p->db->pVdbe = p->pNext; |
|
1683 } |
|
1684 if( p->pNext ){ |
|
1685 p->pNext->pPrev = p->pPrev; |
|
1686 } |
|
1687 if( p->aOp ){ |
|
1688 for(i=0; i<p->nOp; i++){ |
|
1689 Op *pOp = &p->aOp[i]; |
|
1690 freeP3(pOp->p3type, pOp->p3); |
|
1691 } |
|
1692 sqlite3_free(p->aOp); |
|
1693 } |
|
1694 releaseMemArray(p->aVar, p->nVar); |
|
1695 sqlite3_free(p->aLabel); |
|
1696 sqlite3_free(p->aStack); |
|
1697 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); |
|
1698 sqlite3_free(p->aColName); |
|
1699 sqlite3_free(p->zSql); |
|
1700 p->magic = VDBE_MAGIC_DEAD; |
|
1701 sqlite3_free(p); |
|
1702 } |
|
1703 |
|
1704 /* |
|
1705 ** If a MoveTo operation is pending on the given cursor, then do that |
|
1706 ** MoveTo now. Return an error code. If no MoveTo is pending, this |
|
1707 ** routine does nothing and returns SQLITE_OK. |
|
1708 */ |
|
1709 int sqlite3VdbeCursorMoveto(Cursor *p){ |
|
1710 if( p->deferredMoveto ){ |
|
1711 int res, rc; |
|
1712 #ifdef SQLITE_TEST |
|
1713 extern int sqlite3_search_count; |
|
1714 #endif |
|
1715 assert( p->isTable ); |
|
1716 rc = sqlite3BtreeMoveto(p->pCursor, 0, p->movetoTarget, 0, &res); |
|
1717 if( rc ) return rc; |
|
1718 *p->pIncrKey = 0; |
|
1719 p->lastRowid = keyToInt(p->movetoTarget); |
|
1720 p->rowidIsValid = res==0; |
|
1721 if( res<0 ){ |
|
1722 rc = sqlite3BtreeNext(p->pCursor, &res); |
|
1723 if( rc ) return rc; |
|
1724 } |
|
1725 #ifdef SQLITE_TEST |
|
1726 sqlite3_search_count++; |
|
1727 #endif |
|
1728 p->deferredMoveto = 0; |
|
1729 p->cacheStatus = CACHE_STALE; |
|
1730 } |
|
1731 return SQLITE_OK; |
|
1732 } |
|
1733 |
|
1734 /* |
|
1735 ** The following functions: |
|
1736 ** |
|
1737 ** sqlite3VdbeSerialType() |
|
1738 ** sqlite3VdbeSerialTypeLen() |
|
1739 ** sqlite3VdbeSerialRead() |
|
1740 ** sqlite3VdbeSerialLen() |
|
1741 ** sqlite3VdbeSerialWrite() |
|
1742 ** |
|
1743 ** encapsulate the code that serializes values for storage in SQLite |
|
1744 ** data and index records. Each serialized value consists of a |
|
1745 ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned |
|
1746 ** integer, stored as a varint. |
|
1747 ** |
|
1748 ** In an SQLite index record, the serial type is stored directly before |
|
1749 ** the blob of data that it corresponds to. In a table record, all serial |
|
1750 ** types are stored at the start of the record, and the blobs of data at |
|
1751 ** the end. Hence these functions allow the caller to handle the |
|
1752 ** serial-type and data blob seperately. |
|
1753 ** |
|
1754 ** The following table describes the various storage classes for data: |
|
1755 ** |
|
1756 ** serial type bytes of data type |
|
1757 ** -------------- --------------- --------------- |
|
1758 ** 0 0 NULL |
|
1759 ** 1 1 signed integer |
|
1760 ** 2 2 signed integer |
|
1761 ** 3 3 signed integer |
|
1762 ** 4 4 signed integer |
|
1763 ** 5 6 signed integer |
|
1764 ** 6 8 signed integer |
|
1765 ** 7 8 IEEE float |
|
1766 ** 8 0 Integer constant 0 |
|
1767 ** 9 0 Integer constant 1 |
|
1768 ** 10,11 reserved for expansion |
|
1769 ** N>=12 and even (N-12)/2 BLOB |
|
1770 ** N>=13 and odd (N-13)/2 text |
|
1771 ** |
|
1772 ** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions |
|
1773 ** of SQLite will not understand those serial types. |
|
1774 */ |
|
1775 |
|
1776 /* |
|
1777 ** Return the serial-type for the value stored in pMem. |
|
1778 */ |
|
1779 u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ |
|
1780 int flags = pMem->flags; |
|
1781 int n; |
|
1782 |
|
1783 if( flags&MEM_Null ){ |
|
1784 return 0; |
|
1785 } |
|
1786 if( flags&MEM_Int ){ |
|
1787 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ |
|
1788 # define MAX_6BYTE ((((i64)0x00001000)<<32)-1) |
|
1789 i64 i = pMem->u.i; |
|
1790 u64 u; |
|
1791 if( file_format>=4 && (i&1)==i ){ |
|
1792 return 8+i; |
|
1793 } |
|
1794 u = i<0 ? -i : i; |
|
1795 if( u<=127 ) return 1; |
|
1796 if( u<=32767 ) return 2; |
|
1797 if( u<=8388607 ) return 3; |
|
1798 if( u<=2147483647 ) return 4; |
|
1799 if( u<=MAX_6BYTE ) return 5; |
|
1800 return 6; |
|
1801 } |
|
1802 if( flags&MEM_Real ){ |
|
1803 return 7; |
|
1804 } |
|
1805 assert( flags&(MEM_Str|MEM_Blob) ); |
|
1806 n = pMem->n; |
|
1807 if( flags & MEM_Zero ){ |
|
1808 n += pMem->u.i; |
|
1809 } |
|
1810 assert( n>=0 ); |
|
1811 return ((n*2) + 12 + ((flags&MEM_Str)!=0)); |
|
1812 } |
|
1813 |
|
1814 /* |
|
1815 ** Return the length of the data corresponding to the supplied serial-type. |
|
1816 */ |
|
1817 int sqlite3VdbeSerialTypeLen(u32 serial_type){ |
|
1818 if( serial_type>=12 ){ |
|
1819 return (serial_type-12)/2; |
|
1820 }else{ |
|
1821 static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 }; |
|
1822 return aSize[serial_type]; |
|
1823 } |
|
1824 } |
|
1825 |
|
1826 /* |
|
1827 ** If we are on an architecture with mixed-endian floating |
|
1828 ** points (ex: ARM7) then swap the lower 4 bytes with the |
|
1829 ** upper 4 bytes. Return the result. |
|
1830 ** |
|
1831 ** For most architectures, this is a no-op. |
|
1832 ** |
|
1833 ** (later): It is reported to me that the mixed-endian problem |
|
1834 ** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems |
|
1835 ** that early versions of GCC stored the two words of a 64-bit |
|
1836 ** float in the wrong order. And that error has been propagated |
|
1837 ** ever since. The blame is not necessarily with GCC, though. |
|
1838 ** GCC might have just copying the problem from a prior compiler. |
|
1839 ** I am also told that newer versions of GCC that follow a different |
|
1840 ** ABI get the byte order right. |
|
1841 ** |
|
1842 ** Developers using SQLite on an ARM7 should compile and run their |
|
1843 ** application using -DSQLITE_DEBUG=1 at least once. With DEBUG |
|
1844 ** enabled, some asserts below will ensure that the byte order of |
|
1845 ** floating point values is correct. |
|
1846 ** |
|
1847 ** (2007-08-30) Frank van Vugt has studied this problem closely |
|
1848 ** and has send his findings to the SQLite developers. Frank |
|
1849 ** writes that some Linux kernels offer floating point hardware |
|
1850 ** emulation that uses only 32-bit mantissas instead of a full |
|
1851 ** 48-bits as required by the IEEE standard. (This is the |
|
1852 ** CONFIG_FPE_FASTFPE option.) On such systems, floating point |
|
1853 ** byte swapping becomes very complicated. To avoid problems, |
|
1854 ** the necessary byte swapping is carried out using a 64-bit integer |
|
1855 ** rather than a 64-bit float. Frank assures us that the code here |
|
1856 ** works for him. We, the developers, have no way to independently |
|
1857 ** verify this, but Frank seems to know what he is talking about |
|
1858 ** so we trust him. |
|
1859 */ |
|
1860 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT |
|
1861 static u64 floatSwap(u64 in){ |
|
1862 union { |
|
1863 u64 r; |
|
1864 u32 i[2]; |
|
1865 } u; |
|
1866 u32 t; |
|
1867 |
|
1868 u.r = in; |
|
1869 t = u.i[0]; |
|
1870 u.i[0] = u.i[1]; |
|
1871 u.i[1] = t; |
|
1872 return u.r; |
|
1873 } |
|
1874 # define swapMixedEndianFloat(X) X = floatSwap(X) |
|
1875 #else |
|
1876 # define swapMixedEndianFloat(X) |
|
1877 #endif |
|
1878 |
|
1879 /* |
|
1880 ** Write the serialized data blob for the value stored in pMem into |
|
1881 ** buf. It is assumed that the caller has allocated sufficient space. |
|
1882 ** Return the number of bytes written. |
|
1883 ** |
|
1884 ** nBuf is the amount of space left in buf[]. nBuf must always be |
|
1885 ** large enough to hold the entire field. Except, if the field is |
|
1886 ** a blob with a zero-filled tail, then buf[] might be just the right |
|
1887 ** size to hold everything except for the zero-filled tail. If buf[] |
|
1888 ** is only big enough to hold the non-zero prefix, then only write that |
|
1889 ** prefix into buf[]. But if buf[] is large enough to hold both the |
|
1890 ** prefix and the tail then write the prefix and set the tail to all |
|
1891 ** zeros. |
|
1892 ** |
|
1893 ** Return the number of bytes actually written into buf[]. The number |
|
1894 ** of bytes in the zero-filled tail is included in the return value only |
|
1895 ** if those bytes were zeroed in buf[]. |
|
1896 */ |
|
1897 int sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){ |
|
1898 u32 serial_type = sqlite3VdbeSerialType(pMem, file_format); |
|
1899 int len; |
|
1900 |
|
1901 /* Integer and Real */ |
|
1902 if( serial_type<=7 && serial_type>0 ){ |
|
1903 u64 v; |
|
1904 int i; |
|
1905 if( serial_type==7 ){ |
|
1906 assert( sizeof(v)==sizeof(pMem->r) ); |
|
1907 memcpy(&v, &pMem->r, sizeof(v)); |
|
1908 swapMixedEndianFloat(v); |
|
1909 }else{ |
|
1910 v = pMem->u.i; |
|
1911 } |
|
1912 len = i = sqlite3VdbeSerialTypeLen(serial_type); |
|
1913 assert( len<=nBuf ); |
|
1914 while( i-- ){ |
|
1915 buf[i] = (v&0xFF); |
|
1916 v >>= 8; |
|
1917 } |
|
1918 return len; |
|
1919 } |
|
1920 |
|
1921 /* String or blob */ |
|
1922 if( serial_type>=12 ){ |
|
1923 assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.i:0) |
|
1924 == sqlite3VdbeSerialTypeLen(serial_type) ); |
|
1925 assert( pMem->n<=nBuf ); |
|
1926 len = pMem->n; |
|
1927 memcpy(buf, pMem->z, len); |
|
1928 if( pMem->flags & MEM_Zero ){ |
|
1929 len += pMem->u.i; |
|
1930 if( len>nBuf ){ |
|
1931 len = nBuf; |
|
1932 } |
|
1933 memset(&buf[pMem->n], 0, len-pMem->n); |
|
1934 } |
|
1935 return len; |
|
1936 } |
|
1937 |
|
1938 /* NULL or constants 0 or 1 */ |
|
1939 return 0; |
|
1940 } |
|
1941 |
|
1942 /* |
|
1943 ** Deserialize the data blob pointed to by buf as serial type serial_type |
|
1944 ** and store the result in pMem. Return the number of bytes read. |
|
1945 */ |
|
1946 int sqlite3VdbeSerialGet( |
|
1947 const unsigned char *buf, /* Buffer to deserialize from */ |
|
1948 u32 serial_type, /* Serial type to deserialize */ |
|
1949 Mem *pMem /* Memory cell to write value into */ |
|
1950 ){ |
|
1951 switch( serial_type ){ |
|
1952 case 10: /* Reserved for future use */ |
|
1953 case 11: /* Reserved for future use */ |
|
1954 case 0: { /* NULL */ |
|
1955 pMem->flags = MEM_Null; |
|
1956 break; |
|
1957 } |
|
1958 case 1: { /* 1-byte signed integer */ |
|
1959 pMem->u.i = (signed char)buf[0]; |
|
1960 pMem->flags = MEM_Int; |
|
1961 return 1; |
|
1962 } |
|
1963 case 2: { /* 2-byte signed integer */ |
|
1964 pMem->u.i = (((signed char)buf[0])<<8) | buf[1]; |
|
1965 pMem->flags = MEM_Int; |
|
1966 return 2; |
|
1967 } |
|
1968 case 3: { /* 3-byte signed integer */ |
|
1969 pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2]; |
|
1970 pMem->flags = MEM_Int; |
|
1971 return 3; |
|
1972 } |
|
1973 case 4: { /* 4-byte signed integer */ |
|
1974 pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; |
|
1975 pMem->flags = MEM_Int; |
|
1976 return 4; |
|
1977 } |
|
1978 case 5: { /* 6-byte signed integer */ |
|
1979 u64 x = (((signed char)buf[0])<<8) | buf[1]; |
|
1980 u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5]; |
|
1981 x = (x<<32) | y; |
|
1982 pMem->u.i = *(i64*)&x; |
|
1983 pMem->flags = MEM_Int; |
|
1984 return 6; |
|
1985 } |
|
1986 case 6: /* 8-byte signed integer */ |
|
1987 case 7: { /* IEEE floating point */ |
|
1988 u64 x; |
|
1989 u32 y; |
|
1990 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) |
|
1991 /* Verify that integers and floating point values use the same |
|
1992 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is |
|
1993 ** defined that 64-bit floating point values really are mixed |
|
1994 ** endian. |
|
1995 */ |
|
1996 static const u64 t1 = ((u64)0x3ff00000)<<32; |
|
1997 static const double r1 = 1.0; |
|
1998 u64 t2 = t1; |
|
1999 swapMixedEndianFloat(t2); |
|
2000 assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); |
|
2001 #endif |
|
2002 |
|
2003 x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; |
|
2004 y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; |
|
2005 x = (x<<32) | y; |
|
2006 if( serial_type==6 ){ |
|
2007 pMem->u.i = *(i64*)&x; |
|
2008 pMem->flags = MEM_Int; |
|
2009 }else{ |
|
2010 assert( sizeof(x)==8 && sizeof(pMem->r)==8 ); |
|
2011 swapMixedEndianFloat(x); |
|
2012 memcpy(&pMem->r, &x, sizeof(x)); |
|
2013 pMem->flags = MEM_Real; |
|
2014 } |
|
2015 return 8; |
|
2016 } |
|
2017 case 8: /* Integer 0 */ |
|
2018 case 9: { /* Integer 1 */ |
|
2019 pMem->u.i = serial_type-8; |
|
2020 pMem->flags = MEM_Int; |
|
2021 return 0; |
|
2022 } |
|
2023 default: { |
|
2024 int len = (serial_type-12)/2; |
|
2025 pMem->z = (char *)buf; |
|
2026 pMem->n = len; |
|
2027 pMem->xDel = 0; |
|
2028 if( serial_type&0x01 ){ |
|
2029 pMem->flags = MEM_Str | MEM_Ephem; |
|
2030 }else{ |
|
2031 pMem->flags = MEM_Blob | MEM_Ephem; |
|
2032 } |
|
2033 return len; |
|
2034 } |
|
2035 } |
|
2036 return 0; |
|
2037 } |
|
2038 |
|
2039 /* |
|
2040 ** The header of a record consists of a sequence variable-length integers. |
|
2041 ** These integers are almost always small and are encoded as a single byte. |
|
2042 ** The following macro takes advantage this fact to provide a fast decode |
|
2043 ** of the integers in a record header. It is faster for the common case |
|
2044 ** where the integer is a single byte. It is a little slower when the |
|
2045 ** integer is two or more bytes. But overall it is faster. |
|
2046 ** |
|
2047 ** The following expressions are equivalent: |
|
2048 ** |
|
2049 ** x = sqlite3GetVarint32( A, &B ); |
|
2050 ** |
|
2051 ** x = GetVarint( A, B ); |
|
2052 ** |
|
2053 */ |
|
2054 #define GetVarint(A,B) ((B = *(A))<=0x7f ? 1 : sqlite3GetVarint32(A, &B)) |
|
2055 |
|
2056 /* |
|
2057 ** This function compares the two table rows or index records specified by |
|
2058 ** {nKey1, pKey1} and {nKey2, pKey2}, returning a negative, zero |
|
2059 ** or positive integer if {nKey1, pKey1} is less than, equal to or |
|
2060 ** greater than {nKey2, pKey2}. Both Key1 and Key2 must be byte strings |
|
2061 ** composed by the OP_MakeRecord opcode of the VDBE. |
|
2062 */ |
|
2063 int sqlite3VdbeRecordCompare( |
|
2064 void *userData, |
|
2065 int nKey1, const void *pKey1, |
|
2066 int nKey2, const void *pKey2 |
|
2067 ){ |
|
2068 KeyInfo *pKeyInfo = (KeyInfo*)userData; |
|
2069 u32 d1, d2; /* Offset into aKey[] of next data element */ |
|
2070 u32 idx1, idx2; /* Offset into aKey[] of next header element */ |
|
2071 u32 szHdr1, szHdr2; /* Number of bytes in header */ |
|
2072 int i = 0; |
|
2073 int nField; |
|
2074 int rc = 0; |
|
2075 const unsigned char *aKey1 = (const unsigned char *)pKey1; |
|
2076 const unsigned char *aKey2 = (const unsigned char *)pKey2; |
|
2077 |
|
2078 Mem mem1; |
|
2079 Mem mem2; |
|
2080 mem1.enc = pKeyInfo->enc; |
|
2081 mem1.db = pKeyInfo->db; |
|
2082 mem2.enc = pKeyInfo->enc; |
|
2083 mem2.db = pKeyInfo->db; |
|
2084 |
|
2085 idx1 = GetVarint(aKey1, szHdr1); |
|
2086 d1 = szHdr1; |
|
2087 idx2 = GetVarint(aKey2, szHdr2); |
|
2088 d2 = szHdr2; |
|
2089 nField = pKeyInfo->nField; |
|
2090 while( idx1<szHdr1 && idx2<szHdr2 ){ |
|
2091 u32 serial_type1; |
|
2092 u32 serial_type2; |
|
2093 |
|
2094 /* Read the serial types for the next element in each key. */ |
|
2095 idx1 += GetVarint( aKey1+idx1, serial_type1 ); |
|
2096 if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break; |
|
2097 idx2 += GetVarint( aKey2+idx2, serial_type2 ); |
|
2098 if( d2>=nKey2 && sqlite3VdbeSerialTypeLen(serial_type2)>0 ) break; |
|
2099 |
|
2100 /* Extract the values to be compared. |
|
2101 */ |
|
2102 d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1); |
|
2103 d2 += sqlite3VdbeSerialGet(&aKey2[d2], serial_type2, &mem2); |
|
2104 |
|
2105 /* Do the comparison |
|
2106 */ |
|
2107 rc = sqlite3MemCompare(&mem1, &mem2, i<nField ? pKeyInfo->aColl[i] : 0); |
|
2108 if( mem1.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem1); |
|
2109 if( mem2.flags & MEM_Dyn ) sqlite3VdbeMemRelease(&mem2); |
|
2110 if( rc!=0 ){ |
|
2111 break; |
|
2112 } |
|
2113 i++; |
|
2114 } |
|
2115 |
|
2116 /* One of the keys ran out of fields, but all the fields up to that point |
|
2117 ** were equal. If the incrKey flag is true, then the second key is |
|
2118 ** treated as larger. |
|
2119 */ |
|
2120 if( rc==0 ){ |
|
2121 if( pKeyInfo->incrKey ){ |
|
2122 rc = -1; |
|
2123 }else if( !pKeyInfo->prefixIsEqual ){ |
|
2124 if( d1<nKey1 ){ |
|
2125 rc = 1; |
|
2126 }else if( d2<nKey2 ){ |
|
2127 rc = -1; |
|
2128 } |
|
2129 } |
|
2130 }else if( pKeyInfo->aSortOrder && i<pKeyInfo->nField |
|
2131 && pKeyInfo->aSortOrder[i] ){ |
|
2132 rc = -rc; |
|
2133 } |
|
2134 |
|
2135 return rc; |
|
2136 } |
|
2137 |
|
2138 /* |
|
2139 ** The argument is an index entry composed using the OP_MakeRecord opcode. |
|
2140 ** The last entry in this record should be an integer (specifically |
|
2141 ** an integer rowid). This routine returns the number of bytes in |
|
2142 ** that integer. |
|
2143 */ |
|
2144 int sqlite3VdbeIdxRowidLen(const u8 *aKey){ |
|
2145 u32 szHdr; /* Size of the header */ |
|
2146 u32 typeRowid; /* Serial type of the rowid */ |
|
2147 |
|
2148 sqlite3GetVarint32(aKey, &szHdr); |
|
2149 sqlite3GetVarint32(&aKey[szHdr-1], &typeRowid); |
|
2150 return sqlite3VdbeSerialTypeLen(typeRowid); |
|
2151 } |
|
2152 |
|
2153 |
|
2154 /* |
|
2155 ** pCur points at an index entry created using the OP_MakeRecord opcode. |
|
2156 ** Read the rowid (the last field in the record) and store it in *rowid. |
|
2157 ** Return SQLITE_OK if everything works, or an error code otherwise. |
|
2158 */ |
|
2159 int sqlite3VdbeIdxRowid(BtCursor *pCur, i64 *rowid){ |
|
2160 i64 nCellKey = 0; |
|
2161 int rc; |
|
2162 u32 szHdr; /* Size of the header */ |
|
2163 u32 typeRowid; /* Serial type of the rowid */ |
|
2164 u32 lenRowid; /* Size of the rowid */ |
|
2165 Mem m, v; |
|
2166 |
|
2167 sqlite3BtreeKeySize(pCur, &nCellKey); |
|
2168 if( nCellKey<=0 ){ |
|
2169 return SQLITE_CORRUPT_BKPT; |
|
2170 } |
|
2171 rc = sqlite3VdbeMemFromBtree(pCur, 0, nCellKey, 1, &m); |
|
2172 if( rc ){ |
|
2173 return rc; |
|
2174 } |
|
2175 sqlite3GetVarint32((u8*)m.z, &szHdr); |
|
2176 sqlite3GetVarint32((u8*)&m.z[szHdr-1], &typeRowid); |
|
2177 lenRowid = sqlite3VdbeSerialTypeLen(typeRowid); |
|
2178 sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v); |
|
2179 *rowid = v.u.i; |
|
2180 sqlite3VdbeMemRelease(&m); |
|
2181 return SQLITE_OK; |
|
2182 } |
|
2183 |
|
2184 /* |
|
2185 ** Compare the key of the index entry that cursor pC is point to against |
|
2186 ** the key string in pKey (of length nKey). Write into *pRes a number |
|
2187 ** that is negative, zero, or positive if pC is less than, equal to, |
|
2188 ** or greater than pKey. Return SQLITE_OK on success. |
|
2189 ** |
|
2190 ** pKey is either created without a rowid or is truncated so that it |
|
2191 ** omits the rowid at the end. The rowid at the end of the index entry |
|
2192 ** is ignored as well. |
|
2193 */ |
|
2194 int sqlite3VdbeIdxKeyCompare( |
|
2195 Cursor *pC, /* The cursor to compare against */ |
|
2196 int nKey, const u8 *pKey, /* The key to compare */ |
|
2197 int *res /* Write the comparison result here */ |
|
2198 ){ |
|
2199 i64 nCellKey = 0; |
|
2200 int rc; |
|
2201 BtCursor *pCur = pC->pCursor; |
|
2202 int lenRowid; |
|
2203 Mem m; |
|
2204 |
|
2205 sqlite3BtreeKeySize(pCur, &nCellKey); |
|
2206 if( nCellKey<=0 ){ |
|
2207 *res = 0; |
|
2208 return SQLITE_OK; |
|
2209 } |
|
2210 rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, nCellKey, 1, &m); |
|
2211 if( rc ){ |
|
2212 return rc; |
|
2213 } |
|
2214 lenRowid = sqlite3VdbeIdxRowidLen((u8*)m.z); |
|
2215 *res = sqlite3VdbeRecordCompare(pC->pKeyInfo, m.n-lenRowid, m.z, nKey, pKey); |
|
2216 sqlite3VdbeMemRelease(&m); |
|
2217 return SQLITE_OK; |
|
2218 } |
|
2219 |
|
2220 /* |
|
2221 ** This routine sets the value to be returned by subsequent calls to |
|
2222 ** sqlite3_changes() on the database handle 'db'. |
|
2223 */ |
|
2224 void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){ |
|
2225 assert( sqlite3_mutex_held(db->mutex) ); |
|
2226 db->nChange = nChange; |
|
2227 db->nTotalChange += nChange; |
|
2228 } |
|
2229 |
|
2230 /* |
|
2231 ** Set a flag in the vdbe to update the change counter when it is finalised |
|
2232 ** or reset. |
|
2233 */ |
|
2234 void sqlite3VdbeCountChanges(Vdbe *v){ |
|
2235 v->changeCntOn = 1; |
|
2236 } |
|
2237 |
|
2238 /* |
|
2239 ** Mark every prepared statement associated with a database connection |
|
2240 ** as expired. |
|
2241 ** |
|
2242 ** An expired statement means that recompilation of the statement is |
|
2243 ** recommend. Statements expire when things happen that make their |
|
2244 ** programs obsolete. Removing user-defined functions or collating |
|
2245 ** sequences, or changing an authorization function are the types of |
|
2246 ** things that make prepared statements obsolete. |
|
2247 */ |
|
2248 void sqlite3ExpirePreparedStatements(sqlite3 *db){ |
|
2249 Vdbe *p; |
|
2250 for(p = db->pVdbe; p; p=p->pNext){ |
|
2251 p->expired = 1; |
|
2252 } |
|
2253 } |
|
2254 |
|
2255 /* |
|
2256 ** Return the database associated with the Vdbe. |
|
2257 */ |
|
2258 sqlite3 *sqlite3VdbeDb(Vdbe *v){ |
|
2259 return v->db; |
|
2260 } |