/ Hex Artifact Content
Login

Artifact 9cf3207a58e484c74c60d61ac037c1cad8aa5b65:


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 33 33 20  beapi.c,v 1.133 
01e0: 32 30 30 38 2f 30 36 2f 31 38 20 31 37 3a 30 39  2008/06/18 17:09
01f0: 3a 31 30 20 64 61 6e 69 65 6c 6b 31 39 37 37 20  :10 danielk1977 
0200: 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Exp $.*/.#includ
0210: 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a  e "sqliteInt.h".
0220: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 49 6e  #include "vdbeIn
0230: 74 2e 68 22 0a 0a 23 69 66 64 65 66 20 53 51 4c  t.h"..#ifdef SQL
0240: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
0250: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 2f 2a 0a  Y_MANAGEMENT./*.
0260: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
0270: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
0280: 69 6e 73 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ins pointers to 
0290: 74 68 65 20 65 6e 64 20 70 6f 69 6e 74 73 20 6f  the end points o
02a0: 66 20 61 0a 2a 2a 20 64 6f 75 62 6c 79 2d 6c 69  f a.** doubly-li
02b0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
02c0: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
02d0: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6d 61  atements that ma
02e0: 79 20 62 65 20 68 6f 6c 64 69 6e 67 0a 2a 2a 20  y be holding.** 
02f0: 62 75 66 66 65 72 73 20 65 6c 69 67 69 62 6c 65  buffers eligible
0300: 20 66 6f 72 20 72 65 6c 65 61 73 65 20 77 68 65   for release whe
0310: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  n the sqlite3_re
0320: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 69  lease_memory() i
0330: 6e 74 65 72 66 61 63 65 20 69 73 0a 2a 2a 20 69  nterface is.** i
0340: 6e 76 6f 6b 65 64 2e 20 41 63 63 65 73 73 20 74  nvoked. Access t
0350: 6f 20 74 68 69 73 20 6c 69 73 74 20 69 73 20 70  o this list is p
0360: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
0370: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41  SQLITE_MUTEX_STA
0380: 54 49 43 5f 4c 52 55 32 0a 2a 2a 20 6d 75 74 65  TIC_LRU2.** mute
0390: 78 2e 0a 2a 2a 0a 2a 2a 20 53 74 61 74 65 6d 65  x..**.** Stateme
03a0: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
03b0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73   the end of this
03c0: 20 6c 69 73 74 20 77 68 65 6e 20 73 71 6c 69 74   list when sqlit
03d0: 65 33 5f 72 65 73 65 74 28 29 20 69 73 0a 2a 2a  e3_reset() is.**
03e0: 20 63 61 6c 6c 65 64 2e 20 54 68 65 79 20 61 72   called. They ar
03f0: 65 20 72 65 6d 6f 76 65 64 20 65 69 74 68 65 72  e removed either
0400: 20 77 68 65 6e 20 73 71 6c 69 74 65 33 5f 73 74   when sqlite3_st
0410: 65 70 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  ep() or sqlite3_
0420: 66 69 6e 61 6c 69 7a 65 28 29 0a 2a 2a 20 69 73  finalize().** is
0430: 20 63 61 6c 6c 65 64 2e 20 57 68 65 6e 20 73 74   called. When st
0440: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61 64 64  atements are add
0450: 65 64 20 74 6f 20 74 68 69 73 20 6c 69 73 74 2c  ed to this list,
0460: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
0470: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 61 72 72  .** register arr
0480: 61 79 20 28 70 2d 3e 61 4d 65 6d 5b 31 2e 2e 70  ay (p->aMem[1..p
0490: 2d 3e 6e 4d 65 6d 5d 29 20 6d 61 79 20 63 6f 6e  ->nMem]) may con
04a0: 74 61 69 6e 20 64 79 6e 61 6d 69 63 20 62 75 66  tain dynamic buf
04b0: 66 65 72 73 20 74 68 61 74 0a 2a 2a 20 63 61 6e  fers that.** can
04c0: 20 62 65 20 66 72 65 65 64 20 75 73 69 6e 67 20   be freed using 
04d0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 6c 65 61  sqlite3VdbeRelea
04e0: 73 65 4d 65 6d 6f 72 79 28 29 2e 0a 2a 2a 0a 2a  seMemory()..**.*
04f0: 2a 20 57 68 65 6e 20 73 74 61 74 65 6d 65 6e 74  * When statement
0500: 73 20 61 72 65 20 61 64 64 65 64 20 6f 72 20 72  s are added or r
0510: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 69 73  emoved from this
0520: 20 6c 69 73 74 2c 20 74 68 65 20 6d 75 74 65 78   list, the mutex
0530: 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77  .** associated w
0540: 69 74 68 20 74 68 65 20 56 64 62 65 20 62 65 69  ith the Vdbe bei
0550: 6e 67 20 61 64 64 65 64 20 6f 72 20 72 65 6d 6f  ng added or remo
0560: 76 65 64 20 28 56 64 62 65 2e 64 62 2d 3e 6d 75  ved (Vdbe.db->mu
0570: 74 65 78 29 20 69 73 0a 2a 2a 20 61 6c 72 65 61  tex) is.** alrea
0580: 64 79 20 68 65 6c 64 2e 20 54 68 65 20 4c 52 55  dy held. The LRU
0590: 32 20 6d 75 74 65 78 20 69 73 20 74 68 65 6e 20  2 mutex is then 
05a0: 6f 62 74 61 69 6e 65 64 2c 20 62 6c 6f 63 6b 69  obtained, blocki
05b0: 6e 67 20 69 66 20 6e 65 63 65 73 73 61 72 79 2c  ng if necessary,
05c0: 0a 2a 2a 20 74 68 65 20 6c 69 6e 6b 65 64 2d 6c  .** the linked-l
05d0: 69 73 74 20 70 6f 69 6e 74 65 72 73 20 6d 61 6e  ist pointers man
05e0: 69 70 75 6c 61 74 65 64 20 61 6e 64 20 74 68 65  ipulated and the
05f0: 20 4c 52 55 32 20 6d 75 74 65 78 20 72 65 6c 69   LRU2 mutex reli
0600: 6e 71 75 69 73 68 65 64 2e 0a 2a 2f 0a 73 74 72  nquished..*/.str
0610: 75 63 74 20 53 74 61 74 65 6d 65 6e 74 4c 72 75  uct StatementLru
0620: 4c 69 73 74 20 7b 0a 20 20 56 64 62 65 20 2a 70  List {.  Vdbe *p
0630: 46 69 72 73 74 3b 0a 20 20 56 64 62 65 20 2a 70  First;.  Vdbe *p
0640: 4c 61 73 74 3b 0a 7d 3b 0a 73 74 61 74 69 63 20  Last;.};.static 
0650: 73 74 72 75 63 74 20 53 74 61 74 65 6d 65 6e 74  struct Statement
0660: 4c 72 75 4c 69 73 74 20 73 71 6c 69 74 65 33 4c  LruList sqlite3L
0670: 72 75 53 74 61 74 65 6d 65 6e 74 73 3b 0a 0a 2f  ruStatements;../
0680: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 61 74 20  *.** Check that 
0690: 74 68 65 20 6c 69 73 74 20 6c 6f 6f 6b 73 20 74  the list looks t
06a0: 6f 20 62 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  o be internally 
06b0: 63 6f 6e 73 69 73 74 65 6e 74 2e 20 54 68 69 73  consistent. This
06c0: 20 69 73 20 75 73 65 64 0a 2a 2a 20 61 73 20 70   is used.** as p
06d0: 61 72 74 20 6f 66 20 61 6e 20 61 73 73 65 72 74  art of an assert
06e0: 28 29 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20  () statement as 
06f0: 66 6f 6c 6c 6f 77 73 3a 0a 2a 2a 0a 2a 2a 20 20  follows:.**.**  
0700: 20 61 73 73 65 72 74 28 20 73 74 6d 74 4c 72 75   assert( stmtLru
0710: 43 68 65 63 6b 28 29 20 29 3b 0a 2a 2f 0a 23 69  Check() );.*/.#i
0720: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 73 74 61  fndef NDEBUG.sta
0730: 74 69 63 20 69 6e 74 20 73 74 6d 74 4c 72 75 43  tic int stmtLruC
0740: 68 65 63 6b 28 29 7b 0a 20 20 56 64 62 65 20 2a  heck(){.  Vdbe *
0750: 70 3b 0a 20 20 66 6f 72 28 70 3d 73 71 6c 69 74  p;.  for(p=sqlit
0760: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0770: 70 46 69 72 73 74 3b 20 70 3b 20 70 3d 70 2d 3e  pFirst; p; p=p->
0780: 70 4c 72 75 4e 65 78 74 29 7b 0a 20 20 20 20 61  pLruNext){.    a
0790: 73 73 65 72 74 28 70 2d 3e 70 4c 72 75 4e 65 78  ssert(p->pLruNex
07a0: 74 20 7c 7c 20 70 3d 3d 73 71 6c 69 74 65 33 4c  t || p==sqlite3L
07b0: 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 4c 61  ruStatements.pLa
07c0: 73 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  st);.    assert(
07d0: 21 70 2d 3e 70 4c 72 75 4e 65 78 74 20 7c 7c 20  !p->pLruNext || 
07e0: 70 2d 3e 70 4c 72 75 4e 65 78 74 2d 3e 70 4c 72  p->pLruNext->pLr
07f0: 75 50 72 65 76 3d 3d 70 29 3b 0a 20 20 20 20 61  uPrev==p);.    a
0800: 73 73 65 72 74 28 70 2d 3e 70 4c 72 75 50 72 65  ssert(p->pLruPre
0810: 76 20 7c 7c 20 70 3d 3d 73 71 6c 69 74 65 33 4c  v || p==sqlite3L
0820: 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 46 69  ruStatements.pFi
0830: 72 73 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74  rst);.    assert
0840: 28 21 70 2d 3e 70 4c 72 75 50 72 65 76 20 7c 7c  (!p->pLruPrev ||
0850: 20 70 2d 3e 70 4c 72 75 50 72 65 76 2d 3e 70 4c   p->pLruPrev->pL
0860: 72 75 4e 65 78 74 3d 3d 70 29 3b 0a 20 20 7d 0a  ruNext==p);.  }.
0870: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
0880: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 20  ndif../*.** Add 
0890: 76 64 62 65 20 70 20 74 6f 20 74 68 65 20 65 6e  vdbe p to the en
08a0: 64 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  d of the stateme
08b0: 6e 74 20 6c 72 75 20 6c 69 73 74 2e 20 49 74 20  nt lru list. It 
08c0: 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 0a  is assumed that.
08d0: 2a 2a 20 70 20 69 73 20 6e 6f 74 20 61 6c 72 65  ** p is not alre
08e0: 61 64 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  ady part of the 
08f0: 6c 69 73 74 20 77 68 65 6e 20 74 68 69 73 20 69  list when this i
0900: 73 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 6c 72  s called. The lr
0910: 75 20 6c 69 73 74 0a 2a 2a 20 69 73 20 70 72 6f  u list.** is pro
0920: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 51  tected by the SQ
0930: 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49  LITE_MUTEX_STATI
0940: 43 5f 4c 52 55 20 6d 75 74 65 78 2e 0a 2a 2f 0a  C_LRU mutex..*/.
0950: 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 6d 74  static void stmt
0960: 4c 72 75 41 64 64 28 56 64 62 65 20 2a 70 29 7b  LruAdd(Vdbe *p){
0970: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
0980: 5f 65 6e 74 65 72 28 73 71 6c 69 74 65 33 4d 75  _enter(sqlite3Mu
0990: 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f  texAlloc(SQLITE_
09a0: 4d 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55  MUTEX_STATIC_LRU
09b0: 32 29 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 70  2));..  if( p->p
09c0: 4c 72 75 50 72 65 76 20 7c 7c 20 70 2d 3e 70 4c  LruPrev || p->pL
09d0: 72 75 4e 65 78 74 20 7c 7c 20 73 71 6c 69 74 65  ruNext || sqlite
09e0: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
09f0: 46 69 72 73 74 3d 3d 70 20 29 7b 0a 20 20 20 20  First==p ){.    
0a00: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
0a10: 61 76 65 28 73 71 6c 69 74 65 33 4d 75 74 65 78  ave(sqlite3Mutex
0a20: 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54  Alloc(SQLITE_MUT
0a30: 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29  EX_STATIC_LRU2))
0a40: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
0a50: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 73 74 6d  }..  assert( stm
0a60: 74 4c 72 75 43 68 65 63 6b 28 29 20 29 3b 0a 0a  tLruCheck() );..
0a70: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 4c 72    if( !sqlite3Lr
0a80: 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 46 69 72  uStatements.pFir
0a90: 73 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  st ){.    assert
0aa0: 28 20 21 73 71 6c 69 74 65 33 4c 72 75 53 74 61  ( !sqlite3LruSta
0ab0: 74 65 6d 65 6e 74 73 2e 70 4c 61 73 74 20 29 3b  tements.pLast );
0ac0: 0a 20 20 20 20 73 71 6c 69 74 65 33 4c 72 75 53  .    sqlite3LruS
0ad0: 74 61 74 65 6d 65 6e 74 73 2e 70 46 69 72 73 74  tatements.pFirst
0ae0: 20 3d 20 70 3b 0a 20 20 20 20 73 71 6c 69 74 65   = p;.    sqlite
0af0: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
0b00: 4c 61 73 74 20 3d 20 70 3b 0a 20 20 7d 65 6c 73  Last = p;.  }els
0b10: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  e{.    assert( !
0b20: 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d  sqlite3LruStatem
0b30: 65 6e 74 73 2e 70 4c 61 73 74 2d 3e 70 4c 72 75  ents.pLast->pLru
0b40: 4e 65 78 74 20 29 3b 0a 20 20 20 20 70 2d 3e 70  Next );.    p->p
0b50: 4c 72 75 50 72 65 76 20 3d 20 73 71 6c 69 74 65  LruPrev = sqlite
0b60: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
0b70: 4c 61 73 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  Last;.    sqlite
0b80: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
0b90: 4c 61 73 74 2d 3e 70 4c 72 75 4e 65 78 74 20 3d  Last->pLruNext =
0ba0: 20 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4c   p;.    sqlite3L
0bb0: 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 4c 61  ruStatements.pLa
0bc0: 73 74 20 3d 20 70 3b 0a 20 20 7d 0a 0a 20 20 61  st = p;.  }..  a
0bd0: 73 73 65 72 74 28 20 73 74 6d 74 4c 72 75 43 68  ssert( stmtLruCh
0be0: 65 63 6b 28 29 20 29 3b 0a 0a 20 20 73 71 6c 69  eck() );..  sqli
0bf0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
0c00: 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
0c10: 63 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53  c(SQLITE_MUTEX_S
0c20: 54 41 54 49 43 5f 4c 52 55 32 29 29 3b 0a 7d 0a  TATIC_LRU2));.}.
0c30: 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
0c40: 74 68 65 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  the SQLITE_MUTEX
0c50: 5f 53 54 41 54 49 43 5f 4c 52 55 32 20 6d 75 74  _STATIC_LRU2 mut
0c60: 65 78 74 20 69 73 20 61 6c 72 65 61 64 79 20 68  ext is already h
0c70: 65 6c 64 2c 20 72 65 6d 6f 76 65 0a 2a 2a 20 73  eld, remove.** s
0c80: 74 61 74 65 6d 65 6e 74 20 70 20 66 72 6f 6d 20  tatement p from 
0c90: 74 68 65 20 6c 65 61 73 74 2d 72 65 63 65 6e 74  the least-recent
0ca0: 6c 79 2d 75 73 65 64 20 73 74 61 74 65 6d 65 6e  ly-used statemen
0cb0: 74 20 6c 69 73 74 2e 20 49 66 20 74 68 65 20 0a  t list. If the .
0cc0: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ** statement is 
0cd0: 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70 61  not currently pa
0ce0: 72 74 20 6f 66 20 74 68 65 20 6c 69 73 74 2c 20  rt of the list, 
0cf0: 74 68 69 73 20 63 61 6c 6c 20 69 73 20 61 20 6e  this call is a n
0d00: 6f 2d 6f 70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  o-op..*/.static 
0d10: 76 6f 69 64 20 73 74 6d 74 4c 72 75 52 65 6d 6f  void stmtLruRemo
0d20: 76 65 4e 6f 6d 75 74 65 78 28 56 64 62 65 20 2a  veNomutex(Vdbe *
0d30: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 70 4c 72  p){.  if( p->pLr
0d40: 75 50 72 65 76 20 7c 7c 20 70 2d 3e 70 4c 72 75  uPrev || p->pLru
0d50: 4e 65 78 74 20 7c 7c 20 70 3d 3d 73 71 6c 69 74  Next || p==sqlit
0d60: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0d70: 70 46 69 72 73 74 20 29 7b 0a 20 20 20 20 61 73  pFirst ){.    as
0d80: 73 65 72 74 28 20 73 74 6d 74 4c 72 75 43 68 65  sert( stmtLruChe
0d90: 63 6b 28 29 20 29 3b 0a 20 20 20 20 69 66 28 20  ck() );.    if( 
0da0: 70 2d 3e 70 4c 72 75 4e 65 78 74 20 29 7b 0a 20  p->pLruNext ){. 
0db0: 20 20 20 20 20 70 2d 3e 70 4c 72 75 4e 65 78 74       p->pLruNext
0dc0: 2d 3e 70 4c 72 75 50 72 65 76 20 3d 20 70 2d 3e  ->pLruPrev = p->
0dd0: 70 4c 72 75 50 72 65 76 3b 0a 20 20 20 20 7d 65  pLruPrev;.    }e
0de0: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
0df0: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0e00: 70 4c 61 73 74 20 3d 20 70 2d 3e 70 4c 72 75 50  pLast = p->pLruP
0e10: 72 65 76 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  rev;.    }.    i
0e20: 66 28 20 70 2d 3e 70 4c 72 75 50 72 65 76 20 29  f( p->pLruPrev )
0e30: 7b 0a 20 20 20 20 20 20 70 2d 3e 70 4c 72 75 50  {.      p->pLruP
0e40: 72 65 76 2d 3e 70 4c 72 75 4e 65 78 74 20 3d 20  rev->pLruNext = 
0e50: 70 2d 3e 70 4c 72 75 4e 65 78 74 3b 0a 20 20 20  p->pLruNext;.   
0e60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
0e70: 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e  lite3LruStatemen
0e80: 74 73 2e 70 46 69 72 73 74 20 3d 20 70 2d 3e 70  ts.pFirst = p->p
0e90: 4c 72 75 4e 65 78 74 3b 0a 20 20 20 20 7d 0a 20  LruNext;.    }. 
0ea0: 20 20 20 70 2d 3e 70 4c 72 75 4e 65 78 74 20 3d     p->pLruNext =
0eb0: 20 30 3b 0a 20 20 20 20 70 2d 3e 70 4c 72 75 50   0;.    p->pLruP
0ec0: 72 65 76 20 3d 20 30 3b 0a 20 20 20 20 61 73 73  rev = 0;.    ass
0ed0: 65 72 74 28 20 73 74 6d 74 4c 72 75 43 68 65 63  ert( stmtLruChec
0ee0: 6b 28 29 20 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  k() );.  }.}../*
0ef0: 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65  .** Assuming the
0f00: 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54   SQLITE_MUTEX_ST
0f10: 41 54 49 43 5f 4c 52 55 32 20 6d 75 74 65 78 74  ATIC_LRU2 mutext
0f20: 20 69 73 20 6e 6f 74 20 68 65 6c 64 2c 20 72 65   is not held, re
0f30: 6d 6f 76 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  move.** statemen
0f40: 74 20 70 20 66 72 6f 6d 20 74 68 65 20 6c 65 61  t p from the lea
0f50: 73 74 2d 72 65 63 65 6e 74 6c 79 2d 75 73 65 64  st-recently-used
0f60: 20 73 74 61 74 65 6d 65 6e 74 20 6c 69 73 74 2e   statement list.
0f70: 20 49 66 20 74 68 65 20 0a 2a 2a 20 73 74 61 74   If the .** stat
0f80: 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 63 75 72  ement is not cur
0f90: 72 65 6e 74 6c 79 20 70 61 72 74 20 6f 66 20 74  rently part of t
0fa0: 68 65 20 6c 69 73 74 2c 20 74 68 69 73 20 63 61  he list, this ca
0fb0: 6c 6c 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ll is a no-op..*
0fc0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74  /.static void st
0fd0: 6d 74 4c 72 75 52 65 6d 6f 76 65 28 56 64 62 65  mtLruRemove(Vdbe
0fe0: 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f   *p){.  sqlite3_
0ff0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 73 71 6c 69  mutex_enter(sqli
1000: 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51  te3MutexAlloc(SQ
1010: 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49  LITE_MUTEX_STATI
1020: 43 5f 4c 52 55 32 29 29 3b 0a 20 20 73 74 6d 74  C_LRU2));.  stmt
1030: 4c 72 75 52 65 6d 6f 76 65 4e 6f 6d 75 74 65 78  LruRemoveNomutex
1040: 28 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  (p);.  sqlite3_m
1050: 75 74 65 78 5f 6c 65 61 76 65 28 73 71 6c 69 74  utex_leave(sqlit
1060: 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c  e3MutexAlloc(SQL
1070: 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49 43  ITE_MUTEX_STATIC
1080: 5f 4c 52 55 32 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  _LRU2));.}../*.*
1090: 2a 20 54 72 79 20 74 6f 20 72 65 6c 65 61 73 65  * Try to release
10a0: 20 6e 20 62 79 74 65 73 20 6f 66 20 6d 65 6d 6f   n bytes of memo
10b0: 72 79 20 62 79 20 66 72 65 65 69 6e 67 20 62 75  ry by freeing bu
10c0: 66 66 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ffers associated
10d0: 20 0a 2a 2a 20 77 69 74 68 20 74 68 65 20 6d 65   .** with the me
10e0: 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 6f  mory registers o
10f0: 66 20 63 75 72 72 65 6e 74 6c 79 20 75 6e 75 73  f currently unus
1100: 65 64 20 76 64 62 65 73 2e 0a 2a 2f 0a 69 6e 74  ed vdbes..*/.int
1110: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 6c 65   sqlite3VdbeRele
1120: 61 73 65 4d 65 6d 6f 72 79 28 69 6e 74 20 6e 29  aseMemory(int n)
1130: 7b 0a 20 20 56 64 62 65 20 2a 70 3b 0a 20 20 56  {.  Vdbe *p;.  V
1140: 64 62 65 20 2a 70 4e 65 78 74 3b 0a 20 20 69 6e  dbe *pNext;.  in
1150: 74 20 6e 46 72 65 65 20 3d 20 30 3b 0a 0a 20 20  t nFree = 0;..  
1160: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
1170: 74 65 72 28 73 71 6c 69 74 65 33 4d 75 74 65 78  ter(sqlite3Mutex
1180: 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54  Alloc(SQLITE_MUT
1190: 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29  EX_STATIC_LRU2))
11a0: 3b 0a 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65  ;.  for(p=sqlite
11b0: 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70  3LruStatements.p
11c0: 46 69 72 73 74 3b 20 70 20 26 26 20 6e 46 72 65  First; p && nFre
11d0: 65 3c 6e 3b 20 70 3d 70 4e 65 78 74 29 7b 0a 20  e<n; p=pNext){. 
11e0: 20 20 20 70 4e 65 78 74 20 3d 20 70 2d 3e 70 4c     pNext = p->pL
11f0: 72 75 4e 65 78 74 3b 0a 0a 20 20 20 20 2f 2a 20  ruNext;..    /* 
1200: 46 6f 72 20 65 61 63 68 20 73 74 61 74 65 6d 65  For each stateme
1210: 6e 74 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  nt handle in the
1220: 20 6c 72 75 20 6c 69 73 74 2c 20 61 74 74 65 6d   lru list, attem
1230: 70 74 20 74 6f 20 6f 62 74 61 69 6e 20 74 68 65  pt to obtain the
1240: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
1250: 65 64 20 64 61 74 61 62 61 73 65 20 6d 75 74 65  ed database mute
1260: 78 2e 20 49 66 20 69 74 20 63 61 6e 6e 6f 74 20  x. If it cannot 
1270: 62 65 20 6f 62 74 61 69 6e 65 64 2c 20 63 6f 6e  be obtained, con
1280: 74 69 6e 75 65 0a 20 20 20 20 2a 2a 20 74 6f 20  tinue.    ** to 
1290: 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d 65  the next stateme
12a0: 6e 74 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  nt handle. It is
12b0: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
12c0: 20 62 6c 6f 63 6b 20 6f 6e 0a 20 20 20 20 2a 2a   block on.    **
12d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
12e0: 74 65 78 20 2d 20 74 68 61 74 20 63 6f 75 6c 64  tex - that could
12f0: 20 63 61 75 73 65 20 64 65 61 64 6c 6f 63 6b 2e   cause deadlock.
1300: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1310: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74  SQLITE_OK==sqlit
1320: 65 33 5f 6d 75 74 65 78 5f 74 72 79 28 70 2d 3e  e3_mutex_try(p->
1330: 64 62 2d 3e 6d 75 74 65 78 29 20 29 7b 0a 20 20  db->mutex) ){.  
1340: 20 20 20 20 6e 46 72 65 65 20 2b 3d 20 73 71 6c      nFree += sql
1350: 69 74 65 33 56 64 62 65 52 65 6c 65 61 73 65 42  ite3VdbeReleaseB
1360: 75 66 66 65 72 73 28 70 29 3b 0a 20 20 20 20 20  uffers(p);.     
1370: 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76 65 4e 6f   stmtLruRemoveNo
1380: 6d 75 74 65 78 28 70 29 3b 0a 20 20 20 20 20 20  mutex(p);.      
1390: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
13a0: 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(p->db->mutex
13b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
13c0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
13d0: 76 65 28 73 71 6c 69 74 65 33 4d 75 74 65 78 41  ve(sqlite3MutexA
13e0: 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54 45  lloc(SQLITE_MUTE
13f0: 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29 3b  X_STATIC_LRU2));
1400: 0a 0a 20 20 72 65 74 75 72 6e 20 6e 46 72 65 65  ..  return nFree
1410: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 20  ;.}../*.** Call 
1420: 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
1430: 28 29 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d  () on the statem
1440: 65 6e 74 2e 20 52 65 6d 6f 76 65 20 69 74 20 66  ent. Remove it f
1450: 72 6f 6d 20 74 68 65 0a 2a 2a 20 6c 72 75 20 6c  rom the.** lru l
1460: 69 73 74 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  ist before doing
1470: 20 73 6f 2c 20 61 73 20 52 65 70 72 65 70 61 72   so, as Reprepar
1480: 65 28 29 20 77 69 6c 6c 20 66 72 65 65 20 61 6c  e() will free al
1490: 6c 20 74 68 65 0a 2a 2a 20 6d 65 6d 6f 72 79 20  l the.** memory 
14a0: 72 65 67 69 73 74 65 72 20 62 75 66 66 65 72 73  register buffers
14b0: 20 61 6e 79 77 61 79 2e 0a 2a 2f 0a 69 6e 74 20   anyway..*/.int 
14c0: 76 64 62 65 52 65 70 72 65 70 61 72 65 28 56 64  vdbeReprepare(Vd
14d0: 62 65 20 2a 70 29 7b 0a 20 20 73 74 6d 74 4c 72  be *p){.  stmtLr
14e0: 75 52 65 6d 6f 76 65 28 70 29 3b 0a 20 20 72 65  uRemove(p);.  re
14f0: 74 75 72 6e 20 73 71 6c 69 74 65 33 52 65 70 72  turn sqlite3Repr
1500: 65 70 61 72 65 28 70 29 3b 0a 7d 0a 0a 23 65 6c  epare(p);.}..#el
1510: 73 65 20 20 20 20 20 20 20 2f 2a 20 21 53 51 4c  se       /* !SQL
1520: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
1530: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 20 2a 2f 0a  Y_MANAGEMENT */.
1540: 20 20 23 64 65 66 69 6e 65 20 73 74 6d 74 4c 72    #define stmtLr
1550: 75 52 65 6d 6f 76 65 28 78 29 0a 20 20 23 64 65  uRemove(x).  #de
1560: 66 69 6e 65 20 73 74 6d 74 4c 72 75 41 64 64 28  fine stmtLruAdd(
1570: 78 29 0a 20 20 23 64 65 66 69 6e 65 20 76 64 62  x).  #define vdb
1580: 65 52 65 70 72 65 70 61 72 65 28 78 29 20 73 71  eReprepare(x) sq
1590: 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 78  lite3Reprepare(x
15a0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
15b0: 20 52 65 74 75 72 6e 20 54 52 55 45 20 28 6e 6f   Return TRUE (no
15c0: 6e 2d 7a 65 72 6f 29 20 6f 66 20 74 68 65 20 73  n-zero) of the s
15d0: 74 61 74 65 6d 65 6e 74 20 73 75 70 70 6c 69 65  tatement supplie
15e0: 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74  d as an argument
15f0: 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20   needs.** to be 
1600: 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41 20 73  recompiled.  A s
1610: 74 61 74 65 6d 65 6e 74 20 6e 65 65 64 73 20 74  tatement needs t
1620: 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65 64 20  o be recompiled 
1630: 77 68 65 6e 65 76 65 72 20 74 68 65 0a 2a 2a 20  whenever the.** 
1640: 65 78 65 63 75 74 69 6f 6e 20 65 6e 76 69 72 6f  execution enviro
1650: 6e 6d 65 6e 74 20 63 68 61 6e 67 65 73 20 69 6e  nment changes in
1660: 20 61 20 77 61 79 20 74 68 61 74 20 77 6f 75 6c   a way that woul
1670: 64 20 61 6c 74 65 72 20 74 68 65 20 70 72 6f 67  d alter the prog
1680: 72 61 6d 0a 2a 2a 20 74 68 61 74 20 73 71 6c 69  ram.** that sqli
1690: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 67 65  te3_prepare() ge
16a0: 6e 65 72 61 74 65 73 2e 20 20 46 6f 72 20 65 78  nerates.  For ex
16b0: 61 6d 70 6c 65 2c 20 69 66 20 6e 65 77 20 66 75  ample, if new fu
16c0: 6e 63 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 63 6f  nctions or.** co
16d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
16e0: 73 20 61 72 65 20 72 65 67 69 73 74 65 72 65 64  s are registered
16f0: 20 6f 72 20 69 66 20 61 6e 20 61 75 74 68 6f 72   or if an author
1700: 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73  izer function is
1710: 0a 2a 2a 20 61 64 64 65 64 20 6f 72 20 63 68 61  .** added or cha
1720: 6e 67 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  nged..*/.int sql
1730: 69 74 65 33 5f 65 78 70 69 72 65 64 28 73 71 6c  ite3_expired(sql
1740: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
1750: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
1760: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 72  Vdbe*)pStmt;.  r
1770: 65 74 75 72 6e 20 70 3d 3d 30 20 7c 7c 20 70 2d  eturn p==0 || p-
1780: 3e 65 78 70 69 72 65 64 3b 0a 7d 0a 0a 2f 2a 0a  >expired;.}../*.
1790: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
17a0: 20 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79   routine destroy
17b0: 73 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68  s a virtual mach
17c0: 69 6e 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ine that is crea
17d0: 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71  ted by.** the sq
17e0: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20  lite3_compile() 
17f0: 72 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74  routine. The int
1800: 65 67 65 72 20 72 65 74 75 72 6e 65 64 20 69 73  eger returned is
1810: 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73   an SQLITE_.** s
1820: 75 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63  uccess/failure c
1830: 6f 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ode that describ
1840: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
1850: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 76   executing the v
1860: 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
1870: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  e..**.** This ro
1880: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65  utine sets the e
1890: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74  rror code and st
18a0: 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
18b0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63  .** sqlite3_errc
18c0: 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65  ode(), sqlite3_e
18d0: 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69  rrmsg() and sqli
18e0: 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a  te3_errmsg16()..
18f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66  */.int sqlite3_f
1900: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
1910: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
1920: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53  int rc;.  if( pS
1930: 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  tmt==0 ){.    rc
1940: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
1950: 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 20  }else{.    Vdbe 
1960: 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *v = (Vdbe*)pStm
1970: 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
1980: 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 0a 20 20 20  E_MUTEX_NOOP.   
1990: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
19a0: 6d 75 74 65 78 20 3d 20 76 2d 3e 64 62 2d 3e 6d  mutex = v->db->m
19b0: 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 20  utex;.#endif.   
19c0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
19d0: 6e 74 65 72 28 6d 75 74 65 78 29 3b 0a 20 20 20  nter(mutex);.   
19e0: 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76 65 28 76   stmtLruRemove(v
19f0: 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1a00: 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28  te3VdbeFinalize(
1a10: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  v);.    sqlite3_
1a20: 6d 75 74 65 78 5f 6c 65 61 76 65 28 6d 75 74 65  mutex_leave(mute
1a30: 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  x);.  }.  return
1a40: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65   rc;.}../*.** Te
1a50: 72 6d 69 6e 61 74 65 20 74 68 65 20 63 75 72 72  rminate the curr
1a60: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  ent execution of
1a70: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1a80: 74 20 61 6e 64 20 72 65 73 65 74 20 69 74 0a 2a  t and reset it.*
1a90: 2a 20 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74  * back to its st
1aa0: 61 72 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20  arting state so 
1ab0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1ac0: 65 75 73 65 64 2e 20 41 20 73 75 63 63 65 73 73  eused. A success
1ad0: 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68   code from.** th
1ae0: 65 20 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f  e prior executio
1af0: 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  n is returned..*
1b00: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
1b10: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
1b20: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
1b30: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
1b40: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
1b50: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
1b60: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
1b70: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
1b80: 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  nt sqlite3_reset
1b90: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
1ba0: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Stmt){.  int rc;
1bb0: 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20  .  if( pStmt==0 
1bc0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1bd0: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
1be0: 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56      Vdbe *v = (V
1bf0: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 20 20  dbe*)pStmt;.    
1c00: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
1c10: 74 65 72 28 76 2d 3e 64 62 2d 3e 6d 75 74 65 78  ter(v->db->mutex
1c20: 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1c30: 74 65 33 56 64 62 65 52 65 73 65 74 28 76 2c 20  te3VdbeReset(v, 
1c40: 31 29 3b 0a 20 20 20 20 73 74 6d 74 4c 72 75 41  1);.    stmtLruA
1c50: 64 64 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  dd(v);.    sqlit
1c60: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
1c70: 76 2c 20 2d 31 2c 20 30 2c 20 30 2c 20 30 29 3b  v, -1, 0, 0, 0);
1c80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 72 63  .    assert( (rc
1c90: 20 26 20 28 76 2d 3e 64 62 2d 3e 65 72 72 4d 61   & (v->db->errMa
1ca0: 73 6b 29 29 3d 3d 72 63 20 29 3b 0a 20 20 20 20  sk))==rc );.    
1cb0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
1cc0: 61 76 65 28 76 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(v->db->mutex
1cd0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
1ce0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  rc;.}../*.** Set
1cf0: 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65 74   all the paramet
1d00: 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  ers in the compi
1d10: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
1d20: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e  t to NULL..*/.in
1d30: 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  t sqlite3_clear_
1d40: 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  bindings(sqlite3
1d50: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
1d60: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72 63   int i;.  int rc
1d70: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
1d80: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
1d90: 29 70 53 74 6d 74 3b 0a 23 69 66 6e 64 65 66 20  )pStmt;.#ifndef 
1da0: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
1db0: 50 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  P.  sqlite3_mute
1dc0: 78 20 2a 6d 75 74 65 78 20 3d 20 28 28 56 64 62  x *mutex = ((Vdb
1dd0: 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62 2d 3e 6d  e*)pStmt)->db->m
1de0: 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 73  utex;.#endif.  s
1df0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
1e00: 65 72 28 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72  er(mutex);.  for
1e10: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b  (i=0; i<p->nVar;
1e20: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
1e30: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
1e40: 28 26 70 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20  (&p->aVar[i]);. 
1e50: 20 20 20 70 2d 3e 61 56 61 72 5b 69 5d 2e 66 6c     p->aVar[i].fl
1e60: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
1e70: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
1e80: 74 65 78 5f 6c 65 61 76 65 28 6d 75 74 65 78 29  tex_leave(mutex)
1e90: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
1ea0: 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
1eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ec0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 20   sqlite3_value_ 
1ed0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ef0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1f00: 67 20 72 6f 75 74 69 6e 65 73 20 65 78 74 72 61  g routines extra
1f10: 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ct information f
1f20: 72 6f 6d 20 61 20 4d 65 6d 20 6f 72 20 73 71 6c  rom a Mem or sql
1f30: 69 74 65 33 5f 76 61 6c 75 65 0a 2a 2a 20 73 74  ite3_value.** st
1f40: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 63 6f 6e 73  ructure..*/.cons
1f50: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
1f60: 76 61 6c 75 65 5f 62 6c 6f 62 28 73 71 6c 69 74  value_blob(sqlit
1f70: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
1f80: 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d  .  Mem *p = (Mem
1f90: 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 2d  *)pVal;.  if( p-
1fa0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
1fb0: 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  ob|MEM_Str) ){. 
1fc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1fd0: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 29 3b 0a  mExpandBlob(p);.
1fe0: 20 20 20 20 70 2d 3e 66 6c 61 67 73 20 26 3d 20      p->flags &= 
1ff0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 20 20 70 2d  ~MEM_Str;.    p-
2000: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 42 6c  >flags |= MEM_Bl
2010: 6f 62 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70  ob;.    return p
2020: 2d 3e 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ->z;.  }else{.  
2030: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2040: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
2050: 29 3b 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c  );.  }.}.int sql
2060: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
2070: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2080: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
2090: 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
20a0: 73 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  s(pVal, SQLITE_U
20b0: 54 46 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  TF8);.}.int sqli
20c0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31  te3_value_bytes1
20d0: 36 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  6(sqlite3_value 
20e0: 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e  *pVal){.  return
20f0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2100: 65 73 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f  es(pVal, SQLITE_
2110: 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a  UTF16NATIVE);.}.
2120: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 76  double sqlite3_v
2130: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 73 71 6c 69  alue_double(sqli
2140: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
2150: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
2160: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
2170: 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69  (Mem*)pVal);.}.i
2180: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2190: 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  _int(sqlite3_val
21a0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
21b0: 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65 49  urn sqlite3VdbeI
21c0: 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56  ntValue((Mem*)pV
21d0: 61 6c 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69 6e  al);.}.sqlite_in
21e0: 74 36 34 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  t64 sqlite3_valu
21f0: 65 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f  e_int64(sqlite3_
2200: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
2210: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64  return sqlite3Vd
2220: 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a  beIntValue((Mem*
2230: 29 70 56 61 6c 29 3b 0a 7d 0a 63 6f 6e 73 74 20  )pVal);.}.const 
2240: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73  unsigned char *s
2250: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2260: 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t(sqlite3_value 
2270: 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e  *pVal){.  return
2280: 20 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64   (const unsigned
2290: 20 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 56   char *)sqlite3V
22a0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
22b0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23  QLITE_UTF8);.}.#
22c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22d0: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
22e0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c  oid *sqlite3_val
22f0: 75 65 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65  ue_text16(sqlite
2300: 33 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a  3_value* pVal){.
2310: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2320: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
2330: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
2340: 56 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69  VE);.}.const voi
2350: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
2360: 5f 74 65 78 74 31 36 62 65 28 73 71 6c 69 74 65  _text16be(sqlite
2370: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2380: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2390: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
23a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 29 3b  SQLITE_UTF16BE);
23b0: 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  .}.const void *s
23c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
23d0: 74 31 36 6c 65 28 73 71 6c 69 74 65 33 5f 76 61  t16le(sqlite3_va
23e0: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
23f0: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75  turn sqlite3Valu
2400: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
2410: 54 45 5f 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23  TE_UTF16LE);.}.#
2420: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2430: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e  OMIT_UTF16 */.in
2440: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
2450: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2460: 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue* pVal){.  ret
2470: 75 72 6e 20 70 56 61 6c 2d 3e 74 79 70 65 3b 0a  urn pVal->type;.
2480: 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
2490: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
24a0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
24b0: 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
24c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
24d0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
24e0: 6e 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  ng routines are 
24f0: 75 73 65 64 20 62 79 20 75 73 65 72 2d 64 65 66  used by user-def
2500: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  ined functions t
2510: 6f 20 73 70 65 63 69 66 79 0a 2a 2a 20 74 68 65  o specify.** the
2520: 20 66 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74   function result
2530: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2540: 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0a 20  3_result_blob(. 
2550: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2560: 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74   *pCtx, .  const
2570: 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74   void *z, .  int
2580: 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44   n, .  void (*xD
2590: 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20  el)(void *).){. 
25a0: 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
25b0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
25c0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
25d0: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
25e0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
25f0: 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78  eMemSetStr(&pCtx
2600: 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 30 2c 20 78 44  ->s, z, n, 0, xD
2610: 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  el);.}.void sqli
2620: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
2630: 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2640: 74 20 2a 70 43 74 78 2c 20 64 6f 75 62 6c 65 20  t *pCtx, double 
2650: 72 56 61 6c 29 7b 0a 20 20 61 73 73 65 72 74 28  rVal){.  assert(
2660: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2670: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
2680: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69  mutex) );.  sqli
2690: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75  te3VdbeMemSetDou
26a0: 62 6c 65 28 26 70 43 74 78 2d 3e 73 2c 20 72 56  ble(&pCtx->s, rV
26b0: 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  al);.}.void sqli
26c0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
26d0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
26e0: 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 63 68   *pCtx, const ch
26f0: 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20  ar *z, int n){. 
2700: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2710: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2720: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2730: 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
2740: 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  r = SQLITE_ERROR
2750: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2760: 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e  emSetStr(&pCtx->
2770: 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f  s, z, n, SQLITE_
2780: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 54 52 41  UTF8, SQLITE_TRA
2790: 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64  NSIENT);.}.#ifnd
27a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
27b0: 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69 74 65  TF16.void sqlite
27c0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
27d0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27e0: 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 76 6f   *pCtx, const vo
27f0: 69 64 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20  id *z, int n){. 
2800: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2810: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2820: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2830: 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
2840: 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  r = SQLITE_ERROR
2850: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2860: 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e  emSetStr(&pCtx->
2870: 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f  s, z, n, SQLITE_
2880: 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c  UTF16NATIVE, SQL
2890: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
28a0: 7d 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  }.#endif.void sq
28b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
28c0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
28d0: 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 56 61 6c   *pCtx, int iVal
28e0: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
28f0: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
2900: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
2910: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
2920: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2930: 70 43 74 78 2d 3e 73 2c 20 28 69 36 34 29 69 56  pCtx->s, (i64)iV
2940: 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  al);.}.void sqli
2950: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
2960: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2970: 20 2a 70 43 74 78 2c 20 69 36 34 20 69 56 61 6c   *pCtx, i64 iVal
2980: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
2990: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
29a0: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
29b0: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
29c0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
29d0: 70 43 74 78 2d 3e 73 2c 20 69 56 61 6c 29 3b 0a  pCtx->s, iVal);.
29e0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
29f0: 65 73 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69 74  esult_null(sqlit
2a00: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
2a10: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
2a20: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
2a30: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
2a40: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
2a50: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70  dbeMemSetNull(&p
2a60: 43 74 78 2d 3e 73 29 3b 0a 7d 0a 76 6f 69 64 20  Ctx->s);.}.void 
2a70: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
2a80: 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  ext(.  sqlite3_c
2a90: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
2aa0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2ab0: 0a 20 20 69 6e 74 20 6e 2c 0a 20 20 76 6f 69 64  .  int n,.  void
2ac0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29   (*xDel)(void *)
2ad0: 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  .){.  assert( sq
2ae0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
2af0: 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74  (pCtx->s.db->mut
2b00: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
2b10: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70  VdbeMemSetStr(&p
2b20: 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51  Ctx->s, z, n, SQ
2b30: 4c 49 54 45 5f 55 54 46 38 2c 20 78 44 65 6c 29  LITE_UTF8, xDel)
2b40: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
2b50: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f  TE_OMIT_UTF16.vo
2b60: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2b70: 74 5f 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69  t_text16(.  sqli
2b80: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
2b90: 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  x, .  const void
2ba0: 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a   *z, .  int n, .
2bb0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
2bc0: 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65  oid *).){.  asse
2bd0: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
2be0: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64  x_held(pCtx->s.d
2bf0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
2c00: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2c10: 53 74 72 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c  Str(&pCtx->s, z,
2c20: 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   n, SQLITE_UTF16
2c30: 4e 41 54 49 56 45 2c 20 78 44 65 6c 29 3b 0a 7d  NATIVE, xDel);.}
2c40: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
2c50: 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28 0a 20  sult_text16be(. 
2c60: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2c70: 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74   *pCtx, .  const
2c80: 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74   void *z, .  int
2c90: 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44   n, .  void (*xD
2ca0: 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20  el)(void *).){. 
2cb0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2cc0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2cd0: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2ce0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2cf0: 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e  emSetStr(&pCtx->
2d00: 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f  s, z, n, SQLITE_
2d10: 55 54 46 31 36 42 45 2c 20 78 44 65 6c 29 3b 0a  UTF16BE, xDel);.
2d20: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
2d30: 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28 0a  esult_text16le(.
2d40: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2d50: 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73  t *pCtx, .  cons
2d60: 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e  t void *z, .  in
2d70: 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  t n, .  void (*x
2d80: 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a  Del)(void *).){.
2d90: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2da0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
2db0: 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20  x->s.db->mutex) 
2dc0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2dd0: 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d  MemSetStr(&pCtx-
2de0: 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  >s, z, n, SQLITE
2df0: 5f 55 54 46 31 36 4c 45 2c 20 78 44 65 6c 29 3b  _UTF16LE, xDel);
2e00: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2e10: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
2e20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
2e30: 65 73 75 6c 74 5f 76 61 6c 75 65 28 73 71 6c 69  esult_value(sqli
2e40: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
2e50: 78 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  x, sqlite3_value
2e60: 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 61 73 73   *pValue){.  ass
2e70: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2e80: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
2e90: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2ea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
2eb0: 70 79 28 26 70 43 74 78 2d 3e 73 2c 20 70 56 61  py(&pCtx->s, pVa
2ec0: 6c 75 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  lue);.}.void sql
2ed0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f  ite3_result_zero
2ee0: 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f 6e  blob(sqlite3_con
2ef0: 74 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20  text *pCtx, int 
2f00: 6e 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  n){.  assert( sq
2f10: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
2f20: 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74  (pCtx->s.db->mut
2f30: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
2f40: 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c  VdbeMemSetZeroBl
2f50: 6f 62 28 26 70 43 74 78 2d 3e 73 2c 20 6e 29 3b  ob(&pCtx->s, n);
2f60: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
2f70: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64  result_error_cod
2f80: 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2f90: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 65 72 72  t *pCtx, int err
2fa0: 43 6f 64 65 29 7b 0a 20 20 70 43 74 78 2d 3e 69  Code){.  pCtx->i
2fb0: 73 45 72 72 6f 72 20 3d 20 65 72 72 43 6f 64 65  sError = errCode
2fc0: 3b 0a 7d 0a 0a 2f 2a 20 46 6f 72 63 65 20 61 6e  ;.}../* Force an
2fd0: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65   SQLITE_TOOBIG e
2fe0: 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71  rror. */.void sq
2ff0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
3000: 6f 72 5f 74 6f 6f 62 69 67 28 73 71 6c 69 74 65  or_toobig(sqlite
3010: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29  3_context *pCtx)
3020: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
3030: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
3040: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
3050: 29 20 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45  ) );.  pCtx->isE
3060: 72 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 54 4f  rror = SQLITE_TO
3070: 4f 42 49 47 3b 0a 20 20 73 71 6c 69 74 65 33 56  OBIG;.  sqlite3V
3080: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43  dbeMemSetStr(&pC
3090: 74 78 2d 3e 73 2c 20 22 73 74 72 69 6e 67 20 6f  tx->s, "string o
30a0: 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 2c  r blob too big",
30b0: 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20   -1, .          
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
30d0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
30e0: 5f 53 54 41 54 49 43 29 3b 0a 7d 0a 0a 2f 2a 20  _STATIC);.}../* 
30f0: 41 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  An SQLITE_NOMEM 
3100: 65 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73  error. */.void s
3110: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
3120: 72 6f 72 5f 6e 6f 6d 65 6d 28 73 71 6c 69 74 65  ror_nomem(sqlite
3130: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29  3_context *pCtx)
3140: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
3150: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
3160: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
3170: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
3180: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70 43  beMemSetNull(&pC
3190: 74 78 2d 3e 73 29 3b 0a 20 20 70 43 74 78 2d 3e  tx->s);.  pCtx->
31a0: 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45  isError = SQLITE
31b0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 43 74 78 2d 3e  _NOMEM;.  pCtx->
31c0: 73 2e 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  s.db->mallocFail
31d0: 65 64 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ed = 1;.}../*.**
31e0: 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 61   Execute the sta
31f0: 74 65 6d 65 6e 74 20 70 53 74 6d 74 2c 20 65 69  tement pStmt, ei
3200: 74 68 65 72 20 75 6e 74 69 6c 20 61 20 72 6f 77  ther until a row
3210: 20 6f 66 20 64 61 74 61 20 69 73 20 72 65 61 64   of data is read
3220: 79 2c 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d  y, the.** statem
3230: 65 6e 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  ent is completel
3240: 79 20 65 78 65 63 75 74 65 64 20 6f 72 20 61 6e  y executed or an
3250: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a   error occurs..*
3260: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
3270: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  e implements the
3280: 20 62 75 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67   bulk of the log
3290: 69 63 20 62 65 68 69 6e 64 20 74 68 65 20 73 71  ic behind the sq
32a0: 6c 69 74 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41  lite_step().** A
32b0: 50 49 2e 20 20 54 68 65 20 6f 6e 6c 79 20 74 68  PI.  The only th
32c0: 69 6e 67 20 6f 6d 69 74 74 65 64 20 69 73 20 74  ing omitted is t
32d0: 68 65 20 61 75 74 6f 6d 61 74 69 63 20 72 65 63  he automatic rec
32e0: 6f 6d 70 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20  ompile if a .** 
32f0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61  schema change ha
3300: 73 20 6f 63 63 75 72 72 65 64 2e 20 20 54 68 61  s occurred.  Tha
3310: 74 20 64 65 74 61 69 6c 20 69 73 20 68 61 6e 64  t detail is hand
3320: 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75  led by the.** ou
3330: 74 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ter sqlite3_step
3340: 28 29 20 77 72 61 70 70 65 72 20 70 72 6f 63 65  () wrapper proce
3350: 64 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  dure..*/.static 
3360: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 65 70 28  int sqlite3Step(
3370: 56 64 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69  Vdbe *p){.  sqli
3380: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
3390: 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 70 29 3b  c;..  assert(p);
33a0: 0a 20 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21  .  if( p->magic!
33b0: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
33c0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
33d0: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
33e0: 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
33f0: 61 74 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20  at malloc() has 
3400: 6e 6f 74 20 66 61 69 6c 65 64 20 2a 2f 0a 20 20  not failed */.  
3410: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 61 73  db = p->db;.  as
3420: 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
3430: 63 46 61 69 6c 65 64 20 29 3b 0a 0a 20 20 69 66  cFailed );..  if
3440: 28 20 70 2d 3e 61 62 6f 72 74 65 64 20 29 7b 0a  ( p->aborted ){.
3450: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3460: 45 5f 41 42 4f 52 54 3b 0a 20 20 7d 0a 20 20 69  E_ABORT;.  }.  i
3470: 66 28 20 70 2d 3e 70 63 3c 3d 30 20 26 26 20 70  f( p->pc<=0 && p
3480: 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
3490: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
34a0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 70  TE_OK ){.      p
34b0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43  ->rc = SQLITE_SC
34c0: 48 45 4d 41 3b 0a 20 20 20 20 7d 0a 20 20 20 20  HEMA;.    }.    
34d0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
34e0: 52 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  R;.    goto end_
34f0: 6f 66 5f 73 74 65 70 3b 0a 20 20 7d 0a 20 20 69  of_step;.  }.  i
3500: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
3510: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 70 2d  On(db) ){.    p-
3520: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53  >rc = SQLITE_MIS
3530: 55 53 45 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  USE;.    return 
3540: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
3550: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 30   }.  if( p->pc<0
3560: 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
3570: 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72  ere are no other
3580: 20 73 74 61 74 65 6d 65 6e 74 73 20 63 75 72 72   statements curr
3590: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 74  ently running, t
35a0: 68 65 6e 0a 20 20 20 20 2a 2a 20 72 65 73 65 74  hen.    ** reset
35b0: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 66   the interrupt f
35c0: 6c 61 67 2e 20 20 54 68 69 73 20 70 72 65 76 65  lag.  This preve
35d0: 6e 74 73 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  nts a call to sq
35e0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 0a  lite3_interrupt.
35f0: 20 20 20 20 2a 2a 20 66 72 6f 6d 20 69 6e 74 65      ** from inte
3600: 72 72 75 70 74 69 6e 67 20 61 20 73 74 61 74 65  rrupting a state
3610: 6d 65 6e 74 20 74 68 61 74 20 68 61 73 20 6e 6f  ment that has no
3620: 74 20 79 65 74 20 73 74 61 72 74 65 64 2e 0a 20  t yet started.. 
3630: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
3640: 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3d  ->activeVdbeCnt=
3650: 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 ){.      db->
3660: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
3670: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 23 69 66   = 0;.    }..#if
3680: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3690: 5f 54 52 41 43 45 0a 20 20 20 20 69 66 28 20 64  _TRACE.    if( d
36a0: 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21  b->xProfile && !
36b0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b  db->init.busy ){
36c0: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 4e  .      double rN
36d0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
36e0: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64  3OsCurrentTime(d
36f0: 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b  b->pVfs, &rNow);
3700: 0a 20 20 20 20 20 20 70 2d 3e 73 74 61 72 74 54  .      p->startT
3710: 69 6d 65 20 3d 20 28 72 4e 6f 77 20 2d 20 28 69  ime = (rNow - (i
3720: 6e 74 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a  nt)rNow)*3600.0*
3730: 32 34 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e  24.0*1000000000.
3740: 30 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  0;.    }.#endif.
3750: 0a 20 20 20 20 64 62 2d 3e 61 63 74 69 76 65 56  .    db->activeV
3760: 64 62 65 43 6e 74 2b 2b 3b 0a 20 20 20 20 70 2d  dbeCnt++;.    p-
3770: 3e 70 63 20 3d 20 30 3b 0a 20 20 20 20 73 74 6d  >pc = 0;.    stm
3780: 74 4c 72 75 52 65 6d 6f 76 65 28 70 29 3b 0a 20  tLruRemove(p);. 
3790: 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54   }.#ifndef SQLIT
37a0: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
37b0: 20 69 66 28 20 70 2d 3e 65 78 70 6c 61 69 6e 20   if( p->explain 
37c0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
37d0: 74 65 33 56 64 62 65 4c 69 73 74 28 70 29 3b 0a  te3VdbeList(p);.
37e0: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
37f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  * SQLITE_OMIT_EX
3800: 50 4c 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20  PLAIN */.  {.   
3810: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
3820: 65 45 78 65 63 28 70 29 3b 0a 20 20 7d 0a 0a 20  eExec(p);.  }.. 
3830: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
3840: 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20  tyOff(db) ){.   
3850: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
3860: 55 53 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65  USE;.  }..#ifnde
3870: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
3880: 41 43 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  ACE.  /* Invoke 
3890: 74 68 65 20 70 72 6f 66 69 6c 65 20 63 61 6c 6c  the profile call
38a0: 62 61 63 6b 20 69 66 20 74 68 65 72 65 20 69 73  back if there is
38b0: 20 6f 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28 20   one.  */.  if( 
38c0: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26  rc!=SQLITE_ROW &
38d0: 26 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26  & db->xProfile &
38e0: 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  & !db->init.busy
38f0: 20 26 26 20 70 2d 3e 6e 4f 70 3e 30 0a 20 20 20   && p->nOp>0.   
3900: 20 20 20 20 20 20 20 20 26 26 20 70 2d 3e 61 4f          && p->aO
3910: 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
3920: 54 72 61 63 65 20 26 26 20 70 2d 3e 61 4f 70 5b  Trace && p->aOp[
3930: 30 5d 2e 70 34 2e 7a 21 3d 30 20 29 7b 0a 20 20  0].p4.z!=0 ){.  
3940: 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20    double rNow;. 
3950: 20 20 20 75 36 34 20 65 6c 61 70 73 65 54 69 6d     u64 elapseTim
3960: 65 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 4f  e;..    sqlite3O
3970: 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64 62 2d  sCurrentTime(db-
3980: 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b 0a 20  >pVfs, &rNow);. 
3990: 20 20 20 65 6c 61 70 73 65 54 69 6d 65 20 3d 20     elapseTime = 
39a0: 28 72 4e 6f 77 20 2d 20 28 69 6e 74 29 72 4e 6f  (rNow - (int)rNo
39b0: 77 29 2a 33 36 30 30 2e 30 2a 32 34 2e 30 2a 31  w)*3600.0*24.0*1
39c0: 30 30 30 30 30 30 30 30 30 2e 30 20 2d 20 70 2d  000000000.0 - p-
39d0: 3e 73 74 61 72 74 54 69 6d 65 3b 0a 20 20 20 20  >startTime;.    
39e0: 64 62 2d 3e 78 50 72 6f 66 69 6c 65 28 64 62 2d  db->xProfile(db-
39f0: 3e 70 50 72 6f 66 69 6c 65 41 72 67 2c 20 70 2d  >pProfileArg, p-
3a00: 3e 61 4f 70 5b 30 5d 2e 70 34 2e 7a 2c 20 65 6c  >aOp[0].p4.z, el
3a10: 61 70 73 65 54 69 6d 65 29 3b 0a 20 20 7d 0a 23  apseTime);.  }.#
3a20: 65 6e 64 69 66 0a 0a 20 20 73 71 6c 69 74 65 33  endif..  sqlite3
3a30: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 72 63 2c  Error(p->db, rc,
3a40: 20 30 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 73   0);.  p->rc = s
3a50: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d  qlite3ApiExit(p-
3a60: 3e 64 62 2c 20 70 2d 3e 72 63 29 3b 0a 65 6e 64  >db, p->rc);.end
3a70: 5f 6f 66 5f 73 74 65 70 3a 0a 20 20 61 73 73 65  _of_step:.  asse
3a80: 72 74 28 20 28 72 63 26 30 78 66 66 29 3d 3d 72  rt( (rc&0xff)==r
3a90: 63 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 53  c );.  if( p->zS
3aa0: 71 6c 20 26 26 20 28 72 63 26 30 78 66 66 29 3c  ql && (rc&0xff)<
3ab0: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
3ac0: 20 20 2f 2a 20 54 68 69 73 20 62 65 68 61 76 69    /* This behavi
3ad0: 6f 72 20 6f 63 63 75 72 73 20 69 66 20 73 71 6c  or occurs if sql
3ae0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
3af0: 29 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  ) was used to bu
3b00: 69 6c 64 0a 20 20 20 20 2a 2a 20 74 68 65 20 70  ild.    ** the p
3b10: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3b20: 74 2e 20 20 52 65 74 75 72 6e 20 65 72 72 6f 72  t.  Return error
3b30: 20 63 6f 64 65 73 20 64 69 72 65 63 74 6c 79 20   codes directly 
3b40: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  */.    sqlite3Er
3b50: 72 6f 72 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63  ror(p->db, p->rc
3b60: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
3b70: 20 70 2d 3e 72 63 3b 0a 20 20 7d 65 6c 73 65 7b   p->rc;.  }else{
3b80: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
3b90: 66 6f 72 20 6c 65 67 61 63 79 20 73 71 6c 69 74  for legacy sqlit
3ba0: 65 33 5f 70 72 65 70 61 72 65 28 29 20 62 75 69  e3_prepare() bui
3bb0: 6c 64 73 20 61 6e 64 20 77 68 65 6e 20 74 68 65  lds and when the
3bc0: 20 63 6f 64 65 0a 20 20 20 20 2a 2a 20 69 73 20   code.    ** is 
3bd0: 53 51 4c 49 54 45 5f 52 4f 57 20 6f 72 20 53 51  SQLITE_ROW or SQ
3be0: 4c 49 54 45 5f 44 4f 4e 45 20 2a 2f 0a 20 20 20  LITE_DONE */.   
3bf0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
3c00: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
3c10: 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 69   the top-level i
3c20: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
3c30: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
3c40: 20 20 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65    Call.** sqlite
3c50: 33 53 74 65 70 28 29 20 74 6f 20 64 6f 20 6d 6f  3Step() to do mo
3c60: 73 74 20 6f 66 20 74 68 65 20 77 6f 72 6b 2e 20  st of the work. 
3c70: 20 49 66 20 61 20 73 63 68 65 6d 61 20 65 72 72   If a schema err
3c80: 6f 72 20 6f 63 63 75 72 73 2c 0a 2a 2a 20 63 61  or occurs,.** ca
3c90: 6c 6c 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  ll sqlite3Reprep
3ca0: 61 72 65 28 29 20 61 6e 64 20 74 72 79 20 61 67  are() and try ag
3cb0: 61 69 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ain..*/.#ifdef S
3cc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45  QLITE_OMIT_PARSE
3cd0: 52 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74  R.int sqlite3_st
3ce0: 65 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  ep(sqlite3_stmt 
3cf0: 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72  *pStmt){.  int r
3d00: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
3d10: 45 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  E;.  if( pStmt )
3d20: 7b 0a 20 20 20 20 56 64 62 65 20 2a 76 3b 0a 20  {.    Vdbe *v;. 
3d30: 20 20 20 76 20 3d 20 28 56 64 62 65 2a 29 70 53     v = (Vdbe*)pS
3d40: 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  tmt;.    sqlite3
3d50: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 76 2d 3e  _mutex_enter(v->
3d60: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
3d70: 72 63 20 3d 20 73 71 6c 69 74 65 33 53 74 65 70  rc = sqlite3Step
3d80: 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  (v);.    sqlite3
3d90: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 76 2d 3e  _mutex_leave(v->
3da0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
3db0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23    return rc;.}.#
3dc0: 65 6c 73 65 0a 69 6e 74 20 73 71 6c 69 74 65 33  else.int sqlite3
3dd0: 5f 73 74 65 70 28 73 71 6c 69 74 65 33 5f 73 74  _step(sqlite3_st
3de0: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e  mt *pStmt){.  in
3df0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49  t rc = SQLITE_MI
3e00: 53 55 53 45 3b 0a 20 20 69 66 28 20 70 53 74 6d  SUSE;.  if( pStm
3e10: 74 20 29 7b 0a 20 20 20 20 69 6e 74 20 63 6e 74  t ){.    int cnt
3e20: 20 3d 20 30 3b 0a 20 20 20 20 56 64 62 65 20 2a   = 0;.    Vdbe *
3e30: 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  v = (Vdbe*)pStmt
3e40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64  ;.    sqlite3 *d
3e50: 62 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 20 20 73  b = v->db;.    s
3e60: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
3e70: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
3e80: 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20     while( (rc = 
3e90: 73 71 6c 69 74 65 33 53 74 65 70 28 76 29 29 3d  sqlite3Step(v))=
3ea0: 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20  =SQLITE_SCHEMA. 
3eb0: 20 20 20 20 20 20 20 20 20 20 26 26 20 63 6e 74            && cnt
3ec0: 2b 2b 20 3c 20 35 0a 20 20 20 20 20 20 20 20 20  ++ < 5.         
3ed0: 20 20 26 26 20 76 64 62 65 52 65 70 72 65 70 61    && vdbeReprepa
3ee0: 72 65 28 76 29 20 29 7b 0a 20 20 20 20 20 20 73  re(v) ){.      s
3ef0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 74  qlite3_reset(pSt
3f00: 6d 74 29 3b 0a 20 20 20 20 20 20 76 2d 3e 65 78  mt);.      v->ex
3f10: 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 20 20 7d  pired = 0;.    }
3f20: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
3f30: 49 54 45 5f 53 43 48 45 4d 41 20 26 26 20 76 2d  ITE_SCHEMA && v-
3f40: 3e 7a 53 71 6c 20 26 26 20 64 62 2d 3e 70 45 72  >zSql && db->pEr
3f50: 72 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  r ){.      /* Th
3f60: 69 73 20 63 61 73 65 20 6f 63 63 75 72 73 20 61  is case occurs a
3f70: 66 74 65 72 20 66 61 69 6c 69 6e 67 20 74 6f 20  fter failing to 
3f80: 72 65 63 6f 6d 70 69 6c 65 20 61 6e 20 73 71 6c  recompile an sql
3f90: 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 20 20 20   statement. .   
3fa0: 20 20 20 2a 2a 20 54 68 65 20 65 72 72 6f 72 20     ** The error 
3fb0: 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74 68 65  message from the
3fc0: 20 53 51 4c 20 63 6f 6d 70 69 6c 65 72 20 68 61   SQL compiler ha
3fd0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c  s already been l
3fe0: 6f 61 64 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  oaded .      ** 
3ff0: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
4000: 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73 20 62  e handle. This b
4010: 6c 6f 63 6b 20 63 6f 70 69 65 73 20 74 68 65 20  lock copies the 
4020: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 0a 20  error message . 
4030: 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74 68 65       ** from the
4040: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4050: 20 69 6e 74 6f 20 74 68 65 20 73 74 61 74 65 6d   into the statem
4060: 65 6e 74 20 61 6e 64 20 73 65 74 73 20 74 68 65  ent and sets the
4070: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20   statement.     
4080: 20 2a 2a 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e   ** program coun
4090: 74 65 72 20 74 6f 20 30 20 74 6f 20 65 6e 73 75  ter to 0 to ensu
40a0: 72 65 20 74 68 61 74 20 77 68 65 6e 20 74 68 65  re that when the
40b0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 0a 20   statement is . 
40c0: 20 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69 7a 65       ** finalize
40d0: 64 20 6f 72 20 72 65 73 65 74 20 74 68 65 20 70  d or reset the p
40e0: 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65 73 73  arser error mess
40f0: 61 67 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65  age is available
4100: 20 76 69 61 0a 20 20 20 20 20 20 2a 2a 20 73 71   via.      ** sq
4110: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
4120: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nd sqlite3_errco
4130: 64 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  de()..      */. 
4140: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
4150: 2a 7a 45 72 72 20 3d 20 28 63 6f 6e 73 74 20 63  *zErr = (const c
4160: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 76 61  har *)sqlite3_va
4170: 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45 72  lue_text(db->pEr
4180: 72 29 3b 20 0a 20 20 20 20 20 20 73 71 6c 69 74  r); .      sqlit
4190: 65 33 5f 66 72 65 65 28 76 2d 3e 7a 45 72 72 4d  e3_free(v->zErrM
41a0: 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21  sg);.      if( !
41b0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
41c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a   ){.        v->z
41d0: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
41e0: 44 62 53 74 72 44 75 70 28 64 62 2c 20 7a 45 72  DbStrDup(db, zEr
41f0: 72 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  r);.      } else
4200: 20 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a 45   {.        v->zE
4210: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
4220: 20 20 20 76 2d 3e 72 63 20 3d 20 53 51 4c 49 54     v->rc = SQLIT
4230: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d  E_NOMEM;.      }
4240: 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
4250: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
4260: 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  b, rc);.    sqli
4270: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
4280: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
4290: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23    return rc;.}.#
42a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 74  endif../*.** Ext
42b0: 72 61 63 74 20 74 68 65 20 75 73 65 72 20 64 61  ract the user da
42c0: 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69 74 65  ta from a sqlite
42d0: 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63 74  3_context struct
42e0: 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61  ure and return a
42f0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  .** pointer to i
4300: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  t..*/.void *sqli
4310: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 73 71  te3_user_data(sq
4320: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
4330: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26  ){.  assert( p &
4340: 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20  & p->pFunc );.  
4350: 72 65 74 75 72 6e 20 70 2d 3e 70 46 75 6e 63 2d  return p->pFunc-
4360: 3e 70 55 73 65 72 44 61 74 61 3b 0a 7d 0a 0a 2f  >pUserData;.}../
4370: 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
4380: 20 75 73 65 72 20 64 61 74 61 20 66 72 6f 6d 20   user data from 
4390: 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  a sqlite3_contex
43a0: 74 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20  t structure and 
43b0: 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e  return a.** poin
43c0: 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a 73 71  ter to it..*/.sq
43d0: 6c 69 74 65 33 20 2a 73 71 6c 69 74 65 33 5f 63  lite3 *sqlite3_c
43e0: 6f 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65  ontext_db_handle
43f0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4400: 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20   *p){.  assert( 
4410: 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b  p && p->pFunc );
4420: 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 73 2e 64  .  return p->s.d
4430: 62 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  b;.}../*.** The 
4440: 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65  following is the
4450: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
4460: 6f 66 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  of an SQL functi
4470: 6f 6e 20 74 68 61 74 20 61 6c 77 61 79 73 0a 2a  on that always.*
4480: 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
4490: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
44a0: 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 66  ating that the f
44b0: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
44c0: 69 6e 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67 20  in the.** wrong 
44d0: 63 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 73 71  context.  The sq
44e0: 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
44f0: 75 6e 63 74 69 6f 6e 28 29 20 41 50 49 20 6d 69  unction() API mi
4500: 67 68 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a 2a  ght construct.**
4510: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68   SQL function th
4520: 61 74 20 75 73 65 20 74 68 69 73 20 72 6f 75 74  at use this rout
4530: 69 6e 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  ine so that the 
4540: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 65  functions will e
4550: 78 69 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d 65  xist.** for name
4560: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20   resolution but 
4570: 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6f 76 65  are actually ove
4580: 72 6c 6f 61 64 65 64 20 62 79 20 74 68 65 20 78  rloaded by the x
4590: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a 20  FindFunction.** 
45a0: 6d 65 74 68 6f 64 20 6f 66 20 76 69 72 74 75 61  method of virtua
45b0: 6c 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  l tables..*/.voi
45c0: 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
45d0: 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  Function(.  sqli
45e0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
45f0: 74 65 78 74 2c 20 20 2f 2a 20 54 68 65 20 66 75  text,  /* The fu
4600: 6e 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63  nction calling c
4610: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
4620: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
4630: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
4640: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
4650: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
4660: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
4670: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 2f 2a   **argv       /*
4680: 20 56 61 6c 75 65 20 6f 66 20 65 61 63 68 20 61   Value of each a
4690: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
46a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
46b0: 65 20 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46 75  e = context->pFu
46c0: 6e 63 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68 61  nc->zName;.  cha
46d0: 72 20 2a 7a 45 72 72 3b 0a 20 20 7a 45 72 72 20  r *zErr;.  zErr 
46e0: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
46f0: 28 30 2c 0a 20 20 20 20 20 20 22 75 6e 61 62 6c  (0,.      "unabl
4700: 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f  e to use functio
4710: 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71 75  n %s in the requ
4720: 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c 20  ested context", 
4730: 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74 65  zName);.  sqlite
4740: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
4750: 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d 31  ontext, zErr, -1
4760: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4770: 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e(zErr);.}../*.*
4780: 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72 65  * Allocate or re
4790: 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67 61  turn the aggrega
47a0: 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 61  te context for a
47b0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20   user function. 
47c0: 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65 78   A new.** contex
47d0: 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f  t is allocated o
47e0: 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  n the first call
47f0: 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 61  .  Subsequent ca
4800: 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a 2a  lls return the.*
4810: 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20 74  * same context t
4820: 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65 64  hat was returned
4830: 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73 2e   on prior calls.
4840: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
4850: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
4860: 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ext(sqlite3_cont
4870: 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79 74  ext *p, int nByt
4880: 65 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  e){.  Mem *pMem;
4890: 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20  .  assert( p && 
48a0: 70 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e 70  p->pFunc && p->p
48b0: 46 75 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a 20  Func->xStep );. 
48c0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
48d0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d 3e 73  _mutex_held(p->s
48e0: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
48f0: 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d 3b   pMem = p->pMem;
4900: 0a 20 20 69 66 28 20 28 70 4d 65 6d 2d 3e 66 6c  .  if( (pMem->fl
4910: 61 67 73 20 26 20 4d 45 4d 5f 41 67 67 29 3d 3d  ags & MEM_Agg)==
4920: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e 42 79  0 ){.    if( nBy
4930: 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  te==0 ){.      s
4940: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
4950: 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4d 65  easeExternal(pMe
4960: 6d 29 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  m);.      pMem->
4970: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
4980: 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 7a 20  ;.      pMem->z 
4990: 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
49a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
49b0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
49c0: 42 79 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Byte, 0);.      
49d0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
49e0: 4d 5f 41 67 67 3b 0a 20 20 20 20 20 20 70 4d 65  M_Agg;.      pMe
49f0: 6d 2d 3e 75 2e 70 44 65 66 20 3d 20 70 2d 3e 70  m->u.pDef = p->p
4a00: 46 75 6e 63 3b 0a 20 20 20 20 20 20 69 66 28 20  Func;.      if( 
4a10: 70 4d 65 6d 2d 3e 7a 20 29 7b 0a 20 20 20 20 20  pMem->z ){.     
4a20: 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d 2d 3e     memset(pMem->
4a30: 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a 20 20  z, 0, nByte);.  
4a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
4a50: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29    return (void*)
4a60: 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  pMem->z;.}../*.*
4a70: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 75 78  * Return the aux
4a80: 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e 74  ilary data point
4a90: 65 72 2c 20 69 66 20 61 6e 79 2c 20 66 6f 72 20  er, if any, for 
4aa0: 74 68 65 20 69 41 72 67 27 74 68 20 61 72 67 75  the iArg'th argu
4ab0: 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  ment to.** the u
4ac0: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66  ser-function def
4ad0: 69 6e 65 64 20 62 79 20 70 43 74 78 2e 0a 2a 2f  ined by pCtx..*/
4ae0: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 67  .void *sqlite3_g
4af0: 65 74 5f 61 75 78 64 61 74 61 28 73 71 6c 69 74  et_auxdata(sqlit
4b00: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
4b10: 2c 20 69 6e 74 20 69 41 72 67 29 7b 0a 20 20 56  , int iArg){.  V
4b20: 64 62 65 46 75 6e 63 20 2a 70 56 64 62 65 46 75  dbeFunc *pVdbeFu
4b30: 6e 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73  nc;..  assert( s
4b40: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
4b50: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
4b60: 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65 46  tex) );.  pVdbeF
4b70: 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64 62  unc = pCtx->pVdb
4b80: 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70 56  eFunc;.  if( !pV
4b90: 64 62 65 46 75 6e 63 20 7c 7c 20 69 41 72 67 3e  dbeFunc || iArg>
4ba0: 3d 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78  =pVdbeFunc->nAux
4bb0: 20 7c 7c 20 69 41 72 67 3c 30 20 29 7b 0a 20 20   || iArg<0 ){.  
4bc0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
4bd0: 20 20 72 65 74 75 72 6e 20 70 56 64 62 65 46 75    return pVdbeFu
4be0: 6e 63 2d 3e 61 70 41 75 78 5b 69 41 72 67 5d 2e  nc->apAux[iArg].
4bf0: 70 41 75 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  pAux;.}../*.** S
4c00: 65 74 20 74 68 65 20 61 75 78 69 6c 61 72 79 20  et the auxilary 
4c10: 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 6e 64  data pointer and
4c20: 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e   delete function
4c30: 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27 74  , for the iArg't
4c40: 68 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  h.** argument to
4c50: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
4c60: 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70 43  on defined by pC
4c70: 74 78 2e 20 41 6e 79 20 70 72 65 76 69 6f 75 73  tx. Any previous
4c80: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 64 65 6c   value is.** del
4c90: 65 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  eted by calling 
4ca0: 74 68 65 20 64 65 6c 65 74 65 20 66 75 6e 63 74  the delete funct
4cb0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 77 68  ion specified wh
4cc0: 65 6e 20 69 74 20 77 61 73 20 73 65 74 2e 0a 2a  en it was set..*
4cd0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
4ce0: 65 74 5f 61 75 78 64 61 74 61 28 0a 20 20 73 71  et_auxdata(.  sq
4cf0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
4d00: 43 74 78 2c 20 0a 20 20 69 6e 74 20 69 41 72 67  Ctx, .  int iArg
4d10: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 2c  , .  void *pAux,
4d20: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 65   .  void (*xDele
4d30: 74 65 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  te)(void*).){.  
4d40: 73 74 72 75 63 74 20 41 75 78 44 61 74 61 20 2a  struct AuxData *
4d50: 70 41 75 78 44 61 74 61 3b 0a 20 20 56 64 62 65  pAuxData;.  Vdbe
4d60: 46 75 6e 63 20 2a 70 56 64 62 65 46 75 6e 63 3b  Func *pVdbeFunc;
4d70: 0a 20 20 69 66 28 20 69 41 72 67 3c 30 20 29 20  .  if( iArg<0 ) 
4d80: 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 0a 20 20  goto failed;..  
4d90: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
4da0: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
4db0: 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  >s.db->mutex) );
4dc0: 0a 20 20 70 56 64 62 65 46 75 6e 63 20 3d 20 70  .  pVdbeFunc = p
4dd0: 43 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b 0a  Ctx->pVdbeFunc;.
4de0: 20 20 69 66 28 20 21 70 56 64 62 65 46 75 6e 63    if( !pVdbeFunc
4df0: 20 7c 7c 20 70 56 64 62 65 46 75 6e 63 2d 3e 6e   || pVdbeFunc->n
4e00: 41 75 78 3c 3d 69 41 72 67 20 29 7b 0a 20 20 20  Aux<=iArg ){.   
4e10: 20 69 6e 74 20 6e 41 75 78 20 3d 20 28 70 56 64   int nAux = (pVd
4e20: 62 65 46 75 6e 63 20 3f 20 70 56 64 62 65 46 75  beFunc ? pVdbeFu
4e30: 6e 63 2d 3e 6e 41 75 78 20 3a 20 30 29 3b 0a 20  nc->nAux : 0);. 
4e40: 20 20 20 69 6e 74 20 6e 4d 61 6c 6c 6f 63 20 3d     int nMalloc =
4e50: 20 73 69 7a 65 6f 66 28 56 64 62 65 46 75 6e 63   sizeof(VdbeFunc
4e60: 29 20 2b 20 73 69 7a 65 6f 66 28 73 74 72 75 63  ) + sizeof(struc
4e70: 74 20 41 75 78 44 61 74 61 29 2a 69 41 72 67 3b  t AuxData)*iArg;
4e80: 0a 20 20 20 20 70 56 64 62 65 46 75 6e 63 20 3d  .    pVdbeFunc =
4e90: 20 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f   sqlite3DbReallo
4ea0: 63 28 70 43 74 78 2d 3e 73 2e 64 62 2c 20 70 56  c(pCtx->s.db, pV
4eb0: 64 62 65 46 75 6e 63 2c 20 6e 4d 61 6c 6c 6f 63  dbeFunc, nMalloc
4ec0: 29 3b 0a 20 20 20 20 69 66 28 20 21 70 56 64 62  );.    if( !pVdb
4ed0: 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 20 20 67  eFunc ){.      g
4ee0: 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 20 20 20 20  oto failed;.    
4ef0: 7d 0a 20 20 20 20 70 43 74 78 2d 3e 70 56 64 62  }.    pCtx->pVdb
4f00: 65 46 75 6e 63 20 3d 20 70 56 64 62 65 46 75 6e  eFunc = pVdbeFun
4f10: 63 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 70  c;.    memset(&p
4f20: 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b  VdbeFunc->apAux[
4f30: 6e 41 75 78 5d 2c 20 30 2c 20 73 69 7a 65 6f 66  nAux], 0, sizeof
4f40: 28 73 74 72 75 63 74 20 41 75 78 44 61 74 61 29  (struct AuxData)
4f50: 2a 28 69 41 72 67 2b 31 2d 6e 41 75 78 29 29 3b  *(iArg+1-nAux));
4f60: 0a 20 20 20 20 70 56 64 62 65 46 75 6e 63 2d 3e  .    pVdbeFunc->
4f70: 6e 41 75 78 20 3d 20 69 41 72 67 2b 31 3b 0a 20  nAux = iArg+1;. 
4f80: 20 20 20 70 56 64 62 65 46 75 6e 63 2d 3e 70 46     pVdbeFunc->pF
4f90: 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 46 75 6e  unc = pCtx->pFun
4fa0: 63 3b 0a 20 20 7d 0a 0a 20 20 70 41 75 78 44 61  c;.  }..  pAuxDa
4fb0: 74 61 20 3d 20 26 70 56 64 62 65 46 75 6e 63 2d  ta = &pVdbeFunc-
4fc0: 3e 61 70 41 75 78 5b 69 41 72 67 5d 3b 0a 20 20  >apAux[iArg];.  
4fd0: 69 66 28 20 70 41 75 78 44 61 74 61 2d 3e 70 41  if( pAuxData->pA
4fe0: 75 78 20 26 26 20 70 41 75 78 44 61 74 61 2d 3e  ux && pAuxData->
4ff0: 78 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 70  xDelete ){.    p
5000: 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65  AuxData->xDelete
5010: 28 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 29  (pAuxData->pAux)
5020: 3b 0a 20 20 7d 0a 20 20 70 41 75 78 44 61 74 61  ;.  }.  pAuxData
5030: 2d 3e 70 41 75 78 20 3d 20 70 41 75 78 3b 0a 20  ->pAux = pAux;. 
5040: 20 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65   pAuxData->xDele
5050: 74 65 20 3d 20 78 44 65 6c 65 74 65 3b 0a 20 20  te = xDelete;.  
5060: 72 65 74 75 72 6e 3b 0a 0a 66 61 69 6c 65 64 3a  return;..failed:
5070: 0a 20 20 69 66 28 20 78 44 65 6c 65 74 65 20 29  .  if( xDelete )
5080: 7b 0a 20 20 20 20 78 44 65 6c 65 74 65 28 70 41  {.    xDelete(pA
5090: 75 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ux);.  }.}../*.*
50a0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
50b0: 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65  ber of times the
50c0: 20 53 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 6f   Step function o
50d0: 66 20 61 20 61 67 67 72 65 67 61 74 65 20 68 61  f a aggregate ha
50e0: 73 20 62 65 65 6e 20 0a 2a 2a 20 63 61 6c 6c 65  s been .** calle
50f0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75  d..**.** This fu
5100: 6e 63 74 69 6f 6e 20 69 73 20 64 65 70 72 65 63  nction is deprec
5110: 61 74 65 64 2e 20 20 44 6f 20 6e 6f 74 20 75 73  ated.  Do not us
5120: 65 20 69 74 20 66 6f 72 20 6e 65 77 20 63 6f 64  e it for new cod
5130: 65 2e 20 20 49 74 20 69 73 0a 2a 2a 20 70 72 6f  e.  It is.** pro
5140: 76 69 64 65 20 6f 6e 6c 79 20 74 6f 20 61 76 6f  vide only to avo
5150: 69 64 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61  id breaking lega
5160: 63 79 20 63 6f 64 65 2e 20 20 4e 65 77 20 61 67  cy code.  New ag
5170: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
5180: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
5190: 6f 6e 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20  ons should keep 
51a0: 74 68 65 69 72 20 6f 77 6e 20 63 6f 75 6e 74 73  their own counts
51b0: 20 77 69 74 68 69 6e 20 74 68 65 69 72 20 61 67   within their ag
51c0: 67 72 65 67 61 74 65 0a 2a 2a 20 63 6f 6e 74 65  gregate.** conte
51d0: 78 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  xt..*/.int sqlit
51e0: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
51f0: 6e 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nt(sqlite3_conte
5200: 78 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74  xt *p){.  assert
5210: 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20  ( p && p->pFunc 
5220: 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74  && p->pFunc->xSt
5230: 65 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70  ep );.  return p
5240: 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 0a 2f 2a  ->pMem->n;.}../*
5250: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
5260: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
5270: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
5280: 65 74 20 66 6f 72 20 74 68 65 20 73 74 61 74 65  et for the state
5290: 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69  ment pStmt..*/.i
52a0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
52b0: 6e 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f  n_count(sqlite3_
52c0: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
52d0: 56 64 62 65 20 2a 70 56 6d 20 3d 20 28 56 64 62  Vdbe *pVm = (Vdb
52e0: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74  e *)pStmt;.  ret
52f0: 75 72 6e 20 70 56 6d 20 3f 20 70 56 6d 2d 3e 6e  urn pVm ? pVm->n
5300: 52 65 73 43 6f 6c 75 6d 6e 20 3a 20 30 3b 0a 7d  ResColumn : 0;.}
5310: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
5320: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c  he number of val
5330: 75 65 73 20 61 76 61 69 6c 61 62 6c 65 20 66 72  ues available fr
5340: 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  om the current r
5350: 6f 77 20 6f 66 20 74 68 65 0a 2a 2a 20 63 75 72  ow of the.** cur
5360: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
5370: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
5380: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
5390: 5f 64 61 74 61 5f 63 6f 75 6e 74 28 73 71 6c 69  _data_count(sqli
53a0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
53b0: 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 20 3d 20  {.  Vdbe *pVm = 
53c0: 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20  (Vdbe *)pStmt;. 
53d0: 20 69 66 28 20 70 56 6d 3d 3d 30 20 7c 7c 20 70   if( pVm==0 || p
53e0: 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 3d 3d  Vm->pResultSet==
53f0: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  0 ) return 0;.  
5400: 72 65 74 75 72 6e 20 70 56 6d 2d 3e 6e 52 65 73  return pVm->nRes
5410: 43 6f 6c 75 6d 6e 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  Column;.}.../*.*
5420: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5430: 66 20 63 6f 6c 75 6d 6e 20 69 43 6f 6c 20 6f 66  f column iCol of
5440: 20 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65   the given state
5450: 6d 65 6e 74 20 69 73 20 76 61 6c 69 64 2e 20 20  ment is valid.  
5460: 49 66 0a 2a 2a 20 69 74 20 69 73 2c 20 72 65 74  If.** it is, ret
5470: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
5480: 20 74 68 65 20 4d 65 6d 20 66 6f 72 20 74 68 65   the Mem for the
5490: 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 63   value of that c
54a0: 6f 6c 75 6d 6e 2e 0a 2a 2a 20 49 66 20 69 43 6f  olumn..** If iCo
54b0: 6c 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 2c 20  l is not valid, 
54c0: 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  return a pointer
54d0: 20 74 6f 20 61 20 4d 65 6d 20 77 68 69 63 68 20   to a Mem which 
54e0: 68 61 73 20 61 20 76 61 6c 75 65 0a 2a 2a 20 6f  has a value.** o
54f0: 66 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69  f NULL..*/.stati
5500: 63 20 4d 65 6d 20 2a 63 6f 6c 75 6d 6e 4d 65 6d  c Mem *columnMem
5510: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
5520: 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20  Stmt, int i){.  
5530: 56 64 62 65 20 2a 70 56 6d 3b 0a 20 20 69 6e 74  Vdbe *pVm;.  int
5540: 20 76 61 6c 73 3b 0a 20 20 4d 65 6d 20 2a 70 4f   vals;.  Mem *pO
5550: 75 74 3b 0a 0a 20 20 70 56 6d 20 3d 20 28 56 64  ut;..  pVm = (Vd
5560: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66  be *)pStmt;.  if
5570: 28 20 70 56 6d 20 26 26 20 70 56 6d 2d 3e 70 52  ( pVm && pVm->pR
5580: 65 73 75 6c 74 53 65 74 21 3d 30 20 26 26 20 69  esultSet!=0 && i
5590: 3c 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  <pVm->nResColumn
55a0: 20 26 26 20 69 3e 3d 30 20 29 7b 0a 20 20 20 20   && i>=0 ){.    
55b0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
55c0: 74 65 72 28 70 56 6d 2d 3e 64 62 2d 3e 6d 75 74  ter(pVm->db->mut
55d0: 65 78 29 3b 0a 20 20 20 20 76 61 6c 73 20 3d 20  ex);.    vals = 
55e0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
55f0: 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 70  nt(pStmt);.    p
5600: 4f 75 74 20 3d 20 26 70 56 6d 2d 3e 70 52 65 73  Out = &pVm->pRes
5610: 75 6c 74 53 65 74 5b 69 5d 3b 0a 20 20 7d 65 6c  ultSet[i];.  }el
5620: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
5630: 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65 6d  onst Mem nullMem
5640: 20 3d 20 7b 7b 30 7d 2c 20 30 2e 30 2c 20 30 2c   = {{0}, 0.0, 0,
5650: 20 22 22 2c 20 30 2c 20 4d 45 4d 5f 4e 75 6c 6c   "", 0, MEM_Null
5660: 2c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 30  , SQLITE_NULL, 0
5670: 2c 20 30 2c 20 30 20 7d 3b 0a 20 20 20 20 69 66  , 0, 0 };.    if
5680: 28 20 70 56 6d 2d 3e 64 62 20 29 7b 0a 20 20 20  ( pVm->db ){.   
5690: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
56a0: 5f 65 6e 74 65 72 28 70 56 6d 2d 3e 64 62 2d 3e  _enter(pVm->db->
56b0: 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 73 71  mutex);.      sq
56c0: 6c 69 74 65 33 45 72 72 6f 72 28 70 56 6d 2d 3e  lite3Error(pVm->
56d0: 64 62 2c 20 53 51 4c 49 54 45 5f 52 41 4e 47 45  db, SQLITE_RANGE
56e0: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
56f0: 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 6e 75  pOut = (Mem*)&nu
5700: 6c 6c 4d 65 6d 3b 0a 20 20 7d 0a 20 20 72 65 74  llMem;.  }.  ret
5710: 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 2f 2a 0a  urn pOut;.}../*.
5720: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
5730: 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
5740: 20 69 6e 76 6f 6b 69 6e 67 20 61 6e 20 73 71 6c   invoking an sql
5750: 69 74 65 33 5f 76 61 6c 75 65 5f 58 58 58 20 66  ite3_value_XXX f
5760: 75 6e 63 74 69 6f 6e 20 6f 6e 20 61 20 0a 2a 2a  unction on a .**
5770: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 69   column value (i
5780: 2e 65 2e 20 61 20 76 61 6c 75 65 20 72 65 74 75  .e. a value retu
5790: 72 6e 65 64 20 62 79 20 65 76 61 6c 75 61 74 69  rned by evaluati
57a0: 6e 67 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73  ng an SQL expres
57b0: 73 69 6f 6e 20 69 6e 20 74 68 65 0a 2a 2a 20 73  sion in the.** s
57c0: 65 6c 65 63 74 20 6c 69 73 74 20 6f 66 20 61 20  elect list of a 
57d0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
57e0: 29 20 74 68 61 74 20 6d 61 79 20 63 61 75 73 65  ) that may cause
57f0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
5800: 75 72 65 2e 20 49 66 20 0a 2a 2a 20 6d 61 6c 6c  ure. If .** mall
5810: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
5820: 20 74 68 65 20 74 68 72 65 61 64 73 20 6d 61 6c   the threads mal
5830: 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 69  locFailed flag i
5840: 73 20 63 6c 65 61 72 65 64 20 61 6e 64 20 74 68  s cleared and th
5850: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 63 6f 64 65  e result.** code
5860: 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 20 70 53   of statement pS
5870: 74 6d 74 20 73 65 74 20 74 6f 20 53 51 4c 49 54  tmt set to SQLIT
5880: 45 5f 4e 4f 4d 45 4d 2e 0a 2a 2a 0a 2a 2a 20 53  E_NOMEM..**.** S
5890: 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 69  pecifically, thi
58a0: 73 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d  s is called from
58b0: 20 77 69 74 68 69 6e 3a 0a 2a 2a 0a 2a 2a 20 20   within:.**.**  
58c0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
58d0: 6e 5f 69 6e 74 28 29 0a 2a 2a 20 20 20 20 20 73  n_int().**     s
58e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
58f0: 74 36 34 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  t64().**     sql
5900: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
5910: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
5920: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
5930: 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33  ).**     sqlite3
5940: 5f 63 6f 6c 75 6d 6e 5f 72 65 61 6c 28 29 0a 2a  _column_real().*
5950: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
5960: 6c 75 6d 6e 5f 62 79 74 65 73 28 29 0a 2a 2a 20  lumn_bytes().** 
5970: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
5980: 6d 6e 5f 62 79 74 65 73 31 36 28 29 0a 2a 2a 0a  mn_bytes16().**.
5990: 2a 2a 20 42 75 74 20 6e 6f 74 20 66 6f 72 20 73  ** But not for s
59a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
59b0: 6f 62 28 29 2c 20 77 68 69 63 68 20 6e 65 76 65  ob(), which neve
59c0: 72 20 63 61 6c 6c 73 20 6d 61 6c 6c 6f 63 28 29  r calls malloc()
59d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
59e0: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
59f0: 6c 75 72 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  lure(sqlite3_stm
5a00: 74 20 2a 70 53 74 6d 74 29 0a 7b 0a 20 20 2f 2a  t *pStmt).{.  /*
5a10: 20 49 66 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69   If malloc() fai
5a20: 6c 65 64 20 64 75 72 69 6e 67 20 61 6e 20 65 6e  led during an en
5a30: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  coding conversio
5a40: 6e 20 77 69 74 68 69 6e 20 61 6e 0a 20 20 2a 2a  n within an.  **
5a50: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5a60: 58 58 58 20 41 50 49 2c 20 74 68 65 6e 20 73 65  XXX API, then se
5a70: 74 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64  t the return cod
5a80: 65 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  e of the stateme
5a90: 6e 74 20 74 6f 0a 20 20 2a 2a 20 53 51 4c 49 54  nt to.  ** SQLIT
5aa0: 45 5f 4e 4f 4d 45 4d 2e 20 54 68 65 20 6e 65 78  E_NOMEM. The nex
5ab0: 74 20 63 61 6c 6c 20 74 6f 20 5f 73 74 65 70 28  t call to _step(
5ac0: 29 20 28 69 66 20 61 6e 79 29 20 77 69 6c 6c 20  ) (if any) will 
5ad0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5ae0: 52 4f 52 0a 20 20 2a 2a 20 61 6e 64 20 5f 66 69  ROR.  ** and _fi
5af0: 6e 61 6c 69 7a 65 28 29 20 77 69 6c 6c 20 72 65  nalize() will re
5b00: 74 75 72 6e 20 4e 4f 4d 45 4d 2e 0a 20 20 2a 2f  turn NOMEM..  */
5b10: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
5b20: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66  be *)pStmt;.  if
5b30: 28 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  ( p ){.    p->rc
5b40: 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69   = sqlite3ApiExi
5b50: 74 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 29 3b  t(p->db, p->rc);
5b60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
5b70: 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e  ex_leave(p->db->
5b80: 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  mutex);.  }.}../
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c  ************ sql
5bb0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 20 20 2a 2a  ite3_column_  **
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
5be0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
5bf0: 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73 65 64  outines are used
5c00: 20 74 6f 20 61 63 63 65 73 73 20 65 6c 65 6d 65   to access eleme
5c10: 6e 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  nts of the curre
5c20: 6e 74 20 72 6f 77 0a 2a 2a 20 69 6e 20 74 68 65  nt row.** in the
5c30: 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2f 0a   result set..*/.
5c40: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
5c50: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
5c60: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
5c70: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63  tmt, int i){.  c
5c80: 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 3b 0a  onst void *val;.
5c90: 20 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f    val = sqlite3_
5ca0: 76 61 6c 75 65 5f 62 6c 6f 62 28 20 63 6f 6c 75  value_blob( colu
5cb0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
5cc0: 3b 0a 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75  ;.  /* Even thou
5cd0: 67 68 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65  gh there is no e
5ce0: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69  ncoding conversi
5cf0: 6f 6e 2c 20 76 61 6c 75 65 5f 62 6c 6f 62 28 29  on, value_blob()
5d00: 20 6d 69 67 68 74 0a 20 20 2a 2a 20 6e 65 65 64   might.  ** need
5d10: 20 74 6f 20 63 61 6c 6c 20 6d 61 6c 6c 6f 63 28   to call malloc(
5d20: 29 20 74 6f 20 65 78 70 61 6e 64 20 74 68 65 20  ) to expand the 
5d30: 72 65 73 75 6c 74 20 6f 66 20 61 20 7a 65 72 6f  result of a zero
5d40: 62 6c 6f 62 28 29 20 0a 20 20 2a 2a 20 65 78 70  blob() .  ** exp
5d50: 72 65 73 73 69 6f 6e 2e 20 0a 20 20 2a 2f 0a 20  ression. .  */. 
5d60: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
5d70: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
5d80: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74  eturn val;.}.int
5d90: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5da0: 62 79 74 65 73 28 73 71 6c 69 74 65 33 5f 73 74  bytes(sqlite3_st
5db0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
5dc0: 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d 20 73  ){.  int val = s
5dd0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
5de0: 65 73 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  es( columnMem(pS
5df0: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
5e00: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
5e10: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
5e20: 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69   val;.}.int sqli
5e30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
5e40: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
5e50: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
5e60: 20 20 69 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69    int val = sqli
5e70: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31  te3_value_bytes1
5e80: 36 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  6( columnMem(pSt
5e90: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
5ea0: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
5eb0: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
5ec0: 76 61 6c 3b 0a 7d 0a 64 6f 75 62 6c 65 20 73 71  val;.}.double sq
5ed0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
5ee0: 62 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ble(sqlite3_stmt
5ef0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
5f00: 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c 20 3d 20  .  double val = 
5f10: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
5f20: 75 62 6c 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28  uble( columnMem(
5f30: 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f  pStmt,i) );.  co
5f40: 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72  lumnMallocFailur
5f50: 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75  e(pStmt);.  retu
5f60: 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71  rn val;.}.int sq
5f70: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
5f80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
5f90: 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20  Stmt, int i){.  
5fa0: 69 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69 74 65  int val = sqlite
5fb0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 20 63 6f 6c  3_value_int( 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 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71  .sqlite_int64 sq
6010: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
6020: 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  64(sqlite3_stmt 
6030: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
6040: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 76    sqlite_int64 v
6050: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
6060: 75 65 5f 69 6e 74 36 34 28 20 63 6f 6c 75 6d 6e  ue_int64( column
6070: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
6080: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
6090: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
60a0: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 63 6f  return val;.}.co
60b0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
60c0: 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r *sqlite3_colum
60d0: 6e 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f 73  n_text(sqlite3_s
60e0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
60f0: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  i){.  const unsi
6100: 67 6e 65 64 20 63 68 61 72 20 2a 76 61 6c 20 3d  gned char *val =
6110: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
6120: 65 78 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  ext( columnMem(p
6130: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
6140: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
6150: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
6160: 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 33  n val;.}.sqlite3
6170: 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 5f  _value *sqlite3_
6180: 63 6f 6c 75 6d 6e 5f 76 61 6c 75 65 28 73 71 6c  column_value(sql
6190: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
61a0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69  , int i){.  sqli
61b0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 4f 75 74 20  te3_value *pOut 
61c0: 3d 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  = columnMem(pStm
61d0: 74 2c 20 69 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  t, i);.  columnM
61e0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
61f0: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  mt);.  return pO
6200: 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  ut;.}.#ifndef SQ
6210: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6220: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
6230: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
6240: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
6250: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
6260: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c   const void *val
6270: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6280: 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d  _text16( columnM
6290: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
62a0: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
62b0: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
62c0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e  eturn val;.}.#en
62d0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
62e0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
62f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
6300: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
6310: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
6320: 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20 73  .  int iType = s
6330: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
6340: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
6350: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
6360: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
6370: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
6380: 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68 65  iType;.}../* The
6390: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74   following funct
63a0: 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e  ion is experimen
63b0: 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63 74 20  tal and subject 
63c0: 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a 20  to change or.** 
63d0: 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e 74  removal */./*int
63e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
63f0: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
6400: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
6410: 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72 65  , int i){.**  re
6420: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
6430: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
6440: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
6450: 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a 2f  ,i) );.**}.*/../
6460: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
6470: 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   N-th element of
6480: 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65   pStmt->pColName
6490: 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  [] into a string
64a0: 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63 28   using.** xFunc(
64b0: 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68  ) then return th
64c0: 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e  at string.  If N
64d0: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
64e0: 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a  , return 0..**.*
64f0: 2a 20 54 68 65 72 65 20 61 72 65 20 75 70 20 74  * There are up t
6500: 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20 65 61  o 5 names for ea
6510: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65 54  ch column.  useT
6520: 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73 20 77  ype determines w
6530: 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73 20  hich.** name is 
6540: 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72 65 20  returned.  Here 
6550: 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a 2a  are the names:.*
6560: 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20 20 54  *.**    0      T
6570: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61  he column name a
6580: 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64  s it should be d
6590: 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f 75 74  isplayed for out
65a0: 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20 20 20  put.**    1     
65b0: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 6e 61   The datatype na
65c0: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  me for the colum
65d0: 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20 20 54  n.**    2      T
65e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
65f0: 61 74 61 62 61 73 65 20 74 68 61 74 20 74 68 65  atabase that the
6600: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
6610: 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20 20  from.**    3    
6620: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
6630: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
6640: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
6650: 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20 20  from.**    4    
6660: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
6670: 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74  e table column t
6680: 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20 63  hat the result c
6690: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72  olumn derives fr
66a0: 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  om.**.** If the 
66b0: 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 61 20  result is not a 
66c0: 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72 65  simple column re
66d0: 66 65 72 65 6e 63 65 20 28 69 66 20 69 74 20 69  ference (if it i
66e0: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a  s an expression.
66f0: 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74  ** or a constant
6700: 29 20 74 68 65 6e 20 75 73 65 54 79 70 65 73 20  ) then useTypes 
6710: 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65 74 75  2, 3, and 4 retu
6720: 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74  rn NULL..*/.stat
6730: 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 63  ic const void *c
6740: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71 6c  olumnName(.  sql
6750: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
6760: 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f 6e  ,.  int N,.  con
6770: 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
6780: 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20 75  )(Mem*),.  int u
6790: 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e 73  seType.){.  cons
67a0: 74 20 76 6f 69 64 20 2a 72 65 74 20 3d 20 30 3b  t void *ret = 0;
67b0: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
67c0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 6e  be *)pStmt;.  in
67d0: 74 20 6e 3b 0a 20 20 0a 0a 20 20 69 66 28 20 70  t n;.  ..  if( p
67e0: 21 3d 30 20 29 7b 0a 20 20 20 20 6e 20 3d 20 73  !=0 ){.    n = s
67f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
6800: 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  unt(pStmt);.    
6810: 69 66 28 20 4e 3c 6e 20 26 26 20 4e 3e 3d 30 20  if( N<n && N>=0 
6820: 29 7b 0a 20 20 20 20 20 20 4e 20 2b 3d 20 75 73  ){.      N += us
6830: 65 54 79 70 65 2a 6e 3b 0a 20 20 20 20 20 20 73  eType*n;.      s
6840: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
6850: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
6860: 3b 0a 20 20 20 20 20 20 72 65 74 20 3d 20 78 46  ;.      ret = xF
6870: 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61 6d 65  unc(&p->aColName
6880: 5b 4e 5d 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  [N]);..      /* 
6890: 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76  A malloc may hav
68a0: 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65 20  e failed inside 
68b0: 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29 20 63  of the xFunc() c
68c0: 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20 20  all. If this.   
68d0: 20 20 20 2a 2a 20 69 73 20 74 68 65 20 63 61 73     ** is the cas
68e0: 65 2c 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c  e, clear the mal
68f0: 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61  locFailed flag a
6900: 6e 64 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a  nd return NULL..
6910: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
6920: 66 28 20 70 2d 3e 64 62 20 26 26 20 70 2d 3e 64  f( p->db && p->d
6930: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
6940: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 64 62  ){.        p->db
6950: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
6960: 20 30 3b 0a 20 20 20 20 20 20 20 20 72 65 74 20   0;.        ret 
6970: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
6980: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
6990: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
69a0: 74 65 78 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  tex);.    }.  }.
69b0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a    return ret;.}.
69c0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
69d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74  e name of the Nt
69e0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
69f0: 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75 72  result set retur
6a00: 6e 65 64 20 62 79 20 53 51 4c 0a 2a 2a 20 73 74  ned by SQL.** st
6a10: 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a  atement pStmt..*
6a20: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
6a30: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
6a40: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
6a50: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
6a60: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
6a70: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
6a80: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
6a90: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
6aa0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f  3_value_text, CO
6ab0: 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23  LNAME_NAME);.}.#
6ac0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6ad0: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
6ae0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
6af0: 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74  umn_name16(sqlit
6b00: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6b10: 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e  int N){.  return
6b20: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20   columnName(.   
6b30: 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f     pStmt, N, (co
6b40: 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d  nst void*(*)(Mem
6b50: 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  *))sqlite3_value
6b60: 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45  _text16, COLNAME
6b70: 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 65 6e 64 69 66  _NAME);.}.#endif
6b80: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 72 61 69  ../*.** Constrai
6b90: 6e 74 3a 20 20 49 66 20 79 6f 75 20 68 61 76 65  nt:  If you have
6ba0: 20 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d   ENABLE_COLUMN_M
6bb0: 45 54 41 44 41 54 41 20 74 68 65 6e 20 79 6f 75  ETADATA then you
6bc0: 20 6d 75 73 74 0a 2a 2a 20 6e 6f 74 20 64 65 66   must.** not def
6bd0: 69 6e 65 20 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ine OMIT_DECLTYP
6be0: 45 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  E..*/.#if define
6bf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6c00: 43 4c 54 59 50 45 29 20 26 26 20 64 65 66 69 6e  CLTYPE) && defin
6c10: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
6c20: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
6c30: 29 0a 23 20 65 72 72 6f 72 20 22 4d 75 73 74 20  ).# error "Must 
6c40: 6e 6f 74 20 64 65 66 69 6e 65 20 62 6f 74 68 20  not define both 
6c50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
6c60: 54 59 50 45 20 5c 0a 20 20 20 20 20 20 20 20 20  TYPE \.         
6c70: 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  and SQLITE_ENABL
6c80: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
6c90: 41 22 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  A".#endif..#ifnd
6ca0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
6cb0: 45 43 4c 54 59 50 45 0a 2f 2a 0a 2a 2a 20 52 65  ECLTYPE./*.** Re
6cc0: 74 75 72 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  turn the column 
6cd0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65  declaration type
6ce0: 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29   (if applicable)
6cf0: 20 6f 66 20 74 68 65 20 27 69 27 74 68 20 63 6f   of the 'i'th co
6d00: 6c 75 6d 6e 0a 2a 2a 20 6f 66 20 74 68 65 20 72  lumn.** of the r
6d10: 65 73 75 6c 74 20 73 65 74 20 6f 66 20 53 51 4c  esult set of SQL
6d20: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
6d30: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
6d40: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
6d50: 64 65 63 6c 74 79 70 65 28 73 71 6c 69 74 65 33  decltype(sqlite3
6d60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6d70: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6d80: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6d90: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6da0: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
6db0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6dc0: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43  ext, COLNAME_DEC
6dd0: 4c 54 59 50 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  LTYPE);.}.#ifnde
6de0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
6df0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
6e00: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
6e10: 65 63 6c 74 79 70 65 31 36 28 73 71 6c 69 74 65  ecltype16(sqlite
6e20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
6e30: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
6e40: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
6e50: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
6e60: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
6e70: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
6e80: 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f  text16, COLNAME_
6e90: 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a 23 65 6e  DECLTYPE);.}.#en
6ea0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
6eb0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64  IT_UTF16 */.#end
6ec0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
6ed0: 54 5f 44 45 43 4c 54 59 50 45 20 2a 2f 0a 0a 23  T_DECLTYPE */..#
6ee0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
6ef0: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
6f00: 41 54 41 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  ATA./*.** Return
6f10: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6f20: 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 77   database from w
6f30: 68 69 63 68 20 61 20 72 65 73 75 6c 74 20 63 6f  hich a result co
6f40: 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a  lumn derives..**
6f50: 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
6f60: 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
6f70: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
6f80: 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74  ression or const
6f90: 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69  ant or.** anythi
6fa0: 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20 69 73  ng else which is
6fb0: 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69 67 75 6f   not an unabiguo
6fc0: 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  us reference to 
6fd0: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  a database colum
6fe0: 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
6ff0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
7000: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73  _database_name(s
7010: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7020: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
7030: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
7040: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
7050: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
7060: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
7070: 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41  alue_text, COLNA
7080: 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a  ME_DATABASE);.}.
7090: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
70a0: 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20  MIT_UTF16.const 
70b0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
70c0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
70d0: 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  me16(sqlite3_stm
70e0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
70f0: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
7100: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
7110: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
7120: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
7130: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
7140: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42  6, COLNAME_DATAB
7150: 41 53 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  ASE);.}.#endif /
7160: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
7170: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  F16 */../*.** Re
7180: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
7190: 20 74 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20   the table from 
71a0: 77 68 69 63 68 20 61 20 72 65 73 75 6c 74 20 63  which a result c
71b0: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a  olumn derives..*
71c0: 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e  * NULL is return
71d0: 65 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  ed if the result
71e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78   column is an ex
71f0: 70 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73  pression or cons
7200: 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68  tant or.** anyth
7210: 69 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20 69  ing else which i
7220: 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69 67 75  s not an unabigu
7230: 6f 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f  ous reference to
7240: 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75   a database colu
7250: 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  mn..*/.const cha
7260: 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  r *sqlite3_colum
7270: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 71 6c  n_table_name(sql
7280: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7290: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
72a0: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
72b0: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
72c0: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
72d0: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
72e0: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
72f0: 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 69 66 6e 64  _TABLE);.}.#ifnd
7300: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7310: 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20  TF16.const void 
7320: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
7330: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28 73 71 6c  table_name16(sql
7340: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7350: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
7360: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
7370: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
7380: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
7390: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
73a0: 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41  ue_text16, COLNA
73b0: 4d 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 65 6e  ME_TABLE);.}.#en
73c0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
73d0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a  IT_UTF16 */../*.
73e0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
73f0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
7400: 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 77 68 69 63  column from whic
7410: 68 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  h a result colum
7420: 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55  n derives..** NU
7430: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
7440: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
7450: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
7460: 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74  sion or constant
7470: 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20   or.** anything 
7480: 65 6c 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f  else which is no
7490: 74 20 61 6e 20 75 6e 61 62 69 67 75 6f 75 73 20  t an unabiguous 
74a0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64  reference to a d
74b0: 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a  atabase column..
74c0: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
74d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
74e0: 69 67 69 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65  igin_name(sqlite
74f0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
7500: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
7510: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
7520: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
7530: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
7540: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
7550: 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f  text, COLNAME_CO
7560: 4c 55 4d 4e 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  LUMN);.}.#ifndef
7570: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7580: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
7590: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
75a0: 69 67 69 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69  igin_name16(sqli
75b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
75c0: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
75d0: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
75e0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
75f0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
7600: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
7610: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
7620: 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 65 6e  E_COLUMN);.}.#en
7630: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7640: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64  IT_UTF16 */.#end
7650: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
7660: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
7670: 41 54 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a  ATA */.../******
7680: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65  ********* sqlite
76a0: 33 5f 62 69 6e 64 5f 20 20 2a 2a 2a 2a 2a 2a 2a  3_bind_  *******
76b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
76c0: 2a 2a 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52 6f 75 74  ****.** .** Rout
76d0: 69 6e 65 73 20 75 73 65 64 20 74 6f 20 61 74 74  ines used to att
76e0: 61 63 68 20 76 61 6c 75 65 73 20 74 6f 20 77 69  ach values to wi
76f0: 6c 64 63 61 72 64 73 20 69 6e 20 61 20 63 6f 6d  ldcards in a com
7700: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
7710: 65 6e 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 55 6e  ent..*/./*.** Un
7720: 62 69 6e 64 20 74 68 65 20 76 61 6c 75 65 20 62  bind the value b
7730: 6f 75 6e 64 20 74 6f 20 76 61 72 69 61 62 6c 65  ound to variable
7740: 20 69 20 69 6e 20 76 69 72 74 75 61 6c 20 6d 61   i in virtual ma
7750: 63 68 69 6e 65 20 70 2e 20 54 68 69 73 20 69 73  chine p. This is
7760: 20 74 68 65 20 0a 2a 2a 20 74 68 65 20 73 61 6d   the .** the sam
7770: 65 20 61 73 20 62 69 6e 64 69 6e 67 20 61 20 4e  e as binding a N
7780: 55 4c 4c 20 76 61 6c 75 65 20 74 6f 20 74 68 65  ULL value to the
7790: 20 63 6f 6c 75 6d 6e 2e 20 49 66 20 74 68 65 20   column. If the 
77a0: 22 69 22 20 70 61 72 61 6d 65 74 65 72 20 69 73  "i" parameter is
77b0: 0a 2a 2a 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  .** out of range
77c0: 2c 20 74 68 65 6e 20 53 51 4c 49 54 45 5f 52 41  , then SQLITE_RA
77d0: 4e 47 45 20 69 73 20 72 65 74 75 72 6e 65 64 2e  NGE is returned.
77e0: 20 4f 74 68 65 77 69 73 65 20 53 51 4c 49 54 45   Othewise SQLITE
77f0: 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 65  _OK..**.** The e
7800: 72 72 6f 72 20 63 6f 64 65 20 73 74 6f 72 65 64  rror code stored
7810: 20 69 6e 20 64 61 74 61 62 61 73 65 20 70 2d 3e   in database p->
7820: 64 62 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  db is overwritte
7830: 6e 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72  n with the retur
7840: 6e 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 61 6e  n.** value in an
7850: 79 20 63 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69  y case..*/.stati
7860: 63 20 69 6e 74 20 76 64 62 65 55 6e 62 69 6e 64  c int vdbeUnbind
7870: 28 56 64 62 65 20 2a 70 2c 20 69 6e 74 20 69 29  (Vdbe *p, int i)
7880: 7b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20  {.  Mem *pVar;. 
7890: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e   if( p==0 || p->
78a0: 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49  magic!=VDBE_MAGI
78b0: 43 5f 52 55 4e 20 7c 7c 20 70 2d 3e 70 63 3e 3d  C_RUN || p->pc>=
78c0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 20 29  0 ){.    if( p )
78d0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d   sqlite3Error(p-
78e0: 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4d 49 53 55  >db, SQLITE_MISU
78f0: 53 45 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  SE, 0);.    retu
7900: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
7910: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 3c 31 20  ;.  }.  if( i<1 
7920: 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20 29 7b 0a  || i>p->nVar ){.
7930: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7940: 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 52  (p->db, SQLITE_R
7950: 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20 20 72 65  ANGE, 0);.    re
7960: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47  turn SQLITE_RANG
7970: 45 3b 0a 20 20 7d 0a 20 20 69 2d 2d 3b 0a 20 20  E;.  }.  i--;.  
7980: 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b  pVar = &p->aVar[
7990: 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  i];.  sqlite3Vdb
79a0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 56 61 72  eMemRelease(pVar
79b0: 29 3b 0a 20 20 70 56 61 72 2d 3e 66 6c 61 67 73  );.  pVar->flags
79c0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 73   = MEM_Null;.  s
79d0: 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64  qlite3Error(p->d
79e0: 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29  b, SQLITE_OK, 0)
79f0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
7a00: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42  E_OK;.}../*.** B
7a10: 69 6e 64 20 61 20 74 65 78 74 20 6f 72 20 42 4c  ind a text or BL
7a20: 4f 42 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  OB value..*/.sta
7a30: 74 69 63 20 69 6e 74 20 62 69 6e 64 54 65 78 74  tic int bindText
7a40: 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  (.  sqlite3_stmt
7a50: 20 2a 70 53 74 6d 74 2c 20 20 20 2f 2a 20 54 68   *pStmt,   /* Th
7a60: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62  e statement to b
7a70: 69 6e 64 20 61 67 61 69 6e 73 74 20 2a 2f 0a 20  ind against */. 
7a80: 20 69 6e 74 20 69 2c 20 20 20 20 20 20 20 20 20   int i,         
7a90: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
7aa0: 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   of the paramete
7ab0: 72 20 74 6f 20 62 69 6e 64 20 2a 2f 0a 20 20 63  r to bind */.  c
7ac0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61  onst void *zData
7ad0: 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ,     /* Pointer
7ae0: 20 74 6f 20 74 68 65 20 64 61 74 61 20 74 6f 20   to the data to 
7af0: 62 65 20 62 6f 75 6e 64 20 2a 2f 0a 20 20 69 6e  be bound */.  in
7b00: 74 20 6e 44 61 74 61 2c 20 20 20 20 20 20 20 20  t nData,        
7b10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7b20: 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
7b30: 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f 0a 20  to be bound */. 
7b40: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
7b50: 69 64 2a 29 2c 20 20 20 2f 2a 20 44 65 73 74 72  id*),   /* Destr
7b60: 75 63 74 6f 72 20 66 6f 72 20 74 68 65 20 64 61  uctor for the da
7b70: 74 61 20 2a 2f 0a 20 20 69 6e 74 20 65 6e 63 6f  ta */.  int enco
7b80: 64 69 6e 67 20 20 20 20 20 20 20 20 20 20 20 2f  ding           /
7b90: 2a 20 45 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74  * Encoding for t
7ba0: 68 65 20 64 61 74 61 20 2a 2f 0a 29 7b 0a 20 20  he data */.){.  
7bb0: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
7bc0: 2a 29 70 53 74 6d 74 3b 0a 20 20 4d 65 6d 20 2a  *)pStmt;.  Mem *
7bd0: 70 56 61 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  pVar;.  int rc;.
7be0: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20  .  if( p==0 ){. 
7bf0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7c00: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 73  _MISUSE;.  }.  s
7c10: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7c20: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
7c30: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
7c40: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
7c50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
7c60: 26 20 7a 44 61 74 61 21 3d 30 20 29 7b 0a 20 20  & zData!=0 ){.  
7c70: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
7c80: 72 5b 69 2d 31 5d 3b 0a 20 20 20 20 72 63 20 3d  r[i-1];.    rc =
7c90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7ca0: 65 74 53 74 72 28 70 56 61 72 2c 20 7a 44 61 74  etStr(pVar, zDat
7cb0: 61 2c 20 6e 44 61 74 61 2c 20 65 6e 63 6f 64 69  a, nData, encodi
7cc0: 6e 67 2c 20 78 44 65 6c 29 3b 0a 20 20 20 20 69  ng, xDel);.    i
7cd0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7ce0: 20 26 26 20 65 6e 63 6f 64 69 6e 67 21 3d 30 20   && encoding!=0 
7cf0: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
7d00: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
7d10: 6e 63 6f 64 69 6e 67 28 70 56 61 72 2c 20 45 4e  ncoding(pVar, EN
7d20: 43 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 7d  C(p->db));.    }
7d30: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
7d40: 72 28 70 2d 3e 64 62 2c 20 72 63 2c 20 30 29 3b  r(p->db, rc, 0);
7d50: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
7d60: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
7d70: 72 63 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  rc);.  }.  sqlit
7d80: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
7d90: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
7da0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f  return rc;.}.../
7db0: 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 62 6c 6f 62  *.** Bind a blob
7dc0: 20 76 61 6c 75 65 20 74 6f 20 61 6e 20 53 51 4c   value to an SQL
7dd0: 20 73 74 61 74 65 6d 65 6e 74 20 76 61 72 69 61   statement varia
7de0: 62 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ble..*/.int sqli
7df0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  te3_bind_blob(. 
7e00: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
7e10: 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20  Stmt, .  int i, 
7e20: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
7e30: 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61  Data, .  int nDa
7e40: 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44  ta, .  void (*xD
7e50: 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  el)(void*).){.  
7e60: 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28  return bindText(
7e70: 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c  pStmt, i, zData,
7e80: 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29   nData, xDel, 0)
7e90: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
7ea0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 71 6c 69  bind_double(sqli
7eb0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7ec0: 20 69 6e 74 20 69 2c 20 64 6f 75 62 6c 65 20 72   int i, double r
7ed0: 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63  Value){.  int rc
7ee0: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
7ef0: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 73  dbe *)pStmt;.  s
7f00: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7f10: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
7f20: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
7f30: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
7f40: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
7f50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
7f60: 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70  eMemSetDouble(&p
7f70: 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56 61  ->aVar[i-1], rVa
7f80: 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  lue);.  }.  sqli
7f90: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
7fa0: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
7fb0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e   return rc;.}.in
7fc0: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  t sqlite3_bind_i
7fd0: 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  nt(sqlite3_stmt 
7fe0: 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20 69  *p, int i, int i
7ff0: 56 61 6c 75 65 29 7b 0a 20 20 72 65 74 75 72 6e  Value){.  return
8000: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
8010: 74 36 34 28 70 2c 20 69 2c 20 28 69 36 34 29 69  t64(p, i, (i64)i
8020: 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20 73 71  Value);.}.int sq
8030: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
8040: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
8050: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c  Stmt, int i, sql
8060: 69 74 65 5f 69 6e 74 36 34 20 69 56 61 6c 75 65  ite_int64 iValue
8070: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56  ){.  int rc;.  V
8080: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a  dbe *p = (Vdbe *
8090: 29 70 53 74 6d 74 3b 0a 20 20 73 71 6c 69 74 65  )pStmt;.  sqlite
80a0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d  3_mutex_enter(p-
80b0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  >db->mutex);.  r
80c0: 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70  c = vdbeUnbind(p
80d0: 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , i);.  if( rc==
80e0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
80f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8100: 65 74 49 6e 74 36 34 28 26 70 2d 3e 61 56 61 72  etInt64(&p->aVar
8110: 5b 69 2d 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a  [i-1], iValue);.
8120: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
8130: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
8140: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
8150: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
8160: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71  te3_bind_null(sq
8170: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8180: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
8190: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
81a0: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
81b0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
81c0: 6e 74 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  nter(p->db->mute
81d0: 78 29 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55  x);.  rc = vdbeU
81e0: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 73  nbind(p, i);.  s
81f0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
8200: 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  ve(p->db->mutex)
8210: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
8220: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
8230: 64 5f 74 65 78 74 28 20 0a 20 20 73 71 6c 69 74  d_text( .  sqlit
8240: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
8250: 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e  .  int i, .  con
8260: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 2c 20  st char *zData, 
8270: 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20  .  int nData, . 
8280: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
8290: 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e  id*).){.  return
82a0: 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c   bindText(pStmt,
82b0: 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61   i, zData, nData
82c0: 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55  , xDel, SQLITE_U
82d0: 54 46 38 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20  TF8);.}.#ifndef 
82e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
82f0: 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  6.int sqlite3_bi
8300: 6e 64 5f 74 65 78 74 31 36 28 0a 20 20 73 71 6c  nd_text16(.  sql
8310: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8320: 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63  , .  int i, .  c
8330: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61  onst void *zData
8340: 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20  , .  int nData, 
8350: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
8360: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75  void*).){.  retu
8370: 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d  rn bindText(pStm
8380: 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61  t, i, zData, nDa
8390: 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45  ta, xDel, SQLITE
83a0: 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d  _UTF16NATIVE);.}
83b0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
83c0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
83d0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
83e0: 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73  _value(sqlite3_s
83f0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
8400: 69 2c 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  i, const sqlite3
8410: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b  _value *pValue){
8420: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62  .  int rc;.  Vdb
8430: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
8440: 53 74 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Stmt;.  sqlite3_
8450: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64  mutex_enter(p->d
8460: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20  b->mutex);.  rc 
8470: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
8480: 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  i);.  if( rc==SQ
8490: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
84a0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
84b0: 65 6d 43 6f 70 79 28 26 70 2d 3e 61 56 61 72 5b  emCopy(&p->aVar[
84c0: 69 2d 31 5d 2c 20 70 56 61 6c 75 65 29 3b 0a 20  i-1], pValue);. 
84d0: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
84e0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
84f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
8500: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 70 2d  angeEncoding(&p-
8510: 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 45 4e 43 28  >aVar[i-1], ENC(
8520: 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20 7d 0a 20  p->db));.    }. 
8530: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
8540: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
8550: 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  rc);.  sqlite3_m
8560: 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62  utex_leave(p->db
8570: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
8580: 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c  rn rc;.}.int sql
8590: 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
85a0: 6f 62 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  ob(sqlite3_stmt 
85b0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 69  *pStmt, int i, i
85c0: 6e 74 20 6e 29 7b 0a 20 20 69 6e 74 20 72 63 3b  nt n){.  int rc;
85d0: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
85e0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 73 71  be *)pStmt;.  sq
85f0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
8600: 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  r(p->db->mutex);
8610: 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69  .  rc = vdbeUnbi
8620: 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20  nd(p, i);.  if( 
8630: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
8640: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8650: 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 26  MemSetZeroBlob(&
8660: 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 6e 29  p->aVar[i-1], n)
8670: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
8680: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64  mutex_leave(p->d
8690: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
86a0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
86b0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
86c0: 65 72 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20  er of wildcards 
86d0: 74 68 61 74 20 63 61 6e 20 62 65 20 70 6f 74 65  that can be pote
86e0: 6e 74 69 61 6c 6c 79 20 62 6f 75 6e 64 20 74 6f  ntially bound to
86f0: 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  ..** This routin
8700: 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 73 75  e is added to su
8710: 70 70 6f 72 74 20 44 42 44 3a 3a 53 51 4c 69 74  pport DBD::SQLit
8720: 65 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  e.  .*/.int sqli
8730: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
8740: 65 72 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33  er_count(sqlite3
8750: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
8760: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
8770: 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72  *)pStmt;.  retur
8780: 6e 20 70 20 3f 20 70 2d 3e 6e 56 61 72 20 3a 20  n p ? p->nVar : 
8790: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61  0;.}../*.** Crea
87a0: 74 65 20 61 20 6d 61 70 70 69 6e 67 20 66 72 6f  te a mapping fro
87b0: 6d 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  m variable numbe
87c0: 72 73 20 74 6f 20 76 61 72 69 61 62 6c 65 20 6e  rs to variable n
87d0: 61 6d 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ames.** in the V
87e0: 64 62 65 2e 61 7a 56 61 72 5b 5d 20 61 72 72 61  dbe.azVar[] arra
87f0: 79 2c 20 69 66 20 73 75 63 68 20 61 20 6d 61 70  y, if such a map
8800: 70 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 61 6c  ping does not al
8810: 72 65 61 64 79 0a 2a 2a 20 65 78 69 73 74 2e 0a  ready.** exist..
8820: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63  */.static void c
8830: 72 65 61 74 65 56 61 72 4d 61 70 28 56 64 62 65  reateVarMap(Vdbe
8840: 20 2a 70 29 7b 0a 20 20 69 66 28 20 21 70 2d 3e   *p){.  if( !p->
8850: 6f 6b 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c  okVar ){.    sql
8860: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
8870: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
8880: 20 20 20 20 69 66 28 20 21 70 2d 3e 6f 6b 56 61      if( !p->okVa
8890: 72 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6a  r ){.      int j
88a0: 3b 0a 20 20 20 20 20 20 4f 70 20 2a 70 4f 70 3b  ;.      Op *pOp;
88b0: 0a 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20  .      for(j=0, 
88c0: 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20 6a 3c 70 2d  pOp=p->aOp; j<p-
88d0: 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70 4f 70 2b 2b  >nOp; j++, pOp++
88e0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
88f0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 56  Op->opcode==OP_V
8900: 61 72 69 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  ariable ){.     
8910: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
8920: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8930: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
8940: 20 20 20 20 20 20 20 20 70 2d 3e 61 7a 56 61 72          p->azVar
8950: 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f  [pOp->p1-1] = pO
8960: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20  p->p4.z;.       
8970: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
8980: 20 70 2d 3e 6f 6b 56 61 72 20 3d 20 31 3b 0a 20   p->okVar = 1;. 
8990: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
89a0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e  _mutex_leave(p->
89b0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
89c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
89d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77 69  the name of a wi
89e0: 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65 72  ldcard parameter
89f0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69  .  Return NULL i
8a00: 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 69  f the index.** i
8a10: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 6f  s out of range o
8a20: 72 20 69 66 20 74 68 65 20 77 69 6c 64 63 61 72  r if the wildcar
8a30: 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a  d is unnamed..**
8a40: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
8a50: 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38 2e 0a  s always UTF-8..
8a60: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
8a70: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
8a80: 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c 69 74  meter_name(sqlit
8a90: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
8aa0: 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a  int i){.  Vdbe *
8ab0: 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  p = (Vdbe*)pStmt
8ac0: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20  ;.  if( p==0 || 
8ad0: 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72  i<1 || i>p->nVar
8ae0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
8af0: 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 56 61  ;.  }.  createVa
8b00: 72 4d 61 70 28 70 29 3b 0a 20 20 72 65 74 75 72  rMap(p);.  retur
8b10: 6e 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31 5d 3b  n p->azVar[i-1];
8b20: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20  .}../*.** Given 
8b30: 61 20 77 69 6c 64 63 61 72 64 20 70 61 72 61 6d  a wildcard param
8b40: 65 74 65 72 20 6e 61 6d 65 2c 20 72 65 74 75 72  eter name, retur
8b50: 6e 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  n the index of t
8b60: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 77  he variable.** w
8b70: 69 74 68 20 74 68 61 74 20 6e 61 6d 65 2e 20 20  ith that name.  
8b80: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 76  If there is no v
8b90: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
8ba0: 20 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a 2a 20   given name,.** 
8bb0: 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74  return 0..*/.int
8bc0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
8bd0: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 73 71  rameter_index(sq
8be0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8bf0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  t, const char *z
8c00: 4e 61 6d 65 29 7b 0a 20 20 56 64 62 65 20 2a 70  Name){.  Vdbe *p
8c10: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
8c20: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
8c30: 70 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  p==0 ){.    retu
8c40: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61  rn 0;.  }.  crea
8c50: 74 65 56 61 72 4d 61 70 28 70 29 3b 20 0a 20 20  teVarMap(p); .  
8c60: 69 66 28 20 7a 4e 61 6d 65 20 29 7b 0a 20 20 20  if( zName ){.   
8c70: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
8c80: 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Var; i++){.     
8c90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
8ca0: 20 70 2d 3e 61 7a 56 61 72 5b 69 5d 3b 0a 20 20   p->azVar[i];.  
8cb0: 20 20 20 20 69 66 28 20 7a 20 26 26 20 73 74 72      if( z && str
8cc0: 63 6d 70 28 7a 2c 7a 4e 61 6d 65 29 3d 3d 30 20  cmp(z,zName)==0 
8cd0: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ){.        retur
8ce0: 6e 20 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20  n i+1;.      }. 
8cf0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
8d00: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  n 0;.}../*.** Tr
8d10: 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69  ansfer all bindi
8d20: 6e 67 73 20 66 72 6f 6d 20 74 68 65 20 66 69 72  ngs from the fir
8d30: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 76 65  st statement ove
8d40: 72 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 2e  r to the second.
8d50: 0a 2a 2a 20 49 66 20 74 68 65 20 74 77 6f 20 73  .** If the two s
8d60: 74 61 74 65 6d 65 6e 74 73 20 63 6f 6e 74 61 69  tatements contai
8d70: 6e 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75  n a different nu
8d80: 6d 62 65 72 20 6f 66 20 62 69 6e 64 69 6e 67 73  mber of bindings
8d90: 2c 20 74 68 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c  , then.** an SQL
8da0: 49 54 45 5f 45 52 52 4f 52 20 69 73 20 72 65 74  ITE_ERROR is ret
8db0: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
8dc0: 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
8dd0: 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
8de0: 73 74 6d 74 20 2a 70 46 72 6f 6d 53 74 6d 74 2c  stmt *pFromStmt,
8df0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
8e00: 54 6f 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20  ToStmt){.  Vdbe 
8e10: 2a 70 46 72 6f 6d 20 3d 20 28 56 64 62 65 2a 29  *pFrom = (Vdbe*)
8e20: 70 46 72 6f 6d 53 74 6d 74 3b 0a 20 20 56 64 62  pFromStmt;.  Vdb
8e30: 65 20 2a 70 54 6f 20 3d 20 28 56 64 62 65 2a 29  e *pTo = (Vdbe*)
8e40: 70 54 6f 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69  pToStmt;.  int i
8e50: 2c 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  , rc = SQLITE_OK
8e60: 3b 0a 20 20 69 66 28 20 28 70 46 72 6f 6d 2d 3e  ;.  if( (pFrom->
8e70: 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49  magic!=VDBE_MAGI
8e80: 43 5f 52 55 4e 20 26 26 20 70 46 72 6f 6d 2d 3e  C_RUN && pFrom->
8e90: 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49  magic!=VDBE_MAGI
8ea0: 43 5f 48 41 4c 54 29 0a 20 20 20 20 7c 7c 20 28  C_HALT).    || (
8eb0: 70 54 6f 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45  pTo->magic!=VDBE
8ec0: 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 54  _MAGIC_RUN && pT
8ed0: 6f 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d  o->magic!=VDBE_M
8ee0: 41 47 49 43 5f 48 41 4c 54 29 0a 20 20 20 20 7c  AGIC_HALT).    |
8ef0: 7c 20 70 54 6f 2d 3e 64 62 21 3d 70 46 72 6f 6d  | pTo->db!=pFrom
8f00: 2d 3e 64 62 20 29 7b 0a 20 20 20 20 72 65 74 75  ->db ){.    retu
8f10: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
8f20: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 46 72 6f  ;.  }.  if( pFro
8f30: 6d 2d 3e 6e 56 61 72 21 3d 70 54 6f 2d 3e 6e 56  m->nVar!=pTo->nV
8f40: 61 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ar ){.    return
8f50: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
8f60: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74   }.  sqlite3_mut
8f70: 65 78 5f 65 6e 74 65 72 28 70 54 6f 2d 3e 64 62  ex_enter(pTo->db
8f80: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72 28  ->mutex);.  for(
8f90: 69 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  i=0; rc==SQLITE_
8fa0: 4f 4b 20 26 26 20 69 3c 70 46 72 6f 6d 2d 3e 6e  OK && i<pFrom->n
8fb0: 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  Var; i++){.    s
8fc0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
8fd0: 65 28 26 70 54 6f 2d 3e 61 56 61 72 5b 69 5d 2c  e(&pTo->aVar[i],
8fe0: 20 26 70 46 72 6f 6d 2d 3e 61 56 61 72 5b 69 5d   &pFrom->aVar[i]
8ff0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
9000: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 54 6f  _mutex_leave(pTo
9010: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
9020: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
9030: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
9040: 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 72  ITE_NOMEM );.  r
9050: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
9060: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73 71  ** Return the sq
9070: 6c 69 74 65 33 2a 20 64 61 74 61 62 61 73 65 20  lite3* database 
9080: 68 61 6e 64 6c 65 20 74 6f 20 77 68 69 63 68 20  handle to which 
9090: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
90a0: 74 65 6d 65 6e 74 20 67 69 76 65 6e 0a 2a 2a 20  tement given.** 
90b0: 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  in the argument 
90c0: 62 65 6c 6f 6e 67 73 2e 20 20 54 68 69 73 20 69  belongs.  This i
90d0: 73 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  s the same datab
90e0: 61 73 65 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ase handle that 
90f0: 77 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  was.** the first
9100: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
9110: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
9120: 28 29 20 74 68 61 74 20 77 61 73 20 75 73 65 64  () that was used
9130: 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 74 68   to create.** th
9140: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74  e statement in t
9150: 68 65 20 66 69 72 73 74 20 70 6c 61 63 65 2e 0a  he first place..
9160: 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73 71 6c 69  */.sqlite3 *sqli
9170: 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71  te3_db_handle(sq
9180: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
9190: 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 70 53 74  t){.  return pSt
91a0: 6d 74 20 3f 20 28 28 56 64 62 65 2a 29 70 53 74  mt ? ((Vdbe*)pSt
91b0: 6d 74 29 2d 3e 64 62 20 3a 20 30 3b 0a 7d 0a     mt)->db : 0;.}.