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