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