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