vdbeapi.c.svn-base
上传用户:sunhongbo
上传日期:2022-01-25
资源大小:3010k
文件大小:36k
源码类别:

数据库系统

开发平台:

C/C++

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