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