1 /* 2 ** 2004 May 26 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ************************************************************************* 12 ** 13 ** This file contains code use to implement APIs that are part of the 14 ** VDBE. 15 */ 16 #include "sqliteInt.h" 17 #include "vdbeInt.h" 18 19 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT 20 /* 21 ** The following structure contains pointers to the end points of a 22 ** doubly-linked list of all compiled SQL statements that may be holding 23 ** buffers eligible for release when the sqlite3_release_memory() interface is 24 ** invoked. Access to this list is protected by the SQLITE_MUTEX_STATIC_LRU2 25 ** mutex. 26 ** 27 ** Statements are added to the end of this list when sqlite3_reset() is 28 ** called. They are removed either when sqlite3_step() or sqlite3_finalize() 29 ** is called. When statements are added to this list, the associated 30 ** register array (p->aMem[1..p->nMem]) may contain dynamic buffers that 31 ** can be freed using sqlite3VdbeReleaseMemory(). 32 ** 33 ** When statements are added or removed from this list, the mutex 34 ** associated with the Vdbe being added or removed (Vdbe.db->mutex) is 35 ** already held. The LRU2 mutex is then obtained, blocking if necessary, 36 ** the linked-list pointers manipulated and the LRU2 mutex relinquished. 37 */ 38 struct StatementLruList { 39 Vdbe *pFirst; 40 Vdbe *pLast; 41 }; 42 static struct StatementLruList sqlite3LruStatements; 43 44 /* 45 ** Check that the list looks to be internally consistent. This is used 46 ** as part of an assert() statement as follows: 47 ** 48 ** assert( stmtLruCheck() ); 49 */ 50 static int stmtLruCheck(){ 51 Vdbe *p; 52 for(p=sqlite3LruStatements.pFirst; p; p=p->pLruNext){ 53 assert(p->pLruNext || p==sqlite3LruStatements.pLast); 54 assert(!p->pLruNext || p->pLruNext->pLruPrev==p); 55 assert(p->pLruPrev || p==sqlite3LruStatements.pFirst); 56 assert(!p->pLruPrev || p->pLruPrev->pLruNext==p); 57 } 58 return 1; 59 } 60 61 /* 62 ** Add vdbe p to the end of the statement lru list. It is assumed that 63 ** p is not already part of the list when this is called. The lru list 64 ** is protected by the SQLITE_MUTEX_STATIC_LRU mutex. 65 */ 66 static void stmtLruAdd(Vdbe *p){ 67 sqlite3_mutex_enter(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 68 69 if( p->pLruPrev || p->pLruNext || sqlite3LruStatements.pFirst==p ){ 70 sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 71 return; 72 } 73 74 assert( stmtLruCheck() ); 75 76 if( !sqlite3LruStatements.pFirst ){ 77 assert( !sqlite3LruStatements.pLast ); 78 sqlite3LruStatements.pFirst = p; 79 sqlite3LruStatements.pLast = p; 80 }else{ 81 assert( !sqlite3LruStatements.pLast->pLruNext ); 82 p->pLruPrev = sqlite3LruStatements.pLast; 83 sqlite3LruStatements.pLast->pLruNext = p; 84 sqlite3LruStatements.pLast = p; 85 } 86 87 assert( stmtLruCheck() ); 88 89 sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 90 } 91 92 /* 93 ** Assuming the SQLITE_MUTEX_STATIC_LRU2 mutext is already held, remove 94 ** statement p from the least-recently-used statement list. If the 95 ** statement is not currently part of the list, this call is a no-op. 96 */ 97 static void stmtLruRemoveNomutex(Vdbe *p){ 98 if( p->pLruPrev || p->pLruNext || p==sqlite3LruStatements.pFirst ){ 99 assert( stmtLruCheck() ); 100 if( p->pLruNext ){ 101 p->pLruNext->pLruPrev = p->pLruPrev; 102 }else{ 103 sqlite3LruStatements.pLast = p->pLruPrev; 104 } 105 if( p->pLruPrev ){ 106 p->pLruPrev->pLruNext = p->pLruNext; 107 }else{ 108 sqlite3LruStatements.pFirst = p->pLruNext; 109 } 110 p->pLruNext = 0; 111 p->pLruPrev = 0; 112 assert( stmtLruCheck() ); 113 } 114 } 115 116 /* 117 ** Assuming the SQLITE_MUTEX_STATIC_LRU2 mutext is not held, remove 118 ** statement p from the least-recently-used statement list. If the 119 ** statement is not currently part of the list, this call is a no-op. 120 */ 121 static void stmtLruRemove(Vdbe *p){ 122 sqlite3_mutex_enter(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 123 stmtLruRemoveNomutex(p); 124 sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 125 } 126 127 /* 128 ** Try to release n bytes of memory by freeing buffers associated 129 ** with the memory registers of currently unused vdbes. 130 */ 131 int sqlite3VdbeReleaseMemory(int n){ 132 Vdbe *p; 133 Vdbe *pNext; 134 int nFree = 0; 135 136 sqlite3_mutex_enter(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 137 for(p=sqlite3LruStatements.pFirst; p && nFree<n; p=pNext){ 138 pNext = p->pLruNext; 139 140 /* For each statement handle in the lru list, attempt to obtain the 141 ** associated database mutex. If it cannot be obtained, continue 142 ** to the next statement handle. It is not possible to block on 143 ** the database mutex - that could cause deadlock. 144 */ 145 if( SQLITE_OK==sqlite3_mutex_try(p->db->mutex) ){ 146 nFree += sqlite3VdbeReleaseBuffers(p); 147 stmtLruRemoveNomutex(p); 148 sqlite3_mutex_leave(p->db->mutex); 149 } 150 } 151 sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU2)); 152 153 return nFree; 154 } 155 156 /* 157 ** Call sqlite3Reprepare() on the statement. Remove it from the 158 ** lru list before doing so, as Reprepare() will free all the 159 ** memory register buffers anyway. 160 */ 161 int vdbeReprepare(Vdbe *p){ 162 stmtLruRemove(p); 163 return sqlite3Reprepare(p); 164 } 165 166 #else /* !SQLITE_ENABLE_MEMORY_MANAGEMENT */ 167 #define stmtLruRemove(x) 168 #define stmtLruAdd(x) 169 #define vdbeReprepare(x) sqlite3Reprepare(x) 170 #endif 171 172 173 /* 174 ** Return TRUE (non-zero) of the statement supplied as an argument needs 175 ** to be recompiled. A statement needs to be recompiled whenever the 176 ** execution environment changes in a way that would alter the program 177 ** that sqlite3_prepare() generates. For example, if new functions or 178 ** collating sequences are registered or if an authorizer function is 179 ** added or changed. 180 */ 181 int sqlite3_expired(sqlite3_stmt *pStmt){ 182 Vdbe *p = (Vdbe*)pStmt; 183 return p==0 || p->expired; 184 } 185 186 /* 187 ** The following routine destroys a virtual machine that is created by 188 ** the sqlite3_compile() routine. The integer returned is an SQLITE_ 189 ** success/failure code that describes the result of executing the virtual 190 ** machine. 191 ** 192 ** This routine sets the error code and string returned by 193 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). 194 */ 195 int sqlite3_finalize(sqlite3_stmt *pStmt){ 196 int rc; 197 if( pStmt==0 ){ 198 rc = SQLITE_OK; 199 }else{ 200 Vdbe *v = (Vdbe*)pStmt; 201 #ifndef SQLITE_MUTEX_NOOP 202 sqlite3_mutex *mutex = v->db->mutex; 203 #endif 204 sqlite3_mutex_enter(mutex); 205 stmtLruRemove(v); 206 rc = sqlite3VdbeFinalize(v); 207 sqlite3_mutex_leave(mutex); 208 } 209 return rc; 210 } 211 212 /* 213 ** Terminate the current execution of an SQL statement and reset it 214 ** back to its starting state so that it can be reused. A success code from 215 ** the prior execution is returned. 216 ** 217 ** This routine sets the error code and string returned by 218 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). 219 */ 220 int sqlite3_reset(sqlite3_stmt *pStmt){ 221 int rc; 222 if( pStmt==0 ){ 223 rc = SQLITE_OK; 224 }else{ 225 Vdbe *v = (Vdbe*)pStmt; 226 sqlite3_mutex_enter(v->db->mutex); 227 rc = sqlite3VdbeReset(v, 0); 228 stmtLruAdd(v); 229 sqlite3VdbeMakeReady(v, -1, 0, 0, 0); 230 assert( (rc & (v->db->errMask))==rc ); 231 sqlite3_mutex_leave(v->db->mutex); 232 } 233 return rc; 234 } 235 236 /* 237 ** Set all the parameters in the compiled SQL statement to NULL. 238 */ 239 int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ 240 int i; 241 int rc = SQLITE_OK; 242 #ifndef SQLITE_MUTEX_NOOP 243 sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; 244 #endif 245 sqlite3_mutex_enter(mutex); 246 for(i=1; rc==SQLITE_OK && i<=sqlite3_bind_parameter_count(pStmt); i++){ 247 rc = sqlite3_bind_null(pStmt, i); 248 } 249 sqlite3_mutex_leave(mutex); 250 return rc; 251 } 252 253 254 /**************************** sqlite3_value_ ******************************* 255 ** The following routines extract information from a Mem or sqlite3_value 256 ** structure. 257 */ 258 const void *sqlite3_value_blob(sqlite3_value *pVal){ 259 Mem *p = (Mem*)pVal; 260 if( p->flags & (MEM_Blob|MEM_Str) ){ 261 sqlite3VdbeMemExpandBlob(p); 262 p->flags &= ~MEM_Str; 263 p->flags |= MEM_Blob; 264 return p->z; 265 }else{ 266 return sqlite3_value_text(pVal); 267 } 268 } 269 int sqlite3_value_bytes(sqlite3_value *pVal){ 270 return sqlite3ValueBytes(pVal, SQLITE_UTF8); 271 } 272 int sqlite3_value_bytes16(sqlite3_value *pVal){ 273 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); 274 } 275 double sqlite3_value_double(sqlite3_value *pVal){ 276 return sqlite3VdbeRealValue((Mem*)pVal); 277 } 278 int sqlite3_value_int(sqlite3_value *pVal){ 279 return sqlite3VdbeIntValue((Mem*)pVal); 280 } 281 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ 282 return sqlite3VdbeIntValue((Mem*)pVal); 283 } 284 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ 285 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); 286 } 287 #ifndef SQLITE_OMIT_UTF16 288 const void *sqlite3_value_text16(sqlite3_value* pVal){ 289 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); 290 } 291 const void *sqlite3_value_text16be(sqlite3_value *pVal){ 292 return sqlite3ValueText(pVal, SQLITE_UTF16BE); 293 } 294 const void *sqlite3_value_text16le(sqlite3_value *pVal){ 295 return sqlite3ValueText(pVal, SQLITE_UTF16LE); 296 } 297 #endif /* SQLITE_OMIT_UTF16 */ 298 int sqlite3_value_type(sqlite3_value* pVal){ 299 return pVal->type; 300 } 301 302 /**************************** sqlite3_result_ ******************************* 303 ** The following routines are used by user-defined functions to specify 304 ** the function result. 305 */ 306 void sqlite3_result_blob( 307 sqlite3_context *pCtx, 308 const void *z, 309 int n, 310 void (*xDel)(void *) 311 ){ 312 assert( n>=0 ); 313 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 314 sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel); 315 } 316 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ 317 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 318 sqlite3VdbeMemSetDouble(&pCtx->s, rVal); 319 } 320 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ 321 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 322 pCtx->isError = SQLITE_ERROR; 323 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); 324 } 325 #ifndef SQLITE_OMIT_UTF16 326 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ 327 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 328 pCtx->isError = SQLITE_ERROR; 329 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); 330 } 331 #endif 332 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ 333 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 334 sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); 335 } 336 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ 337 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 338 sqlite3VdbeMemSetInt64(&pCtx->s, iVal); 339 } 340 void sqlite3_result_null(sqlite3_context *pCtx){ 341 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 342 sqlite3VdbeMemSetNull(&pCtx->s); 343 } 344 void sqlite3_result_text( 345 sqlite3_context *pCtx, 346 const char *z, 347 int n, 348 void (*xDel)(void *) 349 ){ 350 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 351 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel); 352 } 353 #ifndef SQLITE_OMIT_UTF16 354 void sqlite3_result_text16( 355 sqlite3_context *pCtx, 356 const void *z, 357 int n, 358 void (*xDel)(void *) 359 ){ 360 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 361 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel); 362 } 363 void sqlite3_result_text16be( 364 sqlite3_context *pCtx, 365 const void *z, 366 int n, 367 void (*xDel)(void *) 368 ){ 369 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 370 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel); 371 } 372 void sqlite3_result_text16le( 373 sqlite3_context *pCtx, 374 const void *z, 375 int n, 376 void (*xDel)(void *) 377 ){ 378 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 379 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel); 380 } 381 #endif /* SQLITE_OMIT_UTF16 */ 382 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ 383 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 384 sqlite3VdbeMemCopy(&pCtx->s, pValue); 385 } 386 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ 387 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 388 sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); 389 } 390 void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ 391 pCtx->isError = errCode; 392 } 393 394 /* Force an SQLITE_TOOBIG error. */ 395 void sqlite3_result_error_toobig(sqlite3_context *pCtx){ 396 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 397 pCtx->isError = SQLITE_TOOBIG; 398 sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 399 SQLITE_UTF8, SQLITE_STATIC); 400 } 401 402 /* An SQLITE_NOMEM error. */ 403 void sqlite3_result_error_nomem(sqlite3_context *pCtx){ 404 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 405 sqlite3VdbeMemSetNull(&pCtx->s); 406 pCtx->isError = SQLITE_NOMEM; 407 pCtx->s.db->mallocFailed = 1; 408 } 409 410 /* 411 ** Execute the statement pStmt, either until a row of data is ready, the 412 ** statement is completely executed or an error occurs. 413 ** 414 ** This routine implements the bulk of the logic behind the sqlite_step() 415 ** API. The only thing omitted is the automatic recompile if a 416 ** schema change has occurred. That detail is handled by the 417 ** outer sqlite3_step() wrapper procedure. 418 */ 419 static int sqlite3Step(Vdbe *p){ 420 sqlite3 *db; 421 int rc; 422 423 assert(p); 424 if( p->magic!=VDBE_MAGIC_RUN ){ 425 return SQLITE_MISUSE; 426 } 427 428 /* Assert that malloc() has not failed */ 429 db = p->db; 430 assert( !db->mallocFailed ); 431 432 if( p->aborted ){ 433 return SQLITE_ABORT; 434 } 435 if( p->pc<=0 && p->expired ){ 436 if( p->rc==SQLITE_OK ){ 437 p->rc = SQLITE_SCHEMA; 438 } 439 rc = SQLITE_ERROR; 440 goto end_of_step; 441 } 442 if( sqlite3SafetyOn(db) ){ 443 p->rc = SQLITE_MISUSE; 444 return SQLITE_MISUSE; 445 } 446 if( p->pc<0 ){ 447 /* If there are no other statements currently running, then 448 ** reset the interrupt flag. This prevents a call to sqlite3_interrupt 449 ** from interrupting a statement that has not yet started. 450 */ 451 if( db->activeVdbeCnt==0 ){ 452 db->u1.isInterrupted = 0; 453 } 454 455 #ifndef SQLITE_OMIT_TRACE 456 if( db->xProfile && !db->init.busy ){ 457 double rNow; 458 sqlite3OsCurrentTime(db->pVfs, &rNow); 459 p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0; 460 } 461 #endif 462 463 db->activeVdbeCnt++; 464 p->pc = 0; 465 stmtLruRemove(p); 466 } 467 #ifndef SQLITE_OMIT_EXPLAIN 468 if( p->explain ){ 469 rc = sqlite3VdbeList(p); 470 }else 471 #endif /* SQLITE_OMIT_EXPLAIN */ 472 { 473 rc = sqlite3VdbeExec(p); 474 } 475 476 if( sqlite3SafetyOff(db) ){ 477 rc = SQLITE_MISUSE; 478 } 479 480 #ifndef SQLITE_OMIT_TRACE 481 /* Invoke the profile callback if there is one 482 */ 483 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->nOp>0 484 && p->aOp[0].opcode==OP_Trace && p->aOp[0].p4.z!=0 ){ 485 double rNow; 486 u64 elapseTime; 487 488 sqlite3OsCurrentTime(db->pVfs, &rNow); 489 elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime; 490 db->xProfile(db->pProfileArg, p->aOp[0].p4.z, elapseTime); 491 } 492 #endif 493 494 sqlite3Error(p->db, rc, 0); 495 p->rc = sqlite3ApiExit(p->db, p->rc); 496 end_of_step: 497 assert( (rc&0xff)==rc ); 498 if( p->zSql && (rc&0xff)<SQLITE_ROW ){ 499 /* This behavior occurs if sqlite3_prepare_v2() was used to build 500 ** the prepared statement. Return error codes directly */ 501 sqlite3Error(p->db, p->rc, 0); 502 return p->rc; 503 }else{ 504 /* This is for legacy sqlite3_prepare() builds and when the code 505 ** is SQLITE_ROW or SQLITE_DONE */ 506 return rc; 507 } 508 } 509 510 /* 511 ** This is the top-level implementation of sqlite3_step(). Call 512 ** sqlite3Step() to do most of the work. If a schema error occurs, 513 ** call sqlite3Reprepare() and try again. 514 */ 515 #ifdef SQLITE_OMIT_PARSER 516 int sqlite3_step(sqlite3_stmt *pStmt){ 517 int rc = SQLITE_MISUSE; 518 if( pStmt ){ 519 Vdbe *v; 520 v = (Vdbe*)pStmt; 521 sqlite3_mutex_enter(v->db->mutex); 522 rc = sqlite3Step(v); 523 sqlite3_mutex_leave(v->db->mutex); 524 } 525 return rc; 526 } 527 #else 528 int sqlite3_step(sqlite3_stmt *pStmt){ 529 int rc = SQLITE_MISUSE; 530 if( pStmt ){ 531 int cnt = 0; 532 Vdbe *v = (Vdbe*)pStmt; 533 sqlite3 *db = v->db; 534 sqlite3_mutex_enter(db->mutex); 535 while( (rc = sqlite3Step(v))==SQLITE_SCHEMA 536 && cnt++ < 5 537 && vdbeReprepare(v) ){ 538 sqlite3_reset(pStmt); 539 v->expired = 0; 540 } 541 if( rc==SQLITE_SCHEMA && v->zSql && db->pErr ){ 542 /* This case occurs after failing to recompile an sql statement. 543 ** The error message from the SQL compiler has already been loaded 544 ** into the database handle. This block copies the error message 545 ** from the database handle into the statement and sets the statement 546 ** program counter to 0 to ensure that when the statement is 547 ** finalized or reset the parser error message is available via 548 ** sqlite3_errmsg() and sqlite3_errcode(). 549 */ 550 const char *zErr = (const char *)sqlite3_value_text(db->pErr); 551 sqlite3_free(v->zErrMsg); 552 if( !db->mallocFailed ){ 553 v->zErrMsg = sqlite3DbStrDup(db, zErr); 554 } else { 555 v->zErrMsg = 0; 556 v->rc = SQLITE_NOMEM; 557 } 558 } 559 rc = sqlite3ApiExit(db, rc); 560 sqlite3_mutex_leave(db->mutex); 561 } 562 return rc; 563 } 564 #endif 565 566 /* 567 ** Extract the user data from a sqlite3_context structure and return a 568 ** pointer to it. 569 */ 570 void *sqlite3_user_data(sqlite3_context *p){ 571 assert( p && p->pFunc ); 572 return p->pFunc->pUserData; 573 } 574 575 /* 576 ** Extract the user data from a sqlite3_context structure and return a 577 ** pointer to it. 578 */ 579 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ 580 assert( p && p->pFunc ); 581 return p->s.db; 582 } 583 584 /* 585 ** The following is the implementation of an SQL function that always 586 ** fails with an error message stating that the function is used in the 587 ** wrong context. The sqlite3_overload_function() API might construct 588 ** SQL function that use this routine so that the functions will exist 589 ** for name resolution but are actually overloaded by the xFindFunction 590 ** method of virtual tables. 591 */ 592 void sqlite3InvalidFunction( 593 sqlite3_context *context, /* The function calling context */ 594 int argc, /* Number of arguments to the function */ 595 sqlite3_value **argv /* Value of each argument */ 596 ){ 597 const char *zName = context->pFunc->zName; 598 char *zErr; 599 zErr = sqlite3MPrintf(0, 600 "unable to use function %s in the requested context", zName); 601 sqlite3_result_error(context, zErr, -1); 602 sqlite3_free(zErr); 603 } 604 605 /* 606 ** Allocate or return the aggregate context for a user function. A new 607 ** context is allocated on the first call. Subsequent calls return the 608 ** same context that was returned on prior calls. 609 */ 610 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ 611 Mem *pMem; 612 assert( p && p->pFunc && p->pFunc->xStep ); 613 assert( sqlite3_mutex_held(p->s.db->mutex) ); 614 pMem = p->pMem; 615 if( (pMem->flags & MEM_Agg)==0 ){ 616 if( nByte==0 ){ 617 sqlite3VdbeMemReleaseExternal(pMem); 618 pMem->flags = MEM_Null; 619 pMem->z = 0; 620 }else{ 621 sqlite3VdbeMemGrow(pMem, nByte, 0); 622 pMem->flags = MEM_Agg; 623 pMem->u.pDef = p->pFunc; 624 if( pMem->z ){ 625 memset(pMem->z, 0, nByte); 626 } 627 } 628 } 629 return (void*)pMem->z; 630 } 631 632 /* 633 ** Return the auxilary data pointer, if any, for the iArg'th argument to 634 ** the user-function defined by pCtx. 635 */ 636 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ 637 VdbeFunc *pVdbeFunc; 638 639 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 640 pVdbeFunc = pCtx->pVdbeFunc; 641 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ 642 return 0; 643 } 644 return pVdbeFunc->apAux[iArg].pAux; 645 } 646 647 /* 648 ** Set the auxilary data pointer and delete function, for the iArg'th 649 ** argument to the user-function defined by pCtx. Any previous value is 650 ** deleted by calling the delete function specified when it was set. 651 */ 652 void sqlite3_set_auxdata( 653 sqlite3_context *pCtx, 654 int iArg, 655 void *pAux, 656 void (*xDelete)(void*) 657 ){ 658 struct AuxData *pAuxData; 659 VdbeFunc *pVdbeFunc; 660 if( iArg<0 ) goto failed; 661 662 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 663 pVdbeFunc = pCtx->pVdbeFunc; 664 if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ 665 int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0); 666 int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; 667 pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc); 668 if( !pVdbeFunc ){ 669 goto failed; 670 } 671 pCtx->pVdbeFunc = pVdbeFunc; 672 memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux)); 673 pVdbeFunc->nAux = iArg+1; 674 pVdbeFunc->pFunc = pCtx->pFunc; 675 } 676 677 pAuxData = &pVdbeFunc->apAux[iArg]; 678 if( pAuxData->pAux && pAuxData->xDelete ){ 679 pAuxData->xDelete(pAuxData->pAux); 680 } 681 pAuxData->pAux = pAux; 682 pAuxData->xDelete = xDelete; 683 return; 684 685 failed: 686 if( xDelete ){ 687 xDelete(pAux); 688 } 689 } 690 691 /* 692 ** Return the number of times the Step function of a aggregate has been 693 ** called. 694 ** 695 ** This function is deprecated. Do not use it for new code. It is 696 ** provide only to avoid breaking legacy code. New aggregate function 697 ** implementations should keep their own counts within their aggregate 698 ** context. 699 */ 700 int sqlite3_aggregate_count(sqlite3_context *p){ 701 assert( p && p->pFunc && p->pFunc->xStep ); 702 return p->pMem->n; 703 } 704 705 /* 706 ** Return the number of columns in the result set for the statement pStmt. 707 */ 708 int sqlite3_column_count(sqlite3_stmt *pStmt){ 709 Vdbe *pVm = (Vdbe *)pStmt; 710 return pVm ? pVm->nResColumn : 0; 711 } 712 713 /* 714 ** Return the number of values available from the current row of the 715 ** currently executing statement pStmt. 716 */ 717 int sqlite3_data_count(sqlite3_stmt *pStmt){ 718 Vdbe *pVm = (Vdbe *)pStmt; 719 if( pVm==0 || pVm->pResultSet==0 ) return 0; 720 return pVm->nResColumn; 721 } 722 723 724 /* 725 ** Check to see if column iCol of the given statement is valid. If 726 ** it is, return a pointer to the Mem for the value of that column. 727 ** If iCol is not valid, return a pointer to a Mem which has a value 728 ** of NULL. 729 */ 730 static Mem *columnMem(sqlite3_stmt *pStmt, int i){ 731 Vdbe *pVm; 732 int vals; 733 Mem *pOut; 734 735 pVm = (Vdbe *)pStmt; 736 if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){ 737 sqlite3_mutex_enter(pVm->db->mutex); 738 vals = sqlite3_data_count(pStmt); 739 pOut = &pVm->pResultSet[i]; 740 }else{ 741 static const Mem nullMem = {{0}, 0.0, 0, "", 0, MEM_Null, SQLITE_NULL, 0, 0, 0 }; 742 if( pVm->db ){ 743 sqlite3_mutex_enter(pVm->db->mutex); 744 sqlite3Error(pVm->db, SQLITE_RANGE, 0); 745 } 746 pOut = (Mem*)&nullMem; 747 } 748 return pOut; 749 } 750 751 /* 752 ** This function is called after invoking an sqlite3_value_XXX function on a 753 ** column value (i.e. a value returned by evaluating an SQL expression in the 754 ** select list of a SELECT statement) that may cause a malloc() failure. If 755 ** malloc() has failed, the threads mallocFailed flag is cleared and the result 756 ** code of statement pStmt set to SQLITE_NOMEM. 757 ** 758 ** Specifically, this is called from within: 759 ** 760 ** sqlite3_column_int() 761 ** sqlite3_column_int64() 762 ** sqlite3_column_text() 763 ** sqlite3_column_text16() 764 ** sqlite3_column_real() 765 ** sqlite3_column_bytes() 766 ** sqlite3_column_bytes16() 767 ** 768 ** But not for sqlite3_column_blob(), which never calls malloc(). 769 */ 770 static void columnMallocFailure(sqlite3_stmt *pStmt) 771 { 772 /* If malloc() failed during an encoding conversion within an 773 ** sqlite3_column_XXX API, then set the return code of the statement to 774 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR 775 ** and _finalize() will return NOMEM. 776 */ 777 Vdbe *p = (Vdbe *)pStmt; 778 if( p ){ 779 p->rc = sqlite3ApiExit(p->db, p->rc); 780 sqlite3_mutex_leave(p->db->mutex); 781 } 782 } 783 784 /**************************** sqlite3_column_ ******************************* 785 ** The following routines are used to access elements of the current row 786 ** in the result set. 787 */ 788 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ 789 const void *val; 790 val = sqlite3_value_blob( columnMem(pStmt,i) ); 791 /* Even though there is no encoding conversion, value_blob() might 792 ** need to call malloc() to expand the result of a zeroblob() 793 ** expression. 794 */ 795 columnMallocFailure(pStmt); 796 return val; 797 } 798 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ 799 int val = sqlite3_value_bytes( columnMem(pStmt,i) ); 800 columnMallocFailure(pStmt); 801 return val; 802 } 803 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ 804 int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); 805 columnMallocFailure(pStmt); 806 return val; 807 } 808 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ 809 double val = sqlite3_value_double( columnMem(pStmt,i) ); 810 columnMallocFailure(pStmt); 811 return val; 812 } 813 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ 814 int val = sqlite3_value_int( columnMem(pStmt,i) ); 815 columnMallocFailure(pStmt); 816 return val; 817 } 818 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ 819 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); 820 columnMallocFailure(pStmt); 821 return val; 822 } 823 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ 824 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); 825 columnMallocFailure(pStmt); 826 return val; 827 } 828 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ 829 sqlite3_value *pOut = columnMem(pStmt, i); 830 columnMallocFailure(pStmt); 831 return pOut; 832 } 833 #ifndef SQLITE_OMIT_UTF16 834 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ 835 const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); 836 columnMallocFailure(pStmt); 837 return val; 838 } 839 #endif /* SQLITE_OMIT_UTF16 */ 840 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ 841 int iType = sqlite3_value_type( columnMem(pStmt,i) ); 842 columnMallocFailure(pStmt); 843 return iType; 844 } 845 846 /* The following function is experimental and subject to change or 847 ** removal */ 848 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ 849 ** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); 850 **} 851 */ 852 853 /* 854 ** Convert the N-th element of pStmt->pColName[] into a string using 855 ** xFunc() then return that string. If N is out of range, return 0. 856 ** 857 ** There are up to 5 names for each column. useType determines which 858 ** name is returned. Here are the names: 859 ** 860 ** 0 The column name as it should be displayed for output 861 ** 1 The datatype name for the column 862 ** 2 The name of the database that the column derives from 863 ** 3 The name of the table that the column derives from 864 ** 4 The name of the table column that the result column derives from 865 ** 866 ** If the result is not a simple column reference (if it is an expression 867 ** or a constant) then useTypes 2, 3, and 4 return NULL. 868 */ 869 static const void *columnName( 870 sqlite3_stmt *pStmt, 871 int N, 872 const void *(*xFunc)(Mem*), 873 int useType 874 ){ 875 const void *ret = 0; 876 Vdbe *p = (Vdbe *)pStmt; 877 int n; 878 879 880 if( p!=0 ){ 881 n = sqlite3_column_count(pStmt); 882 if( N<n && N>=0 ){ 883 N += useType*n; 884 sqlite3_mutex_enter(p->db->mutex); 885 ret = xFunc(&p->aColName[N]); 886 887 /* A malloc may have failed inside of the xFunc() call. If this 888 ** is the case, clear the mallocFailed flag and return NULL. 889 */ 890 if( p->db && p->db->mallocFailed ){ 891 p->db->mallocFailed = 0; 892 ret = 0; 893 } 894 sqlite3_mutex_leave(p->db->mutex); 895 } 896 } 897 return ret; 898 } 899 900 /* 901 ** Return the name of the Nth column of the result set returned by SQL 902 ** statement pStmt. 903 */ 904 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ 905 return columnName( 906 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); 907 } 908 #ifndef SQLITE_OMIT_UTF16 909 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ 910 return columnName( 911 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); 912 } 913 #endif 914 915 /* 916 ** Constraint: If you have ENABLE_COLUMN_METADATA then you must 917 ** not define OMIT_DECLTYPE. 918 */ 919 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) 920 # error "Must not define both SQLITE_OMIT_DECLTYPE \ 921 and SQLITE_ENABLE_COLUMN_METADATA" 922 #endif 923 924 #ifndef SQLITE_OMIT_DECLTYPE 925 /* 926 ** Return the column declaration type (if applicable) of the 'i'th column 927 ** of the result set of SQL statement pStmt. 928 */ 929 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ 930 return columnName( 931 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); 932 } 933 #ifndef SQLITE_OMIT_UTF16 934 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ 935 return columnName( 936 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); 937 } 938 #endif /* SQLITE_OMIT_UTF16 */ 939 #endif /* SQLITE_OMIT_DECLTYPE */ 940 941 #ifdef SQLITE_ENABLE_COLUMN_METADATA 942 /* 943 ** Return the name of the database from which a result column derives. 944 ** NULL is returned if the result column is an expression or constant or 945 ** anything else which is not an unabiguous reference to a database column. 946 */ 947 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ 948 return columnName( 949 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); 950 } 951 #ifndef SQLITE_OMIT_UTF16 952 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ 953 return columnName( 954 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); 955 } 956 #endif /* SQLITE_OMIT_UTF16 */ 957 958 /* 959 ** Return the name of the table from which a result column derives. 960 ** NULL is returned if the result column is an expression or constant or 961 ** anything else which is not an unabiguous reference to a database column. 962 */ 963 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ 964 return columnName( 965 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); 966 } 967 #ifndef SQLITE_OMIT_UTF16 968 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ 969 return columnName( 970 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); 971 } 972 #endif /* SQLITE_OMIT_UTF16 */ 973 974 /* 975 ** Return the name of the table column from which a result column derives. 976 ** NULL is returned if the result column is an expression or constant or 977 ** anything else which is not an unabiguous reference to a database column. 978 */ 979 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ 980 return columnName( 981 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); 982 } 983 #ifndef SQLITE_OMIT_UTF16 984 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ 985 return columnName( 986 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); 987 } 988 #endif /* SQLITE_OMIT_UTF16 */ 989 #endif /* SQLITE_ENABLE_COLUMN_METADATA */ 990 991 992 /******************************* sqlite3_bind_ *************************** 993 ** 994 ** Routines used to attach values to wildcards in a compiled SQL statement. 995 */ 996 /* 997 ** Unbind the value bound to variable i in virtual machine p. This is the 998 ** the same as binding a NULL value to the column. If the "i" parameter is 999 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. 1000 ** 1001 ** The error code stored in database p->db is overwritten with the return 1002 ** value in any case. 1003 */ 1004 static int vdbeUnbind(Vdbe *p, int i){ 1005 Mem *pVar; 1006 if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ 1007 if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0); 1008 return SQLITE_MISUSE; 1009 } 1010 if( i<1 || i>p->nVar ){ 1011 sqlite3Error(p->db, SQLITE_RANGE, 0); 1012 return SQLITE_RANGE; 1013 } 1014 i--; 1015 pVar = &p->aVar[i]; 1016 sqlite3VdbeMemRelease(pVar); 1017 pVar->flags = MEM_Null; 1018 sqlite3Error(p->db, SQLITE_OK, 0); 1019 return SQLITE_OK; 1020 } 1021 1022 /* 1023 ** Bind a text or BLOB value. 1024 */ 1025 static int bindText( 1026 sqlite3_stmt *pStmt, /* The statement to bind against */ 1027 int i, /* Index of the parameter to bind */ 1028 const void *zData, /* Pointer to the data to be bound */ 1029 int nData, /* Number of bytes of data to be bound */ 1030 void (*xDel)(void*), /* Destructor for the data */ 1031 int encoding /* Encoding for the data */ 1032 ){ 1033 Vdbe *p = (Vdbe *)pStmt; 1034 Mem *pVar; 1035 int rc; 1036 1037 if( p==0 ){ 1038 return SQLITE_MISUSE; 1039 } 1040 sqlite3_mutex_enter(p->db->mutex); 1041 rc = vdbeUnbind(p, i); 1042 if( rc==SQLITE_OK && zData!=0 ){ 1043 pVar = &p->aVar[i-1]; 1044 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); 1045 if( rc==SQLITE_OK && encoding!=0 ){ 1046 rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); 1047 } 1048 sqlite3Error(p->db, rc, 0); 1049 rc = sqlite3ApiExit(p->db, rc); 1050 } 1051 sqlite3_mutex_leave(p->db->mutex); 1052 return rc; 1053 } 1054 1055 1056 /* 1057 ** Bind a blob value to an SQL statement variable. 1058 */ 1059 int sqlite3_bind_blob( 1060 sqlite3_stmt *pStmt, 1061 int i, 1062 const void *zData, 1063 int nData, 1064 void (*xDel)(void*) 1065 ){ 1066 return bindText(pStmt, i, zData, nData, xDel, 0); 1067 } 1068 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ 1069 int rc; 1070 Vdbe *p = (Vdbe *)pStmt; 1071 sqlite3_mutex_enter(p->db->mutex); 1072 rc = vdbeUnbind(p, i); 1073 if( rc==SQLITE_OK ){ 1074 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); 1075 } 1076 sqlite3_mutex_leave(p->db->mutex); 1077 return rc; 1078 } 1079 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ 1080 return sqlite3_bind_int64(p, i, (i64)iValue); 1081 } 1082 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ 1083 int rc; 1084 Vdbe *p = (Vdbe *)pStmt; 1085 sqlite3_mutex_enter(p->db->mutex); 1086 rc = vdbeUnbind(p, i); 1087 if( rc==SQLITE_OK ){ 1088 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); 1089 } 1090 sqlite3_mutex_leave(p->db->mutex); 1091 return rc; 1092 } 1093 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ 1094 int rc; 1095 Vdbe *p = (Vdbe*)pStmt; 1096 sqlite3_mutex_enter(p->db->mutex); 1097 rc = vdbeUnbind(p, i); 1098 sqlite3_mutex_leave(p->db->mutex); 1099 return rc; 1100 } 1101 int sqlite3_bind_text( 1102 sqlite3_stmt *pStmt, 1103 int i, 1104 const char *zData, 1105 int nData, 1106 void (*xDel)(void*) 1107 ){ 1108 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 1109 } 1110 #ifndef SQLITE_OMIT_UTF16 1111 int sqlite3_bind_text16( 1112 sqlite3_stmt *pStmt, 1113 int i, 1114 const void *zData, 1115 int nData, 1116 void (*xDel)(void*) 1117 ){ 1118 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); 1119 } 1120 #endif /* SQLITE_OMIT_UTF16 */ 1121 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ 1122 int rc; 1123 Vdbe *p = (Vdbe *)pStmt; 1124 sqlite3_mutex_enter(p->db->mutex); 1125 rc = vdbeUnbind(p, i); 1126 if( rc==SQLITE_OK ){ 1127 rc = sqlite3VdbeMemCopy(&p->aVar[i-1], pValue); 1128 } 1129 rc = sqlite3ApiExit(p->db, rc); 1130 sqlite3_mutex_leave(p->db->mutex); 1131 return rc; 1132 } 1133 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ 1134 int rc; 1135 Vdbe *p = (Vdbe *)pStmt; 1136 sqlite3_mutex_enter(p->db->mutex); 1137 rc = vdbeUnbind(p, i); 1138 if( rc==SQLITE_OK ){ 1139 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); 1140 } 1141 sqlite3_mutex_leave(p->db->mutex); 1142 return rc; 1143 } 1144 1145 /* 1146 ** Return the number of wildcards that can be potentially bound to. 1147 ** This routine is added to support DBD::SQLite. 1148 */ 1149 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ 1150 Vdbe *p = (Vdbe*)pStmt; 1151 return p ? p->nVar : 0; 1152 } 1153 1154 /* 1155 ** Create a mapping from variable numbers to variable names 1156 ** in the Vdbe.azVar[] array, if such a mapping does not already 1157 ** exist. 1158 */ 1159 static void createVarMap(Vdbe *p){ 1160 if( !p->okVar ){ 1161 sqlite3_mutex_enter(p->db->mutex); 1162 if( !p->okVar ){ 1163 int j; 1164 Op *pOp; 1165 for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){ 1166 if( pOp->opcode==OP_Variable ){ 1167 assert( pOp->p1>0 && pOp->p1<=p->nVar ); 1168 p->azVar[pOp->p1-1] = pOp->p4.z; 1169 } 1170 } 1171 p->okVar = 1; 1172 } 1173 sqlite3_mutex_leave(p->db->mutex); 1174 } 1175 } 1176 1177 /* 1178 ** Return the name of a wildcard parameter. Return NULL if the index 1179 ** is out of range or if the wildcard is unnamed. 1180 ** 1181 ** The result is always UTF-8. 1182 */ 1183 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ 1184 Vdbe *p = (Vdbe*)pStmt; 1185 if( p==0 || i<1 || i>p->nVar ){ 1186 return 0; 1187 } 1188 createVarMap(p); 1189 return p->azVar[i-1]; 1190 } 1191 1192 /* 1193 ** Given a wildcard parameter name, return the index of the variable 1194 ** with that name. If there is no variable with the given name, 1195 ** return 0. 1196 */ 1197 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ 1198 Vdbe *p = (Vdbe*)pStmt; 1199 int i; 1200 if( p==0 ){ 1201 return 0; 1202 } 1203 createVarMap(p); 1204 if( zName ){ 1205 for(i=0; i<p->nVar; i++){ 1206 const char *z = p->azVar[i]; 1207 if( z && strcmp(z,zName)==0 ){ 1208 return i+1; 1209 } 1210 } 1211 } 1212 return 0; 1213 } 1214 1215 /* 1216 ** Transfer all bindings from the first statement over to the second. 1217 ** If the two statements contain a different number of bindings, then 1218 ** an SQLITE_ERROR is returned. 1219 */ 1220 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 1221 Vdbe *pFrom = (Vdbe*)pFromStmt; 1222 Vdbe *pTo = (Vdbe*)pToStmt; 1223 int i, rc = SQLITE_OK; 1224 if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT) 1225 || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) 1226 || pTo->db!=pFrom->db ){ 1227 return SQLITE_MISUSE; 1228 } 1229 if( pFrom->nVar!=pTo->nVar ){ 1230 return SQLITE_ERROR; 1231 } 1232 sqlite3_mutex_enter(pTo->db->mutex); 1233 for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){ 1234 sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); 1235 } 1236 sqlite3_mutex_leave(pTo->db->mutex); 1237 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); 1238 return rc; 1239 } 1240 1241 /* 1242 ** Return the sqlite3* database handle to which the prepared statement given 1243 ** in the argument belongs. This is the same database handle that was 1244 ** the first argument to the sqlite3_prepare() that was used to create 1245 ** the statement in the first place. 1246 */ 1247 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ 1248 return pStmt ? ((Vdbe*)pStmt)->db : 0; 1249 } 1250