extensions/sqlite/sqlite-source/vdbeapi.c
author Asher Baker <asherkin@limetech.org>
Sat Apr 14 01:12:24 2012 +0100 (2012-04-14)
changeset 3477 8762e8fcbc50
parent 1952 b7aa2b626807
permissions -rw-r--r--
Backed out changeset: 387b27fb575b (bug 5227)
     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 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 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 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 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 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 int sqlite3_value_bytes(sqlite3_value *pVal){
   110   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
   111 }
   112 int sqlite3_value_bytes16(sqlite3_value *pVal){
   113   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
   114 }
   115 double sqlite3_value_double(sqlite3_value *pVal){
   116   return sqlite3VdbeRealValue((Mem*)pVal);
   117 }
   118 int sqlite3_value_int(sqlite3_value *pVal){
   119   return sqlite3VdbeIntValue((Mem*)pVal);
   120 }
   121 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
   122   return sqlite3VdbeIntValue((Mem*)pVal);
   123 }
   124 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 const void *sqlite3_value_text16(sqlite3_value* pVal){
   129   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
   130 }
   131 const void *sqlite3_value_text16be(sqlite3_value *pVal){
   132   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
   133 }
   134 const void *sqlite3_value_text16le(sqlite3_value *pVal){
   135   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
   136 }
   137 #endif /* SQLITE_OMIT_UTF16 */
   138 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 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, z, n, 0, xDel);
   155 }
   156 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 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 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, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
   170 }
   171 #endif
   172 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 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 void sqlite3_result_null(sqlite3_context *pCtx){
   181   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
   182   sqlite3VdbeMemSetNull(&pCtx->s);
   183 }
   184 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 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, z, n, SQLITE_UTF16NATIVE, xDel);
   202 }
   203 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, z, n, SQLITE_UTF16BE, xDel);
   211 }
   212 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, z, n, SQLITE_UTF16LE, xDel);
   220 }
   221 #endif /* SQLITE_OMIT_UTF16 */
   222 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 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 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 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 that malloc() has not failed */
   259   db = p->db;
   260   assert( !db->mallocFailed );
   261 
   262   if( p==0 || p->magic!=VDBE_MAGIC_RUN ){
   263     return SQLITE_MISUSE;
   264   }
   265   if( p->aborted ){
   266     return SQLITE_ABORT;
   267   }
   268   if( p->pc<=0 && p->expired ){
   269     if( p->rc==SQLITE_OK ){
   270       p->rc = SQLITE_SCHEMA;
   271     }
   272     rc = SQLITE_ERROR;
   273     goto end_of_step;
   274   }
   275   if( sqlite3SafetyOn(db) ){
   276     p->rc = SQLITE_MISUSE;
   277     return SQLITE_MISUSE;
   278   }
   279   if( p->pc<0 ){
   280     /* If there are no other statements currently running, then
   281     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
   282     ** from interrupting a statement that has not yet started.
   283     */
   284     if( db->activeVdbeCnt==0 ){
   285       db->u1.isInterrupted = 0;
   286     }
   287 
   288 #ifndef SQLITE_OMIT_TRACE
   289     /* Invoke the trace callback if there is one
   290     */
   291     if( db->xTrace && !db->init.busy ){
   292       assert( p->nOp>0 );
   293       assert( p->aOp[p->nOp-1].opcode==OP_Noop );
   294       assert( p->aOp[p->nOp-1].p3!=0 );
   295       assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
   296       sqlite3SafetyOff(db);
   297       db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3);
   298       if( sqlite3SafetyOn(db) ){
   299         p->rc = SQLITE_MISUSE;
   300         return SQLITE_MISUSE;
   301       }
   302     }
   303     if( db->xProfile && !db->init.busy ){
   304       double rNow;
   305       sqlite3OsCurrentTime(db->pVfs, &rNow);
   306       p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0;
   307     }
   308 #endif
   309 
   310     /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned
   311     ** on in debugging mode.
   312     */
   313 #ifdef SQLITE_DEBUG
   314     if( (db->flags & SQLITE_SqlTrace)!=0 ){
   315       sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3);
   316     }
   317 #endif /* SQLITE_DEBUG */
   318 
   319     db->activeVdbeCnt++;
   320     p->pc = 0;
   321   }
   322 #ifndef SQLITE_OMIT_EXPLAIN
   323   if( p->explain ){
   324     rc = sqlite3VdbeList(p);
   325   }else
   326 #endif /* SQLITE_OMIT_EXPLAIN */
   327   {
   328     rc = sqlite3VdbeExec(p);
   329   }
   330 
   331   if( sqlite3SafetyOff(db) ){
   332     rc = SQLITE_MISUSE;
   333   }
   334 
   335 #ifndef SQLITE_OMIT_TRACE
   336   /* Invoke the profile callback if there is one
   337   */
   338   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){
   339     double rNow;
   340     u64 elapseTime;
   341 
   342     sqlite3OsCurrentTime(db->pVfs, &rNow);
   343     elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime;
   344     assert( p->nOp>0 );
   345     assert( p->aOp[p->nOp-1].opcode==OP_Noop );
   346     assert( p->aOp[p->nOp-1].p3!=0 );
   347     assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
   348     db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime);
   349   }
   350 #endif
   351 
   352   sqlite3Error(p->db, rc, 0);
   353   p->rc = sqlite3ApiExit(p->db, p->rc);
   354 end_of_step:
   355   assert( (rc&0xff)==rc );
   356   if( p->zSql && (rc&0xff)<SQLITE_ROW ){
   357     /* This behavior occurs if sqlite3_prepare_v2() was used to build
   358     ** the prepared statement.  Return error codes directly */
   359     sqlite3Error(p->db, p->rc, 0);
   360     return p->rc;
   361   }else{
   362     /* This is for legacy sqlite3_prepare() builds and when the code
   363     ** is SQLITE_ROW or SQLITE_DONE */
   364     return rc;
   365   }
   366 }
   367 
   368 /*
   369 ** This is the top-level implementation of sqlite3_step().  Call
   370 ** sqlite3Step() to do most of the work.  If a schema error occurs,
   371 ** call sqlite3Reprepare() and try again.
   372 */
   373 #ifdef SQLITE_OMIT_PARSER
   374 int sqlite3_step(sqlite3_stmt *pStmt){
   375   int rc;
   376   Vdbe *v;
   377   v = (Vdbe*)pStmt;
   378   sqlite3_mutex_enter(v->db->mutex);
   379   rc = sqlite3Step(v);
   380   sqlite3_mutex_leave(v->db->mutex);
   381   return rc;
   382 }
   383 #else
   384 int sqlite3_step(sqlite3_stmt *pStmt){
   385   int cnt = 0;
   386   int rc;
   387   Vdbe *v = (Vdbe*)pStmt;
   388   sqlite3_mutex_enter(v->db->mutex);
   389   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
   390          && cnt++ < 5
   391          && sqlite3Reprepare(v) ){
   392     sqlite3_reset(pStmt);
   393     v->expired = 0;
   394   }
   395   sqlite3_mutex_leave(v->db->mutex);
   396   return rc;
   397 }
   398 #endif
   399 
   400 /*
   401 ** Extract the user data from a sqlite3_context structure and return a
   402 ** pointer to it.
   403 */
   404 void *sqlite3_user_data(sqlite3_context *p){
   405   assert( p && p->pFunc );
   406   return p->pFunc->pUserData;
   407 }
   408 
   409 /*
   410 ** The following is the implementation of an SQL function that always
   411 ** fails with an error message stating that the function is used in the
   412 ** wrong context.  The sqlite3_overload_function() API might construct
   413 ** SQL function that use this routine so that the functions will exist
   414 ** for name resolution but are actually overloaded by the xFindFunction
   415 ** method of virtual tables.
   416 */
   417 void sqlite3InvalidFunction(
   418   sqlite3_context *context,  /* The function calling context */
   419   int argc,                  /* Number of arguments to the function */
   420   sqlite3_value **argv       /* Value of each argument */
   421 ){
   422   const char *zName = context->pFunc->zName;
   423   char *zErr;
   424   zErr = sqlite3MPrintf(0,
   425       "unable to use function %s in the requested context", zName);
   426   sqlite3_result_error(context, zErr, -1);
   427   sqlite3_free(zErr);
   428 }
   429 
   430 /*
   431 ** Allocate or return the aggregate context for a user function.  A new
   432 ** context is allocated on the first call.  Subsequent calls return the
   433 ** same context that was returned on prior calls.
   434 */
   435 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
   436   Mem *pMem;
   437   assert( p && p->pFunc && p->pFunc->xStep );
   438   assert( sqlite3_mutex_held(p->s.db->mutex) );
   439   pMem = p->pMem;
   440   if( (pMem->flags & MEM_Agg)==0 ){
   441     if( nByte==0 ){
   442       assert( pMem->flags==MEM_Null );
   443       pMem->z = 0;
   444     }else{
   445       pMem->flags = MEM_Agg;
   446       pMem->xDel = sqlite3_free;
   447       pMem->u.pDef = p->pFunc;
   448       if( nByte<=NBFS ){
   449         pMem->z = pMem->zShort;
   450         memset(pMem->z, 0, nByte);
   451       }else{
   452         pMem->z = sqlite3DbMallocZero(p->s.db, nByte);
   453       }
   454     }
   455   }
   456   return (void*)pMem->z;
   457 }
   458 
   459 /*
   460 ** Return the auxilary data pointer, if any, for the iArg'th argument to
   461 ** the user-function defined by pCtx.
   462 */
   463 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
   464   VdbeFunc *pVdbeFunc;
   465 
   466   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
   467   pVdbeFunc = pCtx->pVdbeFunc;
   468   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
   469     return 0;
   470   }
   471   return pVdbeFunc->apAux[iArg].pAux;
   472 }
   473 
   474 /*
   475 ** Set the auxilary data pointer and delete function, for the iArg'th
   476 ** argument to the user-function defined by pCtx. Any previous value is
   477 ** deleted by calling the delete function specified when it was set.
   478 */
   479 void sqlite3_set_auxdata(
   480   sqlite3_context *pCtx, 
   481   int iArg, 
   482   void *pAux, 
   483   void (*xDelete)(void*)
   484 ){
   485   struct AuxData *pAuxData;
   486   VdbeFunc *pVdbeFunc;
   487   if( iArg<0 ) goto failed;
   488 
   489   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
   490   pVdbeFunc = pCtx->pVdbeFunc;
   491   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
   492     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
   493     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
   494     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
   495     if( !pVdbeFunc ){
   496       goto failed;
   497     }
   498     pCtx->pVdbeFunc = pVdbeFunc;
   499     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
   500     pVdbeFunc->nAux = iArg+1;
   501     pVdbeFunc->pFunc = pCtx->pFunc;
   502   }
   503 
   504   pAuxData = &pVdbeFunc->apAux[iArg];
   505   if( pAuxData->pAux && pAuxData->xDelete ){
   506     pAuxData->xDelete(pAuxData->pAux);
   507   }
   508   pAuxData->pAux = pAux;
   509   pAuxData->xDelete = xDelete;
   510   return;
   511 
   512 failed:
   513   if( xDelete ){
   514     xDelete(pAux);
   515   }
   516 }
   517 
   518 /*
   519 ** Return the number of times the Step function of a aggregate has been 
   520 ** called.
   521 **
   522 ** This function is deprecated.  Do not use it for new code.  It is
   523 ** provide only to avoid breaking legacy code.  New aggregate function
   524 ** implementations should keep their own counts within their aggregate
   525 ** context.
   526 */
   527 int sqlite3_aggregate_count(sqlite3_context *p){
   528   assert( p && p->pFunc && p->pFunc->xStep );
   529   return p->pMem->n;
   530 }
   531 
   532 /*
   533 ** Return the number of columns in the result set for the statement pStmt.
   534 */
   535 int sqlite3_column_count(sqlite3_stmt *pStmt){
   536   Vdbe *pVm = (Vdbe *)pStmt;
   537   return pVm ? pVm->nResColumn : 0;
   538 }
   539 
   540 /*
   541 ** Return the number of values available from the current row of the
   542 ** currently executing statement pStmt.
   543 */
   544 int sqlite3_data_count(sqlite3_stmt *pStmt){
   545   Vdbe *pVm = (Vdbe *)pStmt;
   546   if( pVm==0 || !pVm->resOnStack ) return 0;
   547   return pVm->nResColumn;
   548 }
   549 
   550 
   551 /*
   552 ** Check to see if column iCol of the given statement is valid.  If
   553 ** it is, return a pointer to the Mem for the value of that column.
   554 ** If iCol is not valid, return a pointer to a Mem which has a value
   555 ** of NULL.
   556 */
   557 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
   558   Vdbe *pVm;
   559   int vals;
   560   Mem *pOut;
   561 
   562   pVm = (Vdbe *)pStmt;
   563   if( pVm && pVm->resOnStack && i<pVm->nResColumn && i>=0 ){
   564     sqlite3_mutex_enter(pVm->db->mutex);
   565     vals = sqlite3_data_count(pStmt);
   566     pOut = &pVm->pTos[(1-vals)+i];
   567   }else{
   568     static const Mem nullMem = {{0}, 0.0, 0, "", 0, MEM_Null, SQLITE_NULL };
   569     if( pVm->db ){
   570       sqlite3_mutex_enter(pVm->db->mutex);
   571       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
   572     }
   573     pOut = (Mem*)&nullMem;
   574   }
   575   return pOut;
   576 }
   577 
   578 /*
   579 ** This function is called after invoking an sqlite3_value_XXX function on a 
   580 ** column value (i.e. a value returned by evaluating an SQL expression in the
   581 ** select list of a SELECT statement) that may cause a malloc() failure. If 
   582 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
   583 ** code of statement pStmt set to SQLITE_NOMEM.
   584 **
   585 ** Specifically, this is called from within:
   586 **
   587 **     sqlite3_column_int()
   588 **     sqlite3_column_int64()
   589 **     sqlite3_column_text()
   590 **     sqlite3_column_text16()
   591 **     sqlite3_column_real()
   592 **     sqlite3_column_bytes()
   593 **     sqlite3_column_bytes16()
   594 **
   595 ** But not for sqlite3_column_blob(), which never calls malloc().
   596 */
   597 static void columnMallocFailure(sqlite3_stmt *pStmt)
   598 {
   599   /* If malloc() failed during an encoding conversion within an
   600   ** sqlite3_column_XXX API, then set the return code of the statement to
   601   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
   602   ** and _finalize() will return NOMEM.
   603   */
   604   Vdbe *p = (Vdbe *)pStmt;
   605   if( p ){
   606     p->rc = sqlite3ApiExit(p->db, p->rc);
   607     sqlite3_mutex_leave(p->db->mutex);
   608   }
   609 }
   610 
   611 /**************************** sqlite3_column_  *******************************
   612 ** The following routines are used to access elements of the current row
   613 ** in the result set.
   614 */
   615 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
   616   const void *val;
   617   val = sqlite3_value_blob( columnMem(pStmt,i) );
   618   /* Even though there is no encoding conversion, value_blob() might
   619   ** need to call malloc() to expand the result of a zeroblob() 
   620   ** expression. 
   621   */
   622   columnMallocFailure(pStmt);
   623   return val;
   624 }
   625 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
   626   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
   627   columnMallocFailure(pStmt);
   628   return val;
   629 }
   630 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
   631   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
   632   columnMallocFailure(pStmt);
   633   return val;
   634 }
   635 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
   636   double val = sqlite3_value_double( columnMem(pStmt,i) );
   637   columnMallocFailure(pStmt);
   638   return val;
   639 }
   640 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
   641   int val = sqlite3_value_int( columnMem(pStmt,i) );
   642   columnMallocFailure(pStmt);
   643   return val;
   644 }
   645 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
   646   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
   647   columnMallocFailure(pStmt);
   648   return val;
   649 }
   650 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
   651   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
   652   columnMallocFailure(pStmt);
   653   return val;
   654 }
   655 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
   656   sqlite3_value *pOut = columnMem(pStmt, i);
   657   columnMallocFailure(pStmt);
   658   return pOut;
   659 }
   660 #ifndef SQLITE_OMIT_UTF16
   661 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
   662   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
   663   columnMallocFailure(pStmt);
   664   return val;
   665 }
   666 #endif /* SQLITE_OMIT_UTF16 */
   667 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
   668   int iType = sqlite3_value_type( columnMem(pStmt,i) );
   669   columnMallocFailure(pStmt);
   670   return iType;
   671 }
   672 
   673 /* The following function is experimental and subject to change or
   674 ** removal */
   675 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
   676 **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
   677 **}
   678 */
   679 
   680 /*
   681 ** Convert the N-th element of pStmt->pColName[] into a string using
   682 ** xFunc() then return that string.  If N is out of range, return 0.
   683 **
   684 ** There are up to 5 names for each column.  useType determines which
   685 ** name is returned.  Here are the names:
   686 **
   687 **    0      The column name as it should be displayed for output
   688 **    1      The datatype name for the column
   689 **    2      The name of the database that the column derives from
   690 **    3      The name of the table that the column derives from
   691 **    4      The name of the table column that the result column derives from
   692 **
   693 ** If the result is not a simple column reference (if it is an expression
   694 ** or a constant) then useTypes 2, 3, and 4 return NULL.
   695 */
   696 static const void *columnName(
   697   sqlite3_stmt *pStmt,
   698   int N,
   699   const void *(*xFunc)(Mem*),
   700   int useType
   701 ){
   702   const void *ret = 0;
   703   Vdbe *p = (Vdbe *)pStmt;
   704   int n;
   705   
   706 
   707   if( p!=0 ){
   708     n = sqlite3_column_count(pStmt);
   709     if( N<n && N>=0 ){
   710       N += useType*n;
   711       sqlite3_mutex_enter(p->db->mutex);
   712       ret = xFunc(&p->aColName[N]);
   713 
   714       /* A malloc may have failed inside of the xFunc() call. If this
   715       ** is the case, clear the mallocFailed flag and return NULL.
   716       */
   717       if( p->db && p->db->mallocFailed ){
   718         p->db->mallocFailed = 0;
   719         ret = 0;
   720       }
   721       sqlite3_mutex_leave(p->db->mutex);
   722     }
   723   }
   724   return ret;
   725 }
   726 
   727 /*
   728 ** Return the name of the Nth column of the result set returned by SQL
   729 ** statement pStmt.
   730 */
   731 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
   732   return columnName(
   733       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
   734 }
   735 #ifndef SQLITE_OMIT_UTF16
   736 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
   737   return columnName(
   738       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
   739 }
   740 #endif
   741 
   742 /*
   743 ** Return the column declaration type (if applicable) of the 'i'th column
   744 ** of the result set of SQL statement pStmt.
   745 */
   746 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
   747   return columnName(
   748       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
   749 }
   750 #ifndef SQLITE_OMIT_UTF16
   751 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
   752   return columnName(
   753       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
   754 }
   755 #endif /* SQLITE_OMIT_UTF16 */
   756 
   757 #ifdef SQLITE_ENABLE_COLUMN_METADATA
   758 /*
   759 ** Return the name of the database from which a result column derives.
   760 ** NULL is returned if the result column is an expression or constant or
   761 ** anything else which is not an unabiguous reference to a database column.
   762 */
   763 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
   764   return columnName(
   765       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
   766 }
   767 #ifndef SQLITE_OMIT_UTF16
   768 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
   769   return columnName(
   770       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
   771 }
   772 #endif /* SQLITE_OMIT_UTF16 */
   773 
   774 /*
   775 ** Return the name of the table from which a result column derives.
   776 ** NULL is returned if the result column is an expression or constant or
   777 ** anything else which is not an unabiguous reference to a database column.
   778 */
   779 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
   780   return columnName(
   781       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
   782 }
   783 #ifndef SQLITE_OMIT_UTF16
   784 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
   785   return columnName(
   786       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
   787 }
   788 #endif /* SQLITE_OMIT_UTF16 */
   789 
   790 /*
   791 ** Return the name of the table column from which a result column derives.
   792 ** NULL is returned if the result column is an expression or constant or
   793 ** anything else which is not an unabiguous reference to a database column.
   794 */
   795 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
   796   return columnName(
   797       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
   798 }
   799 #ifndef SQLITE_OMIT_UTF16
   800 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
   801   return columnName(
   802       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
   803 }
   804 #endif /* SQLITE_OMIT_UTF16 */
   805 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
   806 
   807 
   808 /******************************* sqlite3_bind_  ***************************
   809 ** 
   810 ** Routines used to attach values to wildcards in a compiled SQL statement.
   811 */
   812 /*
   813 ** Unbind the value bound to variable i in virtual machine p. This is the 
   814 ** the same as binding a NULL value to the column. If the "i" parameter is
   815 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
   816 **
   817 ** The error code stored in database p->db is overwritten with the return
   818 ** value in any case.
   819 */
   820 static int vdbeUnbind(Vdbe *p, int i){
   821   Mem *pVar;
   822   if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
   823     if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0);
   824     return SQLITE_MISUSE;
   825   }
   826   if( i<1 || i>p->nVar ){
   827     sqlite3Error(p->db, SQLITE_RANGE, 0);
   828     return SQLITE_RANGE;
   829   }
   830   i--;
   831   pVar = &p->aVar[i];
   832   sqlite3VdbeMemRelease(pVar);
   833   pVar->flags = MEM_Null;
   834   sqlite3Error(p->db, SQLITE_OK, 0);
   835   return SQLITE_OK;
   836 }
   837 
   838 /*
   839 ** Bind a text or BLOB value.
   840 */
   841 static int bindText(
   842   sqlite3_stmt *pStmt,   /* The statement to bind against */
   843   int i,                 /* Index of the parameter to bind */
   844   const void *zData,     /* Pointer to the data to be bound */
   845   int nData,             /* Number of bytes of data to be bound */
   846   void (*xDel)(void*),   /* Destructor for the data */
   847   int encoding           /* Encoding for the data */
   848 ){
   849   Vdbe *p = (Vdbe *)pStmt;
   850   Mem *pVar;
   851   int rc;
   852 
   853   if( p==0 ){
   854     return SQLITE_MISUSE;
   855   }
   856   sqlite3_mutex_enter(p->db->mutex);
   857   rc = vdbeUnbind(p, i);
   858   if( rc==SQLITE_OK && zData!=0 ){
   859     pVar = &p->aVar[i-1];
   860     rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
   861     if( rc==SQLITE_OK && encoding!=0 ){
   862       rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
   863     }
   864     sqlite3Error(p->db, rc, 0);
   865     rc = sqlite3ApiExit(p->db, rc);
   866   }
   867   sqlite3_mutex_leave(p->db->mutex);
   868   return rc;
   869 }
   870 
   871 
   872 /*
   873 ** Bind a blob value to an SQL statement variable.
   874 */
   875 int sqlite3_bind_blob(
   876   sqlite3_stmt *pStmt, 
   877   int i, 
   878   const void *zData, 
   879   int nData, 
   880   void (*xDel)(void*)
   881 ){
   882   return bindText(pStmt, i, zData, nData, xDel, 0);
   883 }
   884 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
   885   int rc;
   886   Vdbe *p = (Vdbe *)pStmt;
   887   sqlite3_mutex_enter(p->db->mutex);
   888   rc = vdbeUnbind(p, i);
   889   if( rc==SQLITE_OK ){
   890     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
   891   }
   892   sqlite3_mutex_leave(p->db->mutex);
   893   return rc;
   894 }
   895 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
   896   return sqlite3_bind_int64(p, i, (i64)iValue);
   897 }
   898 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
   899   int rc;
   900   Vdbe *p = (Vdbe *)pStmt;
   901   sqlite3_mutex_enter(p->db->mutex);
   902   rc = vdbeUnbind(p, i);
   903   if( rc==SQLITE_OK ){
   904     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
   905   }
   906   sqlite3_mutex_leave(p->db->mutex);
   907   return rc;
   908 }
   909 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
   910   int rc;
   911   Vdbe *p = (Vdbe*)pStmt;
   912   sqlite3_mutex_enter(p->db->mutex);
   913   rc = vdbeUnbind(p, i);
   914   sqlite3_mutex_leave(p->db->mutex);
   915   return rc;
   916 }
   917 int sqlite3_bind_text( 
   918   sqlite3_stmt *pStmt, 
   919   int i, 
   920   const char *zData, 
   921   int nData, 
   922   void (*xDel)(void*)
   923 ){
   924   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
   925 }
   926 #ifndef SQLITE_OMIT_UTF16
   927 int sqlite3_bind_text16(
   928   sqlite3_stmt *pStmt, 
   929   int i, 
   930   const void *zData, 
   931   int nData, 
   932   void (*xDel)(void*)
   933 ){
   934   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
   935 }
   936 #endif /* SQLITE_OMIT_UTF16 */
   937 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
   938   int rc;
   939   Vdbe *p = (Vdbe *)pStmt;
   940   sqlite3_mutex_enter(p->db->mutex);
   941   rc = vdbeUnbind(p, i);
   942   if( rc==SQLITE_OK ){
   943     rc = sqlite3VdbeMemCopy(&p->aVar[i-1], pValue);
   944   }
   945   sqlite3_mutex_leave(p->db->mutex);
   946   return rc;
   947 }
   948 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
   949   int rc;
   950   Vdbe *p = (Vdbe *)pStmt;
   951   sqlite3_mutex_enter(p->db->mutex);
   952   rc = vdbeUnbind(p, i);
   953   if( rc==SQLITE_OK ){
   954     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
   955   }
   956   sqlite3_mutex_leave(p->db->mutex);
   957   return rc;
   958 }
   959 
   960 /*
   961 ** Return the number of wildcards that can be potentially bound to.
   962 ** This routine is added to support DBD::SQLite.  
   963 */
   964 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
   965   Vdbe *p = (Vdbe*)pStmt;
   966   return p ? p->nVar : 0;
   967 }
   968 
   969 /*
   970 ** Create a mapping from variable numbers to variable names
   971 ** in the Vdbe.azVar[] array, if such a mapping does not already
   972 ** exist.
   973 */
   974 static void createVarMap(Vdbe *p){
   975   if( !p->okVar ){
   976     sqlite3_mutex_enter(p->db->mutex);
   977     if( !p->okVar ){
   978       int j;
   979       Op *pOp;
   980       for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
   981         if( pOp->opcode==OP_Variable ){
   982           assert( pOp->p1>0 && pOp->p1<=p->nVar );
   983           p->azVar[pOp->p1-1] = pOp->p3;
   984         }
   985       }
   986       p->okVar = 1;
   987     }
   988     sqlite3_mutex_leave(p->db->mutex);
   989   }
   990 }
   991 
   992 /*
   993 ** Return the name of a wildcard parameter.  Return NULL if the index
   994 ** is out of range or if the wildcard is unnamed.
   995 **
   996 ** The result is always UTF-8.
   997 */
   998 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
   999   Vdbe *p = (Vdbe*)pStmt;
  1000   if( p==0 || i<1 || i>p->nVar ){
  1001     return 0;
  1002   }
  1003   createVarMap(p);
  1004   return p->azVar[i-1];
  1005 }
  1006 
  1007 /*
  1008 ** Given a wildcard parameter name, return the index of the variable
  1009 ** with that name.  If there is no variable with the given name,
  1010 ** return 0.
  1011 */
  1012 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
  1013   Vdbe *p = (Vdbe*)pStmt;
  1014   int i;
  1015   if( p==0 ){
  1016     return 0;
  1017   }
  1018   createVarMap(p); 
  1019   if( zName ){
  1020     for(i=0; i<p->nVar; i++){
  1021       const char *z = p->azVar[i];
  1022       if( z && strcmp(z,zName)==0 ){
  1023         return i+1;
  1024       }
  1025     }
  1026   }
  1027   return 0;
  1028 }
  1029 
  1030 /*
  1031 ** Transfer all bindings from the first statement over to the second.
  1032 ** If the two statements contain a different number of bindings, then
  1033 ** an SQLITE_ERROR is returned.
  1034 */
  1035 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
  1036   Vdbe *pFrom = (Vdbe*)pFromStmt;
  1037   Vdbe *pTo = (Vdbe*)pToStmt;
  1038   int i, rc = SQLITE_OK;
  1039   if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT)
  1040     || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT)
  1041     || pTo->db!=pFrom->db ){
  1042     return SQLITE_MISUSE;
  1043   }
  1044   if( pFrom->nVar!=pTo->nVar ){
  1045     return SQLITE_ERROR;
  1046   }
  1047   sqlite3_mutex_enter(pTo->db->mutex);
  1048   for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){
  1049     sqlite3MallocDisallow();
  1050     rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
  1051     sqlite3MallocAllow();
  1052   }
  1053   sqlite3_mutex_leave(pTo->db->mutex);
  1054   assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
  1055   return rc;
  1056 }
  1057 
  1058 /*
  1059 ** Return the sqlite3* database handle to which the prepared statement given
  1060 ** in the argument belongs.  This is the same database handle that was
  1061 ** the first argument to the sqlite3_prepare() that was used to create
  1062 ** the statement in the first place.
  1063 */
  1064 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
  1065   return pStmt ? ((Vdbe*)pStmt)->db : 0;
  1066 }