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 sqlite3VdbeMemExpandBlob(p); 41 if( (p->flags & MEM_Term)==0 ){ 42 p->flags &= ~MEM_Str; 43 } 44 return p->z; 45 }else{ 46 return sqlite3_value_text(pVal); 47 } 48 } 49 int sqlite3_value_bytes(sqlite3_value *pVal){ 50 return sqlite3ValueBytes(pVal, SQLITE_UTF8); 51 } 52 int sqlite3_value_bytes16(sqlite3_value *pVal){ 53 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); 54 } 55 double sqlite3_value_double(sqlite3_value *pVal){ 56 return sqlite3VdbeRealValue((Mem*)pVal); 57 } 58 int sqlite3_value_int(sqlite3_value *pVal){ 59 return sqlite3VdbeIntValue((Mem*)pVal); 60 } 61 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ 62 return sqlite3VdbeIntValue((Mem*)pVal); 63 } 64 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ 65 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); 66 } 67 #ifndef SQLITE_OMIT_UTF16 68 const void *sqlite3_value_text16(sqlite3_value* pVal){ 69 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); 70 } 71 const void *sqlite3_value_text16be(sqlite3_value *pVal){ 72 return sqlite3ValueText(pVal, SQLITE_UTF16BE); 73 } 74 const void *sqlite3_value_text16le(sqlite3_value *pVal){ 75 return sqlite3ValueText(pVal, SQLITE_UTF16LE); 76 } 77 #endif /* SQLITE_OMIT_UTF16 */ 78 int sqlite3_value_type(sqlite3_value* pVal){ 79 return pVal->type; 80 } 81 /* sqlite3_value_numeric_type() defined in vdbe.c */ 82 83 /**************************** sqlite3_result_ ******************************* 84 ** The following routines are used by user-defined functions to specify 85 ** the function result. 86 */ 87 void sqlite3_result_blob( 88 sqlite3_context *pCtx, 89 const void *z, 90 int n, 91 void (*xDel)(void *) 92 ){ 93 assert( n>=0 ); 94 sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel); 95 } 96 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ 97 sqlite3VdbeMemSetDouble(&pCtx->s, rVal); 98 } 99 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ 100 pCtx->isError = 1; 101 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); 102 } 103 #ifndef SQLITE_OMIT_UTF16 104 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ 105 pCtx->isError = 1; 106 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); 107 } 108 #endif 109 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ 110 sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); 111 } 112 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ 113 sqlite3VdbeMemSetInt64(&pCtx->s, iVal); 114 } 115 void sqlite3_result_null(sqlite3_context *pCtx){ 116 sqlite3VdbeMemSetNull(&pCtx->s); 117 } 118 void sqlite3_result_text( 119 sqlite3_context *pCtx, 120 const char *z, 121 int n, 122 void (*xDel)(void *) 123 ){ 124 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel); 125 } 126 #ifndef SQLITE_OMIT_UTF16 127 void sqlite3_result_text16( 128 sqlite3_context *pCtx, 129 const void *z, 130 int n, 131 void (*xDel)(void *) 132 ){ 133 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel); 134 } 135 void sqlite3_result_text16be( 136 sqlite3_context *pCtx, 137 const void *z, 138 int n, 139 void (*xDel)(void *) 140 ){ 141 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel); 142 } 143 void sqlite3_result_text16le( 144 sqlite3_context *pCtx, 145 const void *z, 146 int n, 147 void (*xDel)(void *) 148 ){ 149 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel); 150 } 151 #endif /* SQLITE_OMIT_UTF16 */ 152 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ 153 sqlite3VdbeMemCopy(&pCtx->s, pValue); 154 } 155 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ 156 sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); 157 } 158 159 160 /* 161 ** Execute the statement pStmt, either until a row of data is ready, the 162 ** statement is completely executed or an error occurs. 163 ** 164 ** This routine implements the bulk of the logic behind the sqlite_step() 165 ** API. The only thing omitted is the automatic recompile if a 166 ** schema change has occurred. That detail is handled by the 167 ** outer sqlite3_step() wrapper procedure. 168 */ 169 static int sqlite3Step(Vdbe *p){ 170 sqlite3 *db; 171 int rc; 172 173 /* Assert that malloc() has not failed */ 174 assert( !sqlite3MallocFailed() ); 175 176 if( p==0 || p->magic!=VDBE_MAGIC_RUN ){ 177 return SQLITE_MISUSE; 178 } 179 if( p->aborted ){ 180 return SQLITE_ABORT; 181 } 182 if( p->pc<=0 && p->expired ){ 183 if( p->rc==SQLITE_OK ){ 184 p->rc = SQLITE_SCHEMA; 185 } 186 rc = SQLITE_ERROR; 187 goto end_of_step; 188 } 189 db = p->db; 190 if( sqlite3SafetyOn(db) ){ 191 p->rc = SQLITE_MISUSE; 192 return SQLITE_MISUSE; 193 } 194 if( p->pc<0 ){ 195 /* If there are no other statements currently running, then 196 ** reset the interrupt flag. This prevents a call to sqlite3_interrupt 197 ** from interrupting a statement that has not yet started. 198 */ 199 if( db->activeVdbeCnt==0 ){ 200 db->u1.isInterrupted = 0; 201 } 202 203 #ifndef SQLITE_OMIT_TRACE 204 /* Invoke the trace callback if there is one 205 */ 206 if( db->xTrace && !db->init.busy ){ 207 assert( p->nOp>0 ); 208 assert( p->aOp[p->nOp-1].opcode==OP_Noop ); 209 assert( p->aOp[p->nOp-1].p3!=0 ); 210 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); 211 sqlite3SafetyOff(db); 212 db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3); 213 if( sqlite3SafetyOn(db) ){ 214 p->rc = SQLITE_MISUSE; 215 return SQLITE_MISUSE; 216 } 217 } 218 if( db->xProfile && !db->init.busy ){ 219 double rNow; 220 sqlite3OsCurrentTime(&rNow); 221 p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0; 222 } 223 #endif 224 225 /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned 226 ** on in debugging mode. 227 */ 228 #ifdef SQLITE_DEBUG 229 if( (db->flags & SQLITE_SqlTrace)!=0 ){ 230 sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3); 231 } 232 #endif /* SQLITE_DEBUG */ 233 234 db->activeVdbeCnt++; 235 p->pc = 0; 236 } 237 #ifndef SQLITE_OMIT_EXPLAIN 238 if( p->explain ){ 239 rc = sqlite3VdbeList(p); 240 }else 241 #endif /* SQLITE_OMIT_EXPLAIN */ 242 { 243 rc = sqlite3VdbeExec(p); 244 } 245 246 if( sqlite3SafetyOff(db) ){ 247 rc = SQLITE_MISUSE; 248 } 249 250 #ifndef SQLITE_OMIT_TRACE 251 /* Invoke the profile callback if there is one 252 */ 253 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){ 254 double rNow; 255 u64 elapseTime; 256 257 sqlite3OsCurrentTime(&rNow); 258 elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime; 259 assert( p->nOp>0 ); 260 assert( p->aOp[p->nOp-1].opcode==OP_Noop ); 261 assert( p->aOp[p->nOp-1].p3!=0 ); 262 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC ); 263 db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime); 264 } 265 #endif 266 267 sqlite3Error(p->db, rc, 0); 268 p->rc = sqlite3ApiExit(p->db, p->rc); 269 end_of_step: 270 assert( (rc&0xff)==rc ); 271 if( p->zSql && (rc&0xff)<SQLITE_ROW ){ 272 /* This behavior occurs if sqlite3_prepare_v2() was used to build 273 ** the prepared statement. Return error codes directly */ 274 return p->rc; 275 }else{ 276 /* This is for legacy sqlite3_prepare() builds and when the code 277 ** is SQLITE_ROW or SQLITE_DONE */ 278 return rc; 279 } 280 } 281 282 /* 283 ** This is the top-level implementation of sqlite3_step(). Call 284 ** sqlite3Step() to do most of the work. If a schema error occurs, 285 ** call sqlite3Reprepare() and try again. 286 */ 287 #ifdef SQLITE_OMIT_PARSER 288 int sqlite3_step(sqlite3_stmt *pStmt){ 289 return sqlite3Step((Vdbe*)pStmt); 290 } 291 #else 292 int sqlite3_step(sqlite3_stmt *pStmt){ 293 int cnt = 0; 294 int rc; 295 Vdbe *v = (Vdbe*)pStmt; 296 while( (rc = sqlite3Step(v))==SQLITE_SCHEMA 297 && cnt++ < 5 298 && sqlite3Reprepare(v) ){ 299 sqlite3_reset(pStmt); 300 v->expired = 0; 301 } 302 return rc; 303 } 304 #endif 305 306 /* 307 ** Extract the user data from a sqlite3_context structure and return a 308 ** pointer to it. 309 */ 310 void *sqlite3_user_data(sqlite3_context *p){ 311 assert( p && p->pFunc ); 312 return p->pFunc->pUserData; 313 } 314 315 /* 316 ** The following is the implementation of an SQL function that always 317 ** fails with an error message stating that the function is used in the 318 ** wrong context. The sqlite3_overload_function() API might construct 319 ** SQL function that use this routine so that the functions will exist 320 ** for name resolution but are actually overloaded by the xFindFunction 321 ** method of virtual tables. 322 */ 323 void sqlite3InvalidFunction( 324 sqlite3_context *context, /* The function calling context */ 325 int argc, /* Number of arguments to the function */ 326 sqlite3_value **argv /* Value of each argument */ 327 ){ 328 const char *zName = context->pFunc->zName; 329 char *zErr; 330 zErr = sqlite3MPrintf( 331 "unable to use function %s in the requested context", zName); 332 sqlite3_result_error(context, zErr, -1); 333 sqliteFree(zErr); 334 } 335 336 /* 337 ** Allocate or return the aggregate context for a user function. A new 338 ** context is allocated on the first call. Subsequent calls return the 339 ** same context that was returned on prior calls. 340 */ 341 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ 342 Mem *pMem = p->pMem; 343 assert( p && p->pFunc && p->pFunc->xStep ); 344 if( (pMem->flags & MEM_Agg)==0 ){ 345 if( nByte==0 ){ 346 assert( pMem->flags==MEM_Null ); 347 pMem->z = 0; 348 }else{ 349 pMem->flags = MEM_Agg; 350 pMem->xDel = sqlite3FreeX; 351 pMem->u.pDef = p->pFunc; 352 if( nByte<=NBFS ){ 353 pMem->z = pMem->zShort; 354 memset(pMem->z, 0, nByte); 355 }else{ 356 pMem->z = sqliteMalloc( nByte ); 357 } 358 } 359 } 360 return (void*)pMem->z; 361 } 362 363 /* 364 ** Return the auxilary data pointer, if any, for the iArg'th argument to 365 ** the user-function defined by pCtx. 366 */ 367 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ 368 VdbeFunc *pVdbeFunc = pCtx->pVdbeFunc; 369 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ 370 return 0; 371 } 372 return pVdbeFunc->apAux[iArg].pAux; 373 } 374 375 /* 376 ** Set the auxilary data pointer and delete function, for the iArg'th 377 ** argument to the user-function defined by pCtx. Any previous value is 378 ** deleted by calling the delete function specified when it was set. 379 */ 380 void sqlite3_set_auxdata( 381 sqlite3_context *pCtx, 382 int iArg, 383 void *pAux, 384 void (*xDelete)(void*) 385 ){ 386 struct AuxData *pAuxData; 387 VdbeFunc *pVdbeFunc; 388 if( iArg<0 ) return; 389 390 pVdbeFunc = pCtx->pVdbeFunc; 391 if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ 392 int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; 393 pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc); 394 if( !pVdbeFunc ) return; 395 pCtx->pVdbeFunc = pVdbeFunc; 396 memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0, 397 sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux)); 398 pVdbeFunc->nAux = iArg+1; 399 pVdbeFunc->pFunc = pCtx->pFunc; 400 } 401 402 pAuxData = &pVdbeFunc->apAux[iArg]; 403 if( pAuxData->pAux && pAuxData->xDelete ){ 404 pAuxData->xDelete(pAuxData->pAux); 405 } 406 pAuxData->pAux = pAux; 407 pAuxData->xDelete = xDelete; 408 } 409 410 /* 411 ** Return the number of times the Step function of a aggregate has been 412 ** called. 413 ** 414 ** This function is deprecated. Do not use it for new code. It is 415 ** provide only to avoid breaking legacy code. New aggregate function 416 ** implementations should keep their own counts within their aggregate 417 ** context. 418 */ 419 int sqlite3_aggregate_count(sqlite3_context *p){ 420 assert( p && p->pFunc && p->pFunc->xStep ); 421 return p->pMem->n; 422 } 423 424 /* 425 ** Return the number of columns in the result set for the statement pStmt. 426 */ 427 int sqlite3_column_count(sqlite3_stmt *pStmt){ 428 Vdbe *pVm = (Vdbe *)pStmt; 429 return pVm ? pVm->nResColumn : 0; 430 } 431 432 /* 433 ** Return the number of values available from the current row of the 434 ** currently executing statement pStmt. 435 */ 436 int sqlite3_data_count(sqlite3_stmt *pStmt){ 437 Vdbe *pVm = (Vdbe *)pStmt; 438 if( pVm==0 || !pVm->resOnStack ) return 0; 439 return pVm->nResColumn; 440 } 441 442 443 /* 444 ** Check to see if column iCol of the given statement is valid. If 445 ** it is, return a pointer to the Mem for the value of that column. 446 ** If iCol is not valid, return a pointer to a Mem which has a value 447 ** of NULL. 448 */ 449 static Mem *columnMem(sqlite3_stmt *pStmt, int i){ 450 Vdbe *pVm = (Vdbe *)pStmt; 451 int vals = sqlite3_data_count(pStmt); 452 if( i>=vals || i<0 ){ 453 static const Mem nullMem = {{0}, 0.0, "", 0, MEM_Null, SQLITE_NULL }; 454 sqlite3Error(pVm->db, SQLITE_RANGE, 0); 455 return (Mem*)&nullMem; 456 } 457 return &pVm->pTos[(1-vals)+i]; 458 } 459 460 /* 461 ** This function is called after invoking an sqlite3_value_XXX function on a 462 ** column value (i.e. a value returned by evaluating an SQL expression in the 463 ** select list of a SELECT statement) that may cause a malloc() failure. If 464 ** malloc() has failed, the threads mallocFailed flag is cleared and the result 465 ** code of statement pStmt set to SQLITE_NOMEM. 466 ** 467 ** Specificly, this is called from within: 468 ** 469 ** sqlite3_column_int() 470 ** sqlite3_column_int64() 471 ** sqlite3_column_text() 472 ** sqlite3_column_text16() 473 ** sqlite3_column_real() 474 ** sqlite3_column_bytes() 475 ** sqlite3_column_bytes16() 476 ** 477 ** But not for sqlite3_column_blob(), which never calls malloc(). 478 */ 479 static void columnMallocFailure(sqlite3_stmt *pStmt) 480 { 481 /* If malloc() failed during an encoding conversion within an 482 ** sqlite3_column_XXX API, then set the return code of the statement to 483 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR 484 ** and _finalize() will return NOMEM. 485 */ 486 Vdbe *p = (Vdbe *)pStmt; 487 p->rc = sqlite3ApiExit(0, p->rc); 488 } 489 490 /**************************** sqlite3_column_ ******************************* 491 ** The following routines are used to access elements of the current row 492 ** in the result set. 493 */ 494 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ 495 const void *val; 496 sqlite3MallocDisallow(); 497 val = sqlite3_value_blob( columnMem(pStmt,i) ); 498 sqlite3MallocAllow(); 499 return val; 500 } 501 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ 502 int val = sqlite3_value_bytes( columnMem(pStmt,i) ); 503 columnMallocFailure(pStmt); 504 return val; 505 } 506 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ 507 int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); 508 columnMallocFailure(pStmt); 509 return val; 510 } 511 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ 512 double val = sqlite3_value_double( columnMem(pStmt,i) ); 513 columnMallocFailure(pStmt); 514 return val; 515 } 516 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ 517 int val = sqlite3_value_int( columnMem(pStmt,i) ); 518 columnMallocFailure(pStmt); 519 return val; 520 } 521 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ 522 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); 523 columnMallocFailure(pStmt); 524 return val; 525 } 526 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ 527 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); 528 columnMallocFailure(pStmt); 529 return val; 530 } 531 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ 532 return columnMem(pStmt, i); 533 } 534 #ifndef SQLITE_OMIT_UTF16 535 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ 536 const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); 537 columnMallocFailure(pStmt); 538 return val; 539 } 540 #endif /* SQLITE_OMIT_UTF16 */ 541 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ 542 return sqlite3_value_type( columnMem(pStmt,i) ); 543 } 544 545 /* The following function is experimental and subject to change or 546 ** removal */ 547 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ 548 ** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); 549 **} 550 */ 551 552 /* 553 ** Convert the N-th element of pStmt->pColName[] into a string using 554 ** xFunc() then return that string. If N is out of range, return 0. 555 ** 556 ** There are up to 5 names for each column. useType determines which 557 ** name is returned. Here are the names: 558 ** 559 ** 0 The column name as it should be displayed for output 560 ** 1 The datatype name for the column 561 ** 2 The name of the database that the column derives from 562 ** 3 The name of the table that the column derives from 563 ** 4 The name of the table column that the result column derives from 564 ** 565 ** If the result is not a simple column reference (if it is an expression 566 ** or a constant) then useTypes 2, 3, and 4 return NULL. 567 */ 568 static const void *columnName( 569 sqlite3_stmt *pStmt, 570 int N, 571 const void *(*xFunc)(Mem*), 572 int useType 573 ){ 574 const void *ret; 575 Vdbe *p = (Vdbe *)pStmt; 576 int n = sqlite3_column_count(pStmt); 577 578 if( p==0 || N>=n || N<0 ){ 579 return 0; 580 } 581 N += useType*n; 582 ret = xFunc(&p->aColName[N]); 583 584 /* A malloc may have failed inside of the xFunc() call. If this is the case, 585 ** clear the mallocFailed flag and return NULL. 586 */ 587 sqlite3ApiExit(0, 0); 588 return ret; 589 } 590 591 /* 592 ** Return the name of the Nth column of the result set returned by SQL 593 ** statement pStmt. 594 */ 595 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ 596 return columnName( 597 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); 598 } 599 #ifndef SQLITE_OMIT_UTF16 600 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ 601 return columnName( 602 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); 603 } 604 #endif 605 606 /* 607 ** Return the column declaration type (if applicable) of the 'i'th column 608 ** of the result set of SQL statement pStmt. 609 */ 610 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ 611 return columnName( 612 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); 613 } 614 #ifndef SQLITE_OMIT_UTF16 615 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ 616 return columnName( 617 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); 618 } 619 #endif /* SQLITE_OMIT_UTF16 */ 620 621 #ifdef SQLITE_ENABLE_COLUMN_METADATA 622 /* 623 ** Return the name of the database from which a result column derives. 624 ** NULL is returned if the result column is an expression or constant or 625 ** anything else which is not an unabiguous reference to a database column. 626 */ 627 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ 628 return columnName( 629 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); 630 } 631 #ifndef SQLITE_OMIT_UTF16 632 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ 633 return columnName( 634 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); 635 } 636 #endif /* SQLITE_OMIT_UTF16 */ 637 638 /* 639 ** Return the name of the table from which a result column derives. 640 ** NULL is returned if the result column is an expression or constant or 641 ** anything else which is not an unabiguous reference to a database column. 642 */ 643 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ 644 return columnName( 645 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); 646 } 647 #ifndef SQLITE_OMIT_UTF16 648 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ 649 return columnName( 650 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); 651 } 652 #endif /* SQLITE_OMIT_UTF16 */ 653 654 /* 655 ** Return the name of the table column from which a result column derives. 656 ** NULL is returned if the result column is an expression or constant or 657 ** anything else which is not an unabiguous reference to a database column. 658 */ 659 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ 660 return columnName( 661 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); 662 } 663 #ifndef SQLITE_OMIT_UTF16 664 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ 665 return columnName( 666 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); 667 } 668 #endif /* SQLITE_OMIT_UTF16 */ 669 #endif /* SQLITE_ENABLE_COLUMN_METADATA */ 670 671 672 /******************************* sqlite3_bind_ *************************** 673 ** 674 ** Routines used to attach values to wildcards in a compiled SQL statement. 675 */ 676 /* 677 ** Unbind the value bound to variable i in virtual machine p. This is the 678 ** the same as binding a NULL value to the column. If the "i" parameter is 679 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. 680 ** 681 ** The error code stored in database p->db is overwritten with the return 682 ** value in any case. 683 */ 684 static int vdbeUnbind(Vdbe *p, int i){ 685 Mem *pVar; 686 if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ 687 if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0); 688 return SQLITE_MISUSE; 689 } 690 if( i<1 || i>p->nVar ){ 691 sqlite3Error(p->db, SQLITE_RANGE, 0); 692 return SQLITE_RANGE; 693 } 694 i--; 695 pVar = &p->aVar[i]; 696 sqlite3VdbeMemRelease(pVar); 697 pVar->flags = MEM_Null; 698 sqlite3Error(p->db, SQLITE_OK, 0); 699 return SQLITE_OK; 700 } 701 702 /* 703 ** Bind a text or BLOB value. 704 */ 705 static int bindText( 706 sqlite3_stmt *pStmt, 707 int i, 708 const void *zData, 709 int nData, 710 void (*xDel)(void*), 711 int encoding 712 ){ 713 Vdbe *p = (Vdbe *)pStmt; 714 Mem *pVar; 715 int rc; 716 717 rc = vdbeUnbind(p, i); 718 if( rc || zData==0 ){ 719 return rc; 720 } 721 pVar = &p->aVar[i-1]; 722 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); 723 if( rc==SQLITE_OK && encoding!=0 ){ 724 rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); 725 } 726 727 sqlite3Error(((Vdbe *)pStmt)->db, rc, 0); 728 return sqlite3ApiExit(((Vdbe *)pStmt)->db, rc); 729 } 730 731 732 /* 733 ** Bind a blob value to an SQL statement variable. 734 */ 735 int sqlite3_bind_blob( 736 sqlite3_stmt *pStmt, 737 int i, 738 const void *zData, 739 int nData, 740 void (*xDel)(void*) 741 ){ 742 return bindText(pStmt, i, zData, nData, xDel, 0); 743 } 744 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ 745 int rc; 746 Vdbe *p = (Vdbe *)pStmt; 747 rc = vdbeUnbind(p, i); 748 if( rc==SQLITE_OK ){ 749 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); 750 } 751 return rc; 752 } 753 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ 754 return sqlite3_bind_int64(p, i, (i64)iValue); 755 } 756 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ 757 int rc; 758 Vdbe *p = (Vdbe *)pStmt; 759 rc = vdbeUnbind(p, i); 760 if( rc==SQLITE_OK ){ 761 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); 762 } 763 return rc; 764 } 765 int sqlite3_bind_null(sqlite3_stmt* p, int i){ 766 return vdbeUnbind((Vdbe *)p, i); 767 } 768 int sqlite3_bind_text( 769 sqlite3_stmt *pStmt, 770 int i, 771 const char *zData, 772 int nData, 773 void (*xDel)(void*) 774 ){ 775 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 776 } 777 #ifndef SQLITE_OMIT_UTF16 778 int sqlite3_bind_text16( 779 sqlite3_stmt *pStmt, 780 int i, 781 const void *zData, 782 int nData, 783 void (*xDel)(void*) 784 ){ 785 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); 786 } 787 #endif /* SQLITE_OMIT_UTF16 */ 788 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ 789 int rc; 790 Vdbe *p = (Vdbe *)pStmt; 791 rc = vdbeUnbind(p, i); 792 if( rc==SQLITE_OK ){ 793 sqlite3VdbeMemCopy(&p->aVar[i-1], pValue); 794 } 795 return rc; 796 } 797 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ 798 int rc; 799 Vdbe *p = (Vdbe *)pStmt; 800 rc = vdbeUnbind(p, i); 801 if( rc==SQLITE_OK ){ 802 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); 803 } 804 return rc; 805 } 806 807 /* 808 ** Return the number of wildcards that can be potentially bound to. 809 ** This routine is added to support DBD::SQLite. 810 */ 811 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ 812 Vdbe *p = (Vdbe*)pStmt; 813 return p ? p->nVar : 0; 814 } 815 816 /* 817 ** Create a mapping from variable numbers to variable names 818 ** in the Vdbe.azVar[] array, if such a mapping does not already 819 ** exist. 820 */ 821 static void createVarMap(Vdbe *p){ 822 if( !p->okVar ){ 823 int j; 824 Op *pOp; 825 for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){ 826 if( pOp->opcode==OP_Variable ){ 827 assert( pOp->p1>0 && pOp->p1<=p->nVar ); 828 p->azVar[pOp->p1-1] = pOp->p3; 829 } 830 } 831 p->okVar = 1; 832 } 833 } 834 835 /* 836 ** Return the name of a wildcard parameter. Return NULL if the index 837 ** is out of range or if the wildcard is unnamed. 838 ** 839 ** The result is always UTF-8. 840 */ 841 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ 842 Vdbe *p = (Vdbe*)pStmt; 843 if( p==0 || i<1 || i>p->nVar ){ 844 return 0; 845 } 846 createVarMap(p); 847 return p->azVar[i-1]; 848 } 849 850 /* 851 ** Given a wildcard parameter name, return the index of the variable 852 ** with that name. If there is no variable with the given name, 853 ** return 0. 854 */ 855 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ 856 Vdbe *p = (Vdbe*)pStmt; 857 int i; 858 if( p==0 ){ 859 return 0; 860 } 861 createVarMap(p); 862 if( zName ){ 863 for(i=0; i<p->nVar; i++){ 864 const char *z = p->azVar[i]; 865 if( z && strcmp(z,zName)==0 ){ 866 return i+1; 867 } 868 } 869 } 870 return 0; 871 } 872 873 /* 874 ** Transfer all bindings from the first statement over to the second. 875 ** If the two statements contain a different number of bindings, then 876 ** an SQLITE_ERROR is returned. 877 */ 878 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 879 Vdbe *pFrom = (Vdbe*)pFromStmt; 880 Vdbe *pTo = (Vdbe*)pToStmt; 881 int i, rc = SQLITE_OK; 882 if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT) 883 || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) ){ 884 return SQLITE_MISUSE; 885 } 886 if( pFrom->nVar!=pTo->nVar ){ 887 return SQLITE_ERROR; 888 } 889 for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){ 890 sqlite3MallocDisallow(); 891 rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); 892 sqlite3MallocAllow(); 893 } 894 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); 895 return rc; 896 } 897 898 /* 899 ** Return the sqlite3* database handle to which the prepared statement given 900 ** in the argument belongs. This is the same database handle that was 901 ** the first argument to the sqlite3_prepare() that was used to create 902 ** the statement in the first place. 903 */ 904 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ 905 return pStmt ? ((Vdbe*)pStmt)->db : 0; 906 } 907