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 #include "os.h" 19 20 /* 21 ** Return TRUE (non-zero) of the statement supplied as an argument needs 22 ** to be recompiled. A statement needs to be recompiled whenever the 23 ** execution environment changes in a way that would alter the program 24 ** that sqlite3_prepare() generates. For example, if new functions or 25 ** collating sequences are registered or if an authorizer function is 26 ** added or changed. 27 */ 28 int sqlite3_expired(sqlite3_stmt *pStmt){ 29 Vdbe *p = (Vdbe*)pStmt; 30 return p==0 || p->expired; 31 } 32 33 /**************************** sqlite3_value_ ******************************* 34 ** The following routines extract information from a Mem or sqlite3_value 35 ** structure. 36 */ 37 const void *sqlite3_value_blob(sqlite3_value *pVal){ 38 Mem *p = (Mem*)pVal; 39 if( p->flags & (MEM_Blob|MEM_Str) ){ 40 return p->z; 41 }else{ 42 return sqlite3_value_text(pVal); 43 } 44 } 45 int sqlite3_value_bytes(sqlite3_value *pVal){ 46 return sqlite3ValueBytes(pVal, SQLITE_UTF8); 47 } 48 int sqlite3_value_bytes16(sqlite3_value *pVal){ 49 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); 50 } 51 double sqlite3_value_double(sqlite3_value *pVal){ 52 return sqlite3VdbeRealValue((Mem*)pVal); 53 } 54 int sqlite3_value_int(sqlite3_value *pVal){ 55 return sqlite3VdbeIntValue((Mem*)pVal); 56 } 57 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ 58 return sqlite3VdbeIntValue((Mem*)pVal); 59 } 60 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ 61 return (const char *)sqlite3ValueText(pVal, SQLITE_UTF8); 62 } 63 #ifndef SQLITE_OMIT_UTF16 64 const void *sqlite3_value_text16(sqlite3_value* pVal){ 65 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); 66 } 67 const void *sqlite3_value_text16be(sqlite3_value *pVal){ 68 return sqlite3ValueText(pVal, SQLITE_UTF16BE); 69 } 70 const void *sqlite3_value_text16le(sqlite3_value *pVal){ 71 return sqlite3ValueText(pVal, SQLITE_UTF16LE); 72 } 73 #endif /* SQLITE_OMIT_UTF16 */ 74 int sqlite3_value_type(sqlite3_value* pVal){ 75 return pVal->type; 76 } 77 78 /**************************** sqlite3_result_ ******************************* 79 ** The following routines are used by user-defined functions to specify 80 ** the function result. 81 */ 82 void sqlite3_result_blob( 83 sqlite3_context *pCtx, 84 const void *z, 85 int n, 86 void (*xDel)(void *) 87 ){ 88 assert( n>=0 ); 89 sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel); 90 } 91 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ 92 sqlite3VdbeMemSetDouble(&pCtx->s, rVal); 93 } 94 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ 95 pCtx->isError = 1; 96 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); 97 } 98 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ 99 pCtx->isError = 1; 100 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); 101 } 102 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ 103 sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); 104 } 105 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ 106 sqlite3VdbeMemSetInt64(&pCtx->s, iVal); 107 } 108 void sqlite3_result_null(sqlite3_context *pCtx){ 109 sqlite3VdbeMemSetNull(&pCtx->s); 110 } 111 void sqlite3_result_text( 112 sqlite3_context *pCtx, 113 const char *z, 114 int n, 115 void (*xDel)(void *) 116 ){ 117 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel); 118 } 119 #ifndef SQLITE_OMIT_UTF16 120 void sqlite3_result_text16( 121 sqlite3_context *pCtx, 122 const void *z, 123 int n, 124 void (*xDel)(void *) 125 ){ 126 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel); 127 } 128 void sqlite3_result_text16be( 129 sqlite3_context *pCtx, 130 const void *z, 131 int n, 132 void (*xDel)(void *) 133 ){ 134 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel); 135 } 136 void sqlite3_result_text16le( 137 sqlite3_context *pCtx, 138 const void *z, 139 int n, 140 void (*xDel)(void *) 141 ){ 142 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel); 143 } 144 #endif /* SQLITE_OMIT_UTF16 */ 145 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ 146 sqlite3VdbeMemCopy(&pCtx->s, pValue); 147 } 148 149 150 /* 151 ** Execute the statement pStmt, either until a row of data is ready, the 152 ** statement is completely executed or an error occurs. 153 */ 154 int sqlite3_step(sqlite3_stmt *pStmt){ 155 Vdbe *p = (Vdbe*)pStmt; 156 sqlite3 *db; 157 int rc; 158 159 if( p==0 || p->magic!=VDBE_MAGIC_RUN ){ 160 return SQLITE_MISUSE; 161 } 162 if( p->aborted ){ 163 return SQLITE_ABORT; 164 } 165 if( p->pc<=0 && p->expired ){ 166 if( p->rc==SQLITE_OK ){ 167 p->rc = SQLITE_SCHEMA; 168 } 169 return SQLITE_ERROR; 170 } 171 db = p->db; 172 if( sqlite3SafetyOn(db) ){ 173 p->rc = SQLITE_MISUSE; 174 return SQLITE_MISUSE; 175 } 176 if( p->pc<0 ){ 177 #ifndef SQLITE_OMIT_TRACE 178 /* Invoke the trace callback if there is one 179 */ 180 if( db->xTrace && !db->init.busy ){ 181 assert( p->nOp>0 ); 182 assert( p->aOp[p->nOp-1].opcode==OP_Noop ); 183 assert( p->aOp[p->nOp-1].p3!=0 ); 184 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); 185 sqlite3SafetyOff(db); 186 db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3); 187 if( sqlite3SafetyOn(db) ){ 188 p->rc = SQLITE_MISUSE; 189 return SQLITE_MISUSE; 190 } 191 } 192 if( db->xProfile && !db->init.busy ){ 193 double rNow; 194 sqlite3OsCurrentTime(&rNow); 195 p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0; 196 } 197 #endif 198 199 /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned 200 ** on in debugging mode. 201 */ 202 #ifdef SQLITE_DEBUG 203 if( (db->flags & SQLITE_SqlTrace)!=0 ){ 204 sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3); 205 } 206 #endif /* SQLITE_DEBUG */ 207 208 db->activeVdbeCnt++; 209 p->pc = 0; 210 } 211 #ifndef SQLITE_OMIT_EXPLAIN 212 if( p->explain ){ 213 rc = sqlite3VdbeList(p); 214 }else 215 #endif /* SQLITE_OMIT_EXPLAIN */ 216 { 217 rc = sqlite3VdbeExec(p); 218 } 219 220 if( sqlite3SafetyOff(db) ){ 221 rc = SQLITE_MISUSE; 222 } 223 224 #ifndef SQLITE_OMIT_TRACE 225 /* Invoke the profile callback if there is one 226 */ 227 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){ 228 double rNow; 229 u64 elapseTime; 230 231 sqlite3OsCurrentTime(&rNow); 232 elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime; 233 assert( p->nOp>0 ); 234 assert( p->aOp[p->nOp-1].opcode==OP_Noop ); 235 assert( p->aOp[p->nOp-1].p3!=0 ); 236 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); 237 db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime); 238 } 239 #endif 240 241 sqlite3Error(p->db, rc, p->zErrMsg ? "%s" : 0, p->zErrMsg); 242 return rc; 243 } 244 245 /* 246 ** Extract the user data from a sqlite3_context structure and return a 247 ** pointer to it. 248 */ 249 void *sqlite3_user_data(sqlite3_context *p){ 250 assert( p && p->pFunc ); 251 return p->pFunc->pUserData; 252 } 253 254 /* 255 ** Allocate or return the aggregate context for a user function. A new 256 ** context is allocated on the first call. Subsequent calls return the 257 ** same context that was returned on prior calls. 258 */ 259 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ 260 Mem *pMem = p->pMem; 261 assert( p && p->pFunc && p->pFunc->xStep ); 262 if( (pMem->flags & MEM_Agg)==0 ){ 263 if( nByte==0 ){ 264 assert( pMem->flags==MEM_Null ); 265 pMem->z = 0; 266 }else{ 267 pMem->flags = MEM_Agg; 268 pMem->xDel = sqlite3FreeX; 269 *(FuncDef**)&pMem->i = p->pFunc; 270 if( nByte<=NBFS ){ 271 pMem->z = pMem->zShort; 272 memset(pMem->z, 0, nByte); 273 }else{ 274 pMem->z = sqliteMalloc( nByte ); 275 } 276 } 277 } 278 return (void*)pMem->z; 279 } 280 281 /* 282 ** Return the auxilary data pointer, if any, for the iArg'th argument to 283 ** the user-function defined by pCtx. 284 */ 285 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ 286 VdbeFunc *pVdbeFunc = pCtx->pVdbeFunc; 287 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ 288 return 0; 289 } 290 return pVdbeFunc->apAux[iArg].pAux; 291 } 292 293 /* 294 ** Set the auxilary data pointer and delete function, for the iArg'th 295 ** argument to the user-function defined by pCtx. Any previous value is 296 ** deleted by calling the delete function specified when it was set. 297 */ 298 void sqlite3_set_auxdata( 299 sqlite3_context *pCtx, 300 int iArg, 301 void *pAux, 302 void (*xDelete)(void*) 303 ){ 304 struct AuxData *pAuxData; 305 VdbeFunc *pVdbeFunc; 306 if( iArg<0 ) return; 307 308 pVdbeFunc = pCtx->pVdbeFunc; 309 if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ 310 int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; 311 pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc); 312 if( !pVdbeFunc ) return; 313 pCtx->pVdbeFunc = pVdbeFunc; 314 memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0, 315 sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux)); 316 pVdbeFunc->nAux = iArg+1; 317 pVdbeFunc->pFunc = pCtx->pFunc; 318 } 319 320 pAuxData = &pVdbeFunc->apAux[iArg]; 321 if( pAuxData->pAux && pAuxData->xDelete ){ 322 pAuxData->xDelete(pAuxData->pAux); 323 } 324 pAuxData->pAux = pAux; 325 pAuxData->xDelete = xDelete; 326 } 327 328 /* 329 ** Return the number of times the Step function of a aggregate has been 330 ** called. 331 ** 332 ** This routine is defined here in vdbe.c because it depends on knowing 333 ** the internals of the sqlite3_context structure which is only defined in 334 ** this source file. 335 */ 336 int sqlite3_aggregate_count(sqlite3_context *p){ 337 assert( p && p->pFunc && p->pFunc->xStep ); 338 return p->pMem->n; 339 } 340 341 /* 342 ** Return the number of columns in the result set for the statement pStmt. 343 */ 344 int sqlite3_column_count(sqlite3_stmt *pStmt){ 345 Vdbe *pVm = (Vdbe *)pStmt; 346 return pVm ? pVm->nResColumn : 0; 347 } 348 349 /* 350 ** Return the number of values available from the current row of the 351 ** currently executing statement pStmt. 352 */ 353 int sqlite3_data_count(sqlite3_stmt *pStmt){ 354 Vdbe *pVm = (Vdbe *)pStmt; 355 if( pVm==0 || !pVm->resOnStack ) return 0; 356 return pVm->nResColumn; 357 } 358 359 360 /* 361 ** Check to see if column iCol of the given statement is valid. If 362 ** it is, return a pointer to the Mem for the value of that column. 363 ** If iCol is not valid, return a pointer to a Mem which has a value 364 ** of NULL. 365 */ 366 static Mem *columnMem(sqlite3_stmt *pStmt, int i){ 367 Vdbe *pVm = (Vdbe *)pStmt; 368 int vals = sqlite3_data_count(pStmt); 369 if( i>=vals || i<0 ){ 370 static Mem nullMem; 371 if( nullMem.flags==0 ){ nullMem.flags = MEM_Null; } 372 sqlite3Error(pVm->db, SQLITE_RANGE, 0); 373 return &nullMem; 374 } 375 return &pVm->pTos[(1-vals)+i]; 376 } 377 378 /**************************** sqlite3_column_ ******************************* 379 ** The following routines are used to access elements of the current row 380 ** in the result set. 381 */ 382 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ 383 return sqlite3_value_blob( columnMem(pStmt,i) ); 384 } 385 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ 386 return sqlite3_value_bytes( columnMem(pStmt,i) ); 387 } 388 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ 389 return sqlite3_value_bytes16( columnMem(pStmt,i) ); 390 } 391 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ 392 return sqlite3_value_double( columnMem(pStmt,i) ); 393 } 394 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ 395 return sqlite3_value_int( columnMem(pStmt,i) ); 396 } 397 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ 398 return sqlite3_value_int64( columnMem(pStmt,i) ); 399 } 400 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ 401 return sqlite3_value_text( columnMem(pStmt,i) ); 402 } 403 #if 0 404 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ 405 return columnMem(pStmt, i); 406 } 407 #endif 408 #ifndef SQLITE_OMIT_UTF16 409 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ 410 return sqlite3_value_text16( columnMem(pStmt,i) ); 411 } 412 #endif /* SQLITE_OMIT_UTF16 */ 413 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ 414 return sqlite3_value_type( columnMem(pStmt,i) ); 415 } 416 417 /* 418 ** Convert the N-th element of pStmt->pColName[] into a string using 419 ** xFunc() then return that string. If N is out of range, return 0. 420 ** 421 ** There are up to 5 names for each column. useType determines which 422 ** name is returned. Here are the names: 423 ** 424 ** 0 The column name as it should be displayed for output 425 ** 1 The datatype name for the column 426 ** 2 The name of the database that the column derives from 427 ** 3 The name of the table that the column derives from 428 ** 4 The name of the table column that the result column derives from 429 ** 430 ** If the result is not a simple column reference (if it is an expression 431 ** or a constant) then useTypes 2, 3, and 4 return NULL. 432 */ 433 static const void *columnName( 434 sqlite3_stmt *pStmt, 435 int N, 436 const void *(*xFunc)(Mem*), 437 int useType 438 ){ 439 Vdbe *p = (Vdbe *)pStmt; 440 int n = sqlite3_column_count(pStmt); 441 442 if( p==0 || N>=n || N<0 ){ 443 return 0; 444 } 445 N += useType*n; 446 return xFunc(&p->aColName[N]); 447 } 448 449 450 /* 451 ** Return the name of the Nth column of the result set returned by SQL 452 ** statement pStmt. 453 */ 454 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ 455 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 0); 456 } 457 #ifndef SQLITE_OMIT_UTF16 458 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ 459 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 0); 460 } 461 #endif 462 463 /* 464 ** Return the column declaration type (if applicable) of the 'i'th column 465 ** of the result set of SQL statement pStmt. 466 */ 467 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ 468 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 1); 469 } 470 #ifndef SQLITE_OMIT_UTF16 471 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ 472 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 1); 473 } 474 #endif /* SQLITE_OMIT_UTF16 */ 475 476 #if !defined(SQLITE_OMIT_ORIGIN_NAMES) && 0 477 /* 478 ** Return the name of the database from which a result column derives. 479 ** NULL is returned if the result column is an expression or constant or 480 ** anything else which is not an unabiguous reference to a database column. 481 */ 482 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ 483 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 2); 484 } 485 #ifndef SQLITE_OMIT_UTF16 486 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ 487 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 2); 488 } 489 #endif /* SQLITE_OMIT_UTF16 */ 490 491 /* 492 ** Return the name of the table from which a result column derives. 493 ** NULL is returned if the result column is an expression or constant or 494 ** anything else which is not an unabiguous reference to a database column. 495 */ 496 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ 497 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 3); 498 } 499 #ifndef SQLITE_OMIT_UTF16 500 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ 501 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 3); 502 } 503 #endif /* SQLITE_OMIT_UTF16 */ 504 505 /* 506 ** Return the name of the table column from which a result column derives. 507 ** NULL is returned if the result column is an expression or constant or 508 ** anything else which is not an unabiguous reference to a database column. 509 */ 510 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ 511 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 4); 512 } 513 #ifndef SQLITE_OMIT_UTF16 514 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ 515 return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 4); 516 } 517 #endif /* SQLITE_OMIT_UTF16 */ 518 #endif /* SQLITE_OMIT_ORIGIN_NAMES */ 519 520 521 522 523 /******************************* sqlite3_bind_ *************************** 524 ** 525 ** Routines used to attach values to wildcards in a compiled SQL statement. 526 */ 527 /* 528 ** Unbind the value bound to variable i in virtual machine p. This is the 529 ** the same as binding a NULL value to the column. If the "i" parameter is 530 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. 531 ** 532 ** The error code stored in database p->db is overwritten with the return 533 ** value in any case. 534 */ 535 static int vdbeUnbind(Vdbe *p, int i){ 536 Mem *pVar; 537 if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ 538 if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0); 539 return SQLITE_MISUSE; 540 } 541 if( i<1 || i>p->nVar ){ 542 sqlite3Error(p->db, SQLITE_RANGE, 0); 543 return SQLITE_RANGE; 544 } 545 i--; 546 pVar = &p->aVar[i]; 547 sqlite3VdbeMemRelease(pVar); 548 pVar->flags = MEM_Null; 549 sqlite3Error(p->db, SQLITE_OK, 0); 550 return SQLITE_OK; 551 } 552 553 /* 554 ** Bind a text or BLOB value. 555 */ 556 static int bindText( 557 sqlite3_stmt *pStmt, 558 int i, 559 const void *zData, 560 int nData, 561 void (*xDel)(void*), 562 int encoding 563 ){ 564 Vdbe *p = (Vdbe *)pStmt; 565 Mem *pVar; 566 int rc; 567 568 rc = vdbeUnbind(p, i); 569 if( rc || zData==0 ){ 570 return rc; 571 } 572 pVar = &p->aVar[i-1]; 573 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); 574 if( rc ){ 575 return rc; 576 } 577 if( rc==SQLITE_OK && encoding!=0 ){ 578 rc = sqlite3VdbeChangeEncoding(pVar, p->db->enc); 579 } 580 return rc; 581 } 582 583 584 /* 585 ** Bind a blob value to an SQL statement variable. 586 */ 587 int sqlite3_bind_blob( 588 sqlite3_stmt *pStmt, 589 int i, 590 const void *zData, 591 int nData, 592 void (*xDel)(void*) 593 ){ 594 return bindText(pStmt, i, zData, nData, xDel, 0); 595 } 596 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ 597 int rc; 598 Vdbe *p = (Vdbe *)pStmt; 599 rc = vdbeUnbind(p, i); 600 if( rc==SQLITE_OK ){ 601 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); 602 } 603 return rc; 604 } 605 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ 606 return sqlite3_bind_int64(p, i, (i64)iValue); 607 } 608 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ 609 int rc; 610 Vdbe *p = (Vdbe *)pStmt; 611 rc = vdbeUnbind(p, i); 612 if( rc==SQLITE_OK ){ 613 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); 614 } 615 return rc; 616 } 617 int sqlite3_bind_null(sqlite3_stmt* p, int i){ 618 return vdbeUnbind((Vdbe *)p, i); 619 } 620 int sqlite3_bind_text( 621 sqlite3_stmt *pStmt, 622 int i, 623 const char *zData, 624 int nData, 625 void (*xDel)(void*) 626 ){ 627 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 628 } 629 #ifndef SQLITE_OMIT_UTF16 630 int sqlite3_bind_text16( 631 sqlite3_stmt *pStmt, 632 int i, 633 const void *zData, 634 int nData, 635 void (*xDel)(void*) 636 ){ 637 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); 638 } 639 #endif /* SQLITE_OMIT_UTF16 */ 640 641 /* 642 ** Return the number of wildcards that can be potentially bound to. 643 ** This routine is added to support DBD::SQLite. 644 */ 645 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ 646 Vdbe *p = (Vdbe*)pStmt; 647 return p ? p->nVar : 0; 648 } 649 650 /* 651 ** Create a mapping from variable numbers to variable names 652 ** in the Vdbe.azVar[] array, if such a mapping does not already 653 ** exist. 654 */ 655 static void createVarMap(Vdbe *p){ 656 if( !p->okVar ){ 657 int j; 658 Op *pOp; 659 for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){ 660 if( pOp->opcode==OP_Variable ){ 661 assert( pOp->p1>0 && pOp->p1<=p->nVar ); 662 p->azVar[pOp->p1-1] = pOp->p3; 663 } 664 } 665 p->okVar = 1; 666 } 667 } 668 669 /* 670 ** Return the name of a wildcard parameter. Return NULL if the index 671 ** is out of range or if the wildcard is unnamed. 672 ** 673 ** The result is always UTF-8. 674 */ 675 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ 676 Vdbe *p = (Vdbe*)pStmt; 677 if( p==0 || i<1 || i>p->nVar ){ 678 return 0; 679 } 680 createVarMap(p); 681 return p->azVar[i-1]; 682 } 683 684 /* 685 ** Given a wildcard parameter name, return the index of the variable 686 ** with that name. If there is no variable with the given name, 687 ** return 0. 688 */ 689 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ 690 Vdbe *p = (Vdbe*)pStmt; 691 int i; 692 if( p==0 ){ 693 return 0; 694 } 695 createVarMap(p); 696 if( zName ){ 697 for(i=0; i<p->nVar; i++){ 698 const char *z = p->azVar[i]; 699 if( z && strcmp(z,zName)==0 ){ 700 return i+1; 701 } 702 } 703 } 704 return 0; 705 } 706 707 /* 708 ** Transfer all bindings from the first statement over to the second. 709 ** If the two statements contain a different number of bindings, then 710 ** an SQLITE_ERROR is returned. 711 */ 712 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 713 Vdbe *pFrom = (Vdbe*)pFromStmt; 714 Vdbe *pTo = (Vdbe*)pToStmt; 715 int i, rc = SQLITE_OK; 716 if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT) 717 || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) ){ 718 return SQLITE_MISUSE; 719 } 720 if( pFrom->nVar!=pTo->nVar ){ 721 return SQLITE_ERROR; 722 } 723 for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){ 724 rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); 725 } 726 return rc; 727 } 728 729 /* 730 ** Return the sqlite3* database handle to which the prepared statement given 731 ** in the argument belongs. This is the same database handle that was 732 ** the first argument to the sqlite3_prepare() that was used to create 733 ** the statement in the first place. 734 */ 735 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ 736 return pStmt ? ((Vdbe*)pStmt)->db : 0; 737 } 738