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 ){ 6865bafa65Sdrh /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL 6965bafa65Sdrh ** pointer is a harmless no-op. */ 70e30f4426Sdrh rc = SQLITE_OK; 71e30f4426Sdrh }else{ 72e30f4426Sdrh Vdbe *v = (Vdbe*)pStmt; 73238746a6Sdanielk1977 sqlite3 *db = v->db; 740ae0bfd4Sdrh #if SQLITE_THREADSAFE 750ae0bfd4Sdrh sqlite3_mutex *mutex; 760ae0bfd4Sdrh #endif 77413c3d36Sdrh if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; 7818472fa7Sdrh #if SQLITE_THREADSAFE 790ae0bfd4Sdrh mutex = v->db->mutex; 807e8b848aSdrh #endif 8186f8c197Sdrh sqlite3_mutex_enter(mutex); 82e30f4426Sdrh rc = sqlite3VdbeFinalize(v); 83238746a6Sdanielk1977 rc = sqlite3ApiExit(db, rc); 8486f8c197Sdrh sqlite3_mutex_leave(mutex); 85e30f4426Sdrh } 86e30f4426Sdrh return rc; 87e30f4426Sdrh } 88e30f4426Sdrh 89e30f4426Sdrh /* 90e30f4426Sdrh ** Terminate the current execution of an SQL statement and reset it 91e30f4426Sdrh ** back to its starting state so that it can be reused. A success code from 92e30f4426Sdrh ** the prior execution is returned. 93e30f4426Sdrh ** 94e30f4426Sdrh ** This routine sets the error code and string returned by 95e30f4426Sdrh ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). 96e30f4426Sdrh */ 97e30f4426Sdrh int sqlite3_reset(sqlite3_stmt *pStmt){ 98e30f4426Sdrh int rc; 99e30f4426Sdrh if( pStmt==0 ){ 100e30f4426Sdrh rc = SQLITE_OK; 101e30f4426Sdrh }else{ 102e30f4426Sdrh Vdbe *v = (Vdbe*)pStmt; 103e30f4426Sdrh sqlite3_mutex_enter(v->db->mutex); 104c890fec3Sdrh rc = sqlite3VdbeReset(v); 105e0af83acSdan sqlite3VdbeMakeReady(v, -1, 0, 0, 0, 0, 0); 106e30f4426Sdrh assert( (rc & (v->db->errMask))==rc ); 107238746a6Sdanielk1977 rc = sqlite3ApiExit(v->db, rc); 108e30f4426Sdrh sqlite3_mutex_leave(v->db->mutex); 109e30f4426Sdrh } 110e30f4426Sdrh return rc; 111e30f4426Sdrh } 112e30f4426Sdrh 113e30f4426Sdrh /* 114e30f4426Sdrh ** Set all the parameters in the compiled SQL statement to NULL. 115e30f4426Sdrh */ 116e30f4426Sdrh int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ 117e30f4426Sdrh int i; 118e30f4426Sdrh int rc = SQLITE_OK; 1197297d1f0Sdrh Vdbe *p = (Vdbe*)pStmt; 12018472fa7Sdrh #if SQLITE_THREADSAFE 1217e8b848aSdrh sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; 1227e8b848aSdrh #endif 1237e8b848aSdrh sqlite3_mutex_enter(mutex); 1247297d1f0Sdrh for(i=0; i<p->nVar; i++){ 1257297d1f0Sdrh sqlite3VdbeMemRelease(&p->aVar[i]); 1267297d1f0Sdrh p->aVar[i].flags = MEM_Null; 127e30f4426Sdrh } 128c94b8595Sdan if( p->isPrepareV2 && p->expmask ){ 129c94b8595Sdan p->expired = 1; 130c94b8595Sdan } 1317e8b848aSdrh sqlite3_mutex_leave(mutex); 132e30f4426Sdrh return rc; 133e30f4426Sdrh } 134e30f4426Sdrh 135e30f4426Sdrh 1364f26d6c4Sdrh /**************************** sqlite3_value_ ******************************* 1374f26d6c4Sdrh ** The following routines extract information from a Mem or sqlite3_value 1384f26d6c4Sdrh ** structure. 1394f26d6c4Sdrh */ 1404f26d6c4Sdrh const void *sqlite3_value_blob(sqlite3_value *pVal){ 1414f26d6c4Sdrh Mem *p = (Mem*)pVal; 1424f26d6c4Sdrh if( p->flags & (MEM_Blob|MEM_Str) ){ 143b21c8cd4Sdrh sqlite3VdbeMemExpandBlob(p); 1449310ef23Sdrh p->flags &= ~MEM_Str; 1451f0feef8Sdrh p->flags |= MEM_Blob; 14642262536Sdrh return p->n ? p->z : 0; 1474f26d6c4Sdrh }else{ 1484f26d6c4Sdrh return sqlite3_value_text(pVal); 1494f26d6c4Sdrh } 1504f26d6c4Sdrh } 1514f26d6c4Sdrh int sqlite3_value_bytes(sqlite3_value *pVal){ 152b21c8cd4Sdrh return sqlite3ValueBytes(pVal, SQLITE_UTF8); 1534f26d6c4Sdrh } 1544f26d6c4Sdrh int sqlite3_value_bytes16(sqlite3_value *pVal){ 155b21c8cd4Sdrh return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); 1564f26d6c4Sdrh } 1574f26d6c4Sdrh double sqlite3_value_double(sqlite3_value *pVal){ 1586a6124e2Sdrh return sqlite3VdbeRealValue((Mem*)pVal); 1594f26d6c4Sdrh } 1604f26d6c4Sdrh int sqlite3_value_int(sqlite3_value *pVal){ 161b27b7f5dSdrh return (int)sqlite3VdbeIntValue((Mem*)pVal); 1624f26d6c4Sdrh } 163efad9995Sdrh sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ 1646a6124e2Sdrh return sqlite3VdbeIntValue((Mem*)pVal); 1654f26d6c4Sdrh } 1664f26d6c4Sdrh const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ 167b21c8cd4Sdrh return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); 1684f26d6c4Sdrh } 1696c62608fSdrh #ifndef SQLITE_OMIT_UTF16 1704f26d6c4Sdrh const void *sqlite3_value_text16(sqlite3_value* pVal){ 171b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); 1724f26d6c4Sdrh } 173d8123366Sdanielk1977 const void *sqlite3_value_text16be(sqlite3_value *pVal){ 174b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16BE); 175d8123366Sdanielk1977 } 176d8123366Sdanielk1977 const void *sqlite3_value_text16le(sqlite3_value *pVal){ 177b21c8cd4Sdrh return sqlite3ValueText(pVal, SQLITE_UTF16LE); 178d8123366Sdanielk1977 } 1796c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 1804f26d6c4Sdrh int sqlite3_value_type(sqlite3_value* pVal){ 181f4479501Sdrh return pVal->type; 1824f26d6c4Sdrh } 1834f26d6c4Sdrh 1844f26d6c4Sdrh /**************************** sqlite3_result_ ******************************* 1854f26d6c4Sdrh ** The following routines are used by user-defined functions to specify 1864f26d6c4Sdrh ** the function result. 1874c8555fdSdrh ** 1884c8555fdSdrh ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the 1894c8555fdSdrh ** result as a string or blob but if the string or blob is too large, it 1904c8555fdSdrh ** then sets the error code to SQLITE_TOOBIG 1914f26d6c4Sdrh */ 1924c8555fdSdrh static void setResultStrOrError( 1934c8555fdSdrh sqlite3_context *pCtx, /* Function context */ 1944c8555fdSdrh const char *z, /* String pointer */ 1954c8555fdSdrh int n, /* Bytes in string, or negative */ 1964c8555fdSdrh u8 enc, /* Encoding of z. 0 for BLOBs */ 1974c8555fdSdrh void (*xDel)(void*) /* Destructor function */ 1984c8555fdSdrh ){ 1994c8555fdSdrh if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){ 2004c8555fdSdrh sqlite3_result_error_toobig(pCtx); 2014c8555fdSdrh } 2024c8555fdSdrh } 2034f26d6c4Sdrh void sqlite3_result_blob( 2044f26d6c4Sdrh sqlite3_context *pCtx, 2054f26d6c4Sdrh const void *z, 2064f26d6c4Sdrh int n, 207d8123366Sdanielk1977 void (*xDel)(void *) 2084f26d6c4Sdrh ){ 2095708d2deSdrh assert( n>=0 ); 21032bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2114c8555fdSdrh setResultStrOrError(pCtx, z, n, 0, xDel); 2124f26d6c4Sdrh } 2134f26d6c4Sdrh void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ 21432bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2154f26d6c4Sdrh sqlite3VdbeMemSetDouble(&pCtx->s, rVal); 2164f26d6c4Sdrh } 2174f26d6c4Sdrh void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ 21832bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 21969544ec9Sdrh pCtx->isError = SQLITE_ERROR; 220b21c8cd4Sdrh sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); 2214f26d6c4Sdrh } 222a1686c9aSdanielk1977 #ifndef SQLITE_OMIT_UTF16 2234f26d6c4Sdrh void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ 22432bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 22569544ec9Sdrh pCtx->isError = SQLITE_ERROR; 226b21c8cd4Sdrh sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); 2274f26d6c4Sdrh } 228a1686c9aSdanielk1977 #endif 229f4479501Sdrh void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ 23032bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2314f26d6c4Sdrh sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal); 2324f26d6c4Sdrh } 2334f26d6c4Sdrh void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ 23432bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2354f26d6c4Sdrh sqlite3VdbeMemSetInt64(&pCtx->s, iVal); 2364f26d6c4Sdrh } 2374f26d6c4Sdrh void sqlite3_result_null(sqlite3_context *pCtx){ 23832bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 239f4479501Sdrh sqlite3VdbeMemSetNull(&pCtx->s); 2404f26d6c4Sdrh } 2414f26d6c4Sdrh void sqlite3_result_text( 2424f26d6c4Sdrh sqlite3_context *pCtx, 2434f26d6c4Sdrh const char *z, 2444f26d6c4Sdrh int n, 245d8123366Sdanielk1977 void (*xDel)(void *) 2464f26d6c4Sdrh ){ 24732bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2484c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); 2494f26d6c4Sdrh } 2506c62608fSdrh #ifndef SQLITE_OMIT_UTF16 2514f26d6c4Sdrh void sqlite3_result_text16( 2524f26d6c4Sdrh sqlite3_context *pCtx, 2534f26d6c4Sdrh const void *z, 2544f26d6c4Sdrh int n, 255d8123366Sdanielk1977 void (*xDel)(void *) 2564f26d6c4Sdrh ){ 25732bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2584c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel); 259d8123366Sdanielk1977 } 260d8123366Sdanielk1977 void sqlite3_result_text16be( 261d8123366Sdanielk1977 sqlite3_context *pCtx, 262d8123366Sdanielk1977 const void *z, 263d8123366Sdanielk1977 int n, 264d8123366Sdanielk1977 void (*xDel)(void *) 265d8123366Sdanielk1977 ){ 26632bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2674c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel); 268d8123366Sdanielk1977 } 269d8123366Sdanielk1977 void sqlite3_result_text16le( 270d8123366Sdanielk1977 sqlite3_context *pCtx, 271d8123366Sdanielk1977 const void *z, 272d8123366Sdanielk1977 int n, 273d8123366Sdanielk1977 void (*xDel)(void *) 274d8123366Sdanielk1977 ){ 27532bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 2764c8555fdSdrh setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel); 2774f26d6c4Sdrh } 2786c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 2794f26d6c4Sdrh void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ 28032bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 281b21c8cd4Sdrh sqlite3VdbeMemCopy(&pCtx->s, pValue); 2824f26d6c4Sdrh } 283b026e05eSdrh void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ 28432bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 285b026e05eSdrh sqlite3VdbeMemSetZeroBlob(&pCtx->s, n); 286b026e05eSdrh } 28769544ec9Sdrh void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ 28869544ec9Sdrh pCtx->isError = errCode; 28951c7d864Sdrh if( pCtx->s.flags & MEM_Null ){ 29051c7d864Sdrh sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 29151c7d864Sdrh SQLITE_UTF8, SQLITE_STATIC); 29251c7d864Sdrh } 29369544ec9Sdrh } 2944f26d6c4Sdrh 295a0206bc8Sdrh /* Force an SQLITE_TOOBIG error. */ 296a0206bc8Sdrh void sqlite3_result_error_toobig(sqlite3_context *pCtx){ 29732bc3f6eSdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 298bb4957f8Sdrh pCtx->isError = SQLITE_TOOBIG; 299bb4957f8Sdrh sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 300bb4957f8Sdrh SQLITE_UTF8, SQLITE_STATIC); 301a0206bc8Sdrh } 302a0206bc8Sdrh 303a1644fd8Sdanielk1977 /* An SQLITE_NOMEM error. */ 304a1644fd8Sdanielk1977 void sqlite3_result_error_nomem(sqlite3_context *pCtx){ 305a1644fd8Sdanielk1977 assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 306a1644fd8Sdanielk1977 sqlite3VdbeMemSetNull(&pCtx->s); 30769544ec9Sdrh pCtx->isError = SQLITE_NOMEM; 308a1644fd8Sdanielk1977 pCtx->s.db->mallocFailed = 1; 309a1644fd8Sdanielk1977 } 3104f26d6c4Sdrh 3115cf53537Sdan /* 3125cf53537Sdan ** This function is called after a transaction has been committed. It 3135cf53537Sdan ** invokes callbacks registered with sqlite3_wal_hook() as required. 3145cf53537Sdan */ 3157ed91f23Sdrh static int doWalCallbacks(sqlite3 *db){ 3168d22a174Sdan int rc = SQLITE_OK; 3175cf53537Sdan #ifndef SQLITE_OMIT_WAL 3185cf53537Sdan int i; 3198d22a174Sdan for(i=0; i<db->nDb; i++){ 3208d22a174Sdan Btree *pBt = db->aDb[i].pBt; 3218d22a174Sdan if( pBt ){ 3227ed91f23Sdrh int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); 3235def0843Sdrh if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){ 3245def0843Sdrh rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry); 3258d22a174Sdan } 3268d22a174Sdan } 3278d22a174Sdan } 3285cf53537Sdan #endif 3298d22a174Sdan return rc; 3308d22a174Sdan } 3318d22a174Sdan 3324f26d6c4Sdrh /* 3334f26d6c4Sdrh ** Execute the statement pStmt, either until a row of data is ready, the 3344f26d6c4Sdrh ** statement is completely executed or an error occurs. 335b900aaf3Sdrh ** 336b900aaf3Sdrh ** This routine implements the bulk of the logic behind the sqlite_step() 337b900aaf3Sdrh ** API. The only thing omitted is the automatic recompile if a 338b900aaf3Sdrh ** schema change has occurred. That detail is handled by the 339b900aaf3Sdrh ** outer sqlite3_step() wrapper procedure. 3404f26d6c4Sdrh */ 341b900aaf3Sdrh static int sqlite3Step(Vdbe *p){ 3429bb575fdSdrh sqlite3 *db; 3434f26d6c4Sdrh int rc; 3444f26d6c4Sdrh 345a185ddbfSdanielk1977 assert(p); 346a185ddbfSdanielk1977 if( p->magic!=VDBE_MAGIC_RUN ){ 3473674bfd1Sdrh /* We used to require that sqlite3_reset() be called before retrying 348602acb48Sdrh ** sqlite3_step() after any error or after SQLITE_DONE. But beginning 349602acb48Sdrh ** with version 3.7.0, we changed this so that sqlite3_reset() would 350602acb48Sdrh ** be called automatically instead of throwing the SQLITE_MISUSE error. 351602acb48Sdrh ** This "automatic-reset" change is not technically an incompatibility, 352602acb48Sdrh ** since any application that receives an SQLITE_MISUSE is broken by 353602acb48Sdrh ** definition. 354602acb48Sdrh ** 355602acb48Sdrh ** Nevertheless, some published applications that were originally written 356602acb48Sdrh ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 357602acb48Sdrh ** returns, and the so were broken by the automatic-reset change. As a 358602acb48Sdrh ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the 359602acb48Sdrh ** legacy behavior of returning SQLITE_MISUSE for cases where the 360602acb48Sdrh ** previous sqlite3_step() returned something other than a SQLITE_LOCKED 361602acb48Sdrh ** or SQLITE_BUSY error. 3623674bfd1Sdrh */ 363602acb48Sdrh #ifdef SQLITE_OMIT_AUTORESET 364602acb48Sdrh if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){ 3653674bfd1Sdrh sqlite3_reset((sqlite3_stmt*)p); 366602acb48Sdrh }else{ 367602acb48Sdrh return SQLITE_MISUSE_BKPT; 368602acb48Sdrh } 369602acb48Sdrh #else 370602acb48Sdrh sqlite3_reset((sqlite3_stmt*)p); 371602acb48Sdrh #endif 372f1bfe9a8Sdrh } 373f1bfe9a8Sdrh 37414d4cc43Sdan /* Check that malloc() has not failed. If it has, return early. */ 37517435752Sdrh db = p->db; 376c456e57aSdrh if( db->mallocFailed ){ 37714d4cc43Sdan p->rc = SQLITE_NOMEM; 378c456e57aSdrh return SQLITE_NOMEM; 379c456e57aSdrh } 380261919ccSdanielk1977 381a21c6b6fSdanielk1977 if( p->pc<=0 && p->expired ){ 382a21c6b6fSdanielk1977 p->rc = SQLITE_SCHEMA; 383b900aaf3Sdrh rc = SQLITE_ERROR; 384b900aaf3Sdrh goto end_of_step; 385a21c6b6fSdanielk1977 } 3861d850a72Sdanielk1977 if( p->pc<0 ){ 38715ca1df1Sdrh /* If there are no other statements currently running, then 38815ca1df1Sdrh ** reset the interrupt flag. This prevents a call to sqlite3_interrupt 38915ca1df1Sdrh ** from interrupting a statement that has not yet started. 39015ca1df1Sdrh */ 39115ca1df1Sdrh if( db->activeVdbeCnt==0 ){ 39215ca1df1Sdrh db->u1.isInterrupted = 0; 39315ca1df1Sdrh } 39415ca1df1Sdrh 3951da40a38Sdan assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 ); 3961da40a38Sdan 39719e2d37fSdrh #ifndef SQLITE_OMIT_TRACE 39819e2d37fSdrh if( db->xProfile && !db->init.busy ){ 399b7e8ea20Sdrh sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); 40019e2d37fSdrh } 40119e2d37fSdrh #endif 402c16a03b5Sdrh 4031d850a72Sdanielk1977 db->activeVdbeCnt++; 404ad4a4b80Sdrh if( p->readOnly==0 ) db->writeVdbeCnt++; 4051d850a72Sdanielk1977 p->pc = 0; 4061d850a72Sdanielk1977 } 407b7f9164eSdrh #ifndef SQLITE_OMIT_EXPLAIN 4084f26d6c4Sdrh if( p->explain ){ 4094f26d6c4Sdrh rc = sqlite3VdbeList(p); 410b7f9164eSdrh }else 411b7f9164eSdrh #endif /* SQLITE_OMIT_EXPLAIN */ 412b7f9164eSdrh { 41327381bd5Sdan db->vdbeExecCnt++; 4144f26d6c4Sdrh rc = sqlite3VdbeExec(p); 41527381bd5Sdan db->vdbeExecCnt--; 4164f26d6c4Sdrh } 4174f26d6c4Sdrh 41819e2d37fSdrh #ifndef SQLITE_OMIT_TRACE 41919e2d37fSdrh /* Invoke the profile callback if there is one 42019e2d37fSdrh */ 4216ab3a2ecSdanielk1977 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){ 422b7e8ea20Sdrh sqlite3_int64 iNow; 423b7e8ea20Sdrh sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); 424df0db0feSdrh db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000); 42519e2d37fSdrh } 42619e2d37fSdrh #endif 42719e2d37fSdrh 4288d22a174Sdan if( rc==SQLITE_DONE ){ 4298d22a174Sdan assert( p->rc==SQLITE_OK ); 4307ed91f23Sdrh p->rc = doWalCallbacks(db); 4318d22a174Sdan if( p->rc!=SQLITE_OK ){ 4328d22a174Sdan rc = SQLITE_ERROR; 4338d22a174Sdan } 4348d22a174Sdan } 4358d22a174Sdan 43680cc85b3Sdrh db->errCode = rc; 437357864ecSdanielk1977 if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ 438357864ecSdanielk1977 p->rc = SQLITE_NOMEM; 4394f26d6c4Sdrh } 440357864ecSdanielk1977 end_of_step: 441357864ecSdanielk1977 /* At this point local variable rc holds the value that should be 442357864ecSdanielk1977 ** returned if this statement was compiled using the legacy 443357864ecSdanielk1977 ** sqlite3_prepare() interface. According to the docs, this can only 444357864ecSdanielk1977 ** be one of the values in the first assert() below. Variable p->rc 445357864ecSdanielk1977 ** contains the value that would be returned if sqlite3_finalize() 446357864ecSdanielk1977 ** were called on statement p. 447357864ecSdanielk1977 */ 448357864ecSdanielk1977 assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR 449357864ecSdanielk1977 || rc==SQLITE_BUSY || rc==SQLITE_MISUSE 450357864ecSdanielk1977 ); 451357864ecSdanielk1977 assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE ); 452357864ecSdanielk1977 if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ 453357864ecSdanielk1977 /* If this statement was prepared using sqlite3_prepare_v2(), and an 454357864ecSdanielk1977 ** error has occured, then return the error code in p->rc to the 455357864ecSdanielk1977 ** caller. Set the error code in the database handle to the same value. 456357864ecSdanielk1977 */ 457357864ecSdanielk1977 rc = db->errCode = p->rc; 458357864ecSdanielk1977 } 459357864ecSdanielk1977 return (rc&db->errMask); 460b900aaf3Sdrh } 461b900aaf3Sdrh 462b900aaf3Sdrh /* 463b900aaf3Sdrh ** This is the top-level implementation of sqlite3_step(). Call 464b900aaf3Sdrh ** sqlite3Step() to do most of the work. If a schema error occurs, 465b900aaf3Sdrh ** call sqlite3Reprepare() and try again. 466b900aaf3Sdrh */ 467b900aaf3Sdrh int sqlite3_step(sqlite3_stmt *pStmt){ 468a6129fa7Sdrh int rc = SQLITE_OK; /* Result from sqlite3Step() */ 469a6129fa7Sdrh int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */ 470a6129fa7Sdrh Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */ 471a6129fa7Sdrh int cnt = 0; /* Counter to prevent infinite loop of reprepares */ 472a6129fa7Sdrh sqlite3 *db; /* The database connection */ 473a6129fa7Sdrh 474413c3d36Sdrh if( vdbeSafetyNotNull(v) ){ 475413c3d36Sdrh return SQLITE_MISUSE_BKPT; 476413c3d36Sdrh } 477413c3d36Sdrh db = v->db; 4788e556520Sdanielk1977 sqlite3_mutex_enter(db->mutex); 479b900aaf3Sdrh while( (rc = sqlite3Step(v))==SQLITE_SCHEMA 480b900aaf3Sdrh && cnt++ < 5 481a6129fa7Sdrh && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){ 482b900aaf3Sdrh sqlite3_reset(pStmt); 483b900aaf3Sdrh v->expired = 0; 484b900aaf3Sdrh } 485bee8065eSdrh if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){ 4868e556520Sdanielk1977 /* This case occurs after failing to recompile an sql statement. 4878e556520Sdanielk1977 ** The error message from the SQL compiler has already been loaded 4888e556520Sdanielk1977 ** into the database handle. This block copies the error message 4898e556520Sdanielk1977 ** from the database handle into the statement and sets the statement 4908e556520Sdanielk1977 ** program counter to 0 to ensure that when the statement is 4918e556520Sdanielk1977 ** finalized or reset the parser error message is available via 4928e556520Sdanielk1977 ** sqlite3_errmsg() and sqlite3_errcode(). 4938e556520Sdanielk1977 */ 4948e556520Sdanielk1977 const char *zErr = (const char *)sqlite3_value_text(db->pErr); 495633e6d57Sdrh sqlite3DbFree(db, v->zErrMsg); 4968e556520Sdanielk1977 if( !db->mallocFailed ){ 4978e556520Sdanielk1977 v->zErrMsg = sqlite3DbStrDup(db, zErr); 498a6129fa7Sdrh v->rc = rc2; 4998e556520Sdanielk1977 } else { 5008e556520Sdanielk1977 v->zErrMsg = 0; 501a6129fa7Sdrh v->rc = rc = SQLITE_NOMEM; 5028e556520Sdanielk1977 } 5038e556520Sdanielk1977 } 5048e556520Sdanielk1977 rc = sqlite3ApiExit(db, rc); 5058e556520Sdanielk1977 sqlite3_mutex_leave(db->mutex); 506b900aaf3Sdrh return rc; 507b900aaf3Sdrh } 5084f26d6c4Sdrh 5094f26d6c4Sdrh /* 510eb2e176aSdrh ** Extract the user data from a sqlite3_context structure and return a 511eb2e176aSdrh ** pointer to it. 512eb2e176aSdrh */ 513eb2e176aSdrh void *sqlite3_user_data(sqlite3_context *p){ 514eb2e176aSdrh assert( p && p->pFunc ); 515eb2e176aSdrh return p->pFunc->pUserData; 516eb2e176aSdrh } 517eb2e176aSdrh 518eb2e176aSdrh /* 519fa4a4b91Sdrh ** Extract the user data from a sqlite3_context structure and return a 520fa4a4b91Sdrh ** pointer to it. 5219f129f46Sdrh ** 5229f129f46Sdrh ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface 5239f129f46Sdrh ** returns a copy of the pointer to the database connection (the 1st 5249f129f46Sdrh ** parameter) of the sqlite3_create_function() and 5259f129f46Sdrh ** sqlite3_create_function16() routines that originally registered the 5269f129f46Sdrh ** application defined function. 527fa4a4b91Sdrh */ 528fa4a4b91Sdrh sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ 529fa4a4b91Sdrh assert( p && p->pFunc ); 530fa4a4b91Sdrh return p->s.db; 531fa4a4b91Sdrh } 532fa4a4b91Sdrh 533fa4a4b91Sdrh /* 534b7481e70Sdrh ** The following is the implementation of an SQL function that always 535b7481e70Sdrh ** fails with an error message stating that the function is used in the 536b7481e70Sdrh ** wrong context. The sqlite3_overload_function() API might construct 537b7481e70Sdrh ** SQL function that use this routine so that the functions will exist 538b7481e70Sdrh ** for name resolution but are actually overloaded by the xFindFunction 539b7481e70Sdrh ** method of virtual tables. 540b7481e70Sdrh */ 541b7481e70Sdrh void sqlite3InvalidFunction( 542b7481e70Sdrh sqlite3_context *context, /* The function calling context */ 54362c14b34Sdanielk1977 int NotUsed, /* Number of arguments to the function */ 54462c14b34Sdanielk1977 sqlite3_value **NotUsed2 /* Value of each argument */ 545b7481e70Sdrh ){ 546b7481e70Sdrh const char *zName = context->pFunc->zName; 547b7481e70Sdrh char *zErr; 54862c14b34Sdanielk1977 UNUSED_PARAMETER2(NotUsed, NotUsed2); 549bc6160b0Sdrh zErr = sqlite3_mprintf( 550b7481e70Sdrh "unable to use function %s in the requested context", zName); 551b7481e70Sdrh sqlite3_result_error(context, zErr, -1); 5521e536953Sdanielk1977 sqlite3_free(zErr); 553b7481e70Sdrh } 554b7481e70Sdrh 555b7481e70Sdrh /* 556eb2e176aSdrh ** Allocate or return the aggregate context for a user function. A new 557eb2e176aSdrh ** context is allocated on the first call. Subsequent calls return the 558eb2e176aSdrh ** same context that was returned on prior calls. 559eb2e176aSdrh */ 560eb2e176aSdrh void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ 561b21c8cd4Sdrh Mem *pMem; 562825c662eSdrh assert( p && p->pFunc && p->pFunc->xStep ); 563b21c8cd4Sdrh assert( sqlite3_mutex_held(p->s.db->mutex) ); 564b21c8cd4Sdrh pMem = p->pMem; 565d68eee04Sdrh testcase( nByte<0 ); 566a10a34b8Sdrh if( (pMem->flags & MEM_Agg)==0 ){ 567d68eee04Sdrh if( nByte<=0 ){ 5685f096135Sdanielk1977 sqlite3VdbeMemReleaseExternal(pMem); 5695f096135Sdanielk1977 pMem->flags = MEM_Null; 570a10a34b8Sdrh pMem->z = 0; 571a10a34b8Sdrh }else{ 5725f096135Sdanielk1977 sqlite3VdbeMemGrow(pMem, nByte, 0); 573abfcea25Sdrh pMem->flags = MEM_Agg; 5743c024d69Sdrh pMem->u.pDef = p->pFunc; 5755f096135Sdanielk1977 if( pMem->z ){ 5765f096135Sdanielk1977 memset(pMem->z, 0, nByte); 5775f096135Sdanielk1977 } 578eb2e176aSdrh } 579eb2e176aSdrh } 580abfcea25Sdrh return (void*)pMem->z; 581eb2e176aSdrh } 582eb2e176aSdrh 583eb2e176aSdrh /* 584682f68b0Sdanielk1977 ** Return the auxilary data pointer, if any, for the iArg'th argument to 585682f68b0Sdanielk1977 ** the user-function defined by pCtx. 586682f68b0Sdanielk1977 */ 587682f68b0Sdanielk1977 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ 588b21c8cd4Sdrh VdbeFunc *pVdbeFunc; 589b21c8cd4Sdrh 590b21c8cd4Sdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 591b21c8cd4Sdrh pVdbeFunc = pCtx->pVdbeFunc; 592682f68b0Sdanielk1977 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){ 593682f68b0Sdanielk1977 return 0; 594682f68b0Sdanielk1977 } 595f92c7ff7Sdrh return pVdbeFunc->apAux[iArg].pAux; 596682f68b0Sdanielk1977 } 597682f68b0Sdanielk1977 598682f68b0Sdanielk1977 /* 599682f68b0Sdanielk1977 ** Set the auxilary data pointer and delete function, for the iArg'th 600682f68b0Sdanielk1977 ** argument to the user-function defined by pCtx. Any previous value is 601682f68b0Sdanielk1977 ** deleted by calling the delete function specified when it was set. 602682f68b0Sdanielk1977 */ 603682f68b0Sdanielk1977 void sqlite3_set_auxdata( 604682f68b0Sdanielk1977 sqlite3_context *pCtx, 605682f68b0Sdanielk1977 int iArg, 606682f68b0Sdanielk1977 void *pAux, 607682f68b0Sdanielk1977 void (*xDelete)(void*) 608682f68b0Sdanielk1977 ){ 609682f68b0Sdanielk1977 struct AuxData *pAuxData; 610f92c7ff7Sdrh VdbeFunc *pVdbeFunc; 611e0fc5261Sdanielk1977 if( iArg<0 ) goto failed; 612682f68b0Sdanielk1977 613b21c8cd4Sdrh assert( sqlite3_mutex_held(pCtx->s.db->mutex) ); 614f92c7ff7Sdrh pVdbeFunc = pCtx->pVdbeFunc; 615f92c7ff7Sdrh if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){ 61631dad9daSdanielk1977 int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0); 617998da3a2Sdrh int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg; 61826783a58Sdanielk1977 pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc); 61917435752Sdrh if( !pVdbeFunc ){ 62017435752Sdrh goto failed; 62117435752Sdrh } 62253f733c7Sdrh pCtx->pVdbeFunc = pVdbeFunc; 62331dad9daSdanielk1977 memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux)); 624998da3a2Sdrh pVdbeFunc->nAux = iArg+1; 625998da3a2Sdrh pVdbeFunc->pFunc = pCtx->pFunc; 626682f68b0Sdanielk1977 } 627682f68b0Sdanielk1977 628f92c7ff7Sdrh pAuxData = &pVdbeFunc->apAux[iArg]; 629682f68b0Sdanielk1977 if( pAuxData->pAux && pAuxData->xDelete ){ 630682f68b0Sdanielk1977 pAuxData->xDelete(pAuxData->pAux); 631682f68b0Sdanielk1977 } 632682f68b0Sdanielk1977 pAuxData->pAux = pAux; 633682f68b0Sdanielk1977 pAuxData->xDelete = xDelete; 634e0fc5261Sdanielk1977 return; 635e0fc5261Sdanielk1977 636e0fc5261Sdanielk1977 failed: 637e0fc5261Sdanielk1977 if( xDelete ){ 638e0fc5261Sdanielk1977 xDelete(pAux); 639e0fc5261Sdanielk1977 } 640682f68b0Sdanielk1977 } 641682f68b0Sdanielk1977 642eec556d3Sshane #ifndef SQLITE_OMIT_DEPRECATED 643682f68b0Sdanielk1977 /* 644eb2e176aSdrh ** Return the number of times the Step function of a aggregate has been 645eb2e176aSdrh ** called. 646eb2e176aSdrh ** 647cf85a51cSdrh ** This function is deprecated. Do not use it for new code. It is 648cf85a51cSdrh ** provide only to avoid breaking legacy code. New aggregate function 649cf85a51cSdrh ** implementations should keep their own counts within their aggregate 650cf85a51cSdrh ** context. 651eb2e176aSdrh */ 652eb2e176aSdrh int sqlite3_aggregate_count(sqlite3_context *p){ 653e34c647eSshane assert( p && p->pMem && p->pFunc && p->pFunc->xStep ); 654abfcea25Sdrh return p->pMem->n; 655eb2e176aSdrh } 656eec556d3Sshane #endif 657eb2e176aSdrh 658eb2e176aSdrh /* 6594f26d6c4Sdrh ** Return the number of columns in the result set for the statement pStmt. 6604f26d6c4Sdrh */ 6614f26d6c4Sdrh int sqlite3_column_count(sqlite3_stmt *pStmt){ 6624f26d6c4Sdrh Vdbe *pVm = (Vdbe *)pStmt; 6631bcdb0c0Sdrh return pVm ? pVm->nResColumn : 0; 6644f26d6c4Sdrh } 6654f26d6c4Sdrh 6664f26d6c4Sdrh /* 6674f26d6c4Sdrh ** Return the number of values available from the current row of the 6684f26d6c4Sdrh ** currently executing statement pStmt. 6694f26d6c4Sdrh */ 6704f26d6c4Sdrh int sqlite3_data_count(sqlite3_stmt *pStmt){ 6714f26d6c4Sdrh Vdbe *pVm = (Vdbe *)pStmt; 672d4e70ebdSdrh if( pVm==0 || pVm->pResultSet==0 ) return 0; 6734f26d6c4Sdrh return pVm->nResColumn; 6744f26d6c4Sdrh } 6754f26d6c4Sdrh 6764f26d6c4Sdrh 6774f26d6c4Sdrh /* 6784f26d6c4Sdrh ** Check to see if column iCol of the given statement is valid. If 6794f26d6c4Sdrh ** it is, return a pointer to the Mem for the value of that column. 6804f26d6c4Sdrh ** If iCol is not valid, return a pointer to a Mem which has a value 6814f26d6c4Sdrh ** of NULL. 6824f26d6c4Sdrh */ 6834f26d6c4Sdrh static Mem *columnMem(sqlite3_stmt *pStmt, int i){ 68432bc3f6eSdrh Vdbe *pVm; 68532bc3f6eSdrh Mem *pOut; 68632bc3f6eSdrh 68732bc3f6eSdrh pVm = (Vdbe *)pStmt; 688d4e70ebdSdrh if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){ 68932bc3f6eSdrh sqlite3_mutex_enter(pVm->db->mutex); 690d4e70ebdSdrh pOut = &pVm->pResultSet[i]; 69132bc3f6eSdrh }else{ 69241f5b04cSdanielk1977 /* If the value passed as the second argument is out of range, return 69341f5b04cSdanielk1977 ** a pointer to the following static Mem object which contains the 69441f5b04cSdanielk1977 ** value SQL NULL. Even though the Mem structure contains an element 69541f5b04cSdanielk1977 ** of type i64, on certain architecture (x86) with certain compiler 69641f5b04cSdanielk1977 ** switches (-Os), gcc may align this Mem object on a 4-byte boundary 69741f5b04cSdanielk1977 ** instead of an 8-byte one. This all works fine, except that when 69841f5b04cSdanielk1977 ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s 69941f5b04cSdanielk1977 ** that a Mem structure is located on an 8-byte boundary. To prevent 70041f5b04cSdanielk1977 ** this assert() from failing, when building with SQLITE_DEBUG defined 70141f5b04cSdanielk1977 ** using gcc, force nullMem to be 8-byte aligned using the magical 70241f5b04cSdanielk1977 ** __attribute__((aligned(8))) macro. */ 70341f5b04cSdanielk1977 static const Mem nullMem 70441f5b04cSdanielk1977 #if defined(SQLITE_DEBUG) && defined(__GNUC__) 70541f5b04cSdanielk1977 __attribute__((aligned(8))) 70641f5b04cSdanielk1977 #endif 707*fcd71b60Sdrh = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0, 708*fcd71b60Sdrh #ifdef SQLITE_DEBUG 709*fcd71b60Sdrh 0, 0, /* pScopyFrom, pFiller */ 710*fcd71b60Sdrh #endif 711*fcd71b60Sdrh 0, 0 }; 71241f5b04cSdanielk1977 7139b4ea4a5Sdrh if( pVm && ALWAYS(pVm->db) ){ 71427641703Sdrh sqlite3_mutex_enter(pVm->db->mutex); 7154f26d6c4Sdrh sqlite3Error(pVm->db, SQLITE_RANGE, 0); 71627641703Sdrh } 71732bc3f6eSdrh pOut = (Mem*)&nullMem; 7184f26d6c4Sdrh } 71932bc3f6eSdrh return pOut; 7204f26d6c4Sdrh } 7214f26d6c4Sdrh 7222e588c75Sdanielk1977 /* 7232e588c75Sdanielk1977 ** This function is called after invoking an sqlite3_value_XXX function on a 7242e588c75Sdanielk1977 ** column value (i.e. a value returned by evaluating an SQL expression in the 7252e588c75Sdanielk1977 ** select list of a SELECT statement) that may cause a malloc() failure. If 7262e588c75Sdanielk1977 ** malloc() has failed, the threads mallocFailed flag is cleared and the result 7272e588c75Sdanielk1977 ** code of statement pStmt set to SQLITE_NOMEM. 7282e588c75Sdanielk1977 ** 72932bc3f6eSdrh ** Specifically, this is called from within: 7302e588c75Sdanielk1977 ** 7312e588c75Sdanielk1977 ** sqlite3_column_int() 7322e588c75Sdanielk1977 ** sqlite3_column_int64() 7332e588c75Sdanielk1977 ** sqlite3_column_text() 7342e588c75Sdanielk1977 ** sqlite3_column_text16() 7352e588c75Sdanielk1977 ** sqlite3_column_real() 7362e588c75Sdanielk1977 ** sqlite3_column_bytes() 7372e588c75Sdanielk1977 ** sqlite3_column_bytes16() 73842262536Sdrh ** sqiite3_column_blob() 7392e588c75Sdanielk1977 */ 7402e588c75Sdanielk1977 static void columnMallocFailure(sqlite3_stmt *pStmt) 7412e588c75Sdanielk1977 { 7422e588c75Sdanielk1977 /* If malloc() failed during an encoding conversion within an 7432e588c75Sdanielk1977 ** sqlite3_column_XXX API, then set the return code of the statement to 7442e588c75Sdanielk1977 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR 7452e588c75Sdanielk1977 ** and _finalize() will return NOMEM. 7462e588c75Sdanielk1977 */ 74754f0198eSdanielk1977 Vdbe *p = (Vdbe *)pStmt; 74832bc3f6eSdrh if( p ){ 74932bc3f6eSdrh p->rc = sqlite3ApiExit(p->db, p->rc); 75032bc3f6eSdrh sqlite3_mutex_leave(p->db->mutex); 75132bc3f6eSdrh } 7522e588c75Sdanielk1977 } 7532e588c75Sdanielk1977 7544f26d6c4Sdrh /**************************** sqlite3_column_ ******************************* 7554f26d6c4Sdrh ** The following routines are used to access elements of the current row 7564f26d6c4Sdrh ** in the result set. 7574f26d6c4Sdrh */ 758c572ef7fSdanielk1977 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ 7592e588c75Sdanielk1977 const void *val; 7602e588c75Sdanielk1977 val = sqlite3_value_blob( columnMem(pStmt,i) ); 761c9cf901dSdanielk1977 /* Even though there is no encoding conversion, value_blob() might 762c9cf901dSdanielk1977 ** need to call malloc() to expand the result of a zeroblob() 763c9cf901dSdanielk1977 ** expression. 764c9cf901dSdanielk1977 */ 765c9cf901dSdanielk1977 columnMallocFailure(pStmt); 7662e588c75Sdanielk1977 return val; 767c572ef7fSdanielk1977 } 7684f26d6c4Sdrh int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ 7692e588c75Sdanielk1977 int val = sqlite3_value_bytes( columnMem(pStmt,i) ); 7702e588c75Sdanielk1977 columnMallocFailure(pStmt); 7712e588c75Sdanielk1977 return val; 7724f26d6c4Sdrh } 7734f26d6c4Sdrh int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ 7742e588c75Sdanielk1977 int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); 7752e588c75Sdanielk1977 columnMallocFailure(pStmt); 7762e588c75Sdanielk1977 return val; 7774f26d6c4Sdrh } 7784f26d6c4Sdrh double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ 7792e588c75Sdanielk1977 double val = sqlite3_value_double( columnMem(pStmt,i) ); 7802e588c75Sdanielk1977 columnMallocFailure(pStmt); 7812e588c75Sdanielk1977 return val; 7824f26d6c4Sdrh } 7834f26d6c4Sdrh int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ 7842e588c75Sdanielk1977 int val = sqlite3_value_int( columnMem(pStmt,i) ); 7852e588c75Sdanielk1977 columnMallocFailure(pStmt); 7862e588c75Sdanielk1977 return val; 7874f26d6c4Sdrh } 788efad9995Sdrh sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ 7892e588c75Sdanielk1977 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); 7902e588c75Sdanielk1977 columnMallocFailure(pStmt); 7912e588c75Sdanielk1977 return val; 7924f26d6c4Sdrh } 7934f26d6c4Sdrh const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ 7942e588c75Sdanielk1977 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); 7952e588c75Sdanielk1977 columnMallocFailure(pStmt); 7962e588c75Sdanielk1977 return val; 7974f26d6c4Sdrh } 798d1e4733dSdrh sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ 799d0ffa1e8Sdanielk1977 Mem *pOut = columnMem(pStmt, i); 800d0ffa1e8Sdanielk1977 if( pOut->flags&MEM_Static ){ 801d0ffa1e8Sdanielk1977 pOut->flags &= ~MEM_Static; 802d0ffa1e8Sdanielk1977 pOut->flags |= MEM_Ephem; 803d0ffa1e8Sdanielk1977 } 80432bc3f6eSdrh columnMallocFailure(pStmt); 805d0ffa1e8Sdanielk1977 return (sqlite3_value *)pOut; 806d1e4733dSdrh } 8076c62608fSdrh #ifndef SQLITE_OMIT_UTF16 8084f26d6c4Sdrh const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ 8092e588c75Sdanielk1977 const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); 8102e588c75Sdanielk1977 columnMallocFailure(pStmt); 8112e588c75Sdanielk1977 return val; 8124f26d6c4Sdrh } 8136c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 8144f26d6c4Sdrh int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ 81532bc3f6eSdrh int iType = sqlite3_value_type( columnMem(pStmt,i) ); 81632bc3f6eSdrh columnMallocFailure(pStmt); 81732bc3f6eSdrh return iType; 8184f26d6c4Sdrh } 8194f26d6c4Sdrh 82029d72108Sdrh /* The following function is experimental and subject to change or 82129d72108Sdrh ** removal */ 82229d72108Sdrh /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){ 82329d72108Sdrh ** return sqlite3_value_numeric_type( columnMem(pStmt,i) ); 82429d72108Sdrh **} 82529d72108Sdrh */ 82629d72108Sdrh 8275e2517e1Sdrh /* 8285e2517e1Sdrh ** Convert the N-th element of pStmt->pColName[] into a string using 8295e2517e1Sdrh ** xFunc() then return that string. If N is out of range, return 0. 830e590fbdeSdrh ** 831e590fbdeSdrh ** There are up to 5 names for each column. useType determines which 832e590fbdeSdrh ** name is returned. Here are the names: 833e590fbdeSdrh ** 834e590fbdeSdrh ** 0 The column name as it should be displayed for output 835e590fbdeSdrh ** 1 The datatype name for the column 836e590fbdeSdrh ** 2 The name of the database that the column derives from 837e590fbdeSdrh ** 3 The name of the table that the column derives from 838e590fbdeSdrh ** 4 The name of the table column that the result column derives from 839e590fbdeSdrh ** 840e590fbdeSdrh ** If the result is not a simple column reference (if it is an expression 841e590fbdeSdrh ** or a constant) then useTypes 2, 3, and 4 return NULL. 8425e2517e1Sdrh */ 8435e2517e1Sdrh static const void *columnName( 8445e2517e1Sdrh sqlite3_stmt *pStmt, 8455e2517e1Sdrh int N, 8465e2517e1Sdrh const void *(*xFunc)(Mem*), 8475e2517e1Sdrh int useType 8485e2517e1Sdrh ){ 84932bc3f6eSdrh const void *ret = 0; 8505e2517e1Sdrh Vdbe *p = (Vdbe *)pStmt; 85132bc3f6eSdrh int n; 852c6c7fd51Sdrh sqlite3 *db = p->db; 8535e2517e1Sdrh 854c6c7fd51Sdrh assert( db!=0 ); 85532bc3f6eSdrh n = sqlite3_column_count(pStmt); 85632bc3f6eSdrh if( N<n && N>=0 ){ 857e590fbdeSdrh N += useType*n; 858c6c7fd51Sdrh sqlite3_mutex_enter(db->mutex); 859c6c7fd51Sdrh assert( db->mallocFailed==0 ); 86000fd957bSdanielk1977 ret = xFunc(&p->aColName[N]); 86132bc3f6eSdrh /* A malloc may have failed inside of the xFunc() call. If this 86232bc3f6eSdrh ** is the case, clear the mallocFailed flag and return NULL. 86300fd957bSdanielk1977 */ 864c6c7fd51Sdrh if( db->mallocFailed ){ 865c6c7fd51Sdrh db->mallocFailed = 0; 86632bc3f6eSdrh ret = 0; 86732bc3f6eSdrh } 868c6c7fd51Sdrh sqlite3_mutex_leave(db->mutex); 86932bc3f6eSdrh } 87000fd957bSdanielk1977 return ret; 8715e2517e1Sdrh } 8725e2517e1Sdrh 8734f26d6c4Sdrh /* 8744f26d6c4Sdrh ** Return the name of the Nth column of the result set returned by SQL 8754f26d6c4Sdrh ** statement pStmt. 8764f26d6c4Sdrh */ 8774f26d6c4Sdrh const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ 878955de52cSdanielk1977 return columnName( 879955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME); 8804f26d6c4Sdrh } 881e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 882e590fbdeSdrh const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ 883955de52cSdanielk1977 return columnName( 884955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME); 885e590fbdeSdrh } 886e590fbdeSdrh #endif 8874f26d6c4Sdrh 8884f26d6c4Sdrh /* 8893f913576Sdrh ** Constraint: If you have ENABLE_COLUMN_METADATA then you must 8903f913576Sdrh ** not define OMIT_DECLTYPE. 8913f913576Sdrh */ 8923f913576Sdrh #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) 8933f913576Sdrh # error "Must not define both SQLITE_OMIT_DECLTYPE \ 8943f913576Sdrh and SQLITE_ENABLE_COLUMN_METADATA" 8953f913576Sdrh #endif 8963f913576Sdrh 8973f913576Sdrh #ifndef SQLITE_OMIT_DECLTYPE 8983f913576Sdrh /* 8996c62608fSdrh ** Return the column declaration type (if applicable) of the 'i'th column 900e590fbdeSdrh ** of the result set of SQL statement pStmt. 9016c62608fSdrh */ 9026c62608fSdrh const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ 903955de52cSdanielk1977 return columnName( 904955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE); 9056c62608fSdrh } 9066c62608fSdrh #ifndef SQLITE_OMIT_UTF16 90776d505baSdanielk1977 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ 908955de52cSdanielk1977 return columnName( 909955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE); 9104f26d6c4Sdrh } 9116c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 9123f913576Sdrh #endif /* SQLITE_OMIT_DECLTYPE */ 9134f26d6c4Sdrh 9144b1ae99dSdanielk1977 #ifdef SQLITE_ENABLE_COLUMN_METADATA 915e590fbdeSdrh /* 916e590fbdeSdrh ** Return the name of the database from which a result column derives. 917e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 918e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 919e590fbdeSdrh */ 920e590fbdeSdrh const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ 921955de52cSdanielk1977 return columnName( 922955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE); 923e590fbdeSdrh } 924e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 925e590fbdeSdrh const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ 926955de52cSdanielk1977 return columnName( 927955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE); 928e590fbdeSdrh } 929e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 930e590fbdeSdrh 931e590fbdeSdrh /* 932e590fbdeSdrh ** Return the name of the table from which a result column derives. 933e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 934e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 935e590fbdeSdrh */ 936e590fbdeSdrh const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ 937955de52cSdanielk1977 return columnName( 938955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE); 939e590fbdeSdrh } 940e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 941e590fbdeSdrh const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ 942955de52cSdanielk1977 return columnName( 943955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE); 944e590fbdeSdrh } 945e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 946e590fbdeSdrh 947e590fbdeSdrh /* 948e590fbdeSdrh ** Return the name of the table column from which a result column derives. 949e590fbdeSdrh ** NULL is returned if the result column is an expression or constant or 950e590fbdeSdrh ** anything else which is not an unabiguous reference to a database column. 951e590fbdeSdrh */ 952e590fbdeSdrh const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ 953955de52cSdanielk1977 return columnName( 954955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN); 955e590fbdeSdrh } 956e590fbdeSdrh #ifndef SQLITE_OMIT_UTF16 957e590fbdeSdrh const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ 958955de52cSdanielk1977 return columnName( 959955de52cSdanielk1977 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN); 960e590fbdeSdrh } 961e590fbdeSdrh #endif /* SQLITE_OMIT_UTF16 */ 9624b1ae99dSdanielk1977 #endif /* SQLITE_ENABLE_COLUMN_METADATA */ 963e590fbdeSdrh 964e590fbdeSdrh 9654f26d6c4Sdrh /******************************* sqlite3_bind_ *************************** 9664f26d6c4Sdrh ** 9674f26d6c4Sdrh ** Routines used to attach values to wildcards in a compiled SQL statement. 9684f26d6c4Sdrh */ 9694f26d6c4Sdrh /* 9704f26d6c4Sdrh ** Unbind the value bound to variable i in virtual machine p. This is the 9714f26d6c4Sdrh ** the same as binding a NULL value to the column. If the "i" parameter is 9724f26d6c4Sdrh ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. 9734f26d6c4Sdrh ** 974488e7b63Sdrh ** A successful evaluation of this routine acquires the mutex on p. 975488e7b63Sdrh ** the mutex is released if any kind of error occurs. 976488e7b63Sdrh ** 9774f26d6c4Sdrh ** The error code stored in database p->db is overwritten with the return 9784f26d6c4Sdrh ** value in any case. 9794f26d6c4Sdrh */ 9804f26d6c4Sdrh static int vdbeUnbind(Vdbe *p, int i){ 9814f26d6c4Sdrh Mem *pVar; 982413c3d36Sdrh if( vdbeSafetyNotNull(p) ){ 983413c3d36Sdrh return SQLITE_MISUSE_BKPT; 984413c3d36Sdrh } 985488e7b63Sdrh sqlite3_mutex_enter(p->db->mutex); 986488e7b63Sdrh if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){ 987488e7b63Sdrh sqlite3Error(p->db, SQLITE_MISUSE, 0); 988488e7b63Sdrh sqlite3_mutex_leave(p->db->mutex); 989413c3d36Sdrh sqlite3_log(SQLITE_MISUSE, 990413c3d36Sdrh "bind on a busy prepared statement: [%s]", p->zSql); 991413c3d36Sdrh return SQLITE_MISUSE_BKPT; 9924f26d6c4Sdrh } 9934f26d6c4Sdrh if( i<1 || i>p->nVar ){ 9944f26d6c4Sdrh sqlite3Error(p->db, SQLITE_RANGE, 0); 995488e7b63Sdrh sqlite3_mutex_leave(p->db->mutex); 9964f26d6c4Sdrh return SQLITE_RANGE; 9974f26d6c4Sdrh } 9984f26d6c4Sdrh i--; 999290c1948Sdrh pVar = &p->aVar[i]; 1000d8123366Sdanielk1977 sqlite3VdbeMemRelease(pVar); 10014f26d6c4Sdrh pVar->flags = MEM_Null; 10024f26d6c4Sdrh sqlite3Error(p->db, SQLITE_OK, 0); 1003937d0deaSdan 10041d2ce4f8Sdan /* If the bit corresponding to this variable in Vdbe.expmask is set, then 10051d2ce4f8Sdan ** binding a new value to this variable invalidates the current query plan. 1006a7044007Sdrh ** 1007a7044007Sdrh ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host 1008a7044007Sdrh ** parameter in the WHERE clause might influence the choice of query plan 1009a7044007Sdrh ** for a statement, then the statement will be automatically recompiled, 1010a7044007Sdrh ** as if there had been a schema change, on the first sqlite3_step() call 1011a7044007Sdrh ** following any change to the bindings of that parameter. 10121d2ce4f8Sdan */ 1013823e09abSdrh if( p->isPrepareV2 && 1014823e09abSdrh ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff) 1015823e09abSdrh ){ 1016937d0deaSdan p->expired = 1; 1017937d0deaSdan } 10184f26d6c4Sdrh return SQLITE_OK; 10194f26d6c4Sdrh } 10204f26d6c4Sdrh 10214f26d6c4Sdrh /* 10225e2517e1Sdrh ** Bind a text or BLOB value. 10234f26d6c4Sdrh */ 10245e2517e1Sdrh static int bindText( 1025605264d2Sdrh sqlite3_stmt *pStmt, /* The statement to bind against */ 1026605264d2Sdrh int i, /* Index of the parameter to bind */ 1027605264d2Sdrh const void *zData, /* Pointer to the data to be bound */ 1028605264d2Sdrh int nData, /* Number of bytes of data to be bound */ 1029605264d2Sdrh void (*xDel)(void*), /* Destructor for the data */ 1030b27b7f5dSdrh u8 encoding /* Encoding for the data */ 10314f26d6c4Sdrh ){ 10324f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 10334f26d6c4Sdrh Mem *pVar; 10344f26d6c4Sdrh int rc; 10354f26d6c4Sdrh 10364f26d6c4Sdrh rc = vdbeUnbind(p, i); 1037488e7b63Sdrh if( rc==SQLITE_OK ){ 1038488e7b63Sdrh if( zData!=0 ){ 1039290c1948Sdrh pVar = &p->aVar[i-1]; 1040b21c8cd4Sdrh rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); 10415e2517e1Sdrh if( rc==SQLITE_OK && encoding!=0 ){ 1042b21c8cd4Sdrh rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); 10435e2517e1Sdrh } 10441e536953Sdanielk1977 sqlite3Error(p->db, rc, 0); 1045605264d2Sdrh rc = sqlite3ApiExit(p->db, rc); 104627641703Sdrh } 1047605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 104894bb2ba6Sdrh }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){ 10496fec9ee3Sdrh xDel((void*)zData); 1050488e7b63Sdrh } 1051605264d2Sdrh return rc; 10525e2517e1Sdrh } 10535e2517e1Sdrh 10545e2517e1Sdrh 10555e2517e1Sdrh /* 10565e2517e1Sdrh ** Bind a blob value to an SQL statement variable. 10575e2517e1Sdrh */ 10585e2517e1Sdrh int sqlite3_bind_blob( 10595e2517e1Sdrh sqlite3_stmt *pStmt, 10605e2517e1Sdrh int i, 10615e2517e1Sdrh const void *zData, 10625e2517e1Sdrh int nData, 10635e2517e1Sdrh void (*xDel)(void*) 10645e2517e1Sdrh ){ 10655e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, 0); 10665e2517e1Sdrh } 10674f26d6c4Sdrh int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ 10684f26d6c4Sdrh int rc; 10694f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 10704f26d6c4Sdrh rc = vdbeUnbind(p, i); 10714f26d6c4Sdrh if( rc==SQLITE_OK ){ 1072290c1948Sdrh sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); 1073605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1074488e7b63Sdrh } 1075f4618891Sdanielk1977 return rc; 10764f26d6c4Sdrh } 10774f26d6c4Sdrh int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ 1078efad9995Sdrh return sqlite3_bind_int64(p, i, (i64)iValue); 10794f26d6c4Sdrh } 1080efad9995Sdrh int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ 10814f26d6c4Sdrh int rc; 10824f26d6c4Sdrh Vdbe *p = (Vdbe *)pStmt; 10834f26d6c4Sdrh rc = vdbeUnbind(p, i); 10844f26d6c4Sdrh if( rc==SQLITE_OK ){ 1085290c1948Sdrh sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); 1086605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1087488e7b63Sdrh } 10884f26d6c4Sdrh return rc; 10894f26d6c4Sdrh } 1090605264d2Sdrh int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ 1091605264d2Sdrh int rc; 1092605264d2Sdrh Vdbe *p = (Vdbe*)pStmt; 1093605264d2Sdrh rc = vdbeUnbind(p, i); 1094488e7b63Sdrh if( rc==SQLITE_OK ){ 1095605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1096488e7b63Sdrh } 1097605264d2Sdrh return rc; 10984f26d6c4Sdrh } 10994f26d6c4Sdrh int sqlite3_bind_text( 11004f26d6c4Sdrh sqlite3_stmt *pStmt, 11014f26d6c4Sdrh int i, 11024f26d6c4Sdrh const char *zData, 11034f26d6c4Sdrh int nData, 1104d8123366Sdanielk1977 void (*xDel)(void*) 11054f26d6c4Sdrh ){ 11065e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); 11074f26d6c4Sdrh } 11086c62608fSdrh #ifndef SQLITE_OMIT_UTF16 11094f26d6c4Sdrh int sqlite3_bind_text16( 11104f26d6c4Sdrh sqlite3_stmt *pStmt, 11114f26d6c4Sdrh int i, 11124f26d6c4Sdrh const void *zData, 11134f26d6c4Sdrh int nData, 1114d8123366Sdanielk1977 void (*xDel)(void*) 11154f26d6c4Sdrh ){ 11165e2517e1Sdrh return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); 11174f26d6c4Sdrh } 11186c62608fSdrh #endif /* SQLITE_OMIT_UTF16 */ 111926e4144dSdanielk1977 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ 112026e4144dSdanielk1977 int rc; 112129def560Sdrh switch( pValue->type ){ 112229def560Sdrh case SQLITE_INTEGER: { 112329def560Sdrh rc = sqlite3_bind_int64(pStmt, i, pValue->u.i); 112429def560Sdrh break; 112529def560Sdrh } 112629def560Sdrh case SQLITE_FLOAT: { 112729def560Sdrh rc = sqlite3_bind_double(pStmt, i, pValue->r); 112829def560Sdrh break; 112929def560Sdrh } 113029def560Sdrh case SQLITE_BLOB: { 113129def560Sdrh if( pValue->flags & MEM_Zero ){ 113229def560Sdrh rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero); 113329def560Sdrh }else{ 113429def560Sdrh rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT); 113529def560Sdrh } 113629def560Sdrh break; 113729def560Sdrh } 113829def560Sdrh case SQLITE_TEXT: { 1139ac80db78Sdrh rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT, 1140ac80db78Sdrh pValue->enc); 1141ac80db78Sdrh break; 1142ac80db78Sdrh } 1143ac80db78Sdrh default: { 1144ac80db78Sdrh rc = sqlite3_bind_null(pStmt, i); 114529def560Sdrh break; 114629def560Sdrh } 11470f5ea0b3Sdrh } 114826e4144dSdanielk1977 return rc; 114926e4144dSdanielk1977 } 1150b026e05eSdrh int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ 1151b026e05eSdrh int rc; 1152b026e05eSdrh Vdbe *p = (Vdbe *)pStmt; 1153b026e05eSdrh rc = vdbeUnbind(p, i); 1154b026e05eSdrh if( rc==SQLITE_OK ){ 1155b026e05eSdrh sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); 1156605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1157488e7b63Sdrh } 1158b026e05eSdrh return rc; 1159b026e05eSdrh } 116075f6a032Sdrh 116175f6a032Sdrh /* 116275f6a032Sdrh ** Return the number of wildcards that can be potentially bound to. 116375f6a032Sdrh ** This routine is added to support DBD::SQLite. 116475f6a032Sdrh */ 116575f6a032Sdrh int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ 116692febd92Sdrh Vdbe *p = (Vdbe*)pStmt; 116792febd92Sdrh return p ? p->nVar : 0; 116875f6a032Sdrh } 1169895d7472Sdrh 1170895d7472Sdrh /* 1171fa6bc000Sdrh ** Create a mapping from variable numbers to variable names 1172fa6bc000Sdrh ** in the Vdbe.azVar[] array, if such a mapping does not already 1173fa6bc000Sdrh ** exist. 1174895d7472Sdrh */ 1175fa6bc000Sdrh static void createVarMap(Vdbe *p){ 1176895d7472Sdrh if( !p->okVar ){ 1177895d7472Sdrh int j; 1178895d7472Sdrh Op *pOp; 11790f5ea0b3Sdrh sqlite3_mutex_enter(p->db->mutex); 11800f5ea0b3Sdrh /* The race condition here is harmless. If two threads call this 11810f5ea0b3Sdrh ** routine on the same Vdbe at the same time, they both might end 11820f5ea0b3Sdrh ** up initializing the Vdbe.azVar[] array. That is a little extra 11830f5ea0b3Sdrh ** work but it results in the same answer. 11840f5ea0b3Sdrh */ 1185895d7472Sdrh for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){ 1186895d7472Sdrh if( pOp->opcode==OP_Variable ){ 1187895d7472Sdrh assert( pOp->p1>0 && pOp->p1<=p->nVar ); 11882dca4ac1Sdanielk1977 p->azVar[pOp->p1-1] = pOp->p4.z; 1189895d7472Sdrh } 1190895d7472Sdrh } 1191895d7472Sdrh p->okVar = 1; 1192605264d2Sdrh sqlite3_mutex_leave(p->db->mutex); 1193605264d2Sdrh } 1194fa6bc000Sdrh } 1195fa6bc000Sdrh 1196fa6bc000Sdrh /* 1197fa6bc000Sdrh ** Return the name of a wildcard parameter. Return NULL if the index 1198fa6bc000Sdrh ** is out of range or if the wildcard is unnamed. 1199fa6bc000Sdrh ** 1200fa6bc000Sdrh ** The result is always UTF-8. 1201fa6bc000Sdrh */ 1202fa6bc000Sdrh const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ 1203fa6bc000Sdrh Vdbe *p = (Vdbe*)pStmt; 1204fa6bc000Sdrh if( p==0 || i<1 || i>p->nVar ){ 1205fa6bc000Sdrh return 0; 1206fa6bc000Sdrh } 1207fa6bc000Sdrh createVarMap(p); 1208895d7472Sdrh return p->azVar[i-1]; 1209895d7472Sdrh } 1210fa6bc000Sdrh 1211fa6bc000Sdrh /* 1212fa6bc000Sdrh ** Given a wildcard parameter name, return the index of the variable 1213fa6bc000Sdrh ** with that name. If there is no variable with the given name, 1214fa6bc000Sdrh ** return 0. 1215fa6bc000Sdrh */ 12165f18a221Sdrh int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ 1217fa6bc000Sdrh int i; 1218fa6bc000Sdrh if( p==0 ){ 1219fa6bc000Sdrh return 0; 1220fa6bc000Sdrh } 1221fa6bc000Sdrh createVarMap(p); 12226a8903c3Sdrh if( zName ){ 1223fa6bc000Sdrh for(i=0; i<p->nVar; i++){ 1224971a7c87Sdrh const char *z = p->azVar[i]; 12255f18a221Sdrh if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){ 1226fa6bc000Sdrh return i+1; 1227fa6bc000Sdrh } 1228fa6bc000Sdrh } 12296a8903c3Sdrh } 1230fa6bc000Sdrh return 0; 1231fa6bc000Sdrh } 12325f18a221Sdrh int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ 12335f18a221Sdrh return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName)); 12345f18a221Sdrh } 1235f8db1bc0Sdrh 123651942bc3Sdrh /* 1237f8db1bc0Sdrh ** Transfer all bindings from the first statement over to the second. 1238f8db1bc0Sdrh */ 1239145834a4Sshane int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 1240f8db1bc0Sdrh Vdbe *pFrom = (Vdbe*)pFromStmt; 1241f8db1bc0Sdrh Vdbe *pTo = (Vdbe*)pToStmt; 12420f5ea0b3Sdrh int i; 12430f5ea0b3Sdrh assert( pTo->db==pFrom->db ); 12440f5ea0b3Sdrh assert( pTo->nVar==pFrom->nVar ); 124527641703Sdrh sqlite3_mutex_enter(pTo->db->mutex); 12460f5ea0b3Sdrh for(i=0; i<pFrom->nVar; i++){ 1247643167ffSdrh sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); 1248f8db1bc0Sdrh } 124927641703Sdrh sqlite3_mutex_leave(pTo->db->mutex); 12500f5ea0b3Sdrh return SQLITE_OK; 1251f8db1bc0Sdrh } 125251942bc3Sdrh 1253eec556d3Sshane #ifndef SQLITE_OMIT_DEPRECATED 125451942bc3Sdrh /* 1255145834a4Sshane ** Deprecated external interface. Internal/core SQLite code 1256145834a4Sshane ** should call sqlite3TransferBindings. 12570f5ea0b3Sdrh ** 12580f5ea0b3Sdrh ** Is is misuse to call this routine with statements from different 12590f5ea0b3Sdrh ** database connections. But as this is a deprecated interface, we 12600f5ea0b3Sdrh ** will not bother to check for that condition. 12610f5ea0b3Sdrh ** 12620f5ea0b3Sdrh ** If the two statements contain a different number of bindings, then 12630f5ea0b3Sdrh ** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise 12640f5ea0b3Sdrh ** SQLITE_OK is returned. 1265145834a4Sshane */ 1266145834a4Sshane int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ 12670f5ea0b3Sdrh Vdbe *pFrom = (Vdbe*)pFromStmt; 12680f5ea0b3Sdrh Vdbe *pTo = (Vdbe*)pToStmt; 12690f5ea0b3Sdrh if( pFrom->nVar!=pTo->nVar ){ 12700f5ea0b3Sdrh return SQLITE_ERROR; 12710f5ea0b3Sdrh } 1272c94b8595Sdan if( pTo->isPrepareV2 && pTo->expmask ){ 1273c94b8595Sdan pTo->expired = 1; 1274c94b8595Sdan } 1275c94b8595Sdan if( pFrom->isPrepareV2 && pFrom->expmask ){ 1276c94b8595Sdan pFrom->expired = 1; 1277c94b8595Sdan } 1278145834a4Sshane return sqlite3TransferBindings(pFromStmt, pToStmt); 1279145834a4Sshane } 1280eec556d3Sshane #endif 1281145834a4Sshane 1282145834a4Sshane /* 128351942bc3Sdrh ** Return the sqlite3* database handle to which the prepared statement given 128451942bc3Sdrh ** in the argument belongs. This is the same database handle that was 128551942bc3Sdrh ** the first argument to the sqlite3_prepare() that was used to create 128651942bc3Sdrh ** the statement in the first place. 128751942bc3Sdrh */ 128851942bc3Sdrh sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ 128951942bc3Sdrh return pStmt ? ((Vdbe*)pStmt)->db : 0; 129051942bc3Sdrh } 1291bb5a9c3eSdrh 1292bb5a9c3eSdrh /* 1293f03d9cccSdrh ** Return true if the prepared statement is guaranteed to not modify the 1294f03d9cccSdrh ** database. 1295f03d9cccSdrh */ 1296f03d9cccSdrh int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){ 1297f03d9cccSdrh return pStmt ? ((Vdbe*)pStmt)->readOnly : 1; 1298f03d9cccSdrh } 1299f03d9cccSdrh 1300f03d9cccSdrh /* 1301bb5a9c3eSdrh ** Return a pointer to the next prepared statement after pStmt associated 1302bb5a9c3eSdrh ** with database connection pDb. If pStmt is NULL, return the first 1303bb5a9c3eSdrh ** prepared statement for the database connection. Return NULL if there 1304bb5a9c3eSdrh ** are no more. 1305bb5a9c3eSdrh */ 1306bb5a9c3eSdrh sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ 1307bb5a9c3eSdrh sqlite3_stmt *pNext; 1308bb5a9c3eSdrh sqlite3_mutex_enter(pDb->mutex); 1309bb5a9c3eSdrh if( pStmt==0 ){ 1310bb5a9c3eSdrh pNext = (sqlite3_stmt*)pDb->pVdbe; 1311bb5a9c3eSdrh }else{ 1312bb5a9c3eSdrh pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; 1313bb5a9c3eSdrh } 1314bb5a9c3eSdrh sqlite3_mutex_leave(pDb->mutex); 1315bb5a9c3eSdrh return pNext; 1316bb5a9c3eSdrh } 1317d1d38488Sdrh 1318d1d38488Sdrh /* 1319d1d38488Sdrh ** Return the value of a status counter for a prepared statement 1320d1d38488Sdrh */ 1321d1d38488Sdrh int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ 1322d1d38488Sdrh Vdbe *pVdbe = (Vdbe*)pStmt; 1323d1d38488Sdrh int v = pVdbe->aCounter[op-1]; 1324d1d38488Sdrh if( resetFlag ) pVdbe->aCounter[op-1] = 0; 1325d1d38488Sdrh return v; 1326d1d38488Sdrh } 1327