xref: /sqlite-3.40.0/src/vdbeapi.c (revision 74217cc0)
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 #include "os.h"
19 
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 
33 /**************************** sqlite3_value_  *******************************
34 ** The following routines extract information from a Mem or sqlite3_value
35 ** structure.
36 */
37 const void *sqlite3_value_blob(sqlite3_value *pVal){
38   Mem *p = (Mem*)pVal;
39   if( p->flags & (MEM_Blob|MEM_Str) ){
40     return p->z;
41   }else{
42     return sqlite3_value_text(pVal);
43   }
44 }
45 int sqlite3_value_bytes(sqlite3_value *pVal){
46   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
47 }
48 int sqlite3_value_bytes16(sqlite3_value *pVal){
49   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
50 }
51 double sqlite3_value_double(sqlite3_value *pVal){
52   return sqlite3VdbeRealValue((Mem*)pVal);
53 }
54 int sqlite3_value_int(sqlite3_value *pVal){
55   return sqlite3VdbeIntValue((Mem*)pVal);
56 }
57 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
58   return sqlite3VdbeIntValue((Mem*)pVal);
59 }
60 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
61   return (const char *)sqlite3ValueText(pVal, SQLITE_UTF8);
62 }
63 #ifndef SQLITE_OMIT_UTF16
64 const void *sqlite3_value_text16(sqlite3_value* pVal){
65   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
66 }
67 const void *sqlite3_value_text16be(sqlite3_value *pVal){
68   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
69 }
70 const void *sqlite3_value_text16le(sqlite3_value *pVal){
71   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
72 }
73 #endif /* SQLITE_OMIT_UTF16 */
74 int sqlite3_value_type(sqlite3_value* pVal){
75   return pVal->type;
76 }
77 
78 /**************************** sqlite3_result_  *******************************
79 ** The following routines are used by user-defined functions to specify
80 ** the function result.
81 */
82 void sqlite3_result_blob(
83   sqlite3_context *pCtx,
84   const void *z,
85   int n,
86   void (*xDel)(void *)
87 ){
88   assert( n>=0 );
89   sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel);
90 }
91 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
92   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
93 }
94 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
95   pCtx->isError = 1;
96   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
97 }
98 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
99   pCtx->isError = 1;
100   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
101 }
102 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
103   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
104 }
105 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
106   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
107 }
108 void sqlite3_result_null(sqlite3_context *pCtx){
109   sqlite3VdbeMemSetNull(&pCtx->s);
110 }
111 void sqlite3_result_text(
112   sqlite3_context *pCtx,
113   const char *z,
114   int n,
115   void (*xDel)(void *)
116 ){
117   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel);
118 }
119 #ifndef SQLITE_OMIT_UTF16
120 void sqlite3_result_text16(
121   sqlite3_context *pCtx,
122   const void *z,
123   int n,
124   void (*xDel)(void *)
125 ){
126   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel);
127 }
128 void sqlite3_result_text16be(
129   sqlite3_context *pCtx,
130   const void *z,
131   int n,
132   void (*xDel)(void *)
133 ){
134   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel);
135 }
136 void sqlite3_result_text16le(
137   sqlite3_context *pCtx,
138   const void *z,
139   int n,
140   void (*xDel)(void *)
141 ){
142   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel);
143 }
144 #endif /* SQLITE_OMIT_UTF16 */
145 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
146   sqlite3VdbeMemCopy(&pCtx->s, pValue);
147 }
148 
149 
150 /*
151 ** Execute the statement pStmt, either until a row of data is ready, the
152 ** statement is completely executed or an error occurs.
153 */
154 int sqlite3_step(sqlite3_stmt *pStmt){
155   Vdbe *p = (Vdbe*)pStmt;
156   sqlite3 *db;
157   int rc;
158 
159   if( p==0 || p->magic!=VDBE_MAGIC_RUN ){
160     return SQLITE_MISUSE;
161   }
162   if( p->aborted ){
163     return SQLITE_ABORT;
164   }
165   if( p->pc<=0 && p->expired ){
166     if( p->rc==SQLITE_OK ){
167       p->rc = SQLITE_SCHEMA;
168     }
169     return SQLITE_ERROR;
170   }
171   db = p->db;
172   if( sqlite3SafetyOn(db) ){
173     p->rc = SQLITE_MISUSE;
174     return SQLITE_MISUSE;
175   }
176   if( p->pc<0 ){
177 #ifndef SQLITE_OMIT_TRACE
178     /* Invoke the trace callback if there is one
179     */
180     if( db->xTrace && !db->init.busy ){
181       assert( p->nOp>0 );
182       assert( p->aOp[p->nOp-1].opcode==OP_Noop );
183       assert( p->aOp[p->nOp-1].p3!=0 );
184       assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
185       sqlite3SafetyOff(db);
186       db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3);
187       if( sqlite3SafetyOn(db) ){
188         p->rc = SQLITE_MISUSE;
189         return SQLITE_MISUSE;
190       }
191     }
192     if( db->xProfile && !db->init.busy ){
193       double rNow;
194       sqlite3OsCurrentTime(&rNow);
195       p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0;
196     }
197 #endif
198 
199     /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned
200     ** on in debugging mode.
201     */
202 #ifdef SQLITE_DEBUG
203     if( (db->flags & SQLITE_SqlTrace)!=0 ){
204       sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3);
205     }
206 #endif /* SQLITE_DEBUG */
207 
208     db->activeVdbeCnt++;
209     p->pc = 0;
210   }
211 #ifndef SQLITE_OMIT_EXPLAIN
212   if( p->explain ){
213     rc = sqlite3VdbeList(p);
214   }else
215 #endif /* SQLITE_OMIT_EXPLAIN */
216   {
217     rc = sqlite3VdbeExec(p);
218   }
219 
220   if( sqlite3SafetyOff(db) ){
221     rc = SQLITE_MISUSE;
222   }
223 
224 #ifndef SQLITE_OMIT_TRACE
225   /* Invoke the profile callback if there is one
226   */
227   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){
228     double rNow;
229     u64 elapseTime;
230 
231     sqlite3OsCurrentTime(&rNow);
232     elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime;
233     assert( p->nOp>0 );
234     assert( p->aOp[p->nOp-1].opcode==OP_Noop );
235     assert( p->aOp[p->nOp-1].p3!=0 );
236     assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
237     db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime);
238   }
239 #endif
240 
241   sqlite3Error(p->db, rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
242   return rc;
243 }
244 
245 /*
246 ** Extract the user data from a sqlite3_context structure and return a
247 ** pointer to it.
248 */
249 void *sqlite3_user_data(sqlite3_context *p){
250   assert( p && p->pFunc );
251   return p->pFunc->pUserData;
252 }
253 
254 /*
255 ** Allocate or return the aggregate context for a user function.  A new
256 ** context is allocated on the first call.  Subsequent calls return the
257 ** same context that was returned on prior calls.
258 */
259 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
260   Mem *pMem = p->pMem;
261   assert( p && p->pFunc && p->pFunc->xStep );
262   if( (pMem->flags & MEM_Agg)==0 ){
263     if( nByte==0 ){
264       assert( pMem->flags==MEM_Null );
265       pMem->z = 0;
266     }else{
267       pMem->flags = MEM_Agg;
268       pMem->xDel = sqlite3FreeX;
269       *(FuncDef**)&pMem->i = p->pFunc;
270       if( nByte<=NBFS ){
271         pMem->z = pMem->zShort;
272         memset(pMem->z, 0, nByte);
273       }else{
274         pMem->z = sqliteMalloc( nByte );
275       }
276     }
277   }
278   return (void*)pMem->z;
279 }
280 
281 /*
282 ** Return the auxilary data pointer, if any, for the iArg'th argument to
283 ** the user-function defined by pCtx.
284 */
285 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
286   VdbeFunc *pVdbeFunc = pCtx->pVdbeFunc;
287   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
288     return 0;
289   }
290   return pVdbeFunc->apAux[iArg].pAux;
291 }
292 
293 /*
294 ** Set the auxilary data pointer and delete function, for the iArg'th
295 ** argument to the user-function defined by pCtx. Any previous value is
296 ** deleted by calling the delete function specified when it was set.
297 */
298 void sqlite3_set_auxdata(
299   sqlite3_context *pCtx,
300   int iArg,
301   void *pAux,
302   void (*xDelete)(void*)
303 ){
304   struct AuxData *pAuxData;
305   VdbeFunc *pVdbeFunc;
306   if( iArg<0 ) return;
307 
308   pVdbeFunc = pCtx->pVdbeFunc;
309   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
310     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
311     pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc);
312     if( !pVdbeFunc ) return;
313     pCtx->pVdbeFunc = pVdbeFunc;
314     memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0,
315              sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux));
316     pVdbeFunc->nAux = iArg+1;
317     pVdbeFunc->pFunc = pCtx->pFunc;
318   }
319 
320   pAuxData = &pVdbeFunc->apAux[iArg];
321   if( pAuxData->pAux && pAuxData->xDelete ){
322     pAuxData->xDelete(pAuxData->pAux);
323   }
324   pAuxData->pAux = pAux;
325   pAuxData->xDelete = xDelete;
326 }
327 
328 /*
329 ** Return the number of times the Step function of a aggregate has been
330 ** called.
331 **
332 ** This routine is defined here in vdbe.c because it depends on knowing
333 ** the internals of the sqlite3_context structure which is only defined in
334 ** this source file.
335 */
336 int sqlite3_aggregate_count(sqlite3_context *p){
337   assert( p && p->pFunc && p->pFunc->xStep );
338   return p->pMem->n;
339 }
340 
341 /*
342 ** Return the number of columns in the result set for the statement pStmt.
343 */
344 int sqlite3_column_count(sqlite3_stmt *pStmt){
345   Vdbe *pVm = (Vdbe *)pStmt;
346   return pVm ? pVm->nResColumn : 0;
347 }
348 
349 /*
350 ** Return the number of values available from the current row of the
351 ** currently executing statement pStmt.
352 */
353 int sqlite3_data_count(sqlite3_stmt *pStmt){
354   Vdbe *pVm = (Vdbe *)pStmt;
355   if( pVm==0 || !pVm->resOnStack ) return 0;
356   return pVm->nResColumn;
357 }
358 
359 
360 /*
361 ** Check to see if column iCol of the given statement is valid.  If
362 ** it is, return a pointer to the Mem for the value of that column.
363 ** If iCol is not valid, return a pointer to a Mem which has a value
364 ** of NULL.
365 */
366 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
367   Vdbe *pVm = (Vdbe *)pStmt;
368   int vals = sqlite3_data_count(pStmt);
369   if( i>=vals || i<0 ){
370     static Mem nullMem;
371     if( nullMem.flags==0 ){ nullMem.flags = MEM_Null; }
372     sqlite3Error(pVm->db, SQLITE_RANGE, 0);
373     return &nullMem;
374   }
375   return &pVm->pTos[(1-vals)+i];
376 }
377 
378 /**************************** sqlite3_column_  *******************************
379 ** The following routines are used to access elements of the current row
380 ** in the result set.
381 */
382 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
383   return sqlite3_value_blob( columnMem(pStmt,i) );
384 }
385 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
386   return sqlite3_value_bytes( columnMem(pStmt,i) );
387 }
388 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
389   return sqlite3_value_bytes16( columnMem(pStmt,i) );
390 }
391 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
392   return sqlite3_value_double( columnMem(pStmt,i) );
393 }
394 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
395   return sqlite3_value_int( columnMem(pStmt,i) );
396 }
397 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
398   return sqlite3_value_int64( columnMem(pStmt,i) );
399 }
400 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
401   return sqlite3_value_text( columnMem(pStmt,i) );
402 }
403 #if 0
404 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
405   return columnMem(pStmt, i);
406 }
407 #endif
408 #ifndef SQLITE_OMIT_UTF16
409 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
410   return sqlite3_value_text16( columnMem(pStmt,i) );
411 }
412 #endif /* SQLITE_OMIT_UTF16 */
413 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
414   return sqlite3_value_type( columnMem(pStmt,i) );
415 }
416 
417 /*
418 ** Convert the N-th element of pStmt->pColName[] into a string using
419 ** xFunc() then return that string.  If N is out of range, return 0.
420 **
421 ** There are up to 5 names for each column.  useType determines which
422 ** name is returned.  Here are the names:
423 **
424 **    0      The column name as it should be displayed for output
425 **    1      The datatype name for the column
426 **    2      The name of the database that the column derives from
427 **    3      The name of the table that the column derives from
428 **    4      The name of the table column that the result column derives from
429 **
430 ** If the result is not a simple column reference (if it is an expression
431 ** or a constant) then useTypes 2, 3, and 4 return NULL.
432 */
433 static const void *columnName(
434   sqlite3_stmt *pStmt,
435   int N,
436   const void *(*xFunc)(Mem*),
437   int useType
438 ){
439   Vdbe *p = (Vdbe *)pStmt;
440   int n = sqlite3_column_count(pStmt);
441 
442   if( p==0 || N>=n || N<0 ){
443     return 0;
444   }
445   N += useType*n;
446   return xFunc(&p->aColName[N]);
447 }
448 
449 
450 /*
451 ** Return the name of the Nth column of the result set returned by SQL
452 ** statement pStmt.
453 */
454 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
455   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 0);
456 }
457 #ifndef SQLITE_OMIT_UTF16
458 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
459   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 0);
460 }
461 #endif
462 
463 /*
464 ** Return the column declaration type (if applicable) of the 'i'th column
465 ** of the result set of SQL statement pStmt.
466 */
467 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
468   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 1);
469 }
470 #ifndef SQLITE_OMIT_UTF16
471 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
472   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 1);
473 }
474 #endif /* SQLITE_OMIT_UTF16 */
475 
476 #if !defined(SQLITE_OMIT_ORIGIN_NAMES) && 0
477 /*
478 ** Return the name of the database from which a result column derives.
479 ** NULL is returned if the result column is an expression or constant or
480 ** anything else which is not an unabiguous reference to a database column.
481 */
482 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
483   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 2);
484 }
485 #ifndef SQLITE_OMIT_UTF16
486 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
487   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 2);
488 }
489 #endif /* SQLITE_OMIT_UTF16 */
490 
491 /*
492 ** Return the name of the table from which a result column derives.
493 ** NULL is returned if the result column is an expression or constant or
494 ** anything else which is not an unabiguous reference to a database column.
495 */
496 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
497   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 3);
498 }
499 #ifndef SQLITE_OMIT_UTF16
500 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
501   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 3);
502 }
503 #endif /* SQLITE_OMIT_UTF16 */
504 
505 /*
506 ** Return the name of the table column from which a result column derives.
507 ** NULL is returned if the result column is an expression or constant or
508 ** anything else which is not an unabiguous reference to a database column.
509 */
510 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
511   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, 4);
512 }
513 #ifndef SQLITE_OMIT_UTF16
514 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
515   return columnName(pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, 4);
516 }
517 #endif /* SQLITE_OMIT_UTF16 */
518 #endif /* SQLITE_OMIT_ORIGIN_NAMES */
519 
520 
521 
522 
523 /******************************* sqlite3_bind_  ***************************
524 **
525 ** Routines used to attach values to wildcards in a compiled SQL statement.
526 */
527 /*
528 ** Unbind the value bound to variable i in virtual machine p. This is the
529 ** the same as binding a NULL value to the column. If the "i" parameter is
530 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
531 **
532 ** The error code stored in database p->db is overwritten with the return
533 ** value in any case.
534 */
535 static int vdbeUnbind(Vdbe *p, int i){
536   Mem *pVar;
537   if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
538     if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0);
539     return SQLITE_MISUSE;
540   }
541   if( i<1 || i>p->nVar ){
542     sqlite3Error(p->db, SQLITE_RANGE, 0);
543     return SQLITE_RANGE;
544   }
545   i--;
546   pVar = &p->aVar[i];
547   sqlite3VdbeMemRelease(pVar);
548   pVar->flags = MEM_Null;
549   sqlite3Error(p->db, SQLITE_OK, 0);
550   return SQLITE_OK;
551 }
552 
553 /*
554 ** Bind a text or BLOB value.
555 */
556 static int bindText(
557   sqlite3_stmt *pStmt,
558   int i,
559   const void *zData,
560   int nData,
561   void (*xDel)(void*),
562   int encoding
563 ){
564   Vdbe *p = (Vdbe *)pStmt;
565   Mem *pVar;
566   int rc;
567 
568   rc = vdbeUnbind(p, i);
569   if( rc || zData==0 ){
570     return rc;
571   }
572   pVar = &p->aVar[i-1];
573   rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
574   if( rc ){
575     return rc;
576   }
577   if( rc==SQLITE_OK && encoding!=0 ){
578     rc = sqlite3VdbeChangeEncoding(pVar, p->db->enc);
579   }
580   return rc;
581 }
582 
583 
584 /*
585 ** Bind a blob value to an SQL statement variable.
586 */
587 int sqlite3_bind_blob(
588   sqlite3_stmt *pStmt,
589   int i,
590   const void *zData,
591   int nData,
592   void (*xDel)(void*)
593 ){
594   return bindText(pStmt, i, zData, nData, xDel, 0);
595 }
596 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
597   int rc;
598   Vdbe *p = (Vdbe *)pStmt;
599   rc = vdbeUnbind(p, i);
600   if( rc==SQLITE_OK ){
601     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
602   }
603   return rc;
604 }
605 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
606   return sqlite3_bind_int64(p, i, (i64)iValue);
607 }
608 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
609   int rc;
610   Vdbe *p = (Vdbe *)pStmt;
611   rc = vdbeUnbind(p, i);
612   if( rc==SQLITE_OK ){
613     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
614   }
615   return rc;
616 }
617 int sqlite3_bind_null(sqlite3_stmt* p, int i){
618   return vdbeUnbind((Vdbe *)p, i);
619 }
620 int sqlite3_bind_text(
621   sqlite3_stmt *pStmt,
622   int i,
623   const char *zData,
624   int nData,
625   void (*xDel)(void*)
626 ){
627   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
628 }
629 #ifndef SQLITE_OMIT_UTF16
630 int sqlite3_bind_text16(
631   sqlite3_stmt *pStmt,
632   int i,
633   const void *zData,
634   int nData,
635   void (*xDel)(void*)
636 ){
637   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
638 }
639 #endif /* SQLITE_OMIT_UTF16 */
640 
641 /*
642 ** Return the number of wildcards that can be potentially bound to.
643 ** This routine is added to support DBD::SQLite.
644 */
645 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
646   Vdbe *p = (Vdbe*)pStmt;
647   return p ? p->nVar : 0;
648 }
649 
650 /*
651 ** Create a mapping from variable numbers to variable names
652 ** in the Vdbe.azVar[] array, if such a mapping does not already
653 ** exist.
654 */
655 static void createVarMap(Vdbe *p){
656   if( !p->okVar ){
657     int j;
658     Op *pOp;
659     for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
660       if( pOp->opcode==OP_Variable ){
661         assert( pOp->p1>0 && pOp->p1<=p->nVar );
662         p->azVar[pOp->p1-1] = pOp->p3;
663       }
664     }
665     p->okVar = 1;
666   }
667 }
668 
669 /*
670 ** Return the name of a wildcard parameter.  Return NULL if the index
671 ** is out of range or if the wildcard is unnamed.
672 **
673 ** The result is always UTF-8.
674 */
675 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
676   Vdbe *p = (Vdbe*)pStmt;
677   if( p==0 || i<1 || i>p->nVar ){
678     return 0;
679   }
680   createVarMap(p);
681   return p->azVar[i-1];
682 }
683 
684 /*
685 ** Given a wildcard parameter name, return the index of the variable
686 ** with that name.  If there is no variable with the given name,
687 ** return 0.
688 */
689 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
690   Vdbe *p = (Vdbe*)pStmt;
691   int i;
692   if( p==0 ){
693     return 0;
694   }
695   createVarMap(p);
696   if( zName ){
697     for(i=0; i<p->nVar; i++){
698       const char *z = p->azVar[i];
699       if( z && strcmp(z,zName)==0 ){
700         return i+1;
701       }
702     }
703   }
704   return 0;
705 }
706 
707 /*
708 ** Transfer all bindings from the first statement over to the second.
709 ** If the two statements contain a different number of bindings, then
710 ** an SQLITE_ERROR is returned.
711 */
712 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
713   Vdbe *pFrom = (Vdbe*)pFromStmt;
714   Vdbe *pTo = (Vdbe*)pToStmt;
715   int i, rc = SQLITE_OK;
716   if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT)
717     || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) ){
718     return SQLITE_MISUSE;
719   }
720   if( pFrom->nVar!=pTo->nVar ){
721     return SQLITE_ERROR;
722   }
723   for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){
724     rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
725   }
726   return rc;
727 }
728 
729 /*
730 ** Return the sqlite3* database handle to which the prepared statement given
731 ** in the argument belongs.  This is the same database handle that was
732 ** the first argument to the sqlite3_prepare() that was used to create
733 ** the statement in the first place.
734 */
735 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
736   return pStmt ? ((Vdbe*)pStmt)->db : 0;
737 }
738