xref: /sqlite-3.40.0/src/vdbeapi.c (revision 60176fa9)
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 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
500   assert( p && p->pFunc );
501   return p->s.db;
502 }
503 
504 /*
505 ** The following is the implementation of an SQL function that always
506 ** fails with an error message stating that the function is used in the
507 ** wrong context.  The sqlite3_overload_function() API might construct
508 ** SQL function that use this routine so that the functions will exist
509 ** for name resolution but are actually overloaded by the xFindFunction
510 ** method of virtual tables.
511 */
512 void sqlite3InvalidFunction(
513   sqlite3_context *context,  /* The function calling context */
514   int NotUsed,               /* Number of arguments to the function */
515   sqlite3_value **NotUsed2   /* Value of each argument */
516 ){
517   const char *zName = context->pFunc->zName;
518   char *zErr;
519   UNUSED_PARAMETER2(NotUsed, NotUsed2);
520   zErr = sqlite3_mprintf(
521       "unable to use function %s in the requested context", zName);
522   sqlite3_result_error(context, zErr, -1);
523   sqlite3_free(zErr);
524 }
525 
526 /*
527 ** Allocate or return the aggregate context for a user function.  A new
528 ** context is allocated on the first call.  Subsequent calls return the
529 ** same context that was returned on prior calls.
530 */
531 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
532   Mem *pMem;
533   assert( p && p->pFunc && p->pFunc->xStep );
534   assert( sqlite3_mutex_held(p->s.db->mutex) );
535   pMem = p->pMem;
536   testcase( nByte<0 );
537   if( (pMem->flags & MEM_Agg)==0 ){
538     if( nByte<=0 ){
539       sqlite3VdbeMemReleaseExternal(pMem);
540       pMem->flags = MEM_Null;
541       pMem->z = 0;
542     }else{
543       sqlite3VdbeMemGrow(pMem, nByte, 0);
544       pMem->flags = MEM_Agg;
545       pMem->u.pDef = p->pFunc;
546       if( pMem->z ){
547         memset(pMem->z, 0, nByte);
548       }
549     }
550   }
551   return (void*)pMem->z;
552 }
553 
554 /*
555 ** Return the auxilary data pointer, if any, for the iArg'th argument to
556 ** the user-function defined by pCtx.
557 */
558 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
559   VdbeFunc *pVdbeFunc;
560 
561   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
562   pVdbeFunc = pCtx->pVdbeFunc;
563   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
564     return 0;
565   }
566   return pVdbeFunc->apAux[iArg].pAux;
567 }
568 
569 /*
570 ** Set the auxilary data pointer and delete function, for the iArg'th
571 ** argument to the user-function defined by pCtx. Any previous value is
572 ** deleted by calling the delete function specified when it was set.
573 */
574 void sqlite3_set_auxdata(
575   sqlite3_context *pCtx,
576   int iArg,
577   void *pAux,
578   void (*xDelete)(void*)
579 ){
580   struct AuxData *pAuxData;
581   VdbeFunc *pVdbeFunc;
582   if( iArg<0 ) goto failed;
583 
584   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
585   pVdbeFunc = pCtx->pVdbeFunc;
586   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
587     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
588     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
589     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
590     if( !pVdbeFunc ){
591       goto failed;
592     }
593     pCtx->pVdbeFunc = pVdbeFunc;
594     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
595     pVdbeFunc->nAux = iArg+1;
596     pVdbeFunc->pFunc = pCtx->pFunc;
597   }
598 
599   pAuxData = &pVdbeFunc->apAux[iArg];
600   if( pAuxData->pAux && pAuxData->xDelete ){
601     pAuxData->xDelete(pAuxData->pAux);
602   }
603   pAuxData->pAux = pAux;
604   pAuxData->xDelete = xDelete;
605   return;
606 
607 failed:
608   if( xDelete ){
609     xDelete(pAux);
610   }
611 }
612 
613 #ifndef SQLITE_OMIT_DEPRECATED
614 /*
615 ** Return the number of times the Step function of a aggregate has been
616 ** called.
617 **
618 ** This function is deprecated.  Do not use it for new code.  It is
619 ** provide only to avoid breaking legacy code.  New aggregate function
620 ** implementations should keep their own counts within their aggregate
621 ** context.
622 */
623 int sqlite3_aggregate_count(sqlite3_context *p){
624   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
625   return p->pMem->n;
626 }
627 #endif
628 
629 /*
630 ** Return the number of columns in the result set for the statement pStmt.
631 */
632 int sqlite3_column_count(sqlite3_stmt *pStmt){
633   Vdbe *pVm = (Vdbe *)pStmt;
634   return pVm ? pVm->nResColumn : 0;
635 }
636 
637 /*
638 ** Return the number of values available from the current row of the
639 ** currently executing statement pStmt.
640 */
641 int sqlite3_data_count(sqlite3_stmt *pStmt){
642   Vdbe *pVm = (Vdbe *)pStmt;
643   if( pVm==0 || pVm->pResultSet==0 ) return 0;
644   return pVm->nResColumn;
645 }
646 
647 
648 /*
649 ** Check to see if column iCol of the given statement is valid.  If
650 ** it is, return a pointer to the Mem for the value of that column.
651 ** If iCol is not valid, return a pointer to a Mem which has a value
652 ** of NULL.
653 */
654 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
655   Vdbe *pVm;
656   int vals;
657   Mem *pOut;
658 
659   pVm = (Vdbe *)pStmt;
660   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
661     sqlite3_mutex_enter(pVm->db->mutex);
662     vals = sqlite3_data_count(pStmt);
663     pOut = &pVm->pResultSet[i];
664   }else{
665     /* If the value passed as the second argument is out of range, return
666     ** a pointer to the following static Mem object which contains the
667     ** value SQL NULL. Even though the Mem structure contains an element
668     ** of type i64, on certain architecture (x86) with certain compiler
669     ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
670     ** instead of an 8-byte one. This all works fine, except that when
671     ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
672     ** that a Mem structure is located on an 8-byte boundary. To prevent
673     ** this assert() from failing, when building with SQLITE_DEBUG defined
674     ** using gcc, force nullMem to be 8-byte aligned using the magical
675     ** __attribute__((aligned(8))) macro.  */
676     static const Mem nullMem
677 #if defined(SQLITE_DEBUG) && defined(__GNUC__)
678       __attribute__((aligned(8)))
679 #endif
680       = {{0}, (double)0, 0, "", 0, MEM_Null, SQLITE_NULL, 0, 0, 0 };
681 
682     if( pVm && ALWAYS(pVm->db) ){
683       sqlite3_mutex_enter(pVm->db->mutex);
684       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
685     }
686     pOut = (Mem*)&nullMem;
687   }
688   return pOut;
689 }
690 
691 /*
692 ** This function is called after invoking an sqlite3_value_XXX function on a
693 ** column value (i.e. a value returned by evaluating an SQL expression in the
694 ** select list of a SELECT statement) that may cause a malloc() failure. If
695 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
696 ** code of statement pStmt set to SQLITE_NOMEM.
697 **
698 ** Specifically, this is called from within:
699 **
700 **     sqlite3_column_int()
701 **     sqlite3_column_int64()
702 **     sqlite3_column_text()
703 **     sqlite3_column_text16()
704 **     sqlite3_column_real()
705 **     sqlite3_column_bytes()
706 **     sqlite3_column_bytes16()
707 **
708 ** But not for sqlite3_column_blob(), which never calls malloc().
709 */
710 static void columnMallocFailure(sqlite3_stmt *pStmt)
711 {
712   /* If malloc() failed during an encoding conversion within an
713   ** sqlite3_column_XXX API, then set the return code of the statement to
714   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
715   ** and _finalize() will return NOMEM.
716   */
717   Vdbe *p = (Vdbe *)pStmt;
718   if( p ){
719     p->rc = sqlite3ApiExit(p->db, p->rc);
720     sqlite3_mutex_leave(p->db->mutex);
721   }
722 }
723 
724 /**************************** sqlite3_column_  *******************************
725 ** The following routines are used to access elements of the current row
726 ** in the result set.
727 */
728 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
729   const void *val;
730   val = sqlite3_value_blob( columnMem(pStmt,i) );
731   /* Even though there is no encoding conversion, value_blob() might
732   ** need to call malloc() to expand the result of a zeroblob()
733   ** expression.
734   */
735   columnMallocFailure(pStmt);
736   return val;
737 }
738 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
739   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
740   columnMallocFailure(pStmt);
741   return val;
742 }
743 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
744   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
745   columnMallocFailure(pStmt);
746   return val;
747 }
748 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
749   double val = sqlite3_value_double( columnMem(pStmt,i) );
750   columnMallocFailure(pStmt);
751   return val;
752 }
753 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
754   int val = sqlite3_value_int( columnMem(pStmt,i) );
755   columnMallocFailure(pStmt);
756   return val;
757 }
758 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
759   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
760   columnMallocFailure(pStmt);
761   return val;
762 }
763 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
764   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
765   columnMallocFailure(pStmt);
766   return val;
767 }
768 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
769   Mem *pOut = columnMem(pStmt, i);
770   if( pOut->flags&MEM_Static ){
771     pOut->flags &= ~MEM_Static;
772     pOut->flags |= MEM_Ephem;
773   }
774   columnMallocFailure(pStmt);
775   return (sqlite3_value *)pOut;
776 }
777 #ifndef SQLITE_OMIT_UTF16
778 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
779   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
780   columnMallocFailure(pStmt);
781   return val;
782 }
783 #endif /* SQLITE_OMIT_UTF16 */
784 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
785   int iType = sqlite3_value_type( columnMem(pStmt,i) );
786   columnMallocFailure(pStmt);
787   return iType;
788 }
789 
790 /* The following function is experimental and subject to change or
791 ** removal */
792 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
793 **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
794 **}
795 */
796 
797 /*
798 ** Convert the N-th element of pStmt->pColName[] into a string using
799 ** xFunc() then return that string.  If N is out of range, return 0.
800 **
801 ** There are up to 5 names for each column.  useType determines which
802 ** name is returned.  Here are the names:
803 **
804 **    0      The column name as it should be displayed for output
805 **    1      The datatype name for the column
806 **    2      The name of the database that the column derives from
807 **    3      The name of the table that the column derives from
808 **    4      The name of the table column that the result column derives from
809 **
810 ** If the result is not a simple column reference (if it is an expression
811 ** or a constant) then useTypes 2, 3, and 4 return NULL.
812 */
813 static const void *columnName(
814   sqlite3_stmt *pStmt,
815   int N,
816   const void *(*xFunc)(Mem*),
817   int useType
818 ){
819   const void *ret = 0;
820   Vdbe *p = (Vdbe *)pStmt;
821   int n;
822   sqlite3 *db = p->db;
823 
824   assert( db!=0 );
825   n = sqlite3_column_count(pStmt);
826   if( N<n && N>=0 ){
827     N += useType*n;
828     sqlite3_mutex_enter(db->mutex);
829     assert( db->mallocFailed==0 );
830     ret = xFunc(&p->aColName[N]);
831      /* A malloc may have failed inside of the xFunc() call. If this
832     ** is the case, clear the mallocFailed flag and return NULL.
833     */
834     if( db->mallocFailed ){
835       db->mallocFailed = 0;
836       ret = 0;
837     }
838     sqlite3_mutex_leave(db->mutex);
839   }
840   return ret;
841 }
842 
843 /*
844 ** Return the name of the Nth column of the result set returned by SQL
845 ** statement pStmt.
846 */
847 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
848   return columnName(
849       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
850 }
851 #ifndef SQLITE_OMIT_UTF16
852 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
853   return columnName(
854       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
855 }
856 #endif
857 
858 /*
859 ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
860 ** not define OMIT_DECLTYPE.
861 */
862 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
863 # error "Must not define both SQLITE_OMIT_DECLTYPE \
864          and SQLITE_ENABLE_COLUMN_METADATA"
865 #endif
866 
867 #ifndef SQLITE_OMIT_DECLTYPE
868 /*
869 ** Return the column declaration type (if applicable) of the 'i'th column
870 ** of the result set of SQL statement pStmt.
871 */
872 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
873   return columnName(
874       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
875 }
876 #ifndef SQLITE_OMIT_UTF16
877 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
878   return columnName(
879       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
880 }
881 #endif /* SQLITE_OMIT_UTF16 */
882 #endif /* SQLITE_OMIT_DECLTYPE */
883 
884 #ifdef SQLITE_ENABLE_COLUMN_METADATA
885 /*
886 ** Return the name of the database from which a result column derives.
887 ** NULL is returned if the result column is an expression or constant or
888 ** anything else which is not an unabiguous reference to a database column.
889 */
890 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
891   return columnName(
892       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
893 }
894 #ifndef SQLITE_OMIT_UTF16
895 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
896   return columnName(
897       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
898 }
899 #endif /* SQLITE_OMIT_UTF16 */
900 
901 /*
902 ** Return the name of the table from which a result column derives.
903 ** NULL is returned if the result column is an expression or constant or
904 ** anything else which is not an unabiguous reference to a database column.
905 */
906 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
907   return columnName(
908       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
909 }
910 #ifndef SQLITE_OMIT_UTF16
911 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
912   return columnName(
913       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
914 }
915 #endif /* SQLITE_OMIT_UTF16 */
916 
917 /*
918 ** Return the name of the table column from which a result column derives.
919 ** NULL is returned if the result column is an expression or constant or
920 ** anything else which is not an unabiguous reference to a database column.
921 */
922 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
923   return columnName(
924       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
925 }
926 #ifndef SQLITE_OMIT_UTF16
927 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
928   return columnName(
929       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
930 }
931 #endif /* SQLITE_OMIT_UTF16 */
932 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
933 
934 
935 /******************************* sqlite3_bind_  ***************************
936 **
937 ** Routines used to attach values to wildcards in a compiled SQL statement.
938 */
939 /*
940 ** Unbind the value bound to variable i in virtual machine p. This is the
941 ** the same as binding a NULL value to the column. If the "i" parameter is
942 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
943 **
944 ** A successful evaluation of this routine acquires the mutex on p.
945 ** the mutex is released if any kind of error occurs.
946 **
947 ** The error code stored in database p->db is overwritten with the return
948 ** value in any case.
949 */
950 static int vdbeUnbind(Vdbe *p, int i){
951   Mem *pVar;
952   if( vdbeSafetyNotNull(p) ){
953     return SQLITE_MISUSE_BKPT;
954   }
955   sqlite3_mutex_enter(p->db->mutex);
956   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
957     sqlite3Error(p->db, SQLITE_MISUSE, 0);
958     sqlite3_mutex_leave(p->db->mutex);
959     sqlite3_log(SQLITE_MISUSE,
960         "bind on a busy prepared statement: [%s]", p->zSql);
961     return SQLITE_MISUSE_BKPT;
962   }
963   if( i<1 || i>p->nVar ){
964     sqlite3Error(p->db, SQLITE_RANGE, 0);
965     sqlite3_mutex_leave(p->db->mutex);
966     return SQLITE_RANGE;
967   }
968   i--;
969   pVar = &p->aVar[i];
970   sqlite3VdbeMemRelease(pVar);
971   pVar->flags = MEM_Null;
972   sqlite3Error(p->db, SQLITE_OK, 0);
973 
974   /* If the bit corresponding to this variable in Vdbe.expmask is set, then
975   ** binding a new value to this variable invalidates the current query plan.
976   */
977   if( p->isPrepareV2 &&
978      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
979   ){
980     p->expired = 1;
981   }
982   return SQLITE_OK;
983 }
984 
985 /*
986 ** Bind a text or BLOB value.
987 */
988 static int bindText(
989   sqlite3_stmt *pStmt,   /* The statement to bind against */
990   int i,                 /* Index of the parameter to bind */
991   const void *zData,     /* Pointer to the data to be bound */
992   int nData,             /* Number of bytes of data to be bound */
993   void (*xDel)(void*),   /* Destructor for the data */
994   u8 encoding            /* Encoding for the data */
995 ){
996   Vdbe *p = (Vdbe *)pStmt;
997   Mem *pVar;
998   int rc;
999 
1000   rc = vdbeUnbind(p, i);
1001   if( rc==SQLITE_OK ){
1002     if( zData!=0 ){
1003       pVar = &p->aVar[i-1];
1004       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
1005       if( rc==SQLITE_OK && encoding!=0 ){
1006         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
1007       }
1008       sqlite3Error(p->db, rc, 0);
1009       rc = sqlite3ApiExit(p->db, rc);
1010     }
1011     sqlite3_mutex_leave(p->db->mutex);
1012   }
1013   return rc;
1014 }
1015 
1016 
1017 /*
1018 ** Bind a blob value to an SQL statement variable.
1019 */
1020 int sqlite3_bind_blob(
1021   sqlite3_stmt *pStmt,
1022   int i,
1023   const void *zData,
1024   int nData,
1025   void (*xDel)(void*)
1026 ){
1027   return bindText(pStmt, i, zData, nData, xDel, 0);
1028 }
1029 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
1030   int rc;
1031   Vdbe *p = (Vdbe *)pStmt;
1032   rc = vdbeUnbind(p, i);
1033   if( rc==SQLITE_OK ){
1034     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
1035     sqlite3_mutex_leave(p->db->mutex);
1036   }
1037   return rc;
1038 }
1039 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
1040   return sqlite3_bind_int64(p, i, (i64)iValue);
1041 }
1042 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
1043   int rc;
1044   Vdbe *p = (Vdbe *)pStmt;
1045   rc = vdbeUnbind(p, i);
1046   if( rc==SQLITE_OK ){
1047     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
1048     sqlite3_mutex_leave(p->db->mutex);
1049   }
1050   return rc;
1051 }
1052 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
1053   int rc;
1054   Vdbe *p = (Vdbe*)pStmt;
1055   rc = vdbeUnbind(p, i);
1056   if( rc==SQLITE_OK ){
1057     sqlite3_mutex_leave(p->db->mutex);
1058   }
1059   return rc;
1060 }
1061 int sqlite3_bind_text(
1062   sqlite3_stmt *pStmt,
1063   int i,
1064   const char *zData,
1065   int nData,
1066   void (*xDel)(void*)
1067 ){
1068   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
1069 }
1070 #ifndef SQLITE_OMIT_UTF16
1071 int sqlite3_bind_text16(
1072   sqlite3_stmt *pStmt,
1073   int i,
1074   const void *zData,
1075   int nData,
1076   void (*xDel)(void*)
1077 ){
1078   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
1079 }
1080 #endif /* SQLITE_OMIT_UTF16 */
1081 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
1082   int rc;
1083   switch( pValue->type ){
1084     case SQLITE_INTEGER: {
1085       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
1086       break;
1087     }
1088     case SQLITE_FLOAT: {
1089       rc = sqlite3_bind_double(pStmt, i, pValue->r);
1090       break;
1091     }
1092     case SQLITE_BLOB: {
1093       if( pValue->flags & MEM_Zero ){
1094         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
1095       }else{
1096         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
1097       }
1098       break;
1099     }
1100     case SQLITE_TEXT: {
1101       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
1102                               pValue->enc);
1103       break;
1104     }
1105     default: {
1106       rc = sqlite3_bind_null(pStmt, i);
1107       break;
1108     }
1109   }
1110   return rc;
1111 }
1112 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
1113   int rc;
1114   Vdbe *p = (Vdbe *)pStmt;
1115   rc = vdbeUnbind(p, i);
1116   if( rc==SQLITE_OK ){
1117     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
1118     sqlite3_mutex_leave(p->db->mutex);
1119   }
1120   return rc;
1121 }
1122 
1123 /*
1124 ** Return the number of wildcards that can be potentially bound to.
1125 ** This routine is added to support DBD::SQLite.
1126 */
1127 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
1128   Vdbe *p = (Vdbe*)pStmt;
1129   return p ? p->nVar : 0;
1130 }
1131 
1132 /*
1133 ** Create a mapping from variable numbers to variable names
1134 ** in the Vdbe.azVar[] array, if such a mapping does not already
1135 ** exist.
1136 */
1137 static void createVarMap(Vdbe *p){
1138   if( !p->okVar ){
1139     int j;
1140     Op *pOp;
1141     sqlite3_mutex_enter(p->db->mutex);
1142     /* The race condition here is harmless.  If two threads call this
1143     ** routine on the same Vdbe at the same time, they both might end
1144     ** up initializing the Vdbe.azVar[] array.  That is a little extra
1145     ** work but it results in the same answer.
1146     */
1147     for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
1148       if( pOp->opcode==OP_Variable ){
1149         assert( pOp->p1>0 && pOp->p1<=p->nVar );
1150         p->azVar[pOp->p1-1] = pOp->p4.z;
1151       }
1152     }
1153     p->okVar = 1;
1154     sqlite3_mutex_leave(p->db->mutex);
1155   }
1156 }
1157 
1158 /*
1159 ** Return the name of a wildcard parameter.  Return NULL if the index
1160 ** is out of range or if the wildcard is unnamed.
1161 **
1162 ** The result is always UTF-8.
1163 */
1164 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
1165   Vdbe *p = (Vdbe*)pStmt;
1166   if( p==0 || i<1 || i>p->nVar ){
1167     return 0;
1168   }
1169   createVarMap(p);
1170   return p->azVar[i-1];
1171 }
1172 
1173 /*
1174 ** Given a wildcard parameter name, return the index of the variable
1175 ** with that name.  If there is no variable with the given name,
1176 ** return 0.
1177 */
1178 int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
1179   int i;
1180   if( p==0 ){
1181     return 0;
1182   }
1183   createVarMap(p);
1184   if( zName ){
1185     for(i=0; i<p->nVar; i++){
1186       const char *z = p->azVar[i];
1187       if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
1188         return i+1;
1189       }
1190     }
1191   }
1192   return 0;
1193 }
1194 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
1195   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
1196 }
1197 
1198 /*
1199 ** Transfer all bindings from the first statement over to the second.
1200 */
1201 int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1202   Vdbe *pFrom = (Vdbe*)pFromStmt;
1203   Vdbe *pTo = (Vdbe*)pToStmt;
1204   int i;
1205   assert( pTo->db==pFrom->db );
1206   assert( pTo->nVar==pFrom->nVar );
1207   sqlite3_mutex_enter(pTo->db->mutex);
1208   for(i=0; i<pFrom->nVar; i++){
1209     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
1210   }
1211   sqlite3_mutex_leave(pTo->db->mutex);
1212   return SQLITE_OK;
1213 }
1214 
1215 #ifndef SQLITE_OMIT_DEPRECATED
1216 /*
1217 ** Deprecated external interface.  Internal/core SQLite code
1218 ** should call sqlite3TransferBindings.
1219 **
1220 ** Is is misuse to call this routine with statements from different
1221 ** database connections.  But as this is a deprecated interface, we
1222 ** will not bother to check for that condition.
1223 **
1224 ** If the two statements contain a different number of bindings, then
1225 ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
1226 ** SQLITE_OK is returned.
1227 */
1228 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1229   Vdbe *pFrom = (Vdbe*)pFromStmt;
1230   Vdbe *pTo = (Vdbe*)pToStmt;
1231   if( pFrom->nVar!=pTo->nVar ){
1232     return SQLITE_ERROR;
1233   }
1234   if( pTo->isPrepareV2 && pTo->expmask ){
1235     pTo->expired = 1;
1236   }
1237   if( pFrom->isPrepareV2 && pFrom->expmask ){
1238     pFrom->expired = 1;
1239   }
1240   return sqlite3TransferBindings(pFromStmt, pToStmt);
1241 }
1242 #endif
1243 
1244 /*
1245 ** Return the sqlite3* database handle to which the prepared statement given
1246 ** in the argument belongs.  This is the same database handle that was
1247 ** the first argument to the sqlite3_prepare() that was used to create
1248 ** the statement in the first place.
1249 */
1250 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
1251   return pStmt ? ((Vdbe*)pStmt)->db : 0;
1252 }
1253 
1254 /*
1255 ** Return a pointer to the next prepared statement after pStmt associated
1256 ** with database connection pDb.  If pStmt is NULL, return the first
1257 ** prepared statement for the database connection.  Return NULL if there
1258 ** are no more.
1259 */
1260 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
1261   sqlite3_stmt *pNext;
1262   sqlite3_mutex_enter(pDb->mutex);
1263   if( pStmt==0 ){
1264     pNext = (sqlite3_stmt*)pDb->pVdbe;
1265   }else{
1266     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
1267   }
1268   sqlite3_mutex_leave(pDb->mutex);
1269   return pNext;
1270 }
1271 
1272 /*
1273 ** Return the value of a status counter for a prepared statement
1274 */
1275 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
1276   Vdbe *pVdbe = (Vdbe*)pStmt;
1277   int v = pVdbe->aCounter[op-1];
1278   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
1279   return v;
1280 }
1281