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