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