14f26d6c4Sdrh /* 24f26d6c4Sdrh ** 2004 May 26 34f26d6c4Sdrh ** 44f26d6c4Sdrh ** The author disclaims copyright to this source code. In place of 54f26d6c4Sdrh ** a legal notice, here is a blessing: 64f26d6c4Sdrh ** 74f26d6c4Sdrh ** May you do good and not evil. 84f26d6c4Sdrh ** May you find forgiveness for yourself and forgive others. 94f26d6c4Sdrh ** May you share freely, never taking more than you give. 104f26d6c4Sdrh ** 114f26d6c4Sdrh ************************************************************************* 124f26d6c4Sdrh ** 134f26d6c4Sdrh ** This file contains code use to implement APIs that are part of the 144f26d6c4Sdrh ** VDBE. 154f26d6c4Sdrh */ 164f26d6c4Sdrh #include "sqliteInt.h" 174f26d6c4Sdrh #include "vdbeInt.h" 184f26d6c4Sdrh 19eec556d3Sshane #ifndef SQLITE_OMIT_DEPRECATED 20d89bd007Sdrh /* 21d89bd007Sdrh ** Return TRUE (non-zero) of the statement supplied as an argument needs 22d89bd007Sdrh ** to be recompiled. A statement needs to be recompiled whenever the 23d89bd007Sdrh ** execution environment changes in a way that would alter the program 24d89bd007Sdrh ** that sqlite3_prepare() generates. For example, if new functions or 25d89bd007Sdrh ** collating sequences are registered or if an authorizer function is 26d89bd007Sdrh ** added or changed. 27d89bd007Sdrh */ 28d89bd007Sdrh int sqlite3_expired(sqlite3_stmt *pStmt){ 29d89bd007Sdrh Vdbe *p = (Vdbe*)pStmt; 30d89bd007Sdrh return p==0 || p->expired; 31d89bd007Sdrh } 32eec556d3Sshane #endif 33d89bd007Sdrh 34e30f4426Sdrh /* 35413c3d36Sdrh ** Check on a Vdbe to make sure it has not been finalized. Log 36413c3d36Sdrh ** an error and return true if it has been finalized (or is otherwise 37413c3d36Sdrh ** invalid). Return false if it is ok. 38413c3d36Sdrh */ 39413c3d36Sdrh static int vdbeSafety(Vdbe *p){ 40413c3d36Sdrh if( p->db==0 ){ 41413c3d36Sdrh sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement"); 42413c3d36Sdrh return 1; 43413c3d36Sdrh }else{ 44413c3d36Sdrh return 0; 45413c3d36Sdrh } 46413c3d36Sdrh } 47413c3d36Sdrh static int vdbeSafetyNotNull(Vdbe *p){ 48413c3d36Sdrh if( p==0 ){ 49413c3d36Sdrh sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement"); 50413c3d36Sdrh return 1; 51413c3d36Sdrh }else{ 52413c3d36Sdrh return vdbeSafety(p); 53413c3d36Sdrh } 54413c3d36Sdrh } 55413c3d36Sdrh 56413c3d36Sdrh /* 57e30f4426Sdrh ** The following routine destroys a virtual machine that is created by 58e30f4426Sdrh ** the sqlite3_compile() routine. The integer returned is an SQLITE_ 59e30f4426Sdrh ** success/failure code that describes the result of executing the virtual 60e30f4426Sdrh ** machine. 61e30f4426Sdrh ** 62e30f4426Sdrh ** This routine sets the error code and string returned by 63e30f4426Sdrh ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). 64e30f4426Sdrh */ 65e30f4426Sdrh int sqlite3_finalize(sqlite3_stmt *pStmt){ 66e30f4426Sdrh int rc; 67e30f4426Sdrh if( pStmt==0 ){ 68e30f4426Sdrh rc = SQLITE_OK; 69e30f4426Sdrh }else{ 70e30f4426Sdrh Vdbe *v = (Vdbe*)pStmt; 71238746a6Sdanielk1977 sqlite3 *db = v->db; 720ae0bfd4Sdrh #if SQLITE_THREADSAFE 730ae0bfd4Sdrh sqlite3_mutex *mutex; 740ae0bfd4Sdrh #endif 75413c3d36Sdrh if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; 7618472fa7Sdrh #if SQLITE_THREADSAFE 770ae0bfd4Sdrh mutex = v->db->mutex; 787e8b848aSdrh #endif 7986f8c197Sdrh sqlite3_mutex_enter(mutex); 80e30f4426Sdrh rc = sqlite3VdbeFinalize(v); 81238746a6Sdanielk1977 rc = sqlite3ApiExit(db, rc); 8286f8c197Sdrh sqlite3_mutex_leave(mutex); 83e30f4426Sdrh } 84e30f4426Sdrh return rc; 85e30f4426Sdrh } 86e30f4426Sdrh 87e30f4426Sdrh /* 88e30f4426Sdrh ** Terminate the current execution of an SQL statement and reset it 89e30f4426Sdrh ** back to its starting state so that it can be reused. A success code from 90e30f4426Sdrh ** the prior execution is returned. 91e30f4426Sdrh ** 92e30f4426Sdrh ** This routine sets the error code and string returned by 93e30f4426Sdrh ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). 94e30f4426Sdrh */ 95e30f4426Sdrh int sqlite3_reset(sqlite3_stmt *pStmt){ 96e30f4426Sdrh int rc; 97e30f4426Sdrh if( pStmt==0 ){ 98e30f4426Sdrh rc = SQLITE_OK; 99e30f4426Sdrh }else{ 100e30f4426Sdrh Vdbe *v = (Vdbe*)pStmt; 101e30f4426Sdrh sqlite3_mutex_enter(v->db->mutex); 102c890fec3Sdrh rc = sqlite3VdbeReset(v); 103e0af83acSdan sqlite3VdbeMakeReady(v, -1, 0, 0, 0, 0, 0); 104e30f4426Sdrh assert( (rc & (v->db->errMask))==rc ); 105238746a6Sdanielk1977 rc = sqlite3ApiExit(v->db, rc); 106e30f4426Sdrh sqlite3_mutex_leave(v->db->mutex); 107e30f4426Sdrh } 108e30f4426Sdrh return rc; 109e30f4426Sdrh } 110e30f4426Sdrh 111e30f4426Sdrh /* 112e30f4426Sdrh ** Set all the parameters in the compiled SQL statement to NULL. 113e30f4426Sdrh */ 114e30f4426Sdrh int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ 115e30f4426Sdrh int i; 116e30f4426Sdrh int rc = SQLITE_OK; 1177297d1f0Sdrh Vdbe *p = (Vdbe*)pStmt; 11818472fa7Sdrh #if SQLITE_THREADSAFE 1197e8b848aSdrh sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; 1207e8b848aSdrh #endif 1217e8b848aSdrh sqlite3_mutex_enter(mutex); 1227297d1f0Sdrh for(i=0; i<p->nVar; i++){ 1237297d1f0Sdrh sqlite3VdbeMemRelease(&p->aVar[i]); 1247297d1f0Sdrh p->aVar[i].flags = MEM_Null; 125e30f4426Sdrh } 126c94b8595Sdan if( p->isPrepareV2 && p->expmask ){ 127c94b8595Sdan p->expired = 1; 128c94b8595Sdan } 1297e8b848aSdrh sqlite3_mutex_leave(mutex); 130e30f4426Sdrh return rc; 131e30f4426Sdrh } 132e30f4426Sdrh 133e30f4426Sdrh 1344f26d6c4Sdrh /**************************** sqlite3_value_ ******************************* 1354f26d6c4Sdrh ** The following routines extract information from a Mem or sqlite3_value 1364f26d6c4Sdrh ** structure. 1374f26d6c4Sdrh */ 1384f26d6c4Sdrh const void *sqlite3_value_blob(sqlite3_value *pVal){ 1394f26d6c4Sdrh Mem *p = (Mem*)pVal; 1404f26d6c4Sdrh if( p->flags & (MEM_Blob|MEM_Str) ){ 141b21c8cd4Sdrh sqlite3VdbeMemExpandBlob(p); 1429310ef23Sdrh p->flags &= ~MEM_Str; 1431f0feef8Sdrh p->flags |= MEM_Blob; 1444f26d6c4Sdrh return p->z; 1454f26d6c4Sdrh }else{ 1464f26d6c4Sdrh return sqlite3_value_text(pVal); 1474f26d6c4Sdrh } 1484f26d6c4Sdrh } 1494f26d6c4Sdrh int sqlite3_value_bytes(sqlite3_value *pVal){ 150b21c8cd4Sdrh return sqlite3ValueBytes(pVal, SQLITE_UTF8); 1514f26d6c4Sdrh } 1524f26d6c4Sdrh int sqlite3_value_bytes16(sqlite3_value *pVal){ 153b21c8cd4Sdrh return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); 1544f26d6c4Sdrh } 1554f26d6c4Sdrh double sqlite3_value_double(sqlite3_value *pVal){ 1566a6124e2Sdrh return sqlite3VdbeRealValue((Mem*)pVal); 1574f26d6c4Sdrh } 1584f26d6c4Sdrh int sqlite3_value_int(sqlite3_value *pVal){ 159b27b7f5dSdrh return (int)sqlite3VdbeIntValue((Mem*)pVal); 1604f26d6c4Sdrh } 161efad9995Sdrh sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ 1626a6124e2Sdrh return sqlite3VdbeIntValue((Mem*)pVal); 1634f26d6c4Sdrh } 1644f26d6c4Sdrh const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ 165b21c8cd4Sdrh return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); 1664f26d6c4Sdrh } 1676c62608fSdrh #ifndef SQLITE_OMIT_UTF16 1684f26d6c4Sdrh const void *sqlite3_value_text16(sqlite3_value* pVal){ 169b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); 1704f26d6c4Sdrh } 171d8123366Sdanielk1977 const void *sqlite3_value_text16be(sqlite3_value *pVal){ 172b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16BE); 173d8123366Sdanielk1977 } 174d8123366Sdanielk1977 const void *sqlite3_value_text16le(sqlite3_value *pVal){ 175b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16LE); 176d8123366Sdanielk1977 } 1776c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 1784f26d6c4Sdrh int sqlite3_value_type(sqlite3_value* pVal){ 179f4479501Sdrh return pVal->type; 1804f26d6c4Sdrh } 1814f26d6c4Sdrh 1824f26d6c4Sdrh /**************************** sqlite3_result_ ******************************* 1834f26d6c4Sdrh ** The following routines are used by user-defined functions to specify 1844f26d6c4Sdrh ** the function result. 1854c8555fdSdrh ** 1864c8555fdSdrh ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the 1874c8555fdSdrh ** result as a string or blob but if the string or blob is too large, it 1884c8555fdSdrh ** then sets the error code to SQLITE_TOOBIG 1894f26d6c4Sdrh */ 1904c8555fdSdrh static void setResultStrOrError( 1914c8555fdSdrh sqlite3_context *pCtx, /* Function context */ 1924c8555fdSdrh const char *z, /* String pointer */ 1934c8555fdSdrh int n, /* Bytes in string, or negative */ 1944c8555fdSdrh u8 enc, /* Encoding of z. 0 for BLOBs */ 1954c8555fdSdrh void (*xDel)(void*) /* Destructor function */ 1964c8555fdSdrh ){ 1974c8555fdSdrh if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){ 1984c8555fdSdrh sqlite3_result_error_toobig(pCtx); 1994c8555fdSdrh } 2004c8555fdSdrh } 2014f26d6c4Sdrh void sqlite3_result_blob( 2024f26d6c4Sdrh sqlite3_context *pCtx, 2034f26d6c4Sdrh const void *z, 2044f26d6c4Sdrh int n, 205d8123366Sdanielk1977 void (*xDel)(void *) 2064f26d6c4Sdrh ){ 2075708d2deSdrh assert( n>=0 ); 20832bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2094c8555fdSdrh setResultStrOrError(pCtx, z, n, 0, xDel); 2104f26d6c4Sdrh } 2114f26d6c4Sdrh void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ 21232bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2134f26d6c4Sdrh sqlite3VdbeMemSetDouble(&pCtx->s, rVal); 2144f26d6c4Sdrh } 2154f26d6c4Sdrh void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ 21632bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 21769544ec9Sdrh pCtx->isError = SQLITE_ERROR; 218b21c8cd4Sdrh sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); 2194f26d6c4Sdrh } 220a1686c9aSdanielk1977 #ifndef SQLITE_OMIT_UTF16 2214f26d6c4Sdrh void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ 22232bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 22369544ec9Sdrh pCtx->isError = SQLITE_ERROR; 224b21c8cd4Sdrh sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); 2254f26d6c4Sdrh } 226a1686c9aSdanielk1977 #endif 227f4479501Sdrh void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ 22832bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2294f26d6c4Sdrh sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); 2304f26d6c4Sdrh } 2314f26d6c4Sdrh void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ 23232bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2334f26d6c4Sdrh sqlite3VdbeMemSetInt64(&pCtx->s, iVal); 2344f26d6c4Sdrh } 2354f26d6c4Sdrh void sqlite3_result_null(sqlite3_context *pCtx){ 23632bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 237f4479501Sdrh sqlite3VdbeMemSetNull(&pCtx->s); 2384f26d6c4Sdrh } 2394f26d6c4Sdrh void sqlite3_result_text( 2404f26d6c4Sdrh sqlite3_context *pCtx, 2414f26d6c4Sdrh const char *z, 2424f26d6c4Sdrh int n, 243d8123366Sdanielk1977 void (*xDel)(void *) 2444f26d6c4Sdrh ){ 24532bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2464c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); 2474f26d6c4Sdrh } 2486c62608fSdrh #ifndef SQLITE_OMIT_UTF16 2494f26d6c4Sdrh void sqlite3_result_text16( 2504f26d6c4Sdrh sqlite3_context *pCtx, 2514f26d6c4Sdrh const void *z, 2524f26d6c4Sdrh int n, 253d8123366Sdanielk1977 void (*xDel)(void *) 2544f26d6c4Sdrh ){ 25532bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2564c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel); 257d8123366Sdanielk1977 } 258d8123366Sdanielk1977 void sqlite3_result_text16be( 259d8123366Sdanielk1977 sqlite3_context *pCtx, 260d8123366Sdanielk1977 const void *z, 261d8123366Sdanielk1977 int n, 262d8123366Sdanielk1977 void (*xDel)(void *) 263d8123366Sdanielk1977 ){ 26432bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2654c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel); 266d8123366Sdanielk1977 } 267d8123366Sdanielk1977 void sqlite3_result_text16le( 268d8123366Sdanielk1977 sqlite3_context *pCtx, 269d8123366Sdanielk1977 const void *z, 270d8123366Sdanielk1977 int n, 271d8123366Sdanielk1977 void (*xDel)(void *) 272d8123366Sdanielk1977 ){ 27332bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2744c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel); 2754f26d6c4Sdrh } 2766c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 2774f26d6c4Sdrh void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ 27832bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 279b21c8cd4Sdrh sqlite3VdbeMemCopy(&pCtx->s, pValue); 2804f26d6c4Sdrh } 281b026e05eSdrh void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ 28232bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 283b026e05eSdrh sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); 284b026e05eSdrh } 28569544ec9Sdrh void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ 28669544ec9Sdrh pCtx->isError = errCode; 28751c7d864Sdrh if( pCtx->s.flags & MEM_Null ){ 28851c7d864Sdrh sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 28951c7d864Sdrh SQLITE_UTF8, SQLITE_STATIC); 29051c7d864Sdrh } 29169544ec9Sdrh } 2924f26d6c4Sdrh 293a0206bc8Sdrh /* Force an SQLITE_TOOBIG error. */ 294a0206bc8Sdrh void sqlite3_result_error_toobig(sqlite3_context *pCtx){ 29532bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 296bb4957f8Sdrh pCtx->isError = SQLITE_TOOBIG; 297bb4957f8Sdrh sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 298bb4957f8Sdrh SQLITE_UTF8, SQLITE_STATIC); 299a0206bc8Sdrh } 300a0206bc8Sdrh 301a1644fd8Sdanielk1977 /* An SQLITE_NOMEM error. */ 302a1644fd8Sdanielk1977 void sqlite3_result_error_nomem(sqlite3_context *pCtx){ 303a1644fd8Sdanielk1977 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 304a1644fd8Sdanielk1977 sqlite3VdbeMemSetNull(&pCtx->s); 30569544ec9Sdrh pCtx->isError = SQLITE_NOMEM; 306a1644fd8Sdanielk1977 pCtx->s.db->mallocFailed = 1; 307a1644fd8Sdanielk1977 } 3084f26d6c4Sdrh 3094f26d6c4Sdrh /* 3104f26d6c4Sdrh ** Execute the statement pStmt, either until a row of data is ready, the 3114f26d6c4Sdrh ** statement is completely executed or an error occurs. 312b900aaf3Sdrh ** 313b900aaf3Sdrh ** This routine implements the bulk of the logic behind the sqlite_step() 314b900aaf3Sdrh ** API. The only thing omitted is the automatic recompile if a 315b900aaf3Sdrh ** schema change has occurred. That detail is handled by the 316b900aaf3Sdrh ** outer sqlite3_step() wrapper procedure. 3174f26d6c4Sdrh */ 318b900aaf3Sdrh static int sqlite3Step(Vdbe *p){ 3199bb575fdSdrh sqlite3 *db; 3204f26d6c4Sdrh int rc; 3214f26d6c4Sdrh 322a185ddbfSdanielk1977 assert(p); 323a185ddbfSdanielk1977 if( p->magic!=VDBE_MAGIC_RUN ){ 324413c3d36Sdrh sqlite3_log(SQLITE_MISUSE, 325413c3d36Sdrh "attempt to step a halted statement: [%s]", p->zSql); 326413c3d36Sdrh return SQLITE_MISUSE_BKPT; 327f1bfe9a8Sdrh } 328f1bfe9a8Sdrh 32914d4cc43Sdan /* Check that malloc() has not failed. If it has, return early. */ 33017435752Sdrh db = p->db; 331c456e57aSdrh if( db->mallocFailed ){ 33214d4cc43Sdan p->rc = SQLITE_NOMEM; 333c456e57aSdrh return SQLITE_NOMEM; 334c456e57aSdrh } 335261919ccSdanielk1977 336a21c6b6fSdanielk1977 if( p->pc<=0 && p->expired ){ 337a21c6b6fSdanielk1977 p->rc = SQLITE_SCHEMA; 338b900aaf3Sdrh rc = SQLITE_ERROR; 339b900aaf3Sdrh goto end_of_step; 340a21c6b6fSdanielk1977 } 3411d850a72Sdanielk1977 if( p->pc<0 ){ 34215ca1df1Sdrh /* If there are no other statements currently running, then 34315ca1df1Sdrh ** reset the interrupt flag. This prevents a call to sqlite3_interrupt 34415ca1df1Sdrh ** from interrupting a statement that has not yet started. 34515ca1df1Sdrh */ 34615ca1df1Sdrh if( db->activeVdbeCnt==0 ){ 34715ca1df1Sdrh db->u1.isInterrupted = 0; 34815ca1df1Sdrh } 34915ca1df1Sdrh 3501da40a38Sdan assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 ); 3511da40a38Sdan 35219e2d37fSdrh #ifndef SQLITE_OMIT_TRACE 35319e2d37fSdrh if( db->xProfile && !db->init.busy ){ 35419e2d37fSdrh double rNow; 355b4b47411Sdanielk1977 sqlite3OsCurrentTime(db->pVfs, &rNow); 356b27b7f5dSdrh p->startTime = (u64)((rNow - (int)rNow)*3600.0*24.0*1000000000.0); 35719e2d37fSdrh } 35819e2d37fSdrh #endif 359c16a03b5Sdrh 3601d850a72Sdanielk1977 db->activeVdbeCnt++; 361ad4a4b80Sdrh if( p->readOnly==0 ) db->writeVdbeCnt++; 3621d850a72Sdanielk1977 p->pc = 0; 3631d850a72Sdanielk1977 } 364b7f9164eSdrh #ifndef SQLITE_OMIT_EXPLAIN 3654f26d6c4Sdrh if( p->explain ){ 3664f26d6c4Sdrh rc = sqlite3VdbeList(p); 367b7f9164eSdrh }else 368b7f9164eSdrh #endif /* SQLITE_OMIT_EXPLAIN */ 369b7f9164eSdrh { 3704f26d6c4Sdrh rc = sqlite3VdbeExec(p); 3714f26d6c4Sdrh } 3724f26d6c4Sdrh 37319e2d37fSdrh #ifndef SQLITE_OMIT_TRACE 37419e2d37fSdrh /* Invoke the profile callback if there is one 37519e2d37fSdrh */ 3766ab3a2ecSdanielk1977 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ 37719e2d37fSdrh double rNow; 37819e2d37fSdrh u64 elapseTime; 37919e2d37fSdrh 380b4b47411Sdanielk1977 sqlite3OsCurrentTime(db->pVfs, &rNow); 381b27b7f5dSdrh elapseTime = (u64)((rNow - (int)rNow)*3600.0*24.0*1000000000.0); 382b27b7f5dSdrh elapseTime -= p->startTime; 3836ab3a2ecSdanielk1977 db->xProfile(db->pProfileArg, p->zSql, elapseTime); 38419e2d37fSdrh } 38519e2d37fSdrh #endif 38619e2d37fSdrh 38780cc85b3Sdrh db->errCode = rc; 388357864ecSdanielk1977 if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ 389357864ecSdanielk1977 p->rc = SQLITE_NOMEM; 3904f26d6c4Sdrh } 391357864ecSdanielk1977 end_of_step: 392357864ecSdanielk1977 /* At this point local variable rc holds the value that should be 393357864ecSdanielk1977 ** returned if this statement was compiled using the legacy 394357864ecSdanielk1977 ** sqlite3_prepare() interface. According to the docs, this can only 395357864ecSdanielk1977 ** be one of the values in the first assert() below. Variable p->rc 396357864ecSdanielk1977 ** contains the value that would be returned if sqlite3_finalize() 397357864ecSdanielk1977 ** were called on statement p. 398357864ecSdanielk1977 */ 399357864ecSdanielk1977 assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR 400357864ecSdanielk1977 || rc==SQLITE_BUSY || rc==SQLITE_MISUSE 401357864ecSdanielk1977 ); 402357864ecSdanielk1977 assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE ); 403357864ecSdanielk1977 if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ 404357864ecSdanielk1977 /* If this statement was prepared using sqlite3_prepare_v2(), and an 405357864ecSdanielk1977 ** error has occured, then return the error code in p->rc to the 406357864ecSdanielk1977 ** caller. Set the error code in the database handle to the same value. 407357864ecSdanielk1977 */ 408357864ecSdanielk1977 rc = db->errCode = p->rc; 409357864ecSdanielk1977 } 410357864ecSdanielk1977 return (rc&db->errMask); 411b900aaf3Sdrh } 412b900aaf3Sdrh 413b900aaf3Sdrh /* 414b900aaf3Sdrh ** This is the top-level implementation of sqlite3_step(). Call 415b900aaf3Sdrh ** sqlite3Step() to do most of the work. If a schema error occurs, 416b900aaf3Sdrh ** call sqlite3Reprepare() and try again. 417b900aaf3Sdrh */ 418b900aaf3Sdrh int sqlite3_step(sqlite3_stmt *pStmt){ 419a6129fa7Sdrh int rc = SQLITE_OK; /* Result from sqlite3Step() */ 420a6129fa7Sdrh int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */ 421a6129fa7Sdrh Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */ 422a6129fa7Sdrh int cnt = 0; /* Counter to prevent infinite loop of reprepares */ 423a6129fa7Sdrh sqlite3 *db; /* The database connection */ 424a6129fa7Sdrh 425413c3d36Sdrh if( vdbeSafetyNotNull(v) ){ 426413c3d36Sdrh return SQLITE_MISUSE_BKPT; 427413c3d36Sdrh } 428413c3d36Sdrh db = v->db; 4298e556520Sdanielk1977 sqlite3_mutex_enter(db->mutex); 430b900aaf3Sdrh while( (rc = sqlite3Step(v))==SQLITE_SCHEMA 431b900aaf3Sdrh && cnt++ < 5 432a6129fa7Sdrh && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){ 433b900aaf3Sdrh sqlite3_reset(pStmt); 434b900aaf3Sdrh v->expired = 0; 435b900aaf3Sdrh } 436*bee8065eSdrh if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){ 4378e556520Sdanielk1977 /* This case occurs after failing to recompile an sql statement. 4388e556520Sdanielk1977 ** The error message from the SQL compiler has already been loaded 4398e556520Sdanielk1977 ** into the database handle. This block copies the error message 4408e556520Sdanielk1977 ** from the database handle into the statement and sets the statement 4418e556520Sdanielk1977 ** program counter to 0 to ensure that when the statement is 4428e556520Sdanielk1977 ** finalized or reset the parser error message is available via 4438e556520Sdanielk1977 ** sqlite3_errmsg() and sqlite3_errcode(). 4448e556520Sdanielk1977 */ 4458e556520Sdanielk1977 const char *zErr = (const char *)sqlite3_value_text(db->pErr); 446633e6d57Sdrh sqlite3DbFree(db, v->zErrMsg); 4478e556520Sdanielk1977 if( !db->mallocFailed ){ 4488e556520Sdanielk1977 v->zErrMsg = sqlite3DbStrDup(db, zErr); 449a6129fa7Sdrh v->rc = rc2; 4508e556520Sdanielk1977 } else { 4518e556520Sdanielk1977 v->zErrMsg = 0; 452a6129fa7Sdrh v->rc = rc = SQLITE_NOMEM; 4538e556520Sdanielk1977 } 4548e556520Sdanielk1977 } 4558e556520Sdanielk1977 rc = sqlite3ApiExit(db, rc); 4568e556520Sdanielk1977 sqlite3_mutex_leave(db->mutex); 457b900aaf3Sdrh return rc; 458b900aaf3Sdrh } 4594f26d6c4Sdrh 4604f26d6c4Sdrh /* 461eb2e176aSdrh ** Extract the user data from a sqlite3_context structure and return a 462eb2e176aSdrh ** pointer to it. 463eb2e176aSdrh */ 464eb2e176aSdrh void *sqlite3_user_data(sqlite3_context *p){ 465eb2e176aSdrh assert( p && p->pFunc ); 466eb2e176aSdrh return p->pFunc->pUserData; 467eb2e176aSdrh } 468eb2e176aSdrh 469eb2e176aSdrh /* 470fa4a4b91Sdrh ** Extract the user data from a sqlite3_context structure and return a 471fa4a4b91Sdrh ** pointer to it. 472fa4a4b91Sdrh */ 473fa4a4b91Sdrh sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ 474fa4a4b91Sdrh assert( p && p->pFunc ); 475fa4a4b91Sdrh return p->s.db; 476fa4a4b91Sdrh } 477fa4a4b91Sdrh 478fa4a4b91Sdrh /* 479b7481e70Sdrh ** The following is the implementation of an SQL function that always 480b7481e70Sdrh ** fails with an error message stating that the function is used in the 481b7481e70Sdrh ** wrong context. The sqlite3_overload_function() API might construct 482b7481e70Sdrh ** SQL function that use this routine so that the functions will exist 483b7481e70Sdrh ** for name resolution but are actually overloaded by the xFindFunction 484b7481e70Sdrh ** method of virtual tables. 485b7481e70Sdrh */ 486b7481e70Sdrh void sqlite3InvalidFunction( 487b7481e70Sdrh sqlite3_context *context, /* The function calling context */ 48862c14b34Sdanielk1977 int NotUsed, /* Number of arguments to the function */ 48962c14b34Sdanielk1977 sqlite3_value **NotUsed2 /* Value of each argument */ 490b7481e70Sdrh ){ 491b7481e70Sdrh const char *zName = context->pFunc->zName; 492b7481e70Sdrh char *zErr; 49362c14b34Sdanielk1977 UNUSED_PARAMETER2(NotUsed, NotUsed2); 494bc6160b0Sdrh zErr = sqlite3_mprintf( 495b7481e70Sdrh "unable to use function %s in the requested context", zName); 496b7481e70Sdrh sqlite3_result_error(context, zErr, -1); 4971e536953Sdanielk1977 sqlite3_free(zErr); 498b7481e70Sdrh } 499b7481e70Sdrh 500b7481e70Sdrh /* 501eb2e176aSdrh ** Allocate or return the aggregate context for a user function. A new 502eb2e176aSdrh ** context is allocated on the first call. Subsequent calls return the 503eb2e176aSdrh ** same context that was returned on prior calls. 504eb2e176aSdrh */ 505eb2e176aSdrh void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ 506b21c8cd4Sdrh Mem *pMem; 507825c662eSdrh assert( p && p->pFunc && p->pFunc->xStep ); 508b21c8cd4Sdrh assert( sqlite3_mutex_held(p->s.db->mutex) ); 509b21c8cd4Sdrh pMem = p->pMem; 510d68eee04Sdrh testcase( nByte<0 ); 511a10a34b8Sdrh if( (pMem->flags & MEM_Agg)==0 ){ 512d68eee04Sdrh if( nByte<=0 ){ 5135f096135Sdanielk1977 sqlite3VdbeMemReleaseExternal(pMem); 5145f096135Sdanielk1977 pMem->flags = MEM_Null; 515a10a34b8Sdrh pMem->z = 0; 516a10a34b8Sdrh }else{ 5175f096135Sdanielk1977 sqlite3VdbeMemGrow(pMem, nByte, 0); 518abfcea25Sdrh pMem->flags = MEM_Agg; 5193c024d69Sdrh pMem->u.pDef = p->pFunc; 5205f096135Sdanielk1977 if( pMem->z ){ 5215f096135Sdanielk1977 memset(pMem->z, 0, nByte); 5225f096135Sdanielk1977 } 523eb2e176aSdrh } 524eb2e176aSdrh } 525abfcea25Sdrh return (void*)pMem->z; 526eb2e176aSdrh } 527eb2e176aSdrh 528eb2e176aSdrh /* 529682f68b0Sdanielk1977 ** Return the auxilary data pointer, if any, for the iArg'th argument to 530682f68b0Sdanielk1977 ** the user-function defined by pCtx. 531682f68b0Sdanielk1977 */ 532682f68b0Sdanielk1977 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ 533b21c8cd4Sdrh VdbeFunc *pVdbeFunc; 534b21c8cd4Sdrh 535b21c8cd4Sdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 536b21c8cd4Sdrh pVdbeFunc = pCtx->pVdbeFunc; 537682f68b0Sdanielk1977 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ 538682f68b0Sdanielk1977 return 0; 539682f68b0Sdanielk1977 } 540f92c7ff7Sdrh return pVdbeFunc->apAux[iArg].pAux; 541682f68b0Sdanielk1977 } 542682f68b0Sdanielk1977 543682f68b0Sdanielk1977 /* 544682f68b0Sdanielk1977 ** Set the auxilary data pointer and delete function, for the iArg'th 545682f68b0Sdanielk1977 ** argument to the user-function defined by pCtx. Any previous value is 546682f68b0Sdanielk1977 ** deleted by calling the delete function specified when it was set. 547682f68b0Sdanielk1977 */ 548682f68b0Sdanielk1977 void sqlite3_set_auxdata( 549682f68b0Sdanielk1977 sqlite3_context *pCtx, 550682f68b0Sdanielk1977 int iArg, 551682f68b0Sdanielk1977 void *pAux, 552682f68b0Sdanielk1977 void (*xDelete)(void*) 553682f68b0Sdanielk1977 ){ 554682f68b0Sdanielk1977 struct AuxData *pAuxData; 555f92c7ff7Sdrh VdbeFunc *pVdbeFunc; 556e0fc5261Sdanielk1977 if( iArg<0 ) goto failed; 557682f68b0Sdanielk1977 558b21c8cd4Sdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 559f92c7ff7Sdrh pVdbeFunc = pCtx->pVdbeFunc; 560f92c7ff7Sdrh if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ 56131dad9daSdanielk1977 int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0); 562998da3a2Sdrh int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; 56326783a58Sdanielk1977 pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc); 56417435752Sdrh if( !pVdbeFunc ){ 56517435752Sdrh goto failed; 56617435752Sdrh } 56753f733c7Sdrh pCtx->pVdbeFunc = pVdbeFunc; 56831dad9daSdanielk1977 memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux)); 569998da3a2Sdrh pVdbeFunc->nAux = iArg+1; 570998da3a2Sdrh pVdbeFunc->pFunc = pCtx->pFunc; 571682f68b0Sdanielk1977 } 572682f68b0Sdanielk1977 573f92c7ff7Sdrh pAuxData = &pVdbeFunc->apAux[iArg]; 574682f68b0Sdanielk1977 if( pAuxData->pAux && pAuxData->xDelete ){ 575682f68b0Sdanielk1977 pAuxData->xDelete(pAuxData->pAux); 576682f68b0Sdanielk1977 } 577682f68b0Sdanielk1977 pAuxData->pAux = pAux; 578682f68b0Sdanielk1977 pAuxData->xDelete = xDelete; 579e0fc5261Sdanielk1977 return; 580e0fc5261Sdanielk1977 581e0fc5261Sdanielk1977 failed: 582e0fc5261Sdanielk1977 if( xDelete ){ 583e0fc5261Sdanielk1977 xDelete(pAux); 584e0fc5261Sdanielk1977 } 585682f68b0Sdanielk1977 } 586682f68b0Sdanielk1977 587eec556d3Sshane #ifndef SQLITE_OMIT_DEPRECATED 588682f68b0Sdanielk1977 /* 589eb2e176aSdrh ** Return the number of times the Step function of a aggregate has been 590eb2e176aSdrh ** called. 591eb2e176aSdrh ** 592cf85a51cSdrh ** This function is deprecated. Do not use it for new code. It is 593cf85a51cSdrh ** provide only to avoid breaking legacy code. New aggregate function 594cf85a51cSdrh ** implementations should keep their own counts within their aggregate 595cf85a51cSdrh ** context. 596eb2e176aSdrh */ 597eb2e176aSdrh int sqlite3_aggregate_count(sqlite3_context *p){ 598e34c647eSshane assert( p && p->pMem && p->pFunc && p->pFunc->xStep ); 599abfcea25Sdrh return p->pMem->n; 600eb2e176aSdrh } 601eec556d3Sshane #endif 602eb2e176aSdrh 603eb2e176aSdrh /* 6044f26d6c4Sdrh ** Return the number of columns in the result set for the statement pStmt. 6054f26d6c4Sdrh */ 6064f26d6c4Sdrh int sqlite3_column_count(sqlite3_stmt *pStmt){ 6074f26d6c4Sdrh Vdbe *pVm = (Vdbe *)pStmt; 6081bcdb0c0Sdrh return pVm ? pVm->nResColumn : 0; 6094f26d6c4Sdrh } 6104f26d6c4Sdrh 6114f26d6c4Sdrh /* 6124f26d6c4Sdrh ** Return the number of values available from the current row of the 6134f26d6c4Sdrh ** currently executing statement pStmt. 6144f26d6c4Sdrh */ 6154f26d6c4Sdrh int sqlite3_data_count(sqlite3_stmt *pStmt){ 6164f26d6c4Sdrh Vdbe *pVm = (Vdbe *)pStmt; 617d4e70ebdSdrh if( pVm==0 || pVm->pResultSet==0 ) return 0; 6184f26d6c4Sdrh return pVm->nResColumn; 6194f26d6c4Sdrh } 6204f26d6c4Sdrh 6214f26d6c4Sdrh 6224f26d6c4Sdrh /* 6234f26d6c4Sdrh ** Check to see if column iCol of the given statement is valid. If 6244f26d6c4Sdrh ** it is, return a pointer to the Mem for the value of that column. 6254f26d6c4Sdrh ** If iCol is not valid, return a pointer to a Mem which has a value 6264f26d6c4Sdrh ** of NULL. 6274f26d6c4Sdrh */ 6284f26d6c4Sdrh static Mem *columnMem(sqlite3_stmt *pStmt, int i){ 62932bc3f6eSdrh Vdbe *pVm; 63032bc3f6eSdrh int vals; 63132bc3f6eSdrh Mem *pOut; 63232bc3f6eSdrh 63332bc3f6eSdrh pVm = (Vdbe *)pStmt; 634d4e70ebdSdrh if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){ 63532bc3f6eSdrh sqlite3_mutex_enter(pVm->db->mutex); 63632bc3f6eSdrh vals = sqlite3_data_count(pStmt); 637d4e70ebdSdrh pOut = &pVm->pResultSet[i]; 63832bc3f6eSdrh }else{ 63941f5b04cSdanielk1977 /* If the value passed as the second argument is out of range, return 64041f5b04cSdanielk1977 ** a pointer to the following static Mem object which contains the 64141f5b04cSdanielk1977 ** value SQL NULL. Even though the Mem structure contains an element 64241f5b04cSdanielk1977 ** of type i64, on certain architecture (x86) with certain compiler 64341f5b04cSdanielk1977 ** switches (-Os), gcc may align this Mem object on a 4-byte boundary 64441f5b04cSdanielk1977 ** instead of an 8-byte one. This all works fine, except that when 64541f5b04cSdanielk1977 ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s 64641f5b04cSdanielk1977 ** that a Mem structure is located on an 8-byte boundary. To prevent 64741f5b04cSdanielk1977 ** this assert() from failing, when building with SQLITE_DEBUG defined 64841f5b04cSdanielk1977 ** using gcc, force nullMem to be 8-byte aligned using the magical 64941f5b04cSdanielk1977 ** __attribute__((aligned(8))) macro. */ 65041f5b04cSdanielk1977 static const Mem nullMem 65141f5b04cSdanielk1977 #if defined(SQLITE_DEBUG) && defined(__GNUC__) 65241f5b04cSdanielk1977 __attribute__((aligned(8))) 65341f5b04cSdanielk1977 #endif 65441f5b04cSdanielk1977 = {{0}, (double)0, 0, "", 0, MEM_Null, SQLITE_NULL, 0, 0, 0 }; 65541f5b04cSdanielk1977 6569b4ea4a5Sdrh if( pVm && ALWAYS(pVm->db) ){ 65727641703Sdrh sqlite3_mutex_enter(pVm->db->mutex); 6584f26d6c4Sdrh sqlite3Error(pVm->db, SQLITE_RANGE, 0); 65927641703Sdrh } 66032bc3f6eSdrh pOut = (Mem*)&nullMem; 6614f26d6c4Sdrh } 66232bc3f6eSdrh return pOut; 6634f26d6c4Sdrh } 6644f26d6c4Sdrh 6652e588c75Sdanielk1977 /* 6662e588c75Sdanielk1977 ** This function is called after invoking an sqlite3_value_XXX function on a 6672e588c75Sdanielk1977 ** column value (i.e. a value returned by evaluating an SQL expression in the 6682e588c75Sdanielk1977 ** select list of a SELECT statement) that may cause a malloc() failure. If 6692e588c75Sdanielk1977 ** malloc() has failed, the threads mallocFailed flag is cleared and the result 6702e588c75Sdanielk1977 ** code of statement pStmt set to SQLITE_NOMEM. 6712e588c75Sdanielk1977 ** 67232bc3f6eSdrh ** Specifically, this is called from within: 6732e588c75Sdanielk1977 ** 6742e588c75Sdanielk1977 ** sqlite3_column_int() 6752e588c75Sdanielk1977 ** sqlite3_column_int64() 6762e588c75Sdanielk1977 ** sqlite3_column_text() 6772e588c75Sdanielk1977 ** sqlite3_column_text16() 6782e588c75Sdanielk1977 ** sqlite3_column_real() 6792e588c75Sdanielk1977 ** sqlite3_column_bytes() 6802e588c75Sdanielk1977 ** sqlite3_column_bytes16() 6812e588c75Sdanielk1977 ** 6822e588c75Sdanielk1977 ** But not for sqlite3_column_blob(), which never calls malloc(). 6832e588c75Sdanielk1977 */ 6842e588c75Sdanielk1977 static void columnMallocFailure(sqlite3_stmt *pStmt) 6852e588c75Sdanielk1977 { 6862e588c75Sdanielk1977 /* If malloc() failed during an encoding conversion within an 6872e588c75Sdanielk1977 ** sqlite3_column_XXX API, then set the return code of the statement to 6882e588c75Sdanielk1977 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR 6892e588c75Sdanielk1977 ** and _finalize() will return NOMEM. 6902e588c75Sdanielk1977 */ 69154f0198eSdanielk1977 Vdbe *p = (Vdbe *)pStmt; 69232bc3f6eSdrh if( p ){ 69332bc3f6eSdrh p->rc = sqlite3ApiExit(p->db, p->rc); 69432bc3f6eSdrh sqlite3_mutex_leave(p->db->mutex); 69532bc3f6eSdrh } 6962e588c75Sdanielk1977 } 6972e588c75Sdanielk1977 6984f26d6c4Sdrh /**************************** sqlite3_column_ ******************************* 6994f26d6c4Sdrh ** The following routines are used to access elements of the current row 7004f26d6c4Sdrh ** in the result set. 7014f26d6c4Sdrh */ 702c572ef7fSdanielk1977 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ 7032e588c75Sdanielk1977 const void *val; 7042e588c75Sdanielk1977 val = sqlite3_value_blob( columnMem(pStmt,i) ); 705c9cf901dSdanielk1977 /* Even though there is no encoding conversion, value_blob() might 706c9cf901dSdanielk1977 ** need to call malloc() to expand the result of a zeroblob() 707c9cf901dSdanielk1977 ** expression. 708c9cf901dSdanielk1977 */ 709c9cf901dSdanielk1977 columnMallocFailure(pStmt); 7102e588c75Sdanielk1977 return val; 711c572ef7fSdanielk1977 } 7124f26d6c4Sdrh int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ 7132e588c75Sdanielk1977 int val = sqlite3_value_bytes( columnMem(pStmt,i) ); 7142e588c75Sdanielk1977 columnMallocFailure(pStmt); 7152e588c75Sdanielk1977 return val; 7164f26d6c4Sdrh } 7174f26d6c4Sdrh int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ 7182e588c75Sdanielk1977 int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); 7192e588c75Sdanielk1977 columnMallocFailure(pStmt); 7202e588c75Sdanielk1977 return val; 7214f26d6c4Sdrh } 7224f26d6c4Sdrh double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ 7232e588c75Sdanielk1977 double val = sqlite3_value_double( columnMem(pStmt,i) ); 7242e588c75Sdanielk1977 columnMallocFailure(pStmt); 7252e588c75Sdanielk1977 return val; 7264f26d6c4Sdrh } 7274f26d6c4Sdrh int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ 7282e588c75Sdanielk1977 int val = sqlite3_value_int( columnMem(pStmt,i) ); 7292e588c75Sdanielk1977 columnMallocFailure(pStmt); 7302e588c75Sdanielk1977 return val; 7314f26d6c4Sdrh } 732efad9995Sdrh sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ 7332e588c75Sdanielk1977 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); 7342e588c75Sdanielk1977 columnMallocFailure(pStmt); 7352e588c75Sdanielk1977 return val; 7364f26d6c4Sdrh } 7374f26d6c4Sdrh const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ 7382e588c75Sdanielk1977 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); 7392e588c75Sdanielk1977 columnMallocFailure(pStmt); 7402e588c75Sdanielk1977 return val; 7414f26d6c4Sdrh } 742d1e4733dSdrh sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ 743d0ffa1e8Sdanielk1977 Mem *pOut = columnMem(pStmt, i); 744d0ffa1e8Sdanielk1977 if( pOut->flags&MEM_Static ){ 745d0ffa1e8Sdanielk1977 pOut->flags &= ~MEM_Static; 746d0ffa1e8Sdanielk1977 pOut->flags |= MEM_Ephem; 747d0ffa1e8Sdanielk1977 } 74832bc3f6eSdrh columnMallocFailure(pStmt); 749d0ffa1e8Sdanielk1977 return (sqlite3_value *)pOut; 750d1e4733dSdrh } 7516c62608fSdrh #ifndef SQLITE_OMIT_UTF16 7524f26d6c4Sdrh const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ 7532e588c75Sdanielk1977 const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); 7542e588c75Sdanielk1977 columnMallocFailure(pStmt); 7552e588c75Sdanielk1977 return val; 7564f26d6c4Sdrh } 7576c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 7584f26d6c4Sdrh int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ 75932bc3f6eSdrh int iType = sqlite3_value_type( columnMem(pStmt,i) ); 76032bc3f6eSdrh columnMallocFailure(pStmt); 76132bc3f6eSdrh return iType; 7624f26d6c4Sdrh } 7634f26d6c4Sdrh 76429d72108Sdrh /* The following function is experimental and subject to change or 76529d72108Sdrh ** removal */ 76629d72108Sdrh /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ 76729d72108Sdrh ** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); 76829d72108Sdrh **} 76929d72108Sdrh */ 77029d72108Sdrh 7715e2517e1Sdrh /* 7725e2517e1Sdrh ** Convert the N-th element of pStmt->pColName[] into a string using 7735e2517e1Sdrh ** xFunc() then return that string. If N is out of range, return 0. 774e590fbdeSdrh ** 775e590fbdeSdrh ** There are up to 5 names for each column. useType determines which 776e590fbdeSdrh ** name is returned. Here are the names: 777e590fbdeSdrh ** 778e590fbdeSdrh ** 0 The column name as it should be displayed for output 779e590fbdeSdrh ** 1 The datatype name for the column 780e590fbdeSdrh ** 2 The name of the database that the column derives from 781e590fbdeSdrh ** 3 The name of the table that the column derives from 782e590fbdeSdrh ** 4 The name of the table column that the result column derives from 783e590fbdeSdrh ** 784e590fbdeSdrh ** If the result is not a simple column reference (if it is an expression 785e590fbdeSdrh ** or a constant) then useTypes 2, 3, and 4 return NULL. 7865e2517e1Sdrh */ 7875e2517e1Sdrh static const void *columnName( 7885e2517e1Sdrh sqlite3_stmt *pStmt, 7895e2517e1Sdrh int N, 7905e2517e1Sdrh const void *(*xFunc)(Mem*), 7915e2517e1Sdrh int useType 7925e2517e1Sdrh ){ 79332bc3f6eSdrh const void *ret = 0; 7945e2517e1Sdrh Vdbe *p = (Vdbe *)pStmt; 79532bc3f6eSdrh int n; 796c6c7fd51Sdrh sqlite3 *db = p->db; 7975e2517e1Sdrh 798c6c7fd51Sdrh assert( db!=0 ); 79932bc3f6eSdrh n = sqlite3_column_count(pStmt); 80032bc3f6eSdrh if( N<n && N>=0 ){ 801e590fbdeSdrh N += useType*n; 802c6c7fd51Sdrh sqlite3_mutex_enter(db->mutex); 803c6c7fd51Sdrh assert( db->mallocFailed==0 ); 80400fd957bSdanielk1977 ret = xFunc(&p->aColName[N]); 80532bc3f6eSdrh /* A malloc may have failed inside of the xFunc() call. If this 80632bc3f6eSdrh ** is the case, clear the mallocFailed flag and return NULL. 80700fd957bSdanielk1977 */ 808c6c7fd51Sdrh if( db->mallocFailed ){ 809c6c7fd51Sdrh db->mallocFailed = 0; 81032bc3f6eSdrh ret = 0; 81132bc3f6eSdrh } 812c6c7fd51Sdrh sqlite3_mutex_leave(db->mutex); 81332bc3f6eSdrh } 81400fd957bSdanielk1977 return ret; 8155e2517e1Sdrh } 8165e2517e1Sdrh 8174f26d6c4Sdrh /* 8184f26d6c4Sdrh ** Return the name of the Nth column of the result set returned by SQL 8194f26d6c4Sdrh ** statement pStmt. 8204f26d6c4Sdrh */ 8214f26d6c4Sdrh const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ 822955de52cSdanielk1977 return columnName( 823955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); 8244f26d6c4Sdrh } 825e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 826e590fbdeSdrh const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ 827955de52cSdanielk1977 return columnName( 828955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); 829e590fbdeSdrh } 830e590fbdeSdrh #endif 8314f26d6c4Sdrh 8324f26d6c4Sdrh /* 8333f913576Sdrh ** Constraint: If you have ENABLE_COLUMN_METADATA then you must 8343f913576Sdrh ** not define OMIT_DECLTYPE. 8353f913576Sdrh */ 8363f913576Sdrh #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) 8373f913576Sdrh # error "Must not define both SQLITE_OMIT_DECLTYPE \ 8383f913576Sdrh and SQLITE_ENABLE_COLUMN_METADATA" 8393f913576Sdrh #endif 8403f913576Sdrh 8413f913576Sdrh #ifndef SQLITE_OMIT_DECLTYPE 8423f913576Sdrh /* 8436c62608fSdrh ** Return the column declaration type (if applicable) of the 'i'th column 844e590fbdeSdrh ** of the result set of SQL statement pStmt. 8456c62608fSdrh */ 8466c62608fSdrh const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ 847955de52cSdanielk1977 return columnName( 848955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); 8496c62608fSdrh } 8506c62608fSdrh #ifndef SQLITE_OMIT_UTF16 85176d505baSdanielk1977 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ 852955de52cSdanielk1977 return columnName( 853955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); 8544f26d6c4Sdrh } 8556c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 8563f913576Sdrh #endif /* SQLITE_OMIT_DECLTYPE */ 8574f26d6c4Sdrh 8584b1ae99dSdanielk1977 #ifdef SQLITE_ENABLE_COLUMN_METADATA 859e590fbdeSdrh /* 860e590fbdeSdrh ** Return the name of the database from which a result column derives. 861e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 862e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 863e590fbdeSdrh */ 864e590fbdeSdrh const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ 865955de52cSdanielk1977 return columnName( 866955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); 867e590fbdeSdrh } 868e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 869e590fbdeSdrh const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ 870955de52cSdanielk1977 return columnName( 871955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); 872e590fbdeSdrh } 873e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 874e590fbdeSdrh 875e590fbdeSdrh /* 876e590fbdeSdrh ** Return the name of the table from which a result column derives. 877e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 878e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 879e590fbdeSdrh */ 880e590fbdeSdrh const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ 881955de52cSdanielk1977 return columnName( 882955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); 883e590fbdeSdrh } 884e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 885e590fbdeSdrh const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ 886955de52cSdanielk1977 return columnName( 887955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); 888e590fbdeSdrh } 889e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 890e590fbdeSdrh 891e590fbdeSdrh /* 892e590fbdeSdrh ** Return the name of the table column from which a result column derives. 893e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 894e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 895e590fbdeSdrh */ 896e590fbdeSdrh const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ 897955de52cSdanielk1977 return columnName( 898955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); 899e590fbdeSdrh } 900e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 901e590fbdeSdrh const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ 902955de52cSdanielk1977 return columnName( 903955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); 904e590fbdeSdrh } 905e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 9064b1ae99dSdanielk1977 #endif /* SQLITE_ENABLE_COLUMN_METADATA */ 907e590fbdeSdrh 908e590fbdeSdrh 9094f26d6c4Sdrh /******************************* sqlite3_bind_ *************************** 9104f26d6c4Sdrh ** 9114f26d6c4Sdrh ** Routines used to attach values to wildcards in a compiled SQL statement. 9124f26d6c4Sdrh */ 9134f26d6c4Sdrh /* 9144f26d6c4Sdrh ** Unbind the value bound to variable i in virtual machine p. This is the 9154f26d6c4Sdrh ** the same as binding a NULL value to the column. If the "i" parameter is 9164f26d6c4Sdrh ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. 9174f26d6c4Sdrh ** 918488e7b63Sdrh ** A successful evaluation of this routine acquires the mutex on p. 919488e7b63Sdrh ** the mutex is released if any kind of error occurs. 920488e7b63Sdrh ** 9214f26d6c4Sdrh ** The error code stored in database p->db is overwritten with the return 9224f26d6c4Sdrh ** value in any case. 9234f26d6c4Sdrh */ 9244f26d6c4Sdrh static int vdbeUnbind(Vdbe *p, int i){ 9254f26d6c4Sdrh Mem *pVar; 926413c3d36Sdrh if( vdbeSafetyNotNull(p) ){ 927413c3d36Sdrh return SQLITE_MISUSE_BKPT; 928413c3d36Sdrh } 929488e7b63Sdrh sqlite3_mutex_enter(p->db->mutex); 930488e7b63Sdrh if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ 931488e7b63Sdrh sqlite3Error(p->db, SQLITE_MISUSE, 0); 932488e7b63Sdrh sqlite3_mutex_leave(p->db->mutex); 933413c3d36Sdrh sqlite3_log(SQLITE_MISUSE, 934413c3d36Sdrh "bind on a busy prepared statement: [%s]", p->zSql); 935413c3d36Sdrh return SQLITE_MISUSE_BKPT; 9364f26d6c4Sdrh } 9374f26d6c4Sdrh if( i<1 || i>p->nVar ){ 9384f26d6c4Sdrh sqlite3Error(p->db, SQLITE_RANGE, 0); 939488e7b63Sdrh sqlite3_mutex_leave(p->db->mutex); 9404f26d6c4Sdrh return SQLITE_RANGE; 9414f26d6c4Sdrh } 9424f26d6c4Sdrh i--; 943290c1948Sdrh pVar = &p->aVar[i]; 944d8123366Sdanielk1977 sqlite3VdbeMemRelease(pVar); 9454f26d6c4Sdrh pVar->flags = MEM_Null; 9464f26d6c4Sdrh sqlite3Error(p->db, SQLITE_OK, 0); 947937d0deaSdan 9481d2ce4f8Sdan /* If the bit corresponding to this variable in Vdbe.expmask is set, then 9491d2ce4f8Sdan ** binding a new value to this variable invalidates the current query plan. 9501d2ce4f8Sdan */ 951823e09abSdrh if( p->isPrepareV2 && 952823e09abSdrh ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff) 953823e09abSdrh ){ 954937d0deaSdan p->expired = 1; 955937d0deaSdan } 9564f26d6c4Sdrh return SQLITE_OK; 9574f26d6c4Sdrh } 9584f26d6c4Sdrh 9594f26d6c4Sdrh /* 9605e2517e1Sdrh ** Bind a text or BLOB value. 9614f26d6c4Sdrh */ 9625e2517e1Sdrh static int bindText( 963605264d2Sdrh sqlite3_stmt *pStmt, /* The statement to bind against */ 964605264d2Sdrh int i, /* Index of the parameter to bind */ 965605264d2Sdrh const void *zData, /* Pointer to the data to be bound */ 966605264d2Sdrh int nData, /* Number of bytes of data to be bound */ 967605264d2Sdrh void (*xDel)(void*), /* Destructor for the data */ 968b27b7f5dSdrh u8 encoding /* Encoding for the data */ 9694f26d6c4Sdrh ){ 9704f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 9714f26d6c4Sdrh Mem *pVar; 9724f26d6c4Sdrh int rc; 9734f26d6c4Sdrh 9744f26d6c4Sdrh rc = vdbeUnbind(p, i); 975488e7b63Sdrh if( rc==SQLITE_OK ){ 976488e7b63Sdrh if( zData!=0 ){ 977290c1948Sdrh pVar = &p->aVar[i-1]; 978b21c8cd4Sdrh rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); 9795e2517e1Sdrh if( rc==SQLITE_OK && encoding!=0 ){ 980b21c8cd4Sdrh rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); 9815e2517e1Sdrh } 9821e536953Sdanielk1977 sqlite3Error(p->db, rc, 0); 983605264d2Sdrh rc = sqlite3ApiExit(p->db, rc); 98427641703Sdrh } 985605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 986488e7b63Sdrh } 987605264d2Sdrh return rc; 9885e2517e1Sdrh } 9895e2517e1Sdrh 9905e2517e1Sdrh 9915e2517e1Sdrh /* 9925e2517e1Sdrh ** Bind a blob value to an SQL statement variable. 9935e2517e1Sdrh */ 9945e2517e1Sdrh int sqlite3_bind_blob( 9955e2517e1Sdrh sqlite3_stmt *pStmt, 9965e2517e1Sdrh int i, 9975e2517e1Sdrh const void *zData, 9985e2517e1Sdrh int nData, 9995e2517e1Sdrh void (*xDel)(void*) 10005e2517e1Sdrh ){ 10015e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, 0); 10025e2517e1Sdrh } 10034f26d6c4Sdrh int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ 10044f26d6c4Sdrh int rc; 10054f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 10064f26d6c4Sdrh rc = vdbeUnbind(p, i); 10074f26d6c4Sdrh if( rc==SQLITE_OK ){ 1008290c1948Sdrh sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); 1009605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1010488e7b63Sdrh } 1011f4618891Sdanielk1977 return rc; 10124f26d6c4Sdrh } 10134f26d6c4Sdrh int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ 1014efad9995Sdrh return sqlite3_bind_int64(p, i, (i64)iValue); 10154f26d6c4Sdrh } 1016efad9995Sdrh int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ 10174f26d6c4Sdrh int rc; 10184f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 10194f26d6c4Sdrh rc = vdbeUnbind(p, i); 10204f26d6c4Sdrh if( rc==SQLITE_OK ){ 1021290c1948Sdrh sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); 1022605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1023488e7b63Sdrh } 10244f26d6c4Sdrh return rc; 10254f26d6c4Sdrh } 1026605264d2Sdrh int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ 1027605264d2Sdrh int rc; 1028605264d2Sdrh Vdbe *p = (Vdbe*)pStmt; 1029605264d2Sdrh rc = vdbeUnbind(p, i); 1030488e7b63Sdrh if( rc==SQLITE_OK ){ 1031605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1032488e7b63Sdrh } 1033605264d2Sdrh return rc; 10344f26d6c4Sdrh } 10354f26d6c4Sdrh int sqlite3_bind_text( 10364f26d6c4Sdrh sqlite3_stmt *pStmt, 10374f26d6c4Sdrh int i, 10384f26d6c4Sdrh const char *zData, 10394f26d6c4Sdrh int nData, 1040d8123366Sdanielk1977 void (*xDel)(void*) 10414f26d6c4Sdrh ){ 10425e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 10434f26d6c4Sdrh } 10446c62608fSdrh #ifndef SQLITE_OMIT_UTF16 10454f26d6c4Sdrh int sqlite3_bind_text16( 10464f26d6c4Sdrh sqlite3_stmt *pStmt, 10474f26d6c4Sdrh int i, 10484f26d6c4Sdrh const void *zData, 10494f26d6c4Sdrh int nData, 1050d8123366Sdanielk1977 void (*xDel)(void*) 10514f26d6c4Sdrh ){ 10525e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); 10534f26d6c4Sdrh } 10546c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 105526e4144dSdanielk1977 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ 105626e4144dSdanielk1977 int rc; 105729def560Sdrh switch( pValue->type ){ 105829def560Sdrh case SQLITE_INTEGER: { 105929def560Sdrh rc = sqlite3_bind_int64(pStmt, i, pValue->u.i); 106029def560Sdrh break; 106129def560Sdrh } 106229def560Sdrh case SQLITE_FLOAT: { 106329def560Sdrh rc = sqlite3_bind_double(pStmt, i, pValue->r); 106429def560Sdrh break; 106529def560Sdrh } 106629def560Sdrh case SQLITE_BLOB: { 106729def560Sdrh if( pValue->flags & MEM_Zero ){ 106829def560Sdrh rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero); 106929def560Sdrh }else{ 107029def560Sdrh rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT); 107129def560Sdrh } 107229def560Sdrh break; 107329def560Sdrh } 107429def560Sdrh case SQLITE_TEXT: { 1075ac80db78Sdrh rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT, 1076ac80db78Sdrh pValue->enc); 1077ac80db78Sdrh break; 1078ac80db78Sdrh } 1079ac80db78Sdrh default: { 1080ac80db78Sdrh rc = sqlite3_bind_null(pStmt, i); 108129def560Sdrh break; 108229def560Sdrh } 10830f5ea0b3Sdrh } 108426e4144dSdanielk1977 return rc; 108526e4144dSdanielk1977 } 1086b026e05eSdrh int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ 1087b026e05eSdrh int rc; 1088b026e05eSdrh Vdbe *p = (Vdbe *)pStmt; 1089b026e05eSdrh rc = vdbeUnbind(p, i); 1090b026e05eSdrh if( rc==SQLITE_OK ){ 1091b026e05eSdrh sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); 1092605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1093488e7b63Sdrh } 1094b026e05eSdrh return rc; 1095b026e05eSdrh } 109675f6a032Sdrh 109775f6a032Sdrh /* 109875f6a032Sdrh ** Return the number of wildcards that can be potentially bound to. 109975f6a032Sdrh ** This routine is added to support DBD::SQLite. 110075f6a032Sdrh */ 110175f6a032Sdrh int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ 110292febd92Sdrh Vdbe *p = (Vdbe*)pStmt; 110392febd92Sdrh return p ? p->nVar : 0; 110475f6a032Sdrh } 1105895d7472Sdrh 1106895d7472Sdrh /* 1107fa6bc000Sdrh ** Create a mapping from variable numbers to variable names 1108fa6bc000Sdrh ** in the Vdbe.azVar[] array, if such a mapping does not already 1109fa6bc000Sdrh ** exist. 1110895d7472Sdrh */ 1111fa6bc000Sdrh static void createVarMap(Vdbe *p){ 1112895d7472Sdrh if( !p->okVar ){ 1113895d7472Sdrh int j; 1114895d7472Sdrh Op *pOp; 11150f5ea0b3Sdrh sqlite3_mutex_enter(p->db->mutex); 11160f5ea0b3Sdrh /* The race condition here is harmless. If two threads call this 11170f5ea0b3Sdrh ** routine on the same Vdbe at the same time, they both might end 11180f5ea0b3Sdrh ** up initializing the Vdbe.azVar[] array. That is a little extra 11190f5ea0b3Sdrh ** work but it results in the same answer. 11200f5ea0b3Sdrh */ 1121895d7472Sdrh for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){ 1122895d7472Sdrh if( pOp->opcode==OP_Variable ){ 1123895d7472Sdrh assert( pOp->p1>0 && pOp->p1<=p->nVar ); 11242dca4ac1Sdanielk1977 p->azVar[pOp->p1-1] = pOp->p4.z; 1125895d7472Sdrh } 1126895d7472Sdrh } 1127895d7472Sdrh p->okVar = 1; 1128605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1129605264d2Sdrh } 1130fa6bc000Sdrh } 1131fa6bc000Sdrh 1132fa6bc000Sdrh /* 1133fa6bc000Sdrh ** Return the name of a wildcard parameter. Return NULL if the index 1134fa6bc000Sdrh ** is out of range or if the wildcard is unnamed. 1135fa6bc000Sdrh ** 1136fa6bc000Sdrh ** The result is always UTF-8. 1137fa6bc000Sdrh */ 1138fa6bc000Sdrh const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ 1139fa6bc000Sdrh Vdbe *p = (Vdbe*)pStmt; 1140fa6bc000Sdrh if( p==0 || i<1 || i>p->nVar ){ 1141fa6bc000Sdrh return 0; 1142fa6bc000Sdrh } 1143fa6bc000Sdrh createVarMap(p); 1144895d7472Sdrh return p->azVar[i-1]; 1145895d7472Sdrh } 1146fa6bc000Sdrh 1147fa6bc000Sdrh /* 1148fa6bc000Sdrh ** Given a wildcard parameter name, return the index of the variable 1149fa6bc000Sdrh ** with that name. If there is no variable with the given name, 1150fa6bc000Sdrh ** return 0. 1151fa6bc000Sdrh */ 11525f18a221Sdrh int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ 1153fa6bc000Sdrh int i; 1154fa6bc000Sdrh if( p==0 ){ 1155fa6bc000Sdrh return 0; 1156fa6bc000Sdrh } 1157fa6bc000Sdrh createVarMap(p); 11586a8903c3Sdrh if( zName ){ 1159fa6bc000Sdrh for(i=0; i<p->nVar; i++){ 1160971a7c87Sdrh const char *z = p->azVar[i]; 11615f18a221Sdrh if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){ 1162fa6bc000Sdrh return i+1; 1163fa6bc000Sdrh } 1164fa6bc000Sdrh } 11656a8903c3Sdrh } 1166fa6bc000Sdrh return 0; 1167fa6bc000Sdrh } 11685f18a221Sdrh int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ 11695f18a221Sdrh return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName)); 11705f18a221Sdrh } 1171f8db1bc0Sdrh 117251942bc3Sdrh /* 1173f8db1bc0Sdrh ** Transfer all bindings from the first statement over to the second. 1174f8db1bc0Sdrh */ 1175145834a4Sshane int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 1176f8db1bc0Sdrh Vdbe *pFrom = (Vdbe*)pFromStmt; 1177f8db1bc0Sdrh Vdbe *pTo = (Vdbe*)pToStmt; 11780f5ea0b3Sdrh int i; 11790f5ea0b3Sdrh assert( pTo->db==pFrom->db ); 11800f5ea0b3Sdrh assert( pTo->nVar==pFrom->nVar ); 118127641703Sdrh sqlite3_mutex_enter(pTo->db->mutex); 11820f5ea0b3Sdrh for(i=0; i<pFrom->nVar; i++){ 1183643167ffSdrh sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); 1184f8db1bc0Sdrh } 118527641703Sdrh sqlite3_mutex_leave(pTo->db->mutex); 11860f5ea0b3Sdrh return SQLITE_OK; 1187f8db1bc0Sdrh } 118851942bc3Sdrh 1189eec556d3Sshane #ifndef SQLITE_OMIT_DEPRECATED 119051942bc3Sdrh /* 1191145834a4Sshane ** Deprecated external interface. Internal/core SQLite code 1192145834a4Sshane ** should call sqlite3TransferBindings. 11930f5ea0b3Sdrh ** 11940f5ea0b3Sdrh ** Is is misuse to call this routine with statements from different 11950f5ea0b3Sdrh ** database connections. But as this is a deprecated interface, we 11960f5ea0b3Sdrh ** will not bother to check for that condition. 11970f5ea0b3Sdrh ** 11980f5ea0b3Sdrh ** If the two statements contain a different number of bindings, then 11990f5ea0b3Sdrh ** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise 12000f5ea0b3Sdrh ** SQLITE_OK is returned. 1201145834a4Sshane */ 1202145834a4Sshane int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 12030f5ea0b3Sdrh Vdbe *pFrom = (Vdbe*)pFromStmt; 12040f5ea0b3Sdrh Vdbe *pTo = (Vdbe*)pToStmt; 12050f5ea0b3Sdrh if( pFrom->nVar!=pTo->nVar ){ 12060f5ea0b3Sdrh return SQLITE_ERROR; 12070f5ea0b3Sdrh } 1208c94b8595Sdan if( pTo->isPrepareV2 && pTo->expmask ){ 1209c94b8595Sdan pTo->expired = 1; 1210c94b8595Sdan } 1211c94b8595Sdan if( pFrom->isPrepareV2 && pFrom->expmask ){ 1212c94b8595Sdan pFrom->expired = 1; 1213c94b8595Sdan } 1214145834a4Sshane return sqlite3TransferBindings(pFromStmt, pToStmt); 1215145834a4Sshane } 1216eec556d3Sshane #endif 1217145834a4Sshane 1218145834a4Sshane /* 121951942bc3Sdrh ** Return the sqlite3* database handle to which the prepared statement given 122051942bc3Sdrh ** in the argument belongs. This is the same database handle that was 122151942bc3Sdrh ** the first argument to the sqlite3_prepare() that was used to create 122251942bc3Sdrh ** the statement in the first place. 122351942bc3Sdrh */ 122451942bc3Sdrh sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ 122551942bc3Sdrh return pStmt ? ((Vdbe*)pStmt)->db : 0; 122651942bc3Sdrh } 1227bb5a9c3eSdrh 1228bb5a9c3eSdrh /* 1229bb5a9c3eSdrh ** Return a pointer to the next prepared statement after pStmt associated 1230bb5a9c3eSdrh ** with database connection pDb. If pStmt is NULL, return the first 1231bb5a9c3eSdrh ** prepared statement for the database connection. Return NULL if there 1232bb5a9c3eSdrh ** are no more. 1233bb5a9c3eSdrh */ 1234bb5a9c3eSdrh sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ 1235bb5a9c3eSdrh sqlite3_stmt *pNext; 1236bb5a9c3eSdrh sqlite3_mutex_enter(pDb->mutex); 1237bb5a9c3eSdrh if( pStmt==0 ){ 1238bb5a9c3eSdrh pNext = (sqlite3_stmt*)pDb->pVdbe; 1239bb5a9c3eSdrh }else{ 1240bb5a9c3eSdrh pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; 1241bb5a9c3eSdrh } 1242bb5a9c3eSdrh sqlite3_mutex_leave(pDb->mutex); 1243bb5a9c3eSdrh return pNext; 1244bb5a9c3eSdrh } 1245d1d38488Sdrh 1246d1d38488Sdrh /* 1247d1d38488Sdrh ** Return the value of a status counter for a prepared statement 1248d1d38488Sdrh */ 1249d1d38488Sdrh int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ 1250d1d38488Sdrh Vdbe *pVdbe = (Vdbe*)pStmt; 1251d1d38488Sdrh int v = pVdbe->aCounter[op-1]; 1252d1d38488Sdrh if( resetFlag ) pVdbe->aCounter[op-1] = 0; 1253d1d38488Sdrh return v; 1254d1d38488Sdrh } 1255