xref: /sqlite-3.40.0/src/vdbeapi.c (revision f2fcd075)
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->n ? p->z : 0;
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 **     sqiite3_column_blob()
714 */
715 static void columnMallocFailure(sqlite3_stmt *pStmt)
716 {
717   /* If malloc() failed during an encoding conversion within an
718   ** sqlite3_column_XXX API, then set the return code of the statement to
719   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
720   ** and _finalize() will return NOMEM.
721   */
722   Vdbe *p = (Vdbe *)pStmt;
723   if( p ){
724     p->rc = sqlite3ApiExit(p->db, p->rc);
725     sqlite3_mutex_leave(p->db->mutex);
726   }
727 }
728 
729 /**************************** sqlite3_column_  *******************************
730 ** The following routines are used to access elements of the current row
731 ** in the result set.
732 */
733 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
734   const void *val;
735   val = sqlite3_value_blob( columnMem(pStmt,i) );
736   /* Even though there is no encoding conversion, value_blob() might
737   ** need to call malloc() to expand the result of a zeroblob()
738   ** expression.
739   */
740   columnMallocFailure(pStmt);
741   return val;
742 }
743 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
744   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
745   columnMallocFailure(pStmt);
746   return val;
747 }
748 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
749   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
750   columnMallocFailure(pStmt);
751   return val;
752 }
753 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
754   double val = sqlite3_value_double( columnMem(pStmt,i) );
755   columnMallocFailure(pStmt);
756   return val;
757 }
758 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
759   int val = sqlite3_value_int( columnMem(pStmt,i) );
760   columnMallocFailure(pStmt);
761   return val;
762 }
763 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
764   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
765   columnMallocFailure(pStmt);
766   return val;
767 }
768 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
769   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
770   columnMallocFailure(pStmt);
771   return val;
772 }
773 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
774   Mem *pOut = columnMem(pStmt, i);
775   if( pOut->flags&MEM_Static ){
776     pOut->flags &= ~MEM_Static;
777     pOut->flags |= MEM_Ephem;
778   }
779   columnMallocFailure(pStmt);
780   return (sqlite3_value *)pOut;
781 }
782 #ifndef SQLITE_OMIT_UTF16
783 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
784   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
785   columnMallocFailure(pStmt);
786   return val;
787 }
788 #endif /* SQLITE_OMIT_UTF16 */
789 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
790   int iType = sqlite3_value_type( columnMem(pStmt,i) );
791   columnMallocFailure(pStmt);
792   return iType;
793 }
794 
795 /* The following function is experimental and subject to change or
796 ** removal */
797 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
798 **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
799 **}
800 */
801 
802 /*
803 ** Convert the N-th element of pStmt->pColName[] into a string using
804 ** xFunc() then return that string.  If N is out of range, return 0.
805 **
806 ** There are up to 5 names for each column.  useType determines which
807 ** name is returned.  Here are the names:
808 **
809 **    0      The column name as it should be displayed for output
810 **    1      The datatype name for the column
811 **    2      The name of the database that the column derives from
812 **    3      The name of the table that the column derives from
813 **    4      The name of the table column that the result column derives from
814 **
815 ** If the result is not a simple column reference (if it is an expression
816 ** or a constant) then useTypes 2, 3, and 4 return NULL.
817 */
818 static const void *columnName(
819   sqlite3_stmt *pStmt,
820   int N,
821   const void *(*xFunc)(Mem*),
822   int useType
823 ){
824   const void *ret = 0;
825   Vdbe *p = (Vdbe *)pStmt;
826   int n;
827   sqlite3 *db = p->db;
828 
829   assert( db!=0 );
830   n = sqlite3_column_count(pStmt);
831   if( N<n && N>=0 ){
832     N += useType*n;
833     sqlite3_mutex_enter(db->mutex);
834     assert( db->mallocFailed==0 );
835     ret = xFunc(&p->aColName[N]);
836      /* A malloc may have failed inside of the xFunc() call. If this
837     ** is the case, clear the mallocFailed flag and return NULL.
838     */
839     if( db->mallocFailed ){
840       db->mallocFailed = 0;
841       ret = 0;
842     }
843     sqlite3_mutex_leave(db->mutex);
844   }
845   return ret;
846 }
847 
848 /*
849 ** Return the name of the Nth column of the result set returned by SQL
850 ** statement pStmt.
851 */
852 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
853   return columnName(
854       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
855 }
856 #ifndef SQLITE_OMIT_UTF16
857 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
858   return columnName(
859       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
860 }
861 #endif
862 
863 /*
864 ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
865 ** not define OMIT_DECLTYPE.
866 */
867 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
868 # error "Must not define both SQLITE_OMIT_DECLTYPE \
869          and SQLITE_ENABLE_COLUMN_METADATA"
870 #endif
871 
872 #ifndef SQLITE_OMIT_DECLTYPE
873 /*
874 ** Return the column declaration type (if applicable) of the 'i'th column
875 ** of the result set of SQL statement pStmt.
876 */
877 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
878   return columnName(
879       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
880 }
881 #ifndef SQLITE_OMIT_UTF16
882 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
883   return columnName(
884       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
885 }
886 #endif /* SQLITE_OMIT_UTF16 */
887 #endif /* SQLITE_OMIT_DECLTYPE */
888 
889 #ifdef SQLITE_ENABLE_COLUMN_METADATA
890 /*
891 ** Return the name of the database from which a result column derives.
892 ** NULL is returned if the result column is an expression or constant or
893 ** anything else which is not an unabiguous reference to a database column.
894 */
895 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
896   return columnName(
897       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
898 }
899 #ifndef SQLITE_OMIT_UTF16
900 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
901   return columnName(
902       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
903 }
904 #endif /* SQLITE_OMIT_UTF16 */
905 
906 /*
907 ** Return the name of the table from which a result column derives.
908 ** NULL is returned if the result column is an expression or constant or
909 ** anything else which is not an unabiguous reference to a database column.
910 */
911 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
912   return columnName(
913       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
914 }
915 #ifndef SQLITE_OMIT_UTF16
916 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
917   return columnName(
918       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
919 }
920 #endif /* SQLITE_OMIT_UTF16 */
921 
922 /*
923 ** Return the name of the table column from which a result column derives.
924 ** NULL is returned if the result column is an expression or constant or
925 ** anything else which is not an unabiguous reference to a database column.
926 */
927 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
928   return columnName(
929       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
930 }
931 #ifndef SQLITE_OMIT_UTF16
932 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
933   return columnName(
934       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
935 }
936 #endif /* SQLITE_OMIT_UTF16 */
937 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
938 
939 
940 /******************************* sqlite3_bind_  ***************************
941 **
942 ** Routines used to attach values to wildcards in a compiled SQL statement.
943 */
944 /*
945 ** Unbind the value bound to variable i in virtual machine p. This is the
946 ** the same as binding a NULL value to the column. If the "i" parameter is
947 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
948 **
949 ** A successful evaluation of this routine acquires the mutex on p.
950 ** the mutex is released if any kind of error occurs.
951 **
952 ** The error code stored in database p->db is overwritten with the return
953 ** value in any case.
954 */
955 static int vdbeUnbind(Vdbe *p, int i){
956   Mem *pVar;
957   if( vdbeSafetyNotNull(p) ){
958     return SQLITE_MISUSE_BKPT;
959   }
960   sqlite3_mutex_enter(p->db->mutex);
961   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
962     sqlite3Error(p->db, SQLITE_MISUSE, 0);
963     sqlite3_mutex_leave(p->db->mutex);
964     sqlite3_log(SQLITE_MISUSE,
965         "bind on a busy prepared statement: [%s]", p->zSql);
966     return SQLITE_MISUSE_BKPT;
967   }
968   if( i<1 || i>p->nVar ){
969     sqlite3Error(p->db, SQLITE_RANGE, 0);
970     sqlite3_mutex_leave(p->db->mutex);
971     return SQLITE_RANGE;
972   }
973   i--;
974   pVar = &p->aVar[i];
975   sqlite3VdbeMemRelease(pVar);
976   pVar->flags = MEM_Null;
977   sqlite3Error(p->db, SQLITE_OK, 0);
978 
979   /* If the bit corresponding to this variable in Vdbe.expmask is set, then
980   ** binding a new value to this variable invalidates the current query plan.
981   **
982   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
983   ** parameter in the WHERE clause might influence the choice of query plan
984   ** for a statement, then the statement will be automatically recompiled,
985   ** as if there had been a schema change, on the first sqlite3_step() call
986   ** following any change to the bindings of that parameter.
987   */
988   if( p->isPrepareV2 &&
989      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
990   ){
991     p->expired = 1;
992   }
993   return SQLITE_OK;
994 }
995 
996 /*
997 ** Bind a text or BLOB value.
998 */
999 static int bindText(
1000   sqlite3_stmt *pStmt,   /* The statement to bind against */
1001   int i,                 /* Index of the parameter to bind */
1002   const void *zData,     /* Pointer to the data to be bound */
1003   int nData,             /* Number of bytes of data to be bound */
1004   void (*xDel)(void*),   /* Destructor for the data */
1005   u8 encoding            /* Encoding for the data */
1006 ){
1007   Vdbe *p = (Vdbe *)pStmt;
1008   Mem *pVar;
1009   int rc;
1010 
1011   rc = vdbeUnbind(p, i);
1012   if( rc==SQLITE_OK ){
1013     if( zData!=0 ){
1014       pVar = &p->aVar[i-1];
1015       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
1016       if( rc==SQLITE_OK && encoding!=0 ){
1017         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
1018       }
1019       sqlite3Error(p->db, rc, 0);
1020       rc = sqlite3ApiExit(p->db, rc);
1021     }
1022     sqlite3_mutex_leave(p->db->mutex);
1023   }
1024   return rc;
1025 }
1026 
1027 
1028 /*
1029 ** Bind a blob value to an SQL statement variable.
1030 */
1031 int sqlite3_bind_blob(
1032   sqlite3_stmt *pStmt,
1033   int i,
1034   const void *zData,
1035   int nData,
1036   void (*xDel)(void*)
1037 ){
1038   return bindText(pStmt, i, zData, nData, xDel, 0);
1039 }
1040 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
1041   int rc;
1042   Vdbe *p = (Vdbe *)pStmt;
1043   rc = vdbeUnbind(p, i);
1044   if( rc==SQLITE_OK ){
1045     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
1046     sqlite3_mutex_leave(p->db->mutex);
1047   }
1048   return rc;
1049 }
1050 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
1051   return sqlite3_bind_int64(p, i, (i64)iValue);
1052 }
1053 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
1054   int rc;
1055   Vdbe *p = (Vdbe *)pStmt;
1056   rc = vdbeUnbind(p, i);
1057   if( rc==SQLITE_OK ){
1058     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
1059     sqlite3_mutex_leave(p->db->mutex);
1060   }
1061   return rc;
1062 }
1063 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
1064   int rc;
1065   Vdbe *p = (Vdbe*)pStmt;
1066   rc = vdbeUnbind(p, i);
1067   if( rc==SQLITE_OK ){
1068     sqlite3_mutex_leave(p->db->mutex);
1069   }
1070   return rc;
1071 }
1072 int sqlite3_bind_text(
1073   sqlite3_stmt *pStmt,
1074   int i,
1075   const char *zData,
1076   int nData,
1077   void (*xDel)(void*)
1078 ){
1079   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
1080 }
1081 #ifndef SQLITE_OMIT_UTF16
1082 int sqlite3_bind_text16(
1083   sqlite3_stmt *pStmt,
1084   int i,
1085   const void *zData,
1086   int nData,
1087   void (*xDel)(void*)
1088 ){
1089   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
1090 }
1091 #endif /* SQLITE_OMIT_UTF16 */
1092 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
1093   int rc;
1094   switch( pValue->type ){
1095     case SQLITE_INTEGER: {
1096       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
1097       break;
1098     }
1099     case SQLITE_FLOAT: {
1100       rc = sqlite3_bind_double(pStmt, i, pValue->r);
1101       break;
1102     }
1103     case SQLITE_BLOB: {
1104       if( pValue->flags & MEM_Zero ){
1105         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
1106       }else{
1107         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
1108       }
1109       break;
1110     }
1111     case SQLITE_TEXT: {
1112       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
1113                               pValue->enc);
1114       break;
1115     }
1116     default: {
1117       rc = sqlite3_bind_null(pStmt, i);
1118       break;
1119     }
1120   }
1121   return rc;
1122 }
1123 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
1124   int rc;
1125   Vdbe *p = (Vdbe *)pStmt;
1126   rc = vdbeUnbind(p, i);
1127   if( rc==SQLITE_OK ){
1128     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
1129     sqlite3_mutex_leave(p->db->mutex);
1130   }
1131   return rc;
1132 }
1133 
1134 /*
1135 ** Return the number of wildcards that can be potentially bound to.
1136 ** This routine is added to support DBD::SQLite.
1137 */
1138 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
1139   Vdbe *p = (Vdbe*)pStmt;
1140   return p ? p->nVar : 0;
1141 }
1142 
1143 /*
1144 ** Create a mapping from variable numbers to variable names
1145 ** in the Vdbe.azVar[] array, if such a mapping does not already
1146 ** exist.
1147 */
1148 static void createVarMap(Vdbe *p){
1149   if( !p->okVar ){
1150     int j;
1151     Op *pOp;
1152     sqlite3_mutex_enter(p->db->mutex);
1153     /* The race condition here is harmless.  If two threads call this
1154     ** routine on the same Vdbe at the same time, they both might end
1155     ** up initializing the Vdbe.azVar[] array.  That is a little extra
1156     ** work but it results in the same answer.
1157     */
1158     for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
1159       if( pOp->opcode==OP_Variable ){
1160         assert( pOp->p1>0 && pOp->p1<=p->nVar );
1161         p->azVar[pOp->p1-1] = pOp->p4.z;
1162       }
1163     }
1164     p->okVar = 1;
1165     sqlite3_mutex_leave(p->db->mutex);
1166   }
1167 }
1168 
1169 /*
1170 ** Return the name of a wildcard parameter.  Return NULL if the index
1171 ** is out of range or if the wildcard is unnamed.
1172 **
1173 ** The result is always UTF-8.
1174 */
1175 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
1176   Vdbe *p = (Vdbe*)pStmt;
1177   if( p==0 || i<1 || i>p->nVar ){
1178     return 0;
1179   }
1180   createVarMap(p);
1181   return p->azVar[i-1];
1182 }
1183 
1184 /*
1185 ** Given a wildcard parameter name, return the index of the variable
1186 ** with that name.  If there is no variable with the given name,
1187 ** return 0.
1188 */
1189 int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
1190   int i;
1191   if( p==0 ){
1192     return 0;
1193   }
1194   createVarMap(p);
1195   if( zName ){
1196     for(i=0; i<p->nVar; i++){
1197       const char *z = p->azVar[i];
1198       if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
1199         return i+1;
1200       }
1201     }
1202   }
1203   return 0;
1204 }
1205 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
1206   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
1207 }
1208 
1209 /*
1210 ** Transfer all bindings from the first statement over to the second.
1211 */
1212 int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1213   Vdbe *pFrom = (Vdbe*)pFromStmt;
1214   Vdbe *pTo = (Vdbe*)pToStmt;
1215   int i;
1216   assert( pTo->db==pFrom->db );
1217   assert( pTo->nVar==pFrom->nVar );
1218   sqlite3_mutex_enter(pTo->db->mutex);
1219   for(i=0; i<pFrom->nVar; i++){
1220     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
1221   }
1222   sqlite3_mutex_leave(pTo->db->mutex);
1223   return SQLITE_OK;
1224 }
1225 
1226 #ifndef SQLITE_OMIT_DEPRECATED
1227 /*
1228 ** Deprecated external interface.  Internal/core SQLite code
1229 ** should call sqlite3TransferBindings.
1230 **
1231 ** Is is misuse to call this routine with statements from different
1232 ** database connections.  But as this is a deprecated interface, we
1233 ** will not bother to check for that condition.
1234 **
1235 ** If the two statements contain a different number of bindings, then
1236 ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
1237 ** SQLITE_OK is returned.
1238 */
1239 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1240   Vdbe *pFrom = (Vdbe*)pFromStmt;
1241   Vdbe *pTo = (Vdbe*)pToStmt;
1242   if( pFrom->nVar!=pTo->nVar ){
1243     return SQLITE_ERROR;
1244   }
1245   if( pTo->isPrepareV2 && pTo->expmask ){
1246     pTo->expired = 1;
1247   }
1248   if( pFrom->isPrepareV2 && pFrom->expmask ){
1249     pFrom->expired = 1;
1250   }
1251   return sqlite3TransferBindings(pFromStmt, pToStmt);
1252 }
1253 #endif
1254 
1255 /*
1256 ** Return the sqlite3* database handle to which the prepared statement given
1257 ** in the argument belongs.  This is the same database handle that was
1258 ** the first argument to the sqlite3_prepare() that was used to create
1259 ** the statement in the first place.
1260 */
1261 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
1262   return pStmt ? ((Vdbe*)pStmt)->db : 0;
1263 }
1264 
1265 /*
1266 ** Return a pointer to the next prepared statement after pStmt associated
1267 ** with database connection pDb.  If pStmt is NULL, return the first
1268 ** prepared statement for the database connection.  Return NULL if there
1269 ** are no more.
1270 */
1271 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
1272   sqlite3_stmt *pNext;
1273   sqlite3_mutex_enter(pDb->mutex);
1274   if( pStmt==0 ){
1275     pNext = (sqlite3_stmt*)pDb->pVdbe;
1276   }else{
1277     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
1278   }
1279   sqlite3_mutex_leave(pDb->mutex);
1280   return pNext;
1281 }
1282 
1283 /*
1284 ** Return the value of a status counter for a prepared statement
1285 */
1286 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
1287   Vdbe *pVdbe = (Vdbe*)pStmt;
1288   int v = pVdbe->aCounter[op-1];
1289   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
1290   return v;
1291 }
1292