xref: /sqlite-3.40.0/src/vdbeapi.c (revision d230f648)
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     sqlite3VdbeMemExpandBlob(p);
41     if( (p->flags & MEM_Term)==0 ){
42       p->flags &= ~MEM_Str;
43     }
44     return p->z;
45   }else{
46     return sqlite3_value_text(pVal);
47   }
48 }
49 int sqlite3_value_bytes(sqlite3_value *pVal){
50   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
51 }
52 int sqlite3_value_bytes16(sqlite3_value *pVal){
53   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
54 }
55 double sqlite3_value_double(sqlite3_value *pVal){
56   return sqlite3VdbeRealValue((Mem*)pVal);
57 }
58 int sqlite3_value_int(sqlite3_value *pVal){
59   return sqlite3VdbeIntValue((Mem*)pVal);
60 }
61 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
62   return sqlite3VdbeIntValue((Mem*)pVal);
63 }
64 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
65   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
66 }
67 #ifndef SQLITE_OMIT_UTF16
68 const void *sqlite3_value_text16(sqlite3_value* pVal){
69   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
70 }
71 const void *sqlite3_value_text16be(sqlite3_value *pVal){
72   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
73 }
74 const void *sqlite3_value_text16le(sqlite3_value *pVal){
75   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
76 }
77 #endif /* SQLITE_OMIT_UTF16 */
78 int sqlite3_value_type(sqlite3_value* pVal){
79   return pVal->type;
80 }
81 /* sqlite3_value_numeric_type() defined in vdbe.c */
82 
83 /**************************** sqlite3_result_  *******************************
84 ** The following routines are used by user-defined functions to specify
85 ** the function result.
86 */
87 void sqlite3_result_blob(
88   sqlite3_context *pCtx,
89   const void *z,
90   int n,
91   void (*xDel)(void *)
92 ){
93   assert( n>=0 );
94   sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel);
95 }
96 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
97   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
98 }
99 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
100   pCtx->isError = 1;
101   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
102 }
103 #ifndef SQLITE_OMIT_UTF16
104 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
105   pCtx->isError = 1;
106   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
107 }
108 #endif
109 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
110   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
111 }
112 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
113   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
114 }
115 void sqlite3_result_null(sqlite3_context *pCtx){
116   sqlite3VdbeMemSetNull(&pCtx->s);
117 }
118 void sqlite3_result_text(
119   sqlite3_context *pCtx,
120   const char *z,
121   int n,
122   void (*xDel)(void *)
123 ){
124   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel);
125 }
126 #ifndef SQLITE_OMIT_UTF16
127 void sqlite3_result_text16(
128   sqlite3_context *pCtx,
129   const void *z,
130   int n,
131   void (*xDel)(void *)
132 ){
133   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel);
134 }
135 void sqlite3_result_text16be(
136   sqlite3_context *pCtx,
137   const void *z,
138   int n,
139   void (*xDel)(void *)
140 ){
141   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel);
142 }
143 void sqlite3_result_text16le(
144   sqlite3_context *pCtx,
145   const void *z,
146   int n,
147   void (*xDel)(void *)
148 ){
149   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel);
150 }
151 #endif /* SQLITE_OMIT_UTF16 */
152 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
153   sqlite3VdbeMemCopy(&pCtx->s, pValue);
154 }
155 void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
156   sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
157 }
158 
159 
160 /*
161 ** Execute the statement pStmt, either until a row of data is ready, the
162 ** statement is completely executed or an error occurs.
163 **
164 ** This routine implements the bulk of the logic behind the sqlite_step()
165 ** API.  The only thing omitted is the automatic recompile if a
166 ** schema change has occurred.  That detail is handled by the
167 ** outer sqlite3_step() wrapper procedure.
168 */
169 static int sqlite3Step(Vdbe *p){
170   sqlite3 *db;
171   int rc;
172 
173   /* Assert that malloc() has not failed */
174   assert( !sqlite3MallocFailed() );
175 
176   if( p==0 || p->magic!=VDBE_MAGIC_RUN ){
177     return SQLITE_MISUSE;
178   }
179   if( p->aborted ){
180     return SQLITE_ABORT;
181   }
182   if( p->pc<=0 && p->expired ){
183     if( p->rc==SQLITE_OK ){
184       p->rc = SQLITE_SCHEMA;
185     }
186     rc = SQLITE_ERROR;
187     goto end_of_step;
188   }
189   db = p->db;
190   if( sqlite3SafetyOn(db) ){
191     p->rc = SQLITE_MISUSE;
192     return SQLITE_MISUSE;
193   }
194   if( p->pc<0 ){
195     /* If there are no other statements currently running, then
196     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
197     ** from interrupting a statement that has not yet started.
198     */
199     if( db->activeVdbeCnt==0 ){
200       db->u1.isInterrupted = 0;
201     }
202 
203 #ifndef SQLITE_OMIT_TRACE
204     /* Invoke the trace callback if there is one
205     */
206     if( db->xTrace && !db->init.busy ){
207       assert( p->nOp>0 );
208       assert( p->aOp[p->nOp-1].opcode==OP_Noop );
209       assert( p->aOp[p->nOp-1].p3!=0 );
210       assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
211       sqlite3SafetyOff(db);
212       db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3);
213       if( sqlite3SafetyOn(db) ){
214         p->rc = SQLITE_MISUSE;
215         return SQLITE_MISUSE;
216       }
217     }
218     if( db->xProfile && !db->init.busy ){
219       double rNow;
220       sqlite3OsCurrentTime(&rNow);
221       p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0;
222     }
223 #endif
224 
225     /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned
226     ** on in debugging mode.
227     */
228 #ifdef SQLITE_DEBUG
229     if( (db->flags & SQLITE_SqlTrace)!=0 ){
230       sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3);
231     }
232 #endif /* SQLITE_DEBUG */
233 
234     db->activeVdbeCnt++;
235     p->pc = 0;
236   }
237 #ifndef SQLITE_OMIT_EXPLAIN
238   if( p->explain ){
239     rc = sqlite3VdbeList(p);
240   }else
241 #endif /* SQLITE_OMIT_EXPLAIN */
242   {
243     rc = sqlite3VdbeExec(p);
244   }
245 
246   if( sqlite3SafetyOff(db) ){
247     rc = SQLITE_MISUSE;
248   }
249 
250 #ifndef SQLITE_OMIT_TRACE
251   /* Invoke the profile callback if there is one
252   */
253   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){
254     double rNow;
255     u64 elapseTime;
256 
257     sqlite3OsCurrentTime(&rNow);
258     elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime;
259     assert( p->nOp>0 );
260     assert( p->aOp[p->nOp-1].opcode==OP_Noop );
261     assert( p->aOp[p->nOp-1].p3!=0 );
262     assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
263     db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime);
264   }
265 #endif
266 
267   sqlite3Error(p->db, rc, 0);
268   p->rc = sqlite3ApiExit(p->db, p->rc);
269 end_of_step:
270   assert( (rc&0xff)==rc );
271   if( p->zSql && (rc&0xff)<SQLITE_ROW ){
272     /* This behavior occurs if sqlite3_prepare_v2() was used to build
273     ** the prepared statement.  Return error codes directly */
274     return p->rc;
275   }else{
276     /* This is for legacy sqlite3_prepare() builds and when the code
277     ** is SQLITE_ROW or SQLITE_DONE */
278     return rc;
279   }
280 }
281 
282 /*
283 ** This is the top-level implementation of sqlite3_step().  Call
284 ** sqlite3Step() to do most of the work.  If a schema error occurs,
285 ** call sqlite3Reprepare() and try again.
286 */
287 #ifdef SQLITE_OMIT_PARSER
288 int sqlite3_step(sqlite3_stmt *pStmt){
289   return sqlite3Step((Vdbe*)pStmt);
290 }
291 #else
292 int sqlite3_step(sqlite3_stmt *pStmt){
293   int cnt = 0;
294   int rc;
295   Vdbe *v = (Vdbe*)pStmt;
296   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
297          && cnt++ < 5
298          && sqlite3Reprepare(v) ){
299     sqlite3_reset(pStmt);
300     v->expired = 0;
301   }
302   return rc;
303 }
304 #endif
305 
306 /*
307 ** Extract the user data from a sqlite3_context structure and return a
308 ** pointer to it.
309 */
310 void *sqlite3_user_data(sqlite3_context *p){
311   assert( p && p->pFunc );
312   return p->pFunc->pUserData;
313 }
314 
315 /*
316 ** The following is the implementation of an SQL function that always
317 ** fails with an error message stating that the function is used in the
318 ** wrong context.  The sqlite3_overload_function() API might construct
319 ** SQL function that use this routine so that the functions will exist
320 ** for name resolution but are actually overloaded by the xFindFunction
321 ** method of virtual tables.
322 */
323 void sqlite3InvalidFunction(
324   sqlite3_context *context,  /* The function calling context */
325   int argc,                  /* Number of arguments to the function */
326   sqlite3_value **argv       /* Value of each argument */
327 ){
328   const char *zName = context->pFunc->zName;
329   char *zErr;
330   zErr = sqlite3MPrintf(
331       "unable to use function %s in the requested context", zName);
332   sqlite3_result_error(context, zErr, -1);
333   sqliteFree(zErr);
334 }
335 
336 /*
337 ** Allocate or return the aggregate context for a user function.  A new
338 ** context is allocated on the first call.  Subsequent calls return the
339 ** same context that was returned on prior calls.
340 */
341 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
342   Mem *pMem = p->pMem;
343   assert( p && p->pFunc && p->pFunc->xStep );
344   if( (pMem->flags & MEM_Agg)==0 ){
345     if( nByte==0 ){
346       assert( pMem->flags==MEM_Null );
347       pMem->z = 0;
348     }else{
349       pMem->flags = MEM_Agg;
350       pMem->xDel = sqlite3FreeX;
351       pMem->u.pDef = p->pFunc;
352       if( nByte<=NBFS ){
353         pMem->z = pMem->zShort;
354         memset(pMem->z, 0, nByte);
355       }else{
356         pMem->z = sqliteMalloc( nByte );
357       }
358     }
359   }
360   return (void*)pMem->z;
361 }
362 
363 /*
364 ** Return the auxilary data pointer, if any, for the iArg'th argument to
365 ** the user-function defined by pCtx.
366 */
367 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
368   VdbeFunc *pVdbeFunc = pCtx->pVdbeFunc;
369   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
370     return 0;
371   }
372   return pVdbeFunc->apAux[iArg].pAux;
373 }
374 
375 /*
376 ** Set the auxilary data pointer and delete function, for the iArg'th
377 ** argument to the user-function defined by pCtx. Any previous value is
378 ** deleted by calling the delete function specified when it was set.
379 */
380 void sqlite3_set_auxdata(
381   sqlite3_context *pCtx,
382   int iArg,
383   void *pAux,
384   void (*xDelete)(void*)
385 ){
386   struct AuxData *pAuxData;
387   VdbeFunc *pVdbeFunc;
388   if( iArg<0 ) return;
389 
390   pVdbeFunc = pCtx->pVdbeFunc;
391   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
392     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
393     pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc);
394     if( !pVdbeFunc ) return;
395     pCtx->pVdbeFunc = pVdbeFunc;
396     memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0,
397              sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux));
398     pVdbeFunc->nAux = iArg+1;
399     pVdbeFunc->pFunc = pCtx->pFunc;
400   }
401 
402   pAuxData = &pVdbeFunc->apAux[iArg];
403   if( pAuxData->pAux && pAuxData->xDelete ){
404     pAuxData->xDelete(pAuxData->pAux);
405   }
406   pAuxData->pAux = pAux;
407   pAuxData->xDelete = xDelete;
408 }
409 
410 /*
411 ** Return the number of times the Step function of a aggregate has been
412 ** called.
413 **
414 ** This function is deprecated.  Do not use it for new code.  It is
415 ** provide only to avoid breaking legacy code.  New aggregate function
416 ** implementations should keep their own counts within their aggregate
417 ** context.
418 */
419 int sqlite3_aggregate_count(sqlite3_context *p){
420   assert( p && p->pFunc && p->pFunc->xStep );
421   return p->pMem->n;
422 }
423 
424 /*
425 ** Return the number of columns in the result set for the statement pStmt.
426 */
427 int sqlite3_column_count(sqlite3_stmt *pStmt){
428   Vdbe *pVm = (Vdbe *)pStmt;
429   return pVm ? pVm->nResColumn : 0;
430 }
431 
432 /*
433 ** Return the number of values available from the current row of the
434 ** currently executing statement pStmt.
435 */
436 int sqlite3_data_count(sqlite3_stmt *pStmt){
437   Vdbe *pVm = (Vdbe *)pStmt;
438   if( pVm==0 || !pVm->resOnStack ) return 0;
439   return pVm->nResColumn;
440 }
441 
442 
443 /*
444 ** Check to see if column iCol of the given statement is valid.  If
445 ** it is, return a pointer to the Mem for the value of that column.
446 ** If iCol is not valid, return a pointer to a Mem which has a value
447 ** of NULL.
448 */
449 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
450   Vdbe *pVm = (Vdbe *)pStmt;
451   int vals = sqlite3_data_count(pStmt);
452   if( i>=vals || i<0 ){
453     static const Mem nullMem = {{0}, 0.0, "", 0, MEM_Null, SQLITE_NULL };
454     sqlite3Error(pVm->db, SQLITE_RANGE, 0);
455     return (Mem*)&nullMem;
456   }
457   return &pVm->pTos[(1-vals)+i];
458 }
459 
460 /*
461 ** This function is called after invoking an sqlite3_value_XXX function on a
462 ** column value (i.e. a value returned by evaluating an SQL expression in the
463 ** select list of a SELECT statement) that may cause a malloc() failure. If
464 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
465 ** code of statement pStmt set to SQLITE_NOMEM.
466 **
467 ** Specificly, this is called from within:
468 **
469 **     sqlite3_column_int()
470 **     sqlite3_column_int64()
471 **     sqlite3_column_text()
472 **     sqlite3_column_text16()
473 **     sqlite3_column_real()
474 **     sqlite3_column_bytes()
475 **     sqlite3_column_bytes16()
476 **
477 ** But not for sqlite3_column_blob(), which never calls malloc().
478 */
479 static void columnMallocFailure(sqlite3_stmt *pStmt)
480 {
481   /* If malloc() failed during an encoding conversion within an
482   ** sqlite3_column_XXX API, then set the return code of the statement to
483   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
484   ** and _finalize() will return NOMEM.
485   */
486   Vdbe *p = (Vdbe *)pStmt;
487   p->rc = sqlite3ApiExit(0, p->rc);
488 }
489 
490 /**************************** sqlite3_column_  *******************************
491 ** The following routines are used to access elements of the current row
492 ** in the result set.
493 */
494 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
495   const void *val;
496   sqlite3MallocDisallow();
497   val = sqlite3_value_blob( columnMem(pStmt,i) );
498   sqlite3MallocAllow();
499   return val;
500 }
501 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
502   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
503   columnMallocFailure(pStmt);
504   return val;
505 }
506 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
507   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
508   columnMallocFailure(pStmt);
509   return val;
510 }
511 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
512   double val = sqlite3_value_double( columnMem(pStmt,i) );
513   columnMallocFailure(pStmt);
514   return val;
515 }
516 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
517   int val = sqlite3_value_int( columnMem(pStmt,i) );
518   columnMallocFailure(pStmt);
519   return val;
520 }
521 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
522   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
523   columnMallocFailure(pStmt);
524   return val;
525 }
526 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
527   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
528   columnMallocFailure(pStmt);
529   return val;
530 }
531 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
532   return columnMem(pStmt, i);
533 }
534 #ifndef SQLITE_OMIT_UTF16
535 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
536   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
537   columnMallocFailure(pStmt);
538   return val;
539 }
540 #endif /* SQLITE_OMIT_UTF16 */
541 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
542   return sqlite3_value_type( columnMem(pStmt,i) );
543 }
544 
545 /* The following function is experimental and subject to change or
546 ** removal */
547 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
548 **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
549 **}
550 */
551 
552 /*
553 ** Convert the N-th element of pStmt->pColName[] into a string using
554 ** xFunc() then return that string.  If N is out of range, return 0.
555 **
556 ** There are up to 5 names for each column.  useType determines which
557 ** name is returned.  Here are the names:
558 **
559 **    0      The column name as it should be displayed for output
560 **    1      The datatype name for the column
561 **    2      The name of the database that the column derives from
562 **    3      The name of the table that the column derives from
563 **    4      The name of the table column that the result column derives from
564 **
565 ** If the result is not a simple column reference (if it is an expression
566 ** or a constant) then useTypes 2, 3, and 4 return NULL.
567 */
568 static const void *columnName(
569   sqlite3_stmt *pStmt,
570   int N,
571   const void *(*xFunc)(Mem*),
572   int useType
573 ){
574   const void *ret;
575   Vdbe *p = (Vdbe *)pStmt;
576   int n = sqlite3_column_count(pStmt);
577 
578   if( p==0 || N>=n || N<0 ){
579     return 0;
580   }
581   N += useType*n;
582   ret = xFunc(&p->aColName[N]);
583 
584   /* A malloc may have failed inside of the xFunc() call. If this is the case,
585   ** clear the mallocFailed flag and return NULL.
586   */
587   sqlite3ApiExit(0, 0);
588   return ret;
589 }
590 
591 /*
592 ** Return the name of the Nth column of the result set returned by SQL
593 ** statement pStmt.
594 */
595 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
596   return columnName(
597       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
598 }
599 #ifndef SQLITE_OMIT_UTF16
600 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
601   return columnName(
602       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
603 }
604 #endif
605 
606 /*
607 ** Return the column declaration type (if applicable) of the 'i'th column
608 ** of the result set of SQL statement pStmt.
609 */
610 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
611   return columnName(
612       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
613 }
614 #ifndef SQLITE_OMIT_UTF16
615 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
616   return columnName(
617       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
618 }
619 #endif /* SQLITE_OMIT_UTF16 */
620 
621 #ifdef SQLITE_ENABLE_COLUMN_METADATA
622 /*
623 ** Return the name of the database from which a result column derives.
624 ** NULL is returned if the result column is an expression or constant or
625 ** anything else which is not an unabiguous reference to a database column.
626 */
627 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
628   return columnName(
629       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
630 }
631 #ifndef SQLITE_OMIT_UTF16
632 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
633   return columnName(
634       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
635 }
636 #endif /* SQLITE_OMIT_UTF16 */
637 
638 /*
639 ** Return the name of the table from which a result column derives.
640 ** NULL is returned if the result column is an expression or constant or
641 ** anything else which is not an unabiguous reference to a database column.
642 */
643 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
644   return columnName(
645       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
646 }
647 #ifndef SQLITE_OMIT_UTF16
648 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
649   return columnName(
650       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
651 }
652 #endif /* SQLITE_OMIT_UTF16 */
653 
654 /*
655 ** Return the name of the table column from which a result column derives.
656 ** NULL is returned if the result column is an expression or constant or
657 ** anything else which is not an unabiguous reference to a database column.
658 */
659 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
660   return columnName(
661       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
662 }
663 #ifndef SQLITE_OMIT_UTF16
664 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
665   return columnName(
666       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
667 }
668 #endif /* SQLITE_OMIT_UTF16 */
669 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
670 
671 
672 /******************************* sqlite3_bind_  ***************************
673 **
674 ** Routines used to attach values to wildcards in a compiled SQL statement.
675 */
676 /*
677 ** Unbind the value bound to variable i in virtual machine p. This is the
678 ** the same as binding a NULL value to the column. If the "i" parameter is
679 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
680 **
681 ** The error code stored in database p->db is overwritten with the return
682 ** value in any case.
683 */
684 static int vdbeUnbind(Vdbe *p, int i){
685   Mem *pVar;
686   if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
687     if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0);
688     return SQLITE_MISUSE;
689   }
690   if( i<1 || i>p->nVar ){
691     sqlite3Error(p->db, SQLITE_RANGE, 0);
692     return SQLITE_RANGE;
693   }
694   i--;
695   pVar = &p->aVar[i];
696   sqlite3VdbeMemRelease(pVar);
697   pVar->flags = MEM_Null;
698   sqlite3Error(p->db, SQLITE_OK, 0);
699   return SQLITE_OK;
700 }
701 
702 /*
703 ** Bind a text or BLOB value.
704 */
705 static int bindText(
706   sqlite3_stmt *pStmt,
707   int i,
708   const void *zData,
709   int nData,
710   void (*xDel)(void*),
711   int encoding
712 ){
713   Vdbe *p = (Vdbe *)pStmt;
714   Mem *pVar;
715   int rc;
716 
717   rc = vdbeUnbind(p, i);
718   if( rc || zData==0 ){
719     return rc;
720   }
721   pVar = &p->aVar[i-1];
722   rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
723   if( rc==SQLITE_OK && encoding!=0 ){
724     rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
725   }
726 
727   sqlite3Error(((Vdbe *)pStmt)->db, rc, 0);
728   return sqlite3ApiExit(((Vdbe *)pStmt)->db, rc);
729 }
730 
731 
732 /*
733 ** Bind a blob value to an SQL statement variable.
734 */
735 int sqlite3_bind_blob(
736   sqlite3_stmt *pStmt,
737   int i,
738   const void *zData,
739   int nData,
740   void (*xDel)(void*)
741 ){
742   return bindText(pStmt, i, zData, nData, xDel, 0);
743 }
744 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
745   int rc;
746   Vdbe *p = (Vdbe *)pStmt;
747   rc = vdbeUnbind(p, i);
748   if( rc==SQLITE_OK ){
749     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
750   }
751   return rc;
752 }
753 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
754   return sqlite3_bind_int64(p, i, (i64)iValue);
755 }
756 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
757   int rc;
758   Vdbe *p = (Vdbe *)pStmt;
759   rc = vdbeUnbind(p, i);
760   if( rc==SQLITE_OK ){
761     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
762   }
763   return rc;
764 }
765 int sqlite3_bind_null(sqlite3_stmt* p, int i){
766   return vdbeUnbind((Vdbe *)p, i);
767 }
768 int sqlite3_bind_text(
769   sqlite3_stmt *pStmt,
770   int i,
771   const char *zData,
772   int nData,
773   void (*xDel)(void*)
774 ){
775   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
776 }
777 #ifndef SQLITE_OMIT_UTF16
778 int sqlite3_bind_text16(
779   sqlite3_stmt *pStmt,
780   int i,
781   const void *zData,
782   int nData,
783   void (*xDel)(void*)
784 ){
785   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
786 }
787 #endif /* SQLITE_OMIT_UTF16 */
788 int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
789   int rc;
790   Vdbe *p = (Vdbe *)pStmt;
791   rc = vdbeUnbind(p, i);
792   if( rc==SQLITE_OK ){
793     sqlite3VdbeMemCopy(&p->aVar[i-1], pValue);
794   }
795   return rc;
796 }
797 int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
798   int rc;
799   Vdbe *p = (Vdbe *)pStmt;
800   rc = vdbeUnbind(p, i);
801   if( rc==SQLITE_OK ){
802     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
803   }
804   return rc;
805 }
806 
807 /*
808 ** Return the number of wildcards that can be potentially bound to.
809 ** This routine is added to support DBD::SQLite.
810 */
811 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
812   Vdbe *p = (Vdbe*)pStmt;
813   return p ? p->nVar : 0;
814 }
815 
816 /*
817 ** Create a mapping from variable numbers to variable names
818 ** in the Vdbe.azVar[] array, if such a mapping does not already
819 ** exist.
820 */
821 static void createVarMap(Vdbe *p){
822   if( !p->okVar ){
823     int j;
824     Op *pOp;
825     for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
826       if( pOp->opcode==OP_Variable ){
827         assert( pOp->p1>0 && pOp->p1<=p->nVar );
828         p->azVar[pOp->p1-1] = pOp->p3;
829       }
830     }
831     p->okVar = 1;
832   }
833 }
834 
835 /*
836 ** Return the name of a wildcard parameter.  Return NULL if the index
837 ** is out of range or if the wildcard is unnamed.
838 **
839 ** The result is always UTF-8.
840 */
841 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
842   Vdbe *p = (Vdbe*)pStmt;
843   if( p==0 || i<1 || i>p->nVar ){
844     return 0;
845   }
846   createVarMap(p);
847   return p->azVar[i-1];
848 }
849 
850 /*
851 ** Given a wildcard parameter name, return the index of the variable
852 ** with that name.  If there is no variable with the given name,
853 ** return 0.
854 */
855 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
856   Vdbe *p = (Vdbe*)pStmt;
857   int i;
858   if( p==0 ){
859     return 0;
860   }
861   createVarMap(p);
862   if( zName ){
863     for(i=0; i<p->nVar; i++){
864       const char *z = p->azVar[i];
865       if( z && strcmp(z,zName)==0 ){
866         return i+1;
867       }
868     }
869   }
870   return 0;
871 }
872 
873 /*
874 ** Transfer all bindings from the first statement over to the second.
875 ** If the two statements contain a different number of bindings, then
876 ** an SQLITE_ERROR is returned.
877 */
878 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
879   Vdbe *pFrom = (Vdbe*)pFromStmt;
880   Vdbe *pTo = (Vdbe*)pToStmt;
881   int i, rc = SQLITE_OK;
882   if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT)
883     || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) ){
884     return SQLITE_MISUSE;
885   }
886   if( pFrom->nVar!=pTo->nVar ){
887     return SQLITE_ERROR;
888   }
889   for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){
890     sqlite3MallocDisallow();
891     rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
892     sqlite3MallocAllow();
893   }
894   assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
895   return rc;
896 }
897 
898 /*
899 ** Return the sqlite3* database handle to which the prepared statement given
900 ** in the argument belongs.  This is the same database handle that was
901 ** the first argument to the sqlite3_prepare() that was used to create
902 ** the statement in the first place.
903 */
904 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
905   return pStmt ? ((Vdbe*)pStmt)->db : 0;
906 }
907