xref: /sqlite-3.40.0/src/vdbeapi.c (revision cc285c5a)
1 /*
2 ** 2004 May 26
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 **
13 ** This file contains code use to implement APIs that are part of the
14 ** VDBE.
15 */
16 #include "sqliteInt.h"
17 #include "vdbeInt.h"
18 
19 #ifndef SQLITE_OMIT_DEPRECATED
20 /*
21 ** Return TRUE (non-zero) of the statement supplied as an argument needs
22 ** to be recompiled.  A statement needs to be recompiled whenever the
23 ** execution environment changes in a way that would alter the program
24 ** that sqlite3_prepare() generates.  For example, if new functions or
25 ** collating sequences are registered or if an authorizer function is
26 ** added or changed.
27 */
28 int sqlite3_expired(sqlite3_stmt *pStmt){
29   Vdbe *p = (Vdbe*)pStmt;
30   return p==0 || p->expired;
31 }
32 #endif
33 
34 /*
35 ** Check on a Vdbe to make sure it has not been finalized.  Log
36 ** an error and return true if it has been finalized (or is otherwise
37 ** invalid).  Return false if it is ok.
38 */
39 static int vdbeSafety(Vdbe *p){
40   if( p->db==0 ){
41     sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
42     return 1;
43   }else{
44     return 0;
45   }
46 }
47 static int vdbeSafetyNotNull(Vdbe *p){
48   if( p==0 ){
49     sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
50     return 1;
51   }else{
52     return vdbeSafety(p);
53   }
54 }
55 
56 /*
57 ** The following routine destroys a virtual machine that is created by
58 ** the sqlite3_compile() routine. The integer returned is an SQLITE_
59 ** success/failure code that describes the result of executing the virtual
60 ** machine.
61 **
62 ** This routine sets the error code and string returned by
63 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
64 */
65 int sqlite3_finalize(sqlite3_stmt *pStmt){
66   int rc;
67   if( pStmt==0 ){
68     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
69     ** pointer is a harmless no-op. */
70     rc = SQLITE_OK;
71   }else{
72     Vdbe *v = (Vdbe*)pStmt;
73     sqlite3 *db = v->db;
74     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
75     sqlite3_mutex_enter(db->mutex);
76     rc = sqlite3VdbeFinalize(v);
77     rc = sqlite3ApiExit(db, rc);
78     sqlite3LeaveMutexAndCloseZombie(db);
79   }
80   return rc;
81 }
82 
83 /*
84 ** Terminate the current execution of an SQL statement and reset it
85 ** back to its starting state so that it can be reused. A success code from
86 ** the prior execution is returned.
87 **
88 ** This routine sets the error code and string returned by
89 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
90 */
91 int sqlite3_reset(sqlite3_stmt *pStmt){
92   int rc;
93   if( pStmt==0 ){
94     rc = SQLITE_OK;
95   }else{
96     Vdbe *v = (Vdbe*)pStmt;
97     sqlite3_mutex_enter(v->db->mutex);
98     rc = sqlite3VdbeReset(v);
99     sqlite3VdbeRewind(v);
100     assert( (rc & (v->db->errMask))==rc );
101     rc = sqlite3ApiExit(v->db, rc);
102     sqlite3_mutex_leave(v->db->mutex);
103   }
104   return rc;
105 }
106 
107 /*
108 ** Set all the parameters in the compiled SQL statement to NULL.
109 */
110 int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
111   int i;
112   int rc = SQLITE_OK;
113   Vdbe *p = (Vdbe*)pStmt;
114 #if SQLITE_THREADSAFE
115   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
116 #endif
117   sqlite3_mutex_enter(mutex);
118   for(i=0; i<p->nVar; i++){
119     sqlite3VdbeMemRelease(&p->aVar[i]);
120     p->aVar[i].flags = MEM_Null;
121   }
122   if( p->isPrepareV2 && p->expmask ){
123     p->expired = 1;
124   }
125   sqlite3_mutex_leave(mutex);
126   return rc;
127 }
128 
129 
130 /**************************** sqlite3_value_  *******************************
131 ** The following routines extract information from a Mem or sqlite3_value
132 ** structure.
133 */
134 const void *sqlite3_value_blob(sqlite3_value *pVal){
135   Mem *p = (Mem*)pVal;
136   if( p->flags & (MEM_Blob|MEM_Str) ){
137     sqlite3VdbeMemExpandBlob(p);
138     p->flags |= MEM_Blob;
139     return p->n ? p->z : 0;
140   }else{
141     return sqlite3_value_text(pVal);
142   }
143 }
144 int sqlite3_value_bytes(sqlite3_value *pVal){
145   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
146 }
147 int sqlite3_value_bytes16(sqlite3_value *pVal){
148   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
149 }
150 double sqlite3_value_double(sqlite3_value *pVal){
151   return sqlite3VdbeRealValue((Mem*)pVal);
152 }
153 int sqlite3_value_int(sqlite3_value *pVal){
154   return (int)sqlite3VdbeIntValue((Mem*)pVal);
155 }
156 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
157   return sqlite3VdbeIntValue((Mem*)pVal);
158 }
159 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
160   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
161 }
162 #ifndef SQLITE_OMIT_UTF16
163 const void *sqlite3_value_text16(sqlite3_value* pVal){
164   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
165 }
166 const void *sqlite3_value_text16be(sqlite3_value *pVal){
167   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
168 }
169 const void *sqlite3_value_text16le(sqlite3_value *pVal){
170   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
171 }
172 #endif /* SQLITE_OMIT_UTF16 */
173 /* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five
174 ** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating
175 ** point number string BLOB NULL
176 */
177 int sqlite3_value_type(sqlite3_value* pVal){
178   static const u8 aType[] = {
179      SQLITE_BLOB,     /* 0x00 */
180      SQLITE_NULL,     /* 0x01 */
181      SQLITE_TEXT,     /* 0x02 */
182      SQLITE_NULL,     /* 0x03 */
183      SQLITE_INTEGER,  /* 0x04 */
184      SQLITE_NULL,     /* 0x05 */
185      SQLITE_INTEGER,  /* 0x06 */
186      SQLITE_NULL,     /* 0x07 */
187      SQLITE_FLOAT,    /* 0x08 */
188      SQLITE_NULL,     /* 0x09 */
189      SQLITE_FLOAT,    /* 0x0a */
190      SQLITE_NULL,     /* 0x0b */
191      SQLITE_INTEGER,  /* 0x0c */
192      SQLITE_NULL,     /* 0x0d */
193      SQLITE_INTEGER,  /* 0x0e */
194      SQLITE_NULL,     /* 0x0f */
195      SQLITE_BLOB,     /* 0x10 */
196      SQLITE_NULL,     /* 0x11 */
197      SQLITE_TEXT,     /* 0x12 */
198      SQLITE_NULL,     /* 0x13 */
199      SQLITE_INTEGER,  /* 0x14 */
200      SQLITE_NULL,     /* 0x15 */
201      SQLITE_INTEGER,  /* 0x16 */
202      SQLITE_NULL,     /* 0x17 */
203      SQLITE_FLOAT,    /* 0x18 */
204      SQLITE_NULL,     /* 0x19 */
205      SQLITE_FLOAT,    /* 0x1a */
206      SQLITE_NULL,     /* 0x1b */
207      SQLITE_INTEGER,  /* 0x1c */
208      SQLITE_NULL,     /* 0x1d */
209      SQLITE_INTEGER,  /* 0x1e */
210      SQLITE_NULL,     /* 0x1f */
211   };
212   return aType[pVal->flags&MEM_AffMask];
213 }
214 
215 /**************************** sqlite3_result_  *******************************
216 ** The following routines are used by user-defined functions to specify
217 ** the function result.
218 **
219 ** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the
220 ** result as a string or blob but if the string or blob is too large, it
221 ** then sets the error code to SQLITE_TOOBIG
222 **
223 ** The invokeValueDestructor(P,X) routine invokes destructor function X()
224 ** on value P is not going to be used and need to be destroyed.
225 */
226 static void setResultStrOrError(
227   sqlite3_context *pCtx,  /* Function context */
228   const char *z,          /* String pointer */
229   int n,                  /* Bytes in string, or negative */
230   u8 enc,                 /* Encoding of z.  0 for BLOBs */
231   void (*xDel)(void*)     /* Destructor function */
232 ){
233   if( sqlite3VdbeMemSetStr(pCtx->pOut, z, n, enc, xDel)==SQLITE_TOOBIG ){
234     sqlite3_result_error_toobig(pCtx);
235   }
236 }
237 static int invokeValueDestructor(
238   const void *p,             /* Value to destroy */
239   void (*xDel)(void*),       /* The destructor */
240   sqlite3_context *pCtx      /* Set a SQLITE_TOOBIG error if no NULL */
241 ){
242   assert( xDel!=SQLITE_DYNAMIC );
243   if( xDel==0 ){
244     /* noop */
245   }else if( xDel==SQLITE_TRANSIENT ){
246     /* noop */
247   }else{
248     xDel((void*)p);
249   }
250   if( pCtx ) sqlite3_result_error_toobig(pCtx);
251   return SQLITE_TOOBIG;
252 }
253 void sqlite3_result_blob(
254   sqlite3_context *pCtx,
255   const void *z,
256   int n,
257   void (*xDel)(void *)
258 ){
259   assert( n>=0 );
260   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
261   setResultStrOrError(pCtx, z, n, 0, xDel);
262 }
263 void sqlite3_result_blob64(
264   sqlite3_context *pCtx,
265   const void *z,
266   sqlite3_uint64 n,
267   void (*xDel)(void *)
268 ){
269   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
270   assert( xDel!=SQLITE_DYNAMIC );
271   if( n>0x7fffffff ){
272     (void)invokeValueDestructor(z, xDel, pCtx);
273   }else{
274     setResultStrOrError(pCtx, z, (int)n, 0, xDel);
275   }
276 }
277 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
278   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
279   sqlite3VdbeMemSetDouble(pCtx->pOut, rVal);
280 }
281 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
282   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
283   pCtx->isError = SQLITE_ERROR;
284   pCtx->fErrorOrAux = 1;
285   sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
286 }
287 #ifndef SQLITE_OMIT_UTF16
288 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
289   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
290   pCtx->isError = SQLITE_ERROR;
291   pCtx->fErrorOrAux = 1;
292   sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
293 }
294 #endif
295 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
296   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
297   sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal);
298 }
299 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
300   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
301   sqlite3VdbeMemSetInt64(pCtx->pOut, iVal);
302 }
303 void sqlite3_result_null(sqlite3_context *pCtx){
304   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
305   sqlite3VdbeMemSetNull(pCtx->pOut);
306 }
307 void sqlite3_result_text(
308   sqlite3_context *pCtx,
309   const char *z,
310   int n,
311   void (*xDel)(void *)
312 ){
313   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
314   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
315 }
316 void sqlite3_result_text64(
317   sqlite3_context *pCtx,
318   const char *z,
319   sqlite3_uint64 n,
320   void (*xDel)(void *),
321   unsigned char enc
322 ){
323   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
324   assert( xDel!=SQLITE_DYNAMIC );
325   if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
326   if( n>0x7fffffff ){
327     (void)invokeValueDestructor(z, xDel, pCtx);
328   }else{
329     setResultStrOrError(pCtx, z, (int)n, enc, xDel);
330   }
331 }
332 #ifndef SQLITE_OMIT_UTF16
333 void sqlite3_result_text16(
334   sqlite3_context *pCtx,
335   const void *z,
336   int n,
337   void (*xDel)(void *)
338 ){
339   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
340   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
341 }
342 void sqlite3_result_text16be(
343   sqlite3_context *pCtx,
344   const void *z,
345   int n,
346   void (*xDel)(void *)
347 ){
348   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
349   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
350 }
351 void sqlite3_result_text16le(
352   sqlite3_context *pCtx,
353   const void *z,
354   int n,
355   void (*xDel)(void *)
356 ){
357   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
358   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
359 }
360 #endif /* SQLITE_OMIT_UTF16 */
361 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
362   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
363   sqlite3VdbeMemCopy(pCtx->pOut, pValue);
364 }
365 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
366   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
367   sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n);
368 }
369 void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
370   pCtx->isError = errCode;
371   pCtx->fErrorOrAux = 1;
372 #ifdef SQLITE_DEBUG
373   pCtx->pVdbe->rcApp = errCode;
374 #endif
375   if( pCtx->pOut->flags & MEM_Null ){
376     sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1,
377                          SQLITE_UTF8, SQLITE_STATIC);
378   }
379 }
380 
381 /* Force an SQLITE_TOOBIG error. */
382 void sqlite3_result_error_toobig(sqlite3_context *pCtx){
383   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
384   pCtx->isError = SQLITE_TOOBIG;
385   pCtx->fErrorOrAux = 1;
386   sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1,
387                        SQLITE_UTF8, SQLITE_STATIC);
388 }
389 
390 /* An SQLITE_NOMEM error. */
391 void sqlite3_result_error_nomem(sqlite3_context *pCtx){
392   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
393   sqlite3VdbeMemSetNull(pCtx->pOut);
394   pCtx->isError = SQLITE_NOMEM;
395   pCtx->fErrorOrAux = 1;
396   pCtx->pOut->db->mallocFailed = 1;
397 }
398 
399 /*
400 ** This function is called after a transaction has been committed. It
401 ** invokes callbacks registered with sqlite3_wal_hook() as required.
402 */
403 static int doWalCallbacks(sqlite3 *db){
404   int rc = SQLITE_OK;
405 #ifndef SQLITE_OMIT_WAL
406   int i;
407   for(i=0; i<db->nDb; i++){
408     Btree *pBt = db->aDb[i].pBt;
409     if( pBt ){
410       int nEntry;
411       sqlite3BtreeEnter(pBt);
412       nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
413       sqlite3BtreeLeave(pBt);
414       if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
415         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
416       }
417     }
418   }
419 #endif
420   return rc;
421 }
422 
423 /*
424 ** Execute the statement pStmt, either until a row of data is ready, the
425 ** statement is completely executed or an error occurs.
426 **
427 ** This routine implements the bulk of the logic behind the sqlite_step()
428 ** API.  The only thing omitted is the automatic recompile if a
429 ** schema change has occurred.  That detail is handled by the
430 ** outer sqlite3_step() wrapper procedure.
431 */
432 static int sqlite3Step(Vdbe *p){
433   sqlite3 *db;
434   int rc;
435 
436   assert(p);
437   if( p->magic!=VDBE_MAGIC_RUN ){
438     /* We used to require that sqlite3_reset() be called before retrying
439     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
440     ** with version 3.7.0, we changed this so that sqlite3_reset() would
441     ** be called automatically instead of throwing the SQLITE_MISUSE error.
442     ** This "automatic-reset" change is not technically an incompatibility,
443     ** since any application that receives an SQLITE_MISUSE is broken by
444     ** definition.
445     **
446     ** Nevertheless, some published applications that were originally written
447     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE
448     ** returns, and those were broken by the automatic-reset change.  As a
449     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
450     ** legacy behavior of returning SQLITE_MISUSE for cases where the
451     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
452     ** or SQLITE_BUSY error.
453     */
454 #ifdef SQLITE_OMIT_AUTORESET
455     if( (rc = p->rc&0xff)==SQLITE_BUSY || rc==SQLITE_LOCKED ){
456       sqlite3_reset((sqlite3_stmt*)p);
457     }else{
458       return SQLITE_MISUSE_BKPT;
459     }
460 #else
461     sqlite3_reset((sqlite3_stmt*)p);
462 #endif
463   }
464 
465   /* Check that malloc() has not failed. If it has, return early. */
466   db = p->db;
467   if( db->mallocFailed ){
468     p->rc = SQLITE_NOMEM;
469     return SQLITE_NOMEM;
470   }
471 
472   if( p->pc<=0 && p->expired ){
473     p->rc = SQLITE_SCHEMA;
474     rc = SQLITE_ERROR;
475     goto end_of_step;
476   }
477   if( p->pc<0 ){
478     /* If there are no other statements currently running, then
479     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
480     ** from interrupting a statement that has not yet started.
481     */
482     if( db->nVdbeActive==0 ){
483       db->u1.isInterrupted = 0;
484     }
485 
486     assert( db->nVdbeWrite>0 || db->autoCommit==0
487         || (db->nDeferredCons==0 && db->nDeferredImmCons==0)
488     );
489 
490 #ifndef SQLITE_OMIT_TRACE
491     if( db->xProfile && !db->init.busy ){
492       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
493     }
494 #endif
495 
496     db->nVdbeActive++;
497     if( p->readOnly==0 ) db->nVdbeWrite++;
498     if( p->bIsReader ) db->nVdbeRead++;
499     p->pc = 0;
500   }
501 #ifdef SQLITE_DEBUG
502   p->rcApp = SQLITE_OK;
503 #endif
504 #ifndef SQLITE_OMIT_EXPLAIN
505   if( p->explain ){
506     rc = sqlite3VdbeList(p);
507   }else
508 #endif /* SQLITE_OMIT_EXPLAIN */
509   {
510     db->nVdbeExec++;
511     rc = sqlite3VdbeExec(p);
512     db->nVdbeExec--;
513   }
514 
515 #ifndef SQLITE_OMIT_TRACE
516   /* Invoke the profile callback if there is one
517   */
518   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
519     sqlite3_int64 iNow;
520     sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
521     db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
522   }
523 #endif
524 
525   if( rc==SQLITE_DONE ){
526     assert( p->rc==SQLITE_OK );
527     p->rc = doWalCallbacks(db);
528     if( p->rc!=SQLITE_OK ){
529       rc = SQLITE_ERROR;
530     }
531   }
532 
533   db->errCode = rc;
534   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
535     p->rc = SQLITE_NOMEM;
536   }
537 end_of_step:
538   /* At this point local variable rc holds the value that should be
539   ** returned if this statement was compiled using the legacy
540   ** sqlite3_prepare() interface. According to the docs, this can only
541   ** be one of the values in the first assert() below. Variable p->rc
542   ** contains the value that would be returned if sqlite3_finalize()
543   ** were called on statement p.
544   */
545   assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR
546        || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
547   );
548   assert( (p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE) || p->rc==p->rcApp );
549   if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
550     /* If this statement was prepared using sqlite3_prepare_v2(), and an
551     ** error has occurred, then return the error code in p->rc to the
552     ** caller. Set the error code in the database handle to the same value.
553     */
554     rc = sqlite3VdbeTransferError(p);
555   }
556   return (rc&db->errMask);
557 }
558 
559 /*
560 ** This is the top-level implementation of sqlite3_step().  Call
561 ** sqlite3Step() to do most of the work.  If a schema error occurs,
562 ** call sqlite3Reprepare() and try again.
563 */
564 int sqlite3_step(sqlite3_stmt *pStmt){
565   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
566   int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
567   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
568   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
569   sqlite3 *db;             /* The database connection */
570 
571   if( vdbeSafetyNotNull(v) ){
572     return SQLITE_MISUSE_BKPT;
573   }
574   db = v->db;
575   sqlite3_mutex_enter(db->mutex);
576   v->doingRerun = 0;
577   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
578          && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
579     int savedPc = v->pc;
580     rc2 = rc = sqlite3Reprepare(v);
581     if( rc!=SQLITE_OK) break;
582     sqlite3_reset(pStmt);
583     if( savedPc>=0 ) v->doingRerun = 1;
584     assert( v->expired==0 );
585   }
586   if( rc2!=SQLITE_OK ){
587     /* This case occurs after failing to recompile an sql statement.
588     ** The error message from the SQL compiler has already been loaded
589     ** into the database handle. This block copies the error message
590     ** from the database handle into the statement and sets the statement
591     ** program counter to 0 to ensure that when the statement is
592     ** finalized or reset the parser error message is available via
593     ** sqlite3_errmsg() and sqlite3_errcode().
594     */
595     const char *zErr = (const char *)sqlite3_value_text(db->pErr);
596     sqlite3DbFree(db, v->zErrMsg);
597     if( !db->mallocFailed ){
598       v->zErrMsg = sqlite3DbStrDup(db, zErr);
599       v->rc = rc2;
600     } else {
601       v->zErrMsg = 0;
602       v->rc = rc = SQLITE_NOMEM;
603     }
604   }
605   rc = sqlite3ApiExit(db, rc);
606   sqlite3_mutex_leave(db->mutex);
607   return rc;
608 }
609 
610 
611 /*
612 ** Extract the user data from a sqlite3_context structure and return a
613 ** pointer to it.
614 */
615 void *sqlite3_user_data(sqlite3_context *p){
616   assert( p && p->pFunc );
617   return p->pFunc->pUserData;
618 }
619 
620 /*
621 ** Extract the user data from a sqlite3_context structure and return a
622 ** pointer to it.
623 **
624 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
625 ** returns a copy of the pointer to the database connection (the 1st
626 ** parameter) of the sqlite3_create_function() and
627 ** sqlite3_create_function16() routines that originally registered the
628 ** application defined function.
629 */
630 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
631   assert( p && p->pFunc );
632   return p->pOut->db;
633 }
634 
635 /*
636 ** Return the current time for a statement
637 */
638 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
639   Vdbe *v = p->pVdbe;
640   int rc;
641   if( v->iCurrentTime==0 ){
642     rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, &v->iCurrentTime);
643     if( rc ) v->iCurrentTime = 0;
644   }
645   return v->iCurrentTime;
646 }
647 
648 /*
649 ** The following is the implementation of an SQL function that always
650 ** fails with an error message stating that the function is used in the
651 ** wrong context.  The sqlite3_overload_function() API might construct
652 ** SQL function that use this routine so that the functions will exist
653 ** for name resolution but are actually overloaded by the xFindFunction
654 ** method of virtual tables.
655 */
656 void sqlite3InvalidFunction(
657   sqlite3_context *context,  /* The function calling context */
658   int NotUsed,               /* Number of arguments to the function */
659   sqlite3_value **NotUsed2   /* Value of each argument */
660 ){
661   const char *zName = context->pFunc->zName;
662   char *zErr;
663   UNUSED_PARAMETER2(NotUsed, NotUsed2);
664   zErr = sqlite3_mprintf(
665       "unable to use function %s in the requested context", zName);
666   sqlite3_result_error(context, zErr, -1);
667   sqlite3_free(zErr);
668 }
669 
670 /*
671 ** Create a new aggregate context for p and return a pointer to
672 ** its pMem->z element.
673 */
674 static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nByte){
675   Mem *pMem = p->pMem;
676   assert( (pMem->flags & MEM_Agg)==0 );
677   if( nByte<=0 ){
678     sqlite3VdbeMemSetNull(pMem);
679     pMem->z = 0;
680   }else{
681     sqlite3VdbeMemClearAndResize(pMem, nByte);
682     pMem->flags = MEM_Agg;
683     pMem->u.pDef = p->pFunc;
684     if( pMem->z ){
685       memset(pMem->z, 0, nByte);
686     }
687   }
688   return (void*)pMem->z;
689 }
690 
691 /*
692 ** Allocate or return the aggregate context for a user function.  A new
693 ** context is allocated on the first call.  Subsequent calls return the
694 ** same context that was returned on prior calls.
695 */
696 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
697   assert( p && p->pFunc && p->pFunc->xStep );
698   assert( sqlite3_mutex_held(p->pOut->db->mutex) );
699   testcase( nByte<0 );
700   if( (p->pMem->flags & MEM_Agg)==0 ){
701     return createAggContext(p, nByte);
702   }else{
703     return (void*)p->pMem->z;
704   }
705 }
706 
707 /*
708 ** Return the auxiliary data pointer, if any, for the iArg'th argument to
709 ** the user-function defined by pCtx.
710 */
711 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
712   AuxData *pAuxData;
713 
714   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
715   for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
716     if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break;
717   }
718 
719   return (pAuxData ? pAuxData->pAux : 0);
720 }
721 
722 /*
723 ** Set the auxiliary data pointer and delete function, for the iArg'th
724 ** argument to the user-function defined by pCtx. Any previous value is
725 ** deleted by calling the delete function specified when it was set.
726 */
727 void sqlite3_set_auxdata(
728   sqlite3_context *pCtx,
729   int iArg,
730   void *pAux,
731   void (*xDelete)(void*)
732 ){
733   AuxData *pAuxData;
734   Vdbe *pVdbe = pCtx->pVdbe;
735 
736   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
737   if( iArg<0 ) goto failed;
738 
739   for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
740     if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break;
741   }
742   if( pAuxData==0 ){
743     pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData));
744     if( !pAuxData ) goto failed;
745     pAuxData->iOp = pCtx->iOp;
746     pAuxData->iArg = iArg;
747     pAuxData->pNext = pVdbe->pAuxData;
748     pVdbe->pAuxData = pAuxData;
749     if( pCtx->fErrorOrAux==0 ){
750       pCtx->isError = 0;
751       pCtx->fErrorOrAux = 1;
752     }
753   }else if( pAuxData->xDelete ){
754     pAuxData->xDelete(pAuxData->pAux);
755   }
756 
757   pAuxData->pAux = pAux;
758   pAuxData->xDelete = xDelete;
759   return;
760 
761 failed:
762   if( xDelete ){
763     xDelete(pAux);
764   }
765 }
766 
767 #ifndef SQLITE_OMIT_DEPRECATED
768 /*
769 ** Return the number of times the Step function of an aggregate has been
770 ** called.
771 **
772 ** This function is deprecated.  Do not use it for new code.  It is
773 ** provide only to avoid breaking legacy code.  New aggregate function
774 ** implementations should keep their own counts within their aggregate
775 ** context.
776 */
777 int sqlite3_aggregate_count(sqlite3_context *p){
778   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
779   return p->pMem->n;
780 }
781 #endif
782 
783 /*
784 ** Return the number of columns in the result set for the statement pStmt.
785 */
786 int sqlite3_column_count(sqlite3_stmt *pStmt){
787   Vdbe *pVm = (Vdbe *)pStmt;
788   return pVm ? pVm->nResColumn : 0;
789 }
790 
791 /*
792 ** Return the number of values available from the current row of the
793 ** currently executing statement pStmt.
794 */
795 int sqlite3_data_count(sqlite3_stmt *pStmt){
796   Vdbe *pVm = (Vdbe *)pStmt;
797   if( pVm==0 || pVm->pResultSet==0 ) return 0;
798   return pVm->nResColumn;
799 }
800 
801 /*
802 ** Return a pointer to static memory containing an SQL NULL value.
803 */
804 static const Mem *columnNullValue(void){
805   /* Even though the Mem structure contains an element
806   ** of type i64, on certain architectures (x86) with certain compiler
807   ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
808   ** instead of an 8-byte one. This all works fine, except that when
809   ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
810   ** that a Mem structure is located on an 8-byte boundary. To prevent
811   ** these assert()s from failing, when building with SQLITE_DEBUG defined
812   ** using gcc, we force nullMem to be 8-byte aligned using the magical
813   ** __attribute__((aligned(8))) macro.  */
814   static const Mem nullMem
815 #if defined(SQLITE_DEBUG) && defined(__GNUC__)
816     __attribute__((aligned(8)))
817 #endif
818     = {
819         /* .u          = */ {0},
820         /* .flags      = */ MEM_Null,
821         /* .enc        = */ 0,
822         /* .n          = */ 0,
823         /* .z          = */ 0,
824         /* .zMalloc    = */ 0,
825         /* .szMalloc   = */ 0,
826         /* .iPadding1  = */ 0,
827         /* .db         = */ 0,
828         /* .xDel       = */ 0,
829 #ifdef SQLITE_DEBUG
830         /* .pScopyFrom = */ 0,
831         /* .pFiller    = */ 0,
832 #endif
833       };
834   return &nullMem;
835 }
836 
837 /*
838 ** Check to see if column iCol of the given statement is valid.  If
839 ** it is, return a pointer to the Mem for the value of that column.
840 ** If iCol is not valid, return a pointer to a Mem which has a value
841 ** of NULL.
842 */
843 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
844   Vdbe *pVm;
845   Mem *pOut;
846 
847   pVm = (Vdbe *)pStmt;
848   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
849     sqlite3_mutex_enter(pVm->db->mutex);
850     pOut = &pVm->pResultSet[i];
851   }else{
852     if( pVm && ALWAYS(pVm->db) ){
853       sqlite3_mutex_enter(pVm->db->mutex);
854       sqlite3Error(pVm->db, SQLITE_RANGE);
855     }
856     pOut = (Mem*)columnNullValue();
857   }
858   return pOut;
859 }
860 
861 /*
862 ** This function is called after invoking an sqlite3_value_XXX function on a
863 ** column value (i.e. a value returned by evaluating an SQL expression in the
864 ** select list of a SELECT statement) that may cause a malloc() failure. If
865 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
866 ** code of statement pStmt set to SQLITE_NOMEM.
867 **
868 ** Specifically, this is called from within:
869 **
870 **     sqlite3_column_int()
871 **     sqlite3_column_int64()
872 **     sqlite3_column_text()
873 **     sqlite3_column_text16()
874 **     sqlite3_column_real()
875 **     sqlite3_column_bytes()
876 **     sqlite3_column_bytes16()
877 **     sqiite3_column_blob()
878 */
879 static void columnMallocFailure(sqlite3_stmt *pStmt)
880 {
881   /* If malloc() failed during an encoding conversion within an
882   ** sqlite3_column_XXX API, then set the return code of the statement to
883   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
884   ** and _finalize() will return NOMEM.
885   */
886   Vdbe *p = (Vdbe *)pStmt;
887   if( p ){
888     p->rc = sqlite3ApiExit(p->db, p->rc);
889     sqlite3_mutex_leave(p->db->mutex);
890   }
891 }
892 
893 /**************************** sqlite3_column_  *******************************
894 ** The following routines are used to access elements of the current row
895 ** in the result set.
896 */
897 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
898   const void *val;
899   val = sqlite3_value_blob( columnMem(pStmt,i) );
900   /* Even though there is no encoding conversion, value_blob() might
901   ** need to call malloc() to expand the result of a zeroblob()
902   ** expression.
903   */
904   columnMallocFailure(pStmt);
905   return val;
906 }
907 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
908   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
909   columnMallocFailure(pStmt);
910   return val;
911 }
912 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
913   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
914   columnMallocFailure(pStmt);
915   return val;
916 }
917 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
918   double val = sqlite3_value_double( columnMem(pStmt,i) );
919   columnMallocFailure(pStmt);
920   return val;
921 }
922 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
923   int val = sqlite3_value_int( columnMem(pStmt,i) );
924   columnMallocFailure(pStmt);
925   return val;
926 }
927 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
928   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
929   columnMallocFailure(pStmt);
930   return val;
931 }
932 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
933   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
934   columnMallocFailure(pStmt);
935   return val;
936 }
937 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
938   Mem *pOut = columnMem(pStmt, i);
939   if( pOut->flags&MEM_Static ){
940     pOut->flags &= ~MEM_Static;
941     pOut->flags |= MEM_Ephem;
942   }
943   columnMallocFailure(pStmt);
944   return (sqlite3_value *)pOut;
945 }
946 #ifndef SQLITE_OMIT_UTF16
947 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
948   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
949   columnMallocFailure(pStmt);
950   return val;
951 }
952 #endif /* SQLITE_OMIT_UTF16 */
953 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
954   int iType = sqlite3_value_type( columnMem(pStmt,i) );
955   columnMallocFailure(pStmt);
956   return iType;
957 }
958 
959 /*
960 ** Convert the N-th element of pStmt->pColName[] into a string using
961 ** xFunc() then return that string.  If N is out of range, return 0.
962 **
963 ** There are up to 5 names for each column.  useType determines which
964 ** name is returned.  Here are the names:
965 **
966 **    0      The column name as it should be displayed for output
967 **    1      The datatype name for the column
968 **    2      The name of the database that the column derives from
969 **    3      The name of the table that the column derives from
970 **    4      The name of the table column that the result column derives from
971 **
972 ** If the result is not a simple column reference (if it is an expression
973 ** or a constant) then useTypes 2, 3, and 4 return NULL.
974 */
975 static const void *columnName(
976   sqlite3_stmt *pStmt,
977   int N,
978   const void *(*xFunc)(Mem*),
979   int useType
980 ){
981   const void *ret;
982   Vdbe *p;
983   int n;
984   sqlite3 *db;
985 #ifdef SQLITE_ENABLE_API_ARMOR
986   if( pStmt==0 ){
987     (void)SQLITE_MISUSE_BKPT;
988     return 0;
989   }
990 #endif
991   ret = 0;
992   p = (Vdbe *)pStmt;
993   db = p->db;
994   assert( db!=0 );
995   n = sqlite3_column_count(pStmt);
996   if( N<n && N>=0 ){
997     N += useType*n;
998     sqlite3_mutex_enter(db->mutex);
999     assert( db->mallocFailed==0 );
1000     ret = xFunc(&p->aColName[N]);
1001      /* A malloc may have failed inside of the xFunc() call. If this
1002     ** is the case, clear the mallocFailed flag and return NULL.
1003     */
1004     if( db->mallocFailed ){
1005       db->mallocFailed = 0;
1006       ret = 0;
1007     }
1008     sqlite3_mutex_leave(db->mutex);
1009   }
1010   return ret;
1011 }
1012 
1013 /*
1014 ** Return the name of the Nth column of the result set returned by SQL
1015 ** statement pStmt.
1016 */
1017 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
1018   return columnName(
1019       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
1020 }
1021 #ifndef SQLITE_OMIT_UTF16
1022 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
1023   return columnName(
1024       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
1025 }
1026 #endif
1027 
1028 /*
1029 ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
1030 ** not define OMIT_DECLTYPE.
1031 */
1032 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
1033 # error "Must not define both SQLITE_OMIT_DECLTYPE \
1034          and SQLITE_ENABLE_COLUMN_METADATA"
1035 #endif
1036 
1037 #ifndef SQLITE_OMIT_DECLTYPE
1038 /*
1039 ** Return the column declaration type (if applicable) of the 'i'th column
1040 ** of the result set of SQL statement pStmt.
1041 */
1042 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
1043   return columnName(
1044       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
1045 }
1046 #ifndef SQLITE_OMIT_UTF16
1047 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
1048   return columnName(
1049       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
1050 }
1051 #endif /* SQLITE_OMIT_UTF16 */
1052 #endif /* SQLITE_OMIT_DECLTYPE */
1053 
1054 #ifdef SQLITE_ENABLE_COLUMN_METADATA
1055 /*
1056 ** Return the name of the database from which a result column derives.
1057 ** NULL is returned if the result column is an expression or constant or
1058 ** anything else which is not an unambiguous reference to a database column.
1059 */
1060 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
1061   return columnName(
1062       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
1063 }
1064 #ifndef SQLITE_OMIT_UTF16
1065 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
1066   return columnName(
1067       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
1068 }
1069 #endif /* SQLITE_OMIT_UTF16 */
1070 
1071 /*
1072 ** Return the name of the table from which a result column derives.
1073 ** NULL is returned if the result column is an expression or constant or
1074 ** anything else which is not an unambiguous reference to a database column.
1075 */
1076 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
1077   return columnName(
1078       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
1079 }
1080 #ifndef SQLITE_OMIT_UTF16
1081 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
1082   return columnName(
1083       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
1084 }
1085 #endif /* SQLITE_OMIT_UTF16 */
1086 
1087 /*
1088 ** Return the name of the table column from which a result column derives.
1089 ** NULL is returned if the result column is an expression or constant or
1090 ** anything else which is not an unambiguous reference to a database column.
1091 */
1092 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
1093   return columnName(
1094       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
1095 }
1096 #ifndef SQLITE_OMIT_UTF16
1097 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
1098   return columnName(
1099       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
1100 }
1101 #endif /* SQLITE_OMIT_UTF16 */
1102 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
1103 
1104 
1105 /******************************* sqlite3_bind_  ***************************
1106 **
1107 ** Routines used to attach values to wildcards in a compiled SQL statement.
1108 */
1109 /*
1110 ** Unbind the value bound to variable i in virtual machine p. This is the
1111 ** the same as binding a NULL value to the column. If the "i" parameter is
1112 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
1113 **
1114 ** A successful evaluation of this routine acquires the mutex on p.
1115 ** the mutex is released if any kind of error occurs.
1116 **
1117 ** The error code stored in database p->db is overwritten with the return
1118 ** value in any case.
1119 */
1120 static int vdbeUnbind(Vdbe *p, int i){
1121   Mem *pVar;
1122   if( vdbeSafetyNotNull(p) ){
1123     return SQLITE_MISUSE_BKPT;
1124   }
1125   sqlite3_mutex_enter(p->db->mutex);
1126   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
1127     sqlite3Error(p->db, SQLITE_MISUSE);
1128     sqlite3_mutex_leave(p->db->mutex);
1129     sqlite3_log(SQLITE_MISUSE,
1130         "bind on a busy prepared statement: [%s]", p->zSql);
1131     return SQLITE_MISUSE_BKPT;
1132   }
1133   if( i<1 || i>p->nVar ){
1134     sqlite3Error(p->db, SQLITE_RANGE);
1135     sqlite3_mutex_leave(p->db->mutex);
1136     return SQLITE_RANGE;
1137   }
1138   i--;
1139   pVar = &p->aVar[i];
1140   sqlite3VdbeMemRelease(pVar);
1141   pVar->flags = MEM_Null;
1142   sqlite3Error(p->db, SQLITE_OK);
1143 
1144   /* If the bit corresponding to this variable in Vdbe.expmask is set, then
1145   ** binding a new value to this variable invalidates the current query plan.
1146   **
1147   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
1148   ** parameter in the WHERE clause might influence the choice of query plan
1149   ** for a statement, then the statement will be automatically recompiled,
1150   ** as if there had been a schema change, on the first sqlite3_step() call
1151   ** following any change to the bindings of that parameter.
1152   */
1153   if( p->isPrepareV2 &&
1154      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
1155   ){
1156     p->expired = 1;
1157   }
1158   return SQLITE_OK;
1159 }
1160 
1161 /*
1162 ** Bind a text or BLOB value.
1163 */
1164 static int bindText(
1165   sqlite3_stmt *pStmt,   /* The statement to bind against */
1166   int i,                 /* Index of the parameter to bind */
1167   const void *zData,     /* Pointer to the data to be bound */
1168   int nData,             /* Number of bytes of data to be bound */
1169   void (*xDel)(void*),   /* Destructor for the data */
1170   u8 encoding            /* Encoding for the data */
1171 ){
1172   Vdbe *p = (Vdbe *)pStmt;
1173   Mem *pVar;
1174   int rc;
1175 
1176   rc = vdbeUnbind(p, i);
1177   if( rc==SQLITE_OK ){
1178     if( zData!=0 ){
1179       pVar = &p->aVar[i-1];
1180       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
1181       if( rc==SQLITE_OK && encoding!=0 ){
1182         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
1183       }
1184       sqlite3Error(p->db, rc);
1185       rc = sqlite3ApiExit(p->db, rc);
1186     }
1187     sqlite3_mutex_leave(p->db->mutex);
1188   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
1189     xDel((void*)zData);
1190   }
1191   return rc;
1192 }
1193 
1194 
1195 /*
1196 ** Bind a blob value to an SQL statement variable.
1197 */
1198 int sqlite3_bind_blob(
1199   sqlite3_stmt *pStmt,
1200   int i,
1201   const void *zData,
1202   int nData,
1203   void (*xDel)(void*)
1204 ){
1205   return bindText(pStmt, i, zData, nData, xDel, 0);
1206 }
1207 int sqlite3_bind_blob64(
1208   sqlite3_stmt *pStmt,
1209   int i,
1210   const void *zData,
1211   sqlite3_uint64 nData,
1212   void (*xDel)(void*)
1213 ){
1214   assert( xDel!=SQLITE_DYNAMIC );
1215   if( nData>0x7fffffff ){
1216     return invokeValueDestructor(zData, xDel, 0);
1217   }else{
1218     return bindText(pStmt, i, zData, (int)nData, xDel, 0);
1219   }
1220 }
1221 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
1222   int rc;
1223   Vdbe *p = (Vdbe *)pStmt;
1224   rc = vdbeUnbind(p, i);
1225   if( rc==SQLITE_OK ){
1226     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
1227     sqlite3_mutex_leave(p->db->mutex);
1228   }
1229   return rc;
1230 }
1231 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
1232   return sqlite3_bind_int64(p, i, (i64)iValue);
1233 }
1234 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
1235   int rc;
1236   Vdbe *p = (Vdbe *)pStmt;
1237   rc = vdbeUnbind(p, i);
1238   if( rc==SQLITE_OK ){
1239     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
1240     sqlite3_mutex_leave(p->db->mutex);
1241   }
1242   return rc;
1243 }
1244 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
1245   int rc;
1246   Vdbe *p = (Vdbe*)pStmt;
1247   rc = vdbeUnbind(p, i);
1248   if( rc==SQLITE_OK ){
1249     sqlite3_mutex_leave(p->db->mutex);
1250   }
1251   return rc;
1252 }
1253 int sqlite3_bind_text(
1254   sqlite3_stmt *pStmt,
1255   int i,
1256   const char *zData,
1257   int nData,
1258   void (*xDel)(void*)
1259 ){
1260   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
1261 }
1262 int sqlite3_bind_text64(
1263   sqlite3_stmt *pStmt,
1264   int i,
1265   const char *zData,
1266   sqlite3_uint64 nData,
1267   void (*xDel)(void*),
1268   unsigned char enc
1269 ){
1270   assert( xDel!=SQLITE_DYNAMIC );
1271   if( nData>0x7fffffff ){
1272     return invokeValueDestructor(zData, xDel, 0);
1273   }else{
1274     if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
1275     return bindText(pStmt, i, zData, (int)nData, xDel, enc);
1276   }
1277 }
1278 #ifndef SQLITE_OMIT_UTF16
1279 int sqlite3_bind_text16(
1280   sqlite3_stmt *pStmt,
1281   int i,
1282   const void *zData,
1283   int nData,
1284   void (*xDel)(void*)
1285 ){
1286   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
1287 }
1288 #endif /* SQLITE_OMIT_UTF16 */
1289 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
1290   int rc;
1291   switch( sqlite3_value_type((sqlite3_value*)pValue) ){
1292     case SQLITE_INTEGER: {
1293       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
1294       break;
1295     }
1296     case SQLITE_FLOAT: {
1297       rc = sqlite3_bind_double(pStmt, i, pValue->u.r);
1298       break;
1299     }
1300     case SQLITE_BLOB: {
1301       if( pValue->flags & MEM_Zero ){
1302         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
1303       }else{
1304         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
1305       }
1306       break;
1307     }
1308     case SQLITE_TEXT: {
1309       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
1310                               pValue->enc);
1311       break;
1312     }
1313     default: {
1314       rc = sqlite3_bind_null(pStmt, i);
1315       break;
1316     }
1317   }
1318   return rc;
1319 }
1320 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
1321   int rc;
1322   Vdbe *p = (Vdbe *)pStmt;
1323   rc = vdbeUnbind(p, i);
1324   if( rc==SQLITE_OK ){
1325     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
1326     sqlite3_mutex_leave(p->db->mutex);
1327   }
1328   return rc;
1329 }
1330 
1331 /*
1332 ** Return the number of wildcards that can be potentially bound to.
1333 ** This routine is added to support DBD::SQLite.
1334 */
1335 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
1336   Vdbe *p = (Vdbe*)pStmt;
1337   return p ? p->nVar : 0;
1338 }
1339 
1340 /*
1341 ** Return the name of a wildcard parameter.  Return NULL if the index
1342 ** is out of range or if the wildcard is unnamed.
1343 **
1344 ** The result is always UTF-8.
1345 */
1346 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
1347   Vdbe *p = (Vdbe*)pStmt;
1348   if( p==0 || i<1 || i>p->nzVar ){
1349     return 0;
1350   }
1351   return p->azVar[i-1];
1352 }
1353 
1354 /*
1355 ** Given a wildcard parameter name, return the index of the variable
1356 ** with that name.  If there is no variable with the given name,
1357 ** return 0.
1358 */
1359 int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
1360   int i;
1361   if( p==0 ){
1362     return 0;
1363   }
1364   if( zName ){
1365     for(i=0; i<p->nzVar; i++){
1366       const char *z = p->azVar[i];
1367       if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){
1368         return i+1;
1369       }
1370     }
1371   }
1372   return 0;
1373 }
1374 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
1375   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
1376 }
1377 
1378 /*
1379 ** Transfer all bindings from the first statement over to the second.
1380 */
1381 int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1382   Vdbe *pFrom = (Vdbe*)pFromStmt;
1383   Vdbe *pTo = (Vdbe*)pToStmt;
1384   int i;
1385   assert( pTo->db==pFrom->db );
1386   assert( pTo->nVar==pFrom->nVar );
1387   sqlite3_mutex_enter(pTo->db->mutex);
1388   for(i=0; i<pFrom->nVar; i++){
1389     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
1390   }
1391   sqlite3_mutex_leave(pTo->db->mutex);
1392   return SQLITE_OK;
1393 }
1394 
1395 #ifndef SQLITE_OMIT_DEPRECATED
1396 /*
1397 ** Deprecated external interface.  Internal/core SQLite code
1398 ** should call sqlite3TransferBindings.
1399 **
1400 ** It is misuse to call this routine with statements from different
1401 ** database connections.  But as this is a deprecated interface, we
1402 ** will not bother to check for that condition.
1403 **
1404 ** If the two statements contain a different number of bindings, then
1405 ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
1406 ** SQLITE_OK is returned.
1407 */
1408 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1409   Vdbe *pFrom = (Vdbe*)pFromStmt;
1410   Vdbe *pTo = (Vdbe*)pToStmt;
1411   if( pFrom->nVar!=pTo->nVar ){
1412     return SQLITE_ERROR;
1413   }
1414   if( pTo->isPrepareV2 && pTo->expmask ){
1415     pTo->expired = 1;
1416   }
1417   if( pFrom->isPrepareV2 && pFrom->expmask ){
1418     pFrom->expired = 1;
1419   }
1420   return sqlite3TransferBindings(pFromStmt, pToStmt);
1421 }
1422 #endif
1423 
1424 /*
1425 ** Return the sqlite3* database handle to which the prepared statement given
1426 ** in the argument belongs.  This is the same database handle that was
1427 ** the first argument to the sqlite3_prepare() that was used to create
1428 ** the statement in the first place.
1429 */
1430 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
1431   return pStmt ? ((Vdbe*)pStmt)->db : 0;
1432 }
1433 
1434 /*
1435 ** Return true if the prepared statement is guaranteed to not modify the
1436 ** database.
1437 */
1438 int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
1439   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
1440 }
1441 
1442 /*
1443 ** Return true if the prepared statement is in need of being reset.
1444 */
1445 int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
1446   Vdbe *v = (Vdbe*)pStmt;
1447   return v!=0 && v->pc>=0 && v->magic==VDBE_MAGIC_RUN;
1448 }
1449 
1450 /*
1451 ** Return a pointer to the next prepared statement after pStmt associated
1452 ** with database connection pDb.  If pStmt is NULL, return the first
1453 ** prepared statement for the database connection.  Return NULL if there
1454 ** are no more.
1455 */
1456 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
1457   sqlite3_stmt *pNext;
1458 #ifdef SQLITE_ENABLE_API_ARMOR
1459   if( !sqlite3SafetyCheckOk(pDb) ){
1460     (void)SQLITE_MISUSE_BKPT;
1461     return 0;
1462   }
1463 #endif
1464   sqlite3_mutex_enter(pDb->mutex);
1465   if( pStmt==0 ){
1466     pNext = (sqlite3_stmt*)pDb->pVdbe;
1467   }else{
1468     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
1469   }
1470   sqlite3_mutex_leave(pDb->mutex);
1471   return pNext;
1472 }
1473 
1474 /*
1475 ** Return the value of a status counter for a prepared statement
1476 */
1477 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
1478   Vdbe *pVdbe = (Vdbe*)pStmt;
1479   u32 v;
1480 #ifdef SQLITE_ENABLE_API_ARMOR
1481   if( !pStmt ){
1482     (void)SQLITE_MISUSE_BKPT;
1483     return 0;
1484   }
1485 #endif
1486   v = pVdbe->aCounter[op];
1487   if( resetFlag ) pVdbe->aCounter[op] = 0;
1488   return (int)v;
1489 }
1490 
1491 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1492 /*
1493 ** Return status data for a single loop within query pStmt.
1494 */
1495 int sqlite3_stmt_scanstatus(
1496   sqlite3_stmt *pStmt,            /* Prepared statement being queried */
1497   int idx,                        /* Index of loop to report on */
1498   int iScanStatusOp,              /* Which metric to return */
1499   void *pOut                      /* OUT: Write the answer here */
1500 ){
1501   Vdbe *p = (Vdbe*)pStmt;
1502   ScanStatus *pScan;
1503   if( idx<0 || idx>=p->nScan ) return 1;
1504   pScan = &p->aScan[idx];
1505   switch( iScanStatusOp ){
1506     case SQLITE_SCANSTAT_NLOOP: {
1507       *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
1508       break;
1509     }
1510     case SQLITE_SCANSTAT_NVISIT: {
1511       *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
1512       break;
1513     }
1514     case SQLITE_SCANSTAT_EST: {
1515       double r = 1.0;
1516       LogEst x = pScan->nEst;
1517       while( x<100 ){
1518         x += 10;
1519         r *= 0.5;
1520       }
1521       *(double*)pOut = r*sqlite3LogEstToInt(x);
1522       break;
1523     }
1524     case SQLITE_SCANSTAT_NAME: {
1525       *(const char**)pOut = pScan->zName;
1526       break;
1527     }
1528     case SQLITE_SCANSTAT_EXPLAIN: {
1529       if( pScan->addrExplain ){
1530         *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z;
1531       }else{
1532         *(const char**)pOut = 0;
1533       }
1534       break;
1535     }
1536     case SQLITE_SCANSTAT_SELECTID: {
1537       if( pScan->addrExplain ){
1538         *(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
1539       }else{
1540         *(int*)pOut = -1;
1541       }
1542       break;
1543     }
1544     default: {
1545       return 1;
1546     }
1547   }
1548   return 0;
1549 }
1550 
1551 /*
1552 ** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
1553 */
1554 void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
1555   Vdbe *p = (Vdbe*)pStmt;
1556   memset(p->anExec, 0, p->nOp * sizeof(i64));
1557 }
1558 #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
1559