OLD | NEW |
1 /* | 1 /* |
2 ** 2004 May 26 | 2 ** 2004 May 26 |
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 } | 46 } |
47 static int vdbeSafetyNotNull(Vdbe *p){ | 47 static int vdbeSafetyNotNull(Vdbe *p){ |
48 if( p==0 ){ | 48 if( p==0 ){ |
49 sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement"); | 49 sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement"); |
50 return 1; | 50 return 1; |
51 }else{ | 51 }else{ |
52 return vdbeSafety(p); | 52 return vdbeSafety(p); |
53 } | 53 } |
54 } | 54 } |
55 | 55 |
| 56 #ifndef SQLITE_OMIT_TRACE |
| 57 /* |
| 58 ** Invoke the profile callback. This routine is only called if we already |
| 59 ** know that the profile callback is defined and needs to be invoked. |
| 60 */ |
| 61 static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){ |
| 62 sqlite3_int64 iNow; |
| 63 assert( p->startTime>0 ); |
| 64 assert( db->xProfile!=0 ); |
| 65 assert( db->init.busy==0 ); |
| 66 assert( p->zSql!=0 ); |
| 67 sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); |
| 68 db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000); |
| 69 p->startTime = 0; |
| 70 } |
| 71 /* |
| 72 ** The checkProfileCallback(DB,P) macro checks to see if a profile callback |
| 73 ** is needed, and it invokes the callback if it is needed. |
| 74 */ |
| 75 # define checkProfileCallback(DB,P) \ |
| 76 if( ((P)->startTime)>0 ){ invokeProfileCallback(DB,P); } |
| 77 #else |
| 78 # define checkProfileCallback(DB,P) /*no-op*/ |
| 79 #endif |
| 80 |
56 /* | 81 /* |
57 ** The following routine destroys a virtual machine that is created by | 82 ** The following routine destroys a virtual machine that is created by |
58 ** the sqlite3_compile() routine. The integer returned is an SQLITE_ | 83 ** the sqlite3_compile() routine. The integer returned is an SQLITE_ |
59 ** success/failure code that describes the result of executing the virtual | 84 ** success/failure code that describes the result of executing the virtual |
60 ** machine. | 85 ** machine. |
61 ** | 86 ** |
62 ** This routine sets the error code and string returned by | 87 ** This routine sets the error code and string returned by |
63 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). | 88 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). |
64 */ | 89 */ |
65 int sqlite3_finalize(sqlite3_stmt *pStmt){ | 90 int sqlite3_finalize(sqlite3_stmt *pStmt){ |
66 int rc; | 91 int rc; |
67 if( pStmt==0 ){ | 92 if( pStmt==0 ){ |
68 /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL | 93 /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL |
69 ** pointer is a harmless no-op. */ | 94 ** pointer is a harmless no-op. */ |
70 rc = SQLITE_OK; | 95 rc = SQLITE_OK; |
71 }else{ | 96 }else{ |
72 Vdbe *v = (Vdbe*)pStmt; | 97 Vdbe *v = (Vdbe*)pStmt; |
73 sqlite3 *db = v->db; | 98 sqlite3 *db = v->db; |
74 if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; | 99 if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; |
75 sqlite3_mutex_enter(db->mutex); | 100 sqlite3_mutex_enter(db->mutex); |
| 101 checkProfileCallback(db, v); |
76 rc = sqlite3VdbeFinalize(v); | 102 rc = sqlite3VdbeFinalize(v); |
77 rc = sqlite3ApiExit(db, rc); | 103 rc = sqlite3ApiExit(db, rc); |
78 sqlite3LeaveMutexAndCloseZombie(db); | 104 sqlite3LeaveMutexAndCloseZombie(db); |
79 } | 105 } |
80 return rc; | 106 return rc; |
81 } | 107 } |
82 | 108 |
83 /* | 109 /* |
84 ** Terminate the current execution of an SQL statement and reset it | 110 ** Terminate the current execution of an SQL statement and reset it |
85 ** back to its starting state so that it can be reused. A success code from | 111 ** back to its starting state so that it can be reused. A success code from |
86 ** the prior execution is returned. | 112 ** the prior execution is returned. |
87 ** | 113 ** |
88 ** This routine sets the error code and string returned by | 114 ** This routine sets the error code and string returned by |
89 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). | 115 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). |
90 */ | 116 */ |
91 int sqlite3_reset(sqlite3_stmt *pStmt){ | 117 int sqlite3_reset(sqlite3_stmt *pStmt){ |
92 int rc; | 118 int rc; |
93 if( pStmt==0 ){ | 119 if( pStmt==0 ){ |
94 rc = SQLITE_OK; | 120 rc = SQLITE_OK; |
95 }else{ | 121 }else{ |
96 Vdbe *v = (Vdbe*)pStmt; | 122 Vdbe *v = (Vdbe*)pStmt; |
97 sqlite3_mutex_enter(v->db->mutex); | 123 sqlite3 *db = v->db; |
| 124 sqlite3_mutex_enter(db->mutex); |
| 125 checkProfileCallback(db, v); |
98 rc = sqlite3VdbeReset(v); | 126 rc = sqlite3VdbeReset(v); |
99 sqlite3VdbeRewind(v); | 127 sqlite3VdbeRewind(v); |
100 assert( (rc & (v->db->errMask))==rc ); | 128 assert( (rc & (db->errMask))==rc ); |
101 rc = sqlite3ApiExit(v->db, rc); | 129 rc = sqlite3ApiExit(db, rc); |
102 sqlite3_mutex_leave(v->db->mutex); | 130 sqlite3_mutex_leave(db->mutex); |
103 } | 131 } |
104 return rc; | 132 return rc; |
105 } | 133 } |
106 | 134 |
107 /* | 135 /* |
108 ** Set all the parameters in the compiled SQL statement to NULL. | 136 ** Set all the parameters in the compiled SQL statement to NULL. |
109 */ | 137 */ |
110 int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ | 138 int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ |
111 int i; | 139 int i; |
112 int rc = SQLITE_OK; | 140 int rc = SQLITE_OK; |
(...skipping 14 matching lines...) Expand all Loading... |
127 } | 155 } |
128 | 156 |
129 | 157 |
130 /**************************** sqlite3_value_ ******************************* | 158 /**************************** sqlite3_value_ ******************************* |
131 ** The following routines extract information from a Mem or sqlite3_value | 159 ** The following routines extract information from a Mem or sqlite3_value |
132 ** structure. | 160 ** structure. |
133 */ | 161 */ |
134 const void *sqlite3_value_blob(sqlite3_value *pVal){ | 162 const void *sqlite3_value_blob(sqlite3_value *pVal){ |
135 Mem *p = (Mem*)pVal; | 163 Mem *p = (Mem*)pVal; |
136 if( p->flags & (MEM_Blob|MEM_Str) ){ | 164 if( p->flags & (MEM_Blob|MEM_Str) ){ |
137 sqlite3VdbeMemExpandBlob(p); | 165 if( sqlite3VdbeMemExpandBlob(p)!=SQLITE_OK ){ |
| 166 assert( p->flags==MEM_Null && p->z==0 ); |
| 167 return 0; |
| 168 } |
138 p->flags |= MEM_Blob; | 169 p->flags |= MEM_Blob; |
139 return p->n ? p->z : 0; | 170 return p->n ? p->z : 0; |
140 }else{ | 171 }else{ |
141 return sqlite3_value_text(pVal); | 172 return sqlite3_value_text(pVal); |
142 } | 173 } |
143 } | 174 } |
144 int sqlite3_value_bytes(sqlite3_value *pVal){ | 175 int sqlite3_value_bytes(sqlite3_value *pVal){ |
145 return sqlite3ValueBytes(pVal, SQLITE_UTF8); | 176 return sqlite3ValueBytes(pVal, SQLITE_UTF8); |
146 } | 177 } |
147 int sqlite3_value_bytes16(sqlite3_value *pVal){ | 178 int sqlite3_value_bytes16(sqlite3_value *pVal){ |
148 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); | 179 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); |
149 } | 180 } |
150 double sqlite3_value_double(sqlite3_value *pVal){ | 181 double sqlite3_value_double(sqlite3_value *pVal){ |
151 return sqlite3VdbeRealValue((Mem*)pVal); | 182 return sqlite3VdbeRealValue((Mem*)pVal); |
152 } | 183 } |
153 int sqlite3_value_int(sqlite3_value *pVal){ | 184 int sqlite3_value_int(sqlite3_value *pVal){ |
154 return (int)sqlite3VdbeIntValue((Mem*)pVal); | 185 return (int)sqlite3VdbeIntValue((Mem*)pVal); |
155 } | 186 } |
156 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ | 187 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ |
157 return sqlite3VdbeIntValue((Mem*)pVal); | 188 return sqlite3VdbeIntValue((Mem*)pVal); |
158 } | 189 } |
| 190 unsigned int sqlite3_value_subtype(sqlite3_value *pVal){ |
| 191 return ((Mem*)pVal)->eSubtype; |
| 192 } |
159 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ | 193 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ |
160 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); | 194 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); |
161 } | 195 } |
162 #ifndef SQLITE_OMIT_UTF16 | 196 #ifndef SQLITE_OMIT_UTF16 |
163 const void *sqlite3_value_text16(sqlite3_value* pVal){ | 197 const void *sqlite3_value_text16(sqlite3_value* pVal){ |
164 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); | 198 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); |
165 } | 199 } |
166 const void *sqlite3_value_text16be(sqlite3_value *pVal){ | 200 const void *sqlite3_value_text16be(sqlite3_value *pVal){ |
167 return sqlite3ValueText(pVal, SQLITE_UTF16BE); | 201 return sqlite3ValueText(pVal, SQLITE_UTF16BE); |
168 } | 202 } |
169 const void *sqlite3_value_text16le(sqlite3_value *pVal){ | 203 const void *sqlite3_value_text16le(sqlite3_value *pVal){ |
170 return sqlite3ValueText(pVal, SQLITE_UTF16LE); | 204 return sqlite3ValueText(pVal, SQLITE_UTF16LE); |
171 } | 205 } |
172 #endif /* SQLITE_OMIT_UTF16 */ | 206 #endif /* SQLITE_OMIT_UTF16 */ |
| 207 /* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five |
| 208 ** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating |
| 209 ** point number string BLOB NULL |
| 210 */ |
173 int sqlite3_value_type(sqlite3_value* pVal){ | 211 int sqlite3_value_type(sqlite3_value* pVal){ |
174 static const u8 aType[] = { | 212 static const u8 aType[] = { |
175 SQLITE_BLOB, /* 0x00 */ | 213 SQLITE_BLOB, /* 0x00 */ |
176 SQLITE_NULL, /* 0x01 */ | 214 SQLITE_NULL, /* 0x01 */ |
177 SQLITE_TEXT, /* 0x02 */ | 215 SQLITE_TEXT, /* 0x02 */ |
178 SQLITE_NULL, /* 0x03 */ | 216 SQLITE_NULL, /* 0x03 */ |
179 SQLITE_INTEGER, /* 0x04 */ | 217 SQLITE_INTEGER, /* 0x04 */ |
180 SQLITE_NULL, /* 0x05 */ | 218 SQLITE_NULL, /* 0x05 */ |
181 SQLITE_INTEGER, /* 0x06 */ | 219 SQLITE_INTEGER, /* 0x06 */ |
182 SQLITE_NULL, /* 0x07 */ | 220 SQLITE_NULL, /* 0x07 */ |
(...skipping 18 matching lines...) Expand all Loading... |
201 SQLITE_FLOAT, /* 0x1a */ | 239 SQLITE_FLOAT, /* 0x1a */ |
202 SQLITE_NULL, /* 0x1b */ | 240 SQLITE_NULL, /* 0x1b */ |
203 SQLITE_INTEGER, /* 0x1c */ | 241 SQLITE_INTEGER, /* 0x1c */ |
204 SQLITE_NULL, /* 0x1d */ | 242 SQLITE_NULL, /* 0x1d */ |
205 SQLITE_INTEGER, /* 0x1e */ | 243 SQLITE_INTEGER, /* 0x1e */ |
206 SQLITE_NULL, /* 0x1f */ | 244 SQLITE_NULL, /* 0x1f */ |
207 }; | 245 }; |
208 return aType[pVal->flags&MEM_AffMask]; | 246 return aType[pVal->flags&MEM_AffMask]; |
209 } | 247 } |
210 | 248 |
| 249 /* Make a copy of an sqlite3_value object |
| 250 */ |
| 251 sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){ |
| 252 sqlite3_value *pNew; |
| 253 if( pOrig==0 ) return 0; |
| 254 pNew = sqlite3_malloc( sizeof(*pNew) ); |
| 255 if( pNew==0 ) return 0; |
| 256 memset(pNew, 0, sizeof(*pNew)); |
| 257 memcpy(pNew, pOrig, MEMCELLSIZE); |
| 258 pNew->flags &= ~MEM_Dyn; |
| 259 pNew->db = 0; |
| 260 if( pNew->flags&(MEM_Str|MEM_Blob) ){ |
| 261 pNew->flags &= ~(MEM_Static|MEM_Dyn); |
| 262 pNew->flags |= MEM_Ephem; |
| 263 if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){ |
| 264 sqlite3ValueFree(pNew); |
| 265 pNew = 0; |
| 266 } |
| 267 } |
| 268 return pNew; |
| 269 } |
| 270 |
| 271 /* Destroy an sqlite3_value object previously obtained from |
| 272 ** sqlite3_value_dup(). |
| 273 */ |
| 274 void sqlite3_value_free(sqlite3_value *pOld){ |
| 275 sqlite3ValueFree(pOld); |
| 276 } |
| 277 |
| 278 |
211 /**************************** sqlite3_result_ ******************************* | 279 /**************************** sqlite3_result_ ******************************* |
212 ** The following routines are used by user-defined functions to specify | 280 ** The following routines are used by user-defined functions to specify |
213 ** the function result. | 281 ** the function result. |
214 ** | 282 ** |
215 ** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the | 283 ** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the |
216 ** result as a string or blob but if the string or blob is too large, it | 284 ** result as a string or blob but if the string or blob is too large, it |
217 ** then sets the error code to SQLITE_TOOBIG | 285 ** then sets the error code to SQLITE_TOOBIG |
218 ** | 286 ** |
219 ** The invokeValueDestructor(P,X) routine invokes destructor function X() | 287 ** The invokeValueDestructor(P,X) routine invokes destructor function X() |
220 ** on value P is not going to be used and need to be destroyed. | 288 ** on value P is not going to be used and need to be destroyed. |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal); | 361 sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal); |
294 } | 362 } |
295 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ | 363 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ |
296 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 364 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
297 sqlite3VdbeMemSetInt64(pCtx->pOut, iVal); | 365 sqlite3VdbeMemSetInt64(pCtx->pOut, iVal); |
298 } | 366 } |
299 void sqlite3_result_null(sqlite3_context *pCtx){ | 367 void sqlite3_result_null(sqlite3_context *pCtx){ |
300 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 368 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
301 sqlite3VdbeMemSetNull(pCtx->pOut); | 369 sqlite3VdbeMemSetNull(pCtx->pOut); |
302 } | 370 } |
| 371 void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){ |
| 372 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
| 373 pCtx->pOut->eSubtype = eSubtype & 0xff; |
| 374 } |
303 void sqlite3_result_text( | 375 void sqlite3_result_text( |
304 sqlite3_context *pCtx, | 376 sqlite3_context *pCtx, |
305 const char *z, | 377 const char *z, |
306 int n, | 378 int n, |
307 void (*xDel)(void *) | 379 void (*xDel)(void *) |
308 ){ | 380 ){ |
309 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 381 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
310 setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); | 382 setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); |
311 } | 383 } |
312 void sqlite3_result_text64( | 384 void sqlite3_result_text64( |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 } | 427 } |
356 #endif /* SQLITE_OMIT_UTF16 */ | 428 #endif /* SQLITE_OMIT_UTF16 */ |
357 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ | 429 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ |
358 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 430 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
359 sqlite3VdbeMemCopy(pCtx->pOut, pValue); | 431 sqlite3VdbeMemCopy(pCtx->pOut, pValue); |
360 } | 432 } |
361 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ | 433 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ |
362 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 434 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
363 sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n); | 435 sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n); |
364 } | 436 } |
| 437 int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){ |
| 438 Mem *pOut = pCtx->pOut; |
| 439 assert( sqlite3_mutex_held(pOut->db->mutex) ); |
| 440 if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){ |
| 441 return SQLITE_TOOBIG; |
| 442 } |
| 443 sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n); |
| 444 return SQLITE_OK; |
| 445 } |
365 void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ | 446 void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ |
366 pCtx->isError = errCode; | 447 pCtx->isError = errCode; |
367 pCtx->fErrorOrAux = 1; | 448 pCtx->fErrorOrAux = 1; |
| 449 #ifdef SQLITE_DEBUG |
| 450 if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode; |
| 451 #endif |
368 if( pCtx->pOut->flags & MEM_Null ){ | 452 if( pCtx->pOut->flags & MEM_Null ){ |
369 sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1, | 453 sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1, |
370 SQLITE_UTF8, SQLITE_STATIC); | 454 SQLITE_UTF8, SQLITE_STATIC); |
371 } | 455 } |
372 } | 456 } |
373 | 457 |
374 /* Force an SQLITE_TOOBIG error. */ | 458 /* Force an SQLITE_TOOBIG error. */ |
375 void sqlite3_result_error_toobig(sqlite3_context *pCtx){ | 459 void sqlite3_result_error_toobig(sqlite3_context *pCtx){ |
376 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 460 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
377 pCtx->isError = SQLITE_TOOBIG; | 461 pCtx->isError = SQLITE_TOOBIG; |
(...skipping 15 matching lines...) Expand all Loading... |
393 ** This function is called after a transaction has been committed. It | 477 ** This function is called after a transaction has been committed. It |
394 ** invokes callbacks registered with sqlite3_wal_hook() as required. | 478 ** invokes callbacks registered with sqlite3_wal_hook() as required. |
395 */ | 479 */ |
396 static int doWalCallbacks(sqlite3 *db){ | 480 static int doWalCallbacks(sqlite3 *db){ |
397 int rc = SQLITE_OK; | 481 int rc = SQLITE_OK; |
398 #ifndef SQLITE_OMIT_WAL | 482 #ifndef SQLITE_OMIT_WAL |
399 int i; | 483 int i; |
400 for(i=0; i<db->nDb; i++){ | 484 for(i=0; i<db->nDb; i++){ |
401 Btree *pBt = db->aDb[i].pBt; | 485 Btree *pBt = db->aDb[i].pBt; |
402 if( pBt ){ | 486 if( pBt ){ |
403 int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); | 487 int nEntry; |
| 488 sqlite3BtreeEnter(pBt); |
| 489 nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); |
| 490 sqlite3BtreeLeave(pBt); |
404 if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){ | 491 if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){ |
405 rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry); | 492 rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry); |
406 } | 493 } |
407 } | 494 } |
408 } | 495 } |
409 #endif | 496 #endif |
410 return rc; | 497 return rc; |
411 } | 498 } |
412 | 499 |
| 500 |
413 /* | 501 /* |
414 ** Execute the statement pStmt, either until a row of data is ready, the | 502 ** Execute the statement pStmt, either until a row of data is ready, the |
415 ** statement is completely executed or an error occurs. | 503 ** statement is completely executed or an error occurs. |
416 ** | 504 ** |
417 ** This routine implements the bulk of the logic behind the sqlite_step() | 505 ** This routine implements the bulk of the logic behind the sqlite_step() |
418 ** API. The only thing omitted is the automatic recompile if a | 506 ** API. The only thing omitted is the automatic recompile if a |
419 ** schema change has occurred. That detail is handled by the | 507 ** schema change has occurred. That detail is handled by the |
420 ** outer sqlite3_step() wrapper procedure. | 508 ** outer sqlite3_step() wrapper procedure. |
421 */ | 509 */ |
422 static int sqlite3Step(Vdbe *p){ | 510 static int sqlite3Step(Vdbe *p){ |
(...skipping 12 matching lines...) Expand all Loading... |
435 ** | 523 ** |
436 ** Nevertheless, some published applications that were originally written | 524 ** Nevertheless, some published applications that were originally written |
437 ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE | 525 ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE |
438 ** returns, and those were broken by the automatic-reset change. As a | 526 ** returns, and those were broken by the automatic-reset change. As a |
439 ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the | 527 ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the |
440 ** legacy behavior of returning SQLITE_MISUSE for cases where the | 528 ** legacy behavior of returning SQLITE_MISUSE for cases where the |
441 ** previous sqlite3_step() returned something other than a SQLITE_LOCKED | 529 ** previous sqlite3_step() returned something other than a SQLITE_LOCKED |
442 ** or SQLITE_BUSY error. | 530 ** or SQLITE_BUSY error. |
443 */ | 531 */ |
444 #ifdef SQLITE_OMIT_AUTORESET | 532 #ifdef SQLITE_OMIT_AUTORESET |
445 if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){ | 533 if( (rc = p->rc&0xff)==SQLITE_BUSY || rc==SQLITE_LOCKED ){ |
446 sqlite3_reset((sqlite3_stmt*)p); | 534 sqlite3_reset((sqlite3_stmt*)p); |
447 }else{ | 535 }else{ |
448 return SQLITE_MISUSE_BKPT; | 536 return SQLITE_MISUSE_BKPT; |
449 } | 537 } |
450 #else | 538 #else |
451 sqlite3_reset((sqlite3_stmt*)p); | 539 sqlite3_reset((sqlite3_stmt*)p); |
452 #endif | 540 #endif |
453 } | 541 } |
454 | 542 |
455 /* Check that malloc() has not failed. If it has, return early. */ | 543 /* Check that malloc() has not failed. If it has, return early. */ |
(...skipping 15 matching lines...) Expand all Loading... |
471 */ | 559 */ |
472 if( db->nVdbeActive==0 ){ | 560 if( db->nVdbeActive==0 ){ |
473 db->u1.isInterrupted = 0; | 561 db->u1.isInterrupted = 0; |
474 } | 562 } |
475 | 563 |
476 assert( db->nVdbeWrite>0 || db->autoCommit==0 | 564 assert( db->nVdbeWrite>0 || db->autoCommit==0 |
477 || (db->nDeferredCons==0 && db->nDeferredImmCons==0) | 565 || (db->nDeferredCons==0 && db->nDeferredImmCons==0) |
478 ); | 566 ); |
479 | 567 |
480 #ifndef SQLITE_OMIT_TRACE | 568 #ifndef SQLITE_OMIT_TRACE |
481 if( db->xProfile && !db->init.busy ){ | 569 if( db->xProfile && !db->init.busy && p->zSql ){ |
482 sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); | 570 sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); |
| 571 }else{ |
| 572 assert( p->startTime==0 ); |
483 } | 573 } |
484 #endif | 574 #endif |
485 | 575 |
486 db->nVdbeActive++; | 576 db->nVdbeActive++; |
487 if( p->readOnly==0 ) db->nVdbeWrite++; | 577 if( p->readOnly==0 ) db->nVdbeWrite++; |
488 if( p->bIsReader ) db->nVdbeRead++; | 578 if( p->bIsReader ) db->nVdbeRead++; |
489 p->pc = 0; | 579 p->pc = 0; |
490 } | 580 } |
| 581 #ifdef SQLITE_DEBUG |
| 582 p->rcApp = SQLITE_OK; |
| 583 #endif |
491 #ifndef SQLITE_OMIT_EXPLAIN | 584 #ifndef SQLITE_OMIT_EXPLAIN |
492 if( p->explain ){ | 585 if( p->explain ){ |
493 rc = sqlite3VdbeList(p); | 586 rc = sqlite3VdbeList(p); |
494 }else | 587 }else |
495 #endif /* SQLITE_OMIT_EXPLAIN */ | 588 #endif /* SQLITE_OMIT_EXPLAIN */ |
496 { | 589 { |
497 db->nVdbeExec++; | 590 db->nVdbeExec++; |
498 rc = sqlite3VdbeExec(p); | 591 rc = sqlite3VdbeExec(p); |
499 db->nVdbeExec--; | 592 db->nVdbeExec--; |
500 } | 593 } |
501 | 594 |
502 #ifndef SQLITE_OMIT_TRACE | 595 #ifndef SQLITE_OMIT_TRACE |
503 /* Invoke the profile callback if there is one | 596 /* If the statement completed successfully, invoke the profile callback */ |
504 */ | 597 if( rc!=SQLITE_ROW ) checkProfileCallback(db, p); |
505 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ | |
506 sqlite3_int64 iNow; | |
507 sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); | |
508 db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000); | |
509 } | |
510 #endif | 598 #endif |
511 | 599 |
512 if( rc==SQLITE_DONE ){ | 600 if( rc==SQLITE_DONE ){ |
513 assert( p->rc==SQLITE_OK ); | 601 assert( p->rc==SQLITE_OK ); |
514 p->rc = doWalCallbacks(db); | 602 p->rc = doWalCallbacks(db); |
515 if( p->rc!=SQLITE_OK ){ | 603 if( p->rc!=SQLITE_OK ){ |
516 rc = SQLITE_ERROR; | 604 rc = SQLITE_ERROR; |
517 } | 605 } |
518 } | 606 } |
519 | 607 |
520 db->errCode = rc; | 608 db->errCode = rc; |
521 if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ | 609 if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ |
522 p->rc = SQLITE_NOMEM; | 610 p->rc = SQLITE_NOMEM; |
523 } | 611 } |
524 end_of_step: | 612 end_of_step: |
525 /* At this point local variable rc holds the value that should be | 613 /* At this point local variable rc holds the value that should be |
526 ** returned if this statement was compiled using the legacy | 614 ** returned if this statement was compiled using the legacy |
527 ** sqlite3_prepare() interface. According to the docs, this can only | 615 ** sqlite3_prepare() interface. According to the docs, this can only |
528 ** be one of the values in the first assert() below. Variable p->rc | 616 ** be one of the values in the first assert() below. Variable p->rc |
529 ** contains the value that would be returned if sqlite3_finalize() | 617 ** contains the value that would be returned if sqlite3_finalize() |
530 ** were called on statement p. | 618 ** were called on statement p. |
531 */ | 619 */ |
532 assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR | 620 assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR |
533 || rc==SQLITE_BUSY || rc==SQLITE_MISUSE | 621 || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE |
534 ); | 622 ); |
535 assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE ); | 623 assert( (p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE) || p->rc==p->rcApp ); |
536 if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ | 624 if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ |
537 /* If this statement was prepared using sqlite3_prepare_v2(), and an | 625 /* If this statement was prepared using sqlite3_prepare_v2(), and an |
538 ** error has occurred, then return the error code in p->rc to the | 626 ** error has occurred, then return the error code in p->rc to the |
539 ** caller. Set the error code in the database handle to the same value. | 627 ** caller. Set the error code in the database handle to the same value. |
540 */ | 628 */ |
541 rc = sqlite3VdbeTransferError(p); | 629 rc = sqlite3VdbeTransferError(p); |
542 } | 630 } |
543 return (rc&db->errMask); | 631 return (rc&db->errMask); |
544 } | 632 } |
545 | 633 |
(...skipping 27 matching lines...) Expand all Loading... |
573 if( rc2!=SQLITE_OK ){ | 661 if( rc2!=SQLITE_OK ){ |
574 /* This case occurs after failing to recompile an sql statement. | 662 /* This case occurs after failing to recompile an sql statement. |
575 ** The error message from the SQL compiler has already been loaded | 663 ** The error message from the SQL compiler has already been loaded |
576 ** into the database handle. This block copies the error message | 664 ** into the database handle. This block copies the error message |
577 ** from the database handle into the statement and sets the statement | 665 ** from the database handle into the statement and sets the statement |
578 ** program counter to 0 to ensure that when the statement is | 666 ** program counter to 0 to ensure that when the statement is |
579 ** finalized or reset the parser error message is available via | 667 ** finalized or reset the parser error message is available via |
580 ** sqlite3_errmsg() and sqlite3_errcode(). | 668 ** sqlite3_errmsg() and sqlite3_errcode(). |
581 */ | 669 */ |
582 const char *zErr = (const char *)sqlite3_value_text(db->pErr); | 670 const char *zErr = (const char *)sqlite3_value_text(db->pErr); |
583 assert( zErr!=0 || db->mallocFailed ); | |
584 sqlite3DbFree(db, v->zErrMsg); | 671 sqlite3DbFree(db, v->zErrMsg); |
585 if( !db->mallocFailed ){ | 672 if( !db->mallocFailed ){ |
586 v->zErrMsg = sqlite3DbStrDup(db, zErr); | 673 v->zErrMsg = sqlite3DbStrDup(db, zErr); |
587 v->rc = rc2; | 674 v->rc = rc2; |
588 } else { | 675 } else { |
589 v->zErrMsg = 0; | 676 v->zErrMsg = 0; |
590 v->rc = rc = SQLITE_NOMEM; | 677 v->rc = rc = SQLITE_NOMEM; |
591 } | 678 } |
592 } | 679 } |
593 rc = sqlite3ApiExit(db, rc); | 680 rc = sqlite3ApiExit(db, rc); |
(...skipping 15 matching lines...) Expand all Loading... |
609 ** Extract the user data from a sqlite3_context structure and return a | 696 ** Extract the user data from a sqlite3_context structure and return a |
610 ** pointer to it. | 697 ** pointer to it. |
611 ** | 698 ** |
612 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface | 699 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface |
613 ** returns a copy of the pointer to the database connection (the 1st | 700 ** returns a copy of the pointer to the database connection (the 1st |
614 ** parameter) of the sqlite3_create_function() and | 701 ** parameter) of the sqlite3_create_function() and |
615 ** sqlite3_create_function16() routines that originally registered the | 702 ** sqlite3_create_function16() routines that originally registered the |
616 ** application defined function. | 703 ** application defined function. |
617 */ | 704 */ |
618 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ | 705 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ |
619 assert( p && p->pFunc ); | 706 assert( p && p->pOut ); |
620 return p->pOut->db; | 707 return p->pOut->db; |
621 } | 708 } |
622 | 709 |
623 /* | 710 /* |
624 ** Return the current time for a statement | 711 ** Return the current time for a statement. If the current time |
| 712 ** is requested more than once within the same run of a single prepared |
| 713 ** statement, the exact same time is returned for each invocation regardless |
| 714 ** of the amount of time that elapses between invocations. In other words, |
| 715 ** the time returned is always the time of the first call. |
625 */ | 716 */ |
626 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){ | 717 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){ |
627 Vdbe *v = p->pVdbe; | |
628 int rc; | 718 int rc; |
629 if( v->iCurrentTime==0 ){ | 719 #ifndef SQLITE_ENABLE_STAT3_OR_STAT4 |
630 rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, &v->iCurrentTime); | 720 sqlite3_int64 *piTime = &p->pVdbe->iCurrentTime; |
631 if( rc ) v->iCurrentTime = 0; | 721 assert( p->pVdbe!=0 ); |
| 722 #else |
| 723 sqlite3_int64 iTime = 0; |
| 724 sqlite3_int64 *piTime = p->pVdbe!=0 ? &p->pVdbe->iCurrentTime : &iTime; |
| 725 #endif |
| 726 if( *piTime==0 ){ |
| 727 rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, piTime); |
| 728 if( rc ) *piTime = 0; |
632 } | 729 } |
633 return v->iCurrentTime; | 730 return *piTime; |
634 } | 731 } |
635 | 732 |
636 /* | 733 /* |
637 ** The following is the implementation of an SQL function that always | 734 ** The following is the implementation of an SQL function that always |
638 ** fails with an error message stating that the function is used in the | 735 ** fails with an error message stating that the function is used in the |
639 ** wrong context. The sqlite3_overload_function() API might construct | 736 ** wrong context. The sqlite3_overload_function() API might construct |
640 ** SQL function that use this routine so that the functions will exist | 737 ** SQL function that use this routine so that the functions will exist |
641 ** for name resolution but are actually overloaded by the xFindFunction | 738 ** for name resolution but are actually overloaded by the xFindFunction |
642 ** method of virtual tables. | 739 ** method of virtual tables. |
643 */ | 740 */ |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 } | 790 } |
694 | 791 |
695 /* | 792 /* |
696 ** Return the auxiliary data pointer, if any, for the iArg'th argument to | 793 ** Return the auxiliary data pointer, if any, for the iArg'th argument to |
697 ** the user-function defined by pCtx. | 794 ** the user-function defined by pCtx. |
698 */ | 795 */ |
699 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ | 796 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ |
700 AuxData *pAuxData; | 797 AuxData *pAuxData; |
701 | 798 |
702 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 799 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
| 800 #if SQLITE_ENABLE_STAT3_OR_STAT4 |
| 801 if( pCtx->pVdbe==0 ) return 0; |
| 802 #else |
| 803 assert( pCtx->pVdbe!=0 ); |
| 804 #endif |
703 for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ | 805 for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ |
704 if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; | 806 if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; |
705 } | 807 } |
706 | 808 |
707 return (pAuxData ? pAuxData->pAux : 0); | 809 return (pAuxData ? pAuxData->pAux : 0); |
708 } | 810 } |
709 | 811 |
710 /* | 812 /* |
711 ** Set the auxiliary data pointer and delete function, for the iArg'th | 813 ** Set the auxiliary data pointer and delete function, for the iArg'th |
712 ** argument to the user-function defined by pCtx. Any previous value is | 814 ** argument to the user-function defined by pCtx. Any previous value is |
713 ** deleted by calling the delete function specified when it was set. | 815 ** deleted by calling the delete function specified when it was set. |
714 */ | 816 */ |
715 void sqlite3_set_auxdata( | 817 void sqlite3_set_auxdata( |
716 sqlite3_context *pCtx, | 818 sqlite3_context *pCtx, |
717 int iArg, | 819 int iArg, |
718 void *pAux, | 820 void *pAux, |
719 void (*xDelete)(void*) | 821 void (*xDelete)(void*) |
720 ){ | 822 ){ |
721 AuxData *pAuxData; | 823 AuxData *pAuxData; |
722 Vdbe *pVdbe = pCtx->pVdbe; | 824 Vdbe *pVdbe = pCtx->pVdbe; |
723 | 825 |
724 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); | 826 assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); |
725 if( iArg<0 ) goto failed; | 827 if( iArg<0 ) goto failed; |
| 828 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 |
| 829 if( pVdbe==0 ) goto failed; |
| 830 #else |
| 831 assert( pVdbe!=0 ); |
| 832 #endif |
726 | 833 |
727 for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ | 834 for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ |
728 if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; | 835 if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; |
729 } | 836 } |
730 if( pAuxData==0 ){ | 837 if( pAuxData==0 ){ |
731 pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData)); | 838 pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData)); |
732 if( !pAuxData ) goto failed; | 839 if( !pAuxData ) goto failed; |
733 pAuxData->iOp = pCtx->iOp; | 840 pAuxData->iOp = pCtx->iOp; |
734 pAuxData->iArg = iArg; | 841 pAuxData->iArg = iArg; |
735 pAuxData->pNext = pVdbe->pAuxData; | 842 pAuxData->pNext = pVdbe->pAuxData; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 ** that a Mem structure is located on an 8-byte boundary. To prevent | 905 ** that a Mem structure is located on an 8-byte boundary. To prevent |
799 ** these assert()s from failing, when building with SQLITE_DEBUG defined | 906 ** these assert()s from failing, when building with SQLITE_DEBUG defined |
800 ** using gcc, we force nullMem to be 8-byte aligned using the magical | 907 ** using gcc, we force nullMem to be 8-byte aligned using the magical |
801 ** __attribute__((aligned(8))) macro. */ | 908 ** __attribute__((aligned(8))) macro. */ |
802 static const Mem nullMem | 909 static const Mem nullMem |
803 #if defined(SQLITE_DEBUG) && defined(__GNUC__) | 910 #if defined(SQLITE_DEBUG) && defined(__GNUC__) |
804 __attribute__((aligned(8))) | 911 __attribute__((aligned(8))) |
805 #endif | 912 #endif |
806 = { | 913 = { |
807 /* .u = */ {0}, | 914 /* .u = */ {0}, |
808 /* .flags = */ MEM_Null, | 915 /* .flags = */ (u16)MEM_Null, |
809 /* .enc = */ 0, | 916 /* .enc = */ (u8)0, |
810 /* .n = */ 0, | 917 /* .eSubtype = */ (u8)0, |
811 /* .z = */ 0, | 918 /* .n = */ (int)0, |
812 /* .zMalloc = */ 0, | 919 /* .z = */ (char*)0, |
813 /* .szMalloc = */ 0, | 920 /* .zMalloc = */ (char*)0, |
814 /* .iPadding1 = */ 0, | 921 /* .szMalloc = */ (int)0, |
815 /* .db = */ 0, | 922 /* .uTemp = */ (u32)0, |
816 /* .xDel = */ 0, | 923 /* .db = */ (sqlite3*)0, |
| 924 /* .xDel = */ (void(*)(void*))0, |
817 #ifdef SQLITE_DEBUG | 925 #ifdef SQLITE_DEBUG |
818 /* .pScopyFrom = */ 0, | 926 /* .pScopyFrom = */ (Mem*)0, |
819 /* .pFiller = */ 0, | 927 /* .pFiller = */ (void*)0, |
820 #endif | 928 #endif |
821 }; | 929 }; |
822 return &nullMem; | 930 return &nullMem; |
823 } | 931 } |
824 | 932 |
825 /* | 933 /* |
826 ** Check to see if column iCol of the given statement is valid. If | 934 ** Check to see if column iCol of the given statement is valid. If |
827 ** it is, return a pointer to the Mem for the value of that column. | 935 ** it is, return a pointer to the Mem for the value of that column. |
828 ** If iCol is not valid, return a pointer to a Mem which has a value | 936 ** If iCol is not valid, return a pointer to a Mem which has a value |
829 ** of NULL. | 937 ** of NULL. |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 ** | 1067 ** |
960 ** If the result is not a simple column reference (if it is an expression | 1068 ** If the result is not a simple column reference (if it is an expression |
961 ** or a constant) then useTypes 2, 3, and 4 return NULL. | 1069 ** or a constant) then useTypes 2, 3, and 4 return NULL. |
962 */ | 1070 */ |
963 static const void *columnName( | 1071 static const void *columnName( |
964 sqlite3_stmt *pStmt, | 1072 sqlite3_stmt *pStmt, |
965 int N, | 1073 int N, |
966 const void *(*xFunc)(Mem*), | 1074 const void *(*xFunc)(Mem*), |
967 int useType | 1075 int useType |
968 ){ | 1076 ){ |
969 const void *ret = 0; | 1077 const void *ret; |
970 Vdbe *p = (Vdbe *)pStmt; | 1078 Vdbe *p; |
971 int n; | 1079 int n; |
972 sqlite3 *db = p->db; | 1080 sqlite3 *db; |
973 | 1081 #ifdef SQLITE_ENABLE_API_ARMOR |
| 1082 if( pStmt==0 ){ |
| 1083 (void)SQLITE_MISUSE_BKPT; |
| 1084 return 0; |
| 1085 } |
| 1086 #endif |
| 1087 ret = 0; |
| 1088 p = (Vdbe *)pStmt; |
| 1089 db = p->db; |
974 assert( db!=0 ); | 1090 assert( db!=0 ); |
975 n = sqlite3_column_count(pStmt); | 1091 n = sqlite3_column_count(pStmt); |
976 if( N<n && N>=0 ){ | 1092 if( N<n && N>=0 ){ |
977 N += useType*n; | 1093 N += useType*n; |
978 sqlite3_mutex_enter(db->mutex); | 1094 sqlite3_mutex_enter(db->mutex); |
979 assert( db->mallocFailed==0 ); | 1095 assert( db->mallocFailed==0 ); |
980 ret = xFunc(&p->aColName[N]); | 1096 ret = xFunc(&p->aColName[N]); |
981 /* A malloc may have failed inside of the xFunc() call. If this | 1097 /* A malloc may have failed inside of the xFunc() call. If this |
982 ** is the case, clear the mallocFailed flag and return NULL. | 1098 ** is the case, clear the mallocFailed flag and return NULL. |
983 */ | 1099 */ |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ | 1416 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ |
1301 int rc; | 1417 int rc; |
1302 Vdbe *p = (Vdbe *)pStmt; | 1418 Vdbe *p = (Vdbe *)pStmt; |
1303 rc = vdbeUnbind(p, i); | 1419 rc = vdbeUnbind(p, i); |
1304 if( rc==SQLITE_OK ){ | 1420 if( rc==SQLITE_OK ){ |
1305 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); | 1421 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
1306 sqlite3_mutex_leave(p->db->mutex); | 1422 sqlite3_mutex_leave(p->db->mutex); |
1307 } | 1423 } |
1308 return rc; | 1424 return rc; |
1309 } | 1425 } |
| 1426 int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){ |
| 1427 int rc; |
| 1428 Vdbe *p = (Vdbe *)pStmt; |
| 1429 sqlite3_mutex_enter(p->db->mutex); |
| 1430 if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){ |
| 1431 rc = SQLITE_TOOBIG; |
| 1432 }else{ |
| 1433 assert( (n & 0x7FFFFFFF)==n ); |
| 1434 rc = sqlite3_bind_zeroblob(pStmt, i, n); |
| 1435 } |
| 1436 rc = sqlite3ApiExit(p->db, rc); |
| 1437 sqlite3_mutex_leave(p->db->mutex); |
| 1438 return rc; |
| 1439 } |
1310 | 1440 |
1311 /* | 1441 /* |
1312 ** Return the number of wildcards that can be potentially bound to. | 1442 ** Return the number of wildcards that can be potentially bound to. |
1313 ** This routine is added to support DBD::SQLite. | 1443 ** This routine is added to support DBD::SQLite. |
1314 */ | 1444 */ |
1315 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ | 1445 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ |
1316 Vdbe *p = (Vdbe*)pStmt; | 1446 Vdbe *p = (Vdbe*)pStmt; |
1317 return p ? p->nVar : 0; | 1447 return p ? p->nVar : 0; |
1318 } | 1448 } |
1319 | 1449 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1428 } | 1558 } |
1429 | 1559 |
1430 /* | 1560 /* |
1431 ** Return a pointer to the next prepared statement after pStmt associated | 1561 ** Return a pointer to the next prepared statement after pStmt associated |
1432 ** with database connection pDb. If pStmt is NULL, return the first | 1562 ** with database connection pDb. If pStmt is NULL, return the first |
1433 ** prepared statement for the database connection. Return NULL if there | 1563 ** prepared statement for the database connection. Return NULL if there |
1434 ** are no more. | 1564 ** are no more. |
1435 */ | 1565 */ |
1436 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ | 1566 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ |
1437 sqlite3_stmt *pNext; | 1567 sqlite3_stmt *pNext; |
| 1568 #ifdef SQLITE_ENABLE_API_ARMOR |
| 1569 if( !sqlite3SafetyCheckOk(pDb) ){ |
| 1570 (void)SQLITE_MISUSE_BKPT; |
| 1571 return 0; |
| 1572 } |
| 1573 #endif |
1438 sqlite3_mutex_enter(pDb->mutex); | 1574 sqlite3_mutex_enter(pDb->mutex); |
1439 if( pStmt==0 ){ | 1575 if( pStmt==0 ){ |
1440 pNext = (sqlite3_stmt*)pDb->pVdbe; | 1576 pNext = (sqlite3_stmt*)pDb->pVdbe; |
1441 }else{ | 1577 }else{ |
1442 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; | 1578 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; |
1443 } | 1579 } |
1444 sqlite3_mutex_leave(pDb->mutex); | 1580 sqlite3_mutex_leave(pDb->mutex); |
1445 return pNext; | 1581 return pNext; |
1446 } | 1582 } |
1447 | 1583 |
1448 /* | 1584 /* |
1449 ** Return the value of a status counter for a prepared statement | 1585 ** Return the value of a status counter for a prepared statement |
1450 */ | 1586 */ |
1451 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ | 1587 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ |
1452 Vdbe *pVdbe = (Vdbe*)pStmt; | 1588 Vdbe *pVdbe = (Vdbe*)pStmt; |
1453 u32 v = pVdbe->aCounter[op]; | 1589 u32 v; |
| 1590 #ifdef SQLITE_ENABLE_API_ARMOR |
| 1591 if( !pStmt ){ |
| 1592 (void)SQLITE_MISUSE_BKPT; |
| 1593 return 0; |
| 1594 } |
| 1595 #endif |
| 1596 v = pVdbe->aCounter[op]; |
1454 if( resetFlag ) pVdbe->aCounter[op] = 0; | 1597 if( resetFlag ) pVdbe->aCounter[op] = 0; |
1455 return (int)v; | 1598 return (int)v; |
1456 } | 1599 } |
| 1600 |
| 1601 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS |
| 1602 /* |
| 1603 ** Return status data for a single loop within query pStmt. |
| 1604 */ |
| 1605 int sqlite3_stmt_scanstatus( |
| 1606 sqlite3_stmt *pStmt, /* Prepared statement being queried */ |
| 1607 int idx, /* Index of loop to report on */ |
| 1608 int iScanStatusOp, /* Which metric to return */ |
| 1609 void *pOut /* OUT: Write the answer here */ |
| 1610 ){ |
| 1611 Vdbe *p = (Vdbe*)pStmt; |
| 1612 ScanStatus *pScan; |
| 1613 if( idx<0 || idx>=p->nScan ) return 1; |
| 1614 pScan = &p->aScan[idx]; |
| 1615 switch( iScanStatusOp ){ |
| 1616 case SQLITE_SCANSTAT_NLOOP: { |
| 1617 *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop]; |
| 1618 break; |
| 1619 } |
| 1620 case SQLITE_SCANSTAT_NVISIT: { |
| 1621 *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit]; |
| 1622 break; |
| 1623 } |
| 1624 case SQLITE_SCANSTAT_EST: { |
| 1625 double r = 1.0; |
| 1626 LogEst x = pScan->nEst; |
| 1627 while( x<100 ){ |
| 1628 x += 10; |
| 1629 r *= 0.5; |
| 1630 } |
| 1631 *(double*)pOut = r*sqlite3LogEstToInt(x); |
| 1632 break; |
| 1633 } |
| 1634 case SQLITE_SCANSTAT_NAME: { |
| 1635 *(const char**)pOut = pScan->zName; |
| 1636 break; |
| 1637 } |
| 1638 case SQLITE_SCANSTAT_EXPLAIN: { |
| 1639 if( pScan->addrExplain ){ |
| 1640 *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z; |
| 1641 }else{ |
| 1642 *(const char**)pOut = 0; |
| 1643 } |
| 1644 break; |
| 1645 } |
| 1646 case SQLITE_SCANSTAT_SELECTID: { |
| 1647 if( pScan->addrExplain ){ |
| 1648 *(int*)pOut = p->aOp[ pScan->addrExplain ].p1; |
| 1649 }else{ |
| 1650 *(int*)pOut = -1; |
| 1651 } |
| 1652 break; |
| 1653 } |
| 1654 default: { |
| 1655 return 1; |
| 1656 } |
| 1657 } |
| 1658 return 0; |
| 1659 } |
| 1660 |
| 1661 /* |
| 1662 ** Zero all counters associated with the sqlite3_stmt_scanstatus() data. |
| 1663 */ |
| 1664 void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ |
| 1665 Vdbe *p = (Vdbe*)pStmt; |
| 1666 memset(p->anExec, 0, p->nOp * sizeof(i64)); |
| 1667 } |
| 1668 #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */ |
OLD | NEW |