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