/ Hex Artifact Content
Login

Artifact ea22e171704906632cd971668359b8c0c5053001:


0000: 2f 2a 0a 2a 2a 20 32 30 30 34 20 4d 61 79 20 32  /*.** 2004 May 2
0010: 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  6.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0180: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0190: 73 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  se to implement 
01a0: 41 50 49 73 20 74 68 61 74 20 61 72 65 20 70 61  APIs that are pa
01b0: 72 74 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  rt of the.** VDB
01c0: 45 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64  E..**.** $Id: vd
01d0: 62 65 61 70 69 2e 63 2c 76 20 31 2e 31 34 38 20  beapi.c,v 1.148 
01e0: 32 30 30 38 2f 31 31 2f 30 35 20 31 36 3a 33 37  2008/11/05 16:37
01f0: 3a 33 35 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :35 drh Exp $.*/
0200: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
0210: 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  eInt.h".#include
0220: 20 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a 23 69   "vdbeInt.h"..#i
0230: 66 20 30 20 26 26 20 64 65 66 69 6e 65 64 28 53  f 0 && defined(S
0240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
0250: 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 0a  ORY_MANAGEMENT).
0260: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
0270: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
0280: 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73 20  ntains pointers 
0290: 74 6f 20 74 68 65 20 65 6e 64 20 70 6f 69 6e 74  to the end point
02a0: 73 20 6f 66 20 61 0a 2a 2a 20 64 6f 75 62 6c 79  s of a.** doubly
02b0: 2d 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20  -linked list of 
02c0: 61 6c 6c 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  all compiled SQL
02d0: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
02e0: 20 6d 61 79 20 62 65 20 68 6f 6c 64 69 6e 67 0a   may be holding.
02f0: 2a 2a 20 62 75 66 66 65 72 73 20 65 6c 69 67 69  ** buffers eligi
0300: 62 6c 65 20 66 6f 72 20 72 65 6c 65 61 73 65 20  ble for release 
0310: 77 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  when the sqlite3
0320: 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
0330: 29 20 69 6e 74 65 72 66 61 63 65 20 69 73 0a 2a  ) interface is.*
0340: 2a 20 69 6e 76 6f 6b 65 64 2e 20 41 63 63 65 73  * invoked. Acces
0350: 73 20 74 6f 20 74 68 69 73 20 6c 69 73 74 20 69  s to this list i
0360: 73 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  s protected by t
0370: 68 65 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  he SQLITE_MUTEX_
0380: 53 54 41 54 49 43 5f 4c 52 55 32 0a 2a 2a 20 6d  STATIC_LRU2.** m
0390: 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 74 61 74  utex..**.** Stat
03a0: 65 6d 65 6e 74 73 20 61 72 65 20 61 64 64 65 64  ements are added
03b0: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
03c0: 68 69 73 20 6c 69 73 74 20 77 68 65 6e 20 73 71  his list when sq
03d0: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 69 73  lite3_reset() is
03e0: 0a 2a 2a 20 63 61 6c 6c 65 64 2e 20 54 68 65 79  .** called. They
03f0: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 65 69 74   are removed eit
0400: 68 65 72 20 77 68 65 6e 20 73 71 6c 69 74 65 33  her when sqlite3
0410: 5f 73 74 65 70 28 29 20 6f 72 20 73 71 6c 69 74  _step() or sqlit
0420: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 0a 2a 2a  e3_finalize().**
0430: 20 69 73 20 63 61 6c 6c 65 64 2e 20 57 68 65 6e   is called. When
0440: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
0450: 61 64 64 65 64 20 74 6f 20 74 68 69 73 20 6c 69  added to this li
0460: 73 74 2c 20 74 68 65 20 61 73 73 6f 63 69 61 74  st, the associat
0470: 65 64 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ed .** register 
0480: 61 72 72 61 79 20 28 70 2d 3e 61 4d 65 6d 5b 31  array (p->aMem[1
0490: 2e 2e 70 2d 3e 6e 4d 65 6d 5d 29 20 6d 61 79 20  ..p->nMem]) may 
04a0: 63 6f 6e 74 61 69 6e 20 64 79 6e 61 6d 69 63 20  contain dynamic 
04b0: 62 75 66 66 65 72 73 20 74 68 61 74 0a 2a 2a 20  buffers that.** 
04c0: 63 61 6e 20 62 65 20 66 72 65 65 64 20 75 73 69  can be freed usi
04d0: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 52 65  ng sqlite3VdbeRe
04e0: 6c 65 61 73 65 4d 65 6d 6f 72 79 28 29 2e 0a 2a  leaseMemory()..*
04f0: 2a 0a 2a 2a 20 57 68 65 6e 20 73 74 61 74 65 6d  *.** When statem
0500: 65 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 6f  ents are added o
0510: 72 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  r removed from t
0520: 68 69 73 20 6c 69 73 74 2c 20 74 68 65 20 6d 75  his list, the mu
0530: 74 65 78 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  tex.** associate
0540: 64 20 77 69 74 68 20 74 68 65 20 56 64 62 65 20  d with the Vdbe 
0550: 62 65 69 6e 67 20 61 64 64 65 64 20 6f 72 20 72  being added or r
0560: 65 6d 6f 76 65 64 20 28 56 64 62 65 2e 64 62 2d  emoved (Vdbe.db-
0570: 3e 6d 75 74 65 78 29 20 69 73 0a 2a 2a 20 61 6c  >mutex) is.** al
0580: 72 65 61 64 79 20 68 65 6c 64 2e 20 54 68 65 20  ready held. The 
0590: 4c 52 55 32 20 6d 75 74 65 78 20 69 73 20 74 68  LRU2 mutex is th
05a0: 65 6e 20 6f 62 74 61 69 6e 65 64 2c 20 62 6c 6f  en obtained, blo
05b0: 63 6b 69 6e 67 20 69 66 20 6e 65 63 65 73 73 61  cking if necessa
05c0: 72 79 2c 0a 2a 2a 20 74 68 65 20 6c 69 6e 6b 65  ry,.** the linke
05d0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 72 73 20  d-list pointers 
05e0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 61 6e 64 20  manipulated and 
05f0: 74 68 65 20 4c 52 55 32 20 6d 75 74 65 78 20 72  the LRU2 mutex r
0600: 65 6c 69 6e 71 75 69 73 68 65 64 2e 0a 2a 2f 0a  elinquished..*/.
0610: 73 74 72 75 63 74 20 53 74 61 74 65 6d 65 6e 74  struct Statement
0620: 4c 72 75 4c 69 73 74 20 7b 0a 20 20 56 64 62 65  LruList {.  Vdbe
0630: 20 2a 70 46 69 72 73 74 3b 0a 20 20 56 64 62 65   *pFirst;.  Vdbe
0640: 20 2a 70 4c 61 73 74 3b 0a 7d 3b 0a 73 74 61 74   *pLast;.};.stat
0650: 69 63 20 73 74 72 75 63 74 20 53 74 61 74 65 6d  ic struct Statem
0660: 65 6e 74 4c 72 75 4c 69 73 74 20 73 71 6c 69 74  entLruList sqlit
0670: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 3b  e3LruStatements;
0680: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  ../*.** Check th
0690: 61 74 20 74 68 65 20 6c 69 73 74 20 6c 6f 6f 6b  at the list look
06a0: 73 20 74 6f 20 62 65 20 69 6e 74 65 72 6e 61 6c  s to be internal
06b0: 6c 79 20 63 6f 6e 73 69 73 74 65 6e 74 2e 20 54  ly consistent. T
06c0: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 61  his is used.** a
06d0: 73 20 70 61 72 74 20 6f 66 20 61 6e 20 61 73 73  s part of an ass
06e0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 20  ert() statement 
06f0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a  as follows:.**.*
0700: 2a 20 20 20 61 73 73 65 72 74 28 20 73 74 6d 74  *   assert( stmt
0710: 4c 72 75 43 68 65 63 6b 28 29 20 29 3b 0a 2a 2f  LruCheck() );.*/
0720: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
0730: 73 74 61 74 69 63 20 69 6e 74 20 73 74 6d 74 4c  static int stmtL
0740: 72 75 43 68 65 63 6b 28 29 7b 0a 20 20 56 64 62  ruCheck(){.  Vdb
0750: 65 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 73 71  e *p;.  for(p=sq
0760: 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e  lite3LruStatemen
0770: 74 73 2e 70 46 69 72 73 74 3b 20 70 3b 20 70 3d  ts.pFirst; p; p=
0780: 70 2d 3e 70 4c 72 75 4e 65 78 74 29 7b 0a 20 20  p->pLruNext){.  
0790: 20 20 61 73 73 65 72 74 28 70 2d 3e 70 4c 72 75    assert(p->pLru
07a0: 4e 65 78 74 20 7c 7c 20 70 3d 3d 73 71 6c 69 74  Next || p==sqlit
07b0: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
07c0: 70 4c 61 73 74 29 3b 0a 20 20 20 20 61 73 73 65  pLast);.    asse
07d0: 72 74 28 21 70 2d 3e 70 4c 72 75 4e 65 78 74 20  rt(!p->pLruNext 
07e0: 7c 7c 20 70 2d 3e 70 4c 72 75 4e 65 78 74 2d 3e  || p->pLruNext->
07f0: 70 4c 72 75 50 72 65 76 3d 3d 70 29 3b 0a 20 20  pLruPrev==p);.  
0800: 20 20 61 73 73 65 72 74 28 70 2d 3e 70 4c 72 75    assert(p->pLru
0810: 50 72 65 76 20 7c 7c 20 70 3d 3d 73 71 6c 69 74  Prev || p==sqlit
0820: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0830: 70 46 69 72 73 74 29 3b 0a 20 20 20 20 61 73 73  pFirst);.    ass
0840: 65 72 74 28 21 70 2d 3e 70 4c 72 75 50 72 65 76  ert(!p->pLruPrev
0850: 20 7c 7c 20 70 2d 3e 70 4c 72 75 50 72 65 76 2d   || p->pLruPrev-
0860: 3e 70 4c 72 75 4e 65 78 74 3d 3d 70 29 3b 0a 20  >pLruNext==p);. 
0870: 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d   }.  return 1;.}
0880: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
0890: 64 64 20 76 64 62 65 20 70 20 74 6f 20 74 68 65  dd vdbe p to the
08a0: 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74   end of the stat
08b0: 65 6d 65 6e 74 20 6c 72 75 20 6c 69 73 74 2e 20  ement lru list. 
08c0: 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  It is assumed th
08d0: 61 74 0a 2a 2a 20 70 20 69 73 20 6e 6f 74 20 61  at.** p is not a
08e0: 6c 72 65 61 64 79 20 70 61 72 74 20 6f 66 20 74  lready part of t
08f0: 68 65 20 6c 69 73 74 20 77 68 65 6e 20 74 68 69  he list when thi
0900: 73 20 69 73 20 63 61 6c 6c 65 64 2e 20 54 68 65  s is called. The
0910: 20 6c 72 75 20 6c 69 73 74 0a 2a 2a 20 69 73 20   lru list.** is 
0920: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
0930: 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54   SQLITE_MUTEX_ST
0940: 41 54 49 43 5f 4c 52 55 20 6d 75 74 65 78 2e 0a  ATIC_LRU mutex..
0950: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
0960: 74 6d 74 4c 72 75 41 64 64 28 56 64 62 65 20 2a  tmtLruAdd(Vdbe *
0970: 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  p){.  sqlite3_mu
0980: 74 65 78 5f 65 6e 74 65 72 28 73 71 6c 69 74 65  tex_enter(sqlite
0990: 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49  3MutexAlloc(SQLI
09a0: 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49 43 5f  TE_MUTEX_STATIC_
09b0: 4c 52 55 32 29 29 3b 0a 0a 20 20 69 66 28 20 70  LRU2));..  if( p
09c0: 2d 3e 70 4c 72 75 50 72 65 76 20 7c 7c 20 70 2d  ->pLruPrev || p-
09d0: 3e 70 4c 72 75 4e 65 78 74 20 7c 7c 20 73 71 6c  >pLruNext || sql
09e0: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
09f0: 73 2e 70 46 69 72 73 74 3d 3d 70 20 29 7b 0a 20  s.pFirst==p ){. 
0a00: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
0a10: 5f 6c 65 61 76 65 28 73 71 6c 69 74 65 33 4d 75  _leave(sqlite3Mu
0a20: 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f  texAlloc(SQLITE_
0a30: 4d 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55  MUTEX_STATIC_LRU
0a40: 32 29 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b  2));.    return;
0a50: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
0a60: 73 74 6d 74 4c 72 75 43 68 65 63 6b 28 29 20 29  stmtLruCheck() )
0a70: 3b 0a 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  ;..  if( !sqlite
0a80: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
0a90: 46 69 72 73 74 20 29 7b 0a 20 20 20 20 61 73 73  First ){.    ass
0aa0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 4c 72 75  ert( !sqlite3Lru
0ab0: 53 74 61 74 65 6d 65 6e 74 73 2e 70 4c 61 73 74  Statements.pLast
0ac0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4c   );.    sqlite3L
0ad0: 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 46 69  ruStatements.pFi
0ae0: 72 73 74 20 3d 20 70 3b 0a 20 20 20 20 73 71 6c  rst = p;.    sql
0af0: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
0b00: 73 2e 70 4c 61 73 74 20 3d 20 70 3b 0a 20 20 7d  s.pLast = p;.  }
0b10: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
0b20: 28 20 21 73 71 6c 69 74 65 33 4c 72 75 53 74 61  ( !sqlite3LruSta
0b30: 74 65 6d 65 6e 74 73 2e 70 4c 61 73 74 2d 3e 70  tements.pLast->p
0b40: 4c 72 75 4e 65 78 74 20 29 3b 0a 20 20 20 20 70  LruNext );.    p
0b50: 2d 3e 70 4c 72 75 50 72 65 76 20 3d 20 73 71 6c  ->pLruPrev = sql
0b60: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
0b70: 73 2e 70 4c 61 73 74 3b 0a 20 20 20 20 73 71 6c  s.pLast;.    sql
0b80: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
0b90: 73 2e 70 4c 61 73 74 2d 3e 70 4c 72 75 4e 65 78  s.pLast->pLruNex
0ba0: 74 20 3d 20 70 3b 0a 20 20 20 20 73 71 6c 69 74  t = p;.    sqlit
0bb0: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0bc0: 70 4c 61 73 74 20 3d 20 70 3b 0a 20 20 7d 0a 0a  pLast = p;.  }..
0bd0: 20 20 61 73 73 65 72 74 28 20 73 74 6d 74 4c 72    assert( stmtLr
0be0: 75 43 68 65 63 6b 28 29 20 29 3b 0a 0a 20 20 73  uCheck() );..  s
0bf0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
0c00: 76 65 28 73 71 6c 69 74 65 33 4d 75 74 65 78 41  ve(sqlite3MutexA
0c10: 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54 45  lloc(SQLITE_MUTE
0c20: 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29 3b  X_STATIC_LRU2));
0c30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69  .}../*.** Assumi
0c40: 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 55  ng the SQLITE_MU
0c50: 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 20  TEX_STATIC_LRU2 
0c60: 6d 75 74 65 78 74 20 69 73 20 61 6c 72 65 61 64  mutext is alread
0c70: 79 20 68 65 6c 64 2c 20 72 65 6d 6f 76 65 0a 2a  y held, remove.*
0c80: 2a 20 73 74 61 74 65 6d 65 6e 74 20 70 20 66 72  * statement p fr
0c90: 6f 6d 20 74 68 65 20 6c 65 61 73 74 2d 72 65 63  om the least-rec
0ca0: 65 6e 74 6c 79 2d 75 73 65 64 20 73 74 61 74 65  ently-used state
0cb0: 6d 65 6e 74 20 6c 69 73 74 2e 20 49 66 20 74 68  ment list. If th
0cc0: 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
0cd0: 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
0ce0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 6c 69 73   part of the lis
0cf0: 74 2c 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20  t, this call is 
0d00: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 73 74 61 74  a no-op..*/.stat
0d10: 69 63 20 76 6f 69 64 20 73 74 6d 74 4c 72 75 52  ic void stmtLruR
0d20: 65 6d 6f 76 65 4e 6f 6d 75 74 65 78 28 56 64 62  emoveNomutex(Vdb
0d30: 65 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  e *p){.  if( p->
0d40: 70 4c 72 75 50 72 65 76 20 7c 7c 20 70 2d 3e 70  pLruPrev || p->p
0d50: 4c 72 75 4e 65 78 74 20 7c 7c 20 70 3d 3d 73 71  LruNext || p==sq
0d60: 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e  lite3LruStatemen
0d70: 74 73 2e 70 46 69 72 73 74 20 29 7b 0a 20 20 20  ts.pFirst ){.   
0d80: 20 61 73 73 65 72 74 28 20 73 74 6d 74 4c 72 75   assert( stmtLru
0d90: 43 68 65 63 6b 28 29 20 29 3b 0a 20 20 20 20 69  Check() );.    i
0da0: 66 28 20 70 2d 3e 70 4c 72 75 4e 65 78 74 20 29  f( p->pLruNext )
0db0: 7b 0a 20 20 20 20 20 20 70 2d 3e 70 4c 72 75 4e  {.      p->pLruN
0dc0: 65 78 74 2d 3e 70 4c 72 75 50 72 65 76 20 3d 20  ext->pLruPrev = 
0dd0: 70 2d 3e 70 4c 72 75 50 72 65 76 3b 0a 20 20 20  p->pLruPrev;.   
0de0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
0df0: 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e  lite3LruStatemen
0e00: 74 73 2e 70 4c 61 73 74 20 3d 20 70 2d 3e 70 4c  ts.pLast = p->pL
0e10: 72 75 50 72 65 76 3b 0a 20 20 20 20 7d 0a 20 20  ruPrev;.    }.  
0e20: 20 20 69 66 28 20 70 2d 3e 70 4c 72 75 50 72 65    if( p->pLruPre
0e30: 76 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 4c  v ){.      p->pL
0e40: 72 75 50 72 65 76 2d 3e 70 4c 72 75 4e 65 78 74  ruPrev->pLruNext
0e50: 20 3d 20 70 2d 3e 70 4c 72 75 4e 65 78 74 3b 0a   = p->pLruNext;.
0e60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
0e70: 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65   sqlite3LruState
0e80: 6d 65 6e 74 73 2e 70 46 69 72 73 74 20 3d 20 70  ments.pFirst = p
0e90: 2d 3e 70 4c 72 75 4e 65 78 74 3b 0a 20 20 20 20  ->pLruNext;.    
0ea0: 7d 0a 20 20 20 20 70 2d 3e 70 4c 72 75 4e 65 78  }.    p->pLruNex
0eb0: 74 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 70 4c  t = 0;.    p->pL
0ec0: 72 75 50 72 65 76 20 3d 20 30 3b 0a 20 20 20 20  ruPrev = 0;.    
0ed0: 61 73 73 65 72 74 28 20 73 74 6d 74 4c 72 75 43  assert( stmtLruC
0ee0: 68 65 63 6b 28 29 20 29 3b 0a 20 20 7d 0a 7d 0a  heck() );.  }.}.
0ef0: 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
0f00: 74 68 65 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  the SQLITE_MUTEX
0f10: 5f 53 54 41 54 49 43 5f 4c 52 55 32 20 6d 75 74  _STATIC_LRU2 mut
0f20: 65 78 74 20 69 73 20 6e 6f 74 20 68 65 6c 64 2c  ext is not held,
0f30: 20 72 65 6d 6f 76 65 0a 2a 2a 20 73 74 61 74 65   remove.** state
0f40: 6d 65 6e 74 20 70 20 66 72 6f 6d 20 74 68 65 20  ment p from the 
0f50: 6c 65 61 73 74 2d 72 65 63 65 6e 74 6c 79 2d 75  least-recently-u
0f60: 73 65 64 20 73 74 61 74 65 6d 65 6e 74 20 6c 69  sed statement li
0f70: 73 74 2e 20 49 66 20 74 68 65 20 0a 2a 2a 20 73  st. If the .** s
0f80: 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20  tatement is not 
0f90: 63 75 72 72 65 6e 74 6c 79 20 70 61 72 74 20 6f  currently part o
0fa0: 66 20 74 68 65 20 6c 69 73 74 2c 20 74 68 69 73  f the list, this
0fb0: 20 63 61 6c 6c 20 69 73 20 61 20 6e 6f 2d 6f 70   call is a no-op
0fc0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
0fd0: 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76 65 28 56   stmtLruRemove(V
0fe0: 64 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74  dbe *p){.  sqlit
0ff0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 73  e3_mutex_enter(s
1000: 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1010: 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54  (SQLITE_MUTEX_ST
1020: 41 54 49 43 5f 4c 52 55 32 29 29 3b 0a 20 20 73  ATIC_LRU2));.  s
1030: 74 6d 74 4c 72 75 52 65 6d 6f 76 65 4e 6f 6d 75  tmtLruRemoveNomu
1040: 74 65 78 28 70 29 3b 0a 20 20 73 71 6c 69 74 65  tex(p);.  sqlite
1050: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 73 71  3_mutex_leave(sq
1060: 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
1070: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41  SQLITE_MUTEX_STA
1080: 54 49 43 5f 4c 52 55 32 29 29 3b 0a 7d 0a 0a 2f  TIC_LRU2));.}../
1090: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 72 65 6c 65  *.** Try to rele
10a0: 61 73 65 20 6e 20 62 79 74 65 73 20 6f 66 20 6d  ase n bytes of m
10b0: 65 6d 6f 72 79 20 62 79 20 66 72 65 65 69 6e 67  emory by freeing
10c0: 20 62 75 66 66 65 72 73 20 61 73 73 6f 63 69 61   buffers associa
10d0: 74 65 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 65  ted .** with the
10e0: 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
10f0: 73 20 6f 66 20 63 75 72 72 65 6e 74 6c 79 20 75  s of currently u
1100: 6e 75 73 65 64 20 76 64 62 65 73 2e 0a 2a 2f 0a  nused vdbes..*/.
1110: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 52  int sqlite3VdbeR
1120: 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 69 6e 74  eleaseMemory(int
1130: 20 6e 29 7b 0a 20 20 56 64 62 65 20 2a 70 3b 0a   n){.  Vdbe *p;.
1140: 20 20 56 64 62 65 20 2a 70 4e 65 78 74 3b 0a 20    Vdbe *pNext;. 
1150: 20 69 6e 74 20 6e 46 72 65 65 20 3d 20 30 3b 0a   int nFree = 0;.
1160: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1170: 5f 65 6e 74 65 72 28 73 71 6c 69 74 65 33 4d 75  _enter(sqlite3Mu
1180: 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f  texAlloc(SQLITE_
1190: 4d 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55  MUTEX_STATIC_LRU
11a0: 32 29 29 3b 0a 20 20 66 6f 72 28 70 3d 73 71 6c  2));.  for(p=sql
11b0: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
11c0: 73 2e 70 46 69 72 73 74 3b 20 70 20 26 26 20 6e  s.pFirst; p && n
11d0: 46 72 65 65 3c 6e 3b 20 70 3d 70 4e 65 78 74 29  Free<n; p=pNext)
11e0: 7b 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 70 2d  {.    pNext = p-
11f0: 3e 70 4c 72 75 4e 65 78 74 3b 0a 0a 20 20 20 20  >pLruNext;..    
1200: 2f 2a 20 46 6f 72 20 65 61 63 68 20 73 74 61 74  /* For each stat
1210: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 20 69 6e 20  ement handle in 
1220: 74 68 65 20 6c 72 75 20 6c 69 73 74 2c 20 61 74  the lru list, at
1230: 74 65 6d 70 74 20 74 6f 20 6f 62 74 61 69 6e 20  tempt to obtain 
1240: 74 68 65 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63  the.    ** assoc
1250: 69 61 74 65 64 20 64 61 74 61 62 61 73 65 20 6d  iated database m
1260: 75 74 65 78 2e 20 49 66 20 69 74 20 63 61 6e 6e  utex. If it cann
1270: 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2c 20  ot be obtained, 
1280: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 2a 2a 20  continue.    ** 
1290: 74 6f 20 74 68 65 20 6e 65 78 74 20 73 74 61 74  to the next stat
12a0: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 20 49 74  ement handle. It
12b0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
12c0: 20 74 6f 20 62 6c 6f 63 6b 20 6f 6e 0a 20 20 20   to block on.   
12d0: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
12e0: 20 6d 75 74 65 78 20 2d 20 74 68 61 74 20 63 6f   mutex - that co
12f0: 75 6c 64 20 63 61 75 73 65 20 64 65 61 64 6c 6f  uld cause deadlo
1300: 63 6b 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ck..    */.    i
1310: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71  f( SQLITE_OK==sq
1320: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 74 72 79 28  lite3_mutex_try(
1330: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 7b  p->db->mutex) ){
1340: 0a 20 20 20 20 20 20 6e 46 72 65 65 20 2b 3d 20  .      nFree += 
1350: 73 71 6c 69 74 65 33 56 64 62 65 52 65 6c 65 61  sqlite3VdbeRelea
1360: 73 65 42 75 66 66 65 72 73 28 70 29 3b 0a 20 20  seBuffers(p);.  
1370: 20 20 20 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76      stmtLruRemov
1380: 65 4e 6f 6d 75 74 65 78 28 70 29 3b 0a 20 20 20  eNomutex(p);.   
1390: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
13a0: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
13b0: 74 65 78 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  tex);.    }.  }.
13c0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
13d0: 6c 65 61 76 65 28 73 71 6c 69 74 65 33 4d 75 74  leave(sqlite3Mut
13e0: 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d  exAlloc(SQLITE_M
13f0: 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32  UTEX_STATIC_LRU2
1400: 29 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 6e 46  ));..  return nF
1410: 72 65 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61  ree;.}../*.** Ca
1420: 6c 6c 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  ll sqlite3Reprep
1430: 61 72 65 28 29 20 6f 6e 20 74 68 65 20 73 74 61  are() on the sta
1440: 74 65 6d 65 6e 74 2e 20 52 65 6d 6f 76 65 20 69  tement. Remove i
1450: 74 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 6c 72  t from the.** lr
1460: 75 20 6c 69 73 74 20 62 65 66 6f 72 65 20 64 6f  u list before do
1470: 69 6e 67 20 73 6f 2c 20 61 73 20 52 65 70 72 65  ing so, as Repre
1480: 70 61 72 65 28 29 20 77 69 6c 6c 20 66 72 65 65  pare() will free
1490: 20 61 6c 6c 20 74 68 65 0a 2a 2a 20 6d 65 6d 6f   all the.** memo
14a0: 72 79 20 72 65 67 69 73 74 65 72 20 62 75 66 66  ry register buff
14b0: 65 72 73 20 61 6e 79 77 61 79 2e 0a 2a 2f 0a 69  ers anyway..*/.i
14c0: 6e 74 20 76 64 62 65 52 65 70 72 65 70 61 72 65  nt vdbeReprepare
14d0: 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 73 74 6d  (Vdbe *p){.  stm
14e0: 74 4c 72 75 52 65 6d 6f 76 65 28 70 29 3b 0a 20  tLruRemove(p);. 
14f0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 52   return sqlite3R
1500: 65 70 72 65 70 61 72 65 28 70 29 3b 0a 7d 0a 0a  eprepare(p);.}..
1510: 23 65 6c 73 65 20 20 20 20 20 20 20 2f 2a 20 21  #else       /* !
1520: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1530: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 20  MORY_MANAGEMENT 
1540: 2a 2f 0a 20 20 23 64 65 66 69 6e 65 20 73 74 6d  */.  #define stm
1550: 74 4c 72 75 52 65 6d 6f 76 65 28 78 29 0a 20 20  tLruRemove(x).  
1560: 23 64 65 66 69 6e 65 20 73 74 6d 74 4c 72 75 41  #define stmtLruA
1570: 64 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  dd(x).  #define 
1580: 76 64 62 65 52 65 70 72 65 70 61 72 65 28 78 29  vdbeReprepare(x)
1590: 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
15a0: 65 28 78 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  e(x).#endif...#i
15b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
15c0: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a  T_DEPRECATED./*.
15d0: 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 28  ** Return TRUE (
15e0: 6e 6f 6e 2d 7a 65 72 6f 29 20 6f 66 20 74 68 65  non-zero) of the
15f0: 20 73 74 61 74 65 6d 65 6e 74 20 73 75 70 70 6c   statement suppl
1600: 69 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65  ied as an argume
1610: 6e 74 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  nt needs.** to b
1620: 65 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41  e recompiled.  A
1630: 20 73 74 61 74 65 6d 65 6e 74 20 6e 65 65 64 73   statement needs
1640: 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65   to be recompile
1650: 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 0a 2a  d whenever the.*
1660: 2a 20 65 78 65 63 75 74 69 6f 6e 20 65 6e 76 69  * execution envi
1670: 72 6f 6e 6d 65 6e 74 20 63 68 61 6e 67 65 73 20  ronment changes 
1680: 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 77 6f  in a way that wo
1690: 75 6c 64 20 61 6c 74 65 72 20 74 68 65 20 70 72  uld alter the pr
16a0: 6f 67 72 61 6d 0a 2a 2a 20 74 68 61 74 20 73 71  ogram.** that sq
16b0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
16c0: 67 65 6e 65 72 61 74 65 73 2e 20 20 46 6f 72 20  generates.  For 
16d0: 65 78 61 6d 70 6c 65 2c 20 69 66 20 6e 65 77 20  example, if new 
16e0: 66 75 6e 63 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  functions or.** 
16f0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1700: 63 65 73 20 61 72 65 20 72 65 67 69 73 74 65 72  ces are register
1710: 65 64 20 6f 72 20 69 66 20 61 6e 20 61 75 74 68  ed or if an auth
1720: 6f 72 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  orizer function 
1730: 69 73 0a 2a 2a 20 61 64 64 65 64 20 6f 72 20 63  is.** added or c
1740: 68 61 6e 67 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  hanged..*/.int s
1750: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28 73  qlite3_expired(s
1760: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1770: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  mt){.  Vdbe *p =
1780: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
1790: 20 72 65 74 75 72 6e 20 70 3d 3d 30 20 7c 7c 20   return p==0 || 
17a0: 70 2d 3e 65 78 70 69 72 65 64 3b 0a 7d 0a 23 65  p->expired;.}.#e
17b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
17c0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e  following routin
17d0: 65 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72  e destroys a vir
17e0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61  tual machine tha
17f0: 74 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  t is created by.
1800: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
1810: 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65  ompile() routine
1820: 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65  . The integer re
1830: 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c  turned is an SQL
1840: 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f  ITE_.** success/
1850: 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61  failure code tha
1860: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
1870: 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74  result of execut
1880: 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ing the virtual.
1890: 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a  ** machine..**.*
18a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
18b0: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
18c0: 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65  de and string re
18d0: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
18e0: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20  ite3_errcode(), 
18f0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
1900: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
1910: 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20  msg16()..*/.int 
1920: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
1930: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
1940: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Stmt){.  int rc;
1950: 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20  .  if( pStmt==0 
1960: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1970: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
1980: 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56      Vdbe *v = (V
1990: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 23 69 66 20  dbe*)pStmt;.#if 
19a0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
19b0: 45 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  E.    sqlite3_mu
19c0: 74 65 78 20 2a 6d 75 74 65 78 20 3d 20 76 2d 3e  tex *mutex = v->
19d0: 64 62 2d 3e 6d 75 74 65 78 3b 0a 23 65 6e 64 69  db->mutex;.#endi
19e0: 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  f.    sqlite3_mu
19f0: 74 65 78 5f 65 6e 74 65 72 28 6d 75 74 65 78 29  tex_enter(mutex)
1a00: 3b 0a 20 20 20 20 73 74 6d 74 4c 72 75 52 65 6d  ;.    stmtLruRem
1a10: 6f 76 65 28 76 29 3b 0a 20 20 20 20 72 63 20 3d  ove(v);.    rc =
1a20: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
1a30: 6c 69 7a 65 28 76 29 3b 0a 20 20 20 20 73 71 6c  lize(v);.    sql
1a40: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
1a50: 28 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72  (mutex);.  }.  r
1a60: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
1a70: 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74 68 65  ** Terminate the
1a80: 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69   current executi
1a90: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61  on of an SQL sta
1aa0: 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73 65 74  tement and reset
1ab0: 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20 69   it.** back to i
1ac0: 74 73 20 73 74 61 72 74 69 6e 67 20 73 74 61 74  ts starting stat
1ad0: 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
1ae0: 20 62 65 20 72 65 75 73 65 64 2e 20 41 20 73 75   be reused. A su
1af0: 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f 6d 0a  ccess code from.
1b00: 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65 78 65  ** the prior exe
1b10: 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75 72 6e  cution is return
1b20: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  ed..**.** This r
1b30: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
1b40: 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73  error code and s
1b50: 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
1b60: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72  y.** sqlite3_err
1b70: 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f  code(), sqlite3_
1b80: 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c  errmsg() and sql
1b90: 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e  ite3_errmsg16().
1ba0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
1bb0: 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74  reset(sqlite3_st
1bc0: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e  mt *pStmt){.  in
1bd0: 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d  t rc;.  if( pStm
1be0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  t==0 ){.    rc =
1bf0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65   SQLITE_OK;.  }e
1c00: 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 20 2a 76  lse{.    Vdbe *v
1c10: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
1c20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
1c30: 65 78 5f 65 6e 74 65 72 28 76 2d 3e 64 62 2d 3e  ex_enter(v->db->
1c40: 6d 75 74 65 78 29 3b 0a 20 20 20 20 72 63 20 3d  mutex);.    rc =
1c50: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 65   sqlite3VdbeRese
1c60: 74 28 76 29 3b 0a 20 20 20 20 73 74 6d 74 4c 72  t(v);.    stmtLr
1c70: 75 41 64 64 28 76 29 3b 0a 20 20 20 20 73 71 6c  uAdd(v);.    sql
1c80: 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64  ite3VdbeMakeRead
1c90: 79 28 76 2c 20 2d 31 2c 20 30 2c 20 30 2c 20 30  y(v, -1, 0, 0, 0
1ca0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1cb0: 72 63 20 26 20 28 76 2d 3e 64 62 2d 3e 65 72 72  rc & (v->db->err
1cc0: 4d 61 73 6b 29 29 3d 3d 72 63 20 29 3b 0a 20 20  Mask))==rc );.  
1cd0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1ce0: 6c 65 61 76 65 28 76 2d 3e 64 62 2d 3e 6d 75 74  leave(v->db->mut
1cf0: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
1d00: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  n rc;.}../*.** S
1d10: 65 74 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d  et all the param
1d20: 65 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d  eters in the com
1d30: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
1d40: 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ent to NULL..*/.
1d50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61  int sqlite3_clea
1d60: 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  r_bindings(sqlit
1d70: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
1d80: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
1d90: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
1da0: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
1db0: 65 2a 29 70 53 74 6d 74 3b 0a 23 69 66 20 53 51  e*)pStmt;.#if SQ
1dc0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a  LITE_THREADSAFE.
1dd0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1de0: 2a 6d 75 74 65 78 20 3d 20 28 28 56 64 62 65 2a  *mutex = ((Vdbe*
1df0: 29 70 53 74 6d 74 29 2d 3e 64 62 2d 3e 6d 75 74  )pStmt)->db->mut
1e00: 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c  ex;.#endif.  sql
1e10: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
1e20: 28 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72 28 69  (mutex);.  for(i
1e30: 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b 20 69  =0; i<p->nVar; i
1e40: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
1e50: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
1e60: 70 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 20  p->aVar[i]);.   
1e70: 20 70 2d 3e 61 56 61 72 5b 69 5d 2e 66 6c 61 67   p->aVar[i].flag
1e80: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
1e90: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
1ea0: 78 5f 6c 65 61 76 65 28 6d 75 74 65 78 29 3b 0a  x_leave(mutex);.
1eb0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
1ec0: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
1ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73  ************** s
1ee0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 20 20 2a  qlite3_value_  *
1ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
1f10: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1f20: 72 6f 75 74 69 6e 65 73 20 65 78 74 72 61 63 74  routines extract
1f30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
1f40: 6d 20 61 20 4d 65 6d 20 6f 72 20 73 71 6c 69 74  m a Mem or sqlit
1f50: 65 33 5f 76 61 6c 75 65 0a 2a 2a 20 73 74 72 75  e3_value.** stru
1f60: 63 74 75 72 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  cture..*/.const 
1f70: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61  void *sqlite3_va
1f80: 6c 75 65 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33  lue_blob(sqlite3
1f90: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
1fa0: 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d 2a 29   Mem *p = (Mem*)
1fb0: 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 2d 3e 66  pVal;.  if( p->f
1fc0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
1fd0: 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20  |MEM_Str) ){.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1ff0: 78 70 61 6e 64 42 6c 6f 62 28 70 29 3b 0a 20 20  xpandBlob(p);.  
2000: 20 20 70 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d    p->flags &= ~M
2010: 45 4d 5f 53 74 72 3b 0a 20 20 20 20 70 2d 3e 66  EM_Str;.    p->f
2020: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 42 6c 6f 62  lags |= MEM_Blob
2030: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 2d 3e  ;.    return p->
2040: 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  z;.  }else{.    
2050: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76  return sqlite3_v
2060: 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 3b  alue_text(pVal);
2070: 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  .  }.}.int sqlit
2080: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 73  e3_value_bytes(s
2090: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
20a0: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  al){.  return sq
20b0: 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
20c0: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
20d0: 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  8);.}.int sqlite
20e0: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28  3_value_bytes16(
20f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2100: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  Val){.  return s
2110: 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
2120: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
2130: 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 64 6f  F16NATIVE);.}.do
2140: 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 76 61 6c  uble sqlite3_val
2150: 75 65 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65  ue_double(sqlite
2160: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2170: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2180: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 28 4d  VdbeRealValue((M
2190: 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69 6e 74  em*)pVal);.}.int
21a0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
21b0: 6e 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt(sqlite3_value
21c0: 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72   *pVal){.  retur
21d0: 6e 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  n sqlite3VdbeInt
21e0: 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c  Value((Mem*)pVal
21f0: 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69 6e 74 36  );.}.sqlite_int6
2200: 34 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  4 sqlite3_value_
2210: 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f 76 61  int64(sqlite3_va
2220: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
2230: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65  turn sqlite3Vdbe
2240: 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70  IntValue((Mem*)p
2250: 56 61 6c 29 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e  Val);.}.const un
2260: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c  signed char *sql
2270: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
2280: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2290: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28  Val){.  return (
22a0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
22b0: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 56 61 6c  har *)sqlite3Val
22c0: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
22d0: 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66  ITE_UTF8);.}.#if
22e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22f0: 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69  _UTF16.const voi
2300: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
2310: 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33 5f  _text16(sqlite3_
2320: 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20  value* pVal){.  
2330: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61  return sqlite3Va
2340: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
2350: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
2360: 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20  );.}.const void 
2370: 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  *sqlite3_value_t
2380: 65 78 74 31 36 62 65 28 73 71 6c 69 74 65 33 5f  ext16be(sqlite3_
2390: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
23a0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61  return sqlite3Va
23b0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
23c0: 4c 49 54 45 5f 55 54 46 31 36 42 45 29 3b 0a 7d  LITE_UTF16BE);.}
23d0: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
23e0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
23f0: 36 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  6le(sqlite3_valu
2400: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75  e *pVal){.  retu
2410: 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54  rn sqlite3ValueT
2420: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
2430: 5f 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23 65 6e  _UTF16LE);.}.#en
2440: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2450: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
2460: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
2470: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2480: 2a 20 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72  * pVal){.  retur
2490: 6e 20 70 56 61 6c 2d 3e 74 79 70 65 3b 0a 7d 0a  n pVal->type;.}.
24a0: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
24b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73  ************** s
24c0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 20 20  qlite3_result_  
24d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
24e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
24f0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
2500: 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73   routines are us
2510: 65 64 20 62 79 20 75 73 65 72 2d 64 65 66 69 6e  ed by user-defin
2520: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  ed functions to 
2530: 73 70 65 63 69 66 79 0a 2a 2a 20 74 68 65 20 66  specify.** the f
2540: 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74 2e 0a  unction result..
2550: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
2560: 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0a 20 20 73  result_blob(.  s
2570: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2580: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76  pCtx, .  const v
2590: 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  oid *z, .  int n
25a0: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
25b0: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
25c0: 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
25d0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
25e0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
25f0: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2600: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2610: 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e  emSetStr(&pCtx->
2620: 73 2c 20 7a 2c 20 6e 2c 20 30 2c 20 78 44 65 6c  s, z, n, 0, xDel
2630: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
2640: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
2650: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2660: 2a 70 43 74 78 2c 20 64 6f 75 62 6c 65 20 72 56  *pCtx, double rV
2670: 61 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  al){.  assert( s
2680: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
2690: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
26a0: 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  tex) );.  sqlite
26b0: 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c  3VdbeMemSetDoubl
26c0: 65 28 26 70 43 74 78 2d 3e 73 2c 20 72 56 61 6c  e(&pCtx->s, rVal
26d0: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
26e0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 73  3_result_error(s
26f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2700: 70 43 74 78 2c 20 63 6f 6e 73 74 20 63 68 61 72  pCtx, const char
2710: 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61   *z, int n){.  a
2720: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
2730: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
2740: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
2750: 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
2760: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2770: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2780: 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c  SetStr(&pCtx->s,
2790: 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54   z, n, SQLITE_UT
27a0: 46 38 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  F8, SQLITE_TRANS
27b0: 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  IENT);.}.#ifndef
27c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
27d0: 31 36 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  16.void sqlite3_
27e0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28 73  result_error16(s
27f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2800: 70 43 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64  pCtx, const void
2810: 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61   *z, int n){.  a
2820: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
2830: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
2840: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
2850: 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
2860: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2870: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2880: 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c  SetStr(&pCtx->s,
2890: 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54   z, n, SQLITE_UT
28a0: 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54  F16NATIVE, SQLIT
28b0: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a  E_TRANSIENT);.}.
28c0: 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
28d0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 73  te3_result_int(s
28e0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
28f0: 70 43 74 78 2c 20 69 6e 74 20 69 56 61 6c 29 7b  pCtx, int iVal){
2900: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
2910: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
2920: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
2930: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2940: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 70 43  eMemSetInt64(&pC
2950: 74 78 2d 3e 73 2c 20 28 69 36 34 29 69 56 61 6c  tx->s, (i64)iVal
2960: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
2970: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 73  3_result_int64(s
2980: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2990: 70 43 74 78 2c 20 69 36 34 20 69 56 61 6c 29 7b  pCtx, i64 iVal){
29a0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
29b0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
29c0: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
29d0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
29e0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 70 43  eMemSetInt64(&pC
29f0: 74 78 2d 3e 73 2c 20 69 56 61 6c 29 3b 0a 7d 0a  tx->s, iVal);.}.
2a00: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
2a10: 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69 74 65 33  ult_null(sqlite3
2a20: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b  _context *pCtx){
2a30: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
2a40: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
2a50: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
2a60: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2a70: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70 43 74  eMemSetNull(&pCt
2a80: 78 2d 3e 73 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  x->s);.}.void sq
2a90: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
2aa0: 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t(.  sqlite3_con
2ab0: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63  text *pCtx, .  c
2ac0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 0a 20  onst char *z, . 
2ad0: 20 69 6e 74 20 6e 2c 0a 20 20 76 6f 69 64 20 28   int n,.  void (
2ae0: 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29  *xDel)(void *).)
2af0: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2b00: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2b10: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
2b20: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2b30: 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74  beMemSetStr(&pCt
2b40: 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  x->s, z, n, SQLI
2b50: 54 45 5f 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a  TE_UTF8, xDel);.
2b60: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
2b70: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64  _OMIT_UTF16.void
2b80: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2b90: 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65  text16(.  sqlite
2ba0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2bb0: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
2bc0: 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20  z, .  int n, .  
2bd0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
2be0: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
2bf0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
2c00: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
2c10: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
2c20: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2c30: 72 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e  r(&pCtx->s, z, n
2c40: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
2c50: 54 49 56 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76  TIVE, xDel);.}.v
2c60: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
2c70: 6c 74 5f 74 65 78 74 31 36 62 65 28 0a 20 20 73  lt_text16be(.  s
2c80: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2c90: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76  pCtx, .  const v
2ca0: 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  oid *z, .  int n
2cb0: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
2cc0: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
2cd0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
2ce0: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
2cf0: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
2d00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2d10: 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c  SetStr(&pCtx->s,
2d20: 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54   z, n, SQLITE_UT
2d30: 46 31 36 42 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a  F16BE, xDel);.}.
2d40: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
2d50: 75 6c 74 5f 74 65 78 74 31 36 6c 65 28 0a 20 20  ult_text16le(.  
2d60: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2d70: 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20  *pCtx, .  const 
2d80: 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20  void *z, .  int 
2d90: 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  n, .  void (*xDe
2da0: 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20  l)(void *).){.  
2db0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
2dc0: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
2dd0: 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  >s.db->mutex) );
2de0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2df0: 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73  mSetStr(&pCtx->s
2e00: 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55  , z, n, SQLITE_U
2e10: 54 46 31 36 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d  TF16LE, xDel);.}
2e20: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e30: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
2e40: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
2e50: 75 6c 74 5f 76 61 6c 75 65 28 73 71 6c 69 74 65  ult_value(sqlite
2e60: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2e70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2e80: 70 56 61 6c 75 65 29 7b 0a 20 20 61 73 73 65 72  pValue){.  asser
2e90: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
2ea0: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62  _held(pCtx->s.db
2eb0: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
2ec0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
2ed0: 28 26 70 43 74 78 2d 3e 73 2c 20 70 56 61 6c 75  (&pCtx->s, pValu
2ee0: 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  e);.}.void sqlit
2ef0: 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c  e3_result_zerobl
2f00: 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ob(sqlite3_conte
2f10: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 6e 29  xt *pCtx, int n)
2f20: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2f30: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2f40: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
2f50: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2f60: 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62  beMemSetZeroBlob
2f70: 28 26 70 43 74 78 2d 3e 73 2c 20 6e 29 3b 0a 7d  (&pCtx->s, n);.}
2f80: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
2f90: 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28  sult_error_code(
2fa0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2fb0: 2a 70 43 74 78 2c 20 69 6e 74 20 65 72 72 43 6f  *pCtx, int errCo
2fc0: 64 65 29 7b 0a 20 20 70 43 74 78 2d 3e 69 73 45  de){.  pCtx->isE
2fd0: 72 72 6f 72 20 3d 20 65 72 72 43 6f 64 65 3b 0a  rror = errCode;.
2fe0: 7d 0a 0a 2f 2a 20 46 6f 72 63 65 20 61 6e 20 53  }../* Force an S
2ff0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65 72 72  QLITE_TOOBIG err
3000: 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  or. */.void sqli
3010: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
3020: 5f 74 6f 6f 62 69 67 28 73 71 6c 69 74 65 33 5f  _toobig(sqlite3_
3030: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a  context *pCtx){.
3040: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3050: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
3060: 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20  x->s.db->mutex) 
3070: 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72  );.  pCtx->isErr
3080: 6f 72 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  or = SQLITE_TOOB
3090: 49 47 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  IG;.  sqlite3Vdb
30a0: 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78  eMemSetStr(&pCtx
30b0: 2d 3e 73 2c 20 22 73 74 72 69 6e 67 20 6f 72 20  ->s, "string or 
30c0: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 2c 20 2d  blob too big", -
30d0: 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  1, .            
30e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
30f0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
3100: 54 41 54 49 43 29 3b 0a 7d 0a 0a 2f 2a 20 41 6e  TATIC);.}../* An
3110: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 65 72   SQLITE_NOMEM er
3120: 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  ror. */.void sql
3130: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
3140: 72 5f 6e 6f 6d 65 6d 28 73 71 6c 69 74 65 33 5f  r_nomem(sqlite3_
3150: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a  context *pCtx){.
3160: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3170: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
3180: 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20  x->s.db->mutex) 
3190: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
31a0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70 43 74 78  MemSetNull(&pCtx
31b0: 2d 3e 73 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73  ->s);.  pCtx->is
31c0: 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 4e  Error = SQLITE_N
31d0: 4f 4d 45 4d 3b 0a 20 20 70 43 74 78 2d 3e 73 2e  OMEM;.  pCtx->s.
31e0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
31f0: 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45   = 1;.}../*.** E
3200: 78 65 63 75 74 65 20 74 68 65 20 73 74 61 74 65  xecute the state
3210: 6d 65 6e 74 20 70 53 74 6d 74 2c 20 65 69 74 68  ment pStmt, eith
3220: 65 72 20 75 6e 74 69 6c 20 61 20 72 6f 77 20 6f  er until a row o
3230: 66 20 64 61 74 61 20 69 73 20 72 65 61 64 79 2c  f data is ready,
3240: 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
3250: 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  t is completely 
3260: 65 78 65 63 75 74 65 64 20 6f 72 20 61 6e 20 65  executed or an e
3270: 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a  rror occurs..**.
3280: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3290: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
32a0: 75 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67 69 63  ulk of the logic
32b0: 20 62 65 68 69 6e 64 20 74 68 65 20 73 71 6c 69   behind the sqli
32c0: 74 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41 50 49  te_step().** API
32d0: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 74 68 69 6e  .  The only thin
32e0: 67 20 6f 6d 69 74 74 65 64 20 69 73 20 74 68 65  g omitted is the
32f0: 20 61 75 74 6f 6d 61 74 69 63 20 72 65 63 6f 6d   automatic recom
3300: 70 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20 73 63  pile if a .** sc
3310: 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61 73 20  hema change has 
3320: 6f 63 63 75 72 72 65 64 2e 20 20 54 68 61 74 20  occurred.  That 
3330: 64 65 74 61 69 6c 20 69 73 20 68 61 6e 64 6c 65  detail is handle
3340: 64 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75 74 65  d by the.** oute
3350: 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
3360: 20 77 72 61 70 70 65 72 20 70 72 6f 63 65 64 75   wrapper procedu
3370: 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  re..*/.static in
3380: 74 20 73 71 6c 69 74 65 33 53 74 65 70 28 56 64  t sqlite3Step(Vd
3390: 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  be *p){.  sqlite
33a0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
33b0: 0a 0a 20 20 61 73 73 65 72 74 28 70 29 3b 0a 20  ..  assert(p);. 
33c0: 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56   if( p->magic!=V
33d0: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 7b  DBE_MAGIC_RUN ){
33e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
33f0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a  TE_MISUSE;.  }..
3400: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
3410: 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 6e 6f   malloc() has no
3420: 74 20 66 61 69 6c 65 64 20 2a 2f 0a 20 20 64 62  t failed */.  db
3430: 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 69 66 28 20   = p->db;.  if( 
3440: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
3450: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
3460: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
3470: 0a 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 3d 30  ..  if( p->pc<=0
3480: 20 26 26 20 70 2d 3e 65 78 70 69 72 65 64 20 29   && p->expired )
3490: 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  {.    if( p->rc=
34a0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
34b0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49      p->rc = SQLI
34c0: 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 20 20 7d  TE_SCHEMA;.    }
34d0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
34e0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f  _ERROR;.    goto
34f0: 20 65 6e 64 5f 6f 66 5f 73 74 65 70 3b 0a 20 20   end_of_step;.  
3500: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
3510: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
3520: 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54     p->rc = SQLIT
3530: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 72 65  E_MISUSE;.    re
3540: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
3550: 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d  SE;.  }.  if( p-
3560: 3e 70 63 3c 30 20 29 7b 0a 20 20 20 20 2f 2a 20  >pc<0 ){.    /* 
3570: 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
3580: 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
3590: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
35a0: 6e 67 2c 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20  ng, then.    ** 
35b0: 72 65 73 65 74 20 74 68 65 20 69 6e 74 65 72 72  reset the interr
35c0: 75 70 74 20 66 6c 61 67 2e 20 20 54 68 69 73 20  upt flag.  This 
35d0: 70 72 65 76 65 6e 74 73 20 61 20 63 61 6c 6c 20  prevents a call 
35e0: 74 6f 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  to sqlite3_inter
35f0: 72 75 70 74 0a 20 20 20 20 2a 2a 20 66 72 6f 6d  rupt.    ** from
3600: 20 69 6e 74 65 72 72 75 70 74 69 6e 67 20 61 20   interrupting a 
3610: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 68  statement that h
3620: 61 73 20 6e 6f 74 20 79 65 74 20 73 74 61 72 74  as not yet start
3630: 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ed..    */.    i
3640: 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  f( db->activeVdb
3650: 65 43 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eCnt==0 ){.     
3660: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
3670: 75 70 74 65 64 20 3d 20 30 3b 0a 20 20 20 20 7d  upted = 0;.    }
3680: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
3690: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 20 20  _OMIT_TRACE.    
36a0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65  if( db->xProfile
36b0: 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75   && !db->init.bu
36c0: 73 79 20 29 7b 0a 20 20 20 20 20 20 64 6f 75 62  sy ){.      doub
36d0: 6c 65 20 72 4e 6f 77 3b 0a 20 20 20 20 20 20 73  le rNow;.      s
36e0: 71 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54  qlite3OsCurrentT
36f0: 69 6d 65 28 64 62 2d 3e 70 56 66 73 2c 20 26 72  ime(db->pVfs, &r
3700: 4e 6f 77 29 3b 0a 20 20 20 20 20 20 70 2d 3e 73  Now);.      p->s
3710: 74 61 72 74 54 69 6d 65 20 3d 20 28 72 4e 6f 77  tartTime = (rNow
3720: 20 2d 20 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36   - (int)rNow)*36
3730: 30 30 2e 30 2a 32 34 2e 30 2a 31 30 30 30 30 30  00.0*24.0*100000
3740: 30 30 30 30 2e 30 3b 0a 20 20 20 20 7d 0a 23 65  0000.0;.    }.#e
3750: 6e 64 69 66 0a 0a 20 20 20 20 64 62 2d 3e 61 63  ndif..    db->ac
3760: 74 69 76 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20  tiveVdbeCnt++;. 
3770: 20 20 20 69 66 28 20 70 2d 3e 72 65 61 64 4f 6e     if( p->readOn
3780: 6c 79 3d 3d 30 20 29 20 64 62 2d 3e 77 72 69 74  ly==0 ) db->writ
3790: 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20 20 20 20  eVdbeCnt++;.    
37a0: 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 20 20 73  p->pc = 0;.    s
37b0: 74 6d 74 4c 72 75 52 65 6d 6f 76 65 28 70 29 3b  tmtLruRemove(p);
37c0: 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  .  }.#ifndef SQL
37d0: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
37e0: 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 6c 61 69  .  if( p->explai
37f0: 6e 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  n ){.    rc = sq
3800: 6c 69 74 65 33 56 64 62 65 4c 69 73 74 28 70 29  lite3VdbeList(p)
3810: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
3820: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
3830: 45 58 50 4c 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20  EXPLAIN */.  {. 
3840: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
3850: 64 62 65 45 78 65 63 28 70 29 3b 0a 20 20 7d 0a  dbeExec(p);.  }.
3860: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
3870: 66 65 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20  fetyOff(db) ){. 
3880: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
3890: 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e  ISUSE;.  }..#ifn
38a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
38b0: 54 52 41 43 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b  TRACE.  /* Invok
38c0: 65 20 74 68 65 20 70 72 6f 66 69 6c 65 20 63 61  e the profile ca
38d0: 6c 6c 62 61 63 6b 20 69 66 20 74 68 65 72 65 20  llback if there 
38e0: 69 73 20 6f 6e 65 0a 20 20 2a 2f 0a 20 20 69 66  is one.  */.  if
38f0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57  ( rc!=SQLITE_ROW
3900: 20 26 26 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65   && db->xProfile
3910: 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75   && !db->init.bu
3920: 73 79 20 26 26 20 70 2d 3e 6e 4f 70 3e 30 0a 20  sy && p->nOp>0. 
3930: 20 20 20 20 20 20 20 20 20 20 26 26 20 70 2d 3e            && p->
3940: 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  aOp[0].opcode==O
3950: 50 5f 54 72 61 63 65 20 26 26 20 70 2d 3e 61 4f  P_Trace && p->aO
3960: 70 5b 30 5d 2e 70 34 2e 7a 21 3d 30 20 29 7b 0a  p[0].p4.z!=0 ){.
3970: 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77 3b      double rNow;
3980: 0a 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 54  .    u64 elapseT
3990: 69 6d 65 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  ime;..    sqlite
39a0: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64  3OsCurrentTime(d
39b0: 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b  b->pVfs, &rNow);
39c0: 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d 65 20  .    elapseTime 
39d0: 3d 20 28 72 4e 6f 77 20 2d 20 28 69 6e 74 29 72  = (rNow - (int)r
39e0: 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32 34 2e 30  Now)*3600.0*24.0
39f0: 2a 31 30 30 30 30 30 30 30 30 30 2e 30 20 2d 20  *1000000000.0 - 
3a00: 70 2d 3e 73 74 61 72 74 54 69 6d 65 3b 0a 20 20  p->startTime;.  
3a10: 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 28 64    db->xProfile(d
3a20: 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67 2c 20  b->pProfileArg, 
3a30: 70 2d 3e 61 4f 70 5b 30 5d 2e 70 34 2e 7a 2c 20  p->aOp[0].p4.z, 
3a40: 65 6c 61 70 73 65 54 69 6d 65 29 3b 0a 20 20 7d  elapseTime);.  }
3a50: 0a 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e 65  .#endif..  db->e
3a60: 72 72 43 6f 64 65 20 3d 20 72 63 3b 0a 20 20 2f  rrCode = rc;.  /
3a70: 2a 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d  *sqlite3Error(p-
3a80: 3e 64 62 2c 20 72 63 2c 20 30 29 3b 2a 2f 0a 20  >db, rc, 0);*/. 
3a90: 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65 33   p->rc = sqlite3
3aa0: 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 70  ApiExit(p->db, p
3ab0: 2d 3e 72 63 29 3b 0a 65 6e 64 5f 6f 66 5f 73 74  ->rc);.end_of_st
3ac0: 65 70 3a 0a 20 20 61 73 73 65 72 74 28 20 28 72  ep:.  assert( (r
3ad0: 63 26 30 78 66 66 29 3d 3d 72 63 20 29 3b 0a 20  c&0xff)==rc );. 
3ae0: 20 69 66 28 20 70 2d 3e 7a 53 71 6c 20 26 26 20   if( p->zSql && 
3af0: 28 72 63 26 30 78 66 66 29 3c 53 51 4c 49 54 45  (rc&0xff)<SQLITE
3b00: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 2f 2a 20 54  _ROW ){.    /* T
3b10: 68 69 73 20 62 65 68 61 76 69 6f 72 20 6f 63 63  his behavior occ
3b20: 75 72 73 20 69 66 20 73 71 6c 69 74 65 33 5f 70  urs if sqlite3_p
3b30: 72 65 70 61 72 65 5f 76 32 28 29 20 77 61 73 20  repare_v2() was 
3b40: 75 73 65 64 20 74 6f 20 62 75 69 6c 64 0a 20 20  used to build.  
3b50: 20 20 2a 2a 20 74 68 65 20 70 72 65 70 61 72 65    ** the prepare
3b60: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 52 65  d statement.  Re
3b70: 74 75 72 6e 20 65 72 72 6f 72 20 63 6f 64 65 73  turn error codes
3b80: 20 64 69 72 65 63 74 6c 79 20 2a 2f 0a 20 20 20   directly */.   
3b90: 20 70 2d 3e 64 62 2d 3e 65 72 72 43 6f 64 65 20   p->db->errCode 
3ba0: 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 2f 2a 20  = p->rc;.    /* 
3bb0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e  sqlite3Error(p->
3bc0: 64 62 2c 20 70 2d 3e 72 63 2c 20 30 29 3b 20 2a  db, p->rc, 0); *
3bd0: 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 70 2d 3e  /.    return p->
3be0: 72 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rc;.  }else{.   
3bf0: 20 2f 2a 20 54 68 69 73 20 69 73 20 66 6f 72 20   /* This is for 
3c00: 6c 65 67 61 63 79 20 73 71 6c 69 74 65 33 5f 70  legacy sqlite3_p
3c10: 72 65 70 61 72 65 28 29 20 62 75 69 6c 64 73 20  repare() builds 
3c20: 61 6e 64 20 77 68 65 6e 20 74 68 65 20 63 6f 64  and when the cod
3c30: 65 0a 20 20 20 20 2a 2a 20 69 73 20 53 51 4c 49  e.    ** is SQLI
3c40: 54 45 5f 52 4f 57 20 6f 72 20 53 51 4c 49 54 45  TE_ROW or SQLITE
3c50: 5f 44 4f 4e 45 20 2a 2f 0a 20 20 20 20 72 65 74  _DONE */.    ret
3c60: 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 7d 0a 0a 2f  urn rc;.  }.}../
3c70: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
3c80: 20 74 6f 70 2d 6c 65 76 65 6c 20 69 6d 70 6c 65   top-level imple
3c90: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 73 71 6c  mentation of sql
3ca0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 43 61  ite3_step().  Ca
3cb0: 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 53 74 65  ll.** sqlite3Ste
3cc0: 70 28 29 20 74 6f 20 64 6f 20 6d 6f 73 74 20 6f  p() to do most o
3cd0: 66 20 74 68 65 20 77 6f 72 6b 2e 20 20 49 66 20  f the work.  If 
3ce0: 61 20 73 63 68 65 6d 61 20 65 72 72 6f 72 20 6f  a schema error o
3cf0: 63 63 75 72 73 2c 0a 2a 2a 20 63 61 6c 6c 20 73  ccurs,.** call s
3d00: 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
3d10: 29 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2e  ) and try again.
3d20: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3d30: 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a 69 6e  E_OMIT_PARSER.in
3d40: 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73  t sqlite3_step(s
3d50: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
3d60: 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  mt){.  int rc = 
3d70: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
3d80: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
3d90: 20 20 56 64 62 65 20 2a 76 3b 0a 20 20 20 20 76    Vdbe *v;.    v
3da0: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
3db0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
3dc0: 65 78 5f 65 6e 74 65 72 28 76 2d 3e 64 62 2d 3e  ex_enter(v->db->
3dd0: 6d 75 74 65 78 29 3b 0a 20 20 20 20 72 63 20 3d  mutex);.    rc =
3de0: 20 73 71 6c 69 74 65 33 53 74 65 70 28 76 29 3b   sqlite3Step(v);
3df0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
3e00: 65 78 5f 6c 65 61 76 65 28 76 2d 3e 64 62 2d 3e  ex_leave(v->db->
3e10: 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65  mutex);.  }.  re
3e20: 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6c 73 65  turn rc;.}.#else
3e30: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 65  .int sqlite3_ste
3e40: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
3e50: 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63  pStmt){.  int rc
3e60: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
3e70: 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b  ;.  if( pStmt ){
3e80: 0a 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30  .    int cnt = 0
3e90: 3b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20  ;.    Vdbe *v = 
3ea0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
3eb0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ec0: 76 2d 3e 64 62 3b 0a 20 20 20 20 73 71 6c 69 74  v->db;.    sqlit
3ed0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
3ee0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 77  b->mutex);.    w
3ef0: 68 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69  hile( (rc = sqli
3f00: 74 65 33 53 74 65 70 28 76 29 29 3d 3d 53 51 4c  te3Step(v))==SQL
3f10: 49 54 45 5f 53 43 48 45 4d 41 0a 20 20 20 20 20  ITE_SCHEMA.     
3f20: 20 20 20 20 20 20 26 26 20 63 6e 74 2b 2b 20 3c        && cnt++ <
3f30: 20 35 0a 20 20 20 20 20 20 20 20 20 20 20 26 26   5.           &&
3f40: 20 76 64 62 65 52 65 70 72 65 70 61 72 65 28 76   vdbeReprepare(v
3f50: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
3f60: 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b  e3_reset(pStmt);
3f70: 0a 20 20 20 20 20 20 76 2d 3e 65 78 70 69 72 65  .      v->expire
3f80: 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  d = 0;.    }.   
3f90: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
3fa0: 53 43 48 45 4d 41 20 26 26 20 76 2d 3e 7a 53 71  SCHEMA && v->zSq
3fb0: 6c 20 26 26 20 64 62 2d 3e 70 45 72 72 20 29 7b  l && db->pErr ){
3fc0: 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
3fd0: 61 73 65 20 6f 63 63 75 72 73 20 61 66 74 65 72  ase occurs after
3fe0: 20 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63 6f   failing to reco
3ff0: 6d 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74 61  mpile an sql sta
4000: 74 65 6d 65 6e 74 2e 20 0a 20 20 20 20 20 20 2a  tement. .      *
4010: 2a 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  * The error mess
4020: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  age from the SQL
4030: 20 63 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c   compiler has al
4040: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65  ready been loade
4050: 64 20 0a 20 20 20 20 20 20 2a 2a 20 69 6e 74 6f  d .      ** into
4060: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
4070: 6e 64 6c 65 2e 20 54 68 69 73 20 62 6c 6f 63 6b  ndle. This block
4080: 20 63 6f 70 69 65 73 20 74 68 65 20 65 72 72 6f   copies the erro
4090: 72 20 6d 65 73 73 61 67 65 20 0a 20 20 20 20 20  r message .     
40a0: 20 2a 2a 20 66 72 6f 6d 20 74 68 65 20 64 61 74   ** from the dat
40b0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 6e 74  abase handle int
40c0: 6f 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  o the statement 
40d0: 61 6e 64 20 73 65 74 73 20 74 68 65 20 73 74 61  and sets the sta
40e0: 74 65 6d 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20  tement.      ** 
40f0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
4100: 74 6f 20 30 20 74 6f 20 65 6e 73 75 72 65 20 74  to 0 to ensure t
4110: 68 61 74 20 77 68 65 6e 20 74 68 65 20 73 74 61  hat when the sta
4120: 74 65 6d 65 6e 74 20 69 73 20 0a 20 20 20 20 20  tement is .     
4130: 20 2a 2a 20 66 69 6e 61 6c 69 7a 65 64 20 6f 72   ** finalized or
4140: 20 72 65 73 65 74 20 74 68 65 20 70 61 72 73 65   reset the parse
4150: 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  r error message 
4160: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 76 69 61  is available via
4170: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
4180: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
4190: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29  qlite3_errcode()
41a0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
41b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
41c0: 72 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20  r = (const char 
41d0: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
41e0: 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 20  text(db->pErr); 
41f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
4200: 46 72 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72  Free(db, v->zErr
4210: 4d 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Msg);.      if( 
4220: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
4230: 64 20 29 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e  d ){.        v->
4240: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
4250: 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 7a 45  3DbStrDup(db, zE
4260: 72 72 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  rr);.      } els
4270: 65 20 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a  e {.        v->z
4280: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
4290: 20 20 20 20 76 2d 3e 72 63 20 3d 20 53 51 4c 49      v->rc = SQLI
42a0: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20  TE_NOMEM;.      
42b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  }.    }.    rc =
42c0: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
42d0: 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71 6c  db, rc);.    sql
42e0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
42f0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  (db->mutex);.  }
4300: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
4310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78  #endif../*.** Ex
4320: 74 72 61 63 74 20 74 68 65 20 75 73 65 72 20 64  tract the user d
4330: 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69 74  ata from a sqlit
4340: 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63  e3_context struc
4350: 74 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e 20  ture and return 
4360: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
4370: 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  it..*/.void *sql
4380: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 73  ite3_user_data(s
4390: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
43a0: 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20  p){.  assert( p 
43b0: 26 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20  && p->pFunc );. 
43c0: 20 72 65 74 75 72 6e 20 70 2d 3e 70 46 75 6e 63   return p->pFunc
43d0: 2d 3e 70 55 73 65 72 44 61 74 61 3b 0a 7d 0a 0a  ->pUserData;.}..
43e0: 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  /*.** Extract th
43f0: 65 20 75 73 65 72 20 64 61 74 61 20 66 72 6f 6d  e user data from
4400: 20 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65   a sqlite3_conte
4410: 78 74 20 73 74 72 75 63 74 75 72 65 20 61 6e 64  xt structure and
4420: 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69   return a.** poi
4430: 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a 73  nter to it..*/.s
4440: 71 6c 69 74 65 33 20 2a 73 71 6c 69 74 65 33 5f  qlite3 *sqlite3_
4450: 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c  context_db_handl
4460: 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
4470: 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28  t *p){.  assert(
4480: 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 29   p && p->pFunc )
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 73 2e  ;.  return p->s.
44a0: 64 62 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  db;.}../*.** The
44b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68   following is th
44c0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
44d0: 20 6f 66 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   of an SQL funct
44e0: 69 6f 6e 20 74 68 61 74 20 61 6c 77 61 79 73 0a  ion that always.
44f0: 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
4500: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
4510: 74 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  tating that the 
4520: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
4530: 20 69 6e 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67   in the.** wrong
4540: 20 63 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 73   context.  The s
4550: 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f  qlite3_overload_
4560: 66 75 6e 63 74 69 6f 6e 28 29 20 41 50 49 20 6d  function() API m
4570: 69 67 68 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a  ight construct.*
4580: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74  * SQL function t
4590: 68 61 74 20 75 73 65 20 74 68 69 73 20 72 6f 75  hat use this rou
45a0: 74 69 6e 65 20 73 6f 20 74 68 61 74 20 74 68 65  tine so that the
45b0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
45c0: 65 78 69 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d  exist.** for nam
45d0: 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74  e resolution but
45e0: 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6f 76   are actually ov
45f0: 65 72 6c 6f 61 64 65 64 20 62 79 20 74 68 65 20  erloaded by the 
4600: 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a  xFindFunction.**
4610: 20 6d 65 74 68 6f 64 20 6f 66 20 76 69 72 74 75   method of virtu
4620: 61 6c 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f  al tables..*/.vo
4630: 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
4640: 64 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c  dFunction(.  sql
4650: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
4660: 6e 74 65 78 74 2c 20 20 2f 2a 20 54 68 65 20 66  ntext,  /* The f
4670: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20  unction calling 
4680: 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
4690: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
46a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
46b0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
46c0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  o the function *
46d0: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
46e0: 65 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 2f  e **argv       /
46f0: 2a 20 56 61 6c 75 65 20 6f 66 20 65 61 63 68 20  * Value of each 
4700: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
4710: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
4720: 6d 65 20 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46  me = context->pF
4730: 75 6e 63 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68  unc->zName;.  ch
4740: 61 72 20 2a 7a 45 72 72 3b 0a 20 20 7a 45 72 72  ar *zErr;.  zErr
4750: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
4760: 66 28 30 2c 0a 20 20 20 20 20 20 22 75 6e 61 62  f(0,.      "unab
4770: 6c 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69  le to use functi
4780: 6f 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71  on %s in the req
4790: 75 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c  uested context",
47a0: 20 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74   zName);.  sqlit
47b0: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
47c0: 63 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d  context, zErr, -
47d0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  1);.  sqlite3_fr
47e0: 65 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  ee(zErr);.}../*.
47f0: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72  ** Allocate or r
4800: 65 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67  eturn the aggreg
4810: 61 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20  ate context for 
4820: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  a user function.
4830: 20 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65    A new.** conte
4840: 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
4850: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c  on the first cal
4860: 6c 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63  l.  Subsequent c
4870: 61 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a  alls return the.
4880: 2a 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20  ** same context 
4890: 74 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65  that was returne
48a0: 64 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73  d on prior calls
48b0: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
48c0: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
48d0: 74 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e  text(sqlite3_con
48e0: 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79  text *p, int nBy
48f0: 74 65 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  te){.  Mem *pMem
4900: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26  ;.  assert( p &&
4910: 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e   p->pFunc && p->
4920: 70 46 75 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a  pFunc->xStep );.
4930: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
4940: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d 3e  3_mutex_held(p->
4950: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
4960: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d    pMem = p->pMem
4970: 3b 0a 20 20 69 66 28 20 28 70 4d 65 6d 2d 3e 66  ;.  if( (pMem->f
4980: 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67 29 3d  lags & MEM_Agg)=
4990: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 42  =0 ){.    if( nB
49a0: 79 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  yte==0 ){.      
49b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
49c0: 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4d  leaseExternal(pM
49d0: 65 6d 29 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  em);.      pMem-
49e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
49f0: 6c 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 7a  l;.      pMem->z
4a00: 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
4a10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4a20: 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20  beMemGrow(pMem, 
4a30: 6e 42 79 74 65 2c 20 30 29 3b 0a 20 20 20 20 20  nByte, 0);.     
4a40: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
4a50: 45 4d 5f 41 67 67 3b 0a 20 20 20 20 20 20 70 4d  EM_Agg;.      pM
4a60: 65 6d 2d 3e 75 2e 70 44 65 66 20 3d 20 70 2d 3e  em->u.pDef = p->
4a70: 70 46 75 6e 63 3b 0a 20 20 20 20 20 20 69 66 28  pFunc;.      if(
4a80: 20 70 4d 65 6d 2d 3e 7a 20 29 7b 0a 20 20 20 20   pMem->z ){.    
4a90: 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d 2d      memset(pMem-
4aa0: 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a 20  >z, 0, nByte);. 
4ab0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
4ac0: 0a 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a  .  return (void*
4ad0: 29 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a  )pMem->z;.}../*.
4ae0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 75  ** Return the au
4af0: 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e  xilary data poin
4b00: 74 65 72 2c 20 69 66 20 61 6e 79 2c 20 66 6f 72  ter, if any, for
4b10: 20 74 68 65 20 69 41 72 67 27 74 68 20 61 72 67   the iArg'th arg
4b20: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  ument to.** the 
4b30: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
4b40: 66 69 6e 65 64 20 62 79 20 70 43 74 78 2e 0a 2a  fined by pCtx..*
4b50: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
4b60: 67 65 74 5f 61 75 78 64 61 74 61 28 73 71 6c 69  get_auxdata(sqli
4b70: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
4b80: 78 2c 20 69 6e 74 20 69 41 72 67 29 7b 0a 20 20  x, int iArg){.  
4b90: 56 64 62 65 46 75 6e 63 20 2a 70 56 64 62 65 46  VdbeFunc *pVdbeF
4ba0: 75 6e 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  unc;..  assert( 
4bb0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
4bc0: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
4bd0: 75 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65  utex) );.  pVdbe
4be0: 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64  Func = pCtx->pVd
4bf0: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70  beFunc;.  if( !p
4c00: 56 64 62 65 46 75 6e 63 20 7c 7c 20 69 41 72 67  VdbeFunc || iArg
4c10: 3e 3d 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75  >=pVdbeFunc->nAu
4c20: 78 20 7c 7c 20 69 41 72 67 3c 30 20 29 7b 0a 20  x || iArg<0 ){. 
4c30: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4c40: 0a 20 20 72 65 74 75 72 6e 20 70 56 64 62 65 46  .  return pVdbeF
4c50: 75 6e 63 2d 3e 61 70 41 75 78 5b 69 41 72 67 5d  unc->apAux[iArg]
4c60: 2e 70 41 75 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  .pAux;.}../*.** 
4c70: 53 65 74 20 74 68 65 20 61 75 78 69 6c 61 72 79  Set the auxilary
4c80: 20 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 6e   data pointer an
4c90: 64 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f  d delete functio
4ca0: 6e 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27  n, for the iArg'
4cb0: 74 68 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  th.** argument t
4cc0: 6f 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  o the user-funct
4cd0: 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70  ion defined by p
4ce0: 43 74 78 2e 20 41 6e 79 20 70 72 65 76 69 6f 75  Ctx. Any previou
4cf0: 73 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 64 65  s value is.** de
4d00: 6c 65 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  leted by calling
4d10: 20 74 68 65 20 64 65 6c 65 74 65 20 66 75 6e 63   the delete func
4d20: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 77  tion specified w
4d30: 68 65 6e 20 69 74 20 77 61 73 20 73 65 74 2e 0a  hen it was set..
4d40: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
4d50: 73 65 74 5f 61 75 78 64 61 74 61 28 0a 20 20 73  set_auxdata(.  s
4d60: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
4d70: 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 69 41 72  pCtx, .  int iAr
4d80: 67 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 75 78  g, .  void *pAux
4d90: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
4da0: 65 74 65 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  ete)(void*).){. 
4db0: 20 73 74 72 75 63 74 20 41 75 78 44 61 74 61 20   struct AuxData 
4dc0: 2a 70 41 75 78 44 61 74 61 3b 0a 20 20 56 64 62  *pAuxData;.  Vdb
4dd0: 65 46 75 6e 63 20 2a 70 56 64 62 65 46 75 6e 63  eFunc *pVdbeFunc
4de0: 3b 0a 20 20 69 66 28 20 69 41 72 67 3c 30 20 29  ;.  if( iArg<0 )
4df0: 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 0a 20   goto failed;.. 
4e00: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
4e10: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
4e20: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
4e30: 3b 0a 20 20 70 56 64 62 65 46 75 6e 63 20 3d 20  ;.  pVdbeFunc = 
4e40: 70 43 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b  pCtx->pVdbeFunc;
4e50: 0a 20 20 69 66 28 20 21 70 56 64 62 65 46 75 6e  .  if( !pVdbeFun
4e60: 63 20 7c 7c 20 70 56 64 62 65 46 75 6e 63 2d 3e  c || pVdbeFunc->
4e70: 6e 41 75 78 3c 3d 69 41 72 67 20 29 7b 0a 20 20  nAux<=iArg ){.  
4e80: 20 20 69 6e 74 20 6e 41 75 78 20 3d 20 28 70 56    int nAux = (pV
4e90: 64 62 65 46 75 6e 63 20 3f 20 70 56 64 62 65 46  dbeFunc ? pVdbeF
4ea0: 75 6e 63 2d 3e 6e 41 75 78 20 3a 20 30 29 3b 0a  unc->nAux : 0);.
4eb0: 20 20 20 20 69 6e 74 20 6e 4d 61 6c 6c 6f 63 20      int nMalloc 
4ec0: 3d 20 73 69 7a 65 6f 66 28 56 64 62 65 46 75 6e  = sizeof(VdbeFun
4ed0: 63 29 20 2b 20 73 69 7a 65 6f 66 28 73 74 72 75  c) + sizeof(stru
4ee0: 63 74 20 41 75 78 44 61 74 61 29 2a 69 41 72 67  ct AuxData)*iArg
4ef0: 3b 0a 20 20 20 20 70 56 64 62 65 46 75 6e 63 20  ;.    pVdbeFunc 
4f00: 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c  = sqlite3DbReall
4f10: 6f 63 28 70 43 74 78 2d 3e 73 2e 64 62 2c 20 70  oc(pCtx->s.db, p
4f20: 56 64 62 65 46 75 6e 63 2c 20 6e 4d 61 6c 6c 6f  VdbeFunc, nMallo
4f30: 63 29 3b 0a 20 20 20 20 69 66 28 20 21 70 56 64  c);.    if( !pVd
4f40: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 20 20  beFunc ){.      
4f50: 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 20 20 20  goto failed;.   
4f60: 20 7d 0a 20 20 20 20 70 43 74 78 2d 3e 70 56 64   }.    pCtx->pVd
4f70: 62 65 46 75 6e 63 20 3d 20 70 56 64 62 65 46 75  beFunc = pVdbeFu
4f80: 6e 63 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26  nc;.    memset(&
4f90: 70 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78  pVdbeFunc->apAux
4fa0: 5b 6e 41 75 78 5d 2c 20 30 2c 20 73 69 7a 65 6f  [nAux], 0, sizeo
4fb0: 66 28 73 74 72 75 63 74 20 41 75 78 44 61 74 61  f(struct AuxData
4fc0: 29 2a 28 69 41 72 67 2b 31 2d 6e 41 75 78 29 29  )*(iArg+1-nAux))
4fd0: 3b 0a 20 20 20 20 70 56 64 62 65 46 75 6e 63 2d  ;.    pVdbeFunc-
4fe0: 3e 6e 41 75 78 20 3d 20 69 41 72 67 2b 31 3b 0a  >nAux = iArg+1;.
4ff0: 20 20 20 20 70 56 64 62 65 46 75 6e 63 2d 3e 70      pVdbeFunc->p
5000: 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 46 75  Func = pCtx->pFu
5010: 6e 63 3b 0a 20 20 7d 0a 0a 20 20 70 41 75 78 44  nc;.  }..  pAuxD
5020: 61 74 61 20 3d 20 26 70 56 64 62 65 46 75 6e 63  ata = &pVdbeFunc
5030: 2d 3e 61 70 41 75 78 5b 69 41 72 67 5d 3b 0a 20  ->apAux[iArg];. 
5040: 20 69 66 28 20 70 41 75 78 44 61 74 61 2d 3e 70   if( pAuxData->p
5050: 41 75 78 20 26 26 20 70 41 75 78 44 61 74 61 2d  Aux && pAuxData-
5060: 3e 78 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20  >xDelete ){.    
5070: 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74  pAuxData->xDelet
5080: 65 28 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78  e(pAuxData->pAux
5090: 29 3b 0a 20 20 7d 0a 20 20 70 41 75 78 44 61 74  );.  }.  pAuxDat
50a0: 61 2d 3e 70 41 75 78 20 3d 20 70 41 75 78 3b 0a  a->pAux = pAux;.
50b0: 20 20 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c    pAuxData->xDel
50c0: 65 74 65 20 3d 20 78 44 65 6c 65 74 65 3b 0a 20  ete = xDelete;. 
50d0: 20 72 65 74 75 72 6e 3b 0a 0a 66 61 69 6c 65 64   return;..failed
50e0: 3a 0a 20 20 69 66 28 20 78 44 65 6c 65 74 65 20  :.  if( xDelete 
50f0: 29 7b 0a 20 20 20 20 78 44 65 6c 65 74 65 28 70  ){.    xDelete(p
5100: 41 75 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66  Aux);.  }.}..#if
5110: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5120: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a  _DEPRECATED./*.*
5130: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
5140: 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65  ber of times the
5150: 20 53 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 6f   Step function o
5160: 66 20 61 20 61 67 67 72 65 67 61 74 65 20 68 61  f a aggregate ha
5170: 73 20 62 65 65 6e 20 0a 2a 2a 20 63 61 6c 6c 65  s been .** calle
5180: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75  d..**.** This fu
5190: 6e 63 74 69 6f 6e 20 69 73 20 64 65 70 72 65 63  nction is deprec
51a0: 61 74 65 64 2e 20 20 44 6f 20 6e 6f 74 20 75 73  ated.  Do not us
51b0: 65 20 69 74 20 66 6f 72 20 6e 65 77 20 63 6f 64  e it for new cod
51c0: 65 2e 20 20 49 74 20 69 73 0a 2a 2a 20 70 72 6f  e.  It is.** pro
51d0: 76 69 64 65 20 6f 6e 6c 79 20 74 6f 20 61 76 6f  vide only to avo
51e0: 69 64 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61  id breaking lega
51f0: 63 79 20 63 6f 64 65 2e 20 20 4e 65 77 20 61 67  cy code.  New ag
5200: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
5210: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
5220: 6f 6e 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20  ons should keep 
5230: 74 68 65 69 72 20 6f 77 6e 20 63 6f 75 6e 74 73  their own counts
5240: 20 77 69 74 68 69 6e 20 74 68 65 69 72 20 61 67   within their ag
5250: 67 72 65 67 61 74 65 0a 2a 2a 20 63 6f 6e 74 65  gregate.** conte
5260: 78 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  xt..*/.int sqlit
5270: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
5280: 6e 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nt(sqlite3_conte
5290: 78 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74  xt *p){.  assert
52a0: 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20  ( p && p->pFunc 
52b0: 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74  && p->pFunc->xSt
52c0: 65 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70  ep );.  return p
52d0: 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23 65 6e  ->pMem->n;.}.#en
52e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
52f0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
5300: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
5310: 65 73 75 6c 74 20 73 65 74 20 66 6f 72 20 74 68  esult set for th
5320: 65 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d  e statement pStm
5330: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
5340: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73  3_column_count(s
5350: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5360: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d  mt){.  Vdbe *pVm
5370: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
5380: 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 20 3f  ;.  return pVm ?
5390: 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e   pVm->nResColumn
53a0: 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52   : 0;.}../*.** R
53b0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
53c0: 20 6f 66 20 76 61 6c 75 65 73 20 61 76 61 69 6c   of values avail
53d0: 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 75  able from the cu
53e0: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74 68 65  rrent row of the
53f0: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 65 78  .** currently ex
5400: 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
5410: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20  t pStmt..*/.int 
5420: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
5430: 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  nt(sqlite3_stmt 
5440: 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20  *pStmt){.  Vdbe 
5450: 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70  *pVm = (Vdbe *)p
5460: 53 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 3d  Stmt;.  if( pVm=
5470: 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65 73 75  =0 || pVm->pResu
5480: 6c 74 53 65 74 3d 3d 30 20 29 20 72 65 74 75 72  ltSet==0 ) retur
5490: 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 56  n 0;.  return pV
54a0: 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b 0a 7d  m->nResColumn;.}
54b0: 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  .../*.** Check t
54c0: 6f 20 73 65 65 20 69 66 20 63 6f 6c 75 6d 6e 20  o see if column 
54d0: 69 43 6f 6c 20 6f 66 20 74 68 65 20 67 69 76 65  iCol of the give
54e0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 76  n statement is v
54f0: 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69 74 20  alid.  If.** it 
5500: 69 73 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69  is, return a poi
5510: 6e 74 65 72 20 74 6f 20 74 68 65 20 4d 65 6d 20  nter to the Mem 
5520: 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  for the value of
5530: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a   that column..**
5540: 20 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f 74 20   If iCol is not 
5550: 76 61 6c 69 64 2c 20 72 65 74 75 72 6e 20 61 20  valid, return a 
5560: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d  pointer to a Mem
5570: 20 77 68 69 63 68 20 68 61 73 20 61 20 76 61 6c   which has a val
5580: 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a 2a  ue.** of NULL..*
5590: 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 63 6f  /.static Mem *co
55a0: 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65 33 5f  lumnMem(sqlite3_
55b0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
55c0: 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d   i){.  Vdbe *pVm
55d0: 3b 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a 20 20  ;.  int vals;.  
55e0: 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70 56  Mem *pOut;..  pV
55f0: 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  m = (Vdbe *)pStm
5600: 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26 20  t;.  if( pVm && 
5610: 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 21  pVm->pResultSet!
5620: 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52 65  =0 && i<pVm->nRe
5630: 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30 20  sColumn && i>=0 
5640: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  ){.    sqlite3_m
5650: 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d 3e  utex_enter(pVm->
5660: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
5670: 76 61 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f 64  vals = sqlite3_d
5680: 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
5690: 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 56  ;.    pOut = &pV
56a0: 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b 69 5d  m->pResultSet[i]
56b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
56c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 4d 65 6d 20  tatic const Mem 
56d0: 6e 75 6c 6c 4d 65 6d 20 3d 20 7b 7b 30 7d 2c 20  nullMem = {{0}, 
56e0: 30 2e 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20 4d  0.0, 0, "", 0, M
56f0: 45 4d 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45 5f  EM_Null, SQLITE_
5700: 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d 3b  NULL, 0, 0, 0 };
5710: 0a 20 20 20 20 69 66 28 20 70 56 6d 2d 3e 64 62  .    if( pVm->db
5720: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5730: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56  3_mutex_enter(pV
5740: 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  m->db->mutex);. 
5750: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
5760: 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49 54  r(pVm->db, SQLIT
5770: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
5780: 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28 4d   }.    pOut = (M
5790: 65 6d 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20 20  em*)&nullMem;.  
57a0: 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  }.  return pOut;
57b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
57c0: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
57d0: 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e 67  d after invoking
57e0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   an sqlite3_valu
57f0: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 6f  e_XXX function o
5800: 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76  n a .** column v
5810: 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61 6c  alue (i.e. a val
5820: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ue returned by e
5830: 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51 4c  valuating an SQL
5840: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
5850: 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69 73  he.** select lis
5860: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  t of a SELECT st
5870: 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d 61  atement) that ma
5880: 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f 63  y cause a malloc
5890: 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20 0a  () failure. If .
58a0: 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20  ** malloc() has 
58b0: 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72 65  failed, the thre
58c0: 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ads mallocFailed
58d0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
58e0: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 0a   and the result.
58f0: 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74 65  ** code of state
5900: 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20 74  ment pStmt set t
5910: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a  o SQLITE_NOMEM..
5920: 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61 6c  **.** Specifical
5930: 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c 6c  ly, this is call
5940: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a 0a  ed from within:.
5950: 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  **.**     sqlite
5960: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a 2a  3_column_int().*
5970: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
5980: 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a 20  lumn_int64().** 
5990: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
59a0: 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20 20  mn_text().**    
59b0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
59c0: 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20 20  text16().**     
59d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 72  sqlite3_column_r
59e0: 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  eal().**     sql
59f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
5a00: 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  s().**     sqlit
5a10: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
5a20: 36 28 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e 6f  6().**.** But no
5a30: 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 6f  t for sqlite3_co
5a40: 6c 75 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68 69  lumn_blob(), whi
5a50: 63 68 20 6e 65 76 65 72 20 63 61 6c 6c 73 20 6d  ch never calls m
5a60: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74  alloc()..*/.stat
5a70: 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d 61  ic void columnMa
5a80: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c 69  llocFailure(sqli
5a90: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
5aa0: 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c 6f  .{.  /* If mallo
5ab0: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
5ac0: 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63 6f  g an encoding co
5ad0: 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e 20  nversion within 
5ae0: 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  an.  ** sqlite3_
5af0: 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c 20  column_XXX API, 
5b00: 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65 74  then set the ret
5b10: 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65 20  urn code of the 
5b20: 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 2a  statement to.  *
5b30: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20  * SQLITE_NOMEM. 
5b40: 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  The next call to
5b50: 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e 79   _step() (if any
5b60: 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  ) will return SQ
5b70: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a 20  LITE_ERROR.  ** 
5b80: 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29 20  and _finalize() 
5b90: 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d 45  will return NOME
5ba0: 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20 2a  M..  */.  Vdbe *
5bb0: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
5bc0: 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  t;.  if( p ){.  
5bd0: 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65    p->rc = sqlite
5be0: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
5bf0: 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  p->rc);.    sqli
5c00: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
5c10: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
5c20: 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a   }.}../*********
5c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c40: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  *** sqlite3_colu
5c50: 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  mn_  ***********
5c60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c70: 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ****.** The foll
5c80: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61  owing routines a
5c90: 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  re used to acces
5ca0: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68  s elements of th
5cb0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a  e current row.**
5cc0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
5cd0: 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69  et..*/.const voi
5ce0: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
5cf0: 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73  n_blob(sqlite3_s
5d00: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
5d10: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i){.  const void
5d20: 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73   *val;.  val = s
5d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
5d40: 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  b( columnMem(pSt
5d50: 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45 76  mt,i) );.  /* Ev
5d60: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20  en though there 
5d70: 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20 63  is no encoding c
5d80: 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75 65  onversion, value
5d90: 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20 20  _blob() might.  
5da0: 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20  ** need to call 
5db0: 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70 61  malloc() to expa
5dc0: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  nd the result of
5dd0: 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a 20   a zeroblob() . 
5de0: 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 20   ** expression. 
5df0: 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d 61  .  */.  columnMa
5e00: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
5e10: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
5e20: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
5e30: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71 6c  column_bytes(sql
5e40: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
5e50: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
5e60: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
5e70: 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75 6d  lue_bytes( colum
5e80: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5e90: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5ea0: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5eb0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69   return val;.}.i
5ec0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
5ed0: 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  n_bytes16(sqlite
5ee0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
5ef0: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c  nt i){.  int val
5f00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5f10: 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d 6e  _bytes16( column
5f20: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
5f30: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
5f40: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
5f50: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f  return val;.}.do
5f60: 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f 6c  uble sqlite3_col
5f70: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  umn_double(sqlit
5f80: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5f90: 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c 65  int i){.  double
5fa0: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
5fb0: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f 6c  alue_double( col
5fc0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
5fd0: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
5fe0: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
5ff0: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
6000: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
6010: 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f  umn_int(sqlite3_
6020: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
6030: 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d   i){.  int val =
6040: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
6050: 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  nt( columnMem(pS
6060: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
6070: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
6080: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
6090: 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69   val;.}.sqlite_i
60a0: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt64 sqlite3_col
60b0: 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74 65  umn_int64(sqlite
60c0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
60d0: 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65 5f  nt i){.  sqlite_
60e0: 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c 69  int64 val = sqli
60f0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
6100: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
6110: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
6120: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
6130: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
6140: 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  l;.}.const unsig
6150: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
6160: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 71  3_column_text(sq
6170: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6180: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f 6e  t, int i){.  con
6190: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
61a0: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
61b0: 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c 75  value_text( colu
61c0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
61d0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
61e0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
61f0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
6200: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
6210: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61  qlite3_column_va
6220: 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  lue(sqlite3_stmt
6230: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
6240: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 63  .  Mem *pOut = c
6250: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 20  olumnMem(pStmt, 
6260: 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  i);.  if( pOut->
6270: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63  flags&MEM_Static
6280: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
6290: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61 74  ags &= ~MEM_Stat
62a0: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
62b0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d  ags |= MEM_Ephem
62c0: 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d 61  ;.  }.  columnMa
62d0: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
62e0: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73 71  t);.  return (sq
62f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70 4f  lite3_value *)pO
6300: 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  ut;.}.#ifndef SQ
6310: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6320: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
6330: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
6340: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
6350: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
6360: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c   const void *val
6370: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6380: 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d  _text16( columnM
6390: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
63a0: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
63b0: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
63c0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e  eturn val;.}.#en
63d0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
63e0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
63f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
6400: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
6410: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
6420: 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20 73  .  int iType = s
6430: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
6440: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
6450: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
6460: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
6470: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
6480: 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68 65  iType;.}../* The
6490: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74   following funct
64a0: 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e  ion is experimen
64b0: 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63 74 20  tal and subject 
64c0: 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a 20  to change or.** 
64d0: 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e 74  removal */./*int
64e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
64f0: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
6500: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
6510: 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72 65  , int i){.**  re
6520: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
6530: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
6540: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
6550: 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a 2f  ,i) );.**}.*/../
6560: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
6570: 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   N-th element of
6580: 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65   pStmt->pColName
6590: 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  [] into a string
65a0: 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63 28   using.** xFunc(
65b0: 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68  ) then return th
65c0: 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e  at string.  If N
65d0: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
65e0: 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a  , return 0..**.*
65f0: 2a 20 54 68 65 72 65 20 61 72 65 20 75 70 20 74  * There are up t
6600: 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20 65 61  o 5 names for ea
6610: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65 54  ch column.  useT
6620: 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73 20 77  ype determines w
6630: 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73 20  hich.** name is 
6640: 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72 65 20  returned.  Here 
6650: 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a 2a  are the names:.*
6660: 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20 20 54  *.**    0      T
6670: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61  he column name a
6680: 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64  s it should be d
6690: 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f 75 74  isplayed for out
66a0: 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20 20 20  put.**    1     
66b0: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 6e 61   The datatype na
66c0: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  me for the colum
66d0: 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20 20 54  n.**    2      T
66e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
66f0: 61 74 61 62 61 73 65 20 74 68 61 74 20 74 68 65  atabase that the
6700: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
6710: 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20 20  from.**    3    
6720: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
6730: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
6740: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
6750: 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20 20  from.**    4    
6760: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
6770: 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74  e table column t
6780: 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20 63  hat the result c
6790: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72  olumn derives fr
67a0: 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  om.**.** If the 
67b0: 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 61 20  result is not a 
67c0: 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72 65  simple column re
67d0: 66 65 72 65 6e 63 65 20 28 69 66 20 69 74 20 69  ference (if it i
67e0: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a  s an expression.
67f0: 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74  ** or a constant
6800: 29 20 74 68 65 6e 20 75 73 65 54 79 70 65 73 20  ) then useTypes 
6810: 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65 74 75  2, 3, and 4 retu
6820: 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74  rn NULL..*/.stat
6830: 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 63  ic const void *c
6840: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71 6c  olumnName(.  sql
6850: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
6860: 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f 6e  ,.  int N,.  con
6870: 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
6880: 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20 75  )(Mem*),.  int u
6890: 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e 73  seType.){.  cons
68a0: 74 20 76 6f 69 64 20 2a 72 65 74 20 3d 20 30 3b  t void *ret = 0;
68b0: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
68c0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 6e  be *)pStmt;.  in
68d0: 74 20 6e 3b 0a 20 20 0a 0a 20 20 69 66 28 20 70  t n;.  ..  if( p
68e0: 21 3d 30 20 29 7b 0a 20 20 20 20 6e 20 3d 20 73  !=0 ){.    n = s
68f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
6900: 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  unt(pStmt);.    
6910: 69 66 28 20 4e 3c 6e 20 26 26 20 4e 3e 3d 30 20  if( N<n && N>=0 
6920: 29 7b 0a 20 20 20 20 20 20 4e 20 2b 3d 20 75 73  ){.      N += us
6930: 65 54 79 70 65 2a 6e 3b 0a 20 20 20 20 20 20 73  eType*n;.      s
6940: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
6950: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
6960: 3b 0a 20 20 20 20 20 20 72 65 74 20 3d 20 78 46  ;.      ret = xF
6970: 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61 6d 65  unc(&p->aColName
6980: 5b 4e 5d 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  [N]);..      /* 
6990: 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76  A malloc may hav
69a0: 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65 20  e failed inside 
69b0: 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29 20 63  of the xFunc() c
69c0: 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20 20  all. If this.   
69d0: 20 20 20 2a 2a 20 69 73 20 74 68 65 20 63 61 73     ** is the cas
69e0: 65 2c 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c  e, clear the mal
69f0: 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61  locFailed flag a
6a00: 6e 64 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a  nd return NULL..
6a10: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
6a20: 66 28 20 70 2d 3e 64 62 20 26 26 20 70 2d 3e 64  f( p->db && p->d
6a30: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
6a40: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 64 62  ){.        p->db
6a50: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
6a60: 20 30 3b 0a 20 20 20 20 20 20 20 20 72 65 74 20   0;.        ret 
6a70: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
6a80: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
6a90: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
6aa0: 74 65 78 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  tex);.    }.  }.
6ab0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a    return ret;.}.
6ac0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6ad0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74  e name of the Nt
6ae0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
6af0: 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72  result set retur
6b00: 6e 65 64 20 62 79 20 53 51 4c 0a 2a 2a 20 73 74  ned by SQL.** st
6b10: 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a  atement pStmt..*
6b20: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
6b30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
6b40: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
6b50: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
6b60: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
6b70: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
6b80: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
6b90: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
6ba0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f  3_value_text, CO
6bb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23  LNAME_NAME);.}.#
6bc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6bd0: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
6be0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
6bf0: 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74  umn_name16(sqlit
6c00: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6c10: 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e  int N){.  return
6c20: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20   columnName(.   
6c30: 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f     pStmt, N, (co
6c40: 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d  nst void*(*)(Mem
6c50: 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  *))sqlite3_value
6c60: 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45  _text16, COLNAME
6c70: 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 65 6e 64 69 66  _NAME);.}.#endif
6c80: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 72 61 69  ../*.** Constrai
6c90: 6e 74 3a 20 20 49 66 20 79 6f 75 20 68 61 76 65  nt:  If you have
6ca0: 20 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d   ENABLE_COLUMN_M
6cb0: 45 54 41 44 41 54 41 20 74 68 65 6e 20 79 6f 75  ETADATA then you
6cc0: 20 6d 75 73 74 0a 2a 2a 20 6e 6f 74 20 64 65 66   must.** not def
6cd0: 69 6e 65 20 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ine OMIT_DECLTYP
6ce0: 45 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  E..*/.#if define
6cf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6d00: 43 4c 54 59 50 45 29 20 26 26 20 64 65 66 69 6e  CLTYPE) && defin
6d10: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
6d20: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
6d30: 29 0a 23 20 65 72 72 6f 72 20 22 4d 75 73 74 20  ).# error "Must 
6d40: 6e 6f 74 20 64 65 66 69 6e 65 20 62 6f 74 68 20  not define both 
6d50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
6d60: 54 59 50 45 20 5c 0a 20 20 20 20 20 20 20 20 20  TYPE \.         
6d70: 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  and SQLITE_ENABL
6d80: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
6d90: 41 22 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  A".#endif..#ifnd
6da0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
6db0: 45 43 4c 54 59 50 45 0a 2f 2a 0a 2a 2a 20 52 65  ECLTYPE./*.** Re
6dc0: 74 75 72 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  turn the column 
6dd0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
6de0: 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29   (if applicable)
6df0: 20 6f 66 20 74 68 65 20 27 69 27 74 68 20 63 6f   of the 'i'th co
6e00: 6c 75 6d 6e 0a 2a 2a 20 6f 66 20 74 68 65 20 72  lumn.** of the r
6e10: 65 73 75 6c 74 20 73 65 74 20 6f 66 20 53 51 4c  esult set of SQL
6e20: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
6e30: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
6e40: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
6e50: 64 65 63 6c 74 79 70 65 28 73 71 6c 69 74 65 33  decltype(sqlite3
6e60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6e70: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6e80: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6e90: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6ea0: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
6eb0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6ec0: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43  ext, COLNAME_DEC
6ed0: 4c 54 59 50 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  LTYPE);.}.#ifnde
6ee0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
6ef0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
6f00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
6f10: 65 63 6c 74 79 70 65 31 36 28 73 71 6c 69 74 65  ecltype16(sqlite
6f20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
6f30: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
6f40: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
6f50: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
6f60: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
6f70: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
6f80: 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f  text16, COLNAME_
6f90: 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a 23 65 6e  DECLTYPE);.}.#en
6fa0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
6fb0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64  IT_UTF16 */.#end
6fc0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
6fd0: 54 5f 44 45 43 4c 54 59 50 45 20 2a 2f 0a 0a 23  T_DECLTYPE */..#
6fe0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
6ff0: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
7000: 41 54 41 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  ATA./*.** Return
7010: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
7020: 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 77   database from w
7030: 68 69 63 68 20 61 20 72 65 73 75 6c 74 20 63 6f  hich a result co
7040: 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a  lumn derives..**
7050: 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
7060: 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
7070: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
7080: 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74  ression or const
7090: 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69  ant or.** anythi
70a0: 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20 69 73  ng else which is
70b0: 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69 67 75 6f   not an unabiguo
70c0: 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  us reference to 
70d0: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  a database colum
70e0: 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
70f0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
7100: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73  _database_name(s
7110: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7120: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
7130: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
7140: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
7150: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
7160: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
7170: 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41  alue_text, COLNA
7180: 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a  ME_DATABASE);.}.
7190: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
71a0: 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20  MIT_UTF16.const 
71b0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
71c0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
71d0: 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  me16(sqlite3_stm
71e0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
71f0: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
7200: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
7210: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
7220: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
7230: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
7240: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42  6, COLNAME_DATAB
7250: 41 53 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  ASE);.}.#endif /
7260: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
7270: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  F16 */../*.** Re
7280: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
7290: 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20   the table from 
72a0: 77 68 69 63 68 20 61 20 72 65 73 75 6c 74 20 63  which a result c
72b0: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a  olumn derives..*
72c0: 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e  * NULL is return
72d0: 65 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  ed if the result
72e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
72f0: 70 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73  pression or cons
7300: 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68  tant or.** anyth
7310: 69 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20 69  ing else which i
7320: 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69 67 75  s not an unabigu
7330: 6f 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f  ous reference to
7340: 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75   a database colu
7350: 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  mn..*/.const cha
7360: 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r *sqlite3_colum
7370: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 71 6c  n_table_name(sql
7380: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7390: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
73a0: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
73b0: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
73c0: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
73d0: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
73e0: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
73f0: 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 69 66 6e 64  _TABLE);.}.#ifnd
7400: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7410: 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20  TF16.const void 
7420: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
7430: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28 73 71 6c  table_name16(sql
7440: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7450: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
7460: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
7470: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
7480: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
7490: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
74a0: 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41  ue_text16, COLNA
74b0: 4d 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 65 6e  ME_TABLE);.}.#en
74c0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
74d0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a  IT_UTF16 */../*.
74e0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
74f0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
7500: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 77 68 69 63  column from whic
7510: 68 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  h a result colum
7520: 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55  n derives..** NU
7530: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
7540: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
7550: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
7560: 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74  sion or constant
7570: 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20   or.** anything 
7580: 65 6c 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f  else which is no
7590: 74 20 61 6e 20 75 6e 61 62 69 67 75 6f 75 73 20  t an unabiguous 
75a0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64  reference to a d
75b0: 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a  atabase column..
75c0: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
75d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
75e0: 69 67 69 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65  igin_name(sqlite
75f0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
7600: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
7610: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
7620: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
7630: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
7640: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
7650: 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f  text, COLNAME_CO
7660: 4c 55 4d 4e 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  LUMN);.}.#ifndef
7670: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7680: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
7690: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
76a0: 69 67 69 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69  igin_name16(sqli
76b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
76c0: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
76d0: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
76e0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
76f0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
7700: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
7710: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
7720: 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 65 6e  E_COLUMN);.}.#en
7730: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7740: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64  IT_UTF16 */.#end
7750: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
7760: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
7770: 41 54 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a  ATA */.../******
7780: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65  ********* sqlite
77a0: 33 5f 62 69 6e 64 5f 20 20 2a 2a 2a 2a 2a 2a 2a  3_bind_  *******
77b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
77c0: 2a 2a 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52 6f 75 74  ****.** .** Rout
77d0: 69 6e 65 73 20 75 73 65 64 20 74 6f 20 61 74 74  ines used to att
77e0: 61 63 68 20 76 61 6c 75 65 73 20 74 6f 20 77 69  ach values to wi
77f0: 6c 64 63 61 72 64 73 20 69 6e 20 61 20 63 6f 6d  ldcards in a com
7800: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
7810: 65 6e 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 55 6e  ent..*/./*.** Un
7820: 62 69 6e 64 20 74 68 65 20 76 61 6c 75 65 20 62  bind the value b
7830: 6f 75 6e 64 20 74 6f 20 76 61 72 69 61 62 6c 65  ound to variable
7840: 20 69 20 69 6e 20 76 69 72 74 75 61 6c 20 6d 61   i in virtual ma
7850: 63 68 69 6e 65 20 70 2e 20 54 68 69 73 20 69 73  chine p. This is
7860: 20 74 68 65 20 0a 2a 2a 20 74 68 65 20 73 61 6d   the .** the sam
7870: 65 20 61 73 20 62 69 6e 64 69 6e 67 20 61 20 4e  e as binding a N
7880: 55 4c 4c 20 76 61 6c 75 65 20 74 6f 20 74 68 65  ULL value to the
7890: 20 63 6f 6c 75 6d 6e 2e 20 49 66 20 74 68 65 20   column. If the 
78a0: 22 69 22 20 70 61 72 61 6d 65 74 65 72 20 69 73  "i" parameter is
78b0: 0a 2a 2a 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  .** out of range
78c0: 2c 20 74 68 65 6e 20 53 51 4c 49 54 45 5f 52 41  , then SQLITE_RA
78d0: 4e 47 45 20 69 73 20 72 65 74 75 72 6e 65 64 2e  NGE is returned.
78e0: 20 4f 74 68 65 77 69 73 65 20 53 51 4c 49 54 45   Othewise SQLITE
78f0: 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 75 63  _OK..**.** A suc
7900: 63 65 73 73 66 75 6c 20 65 76 61 6c 75 61 74 69  cessful evaluati
7910: 6f 6e 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69  on of this routi
7920: 6e 65 20 61 63 71 75 69 72 65 73 20 74 68 65 20  ne acquires the 
7930: 6d 75 74 65 78 20 6f 6e 20 70 2e 0a 2a 2a 20 74  mutex on p..** t
7940: 68 65 20 6d 75 74 65 78 20 69 73 20 72 65 6c 65  he mutex is rele
7950: 61 73 65 64 20 69 66 20 61 6e 79 20 6b 69 6e 64  ased if any kind
7960: 20 6f 66 20 65 72 72 6f 72 20 6f 63 63 75 72 73   of error occurs
7970: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 65 72 72 6f  ..**.** The erro
7980: 72 20 63 6f 64 65 20 73 74 6f 72 65 64 20 69 6e  r code stored in
7990: 20 64 61 74 61 62 61 73 65 20 70 2d 3e 64 62 20   database p->db 
79a0: 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  is overwritten w
79b0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 0a 2a  ith the return.*
79c0: 2a 20 76 61 6c 75 65 20 69 6e 20 61 6e 79 20 63  * value in any c
79d0: 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ase..*/.static i
79e0: 6e 74 20 76 64 62 65 55 6e 62 69 6e 64 28 56 64  nt vdbeUnbind(Vd
79f0: 62 65 20 2a 70 2c 20 69 6e 74 20 69 29 7b 0a 20  be *p, int i){. 
7a00: 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 66   Mem *pVar;.  if
7a10: 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  ( p==0 ) return 
7a20: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
7a30: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
7a40: 6e 74 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  nter(p->db->mute
7a50: 78 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6d 61 67  x);.  if( p->mag
7a60: 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic!=VDBE_MAGIC_R
7a70: 55 4e 20 7c 7c 20 70 2d 3e 70 63 3e 3d 30 20 29  UN || p->pc>=0 )
7a80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
7a90: 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45  or(p->db, SQLITE
7aa0: 5f 4d 49 53 55 53 45 2c 20 30 29 3b 0a 20 20 20  _MISUSE, 0);.   
7ab0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
7ac0: 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  eave(p->db->mute
7ad0: 78 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53  x);.    return S
7ae0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
7af0: 7d 0a 20 20 69 66 28 20 69 3c 31 20 7c 7c 20 69  }.  if( i<1 || i
7b00: 3e 70 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20  >p->nVar ){.    
7b10: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e  sqlite3Error(p->
7b20: 64 62 2c 20 53 51 4c 49 54 45 5f 52 41 4e 47 45  db, SQLITE_RANGE
7b30: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
7b40: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
7b50: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
7b60: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   return SQLITE_R
7b70: 41 4e 47 45 3b 0a 20 20 7d 0a 20 20 69 2d 2d 3b  ANGE;.  }.  i--;
7b80: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
7b90: 61 72 5b 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ar[i];.  sqlite3
7ba0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
7bb0: 56 61 72 29 3b 0a 20 20 70 56 61 72 2d 3e 66 6c  Var);.  pVar->fl
7bc0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
7bd0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70    sqlite3Error(p
7be0: 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c  ->db, SQLITE_OK,
7bf0: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51   0);.  return SQ
7c00: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
7c10: 2a 20 42 69 6e 64 20 61 20 74 65 78 74 20 6f 72  * Bind a text or
7c20: 20 42 4c 4f 42 20 76 61 6c 75 65 2e 0a 2a 2f 0a   BLOB value..*/.
7c30: 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 64 54  static int bindT
7c40: 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  ext(.  sqlite3_s
7c50: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20 2f 2a  tmt *pStmt,   /*
7c60: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
7c70: 6f 20 62 69 6e 64 20 61 67 61 69 6e 73 74 20 2a  o bind against *
7c80: 2f 0a 20 20 69 6e 74 20 69 2c 20 20 20 20 20 20  /.  int i,      
7c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
7ca0: 64 65 78 20 6f 66 20 74 68 65 20 70 61 72 61 6d  dex of the param
7cb0: 65 74 65 72 20 74 6f 20 62 69 6e 64 20 2a 2f 0a  eter to bind */.
7cc0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44    const void *zD
7cd0: 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ata,     /* Poin
7ce0: 74 65 72 20 74 6f 20 74 68 65 20 64 61 74 61 20  ter to the data 
7cf0: 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f 0a 20  to be bound */. 
7d00: 20 69 6e 74 20 6e 44 61 74 61 2c 20 20 20 20 20   int nData,     
7d10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7d20: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
7d30: 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a  ta to be bound *
7d40: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  /.  void (*xDel)
7d50: 28 76 6f 69 64 2a 29 2c 20 20 20 2f 2a 20 44 65  (void*),   /* De
7d60: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 74 68 65  structor for the
7d70: 20 64 61 74 61 20 2a 2f 0a 20 20 69 6e 74 20 65   data */.  int e
7d80: 6e 63 6f 64 69 6e 67 20 20 20 20 20 20 20 20 20  ncoding         
7d90: 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 66 6f    /* Encoding fo
7da0: 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 29 7b  r the data */.){
7db0: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
7dc0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 4d 65  be *)pStmt;.  Me
7dd0: 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e 74 20 72  m *pVar;.  int r
7de0: 63 3b 0a 0a 20 20 72 63 20 3d 20 76 64 62 65 55  c;..  rc = vdbeU
7df0: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69  nbind(p, i);.  i
7e00: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7e10: 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 44 61 74   ){.    if( zDat
7e20: 61 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 56  a!=0 ){.      pV
7e30: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 2d  ar = &p->aVar[i-
7e40: 31 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  1];.      rc = s
7e50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7e60: 53 74 72 28 70 56 61 72 2c 20 7a 44 61 74 61 2c  Str(pVar, zData,
7e70: 20 6e 44 61 74 61 2c 20 65 6e 63 6f 64 69 6e 67   nData, encoding
7e80: 2c 20 78 44 65 6c 29 3b 0a 20 20 20 20 20 20 69  , xDel);.      i
7e90: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7ea0: 20 26 26 20 65 6e 63 6f 64 69 6e 67 21 3d 30 20   && encoding!=0 
7eb0: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
7ec0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7ed0: 65 45 6e 63 6f 64 69 6e 67 28 70 56 61 72 2c 20  eEncoding(pVar, 
7ee0: 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  ENC(p->db));.   
7ef0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
7f00: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 72  e3Error(p->db, r
7f10: 63 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 63 20  c, 0);.      rc 
7f20: 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  = sqlite3ApiExit
7f30: 28 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20  (p->db, rc);.   
7f40: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d   }.    sqlite3_m
7f50: 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62  utex_leave(p->db
7f60: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20  ->mutex);.  }.  
7f70: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f  return rc;.}.../
7f80: 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 62 6c 6f 62  *.** Bind a blob
7f90: 20 76 61 6c 75 65 20 74 6f 20 61 6e 20 53 51 4c   value to an SQL
7fa0: 20 73 74 61 74 65 6d 65 6e 74 20 76 61 72 69 61   statement varia
7fb0: 62 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ble..*/.int sqli
7fc0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  te3_bind_blob(. 
7fd0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
7fe0: 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20  Stmt, .  int i, 
7ff0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
8000: 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61  Data, .  int nDa
8010: 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44  ta, .  void (*xD
8020: 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  el)(void*).){.  
8030: 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28  return bindText(
8040: 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c  pStmt, i, zData,
8050: 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29   nData, xDel, 0)
8060: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
8070: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 71 6c 69  bind_double(sqli
8080: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
8090: 20 69 6e 74 20 69 2c 20 64 6f 75 62 6c 65 20 72   int i, double r
80a0: 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63  Value){.  int rc
80b0: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
80c0: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72  dbe *)pStmt;.  r
80d0: 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70  c = vdbeUnbind(p
80e0: 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , i);.  if( rc==
80f0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
8100: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8110: 65 74 44 6f 75 62 6c 65 28 26 70 2d 3e 61 56 61  etDouble(&p->aVa
8120: 72 5b 69 2d 31 5d 2c 20 72 56 61 6c 75 65 29 3b  r[i-1], rValue);
8130: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
8140: 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e  ex_leave(p->db->
8150: 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65  mutex);.  }.  re
8160: 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73  turn rc;.}.int s
8170: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
8180: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 2c  sqlite3_stmt *p,
8190: 20 69 6e 74 20 69 2c 20 69 6e 74 20 69 56 61 6c   int i, int iVal
81a0: 75 65 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  ue){.  return sq
81b0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
81c0: 28 70 2c 20 69 2c 20 28 69 36 34 29 69 56 61 6c  (p, i, (i64)iVal
81d0: 75 65 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  ue);.}.int sqlit
81e0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 71  e3_bind_int64(sq
81f0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8200: 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c 69 74 65  t, int i, sqlite
8210: 5f 69 6e 74 36 34 20 69 56 61 6c 75 65 29 7b 0a  _int64 iValue){.
8220: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
8230: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
8240: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
8250: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
8260: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8270: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
8280: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
8290: 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 69  &p->aVar[i-1], i
82a0: 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69  Value);.    sqli
82b0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
82c0: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
82d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
82e0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
82f0: 6e 64 5f 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  nd_null(sqlite3_
8300: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
8310: 20 69 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20   i){.  int rc;. 
8320: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
8330: 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20  *)pStmt;.  rc = 
8340: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
8350: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8360: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
8370: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
8380: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
8390: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
83a0: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62  .}.int sqlite3_b
83b0: 69 6e 64 5f 74 65 78 74 28 20 0a 20 20 73 71 6c  ind_text( .  sql
83c0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
83d0: 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63  , .  int i, .  c
83e0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61  onst char *zData
83f0: 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20  , .  int nData, 
8400: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
8410: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75  void*).){.  retu
8420: 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d  rn bindText(pStm
8430: 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61  t, i, zData, nDa
8440: 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45  ta, xDel, SQLITE
8450: 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66 6e 64 65  _UTF8);.}.#ifnde
8460: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
8470: 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  F16.int sqlite3_
8480: 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20 20 73  bind_text16(.  s
8490: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
84a0: 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20  mt, .  int i, . 
84b0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61   const void *zDa
84c0: 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61  ta, .  int nData
84d0: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
84e0: 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65  )(void*).){.  re
84f0: 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53  turn bindText(pS
8500: 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e  tmt, i, zData, n
8510: 44 61 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49  Data, xDel, SQLI
8520: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b  TE_UTF16NATIVE);
8530: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
8540: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
8550: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  /.int sqlite3_bi
8560: 6e 64 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33  nd_value(sqlite3
8570: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
8580: 74 20 69 2c 20 63 6f 6e 73 74 20 73 71 6c 69 74  t i, const sqlit
8590: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 75 65  e3_value *pValue
85a0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56  ){.  int rc;.  V
85b0: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a  dbe *p = (Vdbe *
85c0: 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76  )pStmt;.  rc = v
85d0: 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b  dbeUnbind(p, i);
85e0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
85f0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
8600: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
8610: 6f 70 79 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31  opy(&p->aVar[i-1
8620: 5d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20 20  ], pValue);.    
8630: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8640: 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
8650: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
8660: 65 45 6e 63 6f 64 69 6e 67 28 26 70 2d 3e 61 56  eEncoding(&p->aV
8670: 61 72 5b 69 2d 31 5d 2c 20 45 4e 43 28 70 2d 3e  ar[i-1], ENC(p->
8680: 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  db));.    }.    
8690: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
86a0: 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(p->db->mutex
86b0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
86c0: 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d 3e  lite3ApiExit(p->
86d0: 64 62 2c 20 72 63 29 3b 0a 20 20 72 65 74 75 72  db, rc);.  retur
86e0: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
86f0: 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f  te3_bind_zeroblo
8700: 62 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  b(sqlite3_stmt *
8710: 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 69 6e  pStmt, int i, in
8720: 74 20 6e 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  t n){.  int rc;.
8730: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
8740: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20  e *)pStmt;.  rc 
8750: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
8760: 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  i);.  if( rc==SQ
8770: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
8780: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
8790: 5a 65 72 6f 42 6c 6f 62 28 26 70 2d 3e 61 56 61  ZeroBlob(&p->aVa
87a0: 72 5b 69 2d 31 5d 2c 20 6e 29 3b 0a 20 20 20 20  r[i-1], n);.    
87b0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
87c0: 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(p->db->mutex
87d0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
87e0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  rc;.}../*.** Ret
87f0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
8800: 66 20 77 69 6c 64 63 61 72 64 73 20 74 68 61 74  f wildcards that
8810: 20 63 61 6e 20 62 65 20 70 6f 74 65 6e 74 69 61   can be potentia
8820: 6c 6c 79 20 62 6f 75 6e 64 20 74 6f 2e 0a 2a 2a  lly bound to..**
8830: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
8840: 20 61 64 64 65 64 20 74 6f 20 73 75 70 70 6f 72   added to suppor
8850: 74 20 44 42 44 3a 3a 53 51 4c 69 74 65 2e 20 20  t DBD::SQLite.  
8860: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8870: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
8880: 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  ount(sqlite3_stm
8890: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
88a0: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
88b0: 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 20  tmt;.  return p 
88c0: 3f 20 70 2d 3e 6e 56 61 72 20 3a 20 30 3b 0a 7d  ? p->nVar : 0;.}
88d0: 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20 61  ../*.** Create a
88e0: 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 76 61   mapping from va
88f0: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 73 20 74  riable numbers t
8900: 6f 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73  o variable names
8910: 0a 2a 2a 20 69 6e 20 74 68 65 20 56 64 62 65 2e  .** in the Vdbe.
8920: 61 7a 56 61 72 5b 5d 20 61 72 72 61 79 2c 20 69  azVar[] array, i
8930: 66 20 73 75 63 68 20 61 20 6d 61 70 70 69 6e 67  f such a mapping
8940: 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64   does not alread
8950: 79 0a 2a 2a 20 65 78 69 73 74 2e 0a 2a 2f 0a 73  y.** exist..*/.s
8960: 74 61 74 69 63 20 76 6f 69 64 20 63 72 65 61 74  tatic void creat
8970: 65 56 61 72 4d 61 70 28 56 64 62 65 20 2a 70 29  eVarMap(Vdbe *p)
8980: 7b 0a 20 20 69 66 28 20 21 70 2d 3e 6f 6b 56 61  {.  if( !p->okVa
8990: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
89a0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e  _mutex_enter(p->
89b0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
89c0: 69 66 28 20 21 70 2d 3e 6f 6b 56 61 72 20 29 7b  if( !p->okVar ){
89d0: 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  .      int j;.  
89e0: 20 20 20 20 4f 70 20 2a 70 4f 70 3b 0a 20 20 20      Op *pOp;.   
89f0: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 4f 70 3d     for(j=0, pOp=
8a00: 70 2d 3e 61 4f 70 3b 20 6a 3c 70 2d 3e 6e 4f 70  p->aOp; j<p->nOp
8a10: 3b 20 6a 2b 2b 2c 20 70 4f 70 2b 2b 29 7b 0a 20  ; j++, pOp++){. 
8a20: 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e         if( pOp->
8a30: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 56 61 72 69 61  opcode==OP_Varia
8a40: 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ble ){.         
8a50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8a60: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
8a70: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20 20 20 20  ->nVar );.      
8a80: 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70 4f 70      p->azVar[pOp
8a90: 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d 3e 70  ->p1-1] = pOp->p
8aa0: 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  4.z;.        }. 
8ab0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d 3e       }.      p->
8ac0: 6f 6b 56 61 72 20 3d 20 31 3b 0a 20 20 20 20 7d  okVar = 1;.    }
8ad0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
8ae0: 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e  ex_leave(p->db->
8af0: 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  mutex);.  }.}../
8b00: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
8b10: 6e 61 6d 65 20 6f 66 20 61 20 77 69 6c 64 63 61  name of a wildca
8b20: 72 64 20 70 61 72 61 6d 65 74 65 72 2e 20 20 52  rd parameter.  R
8b30: 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68  eturn NULL if th
8b40: 65 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 6f 75  e index.** is ou
8b50: 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69 66  t of range or if
8b60: 20 74 68 65 20 77 69 6c 64 63 61 72 64 20 69 73   the wildcard is
8b70: 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20   unnamed..**.** 
8b80: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
8b90: 77 61 79 73 20 55 54 46 2d 38 2e 0a 2a 2f 0a 63  ways UTF-8..*/.c
8ba0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
8bb0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
8bc0: 72 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73  r_name(sqlite3_s
8bd0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
8be0: 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  i){.  Vdbe *p = 
8bf0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
8c00: 69 66 28 20 70 3d 3d 30 20 7c 7c 20 69 3c 31 20  if( p==0 || i<1 
8c10: 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20 29 7b 0a  || i>p->nVar ){.
8c20: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
8c30: 7d 0a 20 20 63 72 65 61 74 65 56 61 72 4d 61 70  }.  createVarMap
8c40: 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d  (p);.  return p-
8c50: 3e 61 7a 56 61 72 5b 69 2d 31 5d 3b 0a 7d 0a 0a  >azVar[i-1];.}..
8c60: 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61 20 77 69  /*.** Given a wi
8c70: 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65 72  ldcard parameter
8c80: 20 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 74 68   name, return th
8c90: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 76  e index of the v
8ca0: 61 72 69 61 62 6c 65 0a 2a 2a 20 77 69 74 68 20  ariable.** with 
8cb0: 74 68 61 74 20 6e 61 6d 65 2e 20 20 49 66 20 74  that name.  If t
8cc0: 68 65 72 65 20 69 73 20 6e 6f 20 76 61 72 69 61  here is no varia
8cd0: 62 6c 65 20 77 69 74 68 20 74 68 65 20 67 69 76  ble with the giv
8ce0: 65 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 72 65 74 75  en name,.** retu
8cf0: 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  rn 0..*/.int sql
8d00: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
8d10: 74 65 72 5f 69 6e 64 65 78 28 73 71 6c 69 74 65  ter_index(sqlite
8d20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 63  3_stmt *pStmt, c
8d30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
8d40: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
8d50: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 69  Vdbe*)pStmt;.  i
8d60: 6e 74 20 69 3b 0a 20 20 69 66 28 20 70 3d 3d 30  nt i;.  if( p==0
8d70: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
8d80: 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 56 61  ;.  }.  createVa
8d90: 72 4d 61 70 28 70 29 3b 20 0a 20 20 69 66 28 20  rMap(p); .  if( 
8da0: 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  zName ){.    for
8db0: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b  (i=0; i<p->nVar;
8dc0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e   i++){.      con
8dd0: 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 2d 3e  st char *z = p->
8de0: 61 7a 56 61 72 5b 69 5d 3b 0a 20 20 20 20 20 20  azVar[i];.      
8df0: 69 66 28 20 7a 20 26 26 20 73 74 72 63 6d 70 28  if( z && strcmp(
8e00: 7a 2c 7a 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  z,zName)==0 ){. 
8e10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 2b         return i+
8e20: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
8e30: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
8e40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66  .}../*.** Transf
8e50: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
8e60: 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 73  from the first s
8e70: 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 20 74 6f  tatement over to
8e80: 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 2a 2a 20   the second..** 
8e90: 49 66 20 74 68 65 20 74 77 6f 20 73 74 61 74 65  If the two state
8ea0: 6d 65 6e 74 73 20 63 6f 6e 74 61 69 6e 20 61 20  ments contain a 
8eb0: 64 69 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72  different number
8ec0: 20 6f 66 20 62 69 6e 64 69 6e 67 73 2c 20 74 68   of bindings, th
8ed0: 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  en.** an SQLITE_
8ee0: 45 52 52 4f 52 20 69 73 20 72 65 74 75 72 6e 65  ERROR is returne
8ef0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
8f00: 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
8f10: 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
8f20: 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74  pFromStmt, sqlit
8f30: 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74  e3_stmt *pToStmt
8f40: 29 7b 0a 20 20 56 64 62 65 20 2a 70 46 72 6f 6d  ){.  Vdbe *pFrom
8f50: 20 3d 20 28 56 64 62 65 2a 29 70 46 72 6f 6d 53   = (Vdbe*)pFromS
8f60: 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f  tmt;.  Vdbe *pTo
8f70: 20 3d 20 28 56 64 62 65 2a 29 70 54 6f 53 74 6d   = (Vdbe*)pToStm
8f80: 74 3b 0a 20 20 69 6e 74 20 69 2c 20 72 63 20 3d  t;.  int i, rc =
8f90: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66   SQLITE_OK;.  if
8fa0: 28 20 28 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21  ( (pFrom->magic!
8fb0: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
8fc0: 26 26 20 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21  && pFrom->magic!
8fd0: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 48 41 4c 54  =VDBE_MAGIC_HALT
8fe0: 29 0a 20 20 20 20 7c 7c 20 28 70 54 6f 2d 3e 6d  ).    || (pTo->m
8ff0: 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43  agic!=VDBE_MAGIC
9000: 5f 52 55 4e 20 26 26 20 70 54 6f 2d 3e 6d 61 67  _RUN && pTo->mag
9010: 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 48  ic!=VDBE_MAGIC_H
9020: 41 4c 54 29 0a 20 20 20 20 7c 7c 20 70 54 6f 2d  ALT).    || pTo-
9030: 3e 64 62 21 3d 70 46 72 6f 6d 2d 3e 64 62 20 29  >db!=pFrom->db )
9040: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
9050: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
9060: 20 20 69 66 28 20 70 46 72 6f 6d 2d 3e 6e 56 61    if( pFrom->nVa
9070: 72 21 3d 70 54 6f 2d 3e 6e 56 61 72 20 29 7b 0a  r!=pTo->nVar ){.
9080: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
9090: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73  E_ERROR;.  }.  s
90a0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
90b0: 65 72 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65  er(pTo->db->mute
90c0: 78 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72  x);.  for(i=0; r
90d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
90e0: 69 3c 70 46 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69  i<pFrom->nVar; i
90f0: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
9100: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 70 54 6f  VdbeMemMove(&pTo
9110: 2d 3e 61 56 61 72 5b 69 5d 2c 20 26 70 46 72 6f  ->aVar[i], &pFro
9120: 6d 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 7d  m->aVar[i]);.  }
9130: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
9140: 5f 6c 65 61 76 65 28 70 54 6f 2d 3e 64 62 2d 3e  _leave(pTo->db->
9150: 6d 75 74 65 78 29 3b 0a 20 20 61 73 73 65 72 74  mutex);.  assert
9160: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9170: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  || rc==SQLITE_NO
9180: 4d 45 4d 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  MEM );.  return 
9190: 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  rc;.}..#ifndef S
91a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
91b0: 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20 44 65 70 72  CATED./*.** Depr
91c0: 65 63 61 74 65 64 20 65 78 74 65 72 6e 61 6c 20  ecated external 
91d0: 69 6e 74 65 72 66 61 63 65 2e 20 20 49 6e 74 65  interface.  Inte
91e0: 72 6e 61 6c 2f 63 6f 72 65 20 53 51 4c 69 74 65  rnal/core SQLite
91f0: 20 63 6f 64 65 0a 2a 2a 20 73 68 6f 75 6c 64 20   code.** should 
9200: 63 61 6c 6c 20 73 71 6c 69 74 65 33 54 72 61 6e  call sqlite3Tran
9210: 73 66 65 72 42 69 6e 64 69 6e 67 73 2e 0a 2a 2f  sferBindings..*/
9220: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61  .int sqlite3_tra
9230: 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 73  nsfer_bindings(s
9240: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72  qlite3_stmt *pFr
9250: 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f  omStmt, sqlite3_
9260: 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a  stmt *pToStmt){.
9270: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
9280: 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
9290: 28 70 46 72 6f 6d 53 74 6d 74 2c 20 70 54 6f 53  (pFromStmt, pToS
92a0: 74 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  tmt);.}.#endif..
92b0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
92c0: 20 73 71 6c 69 74 65 33 2a 20 64 61 74 61 62 61   sqlite3* databa
92d0: 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 77 68 69  se handle to whi
92e0: 63 68 20 74 68 65 20 70 72 65 70 61 72 65 64 20  ch the prepared 
92f0: 73 74 61 74 65 6d 65 6e 74 20 67 69 76 65 6e 0a  statement given.
9300: 2a 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65  ** in the argume
9310: 6e 74 20 62 65 6c 6f 6e 67 73 2e 20 20 54 68 69  nt belongs.  Thi
9320: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 64 61  s is the same da
9330: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 68  tabase handle th
9340: 61 74 20 77 61 73 0a 2a 2a 20 74 68 65 20 66 69  at was.** the fi
9350: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
9360: 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70  the sqlite3_prep
9370: 61 72 65 28 29 20 74 68 61 74 20 77 61 73 20 75  are() that was u
9380: 73 65 64 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  sed to create.**
9390: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
93a0: 6e 20 74 68 65 20 66 69 72 73 74 20 70 6c 61 63  n the first plac
93b0: 65 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73  e..*/.sqlite3 *s
93c0: 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65  qlite3_db_handle
93d0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
93e0: 53 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20  Stmt){.  return 
93f0: 70 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a 29  pStmt ? ((Vdbe*)
9400: 70 53 74 6d 74 29 2d 3e 64 62 20 3a 20 30 3b 0a  pStmt)->db : 0;.
9410: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
9420: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
9430: 20 6e 65 78 74 20 70 72 65 70 61 72 65 64 20 73   next prepared s
9440: 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70  tatement after p
9450: 53 74 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a  Stmt associated.
9460: 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61 73 65  ** with database
9470: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e   connection pDb.
9480: 20 20 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55    If pStmt is NU
9490: 4c 4c 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66  LL, return the f
94a0: 69 72 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64  irst.** prepared
94b0: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74   statement for t
94c0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
94d0: 65 63 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20  ection.  Return 
94e0: 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a  NULL if there.**
94f0: 20 61 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f   are no more..*/
9500: 0a 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  .sqlite3_stmt *s
9510: 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74  qlite3_next_stmt
9520: 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73  (sqlite3 *pDb, s
9530: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9540: 6d 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  mt){.  sqlite3_s
9550: 74 6d 74 20 2a 70 4e 65 78 74 3b 0a 20 20 73 71  tmt *pNext;.  sq
9560: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
9570: 72 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  r(pDb->mutex);. 
9580: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
9590: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
95a0: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 70 44 62 2d  lite3_stmt*)pDb-
95b0: 3e 70 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 7b  >pVdbe;.  }else{
95c0: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
95d0: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 28 28 56 64  lite3_stmt*)((Vd
95e0: 62 65 2a 29 70 53 74 6d 74 29 2d 3e 70 4e 65 78  be*)pStmt)->pNex
95f0: 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
9600: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 44 62  _mutex_leave(pDb
9610: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
9620: 72 6e 20 70 4e 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a  rn pNext;.}../*.
9630: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 76 61  ** Return the va
9640: 6c 75 65 20 6f 66 20 61 20 73 74 61 74 75 73 20  lue of a status 
9650: 63 6f 75 6e 74 65 72 20 66 6f 72 20 61 20 70 72  counter for a pr
9660: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
9670: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
9680: 73 74 6d 74 5f 73 74 61 74 75 73 28 73 71 6c 69  stmt_status(sqli
9690: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
96a0: 20 69 6e 74 20 6f 70 2c 20 69 6e 74 20 72 65 73   int op, int res
96b0: 65 74 46 6c 61 67 29 7b 0a 20 20 56 64 62 65 20  etFlag){.  Vdbe 
96c0: 2a 70 56 64 62 65 20 3d 20 28 56 64 62 65 2a 29  *pVdbe = (Vdbe*)
96d0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 20 3d  pStmt;.  int v =
96e0: 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74 65 72   pVdbe->aCounter
96f0: 5b 6f 70 2d 31 5d 3b 0a 20 20 69 66 28 20 72 65  [op-1];.  if( re
9700: 73 65 74 46 6c 61 67 20 29 20 70 56 64 62 65 2d  setFlag ) pVdbe-
9710: 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 2d 31 5d 20  >aCounter[op-1] 
9720: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 76 3b  = 0;.  return v;
9730: 0a 7d 0a                                         .}.