xref: /sqlite-3.40.0/src/vdbeapi.c (revision 17adf4e5)
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 #ifndef SQLITE_OMIT_TRACE
57 /*
58 ** Invoke the profile callback.  This routine is only called if we already
59 ** know that the profile callback is defined and needs to be invoked.
60 */
61 static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){
62   sqlite3_int64 iNow;
63   sqlite3_int64 iElapse;
64   assert( p->startTime>0 );
65   assert( (db->mTrace & (SQLITE_TRACE_PROFILE|SQLITE_TRACE_XPROFILE))!=0 );
66   assert( db->init.busy==0 );
67   assert( p->zSql!=0 );
68   sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
69   iElapse = (iNow - p->startTime)*1000000;
70 #ifndef SQLITE_OMIT_DEPRECATED
71   if( db->xProfile ){
72     db->xProfile(db->pProfileArg, p->zSql, iElapse);
73   }
74 #endif
75   if( db->mTrace & SQLITE_TRACE_PROFILE ){
76     db->trace.xV2(SQLITE_TRACE_PROFILE, db->pTraceArg, p, (void*)&iElapse);
77   }
78   p->startTime = 0;
79 }
80 /*
81 ** The checkProfileCallback(DB,P) macro checks to see if a profile callback
82 ** is needed, and it invokes the callback if it is needed.
83 */
84 # define checkProfileCallback(DB,P) \
85    if( ((P)->startTime)>0 ){ invokeProfileCallback(DB,P); }
86 #else
87 # define checkProfileCallback(DB,P)  /*no-op*/
88 #endif
89 
90 /*
91 ** The following routine destroys a virtual machine that is created by
92 ** the sqlite3_compile() routine. The integer returned is an SQLITE_
93 ** success/failure code that describes the result of executing the virtual
94 ** machine.
95 **
96 ** This routine sets the error code and string returned by
97 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
98 */
99 int sqlite3_finalize(sqlite3_stmt *pStmt){
100   int rc;
101   if( pStmt==0 ){
102     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
103     ** pointer is a harmless no-op. */
104     rc = SQLITE_OK;
105   }else{
106     Vdbe *v = (Vdbe*)pStmt;
107     sqlite3 *db = v->db;
108     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
109     sqlite3_mutex_enter(db->mutex);
110     checkProfileCallback(db, v);
111     rc = sqlite3VdbeFinalize(v);
112     rc = sqlite3ApiExit(db, rc);
113     sqlite3LeaveMutexAndCloseZombie(db);
114   }
115   return rc;
116 }
117 
118 /*
119 ** Terminate the current execution of an SQL statement and reset it
120 ** back to its starting state so that it can be reused. A success code from
121 ** the prior execution is returned.
122 **
123 ** This routine sets the error code and string returned by
124 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
125 */
126 int sqlite3_reset(sqlite3_stmt *pStmt){
127   int rc;
128   if( pStmt==0 ){
129     rc = SQLITE_OK;
130   }else{
131     Vdbe *v = (Vdbe*)pStmt;
132     sqlite3 *db = v->db;
133     sqlite3_mutex_enter(db->mutex);
134     checkProfileCallback(db, v);
135     rc = sqlite3VdbeReset(v);
136     sqlite3VdbeRewind(v);
137     assert( (rc & (db->errMask))==rc );
138     rc = sqlite3ApiExit(db, rc);
139     sqlite3_mutex_leave(db->mutex);
140   }
141   return rc;
142 }
143 
144 /*
145 ** Set all the parameters in the compiled SQL statement to NULL.
146 */
147 int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
148   int i;
149   int rc = SQLITE_OK;
150   Vdbe *p = (Vdbe*)pStmt;
151 #if SQLITE_THREADSAFE
152   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
153 #endif
154   sqlite3_mutex_enter(mutex);
155   for(i=0; i<p->nVar; i++){
156     sqlite3VdbeMemRelease(&p->aVar[i]);
157     p->aVar[i].flags = MEM_Null;
158   }
159   assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 );
160   if( p->expmask ){
161     p->expired = 1;
162   }
163   sqlite3_mutex_leave(mutex);
164   return rc;
165 }
166 
167 
168 /**************************** sqlite3_value_  *******************************
169 ** The following routines extract information from a Mem or sqlite3_value
170 ** structure.
171 */
172 const void *sqlite3_value_blob(sqlite3_value *pVal){
173   Mem *p = (Mem*)pVal;
174   if( p->flags & (MEM_Blob|MEM_Str) ){
175     if( ExpandBlob(p)!=SQLITE_OK ){
176       assert( p->flags==MEM_Null && p->z==0 );
177       return 0;
178     }
179     p->flags |= MEM_Blob;
180     return p->n ? p->z : 0;
181   }else{
182     return sqlite3_value_text(pVal);
183   }
184 }
185 int sqlite3_value_bytes(sqlite3_value *pVal){
186   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
187 }
188 int sqlite3_value_bytes16(sqlite3_value *pVal){
189   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
190 }
191 double sqlite3_value_double(sqlite3_value *pVal){
192   return sqlite3VdbeRealValue((Mem*)pVal);
193 }
194 int sqlite3_value_int(sqlite3_value *pVal){
195   return (int)sqlite3VdbeIntValue((Mem*)pVal);
196 }
197 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
198   return sqlite3VdbeIntValue((Mem*)pVal);
199 }
200 unsigned int sqlite3_value_subtype(sqlite3_value *pVal){
201   Mem *pMem = (Mem*)pVal;
202   return ((pMem->flags & MEM_Subtype) ? pMem->eSubtype : 0);
203 }
204 void *sqlite3_value_pointer(sqlite3_value *pVal, const char *zPType){
205   Mem *p = (Mem*)pVal;
206   if( (p->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) ==
207                  (MEM_Null|MEM_Term|MEM_Subtype)
208    && zPType!=0
209    && p->eSubtype=='p'
210    && strcmp(p->u.zPType, zPType)==0
211   ){
212     return (void*)p->z;
213   }else{
214     return 0;
215   }
216 }
217 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
218   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
219 }
220 #ifndef SQLITE_OMIT_UTF16
221 const void *sqlite3_value_text16(sqlite3_value* pVal){
222   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
223 }
224 const void *sqlite3_value_text16be(sqlite3_value *pVal){
225   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
226 }
227 const void *sqlite3_value_text16le(sqlite3_value *pVal){
228   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
229 }
230 #endif /* SQLITE_OMIT_UTF16 */
231 /* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five
232 ** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating
233 ** point number string BLOB NULL
234 */
235 int sqlite3_value_type(sqlite3_value* pVal){
236   static const u8 aType[] = {
237      SQLITE_BLOB,     /* 0x00 (not possible) */
238      SQLITE_NULL,     /* 0x01 NULL */
239      SQLITE_TEXT,     /* 0x02 TEXT */
240      SQLITE_NULL,     /* 0x03 (not possible) */
241      SQLITE_INTEGER,  /* 0x04 INTEGER */
242      SQLITE_NULL,     /* 0x05 (not possible) */
243      SQLITE_INTEGER,  /* 0x06 INTEGER + TEXT */
244      SQLITE_NULL,     /* 0x07 (not possible) */
245      SQLITE_FLOAT,    /* 0x08 FLOAT */
246      SQLITE_NULL,     /* 0x09 (not possible) */
247      SQLITE_FLOAT,    /* 0x0a FLOAT + TEXT */
248      SQLITE_NULL,     /* 0x0b (not possible) */
249      SQLITE_INTEGER,  /* 0x0c (not possible) */
250      SQLITE_NULL,     /* 0x0d (not possible) */
251      SQLITE_INTEGER,  /* 0x0e (not possible) */
252      SQLITE_NULL,     /* 0x0f (not possible) */
253      SQLITE_BLOB,     /* 0x10 BLOB */
254      SQLITE_NULL,     /* 0x11 (not possible) */
255      SQLITE_TEXT,     /* 0x12 (not possible) */
256      SQLITE_NULL,     /* 0x13 (not possible) */
257      SQLITE_INTEGER,  /* 0x14 INTEGER + BLOB */
258      SQLITE_NULL,     /* 0x15 (not possible) */
259      SQLITE_INTEGER,  /* 0x16 (not possible) */
260      SQLITE_NULL,     /* 0x17 (not possible) */
261      SQLITE_FLOAT,    /* 0x18 FLOAT + BLOB */
262      SQLITE_NULL,     /* 0x19 (not possible) */
263      SQLITE_FLOAT,    /* 0x1a (not possible) */
264      SQLITE_NULL,     /* 0x1b (not possible) */
265      SQLITE_INTEGER,  /* 0x1c (not possible) */
266      SQLITE_NULL,     /* 0x1d (not possible) */
267      SQLITE_INTEGER,  /* 0x1e (not possible) */
268      SQLITE_NULL,     /* 0x1f (not possible) */
269      SQLITE_FLOAT,    /* 0x20 INTREAL */
270      SQLITE_NULL,     /* 0x21 (not possible) */
271      SQLITE_TEXT,     /* 0x22 INTREAL + TEXT */
272      SQLITE_NULL,     /* 0x23 (not possible) */
273      SQLITE_FLOAT,    /* 0x24 (not possible) */
274      SQLITE_NULL,     /* 0x25 (not possible) */
275      SQLITE_FLOAT,    /* 0x26 (not possible) */
276      SQLITE_NULL,     /* 0x27 (not possible) */
277      SQLITE_FLOAT,    /* 0x28 (not possible) */
278      SQLITE_NULL,     /* 0x29 (not possible) */
279      SQLITE_FLOAT,    /* 0x2a (not possible) */
280      SQLITE_NULL,     /* 0x2b (not possible) */
281      SQLITE_FLOAT,    /* 0x2c (not possible) */
282      SQLITE_NULL,     /* 0x2d (not possible) */
283      SQLITE_FLOAT,    /* 0x2e (not possible) */
284      SQLITE_NULL,     /* 0x2f (not possible) */
285      SQLITE_BLOB,     /* 0x30 (not possible) */
286      SQLITE_NULL,     /* 0x31 (not possible) */
287      SQLITE_TEXT,     /* 0x32 (not possible) */
288      SQLITE_NULL,     /* 0x33 (not possible) */
289      SQLITE_FLOAT,    /* 0x34 (not possible) */
290      SQLITE_NULL,     /* 0x35 (not possible) */
291      SQLITE_FLOAT,    /* 0x36 (not possible) */
292      SQLITE_NULL,     /* 0x37 (not possible) */
293      SQLITE_FLOAT,    /* 0x38 (not possible) */
294      SQLITE_NULL,     /* 0x39 (not possible) */
295      SQLITE_FLOAT,    /* 0x3a (not possible) */
296      SQLITE_NULL,     /* 0x3b (not possible) */
297      SQLITE_FLOAT,    /* 0x3c (not possible) */
298      SQLITE_NULL,     /* 0x3d (not possible) */
299      SQLITE_FLOAT,    /* 0x3e (not possible) */
300      SQLITE_NULL,     /* 0x3f (not possible) */
301   };
302 #ifdef SQLITE_DEBUG
303   {
304     int eType = SQLITE_BLOB;
305     if( pVal->flags & MEM_Null ){
306       eType = SQLITE_NULL;
307     }else if( pVal->flags & (MEM_Real|MEM_IntReal) ){
308       eType = SQLITE_FLOAT;
309     }else if( pVal->flags & MEM_Int ){
310       eType = SQLITE_INTEGER;
311     }else if( pVal->flags & MEM_Str ){
312       eType = SQLITE_TEXT;
313     }
314     assert( eType == aType[pVal->flags&MEM_AffMask] );
315   }
316 #endif
317   return aType[pVal->flags&MEM_AffMask];
318 }
319 
320 /* Return true if a parameter to xUpdate represents an unchanged column */
321 int sqlite3_value_nochange(sqlite3_value *pVal){
322   return (pVal->flags&(MEM_Null|MEM_Zero))==(MEM_Null|MEM_Zero);
323 }
324 
325 /* Return true if a parameter value originated from an sqlite3_bind() */
326 int sqlite3_value_frombind(sqlite3_value *pVal){
327   return (pVal->flags&MEM_FromBind)!=0;
328 }
329 
330 /* Make a copy of an sqlite3_value object
331 */
332 sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){
333   sqlite3_value *pNew;
334   if( pOrig==0 ) return 0;
335   pNew = sqlite3_malloc( sizeof(*pNew) );
336   if( pNew==0 ) return 0;
337   memset(pNew, 0, sizeof(*pNew));
338   memcpy(pNew, pOrig, MEMCELLSIZE);
339   pNew->flags &= ~MEM_Dyn;
340   pNew->db = 0;
341   if( pNew->flags&(MEM_Str|MEM_Blob) ){
342     pNew->flags &= ~(MEM_Static|MEM_Dyn);
343     pNew->flags |= MEM_Ephem;
344     if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){
345       sqlite3ValueFree(pNew);
346       pNew = 0;
347     }
348   }
349   return pNew;
350 }
351 
352 /* Destroy an sqlite3_value object previously obtained from
353 ** sqlite3_value_dup().
354 */
355 void sqlite3_value_free(sqlite3_value *pOld){
356   sqlite3ValueFree(pOld);
357 }
358 
359 
360 /**************************** sqlite3_result_  *******************************
361 ** The following routines are used by user-defined functions to specify
362 ** the function result.
363 **
364 ** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the
365 ** result as a string or blob but if the string or blob is too large, it
366 ** then sets the error code to SQLITE_TOOBIG
367 **
368 ** The invokeValueDestructor(P,X) routine invokes destructor function X()
369 ** on value P is not going to be used and need to be destroyed.
370 */
371 static void setResultStrOrError(
372   sqlite3_context *pCtx,  /* Function context */
373   const char *z,          /* String pointer */
374   int n,                  /* Bytes in string, or negative */
375   u8 enc,                 /* Encoding of z.  0 for BLOBs */
376   void (*xDel)(void*)     /* Destructor function */
377 ){
378   if( sqlite3VdbeMemSetStr(pCtx->pOut, z, n, enc, xDel)==SQLITE_TOOBIG ){
379     sqlite3_result_error_toobig(pCtx);
380   }
381 }
382 static int invokeValueDestructor(
383   const void *p,             /* Value to destroy */
384   void (*xDel)(void*),       /* The destructor */
385   sqlite3_context *pCtx      /* Set a SQLITE_TOOBIG error if no NULL */
386 ){
387   assert( xDel!=SQLITE_DYNAMIC );
388   if( xDel==0 ){
389     /* noop */
390   }else if( xDel==SQLITE_TRANSIENT ){
391     /* noop */
392   }else{
393     xDel((void*)p);
394   }
395   sqlite3_result_error_toobig(pCtx);
396   return SQLITE_TOOBIG;
397 }
398 void sqlite3_result_blob(
399   sqlite3_context *pCtx,
400   const void *z,
401   int n,
402   void (*xDel)(void *)
403 ){
404   assert( n>=0 );
405   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
406   setResultStrOrError(pCtx, z, n, 0, xDel);
407 }
408 void sqlite3_result_blob64(
409   sqlite3_context *pCtx,
410   const void *z,
411   sqlite3_uint64 n,
412   void (*xDel)(void *)
413 ){
414   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
415   assert( xDel!=SQLITE_DYNAMIC );
416   if( n>0x7fffffff ){
417     (void)invokeValueDestructor(z, xDel, pCtx);
418   }else{
419     setResultStrOrError(pCtx, z, (int)n, 0, xDel);
420   }
421 }
422 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
423   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
424   sqlite3VdbeMemSetDouble(pCtx->pOut, rVal);
425 }
426 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
427   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
428   pCtx->isError = SQLITE_ERROR;
429   sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
430 }
431 #ifndef SQLITE_OMIT_UTF16
432 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
433   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
434   pCtx->isError = SQLITE_ERROR;
435   sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
436 }
437 #endif
438 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
439   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
440   sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal);
441 }
442 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
443   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
444   sqlite3VdbeMemSetInt64(pCtx->pOut, iVal);
445 }
446 void sqlite3_result_null(sqlite3_context *pCtx){
447   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
448   sqlite3VdbeMemSetNull(pCtx->pOut);
449 }
450 void sqlite3_result_pointer(
451   sqlite3_context *pCtx,
452   void *pPtr,
453   const char *zPType,
454   void (*xDestructor)(void*)
455 ){
456   Mem *pOut = pCtx->pOut;
457   assert( sqlite3_mutex_held(pOut->db->mutex) );
458   sqlite3VdbeMemRelease(pOut);
459   pOut->flags = MEM_Null;
460   sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor);
461 }
462 void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){
463   Mem *pOut = pCtx->pOut;
464   assert( sqlite3_mutex_held(pOut->db->mutex) );
465   pOut->eSubtype = eSubtype & 0xff;
466   pOut->flags |= MEM_Subtype;
467 }
468 void sqlite3_result_text(
469   sqlite3_context *pCtx,
470   const char *z,
471   int n,
472   void (*xDel)(void *)
473 ){
474   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
475   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
476 }
477 void sqlite3_result_text64(
478   sqlite3_context *pCtx,
479   const char *z,
480   sqlite3_uint64 n,
481   void (*xDel)(void *),
482   unsigned char enc
483 ){
484   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
485   assert( xDel!=SQLITE_DYNAMIC );
486   if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
487   if( n>0x7fffffff ){
488     (void)invokeValueDestructor(z, xDel, pCtx);
489   }else{
490     setResultStrOrError(pCtx, z, (int)n, enc, xDel);
491   }
492 }
493 #ifndef SQLITE_OMIT_UTF16
494 void sqlite3_result_text16(
495   sqlite3_context *pCtx,
496   const void *z,
497   int n,
498   void (*xDel)(void *)
499 ){
500   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
501   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
502 }
503 void sqlite3_result_text16be(
504   sqlite3_context *pCtx,
505   const void *z,
506   int n,
507   void (*xDel)(void *)
508 ){
509   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
510   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
511 }
512 void sqlite3_result_text16le(
513   sqlite3_context *pCtx,
514   const void *z,
515   int n,
516   void (*xDel)(void *)
517 ){
518   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
519   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
520 }
521 #endif /* SQLITE_OMIT_UTF16 */
522 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
523   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
524   sqlite3VdbeMemCopy(pCtx->pOut, pValue);
525 }
526 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
527   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
528   sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n);
529 }
530 int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){
531   Mem *pOut = pCtx->pOut;
532   assert( sqlite3_mutex_held(pOut->db->mutex) );
533   if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){
534     return SQLITE_TOOBIG;
535   }
536   sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n);
537   return SQLITE_OK;
538 }
539 void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
540   pCtx->isError = errCode ? errCode : -1;
541 #ifdef SQLITE_DEBUG
542   if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode;
543 #endif
544   if( pCtx->pOut->flags & MEM_Null ){
545     sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1,
546                          SQLITE_UTF8, SQLITE_STATIC);
547   }
548 }
549 
550 /* Force an SQLITE_TOOBIG error. */
551 void sqlite3_result_error_toobig(sqlite3_context *pCtx){
552   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
553   pCtx->isError = SQLITE_TOOBIG;
554   sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1,
555                        SQLITE_UTF8, SQLITE_STATIC);
556 }
557 
558 /* An SQLITE_NOMEM error. */
559 void sqlite3_result_error_nomem(sqlite3_context *pCtx){
560   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
561   sqlite3VdbeMemSetNull(pCtx->pOut);
562   pCtx->isError = SQLITE_NOMEM_BKPT;
563   sqlite3OomFault(pCtx->pOut->db);
564 }
565 
566 #ifndef SQLITE_UNTESTABLE
567 /* Force the INT64 value currently stored as the result to be
568 ** a MEM_IntReal value.  See the SQLITE_TESTCTRL_RESULT_INTREAL
569 ** test-control.
570 */
571 void sqlite3ResultIntReal(sqlite3_context *pCtx){
572   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
573   if( pCtx->pOut->flags & MEM_Int ){
574     pCtx->pOut->flags &= ~MEM_Int;
575     pCtx->pOut->flags |= MEM_IntReal;
576   }
577 }
578 #endif
579 
580 
581 /*
582 ** This function is called after a transaction has been committed. It
583 ** invokes callbacks registered with sqlite3_wal_hook() as required.
584 */
585 static int doWalCallbacks(sqlite3 *db){
586   int rc = SQLITE_OK;
587 #ifndef SQLITE_OMIT_WAL
588   int i;
589   for(i=0; i<db->nDb; i++){
590     Btree *pBt = db->aDb[i].pBt;
591     if( pBt ){
592       int nEntry;
593       sqlite3BtreeEnter(pBt);
594       nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
595       sqlite3BtreeLeave(pBt);
596       if( nEntry>0 && db->xWalCallback && rc==SQLITE_OK ){
597         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zDbSName, nEntry);
598       }
599     }
600   }
601 #endif
602   return rc;
603 }
604 
605 
606 /*
607 ** Execute the statement pStmt, either until a row of data is ready, the
608 ** statement is completely executed or an error occurs.
609 **
610 ** This routine implements the bulk of the logic behind the sqlite_step()
611 ** API.  The only thing omitted is the automatic recompile if a
612 ** schema change has occurred.  That detail is handled by the
613 ** outer sqlite3_step() wrapper procedure.
614 */
615 static int sqlite3Step(Vdbe *p){
616   sqlite3 *db;
617   int rc;
618 
619   assert(p);
620   if( p->iVdbeMagic!=VDBE_MAGIC_RUN ){
621     /* We used to require that sqlite3_reset() be called before retrying
622     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
623     ** with version 3.7.0, we changed this so that sqlite3_reset() would
624     ** be called automatically instead of throwing the SQLITE_MISUSE error.
625     ** This "automatic-reset" change is not technically an incompatibility,
626     ** since any application that receives an SQLITE_MISUSE is broken by
627     ** definition.
628     **
629     ** Nevertheless, some published applications that were originally written
630     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE
631     ** returns, and those were broken by the automatic-reset change.  As a
632     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
633     ** legacy behavior of returning SQLITE_MISUSE for cases where the
634     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
635     ** or SQLITE_BUSY error.
636     */
637 #ifdef SQLITE_OMIT_AUTORESET
638     if( (rc = p->rc&0xff)==SQLITE_BUSY || rc==SQLITE_LOCKED ){
639       sqlite3_reset((sqlite3_stmt*)p);
640     }else{
641       return SQLITE_MISUSE_BKPT;
642     }
643 #else
644     sqlite3_reset((sqlite3_stmt*)p);
645 #endif
646   }
647 
648   /* Check that malloc() has not failed. If it has, return early. */
649   db = p->db;
650   if( db->mallocFailed ){
651     p->rc = SQLITE_NOMEM;
652     return SQLITE_NOMEM_BKPT;
653   }
654 
655   if( p->pc<0 && p->expired ){
656     p->rc = SQLITE_SCHEMA;
657     rc = SQLITE_ERROR;
658     if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ){
659       /* If this statement was prepared using saved SQL and an
660       ** error has occurred, then return the error code in p->rc to the
661       ** caller. Set the error code in the database handle to the same value.
662       */
663       rc = sqlite3VdbeTransferError(p);
664     }
665     goto end_of_step;
666   }
667   if( p->pc<0 ){
668     /* If there are no other statements currently running, then
669     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
670     ** from interrupting a statement that has not yet started.
671     */
672     if( db->nVdbeActive==0 ){
673       AtomicStore(&db->u1.isInterrupted, 0);
674     }
675 
676     assert( db->nVdbeWrite>0 || db->autoCommit==0
677         || (db->nDeferredCons==0 && db->nDeferredImmCons==0)
678     );
679 
680 #ifndef SQLITE_OMIT_TRACE
681     if( (db->mTrace & (SQLITE_TRACE_PROFILE|SQLITE_TRACE_XPROFILE))!=0
682         && !db->init.busy && p->zSql ){
683       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
684     }else{
685       assert( p->startTime==0 );
686     }
687 #endif
688 
689     db->nVdbeActive++;
690     if( p->readOnly==0 ) db->nVdbeWrite++;
691     if( p->bIsReader ) db->nVdbeRead++;
692     p->pc = 0;
693   }
694 #ifdef SQLITE_DEBUG
695   p->rcApp = SQLITE_OK;
696 #endif
697 #ifndef SQLITE_OMIT_EXPLAIN
698   if( p->explain ){
699     rc = sqlite3VdbeList(p);
700   }else
701 #endif /* SQLITE_OMIT_EXPLAIN */
702   {
703     db->nVdbeExec++;
704     rc = sqlite3VdbeExec(p);
705     db->nVdbeExec--;
706   }
707 
708   if( rc!=SQLITE_ROW ){
709 #ifndef SQLITE_OMIT_TRACE
710     /* If the statement completed successfully, invoke the profile callback */
711     checkProfileCallback(db, p);
712 #endif
713 
714     if( rc==SQLITE_DONE && db->autoCommit ){
715       assert( p->rc==SQLITE_OK );
716       p->rc = doWalCallbacks(db);
717       if( p->rc!=SQLITE_OK ){
718         rc = SQLITE_ERROR;
719       }
720     }else if( rc!=SQLITE_DONE && (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ){
721       /* If this statement was prepared using saved SQL and an
722       ** error has occurred, then return the error code in p->rc to the
723       ** caller. Set the error code in the database handle to the same value.
724       */
725       rc = sqlite3VdbeTransferError(p);
726     }
727   }
728 
729   db->errCode = rc;
730   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
731     p->rc = SQLITE_NOMEM_BKPT;
732     if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ) rc = p->rc;
733   }
734 end_of_step:
735   /* There are only a limited number of result codes allowed from the
736   ** statements prepared using the legacy sqlite3_prepare() interface */
737   assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0
738        || rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR
739        || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE
740   );
741   return (rc&db->errMask);
742 }
743 
744 /*
745 ** This is the top-level implementation of sqlite3_step().  Call
746 ** sqlite3Step() to do most of the work.  If a schema error occurs,
747 ** call sqlite3Reprepare() and try again.
748 */
749 int sqlite3_step(sqlite3_stmt *pStmt){
750   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
751   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
752   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
753   sqlite3 *db;             /* The database connection */
754 
755   if( vdbeSafetyNotNull(v) ){
756     return SQLITE_MISUSE_BKPT;
757   }
758   db = v->db;
759   sqlite3_mutex_enter(db->mutex);
760   v->doingRerun = 0;
761   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
762          && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
763     int savedPc = v->pc;
764     rc = sqlite3Reprepare(v);
765     if( rc!=SQLITE_OK ){
766       /* This case occurs after failing to recompile an sql statement.
767       ** The error message from the SQL compiler has already been loaded
768       ** into the database handle. This block copies the error message
769       ** from the database handle into the statement and sets the statement
770       ** program counter to 0 to ensure that when the statement is
771       ** finalized or reset the parser error message is available via
772       ** sqlite3_errmsg() and sqlite3_errcode().
773       */
774       const char *zErr = (const char *)sqlite3_value_text(db->pErr);
775       sqlite3DbFree(db, v->zErrMsg);
776       if( !db->mallocFailed ){
777         v->zErrMsg = sqlite3DbStrDup(db, zErr);
778         v->rc = rc = sqlite3ApiExit(db, rc);
779       } else {
780         v->zErrMsg = 0;
781         v->rc = rc = SQLITE_NOMEM_BKPT;
782       }
783       break;
784     }
785     sqlite3_reset(pStmt);
786     if( savedPc>=0 ) v->doingRerun = 1;
787     assert( v->expired==0 );
788   }
789   sqlite3_mutex_leave(db->mutex);
790   return rc;
791 }
792 
793 
794 /*
795 ** Extract the user data from a sqlite3_context structure and return a
796 ** pointer to it.
797 */
798 void *sqlite3_user_data(sqlite3_context *p){
799   assert( p && p->pFunc );
800   return p->pFunc->pUserData;
801 }
802 
803 /*
804 ** Extract the user data from a sqlite3_context structure and return a
805 ** pointer to it.
806 **
807 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
808 ** returns a copy of the pointer to the database connection (the 1st
809 ** parameter) of the sqlite3_create_function() and
810 ** sqlite3_create_function16() routines that originally registered the
811 ** application defined function.
812 */
813 sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
814   assert( p && p->pOut );
815   return p->pOut->db;
816 }
817 
818 /*
819 ** If this routine is invoked from within an xColumn method of a virtual
820 ** table, then it returns true if and only if the the call is during an
821 ** UPDATE operation and the value of the column will not be modified
822 ** by the UPDATE.
823 **
824 ** If this routine is called from any context other than within the
825 ** xColumn method of a virtual table, then the return value is meaningless
826 ** and arbitrary.
827 **
828 ** Virtual table implements might use this routine to optimize their
829 ** performance by substituting a NULL result, or some other light-weight
830 ** value, as a signal to the xUpdate routine that the column is unchanged.
831 */
832 int sqlite3_vtab_nochange(sqlite3_context *p){
833   assert( p );
834   return sqlite3_value_nochange(p->pOut);
835 }
836 
837 /*
838 ** Return the current time for a statement.  If the current time
839 ** is requested more than once within the same run of a single prepared
840 ** statement, the exact same time is returned for each invocation regardless
841 ** of the amount of time that elapses between invocations.  In other words,
842 ** the time returned is always the time of the first call.
843 */
844 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
845   int rc;
846 #ifndef SQLITE_ENABLE_STAT4
847   sqlite3_int64 *piTime = &p->pVdbe->iCurrentTime;
848   assert( p->pVdbe!=0 );
849 #else
850   sqlite3_int64 iTime = 0;
851   sqlite3_int64 *piTime = p->pVdbe!=0 ? &p->pVdbe->iCurrentTime : &iTime;
852 #endif
853   if( *piTime==0 ){
854     rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, piTime);
855     if( rc ) *piTime = 0;
856   }
857   return *piTime;
858 }
859 
860 /*
861 ** Create a new aggregate context for p and return a pointer to
862 ** its pMem->z element.
863 */
864 static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nByte){
865   Mem *pMem = p->pMem;
866   assert( (pMem->flags & MEM_Agg)==0 );
867   if( nByte<=0 ){
868     sqlite3VdbeMemSetNull(pMem);
869     pMem->z = 0;
870   }else{
871     sqlite3VdbeMemClearAndResize(pMem, nByte);
872     pMem->flags = MEM_Agg;
873     pMem->u.pDef = p->pFunc;
874     if( pMem->z ){
875       memset(pMem->z, 0, nByte);
876     }
877   }
878   return (void*)pMem->z;
879 }
880 
881 /*
882 ** Allocate or return the aggregate context for a user function.  A new
883 ** context is allocated on the first call.  Subsequent calls return the
884 ** same context that was returned on prior calls.
885 */
886 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
887   assert( p && p->pFunc && p->pFunc->xFinalize );
888   assert( sqlite3_mutex_held(p->pOut->db->mutex) );
889   testcase( nByte<0 );
890   if( (p->pMem->flags & MEM_Agg)==0 ){
891     return createAggContext(p, nByte);
892   }else{
893     return (void*)p->pMem->z;
894   }
895 }
896 
897 /*
898 ** Return the auxiliary data pointer, if any, for the iArg'th argument to
899 ** the user-function defined by pCtx.
900 **
901 ** The left-most argument is 0.
902 **
903 ** Undocumented behavior:  If iArg is negative then access a cache of
904 ** auxiliary data pointers that is available to all functions within a
905 ** single prepared statement.  The iArg values must match.
906 */
907 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
908   AuxData *pAuxData;
909 
910   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
911 #if SQLITE_ENABLE_STAT4
912   if( pCtx->pVdbe==0 ) return 0;
913 #else
914   assert( pCtx->pVdbe!=0 );
915 #endif
916   for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){
917     if(  pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){
918       return pAuxData->pAux;
919     }
920   }
921   return 0;
922 }
923 
924 /*
925 ** Set the auxiliary data pointer and delete function, for the iArg'th
926 ** argument to the user-function defined by pCtx. Any previous value is
927 ** deleted by calling the delete function specified when it was set.
928 **
929 ** The left-most argument is 0.
930 **
931 ** Undocumented behavior:  If iArg is negative then make the data available
932 ** to all functions within the current prepared statement using iArg as an
933 ** access code.
934 */
935 void sqlite3_set_auxdata(
936   sqlite3_context *pCtx,
937   int iArg,
938   void *pAux,
939   void (*xDelete)(void*)
940 ){
941   AuxData *pAuxData;
942   Vdbe *pVdbe = pCtx->pVdbe;
943 
944   assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
945 #ifdef SQLITE_ENABLE_STAT4
946   if( pVdbe==0 ) goto failed;
947 #else
948   assert( pVdbe!=0 );
949 #endif
950 
951   for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){
952     if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){
953       break;
954     }
955   }
956   if( pAuxData==0 ){
957     pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData));
958     if( !pAuxData ) goto failed;
959     pAuxData->iAuxOp = pCtx->iOp;
960     pAuxData->iAuxArg = iArg;
961     pAuxData->pNextAux = pVdbe->pAuxData;
962     pVdbe->pAuxData = pAuxData;
963     if( pCtx->isError==0 ) pCtx->isError = -1;
964   }else if( pAuxData->xDeleteAux ){
965     pAuxData->xDeleteAux(pAuxData->pAux);
966   }
967 
968   pAuxData->pAux = pAux;
969   pAuxData->xDeleteAux = xDelete;
970   return;
971 
972 failed:
973   if( xDelete ){
974     xDelete(pAux);
975   }
976 }
977 
978 #ifndef SQLITE_OMIT_DEPRECATED
979 /*
980 ** Return the number of times the Step function of an aggregate has been
981 ** called.
982 **
983 ** This function is deprecated.  Do not use it for new code.  It is
984 ** provide only to avoid breaking legacy code.  New aggregate function
985 ** implementations should keep their own counts within their aggregate
986 ** context.
987 */
988 int sqlite3_aggregate_count(sqlite3_context *p){
989   assert( p && p->pMem && p->pFunc && p->pFunc->xFinalize );
990   return p->pMem->n;
991 }
992 #endif
993 
994 /*
995 ** Return the number of columns in the result set for the statement pStmt.
996 */
997 int sqlite3_column_count(sqlite3_stmt *pStmt){
998   Vdbe *pVm = (Vdbe *)pStmt;
999   return pVm ? pVm->nResColumn : 0;
1000 }
1001 
1002 /*
1003 ** Return the number of values available from the current row of the
1004 ** currently executing statement pStmt.
1005 */
1006 int sqlite3_data_count(sqlite3_stmt *pStmt){
1007   Vdbe *pVm = (Vdbe *)pStmt;
1008   if( pVm==0 || pVm->pResultSet==0 ) return 0;
1009   return pVm->nResColumn;
1010 }
1011 
1012 /*
1013 ** Return a pointer to static memory containing an SQL NULL value.
1014 */
1015 static const Mem *columnNullValue(void){
1016   /* Even though the Mem structure contains an element
1017   ** of type i64, on certain architectures (x86) with certain compiler
1018   ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
1019   ** instead of an 8-byte one. This all works fine, except that when
1020   ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
1021   ** that a Mem structure is located on an 8-byte boundary. To prevent
1022   ** these assert()s from failing, when building with SQLITE_DEBUG defined
1023   ** using gcc, we force nullMem to be 8-byte aligned using the magical
1024   ** __attribute__((aligned(8))) macro.  */
1025   static const Mem nullMem
1026 #if defined(SQLITE_DEBUG) && defined(__GNUC__)
1027     __attribute__((aligned(8)))
1028 #endif
1029     = {
1030         /* .u          = */ {0},
1031         /* .flags      = */ (u16)MEM_Null,
1032         /* .enc        = */ (u8)0,
1033         /* .eSubtype   = */ (u8)0,
1034         /* .n          = */ (int)0,
1035         /* .z          = */ (char*)0,
1036         /* .zMalloc    = */ (char*)0,
1037         /* .szMalloc   = */ (int)0,
1038         /* .uTemp      = */ (u32)0,
1039         /* .db         = */ (sqlite3*)0,
1040         /* .xDel       = */ (void(*)(void*))0,
1041 #ifdef SQLITE_DEBUG
1042         /* .pScopyFrom = */ (Mem*)0,
1043         /* .mScopyFlags= */ 0,
1044 #endif
1045       };
1046   return &nullMem;
1047 }
1048 
1049 /*
1050 ** Check to see if column iCol of the given statement is valid.  If
1051 ** it is, return a pointer to the Mem for the value of that column.
1052 ** If iCol is not valid, return a pointer to a Mem which has a value
1053 ** of NULL.
1054 */
1055 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
1056   Vdbe *pVm;
1057   Mem *pOut;
1058 
1059   pVm = (Vdbe *)pStmt;
1060   if( pVm==0 ) return (Mem*)columnNullValue();
1061   assert( pVm->db );
1062   sqlite3_mutex_enter(pVm->db->mutex);
1063   if( pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
1064     pOut = &pVm->pResultSet[i];
1065   }else{
1066     sqlite3Error(pVm->db, SQLITE_RANGE);
1067     pOut = (Mem*)columnNullValue();
1068   }
1069   return pOut;
1070 }
1071 
1072 /*
1073 ** This function is called after invoking an sqlite3_value_XXX function on a
1074 ** column value (i.e. a value returned by evaluating an SQL expression in the
1075 ** select list of a SELECT statement) that may cause a malloc() failure. If
1076 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
1077 ** code of statement pStmt set to SQLITE_NOMEM.
1078 **
1079 ** Specifically, this is called from within:
1080 **
1081 **     sqlite3_column_int()
1082 **     sqlite3_column_int64()
1083 **     sqlite3_column_text()
1084 **     sqlite3_column_text16()
1085 **     sqlite3_column_real()
1086 **     sqlite3_column_bytes()
1087 **     sqlite3_column_bytes16()
1088 **     sqiite3_column_blob()
1089 */
1090 static void columnMallocFailure(sqlite3_stmt *pStmt)
1091 {
1092   /* If malloc() failed during an encoding conversion within an
1093   ** sqlite3_column_XXX API, then set the return code of the statement to
1094   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
1095   ** and _finalize() will return NOMEM.
1096   */
1097   Vdbe *p = (Vdbe *)pStmt;
1098   if( p ){
1099     assert( p->db!=0 );
1100     assert( sqlite3_mutex_held(p->db->mutex) );
1101     p->rc = sqlite3ApiExit(p->db, p->rc);
1102     sqlite3_mutex_leave(p->db->mutex);
1103   }
1104 }
1105 
1106 /**************************** sqlite3_column_  *******************************
1107 ** The following routines are used to access elements of the current row
1108 ** in the result set.
1109 */
1110 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
1111   const void *val;
1112   val = sqlite3_value_blob( columnMem(pStmt,i) );
1113   /* Even though there is no encoding conversion, value_blob() might
1114   ** need to call malloc() to expand the result of a zeroblob()
1115   ** expression.
1116   */
1117   columnMallocFailure(pStmt);
1118   return val;
1119 }
1120 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
1121   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
1122   columnMallocFailure(pStmt);
1123   return val;
1124 }
1125 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
1126   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
1127   columnMallocFailure(pStmt);
1128   return val;
1129 }
1130 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
1131   double val = sqlite3_value_double( columnMem(pStmt,i) );
1132   columnMallocFailure(pStmt);
1133   return val;
1134 }
1135 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
1136   int val = sqlite3_value_int( columnMem(pStmt,i) );
1137   columnMallocFailure(pStmt);
1138   return val;
1139 }
1140 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
1141   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
1142   columnMallocFailure(pStmt);
1143   return val;
1144 }
1145 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
1146   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
1147   columnMallocFailure(pStmt);
1148   return val;
1149 }
1150 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
1151   Mem *pOut = columnMem(pStmt, i);
1152   if( pOut->flags&MEM_Static ){
1153     pOut->flags &= ~MEM_Static;
1154     pOut->flags |= MEM_Ephem;
1155   }
1156   columnMallocFailure(pStmt);
1157   return (sqlite3_value *)pOut;
1158 }
1159 #ifndef SQLITE_OMIT_UTF16
1160 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
1161   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
1162   columnMallocFailure(pStmt);
1163   return val;
1164 }
1165 #endif /* SQLITE_OMIT_UTF16 */
1166 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
1167   int iType = sqlite3_value_type( columnMem(pStmt,i) );
1168   columnMallocFailure(pStmt);
1169   return iType;
1170 }
1171 
1172 /*
1173 ** Convert the N-th element of pStmt->pColName[] into a string using
1174 ** xFunc() then return that string.  If N is out of range, return 0.
1175 **
1176 ** There are up to 5 names for each column.  useType determines which
1177 ** name is returned.  Here are the names:
1178 **
1179 **    0      The column name as it should be displayed for output
1180 **    1      The datatype name for the column
1181 **    2      The name of the database that the column derives from
1182 **    3      The name of the table that the column derives from
1183 **    4      The name of the table column that the result column derives from
1184 **
1185 ** If the result is not a simple column reference (if it is an expression
1186 ** or a constant) then useTypes 2, 3, and 4 return NULL.
1187 */
1188 static const void *columnName(
1189   sqlite3_stmt *pStmt,     /* The statement */
1190   int N,                   /* Which column to get the name for */
1191   int useUtf16,            /* True to return the name as UTF16 */
1192   int useType              /* What type of name */
1193 ){
1194   const void *ret;
1195   Vdbe *p;
1196   int n;
1197   sqlite3 *db;
1198 #ifdef SQLITE_ENABLE_API_ARMOR
1199   if( pStmt==0 ){
1200     (void)SQLITE_MISUSE_BKPT;
1201     return 0;
1202   }
1203 #endif
1204   ret = 0;
1205   p = (Vdbe *)pStmt;
1206   db = p->db;
1207   assert( db!=0 );
1208   n = sqlite3_column_count(pStmt);
1209   if( N<n && N>=0 ){
1210     N += useType*n;
1211     sqlite3_mutex_enter(db->mutex);
1212     assert( db->mallocFailed==0 );
1213 #ifndef SQLITE_OMIT_UTF16
1214     if( useUtf16 ){
1215       ret = sqlite3_value_text16((sqlite3_value*)&p->aColName[N]);
1216     }else
1217 #endif
1218     {
1219       ret = sqlite3_value_text((sqlite3_value*)&p->aColName[N]);
1220     }
1221     /* A malloc may have failed inside of the _text() call. If this
1222     ** is the case, clear the mallocFailed flag and return NULL.
1223     */
1224     if( db->mallocFailed ){
1225       sqlite3OomClear(db);
1226       ret = 0;
1227     }
1228     sqlite3_mutex_leave(db->mutex);
1229   }
1230   return ret;
1231 }
1232 
1233 /*
1234 ** Return the name of the Nth column of the result set returned by SQL
1235 ** statement pStmt.
1236 */
1237 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
1238   return columnName(pStmt, N, 0, COLNAME_NAME);
1239 }
1240 #ifndef SQLITE_OMIT_UTF16
1241 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
1242   return columnName(pStmt, N, 1, COLNAME_NAME);
1243 }
1244 #endif
1245 
1246 /*
1247 ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
1248 ** not define OMIT_DECLTYPE.
1249 */
1250 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
1251 # error "Must not define both SQLITE_OMIT_DECLTYPE \
1252          and SQLITE_ENABLE_COLUMN_METADATA"
1253 #endif
1254 
1255 #ifndef SQLITE_OMIT_DECLTYPE
1256 /*
1257 ** Return the column declaration type (if applicable) of the 'i'th column
1258 ** of the result set of SQL statement pStmt.
1259 */
1260 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
1261   return columnName(pStmt, N, 0, COLNAME_DECLTYPE);
1262 }
1263 #ifndef SQLITE_OMIT_UTF16
1264 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
1265   return columnName(pStmt, N, 1, COLNAME_DECLTYPE);
1266 }
1267 #endif /* SQLITE_OMIT_UTF16 */
1268 #endif /* SQLITE_OMIT_DECLTYPE */
1269 
1270 #ifdef SQLITE_ENABLE_COLUMN_METADATA
1271 /*
1272 ** Return the name of the database from which a result column derives.
1273 ** NULL is returned if the result column is an expression or constant or
1274 ** anything else which is not an unambiguous reference to a database column.
1275 */
1276 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
1277   return columnName(pStmt, N, 0, COLNAME_DATABASE);
1278 }
1279 #ifndef SQLITE_OMIT_UTF16
1280 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
1281   return columnName(pStmt, N, 1, COLNAME_DATABASE);
1282 }
1283 #endif /* SQLITE_OMIT_UTF16 */
1284 
1285 /*
1286 ** Return the name of the table from which a result column derives.
1287 ** NULL is returned if the result column is an expression or constant or
1288 ** anything else which is not an unambiguous reference to a database column.
1289 */
1290 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
1291   return columnName(pStmt, N, 0, COLNAME_TABLE);
1292 }
1293 #ifndef SQLITE_OMIT_UTF16
1294 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
1295   return columnName(pStmt, N, 1, COLNAME_TABLE);
1296 }
1297 #endif /* SQLITE_OMIT_UTF16 */
1298 
1299 /*
1300 ** Return the name of the table column from which a result column derives.
1301 ** NULL is returned if the result column is an expression or constant or
1302 ** anything else which is not an unambiguous reference to a database column.
1303 */
1304 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
1305   return columnName(pStmt, N, 0, COLNAME_COLUMN);
1306 }
1307 #ifndef SQLITE_OMIT_UTF16
1308 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
1309   return columnName(pStmt, N, 1, COLNAME_COLUMN);
1310 }
1311 #endif /* SQLITE_OMIT_UTF16 */
1312 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
1313 
1314 
1315 /******************************* sqlite3_bind_  ***************************
1316 **
1317 ** Routines used to attach values to wildcards in a compiled SQL statement.
1318 */
1319 /*
1320 ** Unbind the value bound to variable i in virtual machine p. This is the
1321 ** the same as binding a NULL value to the column. If the "i" parameter is
1322 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
1323 **
1324 ** A successful evaluation of this routine acquires the mutex on p.
1325 ** the mutex is released if any kind of error occurs.
1326 **
1327 ** The error code stored in database p->db is overwritten with the return
1328 ** value in any case.
1329 */
1330 static int vdbeUnbind(Vdbe *p, int i){
1331   Mem *pVar;
1332   if( vdbeSafetyNotNull(p) ){
1333     return SQLITE_MISUSE_BKPT;
1334   }
1335   sqlite3_mutex_enter(p->db->mutex);
1336   if( p->iVdbeMagic!=VDBE_MAGIC_RUN || p->pc>=0 ){
1337     sqlite3Error(p->db, SQLITE_MISUSE);
1338     sqlite3_mutex_leave(p->db->mutex);
1339     sqlite3_log(SQLITE_MISUSE,
1340         "bind on a busy prepared statement: [%s]", p->zSql);
1341     return SQLITE_MISUSE_BKPT;
1342   }
1343   if( i<1 || i>p->nVar ){
1344     sqlite3Error(p->db, SQLITE_RANGE);
1345     sqlite3_mutex_leave(p->db->mutex);
1346     return SQLITE_RANGE;
1347   }
1348   i--;
1349   pVar = &p->aVar[i];
1350   sqlite3VdbeMemRelease(pVar);
1351   pVar->flags = MEM_Null;
1352   p->db->errCode = SQLITE_OK;
1353 
1354   /* If the bit corresponding to this variable in Vdbe.expmask is set, then
1355   ** binding a new value to this variable invalidates the current query plan.
1356   **
1357   ** IMPLEMENTATION-OF: R-57496-20354 If the specific value bound to a host
1358   ** parameter in the WHERE clause might influence the choice of query plan
1359   ** for a statement, then the statement will be automatically recompiled,
1360   ** as if there had been a schema change, on the first sqlite3_step() call
1361   ** following any change to the bindings of that parameter.
1362   */
1363   assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 );
1364   if( p->expmask!=0 && (p->expmask & (i>=31 ? 0x80000000 : (u32)1<<i))!=0 ){
1365     p->expired = 1;
1366   }
1367   return SQLITE_OK;
1368 }
1369 
1370 /*
1371 ** Bind a text or BLOB value.
1372 */
1373 static int bindText(
1374   sqlite3_stmt *pStmt,   /* The statement to bind against */
1375   int i,                 /* Index of the parameter to bind */
1376   const void *zData,     /* Pointer to the data to be bound */
1377   i64 nData,             /* Number of bytes of data to be bound */
1378   void (*xDel)(void*),   /* Destructor for the data */
1379   u8 encoding            /* Encoding for the data */
1380 ){
1381   Vdbe *p = (Vdbe *)pStmt;
1382   Mem *pVar;
1383   int rc;
1384 
1385   rc = vdbeUnbind(p, i);
1386   if( rc==SQLITE_OK ){
1387     if( zData!=0 ){
1388       pVar = &p->aVar[i-1];
1389       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
1390       if( rc==SQLITE_OK && encoding!=0 ){
1391         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
1392       }
1393       if( rc ){
1394         sqlite3Error(p->db, rc);
1395         rc = sqlite3ApiExit(p->db, rc);
1396       }
1397     }
1398     sqlite3_mutex_leave(p->db->mutex);
1399   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
1400     xDel((void*)zData);
1401   }
1402   return rc;
1403 }
1404 
1405 
1406 /*
1407 ** Bind a blob value to an SQL statement variable.
1408 */
1409 int sqlite3_bind_blob(
1410   sqlite3_stmt *pStmt,
1411   int i,
1412   const void *zData,
1413   int nData,
1414   void (*xDel)(void*)
1415 ){
1416 #ifdef SQLITE_ENABLE_API_ARMOR
1417   if( nData<0 ) return SQLITE_MISUSE_BKPT;
1418 #endif
1419   return bindText(pStmt, i, zData, nData, xDel, 0);
1420 }
1421 int sqlite3_bind_blob64(
1422   sqlite3_stmt *pStmt,
1423   int i,
1424   const void *zData,
1425   sqlite3_uint64 nData,
1426   void (*xDel)(void*)
1427 ){
1428   assert( xDel!=SQLITE_DYNAMIC );
1429   return bindText(pStmt, i, zData, nData, xDel, 0);
1430 }
1431 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
1432   int rc;
1433   Vdbe *p = (Vdbe *)pStmt;
1434   rc = vdbeUnbind(p, i);
1435   if( rc==SQLITE_OK ){
1436     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
1437     sqlite3_mutex_leave(p->db->mutex);
1438   }
1439   return rc;
1440 }
1441 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
1442   return sqlite3_bind_int64(p, i, (i64)iValue);
1443 }
1444 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
1445   int rc;
1446   Vdbe *p = (Vdbe *)pStmt;
1447   rc = vdbeUnbind(p, i);
1448   if( rc==SQLITE_OK ){
1449     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
1450     sqlite3_mutex_leave(p->db->mutex);
1451   }
1452   return rc;
1453 }
1454 int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
1455   int rc;
1456   Vdbe *p = (Vdbe*)pStmt;
1457   rc = vdbeUnbind(p, i);
1458   if( rc==SQLITE_OK ){
1459     sqlite3_mutex_leave(p->db->mutex);
1460   }
1461   return rc;
1462 }
1463 int sqlite3_bind_pointer(
1464   sqlite3_stmt *pStmt,
1465   int i,
1466   void *pPtr,
1467   const char *zPTtype,
1468   void (*xDestructor)(void*)
1469 ){
1470   int rc;
1471   Vdbe *p = (Vdbe*)pStmt;
1472   rc = vdbeUnbind(p, i);
1473   if( rc==SQLITE_OK ){
1474     sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor);
1475     sqlite3_mutex_leave(p->db->mutex);
1476   }else if( xDestructor ){
1477     xDestructor(pPtr);
1478   }
1479   return rc;
1480 }
1481 int sqlite3_bind_text(
1482   sqlite3_stmt *pStmt,
1483   int i,
1484   const char *zData,
1485   int nData,
1486   void (*xDel)(void*)
1487 ){
1488   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
1489 }
1490 int sqlite3_bind_text64(
1491   sqlite3_stmt *pStmt,
1492   int i,
1493   const char *zData,
1494   sqlite3_uint64 nData,
1495   void (*xDel)(void*),
1496   unsigned char enc
1497 ){
1498   assert( xDel!=SQLITE_DYNAMIC );
1499   if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
1500   return bindText(pStmt, i, zData, nData, xDel, enc);
1501 }
1502 #ifndef SQLITE_OMIT_UTF16
1503 int sqlite3_bind_text16(
1504   sqlite3_stmt *pStmt,
1505   int i,
1506   const void *zData,
1507   int nData,
1508   void (*xDel)(void*)
1509 ){
1510   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
1511 }
1512 #endif /* SQLITE_OMIT_UTF16 */
1513 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
1514   int rc;
1515   switch( sqlite3_value_type((sqlite3_value*)pValue) ){
1516     case SQLITE_INTEGER: {
1517       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
1518       break;
1519     }
1520     case SQLITE_FLOAT: {
1521       rc = sqlite3_bind_double(pStmt, i, pValue->u.r);
1522       break;
1523     }
1524     case SQLITE_BLOB: {
1525       if( pValue->flags & MEM_Zero ){
1526         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
1527       }else{
1528         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
1529       }
1530       break;
1531     }
1532     case SQLITE_TEXT: {
1533       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
1534                               pValue->enc);
1535       break;
1536     }
1537     default: {
1538       rc = sqlite3_bind_null(pStmt, i);
1539       break;
1540     }
1541   }
1542   return rc;
1543 }
1544 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
1545   int rc;
1546   Vdbe *p = (Vdbe *)pStmt;
1547   rc = vdbeUnbind(p, i);
1548   if( rc==SQLITE_OK ){
1549     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
1550     sqlite3_mutex_leave(p->db->mutex);
1551   }
1552   return rc;
1553 }
1554 int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){
1555   int rc;
1556   Vdbe *p = (Vdbe *)pStmt;
1557   sqlite3_mutex_enter(p->db->mutex);
1558   if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){
1559     rc = SQLITE_TOOBIG;
1560   }else{
1561     assert( (n & 0x7FFFFFFF)==n );
1562     rc = sqlite3_bind_zeroblob(pStmt, i, n);
1563   }
1564   rc = sqlite3ApiExit(p->db, rc);
1565   sqlite3_mutex_leave(p->db->mutex);
1566   return rc;
1567 }
1568 
1569 /*
1570 ** Return the number of wildcards that can be potentially bound to.
1571 ** This routine is added to support DBD::SQLite.
1572 */
1573 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
1574   Vdbe *p = (Vdbe*)pStmt;
1575   return p ? p->nVar : 0;
1576 }
1577 
1578 /*
1579 ** Return the name of a wildcard parameter.  Return NULL if the index
1580 ** is out of range or if the wildcard is unnamed.
1581 **
1582 ** The result is always UTF-8.
1583 */
1584 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
1585   Vdbe *p = (Vdbe*)pStmt;
1586   if( p==0 ) return 0;
1587   return sqlite3VListNumToName(p->pVList, i);
1588 }
1589 
1590 /*
1591 ** Given a wildcard parameter name, return the index of the variable
1592 ** with that name.  If there is no variable with the given name,
1593 ** return 0.
1594 */
1595 int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
1596   if( p==0 || zName==0 ) return 0;
1597   return sqlite3VListNameToNum(p->pVList, zName, nName);
1598 }
1599 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
1600   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
1601 }
1602 
1603 /*
1604 ** Transfer all bindings from the first statement over to the second.
1605 */
1606 int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1607   Vdbe *pFrom = (Vdbe*)pFromStmt;
1608   Vdbe *pTo = (Vdbe*)pToStmt;
1609   int i;
1610   assert( pTo->db==pFrom->db );
1611   assert( pTo->nVar==pFrom->nVar );
1612   sqlite3_mutex_enter(pTo->db->mutex);
1613   for(i=0; i<pFrom->nVar; i++){
1614     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
1615   }
1616   sqlite3_mutex_leave(pTo->db->mutex);
1617   return SQLITE_OK;
1618 }
1619 
1620 #ifndef SQLITE_OMIT_DEPRECATED
1621 /*
1622 ** Deprecated external interface.  Internal/core SQLite code
1623 ** should call sqlite3TransferBindings.
1624 **
1625 ** It is misuse to call this routine with statements from different
1626 ** database connections.  But as this is a deprecated interface, we
1627 ** will not bother to check for that condition.
1628 **
1629 ** If the two statements contain a different number of bindings, then
1630 ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
1631 ** SQLITE_OK is returned.
1632 */
1633 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1634   Vdbe *pFrom = (Vdbe*)pFromStmt;
1635   Vdbe *pTo = (Vdbe*)pToStmt;
1636   if( pFrom->nVar!=pTo->nVar ){
1637     return SQLITE_ERROR;
1638   }
1639   assert( (pTo->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pTo->expmask==0 );
1640   if( pTo->expmask ){
1641     pTo->expired = 1;
1642   }
1643   assert( (pFrom->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pFrom->expmask==0 );
1644   if( pFrom->expmask ){
1645     pFrom->expired = 1;
1646   }
1647   return sqlite3TransferBindings(pFromStmt, pToStmt);
1648 }
1649 #endif
1650 
1651 /*
1652 ** Return the sqlite3* database handle to which the prepared statement given
1653 ** in the argument belongs.  This is the same database handle that was
1654 ** the first argument to the sqlite3_prepare() that was used to create
1655 ** the statement in the first place.
1656 */
1657 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
1658   return pStmt ? ((Vdbe*)pStmt)->db : 0;
1659 }
1660 
1661 /*
1662 ** Return true if the prepared statement is guaranteed to not modify the
1663 ** database.
1664 */
1665 int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
1666   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
1667 }
1668 
1669 /*
1670 ** Return 1 if the statement is an EXPLAIN and return 2 if the
1671 ** statement is an EXPLAIN QUERY PLAN
1672 */
1673 int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){
1674   return pStmt ? ((Vdbe*)pStmt)->explain : 0;
1675 }
1676 
1677 /*
1678 ** Return true if the prepared statement is in need of being reset.
1679 */
1680 int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
1681   Vdbe *v = (Vdbe*)pStmt;
1682   return v!=0 && v->iVdbeMagic==VDBE_MAGIC_RUN && v->pc>=0;
1683 }
1684 
1685 /*
1686 ** Return a pointer to the next prepared statement after pStmt associated
1687 ** with database connection pDb.  If pStmt is NULL, return the first
1688 ** prepared statement for the database connection.  Return NULL if there
1689 ** are no more.
1690 */
1691 sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
1692   sqlite3_stmt *pNext;
1693 #ifdef SQLITE_ENABLE_API_ARMOR
1694   if( !sqlite3SafetyCheckOk(pDb) ){
1695     (void)SQLITE_MISUSE_BKPT;
1696     return 0;
1697   }
1698 #endif
1699   sqlite3_mutex_enter(pDb->mutex);
1700   if( pStmt==0 ){
1701     pNext = (sqlite3_stmt*)pDb->pVdbe;
1702   }else{
1703     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
1704   }
1705   sqlite3_mutex_leave(pDb->mutex);
1706   return pNext;
1707 }
1708 
1709 /*
1710 ** Return the value of a status counter for a prepared statement
1711 */
1712 int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
1713   Vdbe *pVdbe = (Vdbe*)pStmt;
1714   u32 v;
1715 #ifdef SQLITE_ENABLE_API_ARMOR
1716   if( !pStmt
1717    || (op!=SQLITE_STMTSTATUS_MEMUSED && (op<0||op>=ArraySize(pVdbe->aCounter)))
1718   ){
1719     (void)SQLITE_MISUSE_BKPT;
1720     return 0;
1721   }
1722 #endif
1723   if( op==SQLITE_STMTSTATUS_MEMUSED ){
1724     sqlite3 *db = pVdbe->db;
1725     sqlite3_mutex_enter(db->mutex);
1726     v = 0;
1727     db->pnBytesFreed = (int*)&v;
1728     sqlite3VdbeClearObject(db, pVdbe);
1729     sqlite3DbFree(db, pVdbe);
1730     db->pnBytesFreed = 0;
1731     sqlite3_mutex_leave(db->mutex);
1732   }else{
1733     v = pVdbe->aCounter[op];
1734     if( resetFlag ) pVdbe->aCounter[op] = 0;
1735   }
1736   return (int)v;
1737 }
1738 
1739 /*
1740 ** Return the SQL associated with a prepared statement
1741 */
1742 const char *sqlite3_sql(sqlite3_stmt *pStmt){
1743   Vdbe *p = (Vdbe *)pStmt;
1744   return p ? p->zSql : 0;
1745 }
1746 
1747 /*
1748 ** Return the SQL associated with a prepared statement with
1749 ** bound parameters expanded.  Space to hold the returned string is
1750 ** obtained from sqlite3_malloc().  The caller is responsible for
1751 ** freeing the returned string by passing it to sqlite3_free().
1752 **
1753 ** The SQLITE_TRACE_SIZE_LIMIT puts an upper bound on the size of
1754 ** expanded bound parameters.
1755 */
1756 char *sqlite3_expanded_sql(sqlite3_stmt *pStmt){
1757 #ifdef SQLITE_OMIT_TRACE
1758   return 0;
1759 #else
1760   char *z = 0;
1761   const char *zSql = sqlite3_sql(pStmt);
1762   if( zSql ){
1763     Vdbe *p = (Vdbe *)pStmt;
1764     sqlite3_mutex_enter(p->db->mutex);
1765     z = sqlite3VdbeExpandSql(p, zSql);
1766     sqlite3_mutex_leave(p->db->mutex);
1767   }
1768   return z;
1769 #endif
1770 }
1771 
1772 #ifdef SQLITE_ENABLE_NORMALIZE
1773 /*
1774 ** Return the normalized SQL associated with a prepared statement.
1775 */
1776 const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt){
1777   Vdbe *p = (Vdbe *)pStmt;
1778   if( p==0 ) return 0;
1779   if( p->zNormSql==0 && ALWAYS(p->zSql!=0) ){
1780     sqlite3_mutex_enter(p->db->mutex);
1781     p->zNormSql = sqlite3Normalize(p, p->zSql);
1782     sqlite3_mutex_leave(p->db->mutex);
1783   }
1784   return p->zNormSql;
1785 }
1786 #endif /* SQLITE_ENABLE_NORMALIZE */
1787 
1788 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
1789 /*
1790 ** Allocate and populate an UnpackedRecord structure based on the serialized
1791 ** record in nKey/pKey. Return a pointer to the new UnpackedRecord structure
1792 ** if successful, or a NULL pointer if an OOM error is encountered.
1793 */
1794 static UnpackedRecord *vdbeUnpackRecord(
1795   KeyInfo *pKeyInfo,
1796   int nKey,
1797   const void *pKey
1798 ){
1799   UnpackedRecord *pRet;           /* Return value */
1800 
1801   pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo);
1802   if( pRet ){
1803     memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1));
1804     sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, pRet);
1805   }
1806   return pRet;
1807 }
1808 
1809 /*
1810 ** This function is called from within a pre-update callback to retrieve
1811 ** a field of the row currently being updated or deleted.
1812 */
1813 int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
1814   PreUpdate *p = db->pPreUpdate;
1815   Mem *pMem;
1816   int rc = SQLITE_OK;
1817 
1818   /* Test that this call is being made from within an SQLITE_DELETE or
1819   ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */
1820   if( !p || p->op==SQLITE_INSERT ){
1821     rc = SQLITE_MISUSE_BKPT;
1822     goto preupdate_old_out;
1823   }
1824   if( p->pPk ){
1825     iIdx = sqlite3TableColumnToIndex(p->pPk, iIdx);
1826   }
1827   if( iIdx>=p->pCsr->nField || iIdx<0 ){
1828     rc = SQLITE_RANGE;
1829     goto preupdate_old_out;
1830   }
1831 
1832   /* If the old.* record has not yet been loaded into memory, do so now. */
1833   if( p->pUnpacked==0 ){
1834     u32 nRec;
1835     u8 *aRec;
1836 
1837     nRec = sqlite3BtreePayloadSize(p->pCsr->uc.pCursor);
1838     aRec = sqlite3DbMallocRaw(db, nRec);
1839     if( !aRec ) goto preupdate_old_out;
1840     rc = sqlite3BtreePayload(p->pCsr->uc.pCursor, 0, nRec, aRec);
1841     if( rc==SQLITE_OK ){
1842       p->pUnpacked = vdbeUnpackRecord(&p->keyinfo, nRec, aRec);
1843       if( !p->pUnpacked ) rc = SQLITE_NOMEM;
1844     }
1845     if( rc!=SQLITE_OK ){
1846       sqlite3DbFree(db, aRec);
1847       goto preupdate_old_out;
1848     }
1849     p->aRecord = aRec;
1850   }
1851 
1852   pMem = *ppValue = &p->pUnpacked->aMem[iIdx];
1853   if( iIdx==p->pTab->iPKey ){
1854     sqlite3VdbeMemSetInt64(pMem, p->iKey1);
1855   }else if( iIdx>=p->pUnpacked->nField ){
1856     *ppValue = (sqlite3_value *)columnNullValue();
1857   }else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){
1858     if( pMem->flags & (MEM_Int|MEM_IntReal) ){
1859       testcase( pMem->flags & MEM_Int );
1860       testcase( pMem->flags & MEM_IntReal );
1861       sqlite3VdbeMemRealify(pMem);
1862     }
1863   }
1864 
1865  preupdate_old_out:
1866   sqlite3Error(db, rc);
1867   return sqlite3ApiExit(db, rc);
1868 }
1869 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
1870 
1871 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
1872 /*
1873 ** This function is called from within a pre-update callback to retrieve
1874 ** the number of columns in the row being updated, deleted or inserted.
1875 */
1876 int sqlite3_preupdate_count(sqlite3 *db){
1877   PreUpdate *p = db->pPreUpdate;
1878   return (p ? p->keyinfo.nKeyField : 0);
1879 }
1880 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
1881 
1882 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
1883 /*
1884 ** This function is designed to be called from within a pre-update callback
1885 ** only. It returns zero if the change that caused the callback was made
1886 ** immediately by a user SQL statement. Or, if the change was made by a
1887 ** trigger program, it returns the number of trigger programs currently
1888 ** on the stack (1 for a top-level trigger, 2 for a trigger fired by a
1889 ** top-level trigger etc.).
1890 **
1891 ** For the purposes of the previous paragraph, a foreign key CASCADE, SET NULL
1892 ** or SET DEFAULT action is considered a trigger.
1893 */
1894 int sqlite3_preupdate_depth(sqlite3 *db){
1895   PreUpdate *p = db->pPreUpdate;
1896   return (p ? p->v->nFrame : 0);
1897 }
1898 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
1899 
1900 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
1901 /*
1902 ** This function is designed to be called from within a pre-update callback
1903 ** only.
1904 */
1905 int sqlite3_preupdate_blobwrite(sqlite3 *db){
1906   PreUpdate *p = db->pPreUpdate;
1907   return (p ? p->iBlobWrite : -1);
1908 }
1909 #endif
1910 
1911 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK
1912 /*
1913 ** This function is called from within a pre-update callback to retrieve
1914 ** a field of the row currently being updated or inserted.
1915 */
1916 int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){
1917   PreUpdate *p = db->pPreUpdate;
1918   int rc = SQLITE_OK;
1919   Mem *pMem;
1920 
1921   if( !p || p->op==SQLITE_DELETE ){
1922     rc = SQLITE_MISUSE_BKPT;
1923     goto preupdate_new_out;
1924   }
1925   if( p->pPk && p->op!=SQLITE_UPDATE ){
1926     iIdx = sqlite3TableColumnToIndex(p->pPk, iIdx);
1927   }
1928   if( iIdx>=p->pCsr->nField || iIdx<0 ){
1929     rc = SQLITE_RANGE;
1930     goto preupdate_new_out;
1931   }
1932 
1933   if( p->op==SQLITE_INSERT ){
1934     /* For an INSERT, memory cell p->iNewReg contains the serialized record
1935     ** that is being inserted. Deserialize it. */
1936     UnpackedRecord *pUnpack = p->pNewUnpacked;
1937     if( !pUnpack ){
1938       Mem *pData = &p->v->aMem[p->iNewReg];
1939       rc = ExpandBlob(pData);
1940       if( rc!=SQLITE_OK ) goto preupdate_new_out;
1941       pUnpack = vdbeUnpackRecord(&p->keyinfo, pData->n, pData->z);
1942       if( !pUnpack ){
1943         rc = SQLITE_NOMEM;
1944         goto preupdate_new_out;
1945       }
1946       p->pNewUnpacked = pUnpack;
1947     }
1948     pMem = &pUnpack->aMem[iIdx];
1949     if( iIdx==p->pTab->iPKey ){
1950       sqlite3VdbeMemSetInt64(pMem, p->iKey2);
1951     }else if( iIdx>=pUnpack->nField ){
1952       pMem = (sqlite3_value *)columnNullValue();
1953     }
1954   }else{
1955     /* For an UPDATE, memory cell (p->iNewReg+1+iIdx) contains the required
1956     ** value. Make a copy of the cell contents and return a pointer to it.
1957     ** It is not safe to return a pointer to the memory cell itself as the
1958     ** caller may modify the value text encoding.
1959     */
1960     assert( p->op==SQLITE_UPDATE );
1961     if( !p->aNew ){
1962       p->aNew = (Mem *)sqlite3DbMallocZero(db, sizeof(Mem) * p->pCsr->nField);
1963       if( !p->aNew ){
1964         rc = SQLITE_NOMEM;
1965         goto preupdate_new_out;
1966       }
1967     }
1968     assert( iIdx>=0 && iIdx<p->pCsr->nField );
1969     pMem = &p->aNew[iIdx];
1970     if( pMem->flags==0 ){
1971       if( iIdx==p->pTab->iPKey ){
1972         sqlite3VdbeMemSetInt64(pMem, p->iKey2);
1973       }else{
1974         rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iIdx]);
1975         if( rc!=SQLITE_OK ) goto preupdate_new_out;
1976       }
1977     }
1978   }
1979   *ppValue = pMem;
1980 
1981  preupdate_new_out:
1982   sqlite3Error(db, rc);
1983   return sqlite3ApiExit(db, rc);
1984 }
1985 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
1986 
1987 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
1988 /*
1989 ** Return status data for a single loop within query pStmt.
1990 */
1991 int sqlite3_stmt_scanstatus(
1992   sqlite3_stmt *pStmt,            /* Prepared statement being queried */
1993   int idx,                        /* Index of loop to report on */
1994   int iScanStatusOp,              /* Which metric to return */
1995   void *pOut                      /* OUT: Write the answer here */
1996 ){
1997   Vdbe *p = (Vdbe*)pStmt;
1998   ScanStatus *pScan;
1999   if( idx<0 || idx>=p->nScan ) return 1;
2000   pScan = &p->aScan[idx];
2001   switch( iScanStatusOp ){
2002     case SQLITE_SCANSTAT_NLOOP: {
2003       *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
2004       break;
2005     }
2006     case SQLITE_SCANSTAT_NVISIT: {
2007       *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
2008       break;
2009     }
2010     case SQLITE_SCANSTAT_EST: {
2011       double r = 1.0;
2012       LogEst x = pScan->nEst;
2013       while( x<100 ){
2014         x += 10;
2015         r *= 0.5;
2016       }
2017       *(double*)pOut = r*sqlite3LogEstToInt(x);
2018       break;
2019     }
2020     case SQLITE_SCANSTAT_NAME: {
2021       *(const char**)pOut = pScan->zName;
2022       break;
2023     }
2024     case SQLITE_SCANSTAT_EXPLAIN: {
2025       if( pScan->addrExplain ){
2026         *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z;
2027       }else{
2028         *(const char**)pOut = 0;
2029       }
2030       break;
2031     }
2032     case SQLITE_SCANSTAT_SELECTID: {
2033       if( pScan->addrExplain ){
2034         *(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
2035       }else{
2036         *(int*)pOut = -1;
2037       }
2038       break;
2039     }
2040     default: {
2041       return 1;
2042     }
2043   }
2044   return 0;
2045 }
2046 
2047 /*
2048 ** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
2049 */
2050 void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
2051   Vdbe *p = (Vdbe*)pStmt;
2052   memset(p->anExec, 0, p->nOp * sizeof(i64));
2053 }
2054 #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
2055