Annotation of embedaddon/sqlite3/src/vdbeapi.c, revision 1.1.1.1

1.1       misho       1: /*
                      2: ** 2004 May 26
                      3: **
                      4: ** The author disclaims copyright to this source code.  In place of
                      5: ** a legal notice, here is a blessing:
                      6: **
                      7: **    May you do good and not evil.
                      8: **    May you find forgiveness for yourself and forgive others.
                      9: **    May you share freely, never taking more than you give.
                     10: **
                     11: *************************************************************************
                     12: **
                     13: ** This file contains code use to implement APIs that are part of the
                     14: ** VDBE.
                     15: */
                     16: #include "sqliteInt.h"
                     17: #include "vdbeInt.h"
                     18: 
                     19: #ifndef SQLITE_OMIT_DEPRECATED
                     20: /*
                     21: ** Return TRUE (non-zero) of the statement supplied as an argument needs
                     22: ** to be recompiled.  A statement needs to be recompiled whenever the
                     23: ** execution environment changes in a way that would alter the program
                     24: ** that sqlite3_prepare() generates.  For example, if new functions or
                     25: ** collating sequences are registered or if an authorizer function is
                     26: ** added or changed.
                     27: */
                     28: int sqlite3_expired(sqlite3_stmt *pStmt){
                     29:   Vdbe *p = (Vdbe*)pStmt;
                     30:   return p==0 || p->expired;
                     31: }
                     32: #endif
                     33: 
                     34: /*
                     35: ** Check on a Vdbe to make sure it has not been finalized.  Log
                     36: ** an error and return true if it has been finalized (or is otherwise
                     37: ** invalid).  Return false if it is ok.
                     38: */
                     39: static int vdbeSafety(Vdbe *p){
                     40:   if( p->db==0 ){
                     41:     sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
                     42:     return 1;
                     43:   }else{
                     44:     return 0;
                     45:   }
                     46: }
                     47: static int vdbeSafetyNotNull(Vdbe *p){
                     48:   if( p==0 ){
                     49:     sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
                     50:     return 1;
                     51:   }else{
                     52:     return vdbeSafety(p);
                     53:   }
                     54: }
                     55: 
                     56: /*
                     57: ** The following routine destroys a virtual machine that is created by
                     58: ** the sqlite3_compile() routine. The integer returned is an SQLITE_
                     59: ** success/failure code that describes the result of executing the virtual
                     60: ** machine.
                     61: **
                     62: ** This routine sets the error code and string returned by
                     63: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
                     64: */
                     65: int sqlite3_finalize(sqlite3_stmt *pStmt){
                     66:   int rc;
                     67:   if( pStmt==0 ){
                     68:     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
                     69:     ** pointer is a harmless no-op. */
                     70:     rc = SQLITE_OK;
                     71:   }else{
                     72:     Vdbe *v = (Vdbe*)pStmt;
                     73:     sqlite3 *db = v->db;
                     74: #if SQLITE_THREADSAFE
                     75:     sqlite3_mutex *mutex;
                     76: #endif
                     77:     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
                     78: #if SQLITE_THREADSAFE
                     79:     mutex = v->db->mutex;
                     80: #endif
                     81:     sqlite3_mutex_enter(mutex);
                     82:     rc = sqlite3VdbeFinalize(v);
                     83:     rc = sqlite3ApiExit(db, rc);
                     84:     sqlite3_mutex_leave(mutex);
                     85:   }
                     86:   return rc;
                     87: }
                     88: 
                     89: /*
                     90: ** Terminate the current execution of an SQL statement and reset it
                     91: ** back to its starting state so that it can be reused. A success code from
                     92: ** the prior execution is returned.
                     93: **
                     94: ** This routine sets the error code and string returned by
                     95: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
                     96: */
                     97: int sqlite3_reset(sqlite3_stmt *pStmt){
                     98:   int rc;
                     99:   if( pStmt==0 ){
                    100:     rc = SQLITE_OK;
                    101:   }else{
                    102:     Vdbe *v = (Vdbe*)pStmt;
                    103:     sqlite3_mutex_enter(v->db->mutex);
                    104:     rc = sqlite3VdbeReset(v);
                    105:     sqlite3VdbeRewind(v);
                    106:     assert( (rc & (v->db->errMask))==rc );
                    107:     rc = sqlite3ApiExit(v->db, rc);
                    108:     sqlite3_mutex_leave(v->db->mutex);
                    109:   }
                    110:   return rc;
                    111: }
                    112: 
                    113: /*
                    114: ** Set all the parameters in the compiled SQL statement to NULL.
                    115: */
                    116: int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
                    117:   int i;
                    118:   int rc = SQLITE_OK;
                    119:   Vdbe *p = (Vdbe*)pStmt;
                    120: #if SQLITE_THREADSAFE
                    121:   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
                    122: #endif
                    123:   sqlite3_mutex_enter(mutex);
                    124:   for(i=0; i<p->nVar; i++){
                    125:     sqlite3VdbeMemRelease(&p->aVar[i]);
                    126:     p->aVar[i].flags = MEM_Null;
                    127:   }
                    128:   if( p->isPrepareV2 && p->expmask ){
                    129:     p->expired = 1;
                    130:   }
                    131:   sqlite3_mutex_leave(mutex);
                    132:   return rc;
                    133: }
                    134: 
                    135: 
                    136: /**************************** sqlite3_value_  *******************************
                    137: ** The following routines extract information from a Mem or sqlite3_value
                    138: ** structure.
                    139: */
                    140: const void *sqlite3_value_blob(sqlite3_value *pVal){
                    141:   Mem *p = (Mem*)pVal;
                    142:   if( p->flags & (MEM_Blob|MEM_Str) ){
                    143:     sqlite3VdbeMemExpandBlob(p);
                    144:     p->flags &= ~MEM_Str;
                    145:     p->flags |= MEM_Blob;
                    146:     return p->n ? p->z : 0;
                    147:   }else{
                    148:     return sqlite3_value_text(pVal);
                    149:   }
                    150: }
                    151: int sqlite3_value_bytes(sqlite3_value *pVal){
                    152:   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
                    153: }
                    154: int sqlite3_value_bytes16(sqlite3_value *pVal){
                    155:   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
                    156: }
                    157: double sqlite3_value_double(sqlite3_value *pVal){
                    158:   return sqlite3VdbeRealValue((Mem*)pVal);
                    159: }
                    160: int sqlite3_value_int(sqlite3_value *pVal){
                    161:   return (int)sqlite3VdbeIntValue((Mem*)pVal);
                    162: }
                    163: sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
                    164:   return sqlite3VdbeIntValue((Mem*)pVal);
                    165: }
                    166: const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
                    167:   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
                    168: }
                    169: #ifndef SQLITE_OMIT_UTF16
                    170: const void *sqlite3_value_text16(sqlite3_value* pVal){
                    171:   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
                    172: }
                    173: const void *sqlite3_value_text16be(sqlite3_value *pVal){
                    174:   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
                    175: }
                    176: const void *sqlite3_value_text16le(sqlite3_value *pVal){
                    177:   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
                    178: }
                    179: #endif /* SQLITE_OMIT_UTF16 */
                    180: int sqlite3_value_type(sqlite3_value* pVal){
                    181:   return pVal->type;
                    182: }
                    183: 
                    184: /**************************** sqlite3_result_  *******************************
                    185: ** The following routines are used by user-defined functions to specify
                    186: ** the function result.
                    187: **
                    188: ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
                    189: ** result as a string or blob but if the string or blob is too large, it
                    190: ** then sets the error code to SQLITE_TOOBIG
                    191: */
                    192: static void setResultStrOrError(
                    193:   sqlite3_context *pCtx,  /* Function context */
                    194:   const char *z,          /* String pointer */
                    195:   int n,                  /* Bytes in string, or negative */
                    196:   u8 enc,                 /* Encoding of z.  0 for BLOBs */
                    197:   void (*xDel)(void*)     /* Destructor function */
                    198: ){
                    199:   if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
                    200:     sqlite3_result_error_toobig(pCtx);
                    201:   }
                    202: }
                    203: void sqlite3_result_blob(
                    204:   sqlite3_context *pCtx, 
                    205:   const void *z, 
                    206:   int n, 
                    207:   void (*xDel)(void *)
                    208: ){
                    209:   assert( n>=0 );
                    210:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    211:   setResultStrOrError(pCtx, z, n, 0, xDel);
                    212: }
                    213: void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
                    214:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    215:   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
                    216: }
                    217: void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
                    218:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    219:   pCtx->isError = SQLITE_ERROR;
                    220:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
                    221: }
                    222: #ifndef SQLITE_OMIT_UTF16
                    223: void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
                    224:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    225:   pCtx->isError = SQLITE_ERROR;
                    226:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
                    227: }
                    228: #endif
                    229: void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
                    230:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    231:   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
                    232: }
                    233: void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
                    234:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    235:   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
                    236: }
                    237: void sqlite3_result_null(sqlite3_context *pCtx){
                    238:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    239:   sqlite3VdbeMemSetNull(&pCtx->s);
                    240: }
                    241: void sqlite3_result_text(
                    242:   sqlite3_context *pCtx, 
                    243:   const char *z, 
                    244:   int n,
                    245:   void (*xDel)(void *)
                    246: ){
                    247:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    248:   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
                    249: }
                    250: #ifndef SQLITE_OMIT_UTF16
                    251: void sqlite3_result_text16(
                    252:   sqlite3_context *pCtx, 
                    253:   const void *z, 
                    254:   int n, 
                    255:   void (*xDel)(void *)
                    256: ){
                    257:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    258:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
                    259: }
                    260: void sqlite3_result_text16be(
                    261:   sqlite3_context *pCtx, 
                    262:   const void *z, 
                    263:   int n, 
                    264:   void (*xDel)(void *)
                    265: ){
                    266:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    267:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
                    268: }
                    269: void sqlite3_result_text16le(
                    270:   sqlite3_context *pCtx, 
                    271:   const void *z, 
                    272:   int n, 
                    273:   void (*xDel)(void *)
                    274: ){
                    275:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    276:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
                    277: }
                    278: #endif /* SQLITE_OMIT_UTF16 */
                    279: void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
                    280:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    281:   sqlite3VdbeMemCopy(&pCtx->s, pValue);
                    282: }
                    283: void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
                    284:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    285:   sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
                    286: }
                    287: void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
                    288:   pCtx->isError = errCode;
                    289:   if( pCtx->s.flags & MEM_Null ){
                    290:     sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 
                    291:                          SQLITE_UTF8, SQLITE_STATIC);
                    292:   }
                    293: }
                    294: 
                    295: /* Force an SQLITE_TOOBIG error. */
                    296: void sqlite3_result_error_toobig(sqlite3_context *pCtx){
                    297:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    298:   pCtx->isError = SQLITE_TOOBIG;
                    299:   sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 
                    300:                        SQLITE_UTF8, SQLITE_STATIC);
                    301: }
                    302: 
                    303: /* An SQLITE_NOMEM error. */
                    304: void sqlite3_result_error_nomem(sqlite3_context *pCtx){
                    305:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    306:   sqlite3VdbeMemSetNull(&pCtx->s);
                    307:   pCtx->isError = SQLITE_NOMEM;
                    308:   pCtx->s.db->mallocFailed = 1;
                    309: }
                    310: 
                    311: /*
                    312: ** This function is called after a transaction has been committed. It 
                    313: ** invokes callbacks registered with sqlite3_wal_hook() as required.
                    314: */
                    315: static int doWalCallbacks(sqlite3 *db){
                    316:   int rc = SQLITE_OK;
                    317: #ifndef SQLITE_OMIT_WAL
                    318:   int i;
                    319:   for(i=0; i<db->nDb; i++){
                    320:     Btree *pBt = db->aDb[i].pBt;
                    321:     if( pBt ){
                    322:       int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
                    323:       if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
                    324:         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
                    325:       }
                    326:     }
                    327:   }
                    328: #endif
                    329:   return rc;
                    330: }
                    331: 
                    332: /*
                    333: ** Execute the statement pStmt, either until a row of data is ready, the
                    334: ** statement is completely executed or an error occurs.
                    335: **
                    336: ** This routine implements the bulk of the logic behind the sqlite_step()
                    337: ** API.  The only thing omitted is the automatic recompile if a 
                    338: ** schema change has occurred.  That detail is handled by the
                    339: ** outer sqlite3_step() wrapper procedure.
                    340: */
                    341: static int sqlite3Step(Vdbe *p){
                    342:   sqlite3 *db;
                    343:   int rc;
                    344: 
                    345:   assert(p);
                    346:   if( p->magic!=VDBE_MAGIC_RUN ){
                    347:     /* We used to require that sqlite3_reset() be called before retrying
                    348:     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
                    349:     ** with version 3.7.0, we changed this so that sqlite3_reset() would
                    350:     ** be called automatically instead of throwing the SQLITE_MISUSE error.
                    351:     ** This "automatic-reset" change is not technically an incompatibility, 
                    352:     ** since any application that receives an SQLITE_MISUSE is broken by
                    353:     ** definition.
                    354:     **
                    355:     ** Nevertheless, some published applications that were originally written
                    356:     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 
                    357:     ** returns, and those were broken by the automatic-reset change.  As a
                    358:     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
                    359:     ** legacy behavior of returning SQLITE_MISUSE for cases where the 
                    360:     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
                    361:     ** or SQLITE_BUSY error.
                    362:     */
                    363: #ifdef SQLITE_OMIT_AUTORESET
                    364:     if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
                    365:       sqlite3_reset((sqlite3_stmt*)p);
                    366:     }else{
                    367:       return SQLITE_MISUSE_BKPT;
                    368:     }
                    369: #else
                    370:     sqlite3_reset((sqlite3_stmt*)p);
                    371: #endif
                    372:   }
                    373: 
                    374:   /* Check that malloc() has not failed. If it has, return early. */
                    375:   db = p->db;
                    376:   if( db->mallocFailed ){
                    377:     p->rc = SQLITE_NOMEM;
                    378:     return SQLITE_NOMEM;
                    379:   }
                    380: 
                    381:   if( p->pc<=0 && p->expired ){
                    382:     p->rc = SQLITE_SCHEMA;
                    383:     rc = SQLITE_ERROR;
                    384:     goto end_of_step;
                    385:   }
                    386:   if( p->pc<0 ){
                    387:     /* If there are no other statements currently running, then
                    388:     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
                    389:     ** from interrupting a statement that has not yet started.
                    390:     */
                    391:     if( db->activeVdbeCnt==0 ){
                    392:       db->u1.isInterrupted = 0;
                    393:     }
                    394: 
                    395:     assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
                    396: 
                    397: #ifndef SQLITE_OMIT_TRACE
                    398:     if( db->xProfile && !db->init.busy ){
                    399:       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
                    400:     }
                    401: #endif
                    402: 
                    403:     db->activeVdbeCnt++;
                    404:     if( p->readOnly==0 ) db->writeVdbeCnt++;
                    405:     p->pc = 0;
                    406:   }
                    407: #ifndef SQLITE_OMIT_EXPLAIN
                    408:   if( p->explain ){
                    409:     rc = sqlite3VdbeList(p);
                    410:   }else
                    411: #endif /* SQLITE_OMIT_EXPLAIN */
                    412:   {
                    413:     db->vdbeExecCnt++;
                    414:     rc = sqlite3VdbeExec(p);
                    415:     db->vdbeExecCnt--;
                    416:   }
                    417: 
                    418: #ifndef SQLITE_OMIT_TRACE
                    419:   /* Invoke the profile callback if there is one
                    420:   */
                    421:   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
                    422:     sqlite3_int64 iNow;
                    423:     sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
                    424:     db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
                    425:   }
                    426: #endif
                    427: 
                    428:   if( rc==SQLITE_DONE ){
                    429:     assert( p->rc==SQLITE_OK );
                    430:     p->rc = doWalCallbacks(db);
                    431:     if( p->rc!=SQLITE_OK ){
                    432:       rc = SQLITE_ERROR;
                    433:     }
                    434:   }
                    435: 
                    436:   db->errCode = rc;
                    437:   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
                    438:     p->rc = SQLITE_NOMEM;
                    439:   }
                    440: end_of_step:
                    441:   /* At this point local variable rc holds the value that should be 
                    442:   ** returned if this statement was compiled using the legacy 
                    443:   ** sqlite3_prepare() interface. According to the docs, this can only
                    444:   ** be one of the values in the first assert() below. Variable p->rc 
                    445:   ** contains the value that would be returned if sqlite3_finalize() 
                    446:   ** were called on statement p.
                    447:   */
                    448:   assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR 
                    449:        || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
                    450:   );
                    451:   assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
                    452:   if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
                    453:     /* If this statement was prepared using sqlite3_prepare_v2(), and an
                    454:     ** error has occured, then return the error code in p->rc to the
                    455:     ** caller. Set the error code in the database handle to the same value.
                    456:     */ 
                    457:     rc = sqlite3VdbeTransferError(p);
                    458:   }
                    459:   return (rc&db->errMask);
                    460: }
                    461: 
                    462: /*
                    463: ** The maximum number of times that a statement will try to reparse
                    464: ** itself before giving up and returning SQLITE_SCHEMA.
                    465: */
                    466: #ifndef SQLITE_MAX_SCHEMA_RETRY
                    467: # define SQLITE_MAX_SCHEMA_RETRY 5
                    468: #endif
                    469: 
                    470: /*
                    471: ** This is the top-level implementation of sqlite3_step().  Call
                    472: ** sqlite3Step() to do most of the work.  If a schema error occurs,
                    473: ** call sqlite3Reprepare() and try again.
                    474: */
                    475: int sqlite3_step(sqlite3_stmt *pStmt){
                    476:   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
                    477:   int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
                    478:   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
                    479:   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
                    480:   sqlite3 *db;             /* The database connection */
                    481: 
                    482:   if( vdbeSafetyNotNull(v) ){
                    483:     return SQLITE_MISUSE_BKPT;
                    484:   }
                    485:   db = v->db;
                    486:   sqlite3_mutex_enter(db->mutex);
                    487:   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
                    488:          && cnt++ < SQLITE_MAX_SCHEMA_RETRY
                    489:          && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
                    490:     sqlite3_reset(pStmt);
                    491:     assert( v->expired==0 );
                    492:   }
                    493:   if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
                    494:     /* This case occurs after failing to recompile an sql statement. 
                    495:     ** The error message from the SQL compiler has already been loaded 
                    496:     ** into the database handle. This block copies the error message 
                    497:     ** from the database handle into the statement and sets the statement
                    498:     ** program counter to 0 to ensure that when the statement is 
                    499:     ** finalized or reset the parser error message is available via
                    500:     ** sqlite3_errmsg() and sqlite3_errcode().
                    501:     */
                    502:     const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
                    503:     sqlite3DbFree(db, v->zErrMsg);
                    504:     if( !db->mallocFailed ){
                    505:       v->zErrMsg = sqlite3DbStrDup(db, zErr);
                    506:       v->rc = rc2;
                    507:     } else {
                    508:       v->zErrMsg = 0;
                    509:       v->rc = rc = SQLITE_NOMEM;
                    510:     }
                    511:   }
                    512:   rc = sqlite3ApiExit(db, rc);
                    513:   sqlite3_mutex_leave(db->mutex);
                    514:   return rc;
                    515: }
                    516: 
                    517: /*
                    518: ** Extract the user data from a sqlite3_context structure and return a
                    519: ** pointer to it.
                    520: */
                    521: void *sqlite3_user_data(sqlite3_context *p){
                    522:   assert( p && p->pFunc );
                    523:   return p->pFunc->pUserData;
                    524: }
                    525: 
                    526: /*
                    527: ** Extract the user data from a sqlite3_context structure and return a
                    528: ** pointer to it.
                    529: **
                    530: ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
                    531: ** returns a copy of the pointer to the database connection (the 1st
                    532: ** parameter) of the sqlite3_create_function() and
                    533: ** sqlite3_create_function16() routines that originally registered the
                    534: ** application defined function.
                    535: */
                    536: sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
                    537:   assert( p && p->pFunc );
                    538:   return p->s.db;
                    539: }
                    540: 
                    541: /*
                    542: ** The following is the implementation of an SQL function that always
                    543: ** fails with an error message stating that the function is used in the
                    544: ** wrong context.  The sqlite3_overload_function() API might construct
                    545: ** SQL function that use this routine so that the functions will exist
                    546: ** for name resolution but are actually overloaded by the xFindFunction
                    547: ** method of virtual tables.
                    548: */
                    549: void sqlite3InvalidFunction(
                    550:   sqlite3_context *context,  /* The function calling context */
                    551:   int NotUsed,               /* Number of arguments to the function */
                    552:   sqlite3_value **NotUsed2   /* Value of each argument */
                    553: ){
                    554:   const char *zName = context->pFunc->zName;
                    555:   char *zErr;
                    556:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                    557:   zErr = sqlite3_mprintf(
                    558:       "unable to use function %s in the requested context", zName);
                    559:   sqlite3_result_error(context, zErr, -1);
                    560:   sqlite3_free(zErr);
                    561: }
                    562: 
                    563: /*
                    564: ** Allocate or return the aggregate context for a user function.  A new
                    565: ** context is allocated on the first call.  Subsequent calls return the
                    566: ** same context that was returned on prior calls.
                    567: */
                    568: void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
                    569:   Mem *pMem;
                    570:   assert( p && p->pFunc && p->pFunc->xStep );
                    571:   assert( sqlite3_mutex_held(p->s.db->mutex) );
                    572:   pMem = p->pMem;
                    573:   testcase( nByte<0 );
                    574:   if( (pMem->flags & MEM_Agg)==0 ){
                    575:     if( nByte<=0 ){
                    576:       sqlite3VdbeMemReleaseExternal(pMem);
                    577:       pMem->flags = MEM_Null;
                    578:       pMem->z = 0;
                    579:     }else{
                    580:       sqlite3VdbeMemGrow(pMem, nByte, 0);
                    581:       pMem->flags = MEM_Agg;
                    582:       pMem->u.pDef = p->pFunc;
                    583:       if( pMem->z ){
                    584:         memset(pMem->z, 0, nByte);
                    585:       }
                    586:     }
                    587:   }
                    588:   return (void*)pMem->z;
                    589: }
                    590: 
                    591: /*
                    592: ** Return the auxilary data pointer, if any, for the iArg'th argument to
                    593: ** the user-function defined by pCtx.
                    594: */
                    595: void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
                    596:   VdbeFunc *pVdbeFunc;
                    597: 
                    598:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    599:   pVdbeFunc = pCtx->pVdbeFunc;
                    600:   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
                    601:     return 0;
                    602:   }
                    603:   return pVdbeFunc->apAux[iArg].pAux;
                    604: }
                    605: 
                    606: /*
                    607: ** Set the auxilary data pointer and delete function, for the iArg'th
                    608: ** argument to the user-function defined by pCtx. Any previous value is
                    609: ** deleted by calling the delete function specified when it was set.
                    610: */
                    611: void sqlite3_set_auxdata(
                    612:   sqlite3_context *pCtx, 
                    613:   int iArg, 
                    614:   void *pAux, 
                    615:   void (*xDelete)(void*)
                    616: ){
                    617:   struct AuxData *pAuxData;
                    618:   VdbeFunc *pVdbeFunc;
                    619:   if( iArg<0 ) goto failed;
                    620: 
                    621:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                    622:   pVdbeFunc = pCtx->pVdbeFunc;
                    623:   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
                    624:     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
                    625:     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
                    626:     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
                    627:     if( !pVdbeFunc ){
                    628:       goto failed;
                    629:     }
                    630:     pCtx->pVdbeFunc = pVdbeFunc;
                    631:     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
                    632:     pVdbeFunc->nAux = iArg+1;
                    633:     pVdbeFunc->pFunc = pCtx->pFunc;
                    634:   }
                    635: 
                    636:   pAuxData = &pVdbeFunc->apAux[iArg];
                    637:   if( pAuxData->pAux && pAuxData->xDelete ){
                    638:     pAuxData->xDelete(pAuxData->pAux);
                    639:   }
                    640:   pAuxData->pAux = pAux;
                    641:   pAuxData->xDelete = xDelete;
                    642:   return;
                    643: 
                    644: failed:
                    645:   if( xDelete ){
                    646:     xDelete(pAux);
                    647:   }
                    648: }
                    649: 
                    650: #ifndef SQLITE_OMIT_DEPRECATED
                    651: /*
                    652: ** Return the number of times the Step function of a aggregate has been 
                    653: ** called.
                    654: **
                    655: ** This function is deprecated.  Do not use it for new code.  It is
                    656: ** provide only to avoid breaking legacy code.  New aggregate function
                    657: ** implementations should keep their own counts within their aggregate
                    658: ** context.
                    659: */
                    660: int sqlite3_aggregate_count(sqlite3_context *p){
                    661:   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
                    662:   return p->pMem->n;
                    663: }
                    664: #endif
                    665: 
                    666: /*
                    667: ** Return the number of columns in the result set for the statement pStmt.
                    668: */
                    669: int sqlite3_column_count(sqlite3_stmt *pStmt){
                    670:   Vdbe *pVm = (Vdbe *)pStmt;
                    671:   return pVm ? pVm->nResColumn : 0;
                    672: }
                    673: 
                    674: /*
                    675: ** Return the number of values available from the current row of the
                    676: ** currently executing statement pStmt.
                    677: */
                    678: int sqlite3_data_count(sqlite3_stmt *pStmt){
                    679:   Vdbe *pVm = (Vdbe *)pStmt;
                    680:   if( pVm==0 || pVm->pResultSet==0 ) return 0;
                    681:   return pVm->nResColumn;
                    682: }
                    683: 
                    684: 
                    685: /*
                    686: ** Check to see if column iCol of the given statement is valid.  If
                    687: ** it is, return a pointer to the Mem for the value of that column.
                    688: ** If iCol is not valid, return a pointer to a Mem which has a value
                    689: ** of NULL.
                    690: */
                    691: static Mem *columnMem(sqlite3_stmt *pStmt, int i){
                    692:   Vdbe *pVm;
                    693:   Mem *pOut;
                    694: 
                    695:   pVm = (Vdbe *)pStmt;
                    696:   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
                    697:     sqlite3_mutex_enter(pVm->db->mutex);
                    698:     pOut = &pVm->pResultSet[i];
                    699:   }else{
                    700:     /* If the value passed as the second argument is out of range, return
                    701:     ** a pointer to the following static Mem object which contains the
                    702:     ** value SQL NULL. Even though the Mem structure contains an element
                    703:     ** of type i64, on certain architectures (x86) with certain compiler
                    704:     ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
                    705:     ** instead of an 8-byte one. This all works fine, except that when
                    706:     ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
                    707:     ** that a Mem structure is located on an 8-byte boundary. To prevent
                    708:     ** these assert()s from failing, when building with SQLITE_DEBUG defined
                    709:     ** using gcc, we force nullMem to be 8-byte aligned using the magical
                    710:     ** __attribute__((aligned(8))) macro.  */
                    711:     static const Mem nullMem 
                    712: #if defined(SQLITE_DEBUG) && defined(__GNUC__)
                    713:       __attribute__((aligned(8))) 
                    714: #endif
                    715:       = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
                    716: #ifdef SQLITE_DEBUG
                    717:          0, 0,  /* pScopyFrom, pFiller */
                    718: #endif
                    719:          0, 0 };
                    720: 
                    721:     if( pVm && ALWAYS(pVm->db) ){
                    722:       sqlite3_mutex_enter(pVm->db->mutex);
                    723:       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
                    724:     }
                    725:     pOut = (Mem*)&nullMem;
                    726:   }
                    727:   return pOut;
                    728: }
                    729: 
                    730: /*
                    731: ** This function is called after invoking an sqlite3_value_XXX function on a 
                    732: ** column value (i.e. a value returned by evaluating an SQL expression in the
                    733: ** select list of a SELECT statement) that may cause a malloc() failure. If 
                    734: ** malloc() has failed, the threads mallocFailed flag is cleared and the result
                    735: ** code of statement pStmt set to SQLITE_NOMEM.
                    736: **
                    737: ** Specifically, this is called from within:
                    738: **
                    739: **     sqlite3_column_int()
                    740: **     sqlite3_column_int64()
                    741: **     sqlite3_column_text()
                    742: **     sqlite3_column_text16()
                    743: **     sqlite3_column_real()
                    744: **     sqlite3_column_bytes()
                    745: **     sqlite3_column_bytes16()
                    746: **     sqiite3_column_blob()
                    747: */
                    748: static void columnMallocFailure(sqlite3_stmt *pStmt)
                    749: {
                    750:   /* If malloc() failed during an encoding conversion within an
                    751:   ** sqlite3_column_XXX API, then set the return code of the statement to
                    752:   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
                    753:   ** and _finalize() will return NOMEM.
                    754:   */
                    755:   Vdbe *p = (Vdbe *)pStmt;
                    756:   if( p ){
                    757:     p->rc = sqlite3ApiExit(p->db, p->rc);
                    758:     sqlite3_mutex_leave(p->db->mutex);
                    759:   }
                    760: }
                    761: 
                    762: /**************************** sqlite3_column_  *******************************
                    763: ** The following routines are used to access elements of the current row
                    764: ** in the result set.
                    765: */
                    766: const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
                    767:   const void *val;
                    768:   val = sqlite3_value_blob( columnMem(pStmt,i) );
                    769:   /* Even though there is no encoding conversion, value_blob() might
                    770:   ** need to call malloc() to expand the result of a zeroblob() 
                    771:   ** expression. 
                    772:   */
                    773:   columnMallocFailure(pStmt);
                    774:   return val;
                    775: }
                    776: int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
                    777:   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
                    778:   columnMallocFailure(pStmt);
                    779:   return val;
                    780: }
                    781: int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
                    782:   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
                    783:   columnMallocFailure(pStmt);
                    784:   return val;
                    785: }
                    786: double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
                    787:   double val = sqlite3_value_double( columnMem(pStmt,i) );
                    788:   columnMallocFailure(pStmt);
                    789:   return val;
                    790: }
                    791: int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
                    792:   int val = sqlite3_value_int( columnMem(pStmt,i) );
                    793:   columnMallocFailure(pStmt);
                    794:   return val;
                    795: }
                    796: sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
                    797:   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
                    798:   columnMallocFailure(pStmt);
                    799:   return val;
                    800: }
                    801: const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
                    802:   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
                    803:   columnMallocFailure(pStmt);
                    804:   return val;
                    805: }
                    806: sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
                    807:   Mem *pOut = columnMem(pStmt, i);
                    808:   if( pOut->flags&MEM_Static ){
                    809:     pOut->flags &= ~MEM_Static;
                    810:     pOut->flags |= MEM_Ephem;
                    811:   }
                    812:   columnMallocFailure(pStmt);
                    813:   return (sqlite3_value *)pOut;
                    814: }
                    815: #ifndef SQLITE_OMIT_UTF16
                    816: const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
                    817:   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
                    818:   columnMallocFailure(pStmt);
                    819:   return val;
                    820: }
                    821: #endif /* SQLITE_OMIT_UTF16 */
                    822: int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
                    823:   int iType = sqlite3_value_type( columnMem(pStmt,i) );
                    824:   columnMallocFailure(pStmt);
                    825:   return iType;
                    826: }
                    827: 
                    828: /* The following function is experimental and subject to change or
                    829: ** removal */
                    830: /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
                    831: **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
                    832: **}
                    833: */
                    834: 
                    835: /*
                    836: ** Convert the N-th element of pStmt->pColName[] into a string using
                    837: ** xFunc() then return that string.  If N is out of range, return 0.
                    838: **
                    839: ** There are up to 5 names for each column.  useType determines which
                    840: ** name is returned.  Here are the names:
                    841: **
                    842: **    0      The column name as it should be displayed for output
                    843: **    1      The datatype name for the column
                    844: **    2      The name of the database that the column derives from
                    845: **    3      The name of the table that the column derives from
                    846: **    4      The name of the table column that the result column derives from
                    847: **
                    848: ** If the result is not a simple column reference (if it is an expression
                    849: ** or a constant) then useTypes 2, 3, and 4 return NULL.
                    850: */
                    851: static const void *columnName(
                    852:   sqlite3_stmt *pStmt,
                    853:   int N,
                    854:   const void *(*xFunc)(Mem*),
                    855:   int useType
                    856: ){
                    857:   const void *ret = 0;
                    858:   Vdbe *p = (Vdbe *)pStmt;
                    859:   int n;
                    860:   sqlite3 *db = p->db;
                    861:   
                    862:   assert( db!=0 );
                    863:   n = sqlite3_column_count(pStmt);
                    864:   if( N<n && N>=0 ){
                    865:     N += useType*n;
                    866:     sqlite3_mutex_enter(db->mutex);
                    867:     assert( db->mallocFailed==0 );
                    868:     ret = xFunc(&p->aColName[N]);
                    869:      /* A malloc may have failed inside of the xFunc() call. If this
                    870:     ** is the case, clear the mallocFailed flag and return NULL.
                    871:     */
                    872:     if( db->mallocFailed ){
                    873:       db->mallocFailed = 0;
                    874:       ret = 0;
                    875:     }
                    876:     sqlite3_mutex_leave(db->mutex);
                    877:   }
                    878:   return ret;
                    879: }
                    880: 
                    881: /*
                    882: ** Return the name of the Nth column of the result set returned by SQL
                    883: ** statement pStmt.
                    884: */
                    885: const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
                    886:   return columnName(
                    887:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
                    888: }
                    889: #ifndef SQLITE_OMIT_UTF16
                    890: const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
                    891:   return columnName(
                    892:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
                    893: }
                    894: #endif
                    895: 
                    896: /*
                    897: ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
                    898: ** not define OMIT_DECLTYPE.
                    899: */
                    900: #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
                    901: # error "Must not define both SQLITE_OMIT_DECLTYPE \
                    902:          and SQLITE_ENABLE_COLUMN_METADATA"
                    903: #endif
                    904: 
                    905: #ifndef SQLITE_OMIT_DECLTYPE
                    906: /*
                    907: ** Return the column declaration type (if applicable) of the 'i'th column
                    908: ** of the result set of SQL statement pStmt.
                    909: */
                    910: const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
                    911:   return columnName(
                    912:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
                    913: }
                    914: #ifndef SQLITE_OMIT_UTF16
                    915: const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
                    916:   return columnName(
                    917:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
                    918: }
                    919: #endif /* SQLITE_OMIT_UTF16 */
                    920: #endif /* SQLITE_OMIT_DECLTYPE */
                    921: 
                    922: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                    923: /*
                    924: ** Return the name of the database from which a result column derives.
                    925: ** NULL is returned if the result column is an expression or constant or
                    926: ** anything else which is not an unabiguous reference to a database column.
                    927: */
                    928: const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
                    929:   return columnName(
                    930:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
                    931: }
                    932: #ifndef SQLITE_OMIT_UTF16
                    933: const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
                    934:   return columnName(
                    935:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
                    936: }
                    937: #endif /* SQLITE_OMIT_UTF16 */
                    938: 
                    939: /*
                    940: ** Return the name of the table from which a result column derives.
                    941: ** NULL is returned if the result column is an expression or constant or
                    942: ** anything else which is not an unabiguous reference to a database column.
                    943: */
                    944: const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
                    945:   return columnName(
                    946:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
                    947: }
                    948: #ifndef SQLITE_OMIT_UTF16
                    949: const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
                    950:   return columnName(
                    951:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
                    952: }
                    953: #endif /* SQLITE_OMIT_UTF16 */
                    954: 
                    955: /*
                    956: ** Return the name of the table column from which a result column derives.
                    957: ** NULL is returned if the result column is an expression or constant or
                    958: ** anything else which is not an unabiguous reference to a database column.
                    959: */
                    960: const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
                    961:   return columnName(
                    962:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
                    963: }
                    964: #ifndef SQLITE_OMIT_UTF16
                    965: const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
                    966:   return columnName(
                    967:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
                    968: }
                    969: #endif /* SQLITE_OMIT_UTF16 */
                    970: #endif /* SQLITE_ENABLE_COLUMN_METADATA */
                    971: 
                    972: 
                    973: /******************************* sqlite3_bind_  ***************************
                    974: ** 
                    975: ** Routines used to attach values to wildcards in a compiled SQL statement.
                    976: */
                    977: /*
                    978: ** Unbind the value bound to variable i in virtual machine p. This is the 
                    979: ** the same as binding a NULL value to the column. If the "i" parameter is
                    980: ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
                    981: **
                    982: ** A successful evaluation of this routine acquires the mutex on p.
                    983: ** the mutex is released if any kind of error occurs.
                    984: **
                    985: ** The error code stored in database p->db is overwritten with the return
                    986: ** value in any case.
                    987: */
                    988: static int vdbeUnbind(Vdbe *p, int i){
                    989:   Mem *pVar;
                    990:   if( vdbeSafetyNotNull(p) ){
                    991:     return SQLITE_MISUSE_BKPT;
                    992:   }
                    993:   sqlite3_mutex_enter(p->db->mutex);
                    994:   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
                    995:     sqlite3Error(p->db, SQLITE_MISUSE, 0);
                    996:     sqlite3_mutex_leave(p->db->mutex);
                    997:     sqlite3_log(SQLITE_MISUSE, 
                    998:         "bind on a busy prepared statement: [%s]", p->zSql);
                    999:     return SQLITE_MISUSE_BKPT;
                   1000:   }
                   1001:   if( i<1 || i>p->nVar ){
                   1002:     sqlite3Error(p->db, SQLITE_RANGE, 0);
                   1003:     sqlite3_mutex_leave(p->db->mutex);
                   1004:     return SQLITE_RANGE;
                   1005:   }
                   1006:   i--;
                   1007:   pVar = &p->aVar[i];
                   1008:   sqlite3VdbeMemRelease(pVar);
                   1009:   pVar->flags = MEM_Null;
                   1010:   sqlite3Error(p->db, SQLITE_OK, 0);
                   1011: 
                   1012:   /* If the bit corresponding to this variable in Vdbe.expmask is set, then 
                   1013:   ** binding a new value to this variable invalidates the current query plan.
                   1014:   **
                   1015:   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
                   1016:   ** parameter in the WHERE clause might influence the choice of query plan
                   1017:   ** for a statement, then the statement will be automatically recompiled,
                   1018:   ** as if there had been a schema change, on the first sqlite3_step() call
                   1019:   ** following any change to the bindings of that parameter.
                   1020:   */
                   1021:   if( p->isPrepareV2 &&
                   1022:      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
                   1023:   ){
                   1024:     p->expired = 1;
                   1025:   }
                   1026:   return SQLITE_OK;
                   1027: }
                   1028: 
                   1029: /*
                   1030: ** Bind a text or BLOB value.
                   1031: */
                   1032: static int bindText(
                   1033:   sqlite3_stmt *pStmt,   /* The statement to bind against */
                   1034:   int i,                 /* Index of the parameter to bind */
                   1035:   const void *zData,     /* Pointer to the data to be bound */
                   1036:   int nData,             /* Number of bytes of data to be bound */
                   1037:   void (*xDel)(void*),   /* Destructor for the data */
                   1038:   u8 encoding            /* Encoding for the data */
                   1039: ){
                   1040:   Vdbe *p = (Vdbe *)pStmt;
                   1041:   Mem *pVar;
                   1042:   int rc;
                   1043: 
                   1044:   rc = vdbeUnbind(p, i);
                   1045:   if( rc==SQLITE_OK ){
                   1046:     if( zData!=0 ){
                   1047:       pVar = &p->aVar[i-1];
                   1048:       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
                   1049:       if( rc==SQLITE_OK && encoding!=0 ){
                   1050:         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
                   1051:       }
                   1052:       sqlite3Error(p->db, rc, 0);
                   1053:       rc = sqlite3ApiExit(p->db, rc);
                   1054:     }
                   1055:     sqlite3_mutex_leave(p->db->mutex);
                   1056:   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
                   1057:     xDel((void*)zData);
                   1058:   }
                   1059:   return rc;
                   1060: }
                   1061: 
                   1062: 
                   1063: /*
                   1064: ** Bind a blob value to an SQL statement variable.
                   1065: */
                   1066: int sqlite3_bind_blob(
                   1067:   sqlite3_stmt *pStmt, 
                   1068:   int i, 
                   1069:   const void *zData, 
                   1070:   int nData, 
                   1071:   void (*xDel)(void*)
                   1072: ){
                   1073:   return bindText(pStmt, i, zData, nData, xDel, 0);
                   1074: }
                   1075: int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
                   1076:   int rc;
                   1077:   Vdbe *p = (Vdbe *)pStmt;
                   1078:   rc = vdbeUnbind(p, i);
                   1079:   if( rc==SQLITE_OK ){
                   1080:     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
                   1081:     sqlite3_mutex_leave(p->db->mutex);
                   1082:   }
                   1083:   return rc;
                   1084: }
                   1085: int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
                   1086:   return sqlite3_bind_int64(p, i, (i64)iValue);
                   1087: }
                   1088: int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
                   1089:   int rc;
                   1090:   Vdbe *p = (Vdbe *)pStmt;
                   1091:   rc = vdbeUnbind(p, i);
                   1092:   if( rc==SQLITE_OK ){
                   1093:     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
                   1094:     sqlite3_mutex_leave(p->db->mutex);
                   1095:   }
                   1096:   return rc;
                   1097: }
                   1098: int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
                   1099:   int rc;
                   1100:   Vdbe *p = (Vdbe*)pStmt;
                   1101:   rc = vdbeUnbind(p, i);
                   1102:   if( rc==SQLITE_OK ){
                   1103:     sqlite3_mutex_leave(p->db->mutex);
                   1104:   }
                   1105:   return rc;
                   1106: }
                   1107: int sqlite3_bind_text( 
                   1108:   sqlite3_stmt *pStmt, 
                   1109:   int i, 
                   1110:   const char *zData, 
                   1111:   int nData, 
                   1112:   void (*xDel)(void*)
                   1113: ){
                   1114:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
                   1115: }
                   1116: #ifndef SQLITE_OMIT_UTF16
                   1117: int sqlite3_bind_text16(
                   1118:   sqlite3_stmt *pStmt, 
                   1119:   int i, 
                   1120:   const void *zData, 
                   1121:   int nData, 
                   1122:   void (*xDel)(void*)
                   1123: ){
                   1124:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
                   1125: }
                   1126: #endif /* SQLITE_OMIT_UTF16 */
                   1127: int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
                   1128:   int rc;
                   1129:   switch( pValue->type ){
                   1130:     case SQLITE_INTEGER: {
                   1131:       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
                   1132:       break;
                   1133:     }
                   1134:     case SQLITE_FLOAT: {
                   1135:       rc = sqlite3_bind_double(pStmt, i, pValue->r);
                   1136:       break;
                   1137:     }
                   1138:     case SQLITE_BLOB: {
                   1139:       if( pValue->flags & MEM_Zero ){
                   1140:         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
                   1141:       }else{
                   1142:         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
                   1143:       }
                   1144:       break;
                   1145:     }
                   1146:     case SQLITE_TEXT: {
                   1147:       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
                   1148:                               pValue->enc);
                   1149:       break;
                   1150:     }
                   1151:     default: {
                   1152:       rc = sqlite3_bind_null(pStmt, i);
                   1153:       break;
                   1154:     }
                   1155:   }
                   1156:   return rc;
                   1157: }
                   1158: int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
                   1159:   int rc;
                   1160:   Vdbe *p = (Vdbe *)pStmt;
                   1161:   rc = vdbeUnbind(p, i);
                   1162:   if( rc==SQLITE_OK ){
                   1163:     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
                   1164:     sqlite3_mutex_leave(p->db->mutex);
                   1165:   }
                   1166:   return rc;
                   1167: }
                   1168: 
                   1169: /*
                   1170: ** Return the number of wildcards that can be potentially bound to.
                   1171: ** This routine is added to support DBD::SQLite.  
                   1172: */
                   1173: int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
                   1174:   Vdbe *p = (Vdbe*)pStmt;
                   1175:   return p ? p->nVar : 0;
                   1176: }
                   1177: 
                   1178: /*
                   1179: ** Return the name of a wildcard parameter.  Return NULL if the index
                   1180: ** is out of range or if the wildcard is unnamed.
                   1181: **
                   1182: ** The result is always UTF-8.
                   1183: */
                   1184: const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
                   1185:   Vdbe *p = (Vdbe*)pStmt;
                   1186:   if( p==0 || i<1 || i>p->nzVar ){
                   1187:     return 0;
                   1188:   }
                   1189:   return p->azVar[i-1];
                   1190: }
                   1191: 
                   1192: /*
                   1193: ** Given a wildcard parameter name, return the index of the variable
                   1194: ** with that name.  If there is no variable with the given name,
                   1195: ** return 0.
                   1196: */
                   1197: int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
                   1198:   int i;
                   1199:   if( p==0 ){
                   1200:     return 0;
                   1201:   }
                   1202:   if( zName ){
                   1203:     for(i=0; i<p->nzVar; i++){
                   1204:       const char *z = p->azVar[i];
                   1205:       if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
                   1206:         return i+1;
                   1207:       }
                   1208:     }
                   1209:   }
                   1210:   return 0;
                   1211: }
                   1212: int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
                   1213:   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
                   1214: }
                   1215: 
                   1216: /*
                   1217: ** Transfer all bindings from the first statement over to the second.
                   1218: */
                   1219: int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
                   1220:   Vdbe *pFrom = (Vdbe*)pFromStmt;
                   1221:   Vdbe *pTo = (Vdbe*)pToStmt;
                   1222:   int i;
                   1223:   assert( pTo->db==pFrom->db );
                   1224:   assert( pTo->nVar==pFrom->nVar );
                   1225:   sqlite3_mutex_enter(pTo->db->mutex);
                   1226:   for(i=0; i<pFrom->nVar; i++){
                   1227:     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
                   1228:   }
                   1229:   sqlite3_mutex_leave(pTo->db->mutex);
                   1230:   return SQLITE_OK;
                   1231: }
                   1232: 
                   1233: #ifndef SQLITE_OMIT_DEPRECATED
                   1234: /*
                   1235: ** Deprecated external interface.  Internal/core SQLite code
                   1236: ** should call sqlite3TransferBindings.
                   1237: **
                   1238: ** Is is misuse to call this routine with statements from different
                   1239: ** database connections.  But as this is a deprecated interface, we
                   1240: ** will not bother to check for that condition.
                   1241: **
                   1242: ** If the two statements contain a different number of bindings, then
                   1243: ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
                   1244: ** SQLITE_OK is returned.
                   1245: */
                   1246: int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
                   1247:   Vdbe *pFrom = (Vdbe*)pFromStmt;
                   1248:   Vdbe *pTo = (Vdbe*)pToStmt;
                   1249:   if( pFrom->nVar!=pTo->nVar ){
                   1250:     return SQLITE_ERROR;
                   1251:   }
                   1252:   if( pTo->isPrepareV2 && pTo->expmask ){
                   1253:     pTo->expired = 1;
                   1254:   }
                   1255:   if( pFrom->isPrepareV2 && pFrom->expmask ){
                   1256:     pFrom->expired = 1;
                   1257:   }
                   1258:   return sqlite3TransferBindings(pFromStmt, pToStmt);
                   1259: }
                   1260: #endif
                   1261: 
                   1262: /*
                   1263: ** Return the sqlite3* database handle to which the prepared statement given
                   1264: ** in the argument belongs.  This is the same database handle that was
                   1265: ** the first argument to the sqlite3_prepare() that was used to create
                   1266: ** the statement in the first place.
                   1267: */
                   1268: sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
                   1269:   return pStmt ? ((Vdbe*)pStmt)->db : 0;
                   1270: }
                   1271: 
                   1272: /*
                   1273: ** Return true if the prepared statement is guaranteed to not modify the
                   1274: ** database.
                   1275: */
                   1276: int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
                   1277:   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
                   1278: }
                   1279: 
                   1280: /*
                   1281: ** Return true if the prepared statement is in need of being reset.
                   1282: */
                   1283: int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
                   1284:   Vdbe *v = (Vdbe*)pStmt;
                   1285:   return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN;
                   1286: }
                   1287: 
                   1288: /*
                   1289: ** Return a pointer to the next prepared statement after pStmt associated
                   1290: ** with database connection pDb.  If pStmt is NULL, return the first
                   1291: ** prepared statement for the database connection.  Return NULL if there
                   1292: ** are no more.
                   1293: */
                   1294: sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
                   1295:   sqlite3_stmt *pNext;
                   1296:   sqlite3_mutex_enter(pDb->mutex);
                   1297:   if( pStmt==0 ){
                   1298:     pNext = (sqlite3_stmt*)pDb->pVdbe;
                   1299:   }else{
                   1300:     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
                   1301:   }
                   1302:   sqlite3_mutex_leave(pDb->mutex);
                   1303:   return pNext;
                   1304: }
                   1305: 
                   1306: /*
                   1307: ** Return the value of a status counter for a prepared statement
                   1308: */
                   1309: int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
                   1310:   Vdbe *pVdbe = (Vdbe*)pStmt;
                   1311:   int v = pVdbe->aCounter[op-1];
                   1312:   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
                   1313:   return v;
                   1314: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>