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