modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/vdbeapi.c (about)

     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  #ifndef SQLITE_OMIT_TRACE
    57  /*
    58  ** Invoke the profile callback.  This routine is only called if we already
    59  ** know that the profile callback is defined and needs to be invoked.
    60  */
    61  static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){
    62    sqlite3_int64 iNow;
    63    sqlite3_int64 iElapse;
    64    assert( p->startTime>0 );
    65    assert( db->xProfile!=0 || (db->mTrace & SQLITE_TRACE_PROFILE)!=0 );
    66    assert( db->init.busy==0 );
    67    assert( p->zSql!=0 );
    68    sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
    69    iElapse = (iNow - p->startTime)*1000000;
    70    if( db->xProfile ){
    71      db->xProfile(db->pProfileArg, p->zSql, iElapse);
    72    }
    73    if( db->mTrace & SQLITE_TRACE_PROFILE ){
    74      db->xTrace(SQLITE_TRACE_PROFILE, db->pTraceArg, p, (void*)&iElapse);
    75    }
    76    p->startTime = 0;
    77  }
    78  /*
    79  ** The checkProfileCallback(DB,P) macro checks to see if a profile callback
    80  ** is needed, and it invokes the callback if it is needed.
    81  */
    82  # define checkProfileCallback(DB,P) \
    83     if( ((P)->startTime)>0 ){ invokeProfileCallback(DB,P); }
    84  #else
    85  # define checkProfileCallback(DB,P)  /*no-op*/
    86  #endif
    87  
    88  /*
    89  ** The following routine destroys a virtual machine that is created by
    90  ** the sqlite3_compile() routine. The integer returned is an SQLITE_
    91  ** success/failure code that describes the result of executing the virtual
    92  ** machine.
    93  **
    94  ** This routine sets the error code and string returned by
    95  ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
    96  */
    97  int sqlite3_finalize(sqlite3_stmt *pStmt){
    98    int rc;
    99    if( pStmt==0 ){
   100      /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
   101      ** pointer is a harmless no-op. */
   102      rc = SQLITE_OK;
   103    }else{
   104      Vdbe *v = (Vdbe*)pStmt;
   105      sqlite3 *db = v->db;
   106      if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
   107      sqlite3_mutex_enter(db->mutex);
   108      checkProfileCallback(db, v);
   109      rc = sqlite3VdbeFinalize(v);
   110      rc = sqlite3ApiExit(db, rc);
   111      sqlite3LeaveMutexAndCloseZombie(db);
   112    }
   113    return rc;
   114  }
   115  
   116  /*
   117  ** Terminate the current execution of an SQL statement and reset it
   118  ** back to its starting state so that it can be reused. A success code from
   119  ** the prior execution is returned.
   120  **
   121  ** This routine sets the error code and string returned by
   122  ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
   123  */
   124  int sqlite3_reset(sqlite3_stmt *pStmt){
   125    int rc;
   126    if( pStmt==0 ){
   127      rc = SQLITE_OK;
   128    }else{
   129      Vdbe *v = (Vdbe*)pStmt;
   130      sqlite3 *db = v->db;
   131      sqlite3_mutex_enter(db->mutex);
   132      checkProfileCallback(db, v);
   133      rc = sqlite3VdbeReset(v);
   134      sqlite3VdbeRewind(v);
   135      assert( (rc & (db->errMask))==rc );
   136      rc = sqlite3ApiExit(db, rc);
   137      sqlite3_mutex_leave(db->mutex);
   138    }
   139    return rc;
   140  }
   141  
   142  /*
   143  ** Set all the parameters in the compiled SQL statement to NULL.
   144  */
   145  int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
   146    int i;
   147    int rc = SQLITE_OK;
   148    Vdbe *p = (Vdbe*)pStmt;
   149  #if SQLITE_THREADSAFE
   150    sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
   151  #endif
   152    sqlite3_mutex_enter(mutex);
   153    for(i=0; i<p->nVar; i++){
   154      sqlite3VdbeMemRelease(&p->aVar[i]);
   155      p->aVar[i].flags = MEM_Null;
   156    }
   157    assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 );
   158    if( p->expmask ){
   159      p->expired = 1;
   160    }
   161    sqlite3_mutex_leave(mutex);
   162    return rc;
   163  }
   164  
   165  
   166  /**************************** sqlite3_value_  *******************************
   167  ** The following routines extract information from a Mem or sqlite3_value
   168  ** structure.
   169  */
   170  const void *sqlite3_value_blob(sqlite3_value *pVal){
   171    Mem *p = (Mem*)pVal;
   172    if( p->flags & (MEM_Blob|MEM_Str) ){
   173      if( ExpandBlob(p)!=SQLITE_OK ){
   174        assert( p->flags==MEM_Null && p->z==0 );
   175        return 0;
   176      }
   177      p->flags |= MEM_Blob;
   178      return p->n ? p->z : 0;
   179    }else{
   180      return sqlite3_value_text(pVal);
   181    }
   182  }
   183  int sqlite3_value_bytes(sqlite3_value *pVal){
   184    return sqlite3ValueBytes(pVal, SQLITE_UTF8);
   185  }
   186  int sqlite3_value_bytes16(sqlite3_value *pVal){
   187    return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
   188  }
   189  double sqlite3_value_double(sqlite3_value *pVal){
   190    return sqlite3VdbeRealValue((Mem*)pVal);
   191  }
   192  int sqlite3_value_int(sqlite3_value *pVal){
   193    return (int)sqlite3VdbeIntValue((Mem*)pVal);
   194  }
   195  sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
   196    return sqlite3VdbeIntValue((Mem*)pVal);
   197  }
   198  unsigned int sqlite3_value_subtype(sqlite3_value *pVal){
   199    Mem *pMem = (Mem*)pVal;
   200    return ((pMem->flags & MEM_Subtype) ? pMem->eSubtype : 0);
   201  }
   202  void *sqlite3_value_pointer(sqlite3_value *pVal, const char *zPType){
   203    Mem *p = (Mem*)pVal;
   204    if( (p->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) ==
   205                   (MEM_Null|MEM_Term|MEM_Subtype)
   206     && zPType!=0
   207     && p->eSubtype=='p'
   208     && strcmp(p->u.zPType, zPType)==0
   209    ){
   210      return (void*)p->z;
   211    }else{
   212      return 0;
   213    }
   214  }
   215  const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
   216    return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
   217  }
   218  #ifndef SQLITE_OMIT_UTF16
   219  const void *sqlite3_value_text16(sqlite3_value* pVal){
   220    return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
   221  }
   222  const void *sqlite3_value_text16be(sqlite3_value *pVal){
   223    return sqlite3ValueText(pVal, SQLITE_UTF16BE);
   224  }
   225  const void *sqlite3_value_text16le(sqlite3_value *pVal){
   226    return sqlite3ValueText(pVal, SQLITE_UTF16LE);
   227  }
   228  #endif /* SQLITE_OMIT_UTF16 */
   229  /* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five
   230  ** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating
   231  ** point number string BLOB NULL
   232  */
   233  int sqlite3_value_type(sqlite3_value* pVal){
   234    static const u8 aType[] = {
   235       SQLITE_BLOB,     /* 0x00 */
   236       SQLITE_NULL,     /* 0x01 */
   237       SQLITE_TEXT,     /* 0x02 */
   238       SQLITE_NULL,     /* 0x03 */
   239       SQLITE_INTEGER,  /* 0x04 */
   240       SQLITE_NULL,     /* 0x05 */
   241       SQLITE_INTEGER,  /* 0x06 */
   242       SQLITE_NULL,     /* 0x07 */
   243       SQLITE_FLOAT,    /* 0x08 */
   244       SQLITE_NULL,     /* 0x09 */
   245       SQLITE_FLOAT,    /* 0x0a */
   246       SQLITE_NULL,     /* 0x0b */
   247       SQLITE_INTEGER,  /* 0x0c */
   248       SQLITE_NULL,     /* 0x0d */
   249       SQLITE_INTEGER,  /* 0x0e */
   250       SQLITE_NULL,     /* 0x0f */
   251       SQLITE_BLOB,     /* 0x10 */
   252       SQLITE_NULL,     /* 0x11 */
   253       SQLITE_TEXT,     /* 0x12 */
   254       SQLITE_NULL,     /* 0x13 */
   255       SQLITE_INTEGER,  /* 0x14 */
   256       SQLITE_NULL,     /* 0x15 */
   257       SQLITE_INTEGER,  /* 0x16 */
   258       SQLITE_NULL,     /* 0x17 */
   259       SQLITE_FLOAT,    /* 0x18 */
   260       SQLITE_NULL,     /* 0x19 */
   261       SQLITE_FLOAT,    /* 0x1a */
   262       SQLITE_NULL,     /* 0x1b */
   263       SQLITE_INTEGER,  /* 0x1c */
   264       SQLITE_NULL,     /* 0x1d */
   265       SQLITE_INTEGER,  /* 0x1e */
   266       SQLITE_NULL,     /* 0x1f */
   267    };
   268    return aType[pVal->flags&MEM_AffMask];
   269  }
   270  
   271  /* Make a copy of an sqlite3_value object
   272  */
   273  sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){
   274    sqlite3_value *pNew;
   275    if( pOrig==0 ) return 0;
   276    pNew = sqlite3_malloc( sizeof(*pNew) );
   277    if( pNew==0 ) return 0;
   278    memset(pNew, 0, sizeof(*pNew));
   279    memcpy(pNew, pOrig, MEMCELLSIZE);
   280    pNew->flags &= ~MEM_Dyn;
   281    pNew->db = 0;
   282    if( pNew->flags&(MEM_Str|MEM_Blob) ){
   283      pNew->flags &= ~(MEM_Static|MEM_Dyn);
   284      pNew->flags |= MEM_Ephem;
   285      if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){
   286        sqlite3ValueFree(pNew);
   287        pNew = 0;
   288      }
   289    }
   290    return pNew;
   291  }
   292  
   293  /* Destroy an sqlite3_value object previously obtained from
   294  ** sqlite3_value_dup().
   295  */
   296  void sqlite3_value_free(sqlite3_value *pOld){
   297    sqlite3ValueFree(pOld);
   298  }
   299    
   300  
   301  /**************************** sqlite3_result_  *******************************
   302  ** The following routines are used by user-defined functions to specify
   303  ** the function result.
   304  **
   305  ** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the
   306  ** result as a string or blob but if the string or blob is too large, it
   307  ** then sets the error code to SQLITE_TOOBIG
   308  **
   309  ** The invokeValueDestructor(P,X) routine invokes destructor function X()
   310  ** on value P is not going to be used and need to be destroyed.
   311  */
   312  static void setResultStrOrError(
   313    sqlite3_context *pCtx,  /* Function context */
   314    const char *z,          /* String pointer */
   315    int n,                  /* Bytes in string, or negative */
   316    u8 enc,                 /* Encoding of z.  0 for BLOBs */
   317    void (*xDel)(void*)     /* Destructor function */
   318  ){
   319    if( sqlite3VdbeMemSetStr(pCtx->pOut, z, n, enc, xDel)==SQLITE_TOOBIG ){
   320      sqlite3_result_error_toobig(pCtx);
   321    }
   322  }
   323  static int invokeValueDestructor(
   324    const void *p,             /* Value to destroy */
   325    void (*xDel)(void*),       /* The destructor */
   326    sqlite3_context *pCtx      /* Set a SQLITE_TOOBIG error if no NULL */
   327  ){
   328    assert( xDel!=SQLITE_DYNAMIC );
   329    if( xDel==0 ){
   330      /* noop */
   331    }else if( xDel==SQLITE_TRANSIENT ){
   332      /* noop */
   333    }else{
   334      xDel((void*)p);
   335    }
   336    if( pCtx ) sqlite3_result_error_toobig(pCtx);
   337    return SQLITE_TOOBIG;
   338  }
   339  void sqlite3_result_blob(
   340    sqlite3_context *pCtx, 
   341    const void *z, 
   342    int n, 
   343    void (*xDel)(void *)
   344  ){
   345    assert( n>=0 );
   346    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   347    setResultStrOrError(pCtx, z, n, 0, xDel);
   348  }
   349  void sqlite3_result_blob64(
   350    sqlite3_context *pCtx, 
   351    const void *z, 
   352    sqlite3_uint64 n,
   353    void (*xDel)(void *)
   354  ){
   355    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   356    assert( xDel!=SQLITE_DYNAMIC );
   357    if( n>0x7fffffff ){
   358      (void)invokeValueDestructor(z, xDel, pCtx);
   359    }else{
   360      setResultStrOrError(pCtx, z, (int)n, 0, xDel);
   361    }
   362  }
   363  void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
   364    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   365    sqlite3VdbeMemSetDouble(pCtx->pOut, rVal);
   366  }
   367  void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
   368    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   369    pCtx->isError = SQLITE_ERROR;
   370    pCtx->fErrorOrAux = 1;
   371    sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
   372  }
   373  #ifndef SQLITE_OMIT_UTF16
   374  void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
   375    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   376    pCtx->isError = SQLITE_ERROR;
   377    pCtx->fErrorOrAux = 1;
   378    sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
   379  }
   380  #endif
   381  void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
   382    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   383    sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal);
   384  }
   385  void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
   386    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   387    sqlite3VdbeMemSetInt64(pCtx->pOut, iVal);
   388  }
   389  void sqlite3_result_null(sqlite3_context *pCtx){
   390    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   391    sqlite3VdbeMemSetNull(pCtx->pOut);
   392  }
   393  void sqlite3_result_pointer(
   394    sqlite3_context *pCtx,
   395    void *pPtr,
   396    const char *zPType,
   397    void (*xDestructor)(void*)
   398  ){
   399    Mem *pOut = pCtx->pOut;
   400    assert( sqlite3_mutex_held(pOut->db->mutex) );
   401    sqlite3VdbeMemRelease(pOut);
   402    pOut->flags = MEM_Null;
   403    sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor);
   404  }
   405  void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){
   406    Mem *pOut = pCtx->pOut;
   407    assert( sqlite3_mutex_held(pOut->db->mutex) );
   408    pOut->eSubtype = eSubtype & 0xff;
   409    pOut->flags |= MEM_Subtype;
   410  }
   411  void sqlite3_result_text(
   412    sqlite3_context *pCtx, 
   413    const char *z, 
   414    int n,
   415    void (*xDel)(void *)
   416  ){
   417    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   418    setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
   419  }
   420  void sqlite3_result_text64(
   421    sqlite3_context *pCtx, 
   422    const char *z, 
   423    sqlite3_uint64 n,
   424    void (*xDel)(void *),
   425    unsigned char enc
   426  ){
   427    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   428    assert( xDel!=SQLITE_DYNAMIC );
   429    if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
   430    if( n>0x7fffffff ){
   431      (void)invokeValueDestructor(z, xDel, pCtx);
   432    }else{
   433      setResultStrOrError(pCtx, z, (int)n, enc, xDel);
   434    }
   435  }
   436  #ifndef SQLITE_OMIT_UTF16
   437  void sqlite3_result_text16(
   438    sqlite3_context *pCtx, 
   439    const void *z, 
   440    int n, 
   441    void (*xDel)(void *)
   442  ){
   443    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   444    setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
   445  }
   446  void sqlite3_result_text16be(
   447    sqlite3_context *pCtx, 
   448    const void *z, 
   449    int n, 
   450    void (*xDel)(void *)
   451  ){
   452    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   453    setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
   454  }
   455  void sqlite3_result_text16le(
   456    sqlite3_context *pCtx, 
   457    const void *z, 
   458    int n, 
   459    void (*xDel)(void *)
   460  ){
   461    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   462    setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
   463  }
   464  #endif /* SQLITE_OMIT_UTF16 */
   465  void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
   466    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   467    sqlite3VdbeMemCopy(pCtx->pOut, pValue);
   468  }
   469  void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
   470    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   471    sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n);
   472  }
   473  int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){
   474    Mem *pOut = pCtx->pOut;
   475    assert( sqlite3_mutex_held(pOut->db->mutex) );
   476    if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){
   477      return SQLITE_TOOBIG;
   478    }
   479    sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n);
   480    return SQLITE_OK;
   481  }
   482  void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
   483    pCtx->isError = errCode;
   484    pCtx->fErrorOrAux = 1;
   485  #ifdef SQLITE_DEBUG
   486    if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode;
   487  #endif
   488    if( pCtx->pOut->flags & MEM_Null ){
   489      sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1, 
   490                           SQLITE_UTF8, SQLITE_STATIC);
   491    }
   492  }
   493  
   494  /* Force an SQLITE_TOOBIG error. */
   495  void sqlite3_result_error_toobig(sqlite3_context *pCtx){
   496    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   497    pCtx->isError = SQLITE_TOOBIG;
   498    pCtx->fErrorOrAux = 1;
   499    sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1, 
   500                         SQLITE_UTF8, SQLITE_STATIC);
   501  }
   502  
   503  /* An SQLITE_NOMEM error. */
   504  void sqlite3_result_error_nomem(sqlite3_context *pCtx){
   505    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   506    sqlite3VdbeMemSetNull(pCtx->pOut);
   507    pCtx->isError = SQLITE_NOMEM_BKPT;
   508    pCtx->fErrorOrAux = 1;
   509    sqlite3OomFault(pCtx->pOut->db);
   510  }
   511  
   512  /*
   513  ** This function is called after a transaction has been committed. It 
   514  ** invokes callbacks registered with sqlite3_wal_hook() as required.
   515  */
   516  static int doWalCallbacks(sqlite3 *db){
   517    int rc = SQLITE_OK;
   518  #ifndef SQLITE_OMIT_WAL
   519    int i;
   520    for(i=0; i<db->nDb; i++){
   521      Btree *pBt = db->aDb[i].pBt;
   522      if( pBt ){
   523        int nEntry;
   524        sqlite3BtreeEnter(pBt);
   525        nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
   526        sqlite3BtreeLeave(pBt);
   527        if( nEntry>0 && db->xWalCallback && rc==SQLITE_OK ){
   528          rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zDbSName, nEntry);
   529        }
   530      }
   531    }
   532  #endif
   533    return rc;
   534  }
   535  
   536  
   537  /*
   538  ** Execute the statement pStmt, either until a row of data is ready, the
   539  ** statement is completely executed or an error occurs.
   540  **
   541  ** This routine implements the bulk of the logic behind the sqlite_step()
   542  ** API.  The only thing omitted is the automatic recompile if a 
   543  ** schema change has occurred.  That detail is handled by the
   544  ** outer sqlite3_step() wrapper procedure.
   545  */
   546  static int sqlite3Step(Vdbe *p){
   547    sqlite3 *db;
   548    int rc;
   549  
   550    assert(p);
   551    if( p->magic!=VDBE_MAGIC_RUN ){
   552      /* We used to require that sqlite3_reset() be called before retrying
   553      ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
   554      ** with version 3.7.0, we changed this so that sqlite3_reset() would
   555      ** be called automatically instead of throwing the SQLITE_MISUSE error.
   556      ** This "automatic-reset" change is not technically an incompatibility, 
   557      ** since any application that receives an SQLITE_MISUSE is broken by
   558      ** definition.
   559      **
   560      ** Nevertheless, some published applications that were originally written
   561      ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 
   562      ** returns, and those were broken by the automatic-reset change.  As a
   563      ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
   564      ** legacy behavior of returning SQLITE_MISUSE for cases where the 
   565      ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
   566      ** or SQLITE_BUSY error.
   567      */
   568  #ifdef SQLITE_OMIT_AUTORESET
   569      if( (rc = p->rc&0xff)==SQLITE_BUSY || rc==SQLITE_LOCKED ){
   570        sqlite3_reset((sqlite3_stmt*)p);
   571      }else{
   572        return SQLITE_MISUSE_BKPT;
   573      }
   574  #else
   575      sqlite3_reset((sqlite3_stmt*)p);
   576  #endif
   577    }
   578  
   579    /* Check that malloc() has not failed. If it has, return early. */
   580    db = p->db;
   581    if( db->mallocFailed ){
   582      p->rc = SQLITE_NOMEM;
   583      return SQLITE_NOMEM_BKPT;
   584    }
   585  
   586    if( p->pc<=0 && p->expired ){
   587      p->rc = SQLITE_SCHEMA;
   588      rc = SQLITE_ERROR;
   589      goto end_of_step;
   590    }
   591    if( p->pc<0 ){
   592      /* If there are no other statements currently running, then
   593      ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
   594      ** from interrupting a statement that has not yet started.
   595      */
   596      if( db->nVdbeActive==0 ){
   597        db->u1.isInterrupted = 0;
   598      }
   599  
   600      assert( db->nVdbeWrite>0 || db->autoCommit==0 
   601          || (db->nDeferredCons==0 && db->nDeferredImmCons==0)
   602      );
   603  
   604  #ifndef SQLITE_OMIT_TRACE
   605      if( (db->xProfile || (db->mTrace & SQLITE_TRACE_PROFILE)!=0)
   606          && !db->init.busy && p->zSql ){
   607        sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
   608      }else{
   609        assert( p->startTime==0 );
   610      }
   611  #endif
   612  
   613      db->nVdbeActive++;
   614      if( p->readOnly==0 ) db->nVdbeWrite++;
   615      if( p->bIsReader ) db->nVdbeRead++;
   616      p->pc = 0;
   617    }
   618  #ifdef SQLITE_DEBUG
   619    p->rcApp = SQLITE_OK;
   620  #endif
   621  #ifndef SQLITE_OMIT_EXPLAIN
   622    if( p->explain ){
   623      rc = sqlite3VdbeList(p);
   624    }else
   625  #endif /* SQLITE_OMIT_EXPLAIN */
   626    {
   627      db->nVdbeExec++;
   628      rc = sqlite3VdbeExec(p);
   629      db->nVdbeExec--;
   630    }
   631  
   632  #ifndef SQLITE_OMIT_TRACE
   633    /* If the statement completed successfully, invoke the profile callback */
   634    if( rc!=SQLITE_ROW ) checkProfileCallback(db, p);
   635  #endif
   636  
   637    if( rc==SQLITE_DONE && db->autoCommit ){
   638      assert( p->rc==SQLITE_OK );
   639      p->rc = doWalCallbacks(db);
   640      if( p->rc!=SQLITE_OK ){
   641        rc = SQLITE_ERROR;
   642      }
   643    }
   644  
   645    db->errCode = rc;
   646    if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
   647      p->rc = SQLITE_NOMEM_BKPT;
   648    }
   649  end_of_step:
   650    /* At this point local variable rc holds the value that should be 
   651    ** returned if this statement was compiled using the legacy 
   652    ** sqlite3_prepare() interface. According to the docs, this can only
   653    ** be one of the values in the first assert() below. Variable p->rc 
   654    ** contains the value that would be returned if sqlite3_finalize() 
   655    ** were called on statement p.
   656    */
   657    assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR 
   658         || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE
   659    );
   660    assert( (p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE) || p->rc==p->rcApp );
   661    if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 
   662     && rc!=SQLITE_ROW 
   663     && rc!=SQLITE_DONE 
   664    ){
   665      /* If this statement was prepared using saved SQL and an 
   666      ** error has occurred, then return the error code in p->rc to the
   667      ** caller. Set the error code in the database handle to the same value.
   668      */ 
   669      rc = sqlite3VdbeTransferError(p);
   670    }
   671    return (rc&db->errMask);
   672  }
   673  
   674  /*
   675  ** This is the top-level implementation of sqlite3_step().  Call
   676  ** sqlite3Step() to do most of the work.  If a schema error occurs,
   677  ** call sqlite3Reprepare() and try again.
   678  */
   679  int sqlite3_step(sqlite3_stmt *pStmt){
   680    int rc = SQLITE_OK;      /* Result from sqlite3Step() */
   681    Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
   682    int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
   683    sqlite3 *db;             /* The database connection */
   684  
   685    if( vdbeSafetyNotNull(v) ){
   686      return SQLITE_MISUSE_BKPT;
   687    }
   688    db = v->db;
   689    sqlite3_mutex_enter(db->mutex);
   690    v->doingRerun = 0;
   691    while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
   692           && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
   693      int savedPc = v->pc;
   694      rc = sqlite3Reprepare(v);
   695      if( rc!=SQLITE_OK ){
   696        /* This case occurs after failing to recompile an sql statement. 
   697        ** The error message from the SQL compiler has already been loaded 
   698        ** into the database handle. This block copies the error message 
   699        ** from the database handle into the statement and sets the statement
   700        ** program counter to 0 to ensure that when the statement is 
   701        ** finalized or reset the parser error message is available via
   702        ** sqlite3_errmsg() and sqlite3_errcode().
   703        */
   704        const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
   705        sqlite3DbFree(db, v->zErrMsg);
   706        if( !db->mallocFailed ){
   707          v->zErrMsg = sqlite3DbStrDup(db, zErr);
   708          v->rc = rc = sqlite3ApiExit(db, rc);
   709        } else {
   710          v->zErrMsg = 0;
   711          v->rc = rc = SQLITE_NOMEM_BKPT;
   712        }
   713        break;
   714      }
   715      sqlite3_reset(pStmt);
   716      if( savedPc>=0 ) v->doingRerun = 1;
   717      assert( v->expired==0 );
   718    }
   719    sqlite3_mutex_leave(db->mutex);
   720    return rc;
   721  }
   722  
   723  
   724  /*
   725  ** Extract the user data from a sqlite3_context structure and return a
   726  ** pointer to it.
   727  */
   728  void *sqlite3_user_data(sqlite3_context *p){
   729    assert( p && p->pFunc );
   730    return p->pFunc->pUserData;
   731  }
   732  
   733  /*
   734  ** Extract the user data from a sqlite3_context structure and return a
   735  ** pointer to it.
   736  **
   737  ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
   738  ** returns a copy of the pointer to the database connection (the 1st
   739  ** parameter) of the sqlite3_create_function() and
   740  ** sqlite3_create_function16() routines that originally registered the
   741  ** application defined function.
   742  */
   743  sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
   744    assert( p && p->pOut );
   745    return p->pOut->db;
   746  }
   747  
   748  /*
   749  ** Return the current time for a statement.  If the current time
   750  ** is requested more than once within the same run of a single prepared
   751  ** statement, the exact same time is returned for each invocation regardless
   752  ** of the amount of time that elapses between invocations.  In other words,
   753  ** the time returned is always the time of the first call.
   754  */
   755  sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
   756    int rc;
   757  #ifndef SQLITE_ENABLE_STAT3_OR_STAT4
   758    sqlite3_int64 *piTime = &p->pVdbe->iCurrentTime;
   759    assert( p->pVdbe!=0 );
   760  #else
   761    sqlite3_int64 iTime = 0;
   762    sqlite3_int64 *piTime = p->pVdbe!=0 ? &p->pVdbe->iCurrentTime : &iTime;
   763  #endif
   764    if( *piTime==0 ){
   765      rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, piTime);
   766      if( rc ) *piTime = 0;
   767    }
   768    return *piTime;
   769  }
   770  
   771  /*
   772  ** The following is the implementation of an SQL function that always
   773  ** fails with an error message stating that the function is used in the
   774  ** wrong context.  The sqlite3_overload_function() API might construct
   775  ** SQL function that use this routine so that the functions will exist
   776  ** for name resolution but are actually overloaded by the xFindFunction
   777  ** method of virtual tables.
   778  */
   779  void sqlite3InvalidFunction(
   780    sqlite3_context *context,  /* The function calling context */
   781    int NotUsed,               /* Number of arguments to the function */
   782    sqlite3_value **NotUsed2   /* Value of each argument */
   783  ){
   784    const char *zName = context->pFunc->zName;
   785    char *zErr;
   786    UNUSED_PARAMETER2(NotUsed, NotUsed2);
   787    zErr = sqlite3_mprintf(
   788        "unable to use function %s in the requested context", zName);
   789    sqlite3_result_error(context, zErr, -1);
   790    sqlite3_free(zErr);
   791  }
   792  
   793  /*
   794  ** Create a new aggregate context for p and return a pointer to
   795  ** its pMem->z element.
   796  */
   797  static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nByte){
   798    Mem *pMem = p->pMem;
   799    assert( (pMem->flags & MEM_Agg)==0 );
   800    if( nByte<=0 ){
   801      sqlite3VdbeMemSetNull(pMem);
   802      pMem->z = 0;
   803    }else{
   804      sqlite3VdbeMemClearAndResize(pMem, nByte);
   805      pMem->flags = MEM_Agg;
   806      pMem->u.pDef = p->pFunc;
   807      if( pMem->z ){
   808        memset(pMem->z, 0, nByte);
   809      }
   810    }
   811    return (void*)pMem->z;
   812  }
   813  
   814  /*
   815  ** Allocate or return the aggregate context for a user function.  A new
   816  ** context is allocated on the first call.  Subsequent calls return the
   817  ** same context that was returned on prior calls.
   818  */
   819  void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
   820    assert( p && p->pFunc && p->pFunc->xFinalize );
   821    assert( sqlite3_mutex_held(p->pOut->db->mutex) );
   822    testcase( nByte<0 );
   823    if( (p->pMem->flags & MEM_Agg)==0 ){
   824      return createAggContext(p, nByte);
   825    }else{
   826      return (void*)p->pMem->z;
   827    }
   828  }
   829  
   830  /*
   831  ** Return the auxiliary data pointer, if any, for the iArg'th argument to
   832  ** the user-function defined by pCtx.
   833  **
   834  ** The left-most argument is 0.
   835  **
   836  ** Undocumented behavior:  If iArg is negative then access a cache of
   837  ** auxiliary data pointers that is available to all functions within a
   838  ** single prepared statement.  The iArg values must match.
   839  */
   840  void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
   841    AuxData *pAuxData;
   842  
   843    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   844  #if SQLITE_ENABLE_STAT3_OR_STAT4
   845    if( pCtx->pVdbe==0 ) return 0;
   846  #else
   847    assert( pCtx->pVdbe!=0 );
   848  #endif
   849    for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){
   850      if(  pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){
   851        return pAuxData->pAux;
   852      }
   853    }
   854    return 0;
   855  }
   856  
   857  /*
   858  ** Set the auxiliary data pointer and delete function, for the iArg'th
   859  ** argument to the user-function defined by pCtx. Any previous value is
   860  ** deleted by calling the delete function specified when it was set.
   861  **
   862  ** The left-most argument is 0.
   863  **
   864  ** Undocumented behavior:  If iArg is negative then make the data available
   865  ** to all functions within the current prepared statement using iArg as an
   866  ** access code.
   867  */
   868  void sqlite3_set_auxdata(
   869    sqlite3_context *pCtx, 
   870    int iArg, 
   871    void *pAux, 
   872    void (*xDelete)(void*)
   873  ){
   874    AuxData *pAuxData;
   875    Vdbe *pVdbe = pCtx->pVdbe;
   876  
   877    assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
   878  #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
   879    if( pVdbe==0 ) goto failed;
   880  #else
   881    assert( pVdbe!=0 );
   882  #endif
   883  
   884    for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){
   885      if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){
   886        break;
   887      }
   888    }
   889    if( pAuxData==0 ){
   890      pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData));
   891      if( !pAuxData ) goto failed;
   892      pAuxData->iAuxOp = pCtx->iOp;
   893      pAuxData->iAuxArg = iArg;
   894      pAuxData->pNextAux = pVdbe->pAuxData;
   895      pVdbe->pAuxData = pAuxData;
   896      if( pCtx->fErrorOrAux==0 ){
   897        pCtx->isError = 0;
   898        pCtx->fErrorOrAux = 1;
   899      }
   900    }else if( pAuxData->xDeleteAux ){
   901      pAuxData->xDeleteAux(pAuxData->pAux);
   902    }
   903  
   904    pAuxData->pAux = pAux;
   905    pAuxData->xDeleteAux = xDelete;
   906    return;
   907  
   908  failed:
   909    if( xDelete ){
   910      xDelete(pAux);
   911    }
   912  }
   913  
   914  #ifndef SQLITE_OMIT_DEPRECATED
   915  /*
   916  ** Return the number of times the Step function of an aggregate has been 
   917  ** called.
   918  **
   919  ** This function is deprecated.  Do not use it for new code.  It is
   920  ** provide only to avoid breaking legacy code.  New aggregate function
   921  ** implementations should keep their own counts within their aggregate
   922  ** context.
   923  */
   924  int sqlite3_aggregate_count(sqlite3_context *p){
   925    assert( p && p->pMem && p->pFunc && p->pFunc->xFinalize );
   926    return p->pMem->n;
   927  }
   928  #endif
   929  
   930  /*
   931  ** Return the number of columns in the result set for the statement pStmt.
   932  */
   933  int sqlite3_column_count(sqlite3_stmt *pStmt){
   934    Vdbe *pVm = (Vdbe *)pStmt;
   935    return pVm ? pVm->nResColumn : 0;
   936  }
   937  
   938  /*
   939  ** Return the number of values available from the current row of the
   940  ** currently executing statement pStmt.
   941  */
   942  int sqlite3_data_count(sqlite3_stmt *pStmt){
   943    Vdbe *pVm = (Vdbe *)pStmt;
   944    if( pVm==0 || pVm->pResultSet==0 ) return 0;
   945    return pVm->nResColumn;
   946  }
   947  
   948  /*
   949  ** Return a pointer to static memory containing an SQL NULL value.
   950  */
   951  static const Mem *columnNullValue(void){
   952    /* Even though the Mem structure contains an element
   953    ** of type i64, on certain architectures (x86) with certain compiler
   954    ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
   955    ** instead of an 8-byte one. This all works fine, except that when
   956    ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
   957    ** that a Mem structure is located on an 8-byte boundary. To prevent
   958    ** these assert()s from failing, when building with SQLITE_DEBUG defined
   959    ** using gcc, we force nullMem to be 8-byte aligned using the magical
   960    ** __attribute__((aligned(8))) macro.  */
   961    static const Mem nullMem 
   962  #if defined(SQLITE_DEBUG) && defined(__GNUC__)
   963      __attribute__((aligned(8))) 
   964  #endif
   965      = {
   966          /* .u          = */ {0},
   967          /* .flags      = */ (u16)MEM_Null,
   968          /* .enc        = */ (u8)0,
   969          /* .eSubtype   = */ (u8)0,
   970          /* .n          = */ (int)0,
   971          /* .z          = */ (char*)0,
   972          /* .zMalloc    = */ (char*)0,
   973          /* .szMalloc   = */ (int)0,
   974          /* .uTemp      = */ (u32)0,
   975          /* .db         = */ (sqlite3*)0,
   976          /* .xDel       = */ (void(*)(void*))0,
   977  #ifdef SQLITE_DEBUG
   978          /* .pScopyFrom = */ (Mem*)0,
   979          /* .pFiller    = */ (void*)0,
   980  #endif
   981        };
   982    return &nullMem;
   983  }
   984  
   985  /*
   986  ** Check to see if column iCol of the given statement is valid.  If
   987  ** it is, return a pointer to the Mem for the value of that column.
   988  ** If iCol is not valid, return a pointer to a Mem which has a value
   989  ** of NULL.
   990  */
   991  static Mem *columnMem(sqlite3_stmt *pStmt, int i){
   992    Vdbe *pVm;
   993    Mem *pOut;
   994  
   995    pVm = (Vdbe *)pStmt;
   996    if( pVm==0 ) return (Mem*)columnNullValue();
   997    assert( pVm->db );
   998    sqlite3_mutex_enter(pVm->db->mutex);
   999    if( pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
  1000      pOut = &pVm->pResultSet[i];
  1001    }else{
  1002      sqlite3Error(pVm->db, SQLITE_RANGE);
  1003      pOut = (Mem*)columnNullValue();
  1004    }
  1005    return pOut;
  1006  }
  1007  
  1008  /*
  1009  ** This function is called after invoking an sqlite3_value_XXX function on a 
  1010  ** column value (i.e. a value returned by evaluating an SQL expression in the
  1011  ** select list of a SELECT statement) that may cause a malloc() failure. If 
  1012  ** malloc() has failed, the threads mallocFailed flag is cleared and the result
  1013  ** code of statement pStmt set to SQLITE_NOMEM.
  1014  **
  1015  ** Specifically, this is called from within:
  1016  **
  1017  **     sqlite3_column_int()
  1018  **     sqlite3_column_int64()
  1019  **     sqlite3_column_text()
  1020  **     sqlite3_column_text16()
  1021  **     sqlite3_column_real()
  1022  **     sqlite3_column_bytes()
  1023  **     sqlite3_column_bytes16()
  1024  **     sqiite3_column_blob()
  1025  */
  1026  static void columnMallocFailure(sqlite3_stmt *pStmt)
  1027  {
  1028    /* If malloc() failed during an encoding conversion within an
  1029    ** sqlite3_column_XXX API, then set the return code of the statement to
  1030    ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
  1031    ** and _finalize() will return NOMEM.
  1032    */
  1033    Vdbe *p = (Vdbe *)pStmt;
  1034    if( p ){
  1035      assert( p->db!=0 );
  1036      assert( sqlite3_mutex_held(p->db->mutex) );
  1037      p->rc = sqlite3ApiExit(p->db, p->rc);
  1038      sqlite3_mutex_leave(p->db->mutex);
  1039    }
  1040  }
  1041  
  1042  /**************************** sqlite3_column_  *******************************
  1043  ** The following routines are used to access elements of the current row
  1044  ** in the result set.
  1045  */
  1046  const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
  1047    const void *val;
  1048    val = sqlite3_value_blob( columnMem(pStmt,i) );
  1049    /* Even though there is no encoding conversion, value_blob() might
  1050    ** need to call malloc() to expand the result of a zeroblob() 
  1051    ** expression. 
  1052    */
  1053    columnMallocFailure(pStmt);
  1054    return val;
  1055  }
  1056  int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
  1057    int val = sqlite3_value_bytes( columnMem(pStmt,i) );
  1058    columnMallocFailure(pStmt);
  1059    return val;
  1060  }
  1061  int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
  1062    int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
  1063    columnMallocFailure(pStmt);
  1064    return val;
  1065  }
  1066  double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
  1067    double val = sqlite3_value_double( columnMem(pStmt,i) );
  1068    columnMallocFailure(pStmt);
  1069    return val;
  1070  }
  1071  int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
  1072    int val = sqlite3_value_int( columnMem(pStmt,i) );
  1073    columnMallocFailure(pStmt);
  1074    return val;
  1075  }
  1076  sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
  1077    sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
  1078    columnMallocFailure(pStmt);
  1079    return val;
  1080  }
  1081  const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
  1082    const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
  1083    columnMallocFailure(pStmt);
  1084    return val;
  1085  }
  1086  sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
  1087    Mem *pOut = columnMem(pStmt, i);
  1088    if( pOut->flags&MEM_Static ){
  1089      pOut->flags &= ~MEM_Static;
  1090      pOut->flags |= MEM_Ephem;
  1091    }
  1092    columnMallocFailure(pStmt);
  1093    return (sqlite3_value *)pOut;
  1094  }
  1095  #ifndef SQLITE_OMIT_UTF16
  1096  const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
  1097    const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
  1098    columnMallocFailure(pStmt);
  1099    return val;
  1100  }
  1101  #endif /* SQLITE_OMIT_UTF16 */
  1102  int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
  1103    int iType = sqlite3_value_type( columnMem(pStmt,i) );
  1104    columnMallocFailure(pStmt);
  1105    return iType;
  1106  }
  1107  
  1108  /*
  1109  ** Convert the N-th element of pStmt->pColName[] into a string using
  1110  ** xFunc() then return that string.  If N is out of range, return 0.
  1111  **
  1112  ** There are up to 5 names for each column.  useType determines which
  1113  ** name is returned.  Here are the names:
  1114  **
  1115  **    0      The column name as it should be displayed for output
  1116  **    1      The datatype name for the column
  1117  **    2      The name of the database that the column derives from
  1118  **    3      The name of the table that the column derives from
  1119  **    4      The name of the table column that the result column derives from
  1120  **
  1121  ** If the result is not a simple column reference (if it is an expression
  1122  ** or a constant) then useTypes 2, 3, and 4 return NULL.
  1123  */
  1124  static const void *columnName(
  1125    sqlite3_stmt *pStmt,
  1126    int N,
  1127    const void *(*xFunc)(Mem*),
  1128    int useType
  1129  ){
  1130    const void *ret;
  1131    Vdbe *p;
  1132    int n;
  1133    sqlite3 *db;
  1134  #ifdef SQLITE_ENABLE_API_ARMOR
  1135    if( pStmt==0 ){
  1136      (void)SQLITE_MISUSE_BKPT;
  1137      return 0;
  1138    }
  1139  #endif
  1140    ret = 0;
  1141    p = (Vdbe *)pStmt;
  1142    db = p->db;
  1143    assert( db!=0 );
  1144    n = sqlite3_column_count(pStmt);
  1145    if( N<n && N>=0 ){
  1146      N += useType*n;
  1147      sqlite3_mutex_enter(db->mutex);
  1148      assert( db->mallocFailed==0 );
  1149      ret = xFunc(&p->aColName[N]);
  1150       /* A malloc may have failed inside of the xFunc() call. If this
  1151      ** is the case, clear the mallocFailed flag and return NULL.
  1152      */
  1153      if( db->mallocFailed ){
  1154        sqlite3OomClear(db);
  1155        ret = 0;
  1156      }
  1157      sqlite3_mutex_leave(db->mutex);
  1158    }
  1159    return ret;
  1160  }
  1161  
  1162  /*
  1163  ** Return the name of the Nth column of the result set returned by SQL
  1164  ** statement pStmt.
  1165  */
  1166  const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
  1167    return columnName(
  1168        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
  1169  }
  1170  #ifndef SQLITE_OMIT_UTF16
  1171  const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
  1172    return columnName(
  1173        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
  1174  }
  1175  #endif
  1176  
  1177  /*
  1178  ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
  1179  ** not define OMIT_DECLTYPE.
  1180  */
  1181  #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
  1182  # error "Must not define both SQLITE_OMIT_DECLTYPE \
  1183           and SQLITE_ENABLE_COLUMN_METADATA"
  1184  #endif
  1185  
  1186  #ifndef SQLITE_OMIT_DECLTYPE
  1187  /*
  1188  ** Return the column declaration type (if applicable) of the 'i'th column
  1189  ** of the result set of SQL statement pStmt.
  1190  */
  1191  const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
  1192    return columnName(
  1193        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
  1194  }
  1195  #ifndef SQLITE_OMIT_UTF16
  1196  const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
  1197    return columnName(
  1198        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
  1199  }
  1200  #endif /* SQLITE_OMIT_UTF16 */
  1201  #endif /* SQLITE_OMIT_DECLTYPE */
  1202  
  1203  #ifdef SQLITE_ENABLE_COLUMN_METADATA
  1204  /*
  1205  ** Return the name of the database from which a result column derives.
  1206  ** NULL is returned if the result column is an expression or constant or
  1207  ** anything else which is not an unambiguous reference to a database column.
  1208  */
  1209  const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
  1210    return columnName(
  1211        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
  1212  }
  1213  #ifndef SQLITE_OMIT_UTF16
  1214  const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
  1215    return columnName(
  1216        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
  1217  }
  1218  #endif /* SQLITE_OMIT_UTF16 */
  1219  
  1220  /*
  1221  ** Return the name of the table from which a result column derives.
  1222  ** NULL is returned if the result column is an expression or constant or
  1223  ** anything else which is not an unambiguous reference to a database column.
  1224  */
  1225  const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
  1226    return columnName(
  1227        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
  1228  }
  1229  #ifndef SQLITE_OMIT_UTF16
  1230  const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
  1231    return columnName(
  1232        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
  1233  }
  1234  #endif /* SQLITE_OMIT_UTF16 */
  1235  
  1236  /*
  1237  ** Return the name of the table column from which a result column derives.
  1238  ** NULL is returned if the result column is an expression or constant or
  1239  ** anything else which is not an unambiguous reference to a database column.
  1240  */
  1241  const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
  1242    return columnName(
  1243        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
  1244  }
  1245  #ifndef SQLITE_OMIT_UTF16
  1246  const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
  1247    return columnName(
  1248        pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
  1249  }
  1250  #endif /* SQLITE_OMIT_UTF16 */
  1251  #endif /* SQLITE_ENABLE_COLUMN_METADATA */
  1252  
  1253  
  1254  /******************************* sqlite3_bind_  ***************************
  1255  ** 
  1256  ** Routines used to attach values to wildcards in a compiled SQL statement.
  1257  */
  1258  /*
  1259  ** Unbind the value bound to variable i in virtual machine p. This is the 
  1260  ** the same as binding a NULL value to the column. If the "i" parameter is
  1261  ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
  1262  **
  1263  ** A successful evaluation of this routine acquires the mutex on p.
  1264  ** the mutex is released if any kind of error occurs.
  1265  **
  1266  ** The error code stored in database p->db is overwritten with the return
  1267  ** value in any case.
  1268  */
  1269  static int vdbeUnbind(Vdbe *p, int i){
  1270    Mem *pVar;
  1271    if( vdbeSafetyNotNull(p) ){
  1272      return SQLITE_MISUSE_BKPT;
  1273    }
  1274    sqlite3_mutex_enter(p->db->mutex);
  1275    if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
  1276      sqlite3Error(p->db, SQLITE_MISUSE);
  1277      sqlite3_mutex_leave(p->db->mutex);
  1278      sqlite3_log(SQLITE_MISUSE, 
  1279          "bind on a busy prepared statement: [%s]", p->zSql);
  1280      return SQLITE_MISUSE_BKPT;
  1281    }
  1282    if( i<1 || i>p->nVar ){
  1283      sqlite3Error(p->db, SQLITE_RANGE);
  1284      sqlite3_mutex_leave(p->db->mutex);
  1285      return SQLITE_RANGE;
  1286    }
  1287    i--;
  1288    pVar = &p->aVar[i];
  1289    sqlite3VdbeMemRelease(pVar);
  1290    pVar->flags = MEM_Null;
  1291    sqlite3Error(p->db, SQLITE_OK);
  1292  
  1293    /* If the bit corresponding to this variable in Vdbe.expmask is set, then 
  1294    ** binding a new value to this variable invalidates the current query plan.
  1295    **
  1296    ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
  1297    ** parameter in the WHERE clause might influence the choice of query plan
  1298    ** for a statement, then the statement will be automatically recompiled,
  1299    ** as if there had been a schema change, on the first sqlite3_step() call
  1300    ** following any change to the bindings of that parameter.
  1301    */
  1302    assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 );
  1303    if( p->expmask!=0 && (p->expmask & (i>=31 ? 0x80000000 : (u32)1<<i))!=0 ){
  1304      p->expired = 1;
  1305    }
  1306    return SQLITE_OK;
  1307  }
  1308  
  1309  /*
  1310  ** Bind a text or BLOB value.
  1311  */
  1312  static int bindText(
  1313    sqlite3_stmt *pStmt,   /* The statement to bind against */
  1314    int i,                 /* Index of the parameter to bind */
  1315    const void *zData,     /* Pointer to the data to be bound */
  1316    int nData,             /* Number of bytes of data to be bound */
  1317    void (*xDel)(void*),   /* Destructor for the data */
  1318    u8 encoding            /* Encoding for the data */
  1319  ){
  1320    Vdbe *p = (Vdbe *)pStmt;
  1321    Mem *pVar;
  1322    int rc;
  1323  
  1324    rc = vdbeUnbind(p, i);
  1325    if( rc==SQLITE_OK ){
  1326      if( zData!=0 ){
  1327        pVar = &p->aVar[i-1];
  1328        rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
  1329        if( rc==SQLITE_OK && encoding!=0 ){
  1330          rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
  1331        }
  1332        if( rc ){
  1333          sqlite3Error(p->db, rc);
  1334          rc = sqlite3ApiExit(p->db, rc);
  1335        }
  1336      }
  1337      sqlite3_mutex_leave(p->db->mutex);
  1338    }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
  1339      xDel((void*)zData);
  1340    }
  1341    return rc;
  1342  }
  1343  
  1344  
  1345  /*
  1346  ** Bind a blob value to an SQL statement variable.
  1347  */
  1348  int sqlite3_bind_blob(
  1349    sqlite3_stmt *pStmt, 
  1350    int i, 
  1351    const void *zData, 
  1352    int nData, 
  1353    void (*xDel)(void*)
  1354  ){
  1355  #ifdef SQLITE_ENABLE_API_ARMOR
  1356    if( nData<0 ) return SQLITE_MISUSE_BKPT;
  1357  #endif
  1358    return bindText(pStmt, i, zData, nData, xDel, 0);
  1359  }
  1360  int sqlite3_bind_blob64(
  1361    sqlite3_stmt *pStmt, 
  1362    int i, 
  1363    const void *zData, 
  1364    sqlite3_uint64 nData, 
  1365    void (*xDel)(void*)
  1366  ){
  1367    assert( xDel!=SQLITE_DYNAMIC );
  1368    if( nData>0x7fffffff ){
  1369      return invokeValueDestructor(zData, xDel, 0);
  1370    }else{
  1371      return bindText(pStmt, i, zData, (int)nData, xDel, 0);
  1372    }
  1373  }
  1374  int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
  1375    int rc;
  1376    Vdbe *p = (Vdbe *)pStmt;
  1377    rc = vdbeUnbind(p, i);
  1378    if( rc==SQLITE_OK ){
  1379      sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
  1380      sqlite3_mutex_leave(p->db->mutex);
  1381    }
  1382    return rc;
  1383  }
  1384  int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
  1385    return sqlite3_bind_int64(p, i, (i64)iValue);
  1386  }
  1387  int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
  1388    int rc;
  1389    Vdbe *p = (Vdbe *)pStmt;
  1390    rc = vdbeUnbind(p, i);
  1391    if( rc==SQLITE_OK ){
  1392      sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
  1393      sqlite3_mutex_leave(p->db->mutex);
  1394    }
  1395    return rc;
  1396  }
  1397  int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
  1398    int rc;
  1399    Vdbe *p = (Vdbe*)pStmt;
  1400    rc = vdbeUnbind(p, i);
  1401    if( rc==SQLITE_OK ){
  1402      sqlite3_mutex_leave(p->db->mutex);
  1403    }
  1404    return rc;
  1405  }
  1406  int sqlite3_bind_pointer(
  1407    sqlite3_stmt *pStmt,
  1408    int i,
  1409    void *pPtr,
  1410    const char *zPTtype,
  1411    void (*xDestructor)(void*)
  1412  ){
  1413    int rc;
  1414    Vdbe *p = (Vdbe*)pStmt;
  1415    rc = vdbeUnbind(p, i);
  1416    if( rc==SQLITE_OK ){
  1417      sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor);
  1418      sqlite3_mutex_leave(p->db->mutex);
  1419    }else if( xDestructor ){
  1420      xDestructor(pPtr);
  1421    }
  1422    return rc;
  1423  }
  1424  int sqlite3_bind_text( 
  1425    sqlite3_stmt *pStmt, 
  1426    int i, 
  1427    const char *zData, 
  1428    int nData, 
  1429    void (*xDel)(void*)
  1430  ){
  1431    return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
  1432  }
  1433  int sqlite3_bind_text64( 
  1434    sqlite3_stmt *pStmt, 
  1435    int i, 
  1436    const char *zData, 
  1437    sqlite3_uint64 nData, 
  1438    void (*xDel)(void*),
  1439    unsigned char enc
  1440  ){
  1441    assert( xDel!=SQLITE_DYNAMIC );
  1442    if( nData>0x7fffffff ){
  1443      return invokeValueDestructor(zData, xDel, 0);
  1444    }else{
  1445      if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
  1446      return bindText(pStmt, i, zData, (int)nData, xDel, enc);
  1447    }
  1448  }
  1449  #ifndef SQLITE_OMIT_UTF16
  1450  int sqlite3_bind_text16(
  1451    sqlite3_stmt *pStmt, 
  1452    int i, 
  1453    const void *zData, 
  1454    int nData, 
  1455    void (*xDel)(void*)
  1456  ){
  1457    return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
  1458  }
  1459  #endif /* SQLITE_OMIT_UTF16 */
  1460  int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
  1461    int rc;
  1462    switch( sqlite3_value_type((sqlite3_value*)pValue) ){
  1463      case SQLITE_INTEGER: {
  1464        rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
  1465        break;
  1466      }
  1467      case SQLITE_FLOAT: {
  1468        rc = sqlite3_bind_double(pStmt, i, pValue->u.r);
  1469        break;
  1470      }
  1471      case SQLITE_BLOB: {
  1472        if( pValue->flags & MEM_Zero ){
  1473          rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
  1474        }else{
  1475          rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
  1476        }
  1477        break;
  1478      }
  1479      case SQLITE_TEXT: {
  1480        rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
  1481                                pValue->enc);
  1482        break;
  1483      }
  1484      default: {
  1485        rc = sqlite3_bind_null(pStmt, i);
  1486        break;
  1487      }
  1488    }
  1489    return rc;
  1490  }
  1491  int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
  1492    int rc;
  1493    Vdbe *p = (Vdbe *)pStmt;
  1494    rc = vdbeUnbind(p, i);
  1495    if( rc==SQLITE_OK ){
  1496      sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
  1497      sqlite3_mutex_leave(p->db->mutex);
  1498    }
  1499    return rc;
  1500  }
  1501  int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){
  1502    int rc;
  1503    Vdbe *p = (Vdbe *)pStmt;
  1504    sqlite3_mutex_enter(p->db->mutex);
  1505    if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){
  1506      rc = SQLITE_TOOBIG;
  1507    }else{
  1508      assert( (n & 0x7FFFFFFF)==n );
  1509      rc = sqlite3_bind_zeroblob(pStmt, i, n);
  1510    }
  1511    rc = sqlite3ApiExit(p->db, rc);
  1512    sqlite3_mutex_leave(p->db->mutex);
  1513    return rc;
  1514  }
  1515  
  1516  /*
  1517  ** Return the number of wildcards that can be potentially bound to.
  1518  ** This routine is added to support DBD::SQLite.  
  1519  */
  1520  int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
  1521    Vdbe *p = (Vdbe*)pStmt;
  1522    return p ? p->nVar : 0;
  1523  }
  1524  
  1525  /*
  1526  ** Return the name of a wildcard parameter.  Return NULL if the index
  1527  ** is out of range or if the wildcard is unnamed.
  1528  **
  1529  ** The result is always UTF-8.
  1530  */
  1531  const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
  1532    Vdbe *p = (Vdbe*)pStmt;
  1533    if( p==0 ) return 0;
  1534    return sqlite3VListNumToName(p->pVList, i);
  1535  }
  1536  
  1537  /*
  1538  ** Given a wildcard parameter name, return the index of the variable
  1539  ** with that name.  If there is no variable with the given name,
  1540  ** return 0.
  1541  */
  1542  int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
  1543    if( p==0 || zName==0 ) return 0;
  1544    return sqlite3VListNameToNum(p->pVList, zName, nName);
  1545  }
  1546  int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
  1547    return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
  1548  }
  1549  
  1550  /*
  1551  ** Transfer all bindings from the first statement over to the second.
  1552  */
  1553  int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
  1554    Vdbe *pFrom = (Vdbe*)pFromStmt;
  1555    Vdbe *pTo = (Vdbe*)pToStmt;
  1556    int i;
  1557    assert( pTo->db==pFrom->db );
  1558    assert( pTo->nVar==pFrom->nVar );
  1559    sqlite3_mutex_enter(pTo->db->mutex);
  1560    for(i=0; i<pFrom->nVar; i++){
  1561      sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
  1562    }
  1563    sqlite3_mutex_leave(pTo->db->mutex);
  1564    return SQLITE_OK;
  1565  }
  1566  
  1567  #ifndef SQLITE_OMIT_DEPRECATED
  1568  /*
  1569  ** Deprecated external interface.  Internal/core SQLite code
  1570  ** should call sqlite3TransferBindings.
  1571  **
  1572  ** It is misuse to call this routine with statements from different
  1573  ** database connections.  But as this is a deprecated interface, we
  1574  ** will not bother to check for that condition.
  1575  **
  1576  ** If the two statements contain a different number of bindings, then
  1577  ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
  1578  ** SQLITE_OK is returned.
  1579  */
  1580  int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
  1581    Vdbe *pFrom = (Vdbe*)pFromStmt;
  1582    Vdbe *pTo = (Vdbe*)pToStmt;
  1583    if( pFrom->nVar!=pTo->nVar ){
  1584      return SQLITE_ERROR;
  1585    }
  1586    assert( (pTo->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pTo->expmask==0 );
  1587    if( pTo->expmask ){
  1588      pTo->expired = 1;
  1589    }
  1590    assert( (pFrom->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pFrom->expmask==0 );
  1591    if( pFrom->expmask ){
  1592      pFrom->expired = 1;
  1593    }
  1594    return sqlite3TransferBindings(pFromStmt, pToStmt);
  1595  }
  1596  #endif
  1597  
  1598  /*
  1599  ** Return the sqlite3* database handle to which the prepared statement given
  1600  ** in the argument belongs.  This is the same database handle that was
  1601  ** the first argument to the sqlite3_prepare() that was used to create
  1602  ** the statement in the first place.
  1603  */
  1604  sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
  1605    return pStmt ? ((Vdbe*)pStmt)->db : 0;
  1606  }
  1607  
  1608  /*
  1609  ** Return true if the prepared statement is guaranteed to not modify the
  1610  ** database.
  1611  */
  1612  int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
  1613    return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
  1614  }
  1615  
  1616  /*
  1617  ** Return true if the prepared statement is in need of being reset.
  1618  */
  1619  int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
  1620    Vdbe *v = (Vdbe*)pStmt;
  1621    return v!=0 && v->magic==VDBE_MAGIC_RUN && v->pc>=0;
  1622  }
  1623  
  1624  /*
  1625  ** Return a pointer to the next prepared statement after pStmt associated
  1626  ** with database connection pDb.  If pStmt is NULL, return the first
  1627  ** prepared statement for the database connection.  Return NULL if there
  1628  ** are no more.
  1629  */
  1630  sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
  1631    sqlite3_stmt *pNext;
  1632  #ifdef SQLITE_ENABLE_API_ARMOR
  1633    if( !sqlite3SafetyCheckOk(pDb) ){
  1634      (void)SQLITE_MISUSE_BKPT;
  1635      return 0;
  1636    }
  1637  #endif
  1638    sqlite3_mutex_enter(pDb->mutex);
  1639    if( pStmt==0 ){
  1640      pNext = (sqlite3_stmt*)pDb->pVdbe;
  1641    }else{
  1642      pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
  1643    }
  1644    sqlite3_mutex_leave(pDb->mutex);
  1645    return pNext;
  1646  }
  1647  
  1648  /*
  1649  ** Return the value of a status counter for a prepared statement
  1650  */
  1651  int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
  1652    Vdbe *pVdbe = (Vdbe*)pStmt;
  1653    u32 v;
  1654  #ifdef SQLITE_ENABLE_API_ARMOR
  1655    if( !pStmt ){
  1656      (void)SQLITE_MISUSE_BKPT;
  1657      return 0;
  1658    }
  1659  #endif
  1660    if( op==SQLITE_STMTSTATUS_MEMUSED ){
  1661      sqlite3 *db = pVdbe->db;
  1662      sqlite3_mutex_enter(db->mutex);
  1663      v = 0;
  1664      db->pnBytesFreed = (int*)&v;
  1665      sqlite3VdbeClearObject(db, pVdbe);
  1666      sqlite3DbFree(db, pVdbe);
  1667      db->pnBytesFreed = 0;
  1668      sqlite3_mutex_leave(db->mutex);
  1669    }else{
  1670      v = pVdbe->aCounter[op];
  1671      if( resetFlag ) pVdbe->aCounter[op] = 0;
  1672    }
  1673    return (int)v;
  1674  }
  1675  
  1676  /*
  1677  ** Return the SQL associated with a prepared statement
  1678  */
  1679  const char *sqlite3_sql(sqlite3_stmt *pStmt){
  1680    Vdbe *p = (Vdbe *)pStmt;
  1681    return p ? p->zSql : 0;
  1682  }
  1683  
  1684  /*
  1685  ** Return the SQL associated with a prepared statement with
  1686  ** bound parameters expanded.  Space to hold the returned string is
  1687  ** obtained from sqlite3_malloc().  The caller is responsible for
  1688  ** freeing the returned string by passing it to sqlite3_free().
  1689  **
  1690  ** The SQLITE_TRACE_SIZE_LIMIT puts an upper bound on the size of
  1691  ** expanded bound parameters.
  1692  */
  1693  char *sqlite3_expanded_sql(sqlite3_stmt *pStmt){
  1694  #ifdef SQLITE_OMIT_TRACE
  1695    return 0;
  1696  #else
  1697    char *z = 0;
  1698    const char *zSql = sqlite3_sql(pStmt);
  1699    if( zSql ){
  1700      Vdbe *p = (Vdbe *)pStmt;
  1701      sqlite3_mutex_enter(p->db->mutex);
  1702      z = sqlite3VdbeExpandSql(p, zSql);
  1703      sqlite3_mutex_leave(p->db->mutex);
  1704    }
  1705    return z;
  1706  #endif
  1707  }
  1708  
  1709  #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
  1710  /*
  1711  ** Allocate and populate an UnpackedRecord structure based on the serialized
  1712  ** record in nKey/pKey. Return a pointer to the new UnpackedRecord structure
  1713  ** if successful, or a NULL pointer if an OOM error is encountered.
  1714  */
  1715  static UnpackedRecord *vdbeUnpackRecord(
  1716    KeyInfo *pKeyInfo, 
  1717    int nKey, 
  1718    const void *pKey
  1719  ){
  1720    UnpackedRecord *pRet;           /* Return value */
  1721  
  1722    pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo);
  1723    if( pRet ){
  1724      memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1));
  1725      sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, pRet);
  1726    }
  1727    return pRet;
  1728  }
  1729  
  1730  /*
  1731  ** This function is called from within a pre-update callback to retrieve
  1732  ** a field of the row currently being updated or deleted.
  1733  */
  1734  int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
  1735    PreUpdate *p = db->pPreUpdate;
  1736    Mem *pMem;
  1737    int rc = SQLITE_OK;
  1738  
  1739    /* Test that this call is being made from within an SQLITE_DELETE or
  1740    ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */
  1741    if( !p || p->op==SQLITE_INSERT ){
  1742      rc = SQLITE_MISUSE_BKPT;
  1743      goto preupdate_old_out;
  1744    }
  1745    if( p->pPk ){
  1746      iIdx = sqlite3ColumnOfIndex(p->pPk, iIdx);
  1747    }
  1748    if( iIdx>=p->pCsr->nField || iIdx<0 ){
  1749      rc = SQLITE_RANGE;
  1750      goto preupdate_old_out;
  1751    }
  1752  
  1753    /* If the old.* record has not yet been loaded into memory, do so now. */
  1754    if( p->pUnpacked==0 ){
  1755      u32 nRec;
  1756      u8 *aRec;
  1757  
  1758      nRec = sqlite3BtreePayloadSize(p->pCsr->uc.pCursor);
  1759      aRec = sqlite3DbMallocRaw(db, nRec);
  1760      if( !aRec ) goto preupdate_old_out;
  1761      rc = sqlite3BtreePayload(p->pCsr->uc.pCursor, 0, nRec, aRec);
  1762      if( rc==SQLITE_OK ){
  1763        p->pUnpacked = vdbeUnpackRecord(&p->keyinfo, nRec, aRec);
  1764        if( !p->pUnpacked ) rc = SQLITE_NOMEM;
  1765      }
  1766      if( rc!=SQLITE_OK ){
  1767        sqlite3DbFree(db, aRec);
  1768        goto preupdate_old_out;
  1769      }
  1770      p->aRecord = aRec;
  1771    }
  1772  
  1773    pMem = *ppValue = &p->pUnpacked->aMem[iIdx];
  1774    if( iIdx==p->pTab->iPKey ){
  1775      sqlite3VdbeMemSetInt64(pMem, p->iKey1);
  1776    }else if( iIdx>=p->pUnpacked->nField ){
  1777      *ppValue = (sqlite3_value *)columnNullValue();
  1778    }else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){
  1779      if( pMem->flags & MEM_Int ){
  1780        sqlite3VdbeMemRealify(pMem);
  1781      }
  1782    }
  1783  
  1784   preupdate_old_out:
  1785    sqlite3Error(db, rc);
  1786    return sqlite3ApiExit(db, rc);
  1787  }
  1788  #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
  1789  
  1790  #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
  1791  /*
  1792  ** This function is called from within a pre-update callback to retrieve
  1793  ** the number of columns in the row being updated, deleted or inserted.
  1794  */
  1795  int sqlite3_preupdate_count(sqlite3 *db){
  1796    PreUpdate *p = db->pPreUpdate;
  1797    return (p ? p->keyinfo.nKeyField : 0);
  1798  }
  1799  #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
  1800  
  1801  #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
  1802  /*
  1803  ** This function is designed to be called from within a pre-update callback
  1804  ** only. It returns zero if the change that caused the callback was made
  1805  ** immediately by a user SQL statement. Or, if the change was made by a
  1806  ** trigger program, it returns the number of trigger programs currently
  1807  ** on the stack (1 for a top-level trigger, 2 for a trigger fired by a 
  1808  ** top-level trigger etc.).
  1809  **
  1810  ** For the purposes of the previous paragraph, a foreign key CASCADE, SET NULL
  1811  ** or SET DEFAULT action is considered a trigger.
  1812  */
  1813  int sqlite3_preupdate_depth(sqlite3 *db){
  1814    PreUpdate *p = db->pPreUpdate;
  1815    return (p ? p->v->nFrame : 0);
  1816  }
  1817  #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
  1818  
  1819  #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
  1820  /*
  1821  ** This function is called from within a pre-update callback to retrieve
  1822  ** a field of the row currently being updated or inserted.
  1823  */
  1824  int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
  1825    PreUpdate *p = db->pPreUpdate;
  1826    int rc = SQLITE_OK;
  1827    Mem *pMem;
  1828  
  1829    if( !p || p->op==SQLITE_DELETE ){
  1830      rc = SQLITE_MISUSE_BKPT;
  1831      goto preupdate_new_out;
  1832    }
  1833    if( p->pPk && p->op!=SQLITE_UPDATE ){
  1834      iIdx = sqlite3ColumnOfIndex(p->pPk, iIdx);
  1835    }
  1836    if( iIdx>=p->pCsr->nField || iIdx<0 ){
  1837      rc = SQLITE_RANGE;
  1838      goto preupdate_new_out;
  1839    }
  1840  
  1841    if( p->op==SQLITE_INSERT ){
  1842      /* For an INSERT, memory cell p->iNewReg contains the serialized record
  1843      ** that is being inserted. Deserialize it. */
  1844      UnpackedRecord *pUnpack = p->pNewUnpacked;
  1845      if( !pUnpack ){
  1846        Mem *pData = &p->v->aMem[p->iNewReg];
  1847        rc = ExpandBlob(pData);
  1848        if( rc!=SQLITE_OK ) goto preupdate_new_out;
  1849        pUnpack = vdbeUnpackRecord(&p->keyinfo, pData->n, pData->z);
  1850        if( !pUnpack ){
  1851          rc = SQLITE_NOMEM;
  1852          goto preupdate_new_out;
  1853        }
  1854        p->pNewUnpacked = pUnpack;
  1855      }
  1856      pMem = &pUnpack->aMem[iIdx];
  1857      if( iIdx==p->pTab->iPKey ){
  1858        sqlite3VdbeMemSetInt64(pMem, p->iKey2);
  1859      }else if( iIdx>=pUnpack->nField ){
  1860        pMem = (sqlite3_value *)columnNullValue();
  1861      }
  1862    }else{
  1863      /* For an UPDATE, memory cell (p->iNewReg+1+iIdx) contains the required
  1864      ** value. Make a copy of the cell contents and return a pointer to it.
  1865      ** It is not safe to return a pointer to the memory cell itself as the
  1866      ** caller may modify the value text encoding.
  1867      */
  1868      assert( p->op==SQLITE_UPDATE );
  1869      if( !p->aNew ){
  1870        p->aNew = (Mem *)sqlite3DbMallocZero(db, sizeof(Mem) * p->pCsr->nField);
  1871        if( !p->aNew ){
  1872          rc = SQLITE_NOMEM;
  1873          goto preupdate_new_out;
  1874        }
  1875      }
  1876      assert( iIdx>=0 && iIdx<p->pCsr->nField );
  1877      pMem = &p->aNew[iIdx];
  1878      if( pMem->flags==0 ){
  1879        if( iIdx==p->pTab->iPKey ){
  1880          sqlite3VdbeMemSetInt64(pMem, p->iKey2);
  1881        }else{
  1882          rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iIdx]);
  1883          if( rc!=SQLITE_OK ) goto preupdate_new_out;
  1884        }
  1885      }
  1886    }
  1887    *ppValue = pMem;
  1888  
  1889   preupdate_new_out:
  1890    sqlite3Error(db, rc);
  1891    return sqlite3ApiExit(db, rc);
  1892  }
  1893  #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
  1894  
  1895  #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
  1896  /*
  1897  ** Return status data for a single loop within query pStmt.
  1898  */
  1899  int sqlite3_stmt_scanstatus(
  1900    sqlite3_stmt *pStmt,            /* Prepared statement being queried */
  1901    int idx,                        /* Index of loop to report on */
  1902    int iScanStatusOp,              /* Which metric to return */
  1903    void *pOut                      /* OUT: Write the answer here */
  1904  ){
  1905    Vdbe *p = (Vdbe*)pStmt;
  1906    ScanStatus *pScan;
  1907    if( idx<0 || idx>=p->nScan ) return 1;
  1908    pScan = &p->aScan[idx];
  1909    switch( iScanStatusOp ){
  1910      case SQLITE_SCANSTAT_NLOOP: {
  1911        *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
  1912        break;
  1913      }
  1914      case SQLITE_SCANSTAT_NVISIT: {
  1915        *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
  1916        break;
  1917      }
  1918      case SQLITE_SCANSTAT_EST: {
  1919        double r = 1.0;
  1920        LogEst x = pScan->nEst;
  1921        while( x<100 ){
  1922          x += 10;
  1923          r *= 0.5;
  1924        }
  1925        *(double*)pOut = r*sqlite3LogEstToInt(x);
  1926        break;
  1927      }
  1928      case SQLITE_SCANSTAT_NAME: {
  1929        *(const char**)pOut = pScan->zName;
  1930        break;
  1931      }
  1932      case SQLITE_SCANSTAT_EXPLAIN: {
  1933        if( pScan->addrExplain ){
  1934          *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z;
  1935        }else{
  1936          *(const char**)pOut = 0;
  1937        }
  1938        break;
  1939      }
  1940      case SQLITE_SCANSTAT_SELECTID: {
  1941        if( pScan->addrExplain ){
  1942          *(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
  1943        }else{
  1944          *(int*)pOut = -1;
  1945        }
  1946        break;
  1947      }
  1948      default: {
  1949        return 1;
  1950      }
  1951    }
  1952    return 0;
  1953  }
  1954  
  1955  /*
  1956  ** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
  1957  */
  1958  void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
  1959    Vdbe *p = (Vdbe*)pStmt;
  1960    memset(p->anExec, 0, p->nOp * sizeof(i64));
  1961  }
  1962  #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */