Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(768)

Side by Side Diff: third_party/sqlite/sqlite-src-3100200/src/vdbeaux.c

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2003 September 6 2 ** 2003 September 6
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 17 matching lines...) Expand all
28 db->pVdbe->pPrev = p; 28 db->pVdbe->pPrev = p;
29 } 29 }
30 p->pNext = db->pVdbe; 30 p->pNext = db->pVdbe;
31 p->pPrev = 0; 31 p->pPrev = 0;
32 db->pVdbe = p; 32 db->pVdbe = p;
33 p->magic = VDBE_MAGIC_INIT; 33 p->magic = VDBE_MAGIC_INIT;
34 p->pParse = pParse; 34 p->pParse = pParse;
35 assert( pParse->aLabel==0 ); 35 assert( pParse->aLabel==0 );
36 assert( pParse->nLabel==0 ); 36 assert( pParse->nLabel==0 );
37 assert( pParse->nOpAlloc==0 ); 37 assert( pParse->nOpAlloc==0 );
38 assert( pParse->szOpAlloc==0 );
38 return p; 39 return p;
39 } 40 }
40 41
41 /* 42 /*
43 ** Change the error string stored in Vdbe.zErrMsg
44 */
45 void sqlite3VdbeError(Vdbe *p, const char *zFormat, ...){
46 va_list ap;
47 sqlite3DbFree(p->db, p->zErrMsg);
48 va_start(ap, zFormat);
49 p->zErrMsg = sqlite3VMPrintf(p->db, zFormat, ap);
50 va_end(ap);
51 }
52
53 /*
42 ** Remember the SQL string for a prepared statement. 54 ** Remember the SQL string for a prepared statement.
43 */ 55 */
44 void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){ 56 void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
45 assert( isPrepareV2==1 || isPrepareV2==0 ); 57 assert( isPrepareV2==1 || isPrepareV2==0 );
46 if( p==0 ) return; 58 if( p==0 ) return;
47 #if defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_ENABLE_SQLLOG) 59 #if defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_ENABLE_SQLLOG)
48 if( !isPrepareV2 ) return; 60 if( !isPrepareV2 ) return;
49 #endif 61 #endif
50 assert( p->zSql==0 ); 62 assert( p->zSql==0 );
51 p->zSql = sqlite3DbStrNDup(p->db, z, n); 63 p->zSql = sqlite3DbStrNDup(p->db, z, n);
52 p->isPrepareV2 = (u8)isPrepareV2; 64 p->isPrepareV2 = (u8)isPrepareV2;
53 } 65 }
54 66
55 /* 67 /*
56 ** Return the SQL associated with a prepared statement 68 ** Return the SQL associated with a prepared statement
57 */ 69 */
58 const char *sqlite3_sql(sqlite3_stmt *pStmt){ 70 const char *sqlite3_sql(sqlite3_stmt *pStmt){
59 Vdbe *p = (Vdbe *)pStmt; 71 Vdbe *p = (Vdbe *)pStmt;
60 return (p && p->isPrepareV2) ? p->zSql : 0; 72 return p ? p->zSql : 0;
61 } 73 }
62 74
63 /* 75 /*
64 ** Swap all content between two VDBE structures. 76 ** Swap all content between two VDBE structures.
65 */ 77 */
66 void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ 78 void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
67 Vdbe tmp, *pTmp; 79 Vdbe tmp, *pTmp;
68 char *zTmp; 80 char *zTmp;
69 tmp = *pA; 81 tmp = *pA;
70 *pA = *pB; 82 *pA = *pB;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 int nNew = (p->nOpAlloc>=512 ? p->nOpAlloc*2 : p->nOpAlloc+nOp); 118 int nNew = (p->nOpAlloc>=512 ? p->nOpAlloc*2 : p->nOpAlloc+nOp);
107 #else 119 #else
108 int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op))); 120 int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
109 UNUSED_PARAMETER(nOp); 121 UNUSED_PARAMETER(nOp);
110 #endif 122 #endif
111 123
112 assert( nOp<=(1024/sizeof(Op)) ); 124 assert( nOp<=(1024/sizeof(Op)) );
113 assert( nNew>=(p->nOpAlloc+nOp) ); 125 assert( nNew>=(p->nOpAlloc+nOp) );
114 pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op)); 126 pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op));
115 if( pNew ){ 127 if( pNew ){
116 p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op); 128 p->szOpAlloc = sqlite3DbMallocSize(p->db, pNew);
129 p->nOpAlloc = p->szOpAlloc/sizeof(Op);
117 v->aOp = pNew; 130 v->aOp = pNew;
118 } 131 }
119 return (pNew ? SQLITE_OK : SQLITE_NOMEM); 132 return (pNew ? SQLITE_OK : SQLITE_NOMEM);
120 } 133 }
121 134
122 #ifdef SQLITE_DEBUG 135 #ifdef SQLITE_DEBUG
123 /* This routine is just a convenient place to set a breakpoint that will 136 /* This routine is just a convenient place to set a breakpoint that will
124 ** fire after each opcode is inserted and displayed using 137 ** fire after each opcode is inserted and displayed using
125 ** "PRAGMA vdbe_addoptrace=on". 138 ** "PRAGMA vdbe_addoptrace=on".
126 */ 139 */
(...skipping 12 matching lines...) Expand all
139 ** p Pointer to the VDBE 152 ** p Pointer to the VDBE
140 ** 153 **
141 ** op The opcode for this instruction 154 ** op The opcode for this instruction
142 ** 155 **
143 ** p1, p2, p3 Operands 156 ** p1, p2, p3 Operands
144 ** 157 **
145 ** Use the sqlite3VdbeResolveLabel() function to fix an address and 158 ** Use the sqlite3VdbeResolveLabel() function to fix an address and
146 ** the sqlite3VdbeChangeP4() function to change the value of the P4 159 ** the sqlite3VdbeChangeP4() function to change the value of the P4
147 ** operand. 160 ** operand.
148 */ 161 */
162 static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){
163 assert( p->pParse->nOpAlloc<=p->nOp );
164 if( growOpArray(p, 1) ) return 1;
165 assert( p->pParse->nOpAlloc>p->nOp );
166 return sqlite3VdbeAddOp3(p, op, p1, p2, p3);
167 }
149 int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ 168 int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
150 int i; 169 int i;
151 VdbeOp *pOp; 170 VdbeOp *pOp;
152 171
153 i = p->nOp; 172 i = p->nOp;
154 assert( p->magic==VDBE_MAGIC_INIT ); 173 assert( p->magic==VDBE_MAGIC_INIT );
155 assert( op>0 && op<0xff ); 174 assert( op>0 && op<0xff );
156 if( p->pParse->nOpAlloc<=i ){ 175 if( p->pParse->nOpAlloc<=i ){
157 if( growOpArray(p, 1) ){ 176 return growOp3(p, op, p1, p2, p3);
158 return 1;
159 }
160 } 177 }
161 p->nOp++; 178 p->nOp++;
162 pOp = &p->aOp[i]; 179 pOp = &p->aOp[i];
163 pOp->opcode = (u8)op; 180 pOp->opcode = (u8)op;
164 pOp->p5 = 0; 181 pOp->p5 = 0;
165 pOp->p1 = p1; 182 pOp->p1 = p1;
166 pOp->p2 = p2; 183 pOp->p2 = p2;
167 pOp->p3 = p3; 184 pOp->p3 = p3;
168 pOp->p4.p = 0; 185 pOp->p4.p = 0;
169 pOp->p4type = P4_NOTUSED; 186 pOp->p4type = P4_NOTUSED;
(...skipping 27 matching lines...) Expand all
197 int sqlite3VdbeAddOp0(Vdbe *p, int op){ 214 int sqlite3VdbeAddOp0(Vdbe *p, int op){
198 return sqlite3VdbeAddOp3(p, op, 0, 0, 0); 215 return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
199 } 216 }
200 int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ 217 int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
201 return sqlite3VdbeAddOp3(p, op, p1, 0, 0); 218 return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
202 } 219 }
203 int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ 220 int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
204 return sqlite3VdbeAddOp3(p, op, p1, p2, 0); 221 return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
205 } 222 }
206 223
224 /* Generate code for an unconditional jump to instruction iDest
225 */
226 int sqlite3VdbeGoto(Vdbe *p, int iDest){
227 return sqlite3VdbeAddOp3(p, OP_Goto, 0, iDest, 0);
228 }
229
230 /* Generate code to cause the string zStr to be loaded into
231 ** register iDest
232 */
233 int sqlite3VdbeLoadString(Vdbe *p, int iDest, const char *zStr){
234 return sqlite3VdbeAddOp4(p, OP_String8, 0, iDest, 0, zStr, 0);
235 }
236
237 /*
238 ** Generate code that initializes multiple registers to string or integer
239 ** constants. The registers begin with iDest and increase consecutively.
240 ** One register is initialized for each characgter in zTypes[]. For each
241 ** "s" character in zTypes[], the register is a string if the argument is
242 ** not NULL, or OP_Null if the value is a null pointer. For each "i" character
243 ** in zTypes[], the register is initialized to an integer.
244 */
245 void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, ...){
246 va_list ap;
247 int i;
248 char c;
249 va_start(ap, zTypes);
250 for(i=0; (c = zTypes[i])!=0; i++){
251 if( c=='s' ){
252 const char *z = va_arg(ap, const char*);
253 int addr = sqlite3VdbeAddOp2(p, z==0 ? OP_Null : OP_String8, 0, iDest++);
254 if( z ) sqlite3VdbeChangeP4(p, addr, z, 0);
255 }else{
256 assert( c=='i' );
257 sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest++);
258 }
259 }
260 va_end(ap);
261 }
207 262
208 /* 263 /*
209 ** Add an opcode that includes the p4 value as a pointer. 264 ** Add an opcode that includes the p4 value as a pointer.
210 */ 265 */
211 int sqlite3VdbeAddOp4( 266 int sqlite3VdbeAddOp4(
212 Vdbe *p, /* Add the opcode to this VM */ 267 Vdbe *p, /* Add the opcode to this VM */
213 int op, /* The new opcode */ 268 int op, /* The new opcode */
214 int p1, /* The P1 operand */ 269 int p1, /* The P1 operand */
215 int p2, /* The P2 operand */ 270 int p2, /* The P2 operand */
216 int p3, /* The P3 operand */ 271 int p3, /* The P3 operand */
217 const char *zP4, /* The P4 operand */ 272 const char *zP4, /* The P4 operand */
218 int p4type /* P4 operand type */ 273 int p4type /* P4 operand type */
219 ){ 274 ){
220 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); 275 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
221 sqlite3VdbeChangeP4(p, addr, zP4, p4type); 276 sqlite3VdbeChangeP4(p, addr, zP4, p4type);
222 return addr; 277 return addr;
223 } 278 }
224 279
225 /* 280 /*
281 ** Add an opcode that includes the p4 value with a P4_INT64 or
282 ** P4_REAL type.
283 */
284 int sqlite3VdbeAddOp4Dup8(
285 Vdbe *p, /* Add the opcode to this VM */
286 int op, /* The new opcode */
287 int p1, /* The P1 operand */
288 int p2, /* The P2 operand */
289 int p3, /* The P3 operand */
290 const u8 *zP4, /* The P4 operand */
291 int p4type /* P4 operand type */
292 ){
293 char *p4copy = sqlite3DbMallocRaw(sqlite3VdbeDb(p), 8);
294 if( p4copy ) memcpy(p4copy, zP4, 8);
295 return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type);
296 }
297
298 /*
226 ** Add an OP_ParseSchema opcode. This routine is broken out from 299 ** Add an OP_ParseSchema opcode. This routine is broken out from
227 ** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees 300 ** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees
228 ** as having been used. 301 ** as having been used.
229 ** 302 **
230 ** The zWhere string must have been obtained from sqlite3_malloc(). 303 ** The zWhere string must have been obtained from sqlite3_malloc().
231 ** This routine will take ownership of the allocated memory. 304 ** This routine will take ownership of the allocated memory.
232 */ 305 */
233 void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){ 306 void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
234 int j; 307 int j;
235 int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0); 308 int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 Parse *p = v->pParse; 344 Parse *p = v->pParse;
272 int i = p->nLabel++; 345 int i = p->nLabel++;
273 assert( v->magic==VDBE_MAGIC_INIT ); 346 assert( v->magic==VDBE_MAGIC_INIT );
274 if( (i & (i-1))==0 ){ 347 if( (i & (i-1))==0 ){
275 p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, 348 p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
276 (i*2+1)*sizeof(p->aLabel[0])); 349 (i*2+1)*sizeof(p->aLabel[0]));
277 } 350 }
278 if( p->aLabel ){ 351 if( p->aLabel ){
279 p->aLabel[i] = -1; 352 p->aLabel[i] = -1;
280 } 353 }
281 return -1-i; 354 return ADDR(i);
282 } 355 }
283 356
284 /* 357 /*
285 ** Resolve label "x" to be the address of the next instruction to 358 ** Resolve label "x" to be the address of the next instruction to
286 ** be inserted. The parameter "x" must have been obtained from 359 ** be inserted. The parameter "x" must have been obtained from
287 ** a prior call to sqlite3VdbeMakeLabel(). 360 ** a prior call to sqlite3VdbeMakeLabel().
288 */ 361 */
289 void sqlite3VdbeResolveLabel(Vdbe *v, int x){ 362 void sqlite3VdbeResolveLabel(Vdbe *v, int x){
290 Parse *p = v->pParse; 363 Parse *p = v->pParse;
291 int j = -1-x; 364 int j = ADDR(x);
292 assert( v->magic==VDBE_MAGIC_INIT ); 365 assert( v->magic==VDBE_MAGIC_INIT );
293 assert( j<p->nLabel ); 366 assert( j<p->nLabel );
294 if( ALWAYS(j>=0) && p->aLabel ){ 367 assert( j>=0 );
368 if( p->aLabel ){
295 p->aLabel[j] = v->nOp; 369 p->aLabel[j] = v->nOp;
296 } 370 }
297 p->iFixedOp = v->nOp - 1; 371 p->iFixedOp = v->nOp - 1;
298 } 372 }
299 373
300 /* 374 /*
301 ** Mark the VDBE as one that can only be run one time. 375 ** Mark the VDBE as one that can only be run one time.
302 */ 376 */
303 void sqlite3VdbeRunOnlyOnce(Vdbe *p){ 377 void sqlite3VdbeRunOnlyOnce(Vdbe *p){
304 p->runOnlyOnce = 1; 378 p->runOnlyOnce = 1;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 ** throw an ABORT exception (causing the statement, but not entire transaction 453 ** throw an ABORT exception (causing the statement, but not entire transaction
380 ** to be rolled back). This condition is true if the main program or any 454 ** to be rolled back). This condition is true if the main program or any
381 ** sub-programs contains any of the following: 455 ** sub-programs contains any of the following:
382 ** 456 **
383 ** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort. 457 ** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
384 ** * OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort. 458 ** * OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
385 ** * OP_Destroy 459 ** * OP_Destroy
386 ** * OP_VUpdate 460 ** * OP_VUpdate
387 ** * OP_VRename 461 ** * OP_VRename
388 ** * OP_FkCounter with P2==0 (immediate foreign key constraint) 462 ** * OP_FkCounter with P2==0 (immediate foreign key constraint)
463 ** * OP_CreateTable and OP_InitCoroutine (for CREATE TABLE AS SELECT ...)
389 ** 464 **
390 ** Then check that the value of Parse.mayAbort is true if an 465 ** Then check that the value of Parse.mayAbort is true if an
391 ** ABORT may be thrown, or false otherwise. Return true if it does 466 ** ABORT may be thrown, or false otherwise. Return true if it does
392 ** match, or false otherwise. This function is intended to be used as 467 ** match, or false otherwise. This function is intended to be used as
393 ** part of an assert statement in the compiler. Similar to: 468 ** part of an assert statement in the compiler. Similar to:
394 ** 469 **
395 ** assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) ); 470 ** assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
396 */ 471 */
397 int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ 472 int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
398 int hasAbort = 0; 473 int hasAbort = 0;
474 int hasFkCounter = 0;
475 int hasCreateTable = 0;
476 int hasInitCoroutine = 0;
399 Op *pOp; 477 Op *pOp;
400 VdbeOpIter sIter; 478 VdbeOpIter sIter;
401 memset(&sIter, 0, sizeof(sIter)); 479 memset(&sIter, 0, sizeof(sIter));
402 sIter.v = v; 480 sIter.v = v;
403 481
404 while( (pOp = opIterNext(&sIter))!=0 ){ 482 while( (pOp = opIterNext(&sIter))!=0 ){
405 int opcode = pOp->opcode; 483 int opcode = pOp->opcode;
406 if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename 484 if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
407 #ifndef SQLITE_OMIT_FOREIGN_KEY
408 || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1)
409 #endif
410 || ((opcode==OP_Halt || opcode==OP_HaltIfNull) 485 || ((opcode==OP_Halt || opcode==OP_HaltIfNull)
411 && ((pOp->p1&0xff)==SQLITE_CONSTRAINT && pOp->p2==OE_Abort)) 486 && ((pOp->p1&0xff)==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
412 ){ 487 ){
413 hasAbort = 1; 488 hasAbort = 1;
414 break; 489 break;
415 } 490 }
491 if( opcode==OP_CreateTable ) hasCreateTable = 1;
492 if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1;
493 #ifndef SQLITE_OMIT_FOREIGN_KEY
494 if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){
495 hasFkCounter = 1;
496 }
497 #endif
416 } 498 }
417 sqlite3DbFree(v->db, sIter.apSub); 499 sqlite3DbFree(v->db, sIter.apSub);
418 500
419 /* Return true if hasAbort==mayAbort. Or if a malloc failure occurred. 501 /* Return true if hasAbort==mayAbort. Or if a malloc failure occurred.
420 ** If malloc failed, then the while() loop above may not have iterated 502 ** If malloc failed, then the while() loop above may not have iterated
421 ** through all opcodes and hasAbort may be set incorrectly. Return 503 ** through all opcodes and hasAbort may be set incorrectly. Return
422 ** true for this case to prevent the assert() in the callers frame 504 ** true for this case to prevent the assert() in the callers frame
423 ** from failing. */ 505 ** from failing. */
424 return ( v->db->mallocFailed || hasAbort==mayAbort ); 506 return ( v->db->mallocFailed || hasAbort==mayAbort || hasFkCounter
507 || (hasCreateTable && hasInitCoroutine) );
425 } 508 }
426 #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */ 509 #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
427 510
428 /* 511 /*
429 ** Loop through the program looking for P2 values that are negative 512 ** This routine is called after all opcodes have been inserted. It loops
430 ** on jump instructions. Each such value is a label. Resolve the 513 ** through all the opcodes and fixes up some details.
431 ** label by setting the P2 value to its correct non-zero value.
432 ** 514 **
433 ** This routine is called once after all opcodes have been inserted. 515 ** (1) For each jump instruction with a negative P2 value (a label)
516 ** resolve the P2 value to an actual address.
434 ** 517 **
435 ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument 518 ** (2) Compute the maximum number of arguments used by any SQL function
436 ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by 519 ** and store that value in *pMaxFuncArgs.
437 ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
438 ** 520 **
439 ** The Op.opflags field is set on all opcodes. 521 ** (3) Update the Vdbe.readOnly and Vdbe.bIsReader flags to accurately
522 ** indicate what the prepared statement actually does.
523 **
524 ** (4) Initialize the p4.xAdvance pointer on opcodes that use it.
525 **
526 ** (5) Reclaim the memory allocated for storing labels.
440 */ 527 */
441 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ 528 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
442 int i; 529 int i;
443 int nMaxArgs = *pMaxFuncArgs; 530 int nMaxArgs = *pMaxFuncArgs;
444 Op *pOp; 531 Op *pOp;
445 Parse *pParse = p->pParse; 532 Parse *pParse = p->pParse;
446 int *aLabel = pParse->aLabel; 533 int *aLabel = pParse->aLabel;
447 p->readOnly = 1; 534 p->readOnly = 1;
448 p->bIsReader = 0; 535 p->bIsReader = 0;
449 for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){ 536 for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
450 u8 opcode = pOp->opcode; 537 u8 opcode = pOp->opcode;
451 538
452 /* NOTE: Be sure to update mkopcodeh.awk when adding or removing 539 /* NOTE: Be sure to update mkopcodeh.awk when adding or removing
453 ** cases from this switch! */ 540 ** cases from this switch! */
454 switch( opcode ){ 541 switch( opcode ){
455 case OP_Function:
456 case OP_AggStep: {
457 if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5;
458 break;
459 }
460 case OP_Transaction: { 542 case OP_Transaction: {
461 if( pOp->p2!=0 ) p->readOnly = 0; 543 if( pOp->p2!=0 ) p->readOnly = 0;
462 /* fall thru */ 544 /* fall thru */
463 } 545 }
464 case OP_AutoCommit: 546 case OP_AutoCommit:
465 case OP_Savepoint: { 547 case OP_Savepoint: {
466 p->bIsReader = 1; 548 p->bIsReader = 1;
467 break; 549 break;
468 } 550 }
469 #ifndef SQLITE_OMIT_WAL 551 #ifndef SQLITE_OMIT_WAL
(...skipping 29 matching lines...) Expand all
499 case OP_Prev: 581 case OP_Prev:
500 case OP_PrevIfOpen: { 582 case OP_PrevIfOpen: {
501 pOp->p4.xAdvance = sqlite3BtreePrevious; 583 pOp->p4.xAdvance = sqlite3BtreePrevious;
502 pOp->p4type = P4_ADVANCE; 584 pOp->p4type = P4_ADVANCE;
503 break; 585 break;
504 } 586 }
505 } 587 }
506 588
507 pOp->opflags = sqlite3OpcodeProperty[opcode]; 589 pOp->opflags = sqlite3OpcodeProperty[opcode];
508 if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){ 590 if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
509 assert( -1-pOp->p2<pParse->nLabel ); 591 assert( ADDR(pOp->p2)<pParse->nLabel );
510 pOp->p2 = aLabel[-1-pOp->p2]; 592 pOp->p2 = aLabel[ADDR(pOp->p2)];
511 } 593 }
512 } 594 }
513 sqlite3DbFree(p->db, pParse->aLabel); 595 sqlite3DbFree(p->db, pParse->aLabel);
514 pParse->aLabel = 0; 596 pParse->aLabel = 0;
515 pParse->nLabel = 0; 597 pParse->nLabel = 0;
516 *pMaxFuncArgs = nMaxArgs; 598 *pMaxFuncArgs = nMaxArgs;
517 assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); 599 assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
518 } 600 }
519 601
520 /* 602 /*
(...skipping 26 matching lines...) Expand all
547 *pnOp = p->nOp; 629 *pnOp = p->nOp;
548 p->aOp = 0; 630 p->aOp = 0;
549 return aOp; 631 return aOp;
550 } 632 }
551 633
552 /* 634 /*
553 ** Add a whole list of operations to the operation stack. Return the 635 ** Add a whole list of operations to the operation stack. Return the
554 ** address of the first operation added. 636 ** address of the first operation added.
555 */ 637 */
556 int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp, int iLineno){ 638 int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp, int iLineno){
557 int addr; 639 int addr, i;
640 VdbeOp *pOut;
641 assert( nOp>0 );
558 assert( p->magic==VDBE_MAGIC_INIT ); 642 assert( p->magic==VDBE_MAGIC_INIT );
559 if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p, nOp) ){ 643 if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p, nOp) ){
560 return 0; 644 return 0;
561 } 645 }
562 addr = p->nOp; 646 addr = p->nOp;
563 if( ALWAYS(nOp>0) ){ 647 pOut = &p->aOp[addr];
564 int i; 648 for(i=0; i<nOp; i++, aOp++, pOut++){
565 VdbeOpList const *pIn = aOp; 649 pOut->opcode = aOp->opcode;
566 for(i=0; i<nOp; i++, pIn++){ 650 pOut->p1 = aOp->p1;
567 int p2 = pIn->p2; 651 pOut->p2 = aOp->p2;
568 VdbeOp *pOut = &p->aOp[i+addr]; 652 assert( aOp->p2>=0 );
569 pOut->opcode = pIn->opcode; 653 pOut->p3 = aOp->p3;
570 pOut->p1 = pIn->p1; 654 pOut->p4type = P4_NOTUSED;
571 if( p2<0 ){ 655 pOut->p4.p = 0;
572 assert( sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP ); 656 pOut->p5 = 0;
573 pOut->p2 = addr + ADDR(p2);
574 }else{
575 pOut->p2 = p2;
576 }
577 pOut->p3 = pIn->p3;
578 pOut->p4type = P4_NOTUSED;
579 pOut->p4.p = 0;
580 pOut->p5 = 0;
581 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS 657 #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
582 pOut->zComment = 0; 658 pOut->zComment = 0;
583 #endif 659 #endif
584 #ifdef SQLITE_VDBE_COVERAGE 660 #ifdef SQLITE_VDBE_COVERAGE
585 pOut->iSrcLine = iLineno+i; 661 pOut->iSrcLine = iLineno+i;
586 #else 662 #else
587 (void)iLineno; 663 (void)iLineno;
588 #endif 664 #endif
589 #ifdef SQLITE_DEBUG 665 #ifdef SQLITE_DEBUG
590 if( p->db->flags & SQLITE_VdbeAddopTrace ){ 666 if( p->db->flags & SQLITE_VdbeAddopTrace ){
591 sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]); 667 sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
592 } 668 }
593 #endif 669 #endif
594 }
595 p->nOp += nOp;
596 } 670 }
671 p->nOp += nOp;
597 return addr; 672 return addr;
598 } 673 }
599 674
675 #if defined(SQLITE_ENABLE_STMT_SCANSTATUS)
600 /* 676 /*
601 ** Change the value of the P1 operand for a specific instruction. 677 ** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus().
602 ** This routine is useful when a large program is loaded from a
603 ** static array using sqlite3VdbeAddOpList but we want to make a
604 ** few minor changes to the program.
605 */ 678 */
679 void sqlite3VdbeScanStatus(
680 Vdbe *p, /* VM to add scanstatus() to */
681 int addrExplain, /* Address of OP_Explain (or 0) */
682 int addrLoop, /* Address of loop counter */
683 int addrVisit, /* Address of rows visited counter */
684 LogEst nEst, /* Estimated number of output rows */
685 const char *zName /* Name of table or index being scanned */
686 ){
687 int nByte = (p->nScan+1) * sizeof(ScanStatus);
688 ScanStatus *aNew;
689 aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
690 if( aNew ){
691 ScanStatus *pNew = &aNew[p->nScan++];
692 pNew->addrExplain = addrExplain;
693 pNew->addrLoop = addrLoop;
694 pNew->addrVisit = addrVisit;
695 pNew->nEst = nEst;
696 pNew->zName = sqlite3DbStrDup(p->db, zName);
697 p->aScan = aNew;
698 }
699 }
700 #endif
701
702
703 /*
704 ** Change the value of the opcode, or P1, P2, P3, or P5 operands
705 ** for a specific instruction.
706 */
707 void sqlite3VdbeChangeOpcode(Vdbe *p, u32 addr, u8 iNewOpcode){
708 sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode;
709 }
606 void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){ 710 void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
607 assert( p!=0 ); 711 sqlite3VdbeGetOp(p,addr)->p1 = val;
608 if( ((u32)p->nOp)>addr ){ 712 }
609 p->aOp[addr].p1 = val; 713 void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
610 } 714 sqlite3VdbeGetOp(p,addr)->p2 = val;
715 }
716 void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
717 sqlite3VdbeGetOp(p,addr)->p3 = val;
718 }
719 void sqlite3VdbeChangeP5(Vdbe *p, u8 p5){
720 sqlite3VdbeGetOp(p,-1)->p5 = p5;
611 } 721 }
612 722
613 /* 723 /*
614 ** Change the value of the P2 operand for a specific instruction.
615 ** This routine is useful for setting a jump destination.
616 */
617 void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
618 assert( p!=0 );
619 if( ((u32)p->nOp)>addr ){
620 p->aOp[addr].p2 = val;
621 }
622 }
623
624 /*
625 ** Change the value of the P3 operand for a specific instruction.
626 */
627 void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
628 assert( p!=0 );
629 if( ((u32)p->nOp)>addr ){
630 p->aOp[addr].p3 = val;
631 }
632 }
633
634 /*
635 ** Change the value of the P5 operand for the most recently
636 ** added operation.
637 */
638 void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
639 assert( p!=0 );
640 if( p->aOp ){
641 assert( p->nOp>0 );
642 p->aOp[p->nOp-1].p5 = val;
643 }
644 }
645
646 /*
647 ** Change the P2 operand of instruction addr so that it points to 724 ** Change the P2 operand of instruction addr so that it points to
648 ** the address of the next instruction to be coded. 725 ** the address of the next instruction to be coded.
649 */ 726 */
650 void sqlite3VdbeJumpHere(Vdbe *p, int addr){ 727 void sqlite3VdbeJumpHere(Vdbe *p, int addr){
728 p->pParse->iFixedOp = p->nOp - 1;
651 sqlite3VdbeChangeP2(p, addr, p->nOp); 729 sqlite3VdbeChangeP2(p, addr, p->nOp);
652 p->pParse->iFixedOp = p->nOp - 1;
653 } 730 }
654 731
655 732
656 /* 733 /*
657 ** If the input FuncDef structure is ephemeral, then free it. If 734 ** If the input FuncDef structure is ephemeral, then free it. If
658 ** the FuncDef is not ephermal, then do nothing. 735 ** the FuncDef is not ephermal, then do nothing.
659 */ 736 */
660 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ 737 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
661 if( ALWAYS(pDef) && (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ 738 if( ALWAYS(pDef) && (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){
662 sqlite3DbFree(db, pDef); 739 sqlite3DbFree(db, pDef);
663 } 740 }
664 } 741 }
665 742
666 static void vdbeFreeOpArray(sqlite3 *, Op *, int); 743 static void vdbeFreeOpArray(sqlite3 *, Op *, int);
667 744
668 /* 745 /*
669 ** Delete a P4 value if necessary. 746 ** Delete a P4 value if necessary.
670 */ 747 */
671 static void freeP4(sqlite3 *db, int p4type, void *p4){ 748 static void freeP4(sqlite3 *db, int p4type, void *p4){
672 if( p4 ){ 749 if( p4 ){
673 assert( db ); 750 assert( db );
674 switch( p4type ){ 751 switch( p4type ){
752 case P4_FUNCCTX: {
753 freeEphemeralFunction(db, ((sqlite3_context*)p4)->pFunc);
754 /* Fall through into the next case */
755 }
675 case P4_REAL: 756 case P4_REAL:
676 case P4_INT64: 757 case P4_INT64:
677 case P4_DYNAMIC: 758 case P4_DYNAMIC:
678 case P4_INTARRAY: { 759 case P4_INTARRAY: {
679 sqlite3DbFree(db, p4); 760 sqlite3DbFree(db, p4);
680 break; 761 break;
681 } 762 }
682 case P4_KEYINFO: { 763 case P4_KEYINFO: {
683 if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); 764 if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4);
684 break; 765 break;
685 } 766 }
767 #ifdef SQLITE_ENABLE_CURSOR_HINTS
768 case P4_EXPR: {
769 sqlite3ExprDelete(db, (Expr*)p4);
770 break;
771 }
772 #endif
686 case P4_MPRINTF: { 773 case P4_MPRINTF: {
687 if( db->pnBytesFreed==0 ) sqlite3_free(p4); 774 if( db->pnBytesFreed==0 ) sqlite3_free(p4);
688 break; 775 break;
689 } 776 }
690 case P4_FUNCDEF: { 777 case P4_FUNCDEF: {
691 freeEphemeralFunction(db, (FuncDef*)p4); 778 freeEphemeralFunction(db, (FuncDef*)p4);
692 break; 779 break;
693 } 780 }
694 case P4_MEM: { 781 case P4_MEM: {
695 if( db->pnBytesFreed==0 ){ 782 if( db->pnBytesFreed==0 ){
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 /* 827 /*
741 ** Change the opcode at addr into OP_Noop 828 ** Change the opcode at addr into OP_Noop
742 */ 829 */
743 void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ 830 void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
744 if( addr<p->nOp ){ 831 if( addr<p->nOp ){
745 VdbeOp *pOp = &p->aOp[addr]; 832 VdbeOp *pOp = &p->aOp[addr];
746 sqlite3 *db = p->db; 833 sqlite3 *db = p->db;
747 freeP4(db, pOp->p4type, pOp->p4.p); 834 freeP4(db, pOp->p4type, pOp->p4.p);
748 memset(pOp, 0, sizeof(pOp[0])); 835 memset(pOp, 0, sizeof(pOp[0]));
749 pOp->opcode = OP_Noop; 836 pOp->opcode = OP_Noop;
750 if( addr==p->nOp-1 ) p->nOp--;
751 } 837 }
752 } 838 }
753 839
754 /* 840 /*
755 ** If the last opcode is "op" and it is not a jump destination, 841 ** If the last opcode is "op" and it is not a jump destination,
756 ** then remove it. Return true if and only if an opcode was removed. 842 ** then remove it. Return true if and only if an opcode was removed.
757 */ 843 */
758 int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){ 844 int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){
759 if( (p->nOp-1)>(p->pParse->iFixedOp) && p->aOp[p->nOp-1].opcode==op ){ 845 if( (p->nOp-1)>(p->pParse->iFixedOp) && p->aOp[p->nOp-1].opcode==op ){
760 sqlite3VdbeChangeToNoop(p, p->nOp-1); 846 sqlite3VdbeChangeToNoop(p, p->nOp-1);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 /* Note: this cast is safe, because the origin data point was an int 894 /* Note: this cast is safe, because the origin data point was an int
809 ** that was cast to a (const char *). */ 895 ** that was cast to a (const char *). */
810 pOp->p4.i = SQLITE_PTR_TO_INT(zP4); 896 pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
811 pOp->p4type = P4_INT32; 897 pOp->p4type = P4_INT32;
812 }else if( zP4==0 ){ 898 }else if( zP4==0 ){
813 pOp->p4.p = 0; 899 pOp->p4.p = 0;
814 pOp->p4type = P4_NOTUSED; 900 pOp->p4type = P4_NOTUSED;
815 }else if( n==P4_KEYINFO ){ 901 }else if( n==P4_KEYINFO ){
816 pOp->p4.p = (void*)zP4; 902 pOp->p4.p = (void*)zP4;
817 pOp->p4type = P4_KEYINFO; 903 pOp->p4type = P4_KEYINFO;
904 #ifdef SQLITE_ENABLE_CURSOR_HINTS
905 }else if( n==P4_EXPR ){
906 /* Responsibility for deleting the Expr tree is handed over to the
907 ** VDBE by this operation. The caller should have already invoked
908 ** sqlite3ExprDup() or whatever other routine is needed to make a
909 ** private copy of the tree. */
910 pOp->p4.pExpr = (Expr*)zP4;
911 pOp->p4type = P4_EXPR;
912 #endif
818 }else if( n==P4_VTAB ){ 913 }else if( n==P4_VTAB ){
819 pOp->p4.p = (void*)zP4; 914 pOp->p4.p = (void*)zP4;
820 pOp->p4type = P4_VTAB; 915 pOp->p4type = P4_VTAB;
821 sqlite3VtabLock((VTable *)zP4); 916 sqlite3VtabLock((VTable *)zP4);
822 assert( ((VTable *)zP4)->db==p->db ); 917 assert( ((VTable *)zP4)->db==p->db );
823 }else if( n<0 ){ 918 }else if( n<0 ){
824 pOp->p4.p = (void*)zP4; 919 pOp->p4.p = (void*)zP4;
825 pOp->p4type = (signed char)n; 920 pOp->p4type = (signed char)n;
826 }else{ 921 }else{
827 if( n==0 ) n = sqlite3Strlen30(zP4); 922 if( n==0 ) n = sqlite3Strlen30(zP4);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 sqlite3_snprintf(nTemp, zTemp, "%s", pOp->zComment); 1093 sqlite3_snprintf(nTemp, zTemp, "%s", pOp->zComment);
999 jj = sqlite3Strlen30(zTemp); 1094 jj = sqlite3Strlen30(zTemp);
1000 }else{ 1095 }else{
1001 zTemp[0] = 0; 1096 zTemp[0] = 0;
1002 jj = 0; 1097 jj = 0;
1003 } 1098 }
1004 return jj; 1099 return jj;
1005 } 1100 }
1006 #endif /* SQLITE_DEBUG */ 1101 #endif /* SQLITE_DEBUG */
1007 1102
1103 #if VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS)
1104 /*
1105 ** Translate the P4.pExpr value for an OP_CursorHint opcode into text
1106 ** that can be displayed in the P4 column of EXPLAIN output.
1107 */
1108 static int displayP4Expr(int nTemp, char *zTemp, Expr *pExpr){
1109 const char *zOp = 0;
1110 int n;
1111 switch( pExpr->op ){
1112 case TK_STRING:
1113 sqlite3_snprintf(nTemp, zTemp, "%Q", pExpr->u.zToken);
1114 break;
1115 case TK_INTEGER:
1116 sqlite3_snprintf(nTemp, zTemp, "%d", pExpr->u.iValue);
1117 break;
1118 case TK_NULL:
1119 sqlite3_snprintf(nTemp, zTemp, "NULL");
1120 break;
1121 case TK_REGISTER: {
1122 sqlite3_snprintf(nTemp, zTemp, "r[%d]", pExpr->iTable);
1123 break;
1124 }
1125 case TK_COLUMN: {
1126 if( pExpr->iColumn<0 ){
1127 sqlite3_snprintf(nTemp, zTemp, "rowid");
1128 }else{
1129 sqlite3_snprintf(nTemp, zTemp, "c%d", (int)pExpr->iColumn);
1130 }
1131 break;
1132 }
1133 case TK_LT: zOp = "LT"; break;
1134 case TK_LE: zOp = "LE"; break;
1135 case TK_GT: zOp = "GT"; break;
1136 case TK_GE: zOp = "GE"; break;
1137 case TK_NE: zOp = "NE"; break;
1138 case TK_EQ: zOp = "EQ"; break;
1139 case TK_IS: zOp = "IS"; break;
1140 case TK_ISNOT: zOp = "ISNOT"; break;
1141 case TK_AND: zOp = "AND"; break;
1142 case TK_OR: zOp = "OR"; break;
1143 case TK_PLUS: zOp = "ADD"; break;
1144 case TK_STAR: zOp = "MUL"; break;
1145 case TK_MINUS: zOp = "SUB"; break;
1146 case TK_REM: zOp = "REM"; break;
1147 case TK_BITAND: zOp = "BITAND"; break;
1148 case TK_BITOR: zOp = "BITOR"; break;
1149 case TK_SLASH: zOp = "DIV"; break;
1150 case TK_LSHIFT: zOp = "LSHIFT"; break;
1151 case TK_RSHIFT: zOp = "RSHIFT"; break;
1152 case TK_CONCAT: zOp = "CONCAT"; break;
1153 case TK_UMINUS: zOp = "MINUS"; break;
1154 case TK_UPLUS: zOp = "PLUS"; break;
1155 case TK_BITNOT: zOp = "BITNOT"; break;
1156 case TK_NOT: zOp = "NOT"; break;
1157 case TK_ISNULL: zOp = "ISNULL"; break;
1158 case TK_NOTNULL: zOp = "NOTNULL"; break;
1008 1159
1009 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \ 1160 default:
1010 || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) 1161 sqlite3_snprintf(nTemp, zTemp, "%s", "expr");
1162 break;
1163 }
1164
1165 if( zOp ){
1166 sqlite3_snprintf(nTemp, zTemp, "%s(", zOp);
1167 n = sqlite3Strlen30(zTemp);
1168 n += displayP4Expr(nTemp-n, zTemp+n, pExpr->pLeft);
1169 if( n<nTemp-1 && pExpr->pRight ){
1170 zTemp[n++] = ',';
1171 n += displayP4Expr(nTemp-n, zTemp+n, pExpr->pRight);
1172 }
1173 sqlite3_snprintf(nTemp-n, zTemp+n, ")");
1174 }
1175 return sqlite3Strlen30(zTemp);
1176 }
1177 #endif /* VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS) */
1178
1179
1180 #if VDBE_DISPLAY_P4
1011 /* 1181 /*
1012 ** Compute a string that describes the P4 parameter for an opcode. 1182 ** Compute a string that describes the P4 parameter for an opcode.
1013 ** Use zTemp for any required temporary buffer space. 1183 ** Use zTemp for any required temporary buffer space.
1014 */ 1184 */
1015 static char *displayP4(Op *pOp, char *zTemp, int nTemp){ 1185 static char *displayP4(Op *pOp, char *zTemp, int nTemp){
1016 char *zP4 = zTemp; 1186 char *zP4 = zTemp;
1017 assert( nTemp>=20 ); 1187 assert( nTemp>=20 );
1018 switch( pOp->p4type ){ 1188 switch( pOp->p4type ){
1019 case P4_KEYINFO: { 1189 case P4_KEYINFO: {
1020 int i, j; 1190 int i, j;
1021 KeyInfo *pKeyInfo = pOp->p4.pKeyInfo; 1191 KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
1022 assert( pKeyInfo->aSortOrder!=0 ); 1192 assert( pKeyInfo->aSortOrder!=0 );
1023 sqlite3_snprintf(nTemp, zTemp, "k(%d", pKeyInfo->nField); 1193 sqlite3_snprintf(nTemp, zTemp, "k(%d", pKeyInfo->nField);
1024 i = sqlite3Strlen30(zTemp); 1194 i = sqlite3Strlen30(zTemp);
1025 for(j=0; j<pKeyInfo->nField; j++){ 1195 for(j=0; j<pKeyInfo->nField; j++){
1026 CollSeq *pColl = pKeyInfo->aColl[j]; 1196 CollSeq *pColl = pKeyInfo->aColl[j];
1027 const char *zColl = pColl ? pColl->zName : "nil"; 1197 const char *zColl = pColl ? pColl->zName : "nil";
1028 int n = sqlite3Strlen30(zColl); 1198 int n = sqlite3Strlen30(zColl);
1029 if( n==6 && memcmp(zColl,"BINARY",6)==0 ){ 1199 if( n==6 && memcmp(zColl,"BINARY",6)==0 ){
1030 zColl = "B"; 1200 zColl = "B";
1031 n = 1; 1201 n = 1;
1032 } 1202 }
1033 if( i+n>nTemp-6 ){ 1203 if( i+n>nTemp-7 ){
1034 memcpy(&zTemp[i],",...",4); 1204 memcpy(&zTemp[i],",...",4);
1205 i += 4;
1035 break; 1206 break;
1036 } 1207 }
1037 zTemp[i++] = ','; 1208 zTemp[i++] = ',';
1038 if( pKeyInfo->aSortOrder[j] ){ 1209 if( pKeyInfo->aSortOrder[j] ){
1039 zTemp[i++] = '-'; 1210 zTemp[i++] = '-';
1040 } 1211 }
1041 memcpy(&zTemp[i], zColl, n+1); 1212 memcpy(&zTemp[i], zColl, n+1);
1042 i += n; 1213 i += n;
1043 } 1214 }
1044 zTemp[i++] = ')'; 1215 zTemp[i++] = ')';
1045 zTemp[i] = 0; 1216 zTemp[i] = 0;
1046 assert( i<nTemp ); 1217 assert( i<nTemp );
1047 break; 1218 break;
1048 } 1219 }
1220 #ifdef SQLITE_ENABLE_CURSOR_HINTS
1221 case P4_EXPR: {
1222 displayP4Expr(nTemp, zTemp, pOp->p4.pExpr);
1223 break;
1224 }
1225 #endif
1049 case P4_COLLSEQ: { 1226 case P4_COLLSEQ: {
1050 CollSeq *pColl = pOp->p4.pColl; 1227 CollSeq *pColl = pOp->p4.pColl;
1051 sqlite3_snprintf(nTemp, zTemp, "(%.20s)", pColl->zName); 1228 sqlite3_snprintf(nTemp, zTemp, "(%.20s)", pColl->zName);
1052 break; 1229 break;
1053 } 1230 }
1054 case P4_FUNCDEF: { 1231 case P4_FUNCDEF: {
1055 FuncDef *pDef = pOp->p4.pFunc; 1232 FuncDef *pDef = pOp->p4.pFunc;
1056 sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg); 1233 sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
1057 break; 1234 break;
1058 } 1235 }
1236 #ifdef SQLITE_DEBUG
1237 case P4_FUNCCTX: {
1238 FuncDef *pDef = pOp->p4.pCtx->pFunc;
1239 sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
1240 break;
1241 }
1242 #endif
1059 case P4_INT64: { 1243 case P4_INT64: {
1060 sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64); 1244 sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64);
1061 break; 1245 break;
1062 } 1246 }
1063 case P4_INT32: { 1247 case P4_INT32: {
1064 sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i); 1248 sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i);
1065 break; 1249 break;
1066 } 1250 }
1067 case P4_REAL: { 1251 case P4_REAL: {
1068 sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal); 1252 sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal);
(...skipping 11 matching lines...) Expand all
1080 sqlite3_snprintf(nTemp, zTemp, "NULL"); 1264 sqlite3_snprintf(nTemp, zTemp, "NULL");
1081 }else{ 1265 }else{
1082 assert( pMem->flags & MEM_Blob ); 1266 assert( pMem->flags & MEM_Blob );
1083 zP4 = "(blob)"; 1267 zP4 = "(blob)";
1084 } 1268 }
1085 break; 1269 break;
1086 } 1270 }
1087 #ifndef SQLITE_OMIT_VIRTUALTABLE 1271 #ifndef SQLITE_OMIT_VIRTUALTABLE
1088 case P4_VTAB: { 1272 case P4_VTAB: {
1089 sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab; 1273 sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
1090 sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule); 1274 sqlite3_snprintf(nTemp, zTemp, "vtab:%p", pVtab);
1091 break; 1275 break;
1092 } 1276 }
1093 #endif 1277 #endif
1094 case P4_INTARRAY: { 1278 case P4_INTARRAY: {
1095 sqlite3_snprintf(nTemp, zTemp, "intarray"); 1279 sqlite3_snprintf(nTemp, zTemp, "intarray");
1096 break; 1280 break;
1097 } 1281 }
1098 case P4_SUBPROGRAM: { 1282 case P4_SUBPROGRAM: {
1099 sqlite3_snprintf(nTemp, zTemp, "program"); 1283 sqlite3_snprintf(nTemp, zTemp, "program");
1100 break; 1284 break;
1101 } 1285 }
1102 case P4_ADVANCE: { 1286 case P4_ADVANCE: {
1103 zTemp[0] = 0; 1287 zTemp[0] = 0;
1104 break; 1288 break;
1105 } 1289 }
1106 default: { 1290 default: {
1107 zP4 = pOp->p4.z; 1291 zP4 = pOp->p4.z;
1108 if( zP4==0 ){ 1292 if( zP4==0 ){
1109 zP4 = zTemp; 1293 zP4 = zTemp;
1110 zTemp[0] = 0; 1294 zTemp[0] = 0;
1111 } 1295 }
1112 } 1296 }
1113 } 1297 }
1114 assert( zP4!=0 ); 1298 assert( zP4!=0 );
1115 return zP4; 1299 return zP4;
1116 } 1300 }
1117 #endif 1301 #endif /* VDBE_DISPLAY_P4 */
1118 1302
1119 /* 1303 /*
1120 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used. 1304 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
1121 ** 1305 **
1122 ** The prepared statements need to know in advance the complete set of 1306 ** The prepared statements need to know in advance the complete set of
1123 ** attached databases that will be use. A mask of these databases 1307 ** attached databases that will be use. A mask of these databases
1124 ** is maintained in p->btreeMask. The p->lockMask value is the subset of 1308 ** is maintained in p->btreeMask. The p->lockMask value is the subset of
1125 ** p->btreeMask of databases that will require a lock. 1309 ** p->btreeMask of databases that will require a lock.
1126 */ 1310 */
1127 void sqlite3VdbeUsesBtree(Vdbe *p, int i){ 1311 void sqlite3VdbeUsesBtree(Vdbe *p, int i){
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 sqlite3BtreeEnter(aDb[i].pBt); 1353 sqlite3BtreeEnter(aDb[i].pBt);
1170 } 1354 }
1171 } 1355 }
1172 } 1356 }
1173 #endif 1357 #endif
1174 1358
1175 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0 1359 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
1176 /* 1360 /*
1177 ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter(). 1361 ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
1178 */ 1362 */
1179 void sqlite3VdbeLeave(Vdbe *p){ 1363 static SQLITE_NOINLINE void vdbeLeave(Vdbe *p){
1180 int i; 1364 int i;
1181 sqlite3 *db; 1365 sqlite3 *db;
1182 Db *aDb; 1366 Db *aDb;
1183 int nDb; 1367 int nDb;
1184 if( DbMaskAllZero(p->lockMask) ) return; /* The common case */
1185 db = p->db; 1368 db = p->db;
1186 aDb = db->aDb; 1369 aDb = db->aDb;
1187 nDb = db->nDb; 1370 nDb = db->nDb;
1188 for(i=0; i<nDb; i++){ 1371 for(i=0; i<nDb; i++){
1189 if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){ 1372 if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){
1190 sqlite3BtreeLeave(aDb[i].pBt); 1373 sqlite3BtreeLeave(aDb[i].pBt);
1191 } 1374 }
1192 } 1375 }
1193 } 1376 }
1377 void sqlite3VdbeLeave(Vdbe *p){
1378 if( DbMaskAllZero(p->lockMask) ) return; /* The common case */
1379 vdbeLeave(p);
1380 }
1194 #endif 1381 #endif
1195 1382
1196 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) 1383 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
1197 /* 1384 /*
1198 ** Print a single opcode. This routine is used for debugging only. 1385 ** Print a single opcode. This routine is used for debugging only.
1199 */ 1386 */
1200 void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){ 1387 void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
1201 char *zP4; 1388 char *zP4;
1202 char zPtr[50]; 1389 char zPtr[50];
1203 char zCom[100]; 1390 char zCom[100];
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 1543
1357 do{ 1544 do{
1358 i = p->pc++; 1545 i = p->pc++;
1359 }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain ); 1546 }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
1360 if( i>=nRow ){ 1547 if( i>=nRow ){
1361 p->rc = SQLITE_OK; 1548 p->rc = SQLITE_OK;
1362 rc = SQLITE_DONE; 1549 rc = SQLITE_DONE;
1363 }else if( db->u1.isInterrupted ){ 1550 }else if( db->u1.isInterrupted ){
1364 p->rc = SQLITE_INTERRUPT; 1551 p->rc = SQLITE_INTERRUPT;
1365 rc = SQLITE_ERROR; 1552 rc = SQLITE_ERROR;
1366 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc)); 1553 sqlite3VdbeError(p, sqlite3ErrStr(p->rc));
1367 }else{ 1554 }else{
1368 char *zP4; 1555 char *zP4;
1369 Op *pOp; 1556 Op *pOp;
1370 if( i<p->nOp ){ 1557 if( i<p->nOp ){
1371 /* The output line number is small enough that we are still in the 1558 /* The output line number is small enough that we are still in the
1372 ** main program. */ 1559 ** main program. */
1373 pOp = &p->aOp[i]; 1560 pOp = &p->aOp[i];
1374 }else{ 1561 }else{
1375 /* We are currently listing subprograms. Figure out which one and 1562 /* We are currently listing subprograms. Figure out which one and
1376 ** pick up the appropriate opcode. */ 1563 ** pick up the appropriate opcode. */
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 pMem++; 1605 pMem++;
1419 1606
1420 pMem->flags = MEM_Int; 1607 pMem->flags = MEM_Int;
1421 pMem->u.i = pOp->p2; /* P2 */ 1608 pMem->u.i = pOp->p2; /* P2 */
1422 pMem++; 1609 pMem++;
1423 1610
1424 pMem->flags = MEM_Int; 1611 pMem->flags = MEM_Int;
1425 pMem->u.i = pOp->p3; /* P3 */ 1612 pMem->u.i = pOp->p3; /* P3 */
1426 pMem++; 1613 pMem++;
1427 1614
1428 if( sqlite3VdbeMemClearAndResize(pMem, 32) ){ /* P4 */ 1615 if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */
1429 assert( p->db->mallocFailed ); 1616 assert( p->db->mallocFailed );
1430 return SQLITE_ERROR; 1617 return SQLITE_ERROR;
1431 } 1618 }
1432 pMem->flags = MEM_Str|MEM_Term; 1619 pMem->flags = MEM_Str|MEM_Term;
1433 zP4 = displayP4(pOp, pMem->z, 32); 1620 zP4 = displayP4(pOp, pMem->z, pMem->szMalloc);
1434 if( zP4!=pMem->z ){ 1621 if( zP4!=pMem->z ){
1435 sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0); 1622 sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0);
1436 }else{ 1623 }else{
1437 assert( pMem->z!=0 ); 1624 assert( pMem->z!=0 );
1438 pMem->n = sqlite3Strlen30(pMem->z); 1625 pMem->n = sqlite3Strlen30(pMem->z);
1439 pMem->enc = SQLITE_UTF8; 1626 pMem->enc = SQLITE_UTF8;
1440 } 1627 }
1441 pMem++; 1628 pMem++;
1442 1629
1443 if( p->explain==1 ){ 1630 if( p->explain==1 ){
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 ** 1715 **
1529 ** The pBuf parameter is the initial value of a pointer which will 1716 ** The pBuf parameter is the initial value of a pointer which will
1530 ** receive the new memory. pBuf is normally NULL. If pBuf is not 1717 ** receive the new memory. pBuf is normally NULL. If pBuf is not
1531 ** NULL, it means that memory space has already been allocated and that 1718 ** NULL, it means that memory space has already been allocated and that
1532 ** this routine should not allocate any new memory. When pBuf is not 1719 ** this routine should not allocate any new memory. When pBuf is not
1533 ** NULL simply return pBuf. Only allocate new memory space when pBuf 1720 ** NULL simply return pBuf. Only allocate new memory space when pBuf
1534 ** is NULL. 1721 ** is NULL.
1535 ** 1722 **
1536 ** nByte is the number of bytes of space needed. 1723 ** nByte is the number of bytes of space needed.
1537 ** 1724 **
1538 ** *ppFrom points to available space and pEnd points to the end of the 1725 ** pFrom points to *pnFrom bytes of available space. New space is allocated
1539 ** available space. When space is allocated, *ppFrom is advanced past 1726 ** from the end of the pFrom buffer and *pnFrom is decremented.
1540 ** the end of the allocated space.
1541 ** 1727 **
1542 ** *pnByte is a counter of the number of bytes of space that have failed 1728 ** *pnNeeded is a counter of the number of bytes of space that have failed
1543 ** to allocate. If there is insufficient space in *ppFrom to satisfy the 1729 ** to allocate. If there is insufficient space in pFrom to satisfy the
1544 ** request, then increment *pnByte by the amount of the request. 1730 ** request, then increment *pnNeeded by the amount of the request.
1545 */ 1731 */
1546 static void *allocSpace( 1732 static void *allocSpace(
1547 void *pBuf, /* Where return pointer will be stored */ 1733 void *pBuf, /* Where return pointer will be stored */
1548 int nByte, /* Number of bytes to allocate */ 1734 int nByte, /* Number of bytes to allocate */
1549 u8 **ppFrom, /* IN/OUT: Allocate from *ppFrom */ 1735 u8 *pFrom, /* Memory available for allocation */
1550 u8 *pEnd, /* Pointer to 1 byte past the end of *ppFrom buffer */ 1736 int *pnFrom, /* IN/OUT: Space available at pFrom */
1551 int *pnByte /* If allocation cannot be made, increment *pnByte */ 1737 int *pnNeeded /* If allocation cannot be made, increment *pnByte */
1552 ){ 1738 ){
1553 assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) ); 1739 assert( EIGHT_BYTE_ALIGNMENT(pFrom) );
1554 if( pBuf ) return pBuf; 1740 if( pBuf==0 ){
1555 nByte = ROUND8(nByte); 1741 nByte = ROUND8(nByte);
1556 if( &(*ppFrom)[nByte] <= pEnd ){ 1742 if( nByte <= *pnFrom ){
1557 pBuf = (void*)*ppFrom; 1743 *pnFrom -= nByte;
1558 *ppFrom += nByte; 1744 pBuf = &pFrom[*pnFrom];
1559 }else{ 1745 }else{
1560 *pnByte += nByte; 1746 *pnNeeded += nByte;
1747 }
1561 } 1748 }
1749 assert( EIGHT_BYTE_ALIGNMENT(pBuf) );
1562 return pBuf; 1750 return pBuf;
1563 } 1751 }
1564 1752
1565 /* 1753 /*
1566 ** Rewind the VDBE back to the beginning in preparation for 1754 ** Rewind the VDBE back to the beginning in preparation for
1567 ** running it. 1755 ** running it.
1568 */ 1756 */
1569 void sqlite3VdbeRewind(Vdbe *p){ 1757 void sqlite3VdbeRewind(Vdbe *p){
1570 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) 1758 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
1571 int i; 1759 int i;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 Vdbe *p, /* The VDBE */ 1812 Vdbe *p, /* The VDBE */
1625 Parse *pParse /* Parsing context */ 1813 Parse *pParse /* Parsing context */
1626 ){ 1814 ){
1627 sqlite3 *db; /* The database connection */ 1815 sqlite3 *db; /* The database connection */
1628 int nVar; /* Number of parameters */ 1816 int nVar; /* Number of parameters */
1629 int nMem; /* Number of VM memory registers */ 1817 int nMem; /* Number of VM memory registers */
1630 int nCursor; /* Number of cursors required */ 1818 int nCursor; /* Number of cursors required */
1631 int nArg; /* Number of arguments in subprograms */ 1819 int nArg; /* Number of arguments in subprograms */
1632 int nOnce; /* Number of OP_Once instructions */ 1820 int nOnce; /* Number of OP_Once instructions */
1633 int n; /* Loop counter */ 1821 int n; /* Loop counter */
1822 int nFree; /* Available free space */
1634 u8 *zCsr; /* Memory available for allocation */ 1823 u8 *zCsr; /* Memory available for allocation */
1635 u8 *zEnd; /* First byte past allocated memory */
1636 int nByte; /* How much extra memory is needed */ 1824 int nByte; /* How much extra memory is needed */
1637 1825
1638 assert( p!=0 ); 1826 assert( p!=0 );
1639 assert( p->nOp>0 ); 1827 assert( p->nOp>0 );
1640 assert( pParse!=0 ); 1828 assert( pParse!=0 );
1641 assert( p->magic==VDBE_MAGIC_INIT ); 1829 assert( p->magic==VDBE_MAGIC_INIT );
1642 assert( pParse==p->pParse ); 1830 assert( pParse==p->pParse );
1643 db = p->db; 1831 db = p->db;
1644 assert( db->mallocFailed==0 ); 1832 assert( db->mallocFailed==0 );
1645 nVar = pParse->nVar; 1833 nVar = pParse->nVar;
1646 nMem = pParse->nMem; 1834 nMem = pParse->nMem;
1647 nCursor = pParse->nTab; 1835 nCursor = pParse->nTab;
1648 nArg = pParse->nMaxArg; 1836 nArg = pParse->nMaxArg;
1649 nOnce = pParse->nOnce; 1837 nOnce = pParse->nOnce;
1650 if( nOnce==0 ) nOnce = 1; /* Ensure at least one byte in p->aOnceFlag[] */ 1838 if( nOnce==0 ) nOnce = 1; /* Ensure at least one byte in p->aOnceFlag[] */
1651 1839
1652 /* For each cursor required, also allocate a memory cell. Memory 1840 /* For each cursor required, also allocate a memory cell. Memory
1653 ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by 1841 ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by
1654 ** the vdbe program. Instead they are used to allocate space for 1842 ** the vdbe program. Instead they are used to allocate space for
1655 ** VdbeCursor/BtCursor structures. The blob of memory associated with 1843 ** VdbeCursor/BtCursor structures. The blob of memory associated with
1656 ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1) 1844 ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1)
1657 ** stores the blob of memory associated with cursor 1, etc. 1845 ** stores the blob of memory associated with cursor 1, etc.
1658 ** 1846 **
1659 ** See also: allocateCursor(). 1847 ** See also: allocateCursor().
1660 */ 1848 */
1661 nMem += nCursor; 1849 nMem += nCursor;
1662 1850
1663 /* Allocate space for memory registers, SQL variables, VDBE cursors and 1851 /* zCsr will initially point to nFree bytes of unused space at the
1664 ** an array to marshal SQL function arguments in. 1852 ** end of the opcode array, p->aOp. The computation of nFree is
1853 ** conservative - it might be smaller than the true number of free
1854 ** bytes, but never larger. nFree must be a multiple of 8 - it is
1855 ** rounded down if is not.
1665 */ 1856 */
1666 zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */ 1857 n = ROUND8(sizeof(Op)*p->nOp); /* Bytes of opcode space used */
1667 zEnd = (u8*)&p->aOp[pParse->nOpAlloc]; /* First byte past end of zCsr[] */ 1858 zCsr = &((u8*)p->aOp)[n]; /* Unused opcode space */
1859 assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
1860 nFree = ROUNDDOWN8(pParse->szOpAlloc - n); /* Bytes of unused space */
1861 assert( nFree>=0 );
1862 if( nFree>0 ){
1863 memset(zCsr, 0, nFree);
1864 assert( EIGHT_BYTE_ALIGNMENT(&zCsr[nFree]) );
1865 }
1668 1866
1669 resolveP2Values(p, &nArg); 1867 resolveP2Values(p, &nArg);
1670 p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); 1868 p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
1671 if( pParse->explain && nMem<10 ){ 1869 if( pParse->explain && nMem<10 ){
1672 nMem = 10; 1870 nMem = 10;
1673 } 1871 }
1674 memset(zCsr, 0, zEnd-zCsr);
1675 zCsr += (zCsr - (u8*)0)&7;
1676 assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
1677 p->expired = 0; 1872 p->expired = 0;
1678 1873
1679 /* Memory for registers, parameters, cursor, etc, is allocated in two 1874 /* Memory for registers, parameters, cursor, etc, is allocated in two
1680 ** passes. On the first pass, we try to reuse unused space at the 1875 ** passes. On the first pass, we try to reuse unused space at the
1681 ** end of the opcode array. If we are unable to satisfy all memory 1876 ** end of the opcode array. If we are unable to satisfy all memory
1682 ** requirements by reusing the opcode array tail, then the second 1877 ** requirements by reusing the opcode array tail, then the second
1683 ** pass will fill in the rest using a fresh allocation. 1878 ** pass will fill in the rest using a fresh allocation.
1684 ** 1879 **
1685 ** This two-pass approach that reuses as much memory as possible from 1880 ** This two-pass approach that reuses as much memory as possible from
1686 ** the leftover space at the end of the opcode array can significantly 1881 ** the leftover space at the end of the opcode array can significantly
1687 ** reduce the amount of memory held by a prepared statement. 1882 ** reduce the amount of memory held by a prepared statement.
1688 */ 1883 */
1689 do { 1884 do {
1690 nByte = 0; 1885 nByte = 0;
1691 p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte); 1886 p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), zCsr, &nFree, &nByte);
1692 p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte); 1887 p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), zCsr, &nFree, &nByte);
1693 p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte); 1888 p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), zCsr, &nFree, &nByte);
1694 p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte); 1889 p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), zCsr, &nFree, &nByte);
1695 p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*), 1890 p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
1696 &zCsr, zEnd, &nByte); 1891 zCsr, &nFree, &nByte);
1697 p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte); 1892 p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, zCsr, &nFree, &nByte);
1893 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1894 p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), zCsr, &nFree, &nByte);
1895 #endif
1698 if( nByte ){ 1896 if( nByte ){
1699 p->pFree = sqlite3DbMallocZero(db, nByte); 1897 p->pFree = sqlite3DbMallocZero(db, nByte);
1700 } 1898 }
1701 zCsr = p->pFree; 1899 zCsr = p->pFree;
1702 zEnd = &zCsr[nByte]; 1900 nFree = nByte;
1703 }while( nByte && !db->mallocFailed ); 1901 }while( nByte && !db->mallocFailed );
1704 1902
1705 p->nCursor = nCursor; 1903 p->nCursor = nCursor;
1706 p->nOnceFlag = nOnce; 1904 p->nOnceFlag = nOnce;
1707 if( p->aVar ){ 1905 if( p->aVar ){
1708 p->nVar = (ynVar)nVar; 1906 p->nVar = (ynVar)nVar;
1709 for(n=0; n<nVar; n++){ 1907 for(n=0; n<nVar; n++){
1710 p->aVar[n].flags = MEM_Null; 1908 p->aVar[n].flags = MEM_Null;
1711 p->aVar[n].db = db; 1909 p->aVar[n].db = db;
1712 } 1910 }
1713 } 1911 }
1714 if( p->azVar ){ 1912 if( p->azVar && pParse->nzVar>0 ){
1715 p->nzVar = pParse->nzVar; 1913 p->nzVar = pParse->nzVar;
1716 memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0])); 1914 memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0]));
1717 memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0])); 1915 memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0]));
1718 } 1916 }
1719 if( p->aMem ){ 1917 if( p->aMem ){
1720 p->aMem--; /* aMem[] goes from 1..nMem */ 1918 p->aMem--; /* aMem[] goes from 1..nMem */
1721 p->nMem = nMem; /* not from 0..nMem-1 */ 1919 p->nMem = nMem; /* not from 0..nMem-1 */
1722 for(n=1; n<=nMem; n++){ 1920 for(n=1; n<=nMem; n++){
1723 p->aMem[n].flags = MEM_Undefined; 1921 p->aMem[n].flags = MEM_Undefined;
1724 p->aMem[n].db = db; 1922 p->aMem[n].db = db;
1725 } 1923 }
1726 } 1924 }
1727 p->explain = pParse->explain; 1925 p->explain = pParse->explain;
1728 sqlite3VdbeRewind(p); 1926 sqlite3VdbeRewind(p);
1729 } 1927 }
1730 1928
1731 /* 1929 /*
1732 ** Close a VDBE cursor and release all the resources that cursor 1930 ** Close a VDBE cursor and release all the resources that cursor
1733 ** happens to hold. 1931 ** happens to hold.
1734 */ 1932 */
1735 void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ 1933 void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
1736 if( pCx==0 ){ 1934 if( pCx==0 ){
1737 return; 1935 return;
1738 } 1936 }
1739 sqlite3VdbeSorterClose(p->db, pCx); 1937 assert( pCx->pBt==0 || pCx->eCurType==CURTYPE_BTREE );
1740 if( pCx->pBt ){ 1938 switch( pCx->eCurType ){
1741 sqlite3BtreeClose(pCx->pBt); 1939 case CURTYPE_SORTER: {
1742 /* The pCx->pCursor will be close automatically, if it exists, by 1940 sqlite3VdbeSorterClose(p->db, pCx);
1743 ** the call above. */ 1941 break;
1744 }else if( pCx->pCursor ){ 1942 }
1745 sqlite3BtreeCloseCursor(pCx->pCursor); 1943 case CURTYPE_BTREE: {
1944 if( pCx->pBt ){
1945 sqlite3BtreeClose(pCx->pBt);
1946 /* The pCx->pCursor will be close automatically, if it exists, by
1947 ** the call above. */
1948 }else{
1949 assert( pCx->uc.pCursor!=0 );
1950 sqlite3BtreeCloseCursor(pCx->uc.pCursor);
1951 }
1952 break;
1953 }
1954 #ifndef SQLITE_OMIT_VIRTUALTABLE
1955 case CURTYPE_VTAB: {
1956 sqlite3_vtab_cursor *pVCur = pCx->uc.pVCur;
1957 const sqlite3_module *pModule = pVCur->pVtab->pModule;
1958 assert( pVCur->pVtab->nRef>0 );
1959 pVCur->pVtab->nRef--;
1960 pModule->xClose(pVCur);
1961 break;
1962 }
1963 #endif
1746 } 1964 }
1747 #ifndef SQLITE_OMIT_VIRTUALTABLE
1748 else if( pCx->pVtabCursor ){
1749 sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
1750 const sqlite3_module *pModule = pVtabCursor->pVtab->pModule;
1751 p->inVtabMethod = 1;
1752 pModule->xClose(pVtabCursor);
1753 p->inVtabMethod = 0;
1754 }
1755 #endif
1756 } 1965 }
1757 1966
1758 /* 1967 /*
1968 ** Close all cursors in the current frame.
1969 */
1970 static void closeCursorsInFrame(Vdbe *p){
1971 if( p->apCsr ){
1972 int i;
1973 for(i=0; i<p->nCursor; i++){
1974 VdbeCursor *pC = p->apCsr[i];
1975 if( pC ){
1976 sqlite3VdbeFreeCursor(p, pC);
1977 p->apCsr[i] = 0;
1978 }
1979 }
1980 }
1981 }
1982
1983 /*
1759 ** Copy the values stored in the VdbeFrame structure to its Vdbe. This 1984 ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
1760 ** is used, for example, when a trigger sub-program is halted to restore 1985 ** is used, for example, when a trigger sub-program is halted to restore
1761 ** control to the main program. 1986 ** control to the main program.
1762 */ 1987 */
1763 int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ 1988 int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
1764 Vdbe *v = pFrame->v; 1989 Vdbe *v = pFrame->v;
1990 closeCursorsInFrame(v);
1991 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1992 v->anExec = pFrame->anExec;
1993 #endif
1765 v->aOnceFlag = pFrame->aOnceFlag; 1994 v->aOnceFlag = pFrame->aOnceFlag;
1766 v->nOnceFlag = pFrame->nOnceFlag; 1995 v->nOnceFlag = pFrame->nOnceFlag;
1767 v->aOp = pFrame->aOp; 1996 v->aOp = pFrame->aOp;
1768 v->nOp = pFrame->nOp; 1997 v->nOp = pFrame->nOp;
1769 v->aMem = pFrame->aMem; 1998 v->aMem = pFrame->aMem;
1770 v->nMem = pFrame->nMem; 1999 v->nMem = pFrame->nMem;
1771 v->apCsr = pFrame->apCsr; 2000 v->apCsr = pFrame->apCsr;
1772 v->nCursor = pFrame->nCursor; 2001 v->nCursor = pFrame->nCursor;
1773 v->db->lastRowid = pFrame->lastRowid; 2002 v->db->lastRowid = pFrame->lastRowid;
1774 v->nChange = pFrame->nChange; 2003 v->nChange = pFrame->nChange;
2004 v->db->nChange = pFrame->nDbChange;
1775 return pFrame->pc; 2005 return pFrame->pc;
1776 } 2006 }
1777 2007
1778 /* 2008 /*
1779 ** Close all cursors. 2009 ** Close all cursors.
1780 ** 2010 **
1781 ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory 2011 ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory
1782 ** cell array. This is necessary as the memory cell array may contain 2012 ** cell array. This is necessary as the memory cell array may contain
1783 ** pointers to VdbeFrame objects, which may in turn contain pointers to 2013 ** pointers to VdbeFrame objects, which may in turn contain pointers to
1784 ** open cursors. 2014 ** open cursors.
1785 */ 2015 */
1786 static void closeAllCursors(Vdbe *p){ 2016 static void closeAllCursors(Vdbe *p){
1787 if( p->pFrame ){ 2017 if( p->pFrame ){
1788 VdbeFrame *pFrame; 2018 VdbeFrame *pFrame;
1789 for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); 2019 for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
1790 sqlite3VdbeFrameRestore(pFrame); 2020 sqlite3VdbeFrameRestore(pFrame);
1791 p->pFrame = 0; 2021 p->pFrame = 0;
1792 p->nFrame = 0; 2022 p->nFrame = 0;
1793 } 2023 }
1794 assert( p->nFrame==0 ); 2024 assert( p->nFrame==0 );
1795 2025 closeCursorsInFrame(p);
1796 if( p->apCsr ){
1797 int i;
1798 for(i=0; i<p->nCursor; i++){
1799 VdbeCursor *pC = p->apCsr[i];
1800 if( pC ){
1801 sqlite3VdbeFreeCursor(p, pC);
1802 p->apCsr[i] = 0;
1803 }
1804 }
1805 }
1806 if( p->aMem ){ 2026 if( p->aMem ){
1807 releaseMemArray(&p->aMem[1], p->nMem); 2027 releaseMemArray(&p->aMem[1], p->nMem);
1808 } 2028 }
1809 while( p->pDelFrame ){ 2029 while( p->pDelFrame ){
1810 VdbeFrame *pDel = p->pDelFrame; 2030 VdbeFrame *pDel = p->pDelFrame;
1811 p->pDelFrame = pDel->pParent; 2031 p->pDelFrame = pDel->pParent;
1812 sqlite3VdbeFrameDelete(pDel); 2032 sqlite3VdbeFrameDelete(pDel);
1813 } 2033 }
1814 2034
1815 /* Delete any auxdata allocations made by the VM */ 2035 /* Delete any auxdata allocations made by the VM */
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 assert( rc!=SQLITE_BUSY ); 2318 assert( rc!=SQLITE_BUSY );
2099 if( rc!=SQLITE_OK ){ 2319 if( rc!=SQLITE_OK ){
2100 sqlite3DbFree(db, zMaster); 2320 sqlite3DbFree(db, zMaster);
2101 return rc; 2321 return rc;
2102 } 2322 }
2103 2323
2104 /* Delete the master journal file. This commits the transaction. After 2324 /* Delete the master journal file. This commits the transaction. After
2105 ** doing this the directory is synced again before any individual 2325 ** doing this the directory is synced again before any individual
2106 ** transaction files are deleted. 2326 ** transaction files are deleted.
2107 */ 2327 */
2108 rc = sqlite3OsDelete(pVfs, zMaster, 1); 2328 rc = sqlite3OsDelete(pVfs, zMaster, needSync);
2109 sqlite3DbFree(db, zMaster); 2329 sqlite3DbFree(db, zMaster);
2110 zMaster = 0; 2330 zMaster = 0;
2111 if( rc ){ 2331 if( rc ){
2112 return rc; 2332 return rc;
2113 } 2333 }
2114 2334
2115 /* All files and directories have already been synced, so the following 2335 /* All files and directories have already been synced, so the following
2116 ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and 2336 ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
2117 ** deleting or truncating journals. If something goes wrong while 2337 ** deleting or truncating journals. If something goes wrong while
2118 ** this is happening we don't really care. The integrity of the 2338 ** this is happening we don't really care. The integrity of the
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2245 ** and write an error message to it. Then return SQLITE_ERROR. 2465 ** and write an error message to it. Then return SQLITE_ERROR.
2246 */ 2466 */
2247 #ifndef SQLITE_OMIT_FOREIGN_KEY 2467 #ifndef SQLITE_OMIT_FOREIGN_KEY
2248 int sqlite3VdbeCheckFk(Vdbe *p, int deferred){ 2468 int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
2249 sqlite3 *db = p->db; 2469 sqlite3 *db = p->db;
2250 if( (deferred && (db->nDeferredCons+db->nDeferredImmCons)>0) 2470 if( (deferred && (db->nDeferredCons+db->nDeferredImmCons)>0)
2251 || (!deferred && p->nFkConstraint>0) 2471 || (!deferred && p->nFkConstraint>0)
2252 ){ 2472 ){
2253 p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; 2473 p->rc = SQLITE_CONSTRAINT_FOREIGNKEY;
2254 p->errorAction = OE_Abort; 2474 p->errorAction = OE_Abort;
2255 sqlite3SetString(&p->zErrMsg, db, "FOREIGN KEY constraint failed"); 2475 sqlite3VdbeError(p, "FOREIGN KEY constraint failed");
2256 return SQLITE_ERROR; 2476 return SQLITE_ERROR;
2257 } 2477 }
2258 return SQLITE_OK; 2478 return SQLITE_OK;
2259 } 2479 }
2260 #endif 2480 #endif
2261 2481
2262 /* 2482 /*
2263 ** This routine is called the when a VDBE tries to halt. If the VDBE 2483 ** This routine is called the when a VDBE tries to halt. If the VDBE
2264 ** has made changes and is in autocommit mode, then commit those 2484 ** has made changes and is in autocommit mode, then commit those
2265 ** changes. If a rollback is needed, then do the rollback. 2485 ** changes. If a rollback is needed, then do the rollback.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2332 if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){ 2552 if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
2333 if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){ 2553 if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
2334 eStatementOp = SAVEPOINT_ROLLBACK; 2554 eStatementOp = SAVEPOINT_ROLLBACK;
2335 }else{ 2555 }else{
2336 /* We are forced to roll back the active transaction. Before doing 2556 /* We are forced to roll back the active transaction. Before doing
2337 ** so, abort any other statements this handle currently has active. 2557 ** so, abort any other statements this handle currently has active.
2338 */ 2558 */
2339 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); 2559 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2340 sqlite3CloseSavepoints(db); 2560 sqlite3CloseSavepoints(db);
2341 db->autoCommit = 1; 2561 db->autoCommit = 1;
2562 p->nChange = 0;
2342 } 2563 }
2343 } 2564 }
2344 } 2565 }
2345 2566
2346 /* Check for immediate foreign key violations. */ 2567 /* Check for immediate foreign key violations. */
2347 if( p->rc==SQLITE_OK ){ 2568 if( p->rc==SQLITE_OK ){
2348 sqlite3VdbeCheckFk(p, 0); 2569 sqlite3VdbeCheckFk(p, 0);
2349 } 2570 }
2350 2571
2351 /* If the auto-commit flag is set and this is the only active writer 2572 /* If the auto-commit flag is set and this is the only active writer
(...skipping 20 matching lines...) Expand all
2372 ** key constraints to hold up the transaction. This means a commit 2593 ** key constraints to hold up the transaction. This means a commit
2373 ** is required. */ 2594 ** is required. */
2374 rc = vdbeCommit(db, p); 2595 rc = vdbeCommit(db, p);
2375 } 2596 }
2376 if( rc==SQLITE_BUSY && p->readOnly ){ 2597 if( rc==SQLITE_BUSY && p->readOnly ){
2377 sqlite3VdbeLeave(p); 2598 sqlite3VdbeLeave(p);
2378 return SQLITE_BUSY; 2599 return SQLITE_BUSY;
2379 }else if( rc!=SQLITE_OK ){ 2600 }else if( rc!=SQLITE_OK ){
2380 p->rc = rc; 2601 p->rc = rc;
2381 sqlite3RollbackAll(db, SQLITE_OK); 2602 sqlite3RollbackAll(db, SQLITE_OK);
2603 p->nChange = 0;
2382 }else{ 2604 }else{
2383 db->nDeferredCons = 0; 2605 db->nDeferredCons = 0;
2384 db->nDeferredImmCons = 0; 2606 db->nDeferredImmCons = 0;
2385 db->flags &= ~SQLITE_DeferFKs; 2607 db->flags &= ~SQLITE_DeferFKs;
2386 sqlite3CommitInternalChanges(db); 2608 sqlite3CommitInternalChanges(db);
2387 } 2609 }
2388 }else{ 2610 }else{
2389 sqlite3RollbackAll(db, SQLITE_OK); 2611 sqlite3RollbackAll(db, SQLITE_OK);
2612 p->nChange = 0;
2390 } 2613 }
2391 db->nStatement = 0; 2614 db->nStatement = 0;
2392 }else if( eStatementOp==0 ){ 2615 }else if( eStatementOp==0 ){
2393 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ 2616 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
2394 eStatementOp = SAVEPOINT_RELEASE; 2617 eStatementOp = SAVEPOINT_RELEASE;
2395 }else if( p->errorAction==OE_Abort ){ 2618 }else if( p->errorAction==OE_Abort ){
2396 eStatementOp = SAVEPOINT_ROLLBACK; 2619 eStatementOp = SAVEPOINT_ROLLBACK;
2397 }else{ 2620 }else{
2398 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); 2621 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2399 sqlite3CloseSavepoints(db); 2622 sqlite3CloseSavepoints(db);
2400 db->autoCommit = 1; 2623 db->autoCommit = 1;
2624 p->nChange = 0;
2401 } 2625 }
2402 } 2626 }
2403 2627
2404 /* If eStatementOp is non-zero, then a statement transaction needs to 2628 /* If eStatementOp is non-zero, then a statement transaction needs to
2405 ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to 2629 ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
2406 ** do so. If this operation returns an error, and the current statement 2630 ** do so. If this operation returns an error, and the current statement
2407 ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the 2631 ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
2408 ** current statement error code. 2632 ** current statement error code.
2409 */ 2633 */
2410 if( eStatementOp ){ 2634 if( eStatementOp ){
2411 rc = sqlite3VdbeCloseStatement(p, eStatementOp); 2635 rc = sqlite3VdbeCloseStatement(p, eStatementOp);
2412 if( rc ){ 2636 if( rc ){
2413 if( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ){ 2637 if( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ){
2414 p->rc = rc; 2638 p->rc = rc;
2415 sqlite3DbFree(db, p->zErrMsg); 2639 sqlite3DbFree(db, p->zErrMsg);
2416 p->zErrMsg = 0; 2640 p->zErrMsg = 0;
2417 } 2641 }
2418 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); 2642 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
2419 sqlite3CloseSavepoints(db); 2643 sqlite3CloseSavepoints(db);
2420 db->autoCommit = 1; 2644 db->autoCommit = 1;
2645 p->nChange = 0;
2421 } 2646 }
2422 } 2647 }
2423 2648
2424 /* If this was an INSERT, UPDATE or DELETE and no statement transaction 2649 /* If this was an INSERT, UPDATE or DELETE and no statement transaction
2425 ** has been rolled back, update the database connection change-counter. 2650 ** has been rolled back, update the database connection change-counter.
2426 */ 2651 */
2427 if( p->changeCntOn ){ 2652 if( p->changeCntOn ){
2428 if( eStatementOp!=SAVEPOINT_ROLLBACK ){ 2653 if( eStatementOp!=SAVEPOINT_ROLLBACK ){
2429 sqlite3VdbeSetChanges(db, p->nChange); 2654 sqlite3VdbeSetChanges(db, p->nChange);
2430 }else{ 2655 }else{
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
2672 for(pSub=p->pProgram; pSub; pSub=pNext){ 2897 for(pSub=p->pProgram; pSub; pSub=pNext){
2673 pNext = pSub->pNext; 2898 pNext = pSub->pNext;
2674 vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); 2899 vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
2675 sqlite3DbFree(db, pSub); 2900 sqlite3DbFree(db, pSub);
2676 } 2901 }
2677 for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]); 2902 for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
2678 vdbeFreeOpArray(db, p->aOp, p->nOp); 2903 vdbeFreeOpArray(db, p->aOp, p->nOp);
2679 sqlite3DbFree(db, p->aColName); 2904 sqlite3DbFree(db, p->aColName);
2680 sqlite3DbFree(db, p->zSql); 2905 sqlite3DbFree(db, p->zSql);
2681 sqlite3DbFree(db, p->pFree); 2906 sqlite3DbFree(db, p->pFree);
2907 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
2908 for(i=0; i<p->nScan; i++){
2909 sqlite3DbFree(db, p->aScan[i].zName);
2910 }
2911 sqlite3DbFree(db, p->aScan);
2912 #endif
2682 } 2913 }
2683 2914
2684 /* 2915 /*
2685 ** Delete an entire VDBE. 2916 ** Delete an entire VDBE.
2686 */ 2917 */
2687 void sqlite3VdbeDelete(Vdbe *p){ 2918 void sqlite3VdbeDelete(Vdbe *p){
2688 sqlite3 *db; 2919 sqlite3 *db;
2689 2920
2690 if( NEVER(p==0) ) return; 2921 if( NEVER(p==0) ) return;
2691 db = p->db; 2922 db = p->db;
(...skipping 18 matching lines...) Expand all
2710 ** carried out. Seek the cursor now. If an error occurs, return 2941 ** carried out. Seek the cursor now. If an error occurs, return
2711 ** the appropriate error code. 2942 ** the appropriate error code.
2712 */ 2943 */
2713 static int SQLITE_NOINLINE handleDeferredMoveto(VdbeCursor *p){ 2944 static int SQLITE_NOINLINE handleDeferredMoveto(VdbeCursor *p){
2714 int res, rc; 2945 int res, rc;
2715 #ifdef SQLITE_TEST 2946 #ifdef SQLITE_TEST
2716 extern int sqlite3_search_count; 2947 extern int sqlite3_search_count;
2717 #endif 2948 #endif
2718 assert( p->deferredMoveto ); 2949 assert( p->deferredMoveto );
2719 assert( p->isTable ); 2950 assert( p->isTable );
2720 rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res); 2951 assert( p->eCurType==CURTYPE_BTREE );
2952 rc = sqlite3BtreeMovetoUnpacked(p->uc.pCursor, 0, p->movetoTarget, 0, &res);
2721 if( rc ) return rc; 2953 if( rc ) return rc;
2722 if( res!=0 ) return SQLITE_CORRUPT_BKPT; 2954 if( res!=0 ) return SQLITE_CORRUPT_BKPT;
2723 #ifdef SQLITE_TEST 2955 #ifdef SQLITE_TEST
2724 sqlite3_search_count++; 2956 sqlite3_search_count++;
2725 #endif 2957 #endif
2726 p->deferredMoveto = 0; 2958 p->deferredMoveto = 0;
2727 p->cacheStatus = CACHE_STALE; 2959 p->cacheStatus = CACHE_STALE;
2728 return SQLITE_OK; 2960 return SQLITE_OK;
2729 } 2961 }
2730 2962
2731 /* 2963 /*
2732 ** Something has moved cursor "p" out of place. Maybe the row it was 2964 ** Something has moved cursor "p" out of place. Maybe the row it was
2733 ** pointed to was deleted out from under it. Or maybe the btree was 2965 ** pointed to was deleted out from under it. Or maybe the btree was
2734 ** rebalanced. Whatever the cause, try to restore "p" to the place it 2966 ** rebalanced. Whatever the cause, try to restore "p" to the place it
2735 ** is supposed to be pointing. If the row was deleted out from under the 2967 ** is supposed to be pointing. If the row was deleted out from under the
2736 ** cursor, set the cursor to point to a NULL row. 2968 ** cursor, set the cursor to point to a NULL row.
2737 */ 2969 */
2738 static int SQLITE_NOINLINE handleMovedCursor(VdbeCursor *p){ 2970 static int SQLITE_NOINLINE handleMovedCursor(VdbeCursor *p){
2739 int isDifferentRow, rc; 2971 int isDifferentRow, rc;
2740 assert( p->pCursor!=0 ); 2972 assert( p->eCurType==CURTYPE_BTREE );
2741 assert( sqlite3BtreeCursorHasMoved(p->pCursor) ); 2973 assert( p->uc.pCursor!=0 );
2742 rc = sqlite3BtreeCursorRestore(p->pCursor, &isDifferentRow); 2974 assert( sqlite3BtreeCursorHasMoved(p->uc.pCursor) );
2975 rc = sqlite3BtreeCursorRestore(p->uc.pCursor, &isDifferentRow);
2743 p->cacheStatus = CACHE_STALE; 2976 p->cacheStatus = CACHE_STALE;
2744 if( isDifferentRow ) p->nullRow = 1; 2977 if( isDifferentRow ) p->nullRow = 1;
2745 return rc; 2978 return rc;
2746 } 2979 }
2747 2980
2748 /* 2981 /*
2749 ** Check to ensure that the cursor is valid. Restore the cursor 2982 ** Check to ensure that the cursor is valid. Restore the cursor
2750 ** if need be. Return any I/O error from the restore operation. 2983 ** if need be. Return any I/O error from the restore operation.
2751 */ 2984 */
2752 int sqlite3VdbeCursorRestore(VdbeCursor *p){ 2985 int sqlite3VdbeCursorRestore(VdbeCursor *p){
2753 if( sqlite3BtreeCursorHasMoved(p->pCursor) ){ 2986 assert( p->eCurType==CURTYPE_BTREE );
2987 if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
2754 return handleMovedCursor(p); 2988 return handleMovedCursor(p);
2755 } 2989 }
2756 return SQLITE_OK; 2990 return SQLITE_OK;
2757 } 2991 }
2758 2992
2759 /* 2993 /*
2760 ** Make sure the cursor p is ready to read or write the row to which it 2994 ** Make sure the cursor p is ready to read or write the row to which it
2761 ** was last positioned. Return an error code if an OOM fault or I/O error 2995 ** was last positioned. Return an error code if an OOM fault or I/O error
2762 ** prevents us from positioning the cursor to its correct position. 2996 ** prevents us from positioning the cursor to its correct position.
2763 ** 2997 **
2764 ** If a MoveTo operation is pending on the given cursor, then do that 2998 ** If a MoveTo operation is pending on the given cursor, then do that
2765 ** MoveTo now. If no move is pending, check to see if the row has been 2999 ** MoveTo now. If no move is pending, check to see if the row has been
2766 ** deleted out from under the cursor and if it has, mark the row as 3000 ** deleted out from under the cursor and if it has, mark the row as
2767 ** a NULL row. 3001 ** a NULL row.
2768 ** 3002 **
2769 ** If the cursor is already pointing to the correct row and that row has 3003 ** If the cursor is already pointing to the correct row and that row has
2770 ** not been deleted out from under the cursor, then this routine is a no-op. 3004 ** not been deleted out from under the cursor, then this routine is a no-op.
2771 */ 3005 */
2772 int sqlite3VdbeCursorMoveto(VdbeCursor *p){ 3006 int sqlite3VdbeCursorMoveto(VdbeCursor *p){
2773 if( p->deferredMoveto ){ 3007 if( p->eCurType==CURTYPE_BTREE ){
2774 return handleDeferredMoveto(p); 3008 if( p->deferredMoveto ){
2775 } 3009 return handleDeferredMoveto(p);
2776 if( p->pCursor && sqlite3BtreeCursorHasMoved(p->pCursor) ){ 3010 }
2777 return handleMovedCursor(p); 3011 if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
3012 return handleMovedCursor(p);
3013 }
2778 } 3014 }
2779 return SQLITE_OK; 3015 return SQLITE_OK;
2780 } 3016 }
2781 3017
2782 /* 3018 /*
2783 ** The following functions: 3019 ** The following functions:
2784 ** 3020 **
2785 ** sqlite3VdbeSerialType() 3021 ** sqlite3VdbeSerialType()
2786 ** sqlite3VdbeSerialTypeLen() 3022 ** sqlite3VdbeSerialTypeLen()
2787 ** sqlite3VdbeSerialLen() 3023 ** sqlite3VdbeSerialLen()
(...skipping 29 matching lines...) Expand all
2817 ** N>=12 and even (N-12)/2 BLOB 3053 ** N>=12 and even (N-12)/2 BLOB
2818 ** N>=13 and odd (N-13)/2 text 3054 ** N>=13 and odd (N-13)/2 text
2819 ** 3055 **
2820 ** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions 3056 ** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions
2821 ** of SQLite will not understand those serial types. 3057 ** of SQLite will not understand those serial types.
2822 */ 3058 */
2823 3059
2824 /* 3060 /*
2825 ** Return the serial-type for the value stored in pMem. 3061 ** Return the serial-type for the value stored in pMem.
2826 */ 3062 */
2827 u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ 3063 u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
2828 int flags = pMem->flags; 3064 int flags = pMem->flags;
2829 u32 n; 3065 u32 n;
2830 3066
3067 assert( pLen!=0 );
2831 if( flags&MEM_Null ){ 3068 if( flags&MEM_Null ){
3069 *pLen = 0;
2832 return 0; 3070 return 0;
2833 } 3071 }
2834 if( flags&MEM_Int ){ 3072 if( flags&MEM_Int ){
2835 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ 3073 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
2836 # define MAX_6BYTE ((((i64)0x00008000)<<32)-1) 3074 # define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
2837 i64 i = pMem->u.i; 3075 i64 i = pMem->u.i;
2838 u64 u; 3076 u64 u;
2839 if( i<0 ){ 3077 if( i<0 ){
2840 if( i<(-MAX_6BYTE) ) return 6; 3078 u = ~i;
2841 /* Previous test prevents: u = -(-9223372036854775808) */
2842 u = -i;
2843 }else{ 3079 }else{
2844 u = i; 3080 u = i;
2845 } 3081 }
2846 if( u<=127 ){ 3082 if( u<=127 ){
2847 return ((i&1)==i && file_format>=4) ? 8+(u32)u : 1; 3083 if( (i&1)==i && file_format>=4 ){
3084 *pLen = 0;
3085 return 8+(u32)u;
3086 }else{
3087 *pLen = 1;
3088 return 1;
3089 }
2848 } 3090 }
2849 if( u<=32767 ) return 2; 3091 if( u<=32767 ){ *pLen = 2; return 2; }
2850 if( u<=8388607 ) return 3; 3092 if( u<=8388607 ){ *pLen = 3; return 3; }
2851 if( u<=2147483647 ) return 4; 3093 if( u<=2147483647 ){ *pLen = 4; return 4; }
2852 if( u<=MAX_6BYTE ) return 5; 3094 if( u<=MAX_6BYTE ){ *pLen = 6; return 5; }
3095 *pLen = 8;
2853 return 6; 3096 return 6;
2854 } 3097 }
2855 if( flags&MEM_Real ){ 3098 if( flags&MEM_Real ){
3099 *pLen = 8;
2856 return 7; 3100 return 7;
2857 } 3101 }
2858 assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) ); 3102 assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
2859 assert( pMem->n>=0 ); 3103 assert( pMem->n>=0 );
2860 n = (u32)pMem->n; 3104 n = (u32)pMem->n;
2861 if( flags & MEM_Zero ){ 3105 if( flags & MEM_Zero ){
2862 n += pMem->u.nZero; 3106 n += pMem->u.nZero;
2863 } 3107 }
3108 *pLen = n;
2864 return ((n*2) + 12 + ((flags&MEM_Str)!=0)); 3109 return ((n*2) + 12 + ((flags&MEM_Str)!=0));
2865 } 3110 }
2866 3111
2867 /* 3112 /*
3113 ** The sizes for serial types less than 128
3114 */
3115 static const u8 sqlite3SmallTypeSizes[] = {
3116 /* 0 1 2 3 4 5 6 7 8 9 */
3117 /* 0 */ 0, 1, 2, 3, 4, 6, 8, 8, 0, 0,
3118 /* 10 */ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
3119 /* 20 */ 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
3120 /* 30 */ 9, 9, 10, 10, 11, 11, 12, 12, 13, 13,
3121 /* 40 */ 14, 14, 15, 15, 16, 16, 17, 17, 18, 18,
3122 /* 50 */ 19, 19, 20, 20, 21, 21, 22, 22, 23, 23,
3123 /* 60 */ 24, 24, 25, 25, 26, 26, 27, 27, 28, 28,
3124 /* 70 */ 29, 29, 30, 30, 31, 31, 32, 32, 33, 33,
3125 /* 80 */ 34, 34, 35, 35, 36, 36, 37, 37, 38, 38,
3126 /* 90 */ 39, 39, 40, 40, 41, 41, 42, 42, 43, 43,
3127 /* 100 */ 44, 44, 45, 45, 46, 46, 47, 47, 48, 48,
3128 /* 110 */ 49, 49, 50, 50, 51, 51, 52, 52, 53, 53,
3129 /* 120 */ 54, 54, 55, 55, 56, 56, 57, 57
3130 };
3131
3132 /*
2868 ** Return the length of the data corresponding to the supplied serial-type. 3133 ** Return the length of the data corresponding to the supplied serial-type.
2869 */ 3134 */
2870 u32 sqlite3VdbeSerialTypeLen(u32 serial_type){ 3135 u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
2871 if( serial_type>=12 ){ 3136 if( serial_type>=128 ){
2872 return (serial_type-12)/2; 3137 return (serial_type-12)/2;
2873 }else{ 3138 }else{
2874 static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 }; 3139 assert( serial_type<12
2875 return aSize[serial_type]; 3140 || sqlite3SmallTypeSizes[serial_type]==(serial_type - 12)/2 );
3141 return sqlite3SmallTypeSizes[serial_type];
2876 } 3142 }
2877 } 3143 }
3144 u8 sqlite3VdbeOneByteSerialTypeLen(u8 serial_type){
3145 assert( serial_type<128 );
3146 return sqlite3SmallTypeSizes[serial_type];
3147 }
2878 3148
2879 /* 3149 /*
2880 ** If we are on an architecture with mixed-endian floating 3150 ** If we are on an architecture with mixed-endian floating
2881 ** points (ex: ARM7) then swap the lower 4 bytes with the 3151 ** points (ex: ARM7) then swap the lower 4 bytes with the
2882 ** upper 4 bytes. Return the result. 3152 ** upper 4 bytes. Return the result.
2883 ** 3153 **
2884 ** For most architectures, this is a no-op. 3154 ** For most architectures, this is a no-op.
2885 ** 3155 **
2886 ** (later): It is reported to me that the mixed-endian problem 3156 ** (later): It is reported to me that the mixed-endian problem
2887 ** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems 3157 ** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2949 if( serial_type<=7 && serial_type>0 ){ 3219 if( serial_type<=7 && serial_type>0 ){
2950 u64 v; 3220 u64 v;
2951 u32 i; 3221 u32 i;
2952 if( serial_type==7 ){ 3222 if( serial_type==7 ){
2953 assert( sizeof(v)==sizeof(pMem->u.r) ); 3223 assert( sizeof(v)==sizeof(pMem->u.r) );
2954 memcpy(&v, &pMem->u.r, sizeof(v)); 3224 memcpy(&v, &pMem->u.r, sizeof(v));
2955 swapMixedEndianFloat(v); 3225 swapMixedEndianFloat(v);
2956 }else{ 3226 }else{
2957 v = pMem->u.i; 3227 v = pMem->u.i;
2958 } 3228 }
2959 len = i = sqlite3VdbeSerialTypeLen(serial_type); 3229 len = i = sqlite3SmallTypeSizes[serial_type];
2960 assert( i>0 ); 3230 assert( i>0 );
2961 do{ 3231 do{
2962 buf[--i] = (u8)(v&0xFF); 3232 buf[--i] = (u8)(v&0xFF);
2963 v >>= 8; 3233 v >>= 8;
2964 }while( i ); 3234 }while( i );
2965 return len; 3235 return len;
2966 } 3236 }
2967 3237
2968 /* String or blob */ 3238 /* String or blob */
2969 if( serial_type>=12 ){ 3239 if( serial_type>=12 ){
2970 assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0) 3240 assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
2971 == (int)sqlite3VdbeSerialTypeLen(serial_type) ); 3241 == (int)sqlite3VdbeSerialTypeLen(serial_type) );
2972 len = pMem->n; 3242 len = pMem->n;
2973 memcpy(buf, pMem->z, len); 3243 if( len>0 ) memcpy(buf, pMem->z, len);
2974 return len; 3244 return len;
2975 } 3245 }
2976 3246
2977 /* NULL or constants 0 or 1 */ 3247 /* NULL or constants 0 or 1 */
2978 return 0; 3248 return 0;
2979 } 3249 }
2980 3250
2981 /* Input "x" is a sequence of unsigned characters that represent a 3251 /* Input "x" is a sequence of unsigned characters that represent a
2982 ** big-endian integer. Return the equivalent native integer 3252 ** big-endian integer. Return the equivalent native integer
2983 */ 3253 */
(...skipping 14 matching lines...) Expand all
2998 */ 3268 */
2999 static u32 SQLITE_NOINLINE serialGet( 3269 static u32 SQLITE_NOINLINE serialGet(
3000 const unsigned char *buf, /* Buffer to deserialize from */ 3270 const unsigned char *buf, /* Buffer to deserialize from */
3001 u32 serial_type, /* Serial type to deserialize */ 3271 u32 serial_type, /* Serial type to deserialize */
3002 Mem *pMem /* Memory cell to write value into */ 3272 Mem *pMem /* Memory cell to write value into */
3003 ){ 3273 ){
3004 u64 x = FOUR_BYTE_UINT(buf); 3274 u64 x = FOUR_BYTE_UINT(buf);
3005 u32 y = FOUR_BYTE_UINT(buf+4); 3275 u32 y = FOUR_BYTE_UINT(buf+4);
3006 x = (x<<32) + y; 3276 x = (x<<32) + y;
3007 if( serial_type==6 ){ 3277 if( serial_type==6 ){
3278 /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit
3279 ** twos-complement integer. */
3008 pMem->u.i = *(i64*)&x; 3280 pMem->u.i = *(i64*)&x;
3009 pMem->flags = MEM_Int; 3281 pMem->flags = MEM_Int;
3010 testcase( pMem->u.i<0 ); 3282 testcase( pMem->u.i<0 );
3011 }else{ 3283 }else{
3284 /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit
3285 ** floating point number. */
3012 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) 3286 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
3013 /* Verify that integers and floating point values use the same 3287 /* Verify that integers and floating point values use the same
3014 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is 3288 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
3015 ** defined that 64-bit floating point values really are mixed 3289 ** defined that 64-bit floating point values really are mixed
3016 ** endian. 3290 ** endian.
3017 */ 3291 */
3018 static const u64 t1 = ((u64)0x3ff00000)<<32; 3292 static const u64 t1 = ((u64)0x3ff00000)<<32;
3019 static const double r1 = 1.0; 3293 static const double r1 = 1.0;
3020 u64 t2 = t1; 3294 u64 t2 = t1;
3021 swapMixedEndianFloat(t2); 3295 swapMixedEndianFloat(t2);
3022 assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); 3296 assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
3023 #endif 3297 #endif
3024 assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 ); 3298 assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 );
3025 swapMixedEndianFloat(x); 3299 swapMixedEndianFloat(x);
3026 memcpy(&pMem->u.r, &x, sizeof(x)); 3300 memcpy(&pMem->u.r, &x, sizeof(x));
3027 pMem->flags = sqlite3IsNaN(pMem->u.r) ? MEM_Null : MEM_Real; 3301 pMem->flags = sqlite3IsNaN(pMem->u.r) ? MEM_Null : MEM_Real;
3028 } 3302 }
3029 return 8; 3303 return 8;
3030 } 3304 }
3031 u32 sqlite3VdbeSerialGet( 3305 u32 sqlite3VdbeSerialGet(
3032 const unsigned char *buf, /* Buffer to deserialize from */ 3306 const unsigned char *buf, /* Buffer to deserialize from */
3033 u32 serial_type, /* Serial type to deserialize */ 3307 u32 serial_type, /* Serial type to deserialize */
3034 Mem *pMem /* Memory cell to write value into */ 3308 Mem *pMem /* Memory cell to write value into */
3035 ){ 3309 ){
3036 switch( serial_type ){ 3310 switch( serial_type ){
3037 case 10: /* Reserved for future use */ 3311 case 10: /* Reserved for future use */
3038 case 11: /* Reserved for future use */ 3312 case 11: /* Reserved for future use */
3039 case 0: { /* NULL */ 3313 case 0: { /* Null */
3314 /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
3040 pMem->flags = MEM_Null; 3315 pMem->flags = MEM_Null;
3041 break; 3316 break;
3042 } 3317 }
3043 case 1: { /* 1-byte signed integer */ 3318 case 1: {
3319 /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
3320 ** integer. */
3044 pMem->u.i = ONE_BYTE_INT(buf); 3321 pMem->u.i = ONE_BYTE_INT(buf);
3045 pMem->flags = MEM_Int; 3322 pMem->flags = MEM_Int;
3046 testcase( pMem->u.i<0 ); 3323 testcase( pMem->u.i<0 );
3047 return 1; 3324 return 1;
3048 } 3325 }
3049 case 2: { /* 2-byte signed integer */ 3326 case 2: { /* 2-byte signed integer */
3327 /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
3328 ** twos-complement integer. */
3050 pMem->u.i = TWO_BYTE_INT(buf); 3329 pMem->u.i = TWO_BYTE_INT(buf);
3051 pMem->flags = MEM_Int; 3330 pMem->flags = MEM_Int;
3052 testcase( pMem->u.i<0 ); 3331 testcase( pMem->u.i<0 );
3053 return 2; 3332 return 2;
3054 } 3333 }
3055 case 3: { /* 3-byte signed integer */ 3334 case 3: { /* 3-byte signed integer */
3335 /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
3336 ** twos-complement integer. */
3056 pMem->u.i = THREE_BYTE_INT(buf); 3337 pMem->u.i = THREE_BYTE_INT(buf);
3057 pMem->flags = MEM_Int; 3338 pMem->flags = MEM_Int;
3058 testcase( pMem->u.i<0 ); 3339 testcase( pMem->u.i<0 );
3059 return 3; 3340 return 3;
3060 } 3341 }
3061 case 4: { /* 4-byte signed integer */ 3342 case 4: { /* 4-byte signed integer */
3343 /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
3344 ** twos-complement integer. */
3062 pMem->u.i = FOUR_BYTE_INT(buf); 3345 pMem->u.i = FOUR_BYTE_INT(buf);
3346 #ifdef __HP_cc
3347 /* Work around a sign-extension bug in the HP compiler for HP/UX */
3348 if( buf[0]&0x80 ) pMem->u.i |= 0xffffffff80000000LL;
3349 #endif
3063 pMem->flags = MEM_Int; 3350 pMem->flags = MEM_Int;
3064 testcase( pMem->u.i<0 ); 3351 testcase( pMem->u.i<0 );
3065 return 4; 3352 return 4;
3066 } 3353 }
3067 case 5: { /* 6-byte signed integer */ 3354 case 5: { /* 6-byte signed integer */
3355 /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
3356 ** twos-complement integer. */
3068 pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf); 3357 pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
3069 pMem->flags = MEM_Int; 3358 pMem->flags = MEM_Int;
3070 testcase( pMem->u.i<0 ); 3359 testcase( pMem->u.i<0 );
3071 return 6; 3360 return 6;
3072 } 3361 }
3073 case 6: /* 8-byte signed integer */ 3362 case 6: /* 8-byte signed integer */
3074 case 7: { /* IEEE floating point */ 3363 case 7: { /* IEEE floating point */
3075 /* These use local variables, so do them in a separate routine 3364 /* These use local variables, so do them in a separate routine
3076 ** to avoid having to move the frame pointer in the common case */ 3365 ** to avoid having to move the frame pointer in the common case */
3077 return serialGet(buf,serial_type,pMem); 3366 return serialGet(buf,serial_type,pMem);
3078 } 3367 }
3079 case 8: /* Integer 0 */ 3368 case 8: /* Integer 0 */
3080 case 9: { /* Integer 1 */ 3369 case 9: { /* Integer 1 */
3370 /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */
3371 /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
3081 pMem->u.i = serial_type-8; 3372 pMem->u.i = serial_type-8;
3082 pMem->flags = MEM_Int; 3373 pMem->flags = MEM_Int;
3083 return 0; 3374 return 0;
3084 } 3375 }
3085 default: { 3376 default: {
3377 /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
3378 ** length.
3379 ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and
3380 ** (N-13)/2 bytes in length. */
3086 static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem }; 3381 static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
3087 pMem->z = (char *)buf; 3382 pMem->z = (char *)buf;
3088 pMem->n = (serial_type-12)/2; 3383 pMem->n = (serial_type-12)/2;
3089 pMem->flags = aFlag[serial_type&1]; 3384 pMem->flags = aFlag[serial_type&1];
3090 return pMem->n; 3385 return pMem->n;
3091 } 3386 }
3092 } 3387 }
3093 return 0; 3388 return 0;
3094 } 3389 }
3095 /* 3390 /*
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
3213 /* Compilers may complain that mem1.u.i is potentially uninitialized. 3508 /* Compilers may complain that mem1.u.i is potentially uninitialized.
3214 ** We could initialize it, as shown here, to silence those complaints. 3509 ** We could initialize it, as shown here, to silence those complaints.
3215 ** But in fact, mem1.u.i will never actually be used uninitialized, and doing 3510 ** But in fact, mem1.u.i will never actually be used uninitialized, and doing
3216 ** the unnecessary initialization has a measurable negative performance 3511 ** the unnecessary initialization has a measurable negative performance
3217 ** impact, since this routine is a very high runner. And so, we choose 3512 ** impact, since this routine is a very high runner. And so, we choose
3218 ** to ignore the compiler warnings and leave this variable uninitialized. 3513 ** to ignore the compiler warnings and leave this variable uninitialized.
3219 */ 3514 */
3220 /* mem1.u.i = 0; // not needed, here to silence compiler warning */ 3515 /* mem1.u.i = 0; // not needed, here to silence compiler warning */
3221 3516
3222 idx1 = getVarint32(aKey1, szHdr1); 3517 idx1 = getVarint32(aKey1, szHdr1);
3518 if( szHdr1>98307 ) return SQLITE_CORRUPT;
3223 d1 = szHdr1; 3519 d1 = szHdr1;
3224 assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB ); 3520 assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB );
3225 assert( pKeyInfo->aSortOrder!=0 ); 3521 assert( pKeyInfo->aSortOrder!=0 );
3226 assert( pKeyInfo->nField>0 ); 3522 assert( pKeyInfo->nField>0 );
3227 assert( idx1<=szHdr1 || CORRUPT_DB ); 3523 assert( idx1<=szHdr1 || CORRUPT_DB );
3228 do{ 3524 do{
3229 u32 serial_type1; 3525 u32 serial_type1;
3230 3526
3231 /* Read the serial types for the next element in each key. */ 3527 /* Read the serial types for the next element in each key. */
3232 idx1 += getVarint32( aKey1+idx1, serial_type1 ); 3528 idx1 += getVarint32( aKey1+idx1, serial_type1 );
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3274 debugCompareEnd: 3570 debugCompareEnd:
3275 if( desiredResult==0 && rc==0 ) return 1; 3571 if( desiredResult==0 && rc==0 ) return 1;
3276 if( desiredResult<0 && rc<0 ) return 1; 3572 if( desiredResult<0 && rc<0 ) return 1;
3277 if( desiredResult>0 && rc>0 ) return 1; 3573 if( desiredResult>0 && rc>0 ) return 1;
3278 if( CORRUPT_DB ) return 1; 3574 if( CORRUPT_DB ) return 1;
3279 if( pKeyInfo->db->mallocFailed ) return 1; 3575 if( pKeyInfo->db->mallocFailed ) return 1;
3280 return 0; 3576 return 0;
3281 } 3577 }
3282 #endif 3578 #endif
3283 3579
3580 #if SQLITE_DEBUG
3581 /*
3582 ** Count the number of fields (a.k.a. columns) in the record given by
3583 ** pKey,nKey. The verify that this count is less than or equal to the
3584 ** limit given by pKeyInfo->nField + pKeyInfo->nXField.
3585 **
3586 ** If this constraint is not satisfied, it means that the high-speed
3587 ** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will
3588 ** not work correctly. If this assert() ever fires, it probably means
3589 ** that the KeyInfo.nField or KeyInfo.nXField values were computed
3590 ** incorrectly.
3591 */
3592 static void vdbeAssertFieldCountWithinLimits(
3593 int nKey, const void *pKey, /* The record to verify */
3594 const KeyInfo *pKeyInfo /* Compare size with this KeyInfo */
3595 ){
3596 int nField = 0;
3597 u32 szHdr;
3598 u32 idx;
3599 u32 notUsed;
3600 const unsigned char *aKey = (const unsigned char*)pKey;
3601
3602 if( CORRUPT_DB ) return;
3603 idx = getVarint32(aKey, szHdr);
3604 assert( nKey>=0 );
3605 assert( szHdr<=(u32)nKey );
3606 while( idx<szHdr ){
3607 idx += getVarint32(aKey+idx, notUsed);
3608 nField++;
3609 }
3610 assert( nField <= pKeyInfo->nField+pKeyInfo->nXField );
3611 }
3612 #else
3613 # define vdbeAssertFieldCountWithinLimits(A,B,C)
3614 #endif
3615
3284 /* 3616 /*
3285 ** Both *pMem1 and *pMem2 contain string values. Compare the two values 3617 ** Both *pMem1 and *pMem2 contain string values. Compare the two values
3286 ** using the collation sequence pColl. As usual, return a negative , zero 3618 ** using the collation sequence pColl. As usual, return a negative , zero
3287 ** or positive value if *pMem1 is less than, equal to or greater than 3619 ** or positive value if *pMem1 is less than, equal to or greater than
3288 ** *pMem2, respectively. Similar in spirit to "rc = (*pMem1) - (*pMem2);". 3620 ** *pMem2, respectively. Similar in spirit to "rc = (*pMem1) - (*pMem2);".
3289 */ 3621 */
3290 static int vdbeCompareMemString( 3622 static int vdbeCompareMemString(
3291 const Mem *pMem1, 3623 const Mem *pMem1,
3292 const Mem *pMem2, 3624 const Mem *pMem2,
3293 const CollSeq *pColl, 3625 const CollSeq *pColl,
(...skipping 29 matching lines...) Expand all
3323 ** Compare two blobs. Return negative, zero, or positive if the first 3655 ** Compare two blobs. Return negative, zero, or positive if the first
3324 ** is less than, equal to, or greater than the second, respectively. 3656 ** is less than, equal to, or greater than the second, respectively.
3325 ** If one blob is a prefix of the other, then the shorter is the lessor. 3657 ** If one blob is a prefix of the other, then the shorter is the lessor.
3326 */ 3658 */
3327 static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){ 3659 static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){
3328 int c = memcmp(pB1->z, pB2->z, pB1->n>pB2->n ? pB2->n : pB1->n); 3660 int c = memcmp(pB1->z, pB2->z, pB1->n>pB2->n ? pB2->n : pB1->n);
3329 if( c ) return c; 3661 if( c ) return c;
3330 return pB1->n - pB2->n; 3662 return pB1->n - pB2->n;
3331 } 3663 }
3332 3664
3665 /*
3666 ** Do a comparison between a 64-bit signed integer and a 64-bit floating-point
3667 ** number. Return negative, zero, or positive if the first (i64) is less than,
3668 ** equal to, or greater than the second (double).
3669 */
3670 static int sqlite3IntFloatCompare(i64 i, double r){
3671 if( sizeof(LONGDOUBLE_TYPE)>8 ){
3672 LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i;
3673 if( x<r ) return -1;
3674 if( x>r ) return +1;
3675 return 0;
3676 }else{
3677 i64 y;
3678 double s;
3679 if( r<-9223372036854775808.0 ) return +1;
3680 if( r>9223372036854775807.0 ) return -1;
3681 y = (i64)r;
3682 if( i<y ) return -1;
3683 if( i>y ){
3684 if( y==SMALLEST_INT64 && r>0.0 ) return -1;
3685 return +1;
3686 }
3687 s = (double)i;
3688 if( s<r ) return -1;
3689 if( s>r ) return +1;
3690 return 0;
3691 }
3692 }
3333 3693
3334 /* 3694 /*
3335 ** Compare the values contained by the two memory cells, returning 3695 ** Compare the values contained by the two memory cells, returning
3336 ** negative, zero or positive if pMem1 is less than, equal to, or greater 3696 ** negative, zero or positive if pMem1 is less than, equal to, or greater
3337 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers 3697 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
3338 ** and reals) sorted numerically, followed by text ordered by the collating 3698 ** and reals) sorted numerically, followed by text ordered by the collating
3339 ** sequence pColl and finally blob's ordered by memcmp(). 3699 ** sequence pColl and finally blob's ordered by memcmp().
3340 ** 3700 **
3341 ** Two NULL values are considered equal by this function. 3701 ** Two NULL values are considered equal by this function.
3342 */ 3702 */
3343 int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ 3703 int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
3344 int f1, f2; 3704 int f1, f2;
3345 int combined_flags; 3705 int combined_flags;
3346 3706
3347 f1 = pMem1->flags; 3707 f1 = pMem1->flags;
3348 f2 = pMem2->flags; 3708 f2 = pMem2->flags;
3349 combined_flags = f1|f2; 3709 combined_flags = f1|f2;
3350 assert( (combined_flags & MEM_RowSet)==0 ); 3710 assert( (combined_flags & MEM_RowSet)==0 );
3351 3711
3352 /* If one value is NULL, it is less than the other. If both values 3712 /* If one value is NULL, it is less than the other. If both values
3353 ** are NULL, return 0. 3713 ** are NULL, return 0.
3354 */ 3714 */
3355 if( combined_flags&MEM_Null ){ 3715 if( combined_flags&MEM_Null ){
3356 return (f2&MEM_Null) - (f1&MEM_Null); 3716 return (f2&MEM_Null) - (f1&MEM_Null);
3357 } 3717 }
3358 3718
3359 /* If one value is a number and the other is not, the number is less. 3719 /* At least one of the two values is a number
3360 ** If both are numbers, compare as reals if one is a real, or as integers
3361 ** if both values are integers.
3362 */ 3720 */
3363 if( combined_flags&(MEM_Int|MEM_Real) ){ 3721 if( combined_flags&(MEM_Int|MEM_Real) ){
3364 double r1, r2;
3365 if( (f1 & f2 & MEM_Int)!=0 ){ 3722 if( (f1 & f2 & MEM_Int)!=0 ){
3366 if( pMem1->u.i < pMem2->u.i ) return -1; 3723 if( pMem1->u.i < pMem2->u.i ) return -1;
3367 if( pMem1->u.i > pMem2->u.i ) return 1; 3724 if( pMem1->u.i > pMem2->u.i ) return +1;
3368 return 0; 3725 return 0;
3369 } 3726 }
3727 if( (f1 & f2 & MEM_Real)!=0 ){
3728 if( pMem1->u.r < pMem2->u.r ) return -1;
3729 if( pMem1->u.r > pMem2->u.r ) return +1;
3730 return 0;
3731 }
3732 if( (f1&MEM_Int)!=0 ){
3733 if( (f2&MEM_Real)!=0 ){
3734 return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r);
3735 }else{
3736 return -1;
3737 }
3738 }
3370 if( (f1&MEM_Real)!=0 ){ 3739 if( (f1&MEM_Real)!=0 ){
3371 r1 = pMem1->u.r; 3740 if( (f2&MEM_Int)!=0 ){
3372 }else if( (f1&MEM_Int)!=0 ){ 3741 return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r);
3373 r1 = (double)pMem1->u.i; 3742 }else{
3374 }else{ 3743 return -1;
3375 return 1; 3744 }
3376 } 3745 }
3377 if( (f2&MEM_Real)!=0 ){ 3746 return +1;
3378 r2 = pMem2->u.r;
3379 }else if( (f2&MEM_Int)!=0 ){
3380 r2 = (double)pMem2->u.i;
3381 }else{
3382 return -1;
3383 }
3384 if( r1<r2 ) return -1;
3385 if( r1>r2 ) return 1;
3386 return 0;
3387 } 3747 }
3388 3748
3389 /* If one value is a string and the other is a blob, the string is less. 3749 /* If one value is a string and the other is a blob, the string is less.
3390 ** If both are strings, compare using the collating functions. 3750 ** If both are strings, compare using the collating functions.
3391 */ 3751 */
3392 if( combined_flags&MEM_Str ){ 3752 if( combined_flags&MEM_Str ){
3393 if( (f1 & MEM_Str)==0 ){ 3753 if( (f1 & MEM_Str)==0 ){
3394 return 1; 3754 return 1;
3395 } 3755 }
3396 if( (f2 & MEM_Str)==0 ){ 3756 if( (f2 & MEM_Str)==0 ){
3397 return -1; 3757 return -1;
3398 } 3758 }
3399 3759
3400 assert( pMem1->enc==pMem2->enc ); 3760 assert( pMem1->enc==pMem2->enc || pMem1->db->mallocFailed );
3401 assert( pMem1->enc==SQLITE_UTF8 || 3761 assert( pMem1->enc==SQLITE_UTF8 ||
3402 pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE ); 3762 pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
3403 3763
3404 /* The collation sequence must be defined at this point, even if 3764 /* The collation sequence must be defined at this point, even if
3405 ** the user deletes the collation sequence after the vdbe program is 3765 ** the user deletes the collation sequence after the vdbe program is
3406 ** compiled (this was not always the case). 3766 ** compiled (this was not always the case).
3407 */ 3767 */
3408 assert( !pColl || pColl->xCmp ); 3768 assert( !pColl || pColl->xCmp );
3409 3769
3410 if( pColl ){ 3770 if( pColl ){
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
3474 ** 3834 **
3475 ** Key1 and Key2 do not have to contain the same number of fields. If all 3835 ** Key1 and Key2 do not have to contain the same number of fields. If all
3476 ** fields that appear in both keys are equal, then pPKey2->default_rc is 3836 ** fields that appear in both keys are equal, then pPKey2->default_rc is
3477 ** returned. 3837 ** returned.
3478 ** 3838 **
3479 ** If database corruption is discovered, set pPKey2->errCode to 3839 ** If database corruption is discovered, set pPKey2->errCode to
3480 ** SQLITE_CORRUPT and return 0. If an OOM error is encountered, 3840 ** SQLITE_CORRUPT and return 0. If an OOM error is encountered,
3481 ** pPKey2->errCode is set to SQLITE_NOMEM and, if it is not NULL, the 3841 ** pPKey2->errCode is set to SQLITE_NOMEM and, if it is not NULL, the
3482 ** malloc-failed flag set on database handle (pPKey2->pKeyInfo->db). 3842 ** malloc-failed flag set on database handle (pPKey2->pKeyInfo->db).
3483 */ 3843 */
3484 static int vdbeRecordCompareWithSkip( 3844 int sqlite3VdbeRecordCompareWithSkip(
3485 int nKey1, const void *pKey1, /* Left key */ 3845 int nKey1, const void *pKey1, /* Left key */
3486 UnpackedRecord *pPKey2, /* Right key */ 3846 UnpackedRecord *pPKey2, /* Right key */
3487 int bSkip /* If true, skip the first field */ 3847 int bSkip /* If true, skip the first field */
3488 ){ 3848 ){
3489 u32 d1; /* Offset into aKey[] of next data element */ 3849 u32 d1; /* Offset into aKey[] of next data element */
3490 int i; /* Index of next field to compare */ 3850 int i; /* Index of next field to compare */
3491 u32 szHdr1; /* Size of record header in bytes */ 3851 u32 szHdr1; /* Size of record header in bytes */
3492 u32 idx1; /* Offset of first type in header */ 3852 u32 idx1; /* Offset of first type in header */
3493 int rc = 0; /* Return value */ 3853 int rc = 0; /* Return value */
3494 Mem *pRhs = pPKey2->aMem; /* Next field of pPKey2 to compare */ 3854 Mem *pRhs = pPKey2->aMem; /* Next field of pPKey2 to compare */
(...skipping 27 matching lines...) Expand all
3522 assert( pPKey2->pKeyInfo->aSortOrder!=0 ); 3882 assert( pPKey2->pKeyInfo->aSortOrder!=0 );
3523 assert( pPKey2->pKeyInfo->nField>0 ); 3883 assert( pPKey2->pKeyInfo->nField>0 );
3524 assert( idx1<=szHdr1 || CORRUPT_DB ); 3884 assert( idx1<=szHdr1 || CORRUPT_DB );
3525 do{ 3885 do{
3526 u32 serial_type; 3886 u32 serial_type;
3527 3887
3528 /* RHS is an integer */ 3888 /* RHS is an integer */
3529 if( pRhs->flags & MEM_Int ){ 3889 if( pRhs->flags & MEM_Int ){
3530 serial_type = aKey1[idx1]; 3890 serial_type = aKey1[idx1];
3531 testcase( serial_type==12 ); 3891 testcase( serial_type==12 );
3532 if( serial_type>=12 ){ 3892 if( serial_type>=10 ){
3533 rc = +1; 3893 rc = +1;
3534 }else if( serial_type==0 ){ 3894 }else if( serial_type==0 ){
3535 rc = -1; 3895 rc = -1;
3536 }else if( serial_type==7 ){ 3896 }else if( serial_type==7 ){
3537 double rhs = (double)pRhs->u.i;
3538 sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); 3897 sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
3539 if( mem1.u.r<rhs ){ 3898 rc = -sqlite3IntFloatCompare(pRhs->u.i, mem1.u.r);
3540 rc = -1;
3541 }else if( mem1.u.r>rhs ){
3542 rc = +1;
3543 }
3544 }else{ 3899 }else{
3545 i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]); 3900 i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]);
3546 i64 rhs = pRhs->u.i; 3901 i64 rhs = pRhs->u.i;
3547 if( lhs<rhs ){ 3902 if( lhs<rhs ){
3548 rc = -1; 3903 rc = -1;
3549 }else if( lhs>rhs ){ 3904 }else if( lhs>rhs ){
3550 rc = +1; 3905 rc = +1;
3551 } 3906 }
3552 } 3907 }
3553 } 3908 }
3554 3909
3555 /* RHS is real */ 3910 /* RHS is real */
3556 else if( pRhs->flags & MEM_Real ){ 3911 else if( pRhs->flags & MEM_Real ){
3557 serial_type = aKey1[idx1]; 3912 serial_type = aKey1[idx1];
3558 if( serial_type>=12 ){ 3913 if( serial_type>=10 ){
3914 /* Serial types 12 or greater are strings and blobs (greater than
3915 ** numbers). Types 10 and 11 are currently "reserved for future
3916 ** use", so it doesn't really matter what the results of comparing
3917 ** them to numberic values are. */
3559 rc = +1; 3918 rc = +1;
3560 }else if( serial_type==0 ){ 3919 }else if( serial_type==0 ){
3561 rc = -1; 3920 rc = -1;
3562 }else{ 3921 }else{
3563 double rhs = pRhs->u.r;
3564 double lhs;
3565 sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); 3922 sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
3566 if( serial_type==7 ){ 3923 if( serial_type==7 ){
3567 lhs = mem1.u.r; 3924 if( mem1.u.r<pRhs->u.r ){
3925 rc = -1;
3926 }else if( mem1.u.r>pRhs->u.r ){
3927 rc = +1;
3928 }
3568 }else{ 3929 }else{
3569 lhs = (double)mem1.u.i; 3930 rc = sqlite3IntFloatCompare(mem1.u.i, pRhs->u.r);
3570 }
3571 if( lhs<rhs ){
3572 rc = -1;
3573 }else if( lhs>rhs ){
3574 rc = +1;
3575 } 3931 }
3576 } 3932 }
3577 } 3933 }
3578 3934
3579 /* RHS is a string */ 3935 /* RHS is a string */
3580 else if( pRhs->flags & MEM_Str ){ 3936 else if( pRhs->flags & MEM_Str ){
3581 getVarint32(&aKey1[idx1], serial_type); 3937 getVarint32(&aKey1[idx1], serial_type);
3582 testcase( serial_type==12 ); 3938 testcase( serial_type==12 );
3583 if( serial_type<12 ){ 3939 if( serial_type<12 ){
3584 rc = -1; 3940 rc = -1;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
3654 ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). */ 4010 ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). */
3655 assert( mem1.szMalloc==0 ); 4011 assert( mem1.szMalloc==0 );
3656 4012
3657 /* rc==0 here means that one or both of the keys ran out of fields and 4013 /* rc==0 here means that one or both of the keys ran out of fields and
3658 ** all the fields up to that point were equal. Return the default_rc 4014 ** all the fields up to that point were equal. Return the default_rc
3659 ** value. */ 4015 ** value. */
3660 assert( CORRUPT_DB 4016 assert( CORRUPT_DB
3661 || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc) 4017 || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc)
3662 || pKeyInfo->db->mallocFailed 4018 || pKeyInfo->db->mallocFailed
3663 ); 4019 );
4020 pPKey2->eqSeen = 1;
3664 return pPKey2->default_rc; 4021 return pPKey2->default_rc;
3665 } 4022 }
3666 int sqlite3VdbeRecordCompare( 4023 int sqlite3VdbeRecordCompare(
3667 int nKey1, const void *pKey1, /* Left key */ 4024 int nKey1, const void *pKey1, /* Left key */
3668 UnpackedRecord *pPKey2 /* Right key */ 4025 UnpackedRecord *pPKey2 /* Right key */
3669 ){ 4026 ){
3670 return vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 0); 4027 return sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 0);
3671 } 4028 }
3672 4029
3673 4030
3674 /* 4031 /*
3675 ** This function is an optimized version of sqlite3VdbeRecordCompare() 4032 ** This function is an optimized version of sqlite3VdbeRecordCompare()
3676 ** that (a) the first field of pPKey2 is an integer, and (b) the 4033 ** that (a) the first field of pPKey2 is an integer, and (b) the
3677 ** size-of-header varint at the start of (pKey1/nKey1) fits in a single 4034 ** size-of-header varint at the start of (pKey1/nKey1) fits in a single
3678 ** byte (i.e. is less than 128). 4035 ** byte (i.e. is less than 128).
3679 ** 4036 **
3680 ** To avoid concerns about buffer overreads, this routine is only used 4037 ** To avoid concerns about buffer overreads, this routine is only used
3681 ** on schemas where the maximum valid header size is 63 bytes or less. 4038 ** on schemas where the maximum valid header size is 63 bytes or less.
3682 */ 4039 */
3683 static int vdbeRecordCompareInt( 4040 static int vdbeRecordCompareInt(
3684 int nKey1, const void *pKey1, /* Left key */ 4041 int nKey1, const void *pKey1, /* Left key */
3685 UnpackedRecord *pPKey2 /* Right key */ 4042 UnpackedRecord *pPKey2 /* Right key */
3686 ){ 4043 ){
3687 const u8 *aKey = &((const u8*)pKey1)[*(const u8*)pKey1 & 0x3F]; 4044 const u8 *aKey = &((const u8*)pKey1)[*(const u8*)pKey1 & 0x3F];
3688 int serial_type = ((const u8*)pKey1)[1]; 4045 int serial_type = ((const u8*)pKey1)[1];
3689 int res; 4046 int res;
3690 u32 y; 4047 u32 y;
3691 u64 x; 4048 u64 x;
3692 i64 v = pPKey2->aMem[0].u.i; 4049 i64 v = pPKey2->aMem[0].u.i;
3693 i64 lhs; 4050 i64 lhs;
3694 4051
4052 vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo);
3695 assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB ); 4053 assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB );
3696 switch( serial_type ){ 4054 switch( serial_type ){
3697 case 1: { /* 1-byte signed integer */ 4055 case 1: { /* 1-byte signed integer */
3698 lhs = ONE_BYTE_INT(aKey); 4056 lhs = ONE_BYTE_INT(aKey);
3699 testcase( lhs<0 ); 4057 testcase( lhs<0 );
3700 break; 4058 break;
3701 } 4059 }
3702 case 2: { /* 2-byte signed integer */ 4060 case 2: { /* 2-byte signed integer */
3703 lhs = TWO_BYTE_INT(aKey); 4061 lhs = TWO_BYTE_INT(aKey);
3704 testcase( lhs<0 ); 4062 testcase( lhs<0 );
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
3747 return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2); 4105 return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2);
3748 } 4106 }
3749 4107
3750 if( v>lhs ){ 4108 if( v>lhs ){
3751 res = pPKey2->r1; 4109 res = pPKey2->r1;
3752 }else if( v<lhs ){ 4110 }else if( v<lhs ){
3753 res = pPKey2->r2; 4111 res = pPKey2->r2;
3754 }else if( pPKey2->nField>1 ){ 4112 }else if( pPKey2->nField>1 ){
3755 /* The first fields of the two keys are equal. Compare the trailing 4113 /* The first fields of the two keys are equal. Compare the trailing
3756 ** fields. */ 4114 ** fields. */
3757 res = vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1); 4115 res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
3758 }else{ 4116 }else{
3759 /* The first fields of the two keys are equal and there are no trailing 4117 /* The first fields of the two keys are equal and there are no trailing
3760 ** fields. Return pPKey2->default_rc in this case. */ 4118 ** fields. Return pPKey2->default_rc in this case. */
3761 res = pPKey2->default_rc; 4119 res = pPKey2->default_rc;
4120 pPKey2->eqSeen = 1;
3762 } 4121 }
3763 4122
3764 assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) ); 4123 assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) );
3765 return res; 4124 return res;
3766 } 4125 }
3767 4126
3768 /* 4127 /*
3769 ** This function is an optimized version of sqlite3VdbeRecordCompare() 4128 ** This function is an optimized version of sqlite3VdbeRecordCompare()
3770 ** that (a) the first field of pPKey2 is a string, that (b) the first field 4129 ** that (a) the first field of pPKey2 is a string, that (b) the first field
3771 ** uses the collation sequence BINARY and (c) that the size-of-header varint 4130 ** uses the collation sequence BINARY and (c) that the size-of-header varint
3772 ** at the start of (pKey1/nKey1) fits in a single byte. 4131 ** at the start of (pKey1/nKey1) fits in a single byte.
3773 */ 4132 */
3774 static int vdbeRecordCompareString( 4133 static int vdbeRecordCompareString(
3775 int nKey1, const void *pKey1, /* Left key */ 4134 int nKey1, const void *pKey1, /* Left key */
3776 UnpackedRecord *pPKey2 /* Right key */ 4135 UnpackedRecord *pPKey2 /* Right key */
3777 ){ 4136 ){
3778 const u8 *aKey1 = (const u8*)pKey1; 4137 const u8 *aKey1 = (const u8*)pKey1;
3779 int serial_type; 4138 int serial_type;
3780 int res; 4139 int res;
3781 4140
4141 assert( pPKey2->aMem[0].flags & MEM_Str );
4142 vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo);
3782 getVarint32(&aKey1[1], serial_type); 4143 getVarint32(&aKey1[1], serial_type);
3783 if( serial_type<12 ){ 4144 if( serial_type<12 ){
3784 res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */ 4145 res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */
3785 }else if( !(serial_type & 0x01) ){ 4146 }else if( !(serial_type & 0x01) ){
3786 res = pPKey2->r2; /* (pKey1/nKey1) is a blob */ 4147 res = pPKey2->r2; /* (pKey1/nKey1) is a blob */
3787 }else{ 4148 }else{
3788 int nCmp; 4149 int nCmp;
3789 int nStr; 4150 int nStr;
3790 int szHdr = aKey1[0]; 4151 int szHdr = aKey1[0];
3791 4152
3792 nStr = (serial_type-12) / 2; 4153 nStr = (serial_type-12) / 2;
3793 if( (szHdr + nStr) > nKey1 ){ 4154 if( (szHdr + nStr) > nKey1 ){
3794 pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; 4155 pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
3795 return 0; /* Corruption */ 4156 return 0; /* Corruption */
3796 } 4157 }
3797 nCmp = MIN( pPKey2->aMem[0].n, nStr ); 4158 nCmp = MIN( pPKey2->aMem[0].n, nStr );
3798 res = memcmp(&aKey1[szHdr], pPKey2->aMem[0].z, nCmp); 4159 res = memcmp(&aKey1[szHdr], pPKey2->aMem[0].z, nCmp);
3799 4160
3800 if( res==0 ){ 4161 if( res==0 ){
3801 res = nStr - pPKey2->aMem[0].n; 4162 res = nStr - pPKey2->aMem[0].n;
3802 if( res==0 ){ 4163 if( res==0 ){
3803 if( pPKey2->nField>1 ){ 4164 if( pPKey2->nField>1 ){
3804 res = vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1); 4165 res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
3805 }else{ 4166 }else{
3806 res = pPKey2->default_rc; 4167 res = pPKey2->default_rc;
4168 pPKey2->eqSeen = 1;
3807 } 4169 }
3808 }else if( res>0 ){ 4170 }else if( res>0 ){
3809 res = pPKey2->r2; 4171 res = pPKey2->r2;
3810 }else{ 4172 }else{
3811 res = pPKey2->r1; 4173 res = pPKey2->r1;
3812 } 4174 }
3813 }else if( res>0 ){ 4175 }else if( res>0 ){
3814 res = pPKey2->r2; 4176 res = pPKey2->r2;
3815 }else{ 4177 }else{
3816 res = pPKey2->r1; 4178 res = pPKey2->r1;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
3915 testcase( typeRowid==2 ); 4277 testcase( typeRowid==2 );
3916 testcase( typeRowid==3 ); 4278 testcase( typeRowid==3 );
3917 testcase( typeRowid==4 ); 4279 testcase( typeRowid==4 );
3918 testcase( typeRowid==5 ); 4280 testcase( typeRowid==5 );
3919 testcase( typeRowid==6 ); 4281 testcase( typeRowid==6 );
3920 testcase( typeRowid==8 ); 4282 testcase( typeRowid==8 );
3921 testcase( typeRowid==9 ); 4283 testcase( typeRowid==9 );
3922 if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){ 4284 if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
3923 goto idx_rowid_corruption; 4285 goto idx_rowid_corruption;
3924 } 4286 }
3925 lenRowid = sqlite3VdbeSerialTypeLen(typeRowid); 4287 lenRowid = sqlite3SmallTypeSizes[typeRowid];
3926 testcase( (u32)m.n==szHdr+lenRowid ); 4288 testcase( (u32)m.n==szHdr+lenRowid );
3927 if( unlikely((u32)m.n<szHdr+lenRowid) ){ 4289 if( unlikely((u32)m.n<szHdr+lenRowid) ){
3928 goto idx_rowid_corruption; 4290 goto idx_rowid_corruption;
3929 } 4291 }
3930 4292
3931 /* Fetch the integer off the end of the index record */ 4293 /* Fetch the integer off the end of the index record */
3932 sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v); 4294 sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
3933 *rowid = v.u.i; 4295 *rowid = v.u.i;
3934 sqlite3VdbeMemRelease(&m); 4296 sqlite3VdbeMemRelease(&m);
3935 return SQLITE_OK; 4297 return SQLITE_OK;
(...skipping 18 matching lines...) Expand all
3954 ** of the keys prior to the final rowid, not the entire key. 4316 ** of the keys prior to the final rowid, not the entire key.
3955 */ 4317 */
3956 int sqlite3VdbeIdxKeyCompare( 4318 int sqlite3VdbeIdxKeyCompare(
3957 sqlite3 *db, /* Database connection */ 4319 sqlite3 *db, /* Database connection */
3958 VdbeCursor *pC, /* The cursor to compare against */ 4320 VdbeCursor *pC, /* The cursor to compare against */
3959 UnpackedRecord *pUnpacked, /* Unpacked version of key */ 4321 UnpackedRecord *pUnpacked, /* Unpacked version of key */
3960 int *res /* Write the comparison result here */ 4322 int *res /* Write the comparison result here */
3961 ){ 4323 ){
3962 i64 nCellKey = 0; 4324 i64 nCellKey = 0;
3963 int rc; 4325 int rc;
3964 BtCursor *pCur = pC->pCursor; 4326 BtCursor *pCur;
3965 Mem m; 4327 Mem m;
3966 4328
4329 assert( pC->eCurType==CURTYPE_BTREE );
4330 pCur = pC->uc.pCursor;
3967 assert( sqlite3BtreeCursorIsValid(pCur) ); 4331 assert( sqlite3BtreeCursorIsValid(pCur) );
3968 VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey); 4332 VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey);
3969 assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */ 4333 assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */
3970 /* nCellKey will always be between 0 and 0xffffffff because of the way 4334 /* nCellKey will always be between 0 and 0xffffffff because of the way
3971 ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */ 4335 ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
3972 if( nCellKey<=0 || nCellKey>0x7fffffff ){ 4336 if( nCellKey<=0 || nCellKey>0x7fffffff ){
3973 *res = 0; 4337 *res = 0;
3974 return SQLITE_CORRUPT_BKPT; 4338 return SQLITE_CORRUPT_BKPT;
3975 } 4339 }
3976 sqlite3VdbeMemInit(&m, db, 0); 4340 sqlite3VdbeMemInit(&m, db, 0);
3977 rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (u32)nCellKey, 1, &m); 4341 rc = sqlite3VdbeMemFromBtree(pCur, 0, (u32)nCellKey, 1, &m);
3978 if( rc ){ 4342 if( rc ){
3979 return rc; 4343 return rc;
3980 } 4344 }
3981 *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked); 4345 *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
3982 sqlite3VdbeMemRelease(&m); 4346 sqlite3VdbeMemRelease(&m);
3983 return SQLITE_OK; 4347 return SQLITE_OK;
3984 } 4348 }
3985 4349
3986 /* 4350 /*
3987 ** This routine sets the value to be returned by subsequent calls to 4351 ** This routine sets the value to be returned by subsequent calls to
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
4070 ** in memory obtained from sqlite3DbMalloc). 4434 ** in memory obtained from sqlite3DbMalloc).
4071 */ 4435 */
4072 void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){ 4436 void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){
4073 sqlite3 *db = p->db; 4437 sqlite3 *db = p->db;
4074 sqlite3DbFree(db, p->zErrMsg); 4438 sqlite3DbFree(db, p->zErrMsg);
4075 p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); 4439 p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
4076 sqlite3_free(pVtab->zErrMsg); 4440 sqlite3_free(pVtab->zErrMsg);
4077 pVtab->zErrMsg = 0; 4441 pVtab->zErrMsg = 0;
4078 } 4442 }
4079 #endif /* SQLITE_OMIT_VIRTUALTABLE */ 4443 #endif /* SQLITE_OMIT_VIRTUALTABLE */
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3100200/src/vdbeapi.c ('k') | third_party/sqlite/sqlite-src-3100200/src/vdbeblob.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698