/ Hex Artifact Content
Login

Artifact 25dd01c8b12978c14ec30e9a50666b23da767b27:


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 36 20  beapi.c,v 1.136 
01e0: 32 30 30 38 2f 30 37 2f 32 38 20 31 39 3a 33 34  2008/07/28 19:34
01f0: 3a 35 34 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :54 drh Exp $.*/
0200: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
0210: 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  eInt.h".#include
0220: 20 22 76 64 62 65 49 6e 74 2e 68 22 0a 0a 23 69   "vdbeInt.h"..#i
0230: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
0240: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
0250: 4d 45 4e 54 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  MENT./*.** The f
0260: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
0270: 72 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e  re contains poin
0280: 74 65 72 73 20 74 6f 20 74 68 65 20 65 6e 64 20  ters to the end 
0290: 70 6f 69 6e 74 73 20 6f 66 20 61 0a 2a 2a 20 64  points of a.** d
02a0: 6f 75 62 6c 79 2d 6c 69 6e 6b 65 64 20 6c 69 73  oubly-linked lis
02b0: 74 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  t of all compile
02c0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  d SQL statements
02d0: 20 74 68 61 74 20 6d 61 79 20 62 65 20 68 6f 6c   that may be hol
02e0: 64 69 6e 67 0a 2a 2a 20 62 75 66 66 65 72 73 20  ding.** buffers 
02f0: 65 6c 69 67 69 62 6c 65 20 66 6f 72 20 72 65 6c  eligible for rel
0300: 65 61 73 65 20 77 68 65 6e 20 74 68 65 20 73 71  ease when the sq
0310: 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
0320: 6d 6f 72 79 28 29 20 69 6e 74 65 72 66 61 63 65  mory() interface
0330: 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20   is.** invoked. 
0340: 41 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 6c  Access to this l
0350: 69 73 74 20 69 73 20 70 72 6f 74 65 63 74 65 64  ist is protected
0360: 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d   by the SQLITE_M
0370: 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32  UTEX_STATIC_LRU2
0380: 0a 2a 2a 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  .** mutex..**.**
0390: 20 53 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   Statements are 
03a0: 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  added to the end
03b0: 20 6f 66 20 74 68 69 73 20 6c 69 73 74 20 77 68   of this list wh
03c0: 65 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  en sqlite3_reset
03d0: 28 29 20 69 73 0a 2a 2a 20 63 61 6c 6c 65 64 2e  () is.** called.
03e0: 20 54 68 65 79 20 61 72 65 20 72 65 6d 6f 76 65   They are remove
03f0: 64 20 65 69 74 68 65 72 20 77 68 65 6e 20 73 71  d either when sq
0400: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 6f 72 20  lite3_step() or 
0410: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
0420: 28 29 0a 2a 2a 20 69 73 20 63 61 6c 6c 65 64 2e  ().** is called.
0430: 20 57 68 65 6e 20 73 74 61 74 65 6d 65 6e 74 73   When statements
0440: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
0450: 69 73 20 6c 69 73 74 2c 20 74 68 65 20 61 73 73  is list, the ass
0460: 6f 63 69 61 74 65 64 20 0a 2a 2a 20 72 65 67 69  ociated .** regi
0470: 73 74 65 72 20 61 72 72 61 79 20 28 70 2d 3e 61  ster array (p->a
0480: 4d 65 6d 5b 31 2e 2e 70 2d 3e 6e 4d 65 6d 5d 29  Mem[1..p->nMem])
0490: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 64 79 6e   may contain dyn
04a0: 61 6d 69 63 20 62 75 66 66 65 72 73 20 74 68 61  amic buffers tha
04b0: 74 0a 2a 2a 20 63 61 6e 20 62 65 20 66 72 65 65  t.** can be free
04c0: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 56  d using sqlite3V
04d0: 64 62 65 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  dbeReleaseMemory
04e0: 28 29 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 73  ()..**.** When s
04f0: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61 64  tatements are ad
0500: 64 65 64 20 6f 72 20 72 65 6d 6f 76 65 64 20 66  ded or removed f
0510: 72 6f 6d 20 74 68 69 73 20 6c 69 73 74 2c 20 74  rom this list, t
0520: 68 65 20 6d 75 74 65 78 0a 2a 2a 20 61 73 73 6f  he mutex.** asso
0530: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
0540: 56 64 62 65 20 62 65 69 6e 67 20 61 64 64 65 64  Vdbe being added
0550: 20 6f 72 20 72 65 6d 6f 76 65 64 20 28 56 64 62   or removed (Vdb
0560: 65 2e 64 62 2d 3e 6d 75 74 65 78 29 20 69 73 0a  e.db->mutex) is.
0570: 2a 2a 20 61 6c 72 65 61 64 79 20 68 65 6c 64 2e  ** already held.
0580: 20 54 68 65 20 4c 52 55 32 20 6d 75 74 65 78 20   The LRU2 mutex 
0590: 69 73 20 74 68 65 6e 20 6f 62 74 61 69 6e 65 64  is then obtained
05a0: 2c 20 62 6c 6f 63 6b 69 6e 67 20 69 66 20 6e 65  , blocking if ne
05b0: 63 65 73 73 61 72 79 2c 0a 2a 2a 20 74 68 65 20  cessary,.** the 
05c0: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
05d0: 74 65 72 73 20 6d 61 6e 69 70 75 6c 61 74 65 64  ters manipulated
05e0: 20 61 6e 64 20 74 68 65 20 4c 52 55 32 20 6d 75   and the LRU2 mu
05f0: 74 65 78 20 72 65 6c 69 6e 71 75 69 73 68 65 64  tex relinquished
0600: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 61 74  ..*/.struct Stat
0610: 65 6d 65 6e 74 4c 72 75 4c 69 73 74 20 7b 0a 20  ementLruList {. 
0620: 20 56 64 62 65 20 2a 70 46 69 72 73 74 3b 0a 20   Vdbe *pFirst;. 
0630: 20 56 64 62 65 20 2a 70 4c 61 73 74 3b 0a 7d 3b   Vdbe *pLast;.};
0640: 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 53  .static struct S
0650: 74 61 74 65 6d 65 6e 74 4c 72 75 4c 69 73 74 20  tatementLruList 
0660: 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d  sqlite3LruStatem
0670: 65 6e 74 73 3b 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  ents;../*.** Che
0680: 63 6b 20 74 68 61 74 20 74 68 65 20 6c 69 73 74  ck that the list
0690: 20 6c 6f 6f 6b 73 20 74 6f 20 62 65 20 69 6e 74   looks to be int
06a0: 65 72 6e 61 6c 6c 79 20 63 6f 6e 73 69 73 74 65  ernally consiste
06b0: 6e 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  nt. This is used
06c0: 0a 2a 2a 20 61 73 20 70 61 72 74 20 6f 66 20 61  .** as part of a
06d0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
06e0: 6d 65 6e 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ment as follows:
06f0: 0a 2a 2a 0a 2a 2a 20 20 20 61 73 73 65 72 74 28  .**.**   assert(
0700: 20 73 74 6d 74 4c 72 75 43 68 65 63 6b 28 29 20   stmtLruCheck() 
0710: 29 3b 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  );.*/.#ifndef ND
0720: 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20  EBUG.static int 
0730: 73 74 6d 74 4c 72 75 43 68 65 63 6b 28 29 7b 0a  stmtLruCheck(){.
0740: 20 20 56 64 62 65 20 2a 70 3b 0a 20 20 66 6f 72    Vdbe *p;.  for
0750: 28 70 3d 73 71 6c 69 74 65 33 4c 72 75 53 74 61  (p=sqlite3LruSta
0760: 74 65 6d 65 6e 74 73 2e 70 46 69 72 73 74 3b 20  tements.pFirst; 
0770: 70 3b 20 70 3d 70 2d 3e 70 4c 72 75 4e 65 78 74  p; p=p->pLruNext
0780: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 70 2d  ){.    assert(p-
0790: 3e 70 4c 72 75 4e 65 78 74 20 7c 7c 20 70 3d 3d  >pLruNext || p==
07a0: 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d  sqlite3LruStatem
07b0: 65 6e 74 73 2e 70 4c 61 73 74 29 3b 0a 20 20 20  ents.pLast);.   
07c0: 20 61 73 73 65 72 74 28 21 70 2d 3e 70 4c 72 75   assert(!p->pLru
07d0: 4e 65 78 74 20 7c 7c 20 70 2d 3e 70 4c 72 75 4e  Next || p->pLruN
07e0: 65 78 74 2d 3e 70 4c 72 75 50 72 65 76 3d 3d 70  ext->pLruPrev==p
07f0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 70 2d  );.    assert(p-
0800: 3e 70 4c 72 75 50 72 65 76 20 7c 7c 20 70 3d 3d  >pLruPrev || p==
0810: 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d  sqlite3LruStatem
0820: 65 6e 74 73 2e 70 46 69 72 73 74 29 3b 0a 20 20  ents.pFirst);.  
0830: 20 20 61 73 73 65 72 74 28 21 70 2d 3e 70 4c 72    assert(!p->pLr
0840: 75 50 72 65 76 20 7c 7c 20 70 2d 3e 70 4c 72 75  uPrev || p->pLru
0850: 50 72 65 76 2d 3e 70 4c 72 75 4e 65 78 74 3d 3d  Prev->pLruNext==
0860: 70 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  p);.  }.  return
0870: 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a   1;.}.#endif../*
0880: 0a 2a 2a 20 41 64 64 20 76 64 62 65 20 70 20 74  .** Add vdbe p t
0890: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
08a0: 20 73 74 61 74 65 6d 65 6e 74 20 6c 72 75 20 6c   statement lru l
08b0: 69 73 74 2e 20 49 74 20 69 73 20 61 73 73 75 6d  ist. It is assum
08c0: 65 64 20 74 68 61 74 0a 2a 2a 20 70 20 69 73 20  ed that.** p is 
08d0: 6e 6f 74 20 61 6c 72 65 61 64 79 20 70 61 72 74  not already part
08e0: 20 6f 66 20 74 68 65 20 6c 69 73 74 20 77 68 65   of the list whe
08f0: 6e 20 74 68 69 73 20 69 73 20 63 61 6c 6c 65 64  n this is called
0900: 2e 20 54 68 65 20 6c 72 75 20 6c 69 73 74 0a 2a  . The lru list.*
0910: 2a 20 69 73 20 70 72 6f 74 65 63 74 65 64 20 62  * is protected b
0920: 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 55 54  y the SQLITE_MUT
0930: 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 20 6d 75  EX_STATIC_LRU mu
0940: 74 65 78 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  tex..*/.static v
0950: 6f 69 64 20 73 74 6d 74 4c 72 75 41 64 64 28 56  oid stmtLruAdd(V
0960: 64 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74  dbe *p){.  sqlit
0970: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 73  e3_mutex_enter(s
0980: 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
0990: 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54  (SQLITE_MUTEX_ST
09a0: 41 54 49 43 5f 4c 52 55 32 29 29 3b 0a 0a 20 20  ATIC_LRU2));..  
09b0: 69 66 28 20 70 2d 3e 70 4c 72 75 50 72 65 76 20  if( p->pLruPrev 
09c0: 7c 7c 20 70 2d 3e 70 4c 72 75 4e 65 78 74 20 7c  || p->pLruNext |
09d0: 7c 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74  | sqlite3LruStat
09e0: 65 6d 65 6e 74 73 2e 70 46 69 72 73 74 3d 3d 70  ements.pFirst==p
09f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
0a00: 6d 75 74 65 78 5f 6c 65 61 76 65 28 73 71 6c 69  mutex_leave(sqli
0a10: 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51  te3MutexAlloc(SQ
0a20: 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49  LITE_MUTEX_STATI
0a30: 43 5f 4c 52 55 32 29 29 3b 0a 20 20 20 20 72 65  C_LRU2));.    re
0a40: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  turn;.  }..  ass
0a50: 65 72 74 28 20 73 74 6d 74 4c 72 75 43 68 65 63  ert( stmtLruChec
0a60: 6b 28 29 20 29 3b 0a 0a 20 20 69 66 28 20 21 73  k() );..  if( !s
0a70: 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65  qlite3LruStateme
0a80: 6e 74 73 2e 70 46 69 72 73 74 20 29 7b 0a 20 20  nts.pFirst ){.  
0a90: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
0aa0: 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74 73 2e  e3LruStatements.
0ab0: 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 73 71 6c  pLast );.    sql
0ac0: 69 74 65 33 4c 72 75 53 74 61 74 65 6d 65 6e 74  ite3LruStatement
0ad0: 73 2e 70 46 69 72 73 74 20 3d 20 70 3b 0a 20 20  s.pFirst = p;.  
0ae0: 20 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74    sqlite3LruStat
0af0: 65 6d 65 6e 74 73 2e 70 4c 61 73 74 20 3d 20 70  ements.pLast = p
0b00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
0b10: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 4c  ssert( !sqlite3L
0b20: 72 75 53 74 61 74 65 6d 65 6e 74 73 2e 70 4c 61  ruStatements.pLa
0b30: 73 74 2d 3e 70 4c 72 75 4e 65 78 74 20 29 3b 0a  st->pLruNext );.
0b40: 20 20 20 20 70 2d 3e 70 4c 72 75 50 72 65 76 20      p->pLruPrev 
0b50: 3d 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74  = sqlite3LruStat
0b60: 65 6d 65 6e 74 73 2e 70 4c 61 73 74 3b 0a 20 20  ements.pLast;.  
0b70: 20 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74    sqlite3LruStat
0b80: 65 6d 65 6e 74 73 2e 70 4c 61 73 74 2d 3e 70 4c  ements.pLast->pL
0b90: 72 75 4e 65 78 74 20 3d 20 70 3b 0a 20 20 20 20  ruNext = p;.    
0ba0: 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74 65 6d  sqlite3LruStatem
0bb0: 65 6e 74 73 2e 70 4c 61 73 74 20 3d 20 70 3b 0a  ents.pLast = p;.
0bc0: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 73    }..  assert( s
0bd0: 74 6d 74 4c 72 75 43 68 65 63 6b 28 29 20 29 3b  tmtLruCheck() );
0be0: 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ..  sqlite3_mute
0bf0: 78 5f 6c 65 61 76 65 28 73 71 6c 69 74 65 33 4d  x_leave(sqlite3M
0c00: 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45  utexAlloc(SQLITE
0c10: 5f 4d 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52  _MUTEX_STATIC_LR
0c20: 55 32 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  U2));.}../*.** A
0c30: 73 73 75 6d 69 6e 67 20 74 68 65 20 53 51 4c 49  ssuming the SQLI
0c40: 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49 43 5f  TE_MUTEX_STATIC_
0c50: 4c 52 55 32 20 6d 75 74 65 78 74 20 69 73 20 61  LRU2 mutext is a
0c60: 6c 72 65 61 64 79 20 68 65 6c 64 2c 20 72 65 6d  lready held, rem
0c70: 6f 76 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ove.** statement
0c80: 20 70 20 66 72 6f 6d 20 74 68 65 20 6c 65 61 73   p from the leas
0c90: 74 2d 72 65 63 65 6e 74 6c 79 2d 75 73 65 64 20  t-recently-used 
0ca0: 73 74 61 74 65 6d 65 6e 74 20 6c 69 73 74 2e 20  statement list. 
0cb0: 49 66 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  If the .** state
0cc0: 6d 65 6e 74 20 69 73 20 6e 6f 74 20 63 75 72 72  ment is not curr
0cd0: 65 6e 74 6c 79 20 70 61 72 74 20 6f 66 20 74 68  ently part of th
0ce0: 65 20 6c 69 73 74 2c 20 74 68 69 73 20 63 61 6c  e list, this cal
0cf0: 6c 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  l is a no-op..*/
0d00: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 6d  .static void stm
0d10: 74 4c 72 75 52 65 6d 6f 76 65 4e 6f 6d 75 74 65  tLruRemoveNomute
0d20: 78 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69 66  x(Vdbe *p){.  if
0d30: 28 20 70 2d 3e 70 4c 72 75 50 72 65 76 20 7c 7c  ( p->pLruPrev ||
0d40: 20 70 2d 3e 70 4c 72 75 4e 65 78 74 20 7c 7c 20   p->pLruNext || 
0d50: 70 3d 3d 73 71 6c 69 74 65 33 4c 72 75 53 74 61  p==sqlite3LruSta
0d60: 74 65 6d 65 6e 74 73 2e 70 46 69 72 73 74 20 29  tements.pFirst )
0d70: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 74  {.    assert( st
0d80: 6d 74 4c 72 75 43 68 65 63 6b 28 29 20 29 3b 0a  mtLruCheck() );.
0d90: 20 20 20 20 69 66 28 20 70 2d 3e 70 4c 72 75 4e      if( p->pLruN
0da0: 65 78 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  ext ){.      p->
0db0: 70 4c 72 75 4e 65 78 74 2d 3e 70 4c 72 75 50 72  pLruNext->pLruPr
0dc0: 65 76 20 3d 20 70 2d 3e 70 4c 72 75 50 72 65 76  ev = p->pLruPrev
0dd0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
0de0: 20 20 20 73 71 6c 69 74 65 33 4c 72 75 53 74 61     sqlite3LruSta
0df0: 74 65 6d 65 6e 74 73 2e 70 4c 61 73 74 20 3d 20  tements.pLast = 
0e00: 70 2d 3e 70 4c 72 75 50 72 65 76 3b 0a 20 20 20  p->pLruPrev;.   
0e10: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 4c   }.    if( p->pL
0e20: 72 75 50 72 65 76 20 29 7b 0a 20 20 20 20 20 20  ruPrev ){.      
0e30: 70 2d 3e 70 4c 72 75 50 72 65 76 2d 3e 70 4c 72  p->pLruPrev->pLr
0e40: 75 4e 65 78 74 20 3d 20 70 2d 3e 70 4c 72 75 4e  uNext = p->pLruN
0e50: 65 78 74 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ext;.    }else{.
0e60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4c 72 75        sqlite3Lru
0e70: 53 74 61 74 65 6d 65 6e 74 73 2e 70 46 69 72 73  Statements.pFirs
0e80: 74 20 3d 20 70 2d 3e 70 4c 72 75 4e 65 78 74 3b  t = p->pLruNext;
0e90: 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70 4c  .    }.    p->pL
0ea0: 72 75 4e 65 78 74 20 3d 20 30 3b 0a 20 20 20 20  ruNext = 0;.    
0eb0: 70 2d 3e 70 4c 72 75 50 72 65 76 20 3d 20 30 3b  p->pLruPrev = 0;
0ec0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 74 6d  .    assert( stm
0ed0: 74 4c 72 75 43 68 65 63 6b 28 29 20 29 3b 0a 20  tLruCheck() );. 
0ee0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75   }.}../*.** Assu
0ef0: 6d 69 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f  ming the SQLITE_
0f00: 4d 55 54 45 58 5f 53 54 41 54 49 43 5f 4c 52 55  MUTEX_STATIC_LRU
0f10: 32 20 6d 75 74 65 78 74 20 69 73 20 6e 6f 74 20  2 mutext is not 
0f20: 68 65 6c 64 2c 20 72 65 6d 6f 76 65 0a 2a 2a 20  held, remove.** 
0f30: 73 74 61 74 65 6d 65 6e 74 20 70 20 66 72 6f 6d  statement p from
0f40: 20 74 68 65 20 6c 65 61 73 74 2d 72 65 63 65 6e   the least-recen
0f50: 74 6c 79 2d 75 73 65 64 20 73 74 61 74 65 6d 65  tly-used stateme
0f60: 6e 74 20 6c 69 73 74 2e 20 49 66 20 74 68 65 20  nt list. If the 
0f70: 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73  .** statement is
0f80: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70   not currently p
0f90: 61 72 74 20 6f 66 20 74 68 65 20 6c 69 73 74 2c  art of the list,
0fa0: 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20 61 20   this call is a 
0fb0: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 73 74 61 74 69 63  no-op..*/.static
0fc0: 20 76 6f 69 64 20 73 74 6d 74 4c 72 75 52 65 6d   void stmtLruRem
0fd0: 6f 76 65 28 56 64 62 65 20 2a 70 29 7b 0a 20 20  ove(Vdbe *p){.  
0fe0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
0ff0: 74 65 72 28 73 71 6c 69 74 65 33 4d 75 74 65 78  ter(sqlite3Mutex
1000: 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54  Alloc(SQLITE_MUT
1010: 45 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29  EX_STATIC_LRU2))
1020: 3b 0a 20 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76  ;.  stmtLruRemov
1030: 65 4e 6f 6d 75 74 65 78 28 70 29 3b 0a 20 20 73  eNomutex(p);.  s
1040: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
1050: 76 65 28 73 71 6c 69 74 65 33 4d 75 74 65 78 41  ve(sqlite3MutexA
1060: 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54 45  lloc(SQLITE_MUTE
1070: 58 5f 53 54 41 54 49 43 5f 4c 52 55 32 29 29 3b  X_STATIC_LRU2));
1080: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
1090: 20 72 65 6c 65 61 73 65 20 6e 20 62 79 74 65 73   release n bytes
10a0: 20 6f 66 20 6d 65 6d 6f 72 79 20 62 79 20 66 72   of memory by fr
10b0: 65 65 69 6e 67 20 62 75 66 66 65 72 73 20 61 73  eeing buffers as
10c0: 73 6f 63 69 61 74 65 64 20 0a 2a 2a 20 77 69 74  sociated .** wit
10d0: 68 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 67  h the memory reg
10e0: 69 73 74 65 72 73 20 6f 66 20 63 75 72 72 65 6e  isters of curren
10f0: 74 6c 79 20 75 6e 75 73 65 64 20 76 64 62 65 73  tly unused vdbes
1100: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1110: 56 64 62 65 52 65 6c 65 61 73 65 4d 65 6d 6f 72  VdbeReleaseMemor
1120: 79 28 69 6e 74 20 6e 29 7b 0a 20 20 56 64 62 65  y(int n){.  Vdbe
1130: 20 2a 70 3b 0a 20 20 56 64 62 65 20 2a 70 4e 65   *p;.  Vdbe *pNe
1140: 78 74 3b 0a 20 20 69 6e 74 20 6e 46 72 65 65 20  xt;.  int nFree 
1150: 3d 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f  = 0;..  sqlite3_
1160: 6d 75 74 65 78 5f 65 6e 74 65 72 28 73 71 6c 69  mutex_enter(sqli
1170: 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51  te3MutexAlloc(SQ
1180: 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49  LITE_MUTEX_STATI
1190: 43 5f 4c 52 55 32 29 29 3b 0a 20 20 66 6f 72 28  C_LRU2));.  for(
11a0: 70 3d 73 71 6c 69 74 65 33 4c 72 75 53 74 61 74  p=sqlite3LruStat
11b0: 65 6d 65 6e 74 73 2e 70 46 69 72 73 74 3b 20 70  ements.pFirst; p
11c0: 20 26 26 20 6e 46 72 65 65 3c 6e 3b 20 70 3d 70   && nFree<n; p=p
11d0: 4e 65 78 74 29 7b 0a 20 20 20 20 70 4e 65 78 74  Next){.    pNext
11e0: 20 3d 20 70 2d 3e 70 4c 72 75 4e 65 78 74 3b 0a   = p->pLruNext;.
11f0: 0a 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  .    /* For each
1200: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
1210: 65 20 69 6e 20 74 68 65 20 6c 72 75 20 6c 69 73  e in the lru lis
1220: 74 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 62  t, attempt to ob
1230: 74 61 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20  tain the.    ** 
1240: 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62  associated datab
1250: 61 73 65 20 6d 75 74 65 78 2e 20 49 66 20 69 74  ase mutex. If it
1260: 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
1270: 6e 65 64 2c 20 63 6f 6e 74 69 6e 75 65 0a 20 20  ned, continue.  
1280: 20 20 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74    ** to the next
1290: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
12a0: 65 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  e. It is not pos
12b0: 73 69 62 6c 65 20 74 6f 20 62 6c 6f 63 6b 20 6f  sible to block o
12c0: 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
12d0: 61 62 61 73 65 20 6d 75 74 65 78 20 2d 20 74 68  abase mutex - th
12e0: 61 74 20 63 6f 75 6c 64 20 63 61 75 73 65 20 64  at could cause d
12f0: 65 61 64 6c 6f 63 6b 2e 0a 20 20 20 20 2a 2f 0a  eadlock..    */.
1300: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
1310: 4b 3d 3d 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  K==sqlite3_mutex
1320: 5f 74 72 79 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  _try(p->db->mute
1330: 78 29 20 29 7b 0a 20 20 20 20 20 20 6e 46 72 65  x) ){.      nFre
1340: 65 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  e += sqlite3Vdbe
1350: 52 65 6c 65 61 73 65 42 75 66 66 65 72 73 28 70  ReleaseBuffers(p
1360: 29 3b 0a 20 20 20 20 20 20 73 74 6d 74 4c 72 75  );.      stmtLru
1370: 52 65 6d 6f 76 65 4e 6f 6d 75 74 65 78 28 70 29  RemoveNomutex(p)
1380: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
1390: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64  mutex_leave(p->d
13a0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 7d  b->mutex);.    }
13b0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  .  }.  sqlite3_m
13c0: 75 74 65 78 5f 6c 65 61 76 65 28 73 71 6c 69 74  utex_leave(sqlit
13d0: 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c  e3MutexAlloc(SQL
13e0: 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49 43  ITE_MUTEX_STATIC
13f0: 5f 4c 52 55 32 29 29 3b 0a 0a 20 20 72 65 74 75  _LRU2));..  retu
1400: 72 6e 20 6e 46 72 65 65 3b 0a 7d 0a 0a 2f 2a 0a  rn nFree;.}../*.
1410: 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 52  ** Call sqlite3R
1420: 65 70 72 65 70 61 72 65 28 29 20 6f 6e 20 74 68  eprepare() on th
1430: 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 52 65 6d  e statement. Rem
1440: 6f 76 65 20 69 74 20 66 72 6f 6d 20 74 68 65 0a  ove it from the.
1450: 2a 2a 20 6c 72 75 20 6c 69 73 74 20 62 65 66 6f  ** lru list befo
1460: 72 65 20 64 6f 69 6e 67 20 73 6f 2c 20 61 73 20  re doing so, as 
1470: 52 65 70 72 65 70 61 72 65 28 29 20 77 69 6c 6c  Reprepare() will
1480: 20 66 72 65 65 20 61 6c 6c 20 74 68 65 0a 2a 2a   free all the.**
1490: 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
14a0: 20 62 75 66 66 65 72 73 20 61 6e 79 77 61 79 2e   buffers anyway.
14b0: 0a 2a 2f 0a 69 6e 74 20 76 64 62 65 52 65 70 72  .*/.int vdbeRepr
14c0: 65 70 61 72 65 28 56 64 62 65 20 2a 70 29 7b 0a  epare(Vdbe *p){.
14d0: 20 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76 65 28    stmtLruRemove(
14e0: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  p);.  return sql
14f0: 69 74 65 33 52 65 70 72 65 70 61 72 65 28 70 29  ite3Reprepare(p)
1500: 3b 0a 7d 0a 0a 23 65 6c 73 65 20 20 20 20 20 20  ;.}..#else      
1510: 20 2f 2a 20 21 53 51 4c 49 54 45 5f 45 4e 41 42   /* !SQLITE_ENAB
1520: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
1530: 4d 45 4e 54 20 2a 2f 0a 20 20 23 64 65 66 69 6e  MENT */.  #defin
1540: 65 20 73 74 6d 74 4c 72 75 52 65 6d 6f 76 65 28  e stmtLruRemove(
1550: 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 74 6d  x).  #define stm
1560: 74 4c 72 75 41 64 64 28 78 29 0a 20 20 23 64 65  tLruAdd(x).  #de
1570: 66 69 6e 65 20 76 64 62 65 52 65 70 72 65 70 61  fine vdbeReprepa
1580: 72 65 28 78 29 20 73 71 6c 69 74 65 33 52 65 70  re(x) sqlite3Rep
1590: 72 65 70 61 72 65 28 78 29 0a 23 65 6e 64 69 66  repare(x).#endif
15a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  .../*.** Return 
15b0: 54 52 55 45 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  TRUE (non-zero) 
15c0: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
15d0: 20 73 75 70 70 6c 69 65 64 20 61 73 20 61 6e 20   supplied as an 
15e0: 61 72 67 75 6d 65 6e 74 20 6e 65 65 64 73 0a 2a  argument needs.*
15f0: 2a 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c  * to be recompil
1600: 65 64 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74  ed.  A statement
1610: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 63   needs to be rec
1620: 6f 6d 70 69 6c 65 64 20 77 68 65 6e 65 76 65 72  ompiled whenever
1630: 20 74 68 65 0a 2a 2a 20 65 78 65 63 75 74 69 6f   the.** executio
1640: 6e 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 63 68  n environment ch
1650: 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20 74  anges in a way t
1660: 68 61 74 20 77 6f 75 6c 64 20 61 6c 74 65 72 20  hat would alter 
1670: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 74  the program.** t
1680: 68 61 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  hat sqlite3_prep
1690: 61 72 65 28 29 20 67 65 6e 65 72 61 74 65 73 2e  are() generates.
16a0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69    For example, i
16b0: 66 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  f new functions 
16c0: 6f 72 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  or.** collating 
16d0: 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 72 65  sequences are re
16e0: 67 69 73 74 65 72 65 64 20 6f 72 20 69 66 20 61  gistered or if a
16f0: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 66 75 6e  n authorizer fun
1700: 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 61 64 64 65  ction is.** adde
1710: 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 0a 2a 2f  d or changed..*/
1720: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 70  .int sqlite3_exp
1730: 69 72 65 64 28 73 71 6c 69 74 65 33 5f 73 74 6d  ired(sqlite3_stm
1740: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
1750: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
1760: 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 3d  tmt;.  return p=
1770: 3d 30 20 7c 7c 20 70 2d 3e 65 78 70 69 72 65 64  =0 || p->expired
1780: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  ;.}../*.** The f
1790: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
17a0: 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74   destroys a virt
17b0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74  ual machine that
17c0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
17d0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  * the sqlite3_co
17e0: 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e  mpile() routine.
17f0: 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74   The integer ret
1800: 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49  urned is an SQLI
1810: 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66  TE_.** success/f
1820: 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74  ailure code that
1830: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72   describes the r
1840: 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69  esult of executi
1850: 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ng the virtual.*
1860: 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a  * machine..**.**
1870: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
1880: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
1890: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
18a0: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
18b0: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
18c0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
18d0: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
18e0: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
18f0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1900: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
1910: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  tmt){.  int rc;.
1920: 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29    if( pStmt==0 )
1930: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1940: 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  E_OK;.  }else{. 
1950: 20 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64     Vdbe *v = (Vd
1960: 62 65 2a 29 70 53 74 6d 74 3b 0a 23 69 66 6e 64  be*)pStmt;.#ifnd
1970: 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
1980: 4e 4f 4f 50 0a 20 20 20 20 73 71 6c 69 74 65 33  NOOP.    sqlite3
1990: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 20 3d 20  _mutex *mutex = 
19a0: 76 2d 3e 64 62 2d 3e 6d 75 74 65 78 3b 0a 23 65  v->db->mutex;.#e
19b0: 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
19c0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 75 74  _mutex_enter(mut
19d0: 65 78 29 3b 0a 20 20 20 20 73 74 6d 74 4c 72 75  ex);.    stmtLru
19e0: 52 65 6d 6f 76 65 28 76 29 3b 0a 20 20 20 20 72  Remove(v);.    r
19f0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
1a00: 69 6e 61 6c 69 7a 65 28 76 29 3b 0a 20 20 20 20  inalize(v);.    
1a10: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
1a20: 61 76 65 28 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  ave(mutex);.  }.
1a30: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
1a40: 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20  /*.** Terminate 
1a50: 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63  the current exec
1a60: 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ution of an SQL 
1a70: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
1a80: 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74  set it.** back t
1a90: 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73  o its starting s
1aa0: 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20  tate so that it 
1ab0: 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41  can be reused. A
1ac0: 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72   success code fr
1ad0: 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20  om.** the prior 
1ae0: 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74  execution is ret
1af0: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  urned..**.** Thi
1b00: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
1b10: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
1b20: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
1b30: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
1b40: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
1b50: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
1b60: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
1b70: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
1b80: 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33  e3_reset(sqlite3
1b90: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
1ba0: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70   int rc;.  if( p
1bb0: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72  Stmt==0 ){.    r
1bc0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
1bd0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
1be0: 20 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *v = (Vdbe*)pSt
1bf0: 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  mt;.    sqlite3_
1c00: 6d 75 74 65 78 5f 65 6e 74 65 72 28 76 2d 3e 64  mutex_enter(v->d
1c10: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 72  b->mutex);.    r
1c20: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
1c30: 65 73 65 74 28 76 2c 20 31 29 3b 0a 20 20 20 20  eset(v, 1);.    
1c40: 73 74 6d 74 4c 72 75 41 64 64 28 76 29 3b 0a 20  stmtLruAdd(v);. 
1c50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61     sqlite3VdbeMa
1c60: 6b 65 52 65 61 64 79 28 76 2c 20 2d 31 2c 20 30  keReady(v, -1, 0
1c70: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 61 73 73  , 0, 0);.    ass
1c80: 65 72 74 28 20 28 72 63 20 26 20 28 76 2d 3e 64  ert( (rc & (v->d
1c90: 62 2d 3e 65 72 72 4d 61 73 6b 29 29 3d 3d 72 63  b->errMask))==rc
1ca0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   );.    sqlite3_
1cb0: 6d 75 74 65 78 5f 6c 65 61 76 65 28 76 2d 3e 64  mutex_leave(v->d
1cc0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20  b->mutex);.  }. 
1cd0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
1ce0: 2a 0a 2a 2a 20 53 65 74 20 61 6c 6c 20 74 68 65  *.** Set all the
1cf0: 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 20 74   parameters in t
1d00: 68 65 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20  he compiled SQL 
1d10: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 4e 55 4c  statement to NUL
1d20: 4c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  L..*/.int sqlite
1d30: 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
1d40: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
1d50: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  Stmt){.  int i;.
1d60: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
1d70: 45 5f 4f 4b 3b 0a 20 20 56 64 62 65 20 2a 70 20  E_OK;.  Vdbe *p 
1d80: 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a  = (Vdbe*)pStmt;.
1d90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
1da0: 55 54 45 58 5f 4e 4f 4f 50 0a 20 20 73 71 6c 69  UTEX_NOOP.  sqli
1db0: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
1dc0: 20 3d 20 28 28 56 64 62 65 2a 29 70 53 74 6d 74   = ((Vdbe*)pStmt
1dd0: 29 2d 3e 64 62 2d 3e 6d 75 74 65 78 3b 0a 23 65  )->db->mutex;.#e
1de0: 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ndif.  sqlite3_m
1df0: 75 74 65 78 5f 65 6e 74 65 72 28 6d 75 74 65 78  utex_enter(mutex
1e00: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
1e10: 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a 20  p->nVar; i++){. 
1e20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1e30: 6d 52 65 6c 65 61 73 65 28 26 70 2d 3e 61 56 61  mRelease(&p->aVa
1e40: 72 5b 69 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 56  r[i]);.    p->aV
1e50: 61 72 5b 69 5d 2e 66 6c 61 67 73 20 3d 20 4d 45  ar[i].flags = ME
1e60: 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a 20 20 73 71  M_Null;.  }.  sq
1e70: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
1e80: 65 28 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  e(mutex);.  retu
1e90: 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a  rn rc;.}.../****
1ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eb0: 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33  ******** sqlite3
1ec0: 5f 76 61 6c 75 65 5f 20 20 2a 2a 2a 2a 2a 2a 2a  _value_  *******
1ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ee0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
1ef0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e  following routin
1f00: 65 73 20 65 78 74 72 61 63 74 20 69 6e 66 6f 72  es extract infor
1f10: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 4d 65  mation from a Me
1f20: 6d 20 6f 72 20 73 71 6c 69 74 65 33 5f 76 61 6c  m or sqlite3_val
1f30: 75 65 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ue.** structure.
1f40: 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  .*/.const void *
1f50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
1f60: 6f 62 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ob(sqlite3_value
1f70: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
1f80: 70 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  p = (Mem*)pVal;.
1f90: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
1fa0: 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
1fb0: 74 72 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  tr) ){.    sqlit
1fc0: 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
1fd0: 6c 6f 62 28 70 29 3b 0a 20 20 20 20 70 2d 3e 66  lob(p);.    p->f
1fe0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72  lags &= ~MEM_Str
1ff0: 3b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73 20 7c  ;.    p->flags |
2000: 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 20 20  = MEM_Blob;.    
2010: 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 20 20 7d  return p->z;.  }
2020: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
2030: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2040: 65 78 74 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 7d  ext(pVal);.  }.}
2050: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2060: 75 65 5f 62 79 74 65 73 28 73 71 6c 69 74 65 33  ue_bytes(sqlite3
2070: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
2080: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
2090: 61 6c 75 65 42 79 74 65 73 28 70 56 61 6c 2c 20  alueBytes(pVal, 
20a0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a  SQLITE_UTF8);.}.
20b0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
20c0: 65 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  e_bytes16(sqlite
20d0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
20e0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
20f0: 56 61 6c 75 65 42 79 74 65 73 28 70 56 61 6c 2c  ValueBytes(pVal,
2100: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
2110: 49 56 45 29 3b 0a 7d 0a 64 6f 75 62 6c 65 20 73  IVE);.}.double s
2120: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
2130: 62 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ble(sqlite3_valu
2140: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75  e *pVal){.  retu
2150: 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65 52 65  rn sqlite3VdbeRe
2160: 61 6c 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56  alValue((Mem*)pV
2170: 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  al);.}.int sqlit
2180: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 73 71 6c  e3_value_int(sql
2190: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
21a0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
21b0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
21c0: 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 73  (Mem*)pVal);.}.s
21d0: 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69  qlite_int64 sqli
21e0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
21f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2200: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  Val){.  return s
2210: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
2220: 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a  ue((Mem*)pVal);.
2230: 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  }.const unsigned
2240: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 76   char *sqlite3_v
2250: 61 6c 75 65 5f 74 65 78 74 28 73 71 6c 69 74 65  alue_text(sqlite
2260: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2270: 20 20 72 65 74 75 72 6e 20 28 63 6f 6e 73 74 20    return (const 
2280: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29  unsigned char *)
2290: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
22a0: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
22b0: 46 38 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  F8);.}.#ifndef S
22c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
22d0: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
22e0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
22f0: 36 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  6(sqlite3_value*
2300: 20 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e   pVal){.  return
2310: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
2320: 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
2330: 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 63  TF16NATIVE);.}.c
2340: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2350: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 62  e3_value_text16b
2360: 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  e(sqlite3_value 
2370: 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e  *pVal){.  return
2380: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
2390: 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
23a0: 54 46 31 36 42 45 29 3b 0a 7d 0a 63 6f 6e 73 74  TF16BE);.}.const
23b0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76   void *sqlite3_v
23c0: 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 73 71  alue_text16le(sq
23d0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
23e0: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
23f0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
2400: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
2410: 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  LE);.}.#endif /*
2420: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
2430: 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  16 */.int sqlite
2440: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 73 71 6c  3_value_type(sql
2450: 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56 61 6c  ite3_value* pVal
2460: 29 7b 0a 20 20 72 65 74 75 72 6e 20 70 56 61 6c  ){.  return pVal
2470: 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a  ->type;.}../****
2480: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2490: 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33  ******** sqlite3
24a0: 5f 72 65 73 75 6c 74 5f 20 20 2a 2a 2a 2a 2a 2a  _result_  ******
24b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
24c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
24d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69   following routi
24e0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 62 79 20  nes are used by 
24f0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
2500: 63 74 69 6f 6e 73 20 74 6f 20 73 70 65 63 69 66  ctions to specif
2510: 79 0a 2a 2a 20 74 68 65 20 66 75 6e 63 74 69 6f  y.** the functio
2520: 6e 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 76 6f 69  n result..*/.voi
2530: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
2540: 5f 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33  _blob(.  sqlite3
2550: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2560: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
2570: 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76  , .  int n, .  v
2580: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
2590: 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   *).){.  assert(
25a0: 20 6e 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72   n>=0 );.  asser
25b0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
25c0: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62  _held(pCtx->s.db
25d0: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
25e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
25f0: 74 72 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20  tr(&pCtx->s, z, 
2600: 6e 2c 20 30 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76  n, 0, xDel);.}.v
2610: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
2620: 6c 74 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65  lt_double(sqlite
2630: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2640: 20 64 6f 75 62 6c 65 20 72 56 61 6c 29 7b 0a 20   double rVal){. 
2650: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2660: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2670: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2680: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2690: 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70 43 74  emSetDouble(&pCt
26a0: 78 2d 3e 73 2c 20 72 56 61 6c 29 3b 0a 7d 0a 76  x->s, rVal);.}.v
26b0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
26c0: 6c 74 5f 65 72 72 6f 72 28 73 71 6c 69 74 65 33  lt_error(sqlite3
26d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
26e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
26f0: 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28  nt n){.  assert(
2700: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2710: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
2720: 6d 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78  mutex) );.  pCtx
2730: 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49  ->isError = SQLI
2740: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  TE_ERROR;.  sqli
2750: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2760: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
2770: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
2780: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2790: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
27a0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69  E_OMIT_UTF16.voi
27b0: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
27c0: 5f 65 72 72 6f 72 31 36 28 73 71 6c 69 74 65 33  _error16(sqlite3
27d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
27e0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 69  const void *z, i
27f0: 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28  nt n){.  assert(
2800: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2810: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
2820: 6d 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78  mutex) );.  pCtx
2830: 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49  ->isError = SQLI
2840: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  TE_ERROR;.  sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2860: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
2870: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
2880: 49 56 45 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  IVE, SQLITE_TRAN
2890: 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66  SIENT);.}.#endif
28a0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
28b0: 73 75 6c 74 5f 69 6e 74 28 73 71 6c 69 74 65 33  sult_int(sqlite3
28c0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
28d0: 69 6e 74 20 69 56 61 6c 29 7b 0a 20 20 61 73 73  int iVal){.  ass
28e0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
28f0: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
2900: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2910: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2920: 74 49 6e 74 36 34 28 26 70 43 74 78 2d 3e 73 2c  tInt64(&pCtx->s,
2930: 20 28 69 36 34 29 69 56 61 6c 29 3b 0a 7d 0a 76   (i64)iVal);.}.v
2940: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
2950: 6c 74 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33  lt_int64(sqlite3
2960: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2970: 69 36 34 20 69 56 61 6c 29 7b 0a 20 20 61 73 73  i64 iVal){.  ass
2980: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2990: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
29a0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
29b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
29c0: 74 49 6e 74 36 34 28 26 70 43 74 78 2d 3e 73 2c  tInt64(&pCtx->s,
29d0: 20 69 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   iVal);.}.void s
29e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
29f0: 6c 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ll(sqlite3_conte
2a00: 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73  xt *pCtx){.  ass
2a10: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2a20: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
2a30: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2a40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2a50: 74 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73 29 3b  tNull(&pCtx->s);
2a60: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
2a70: 72 65 73 75 6c 74 5f 74 65 78 74 28 0a 20 20 73  result_text(.  s
2a80: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2a90: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 63  pCtx, .  const c
2aa0: 68 61 72 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  har *z, .  int n
2ab0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ,.  void (*xDel)
2ac0: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
2ad0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2ae0: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
2af0: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
2b00: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b10: 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c 20  etStr(&pCtx->s, 
2b20: 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46  z, n, SQLITE_UTF
2b30: 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 69 66 6e  8, xDel);.}.#ifn
2b40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b50: 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69 74  UTF16.void sqlit
2b60: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
2b70: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
2b80: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f  ext *pCtx, .  co
2b90: 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20  nst void *z, .  
2ba0: 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28  int n, .  void (
2bb0: 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29  *xDel)(void *).)
2bc0: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2bd0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2be0: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
2bf0: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2c00: 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74  beMemSetStr(&pCt
2c10: 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  x->s, z, n, SQLI
2c20: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
2c30: 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  xDel);.}.void sq
2c40: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
2c50: 74 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33  t16be(.  sqlite3
2c60: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2c70: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
2c80: 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76  , .  int n, .  v
2c90: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
2ca0: 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   *).){.  assert(
2cb0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2cc0: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
2cd0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69  mutex) );.  sqli
2ce0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2cf0: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
2d00: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
2d10: 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   xDel);.}.void s
2d20: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
2d30: 78 74 31 36 6c 65 28 0a 20 20 73 71 6c 69 74 65  xt16le(.  sqlite
2d40: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2d50: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
2d60: 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20  z, .  int n, .  
2d70: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
2d80: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
2d90: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
2da0: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
2db0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
2dc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2dd0: 72 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e  r(&pCtx->s, z, n
2de0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
2df0: 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 65 6e 64 69  , xDel);.}.#endi
2e00: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2e10: 5f 55 54 46 31 36 20 2a 2f 0a 76 6f 69 64 20 73  _UTF16 */.void s
2e20: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61  qlite3_result_va
2e30: 6c 75 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  lue(sqlite3_cont
2e40: 65 78 74 20 2a 70 43 74 78 2c 20 73 71 6c 69 74  ext *pCtx, sqlit
2e50: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 75 65  e3_value *pValue
2e60: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
2e70: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
2e80: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
2e90: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
2ea0: 64 62 65 4d 65 6d 43 6f 70 79 28 26 70 43 74 78  dbeMemCopy(&pCtx
2eb0: 2d 3e 73 2c 20 70 56 61 6c 75 65 29 3b 0a 7d 0a  ->s, pValue);.}.
2ec0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
2ed0: 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c  ult_zeroblob(sql
2ee0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
2ef0: 74 78 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61 73  tx, int n){.  as
2f00: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2f10: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
2f20: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
2f30: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2f40: 65 74 5a 65 72 6f 42 6c 6f 62 28 26 70 43 74 78  etZeroBlob(&pCtx
2f50: 2d 3e 73 2c 20 6e 29 3b 0a 7d 0a 76 6f 69 64 20  ->s, n);.}.void 
2f60: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
2f70: 72 72 6f 72 5f 63 6f 64 65 28 73 71 6c 69 74 65  rror_code(sqlite
2f80: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2f90: 20 69 6e 74 20 65 72 72 43 6f 64 65 29 7b 0a 20   int errCode){. 
2fa0: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d   pCtx->isError =
2fb0: 20 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f 2a 20   errCode;.}../* 
2fc0: 46 6f 72 63 65 20 61 6e 20 53 51 4c 49 54 45 5f  Force an SQLITE_
2fd0: 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e 20 2a 2f  TOOBIG error. */
2fe0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
2ff0: 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69  sult_error_toobi
3000: 67 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  g(sqlite3_contex
3010: 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73 65  t *pCtx){.  asse
3020: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3030: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64  x_held(pCtx->s.d
3040: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 70  b->mutex) );.  p
3050: 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53  Ctx->isError = S
3060: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
3070: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
3080: 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c 20 22  tStr(&pCtx->s, "
3090: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
30a0: 6f 6f 20 62 69 67 22 2c 20 2d 31 2c 20 0a 20 20  oo big", -1, .  
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c0: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
30d0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
30e0: 3b 0a 7d 0a 0a 2f 2a 20 41 6e 20 53 51 4c 49 54  ;.}../* An SQLIT
30f0: 45 5f 4e 4f 4d 45 4d 20 65 72 72 6f 72 2e 20 2a  E_NOMEM error. *
3100: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
3110: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65  esult_error_nome
3120: 6d 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  m(sqlite3_contex
3130: 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73 65  t *pCtx){.  asse
3140: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3150: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64  x_held(pCtx->s.d
3160: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
3170: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
3180: 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73 29 3b 0a  Null(&pCtx->s);.
3190: 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
31a0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
31b0: 20 20 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 61    pCtx->s.db->ma
31c0: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
31d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  }../*.** Execute
31e0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 70   the statement p
31f0: 53 74 6d 74 2c 20 65 69 74 68 65 72 20 75 6e 74  Stmt, either unt
3200: 69 6c 20 61 20 72 6f 77 20 6f 66 20 64 61 74 61  il a row of data
3210: 20 69 73 20 72 65 61 64 79 2c 20 74 68 65 0a 2a   is ready, the.*
3220: 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 63  * statement is c
3230: 6f 6d 70 6c 65 74 65 6c 79 20 65 78 65 63 75 74  ompletely execut
3240: 65 64 20 6f 72 20 61 6e 20 65 72 72 6f 72 20 6f  ed or an error o
3250: 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ccurs..**.** Thi
3260: 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  s routine implem
3270: 65 6e 74 73 20 74 68 65 20 62 75 6c 6b 20 6f 66  ents the bulk of
3280: 20 74 68 65 20 6c 6f 67 69 63 20 62 65 68 69 6e   the logic behin
3290: 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 65  d the sqlite_ste
32a0: 70 28 29 0a 2a 2a 20 41 50 49 2e 20 20 54 68 65  p().** API.  The
32b0: 20 6f 6e 6c 79 20 74 68 69 6e 67 20 6f 6d 69 74   only thing omit
32c0: 74 65 64 20 69 73 20 74 68 65 20 61 75 74 6f 6d  ted is the autom
32d0: 61 74 69 63 20 72 65 63 6f 6d 70 69 6c 65 20 69  atic recompile i
32e0: 66 20 61 20 0a 2a 2a 20 73 63 68 65 6d 61 20 63  f a .** schema c
32f0: 68 61 6e 67 65 20 68 61 73 20 6f 63 63 75 72 72  hange has occurr
3300: 65 64 2e 20 20 54 68 61 74 20 64 65 74 61 69 6c  ed.  That detail
3310: 20 69 73 20 68 61 6e 64 6c 65 64 20 62 79 20 74   is handled by t
3320: 68 65 0a 2a 2a 20 6f 75 74 65 72 20 73 71 6c 69  he.** outer sqli
3330: 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
3340: 65 72 20 70 72 6f 63 65 64 75 72 65 2e 0a 2a 2f  er procedure..*/
3350: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
3360: 74 65 33 53 74 65 70 28 56 64 62 65 20 2a 70 29  te3Step(Vdbe *p)
3370: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
3380: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 61 73  .  int rc;..  as
3390: 73 65 72 74 28 70 29 3b 0a 20 20 69 66 28 20 70  sert(p);.  if( p
33a0: 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41  ->magic!=VDBE_MA
33b0: 47 49 43 5f 52 55 4e 20 29 7b 0a 20 20 20 20 72  GIC_RUN ){.    r
33c0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
33d0: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41  USE;.  }..  /* A
33e0: 73 73 65 72 74 20 74 68 61 74 20 6d 61 6c 6c 6f  ssert that mallo
33f0: 63 28 29 20 68 61 73 20 6e 6f 74 20 66 61 69 6c  c() has not fail
3400: 65 64 20 2a 2f 0a 20 20 64 62 20 3d 20 70 2d 3e  ed */.  db = p->
3410: 64 62 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64  db;.  assert( !d
3420: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
3430: 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 61 62 6f  );..  if( p->abo
3440: 72 74 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75  rted ){.    retu
3450: 72 6e 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b  rn SQLITE_ABORT;
3460: 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 70 63  .  }.  if( p->pc
3470: 3c 3d 30 20 26 26 20 70 2d 3e 65 78 70 69 72 65  <=0 && p->expire
3480: 64 20 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  d ){.    if( p->
3490: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
34a0: 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 53  .      p->rc = S
34b0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
34c0: 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 53 51 4c    }.    rc = SQL
34d0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67  ITE_ERROR;.    g
34e0: 6f 74 6f 20 65 6e 64 5f 6f 66 5f 73 74 65 70 3b  oto end_of_step;
34f0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
3500: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
3510: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
3520: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20  LITE_MISUSE;.   
3530: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
3540: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28  ISUSE;.  }.  if(
3550: 20 70 2d 3e 70 63 3c 30 20 29 7b 0a 20 20 20 20   p->pc<0 ){.    
3560: 2f 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  /* If there are 
3570: 6e 6f 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  no other stateme
3580: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  nts currently ru
3590: 6e 6e 69 6e 67 2c 20 74 68 65 6e 0a 20 20 20 20  nning, then.    
35a0: 2a 2a 20 72 65 73 65 74 20 74 68 65 20 69 6e 74  ** reset the int
35b0: 65 72 72 75 70 74 20 66 6c 61 67 2e 20 20 54 68  errupt flag.  Th
35c0: 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 63 61  is prevents a ca
35d0: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 69 6e  ll to sqlite3_in
35e0: 74 65 72 72 75 70 74 0a 20 20 20 20 2a 2a 20 66  terrupt.    ** f
35f0: 72 6f 6d 20 69 6e 74 65 72 72 75 70 74 69 6e 67  rom interrupting
3600: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61   a statement tha
3610: 74 20 68 61 73 20 6e 6f 74 20 79 65 74 20 73 74  t has not yet st
3620: 61 72 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  arted..    */.  
3630: 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65    if( db->active
3640: 56 64 62 65 43 6e 74 3d 3d 30 20 29 7b 0a 20 20  VdbeCnt==0 ){.  
3650: 20 20 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74      db->u1.isInt
3660: 65 72 72 75 70 74 65 64 20 3d 20 30 3b 0a 20 20  errupted = 0;.  
3670: 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
3680: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20  ITE_OMIT_TRACE. 
3690: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 66     if( db->xProf
36a0: 69 6c 65 20 26 26 20 21 64 62 2d 3e 69 6e 69 74  ile && !db->init
36b0: 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 20 20 64  .busy ){.      d
36c0: 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20 20 20 20  ouble rNow;.    
36d0: 20 20 73 71 6c 69 74 65 33 4f 73 43 75 72 72 65    sqlite3OsCurre
36e0: 6e 74 54 69 6d 65 28 64 62 2d 3e 70 56 66 73 2c  ntTime(db->pVfs,
36f0: 20 26 72 4e 6f 77 29 3b 0a 20 20 20 20 20 20 70   &rNow);.      p
3700: 2d 3e 73 74 61 72 74 54 69 6d 65 20 3d 20 28 72  ->startTime = (r
3710: 4e 6f 77 20 2d 20 28 69 6e 74 29 72 4e 6f 77 29  Now - (int)rNow)
3720: 2a 33 36 30 30 2e 30 2a 32 34 2e 30 2a 31 30 30  *3600.0*24.0*100
3730: 30 30 30 30 30 30 30 2e 30 3b 0a 20 20 20 20 7d  0000000.0;.    }
3740: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 64 62 2d  .#endif..    db-
3750: 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 2b 2b  >activeVdbeCnt++
3760: 3b 0a 20 20 20 20 70 2d 3e 70 63 20 3d 20 30 3b  ;.    p->pc = 0;
3770: 0a 20 20 20 20 73 74 6d 74 4c 72 75 52 65 6d 6f  .    stmtLruRemo
3780: 76 65 28 70 29 3b 0a 20 20 7d 0a 23 69 66 6e 64  ve(p);.  }.#ifnd
3790: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
37a0: 58 50 4c 41 49 4e 0a 20 20 69 66 28 20 70 2d 3e  XPLAIN.  if( p->
37b0: 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 72  explain ){.    r
37c0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4c  c = sqlite3VdbeL
37d0: 69 73 74 28 70 29 3b 0a 20 20 7d 65 6c 73 65 0a  ist(p);.  }else.
37e0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
37f0: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 20 2a 2f  _OMIT_EXPLAIN */
3800: 0a 20 20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  .  {.    rc = sq
3810: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 70 29  lite3VdbeExec(p)
3820: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73 71 6c  ;.  }..  if( sql
3830: 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
3840: 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
3850: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
3860: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
3870: 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 2f 2a  _OMIT_TRACE.  /*
3880: 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 6f 66   Invoke the prof
3890: 69 6c 65 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ile callback if 
38a0: 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 20 20 2a  there is one.  *
38b0: 2f 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  /.  if( rc!=SQLI
38c0: 54 45 5f 52 4f 57 20 26 26 20 64 62 2d 3e 78 50  TE_ROW && db->xP
38d0: 72 6f 66 69 6c 65 20 26 26 20 21 64 62 2d 3e 69  rofile && !db->i
38e0: 6e 69 74 2e 62 75 73 79 20 26 26 20 70 2d 3e 6e  nit.busy && p->n
38f0: 4f 70 3e 30 0a 20 20 20 20 20 20 20 20 20 20 20  Op>0.           
3900: 26 26 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63  && p->aOp[0].opc
3910: 6f 64 65 3d 3d 4f 50 5f 54 72 61 63 65 20 26 26  ode==OP_Trace &&
3920: 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 34 2e 7a 21   p->aOp[0].p4.z!
3930: 3d 30 20 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65  =0 ){.    double
3940: 20 72 4e 6f 77 3b 0a 20 20 20 20 75 36 34 20 65   rNow;.    u64 e
3950: 6c 61 70 73 65 54 69 6d 65 3b 0a 0a 20 20 20 20  lapseTime;..    
3960: 73 71 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74  sqlite3OsCurrent
3970: 54 69 6d 65 28 64 62 2d 3e 70 56 66 73 2c 20 26  Time(db->pVfs, &
3980: 72 4e 6f 77 29 3b 0a 20 20 20 20 65 6c 61 70 73  rNow);.    elaps
3990: 65 54 69 6d 65 20 3d 20 28 72 4e 6f 77 20 2d 20  eTime = (rNow - 
39a0: 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36 30 30 2e  (int)rNow)*3600.
39b0: 30 2a 32 34 2e 30 2a 31 30 30 30 30 30 30 30 30  0*24.0*100000000
39c0: 30 2e 30 20 2d 20 70 2d 3e 73 74 61 72 74 54 69  0.0 - p->startTi
39d0: 6d 65 3b 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f  me;.    db->xPro
39e0: 66 69 6c 65 28 64 62 2d 3e 70 50 72 6f 66 69 6c  file(db->pProfil
39f0: 65 41 72 67 2c 20 70 2d 3e 61 4f 70 5b 30 5d 2e  eArg, p->aOp[0].
3a00: 70 34 2e 7a 2c 20 65 6c 61 70 73 65 54 69 6d 65  p4.z, elapseTime
3a10: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
3a20: 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 72   db->errCode = r
3a30: 63 3b 0a 20 20 2f 2a 73 71 6c 69 74 65 33 45 72  c;.  /*sqlite3Er
3a40: 72 6f 72 28 70 2d 3e 64 62 2c 20 72 63 2c 20 30  ror(p->db, rc, 0
3a50: 29 3b 2a 2f 0a 20 20 70 2d 3e 72 63 20 3d 20 73  );*/.  p->rc = s
3a60: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d  qlite3ApiExit(p-
3a70: 3e 64 62 2c 20 70 2d 3e 72 63 29 3b 0a 65 6e 64  >db, p->rc);.end
3a80: 5f 6f 66 5f 73 74 65 70 3a 0a 20 20 61 73 73 65  _of_step:.  asse
3a90: 72 74 28 20 28 72 63 26 30 78 66 66 29 3d 3d 72  rt( (rc&0xff)==r
3aa0: 63 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 53  c );.  if( p->zS
3ab0: 71 6c 20 26 26 20 28 72 63 26 30 78 66 66 29 3c  ql && (rc&0xff)<
3ac0: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
3ad0: 20 20 2f 2a 20 54 68 69 73 20 62 65 68 61 76 69    /* This behavi
3ae0: 6f 72 20 6f 63 63 75 72 73 20 69 66 20 73 71 6c  or occurs if sql
3af0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
3b00: 29 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  ) was used to bu
3b10: 69 6c 64 0a 20 20 20 20 2a 2a 20 74 68 65 20 70  ild.    ** the p
3b20: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3b30: 74 2e 20 20 52 65 74 75 72 6e 20 65 72 72 6f 72  t.  Return error
3b40: 20 63 6f 64 65 73 20 64 69 72 65 63 74 6c 79 20   codes directly 
3b50: 2a 2f 0a 20 20 20 20 70 2d 3e 64 62 2d 3e 65 72  */.    p->db->er
3b60: 72 43 6f 64 65 20 3d 20 70 2d 3e 72 63 3b 0a 20  rCode = p->rc;. 
3b70: 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 45 72 72     /* sqlite3Err
3b80: 6f 72 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 2c  or(p->db, p->rc,
3b90: 20 30 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75   0); */.    retu
3ba0: 72 6e 20 70 2d 3e 72 63 3b 0a 20 20 7d 65 6c 73  rn p->rc;.  }els
3bb0: 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  e{.    /* This i
3bc0: 73 20 66 6f 72 20 6c 65 67 61 63 79 20 73 71 6c  s for legacy sql
3bd0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 62  ite3_prepare() b
3be0: 75 69 6c 64 73 20 61 6e 64 20 77 68 65 6e 20 74  uilds and when t
3bf0: 68 65 20 63 6f 64 65 0a 20 20 20 20 2a 2a 20 69  he code.    ** i
3c00: 73 20 53 51 4c 49 54 45 5f 52 4f 57 20 6f 72 20  s SQLITE_ROW or 
3c10: 53 51 4c 49 54 45 5f 44 4f 4e 45 20 2a 2f 0a 20  SQLITE_DONE */. 
3c20: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20     return rc;.  
3c30: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  }.}../*.** This 
3c40: 69 73 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c  is the top-level
3c50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
3c60: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
3c70: 29 2e 20 20 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69  ).  Call.** sqli
3c80: 74 65 33 53 74 65 70 28 29 20 74 6f 20 64 6f 20  te3Step() to do 
3c90: 6d 6f 73 74 20 6f 66 20 74 68 65 20 77 6f 72 6b  most of the work
3ca0: 2e 20 20 49 66 20 61 20 73 63 68 65 6d 61 20 65  .  If a schema e
3cb0: 72 72 6f 72 20 6f 63 63 75 72 73 2c 0a 2a 2a 20  rror occurs,.** 
3cc0: 63 61 6c 6c 20 73 71 6c 69 74 65 33 52 65 70 72  call sqlite3Repr
3cd0: 65 70 61 72 65 28 29 20 61 6e 64 20 74 72 79 20  epare() and try 
3ce0: 61 67 61 69 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  again..*/.#ifdef
3cf0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52   SQLITE_OMIT_PAR
3d00: 53 45 52 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  SER.int sqlite3_
3d10: 73 74 65 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  step(sqlite3_stm
3d20: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74  t *pStmt){.  int
3d30: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
3d40: 55 53 45 3b 0a 20 20 69 66 28 20 70 53 74 6d 74  USE;.  if( pStmt
3d50: 20 29 7b 0a 20 20 20 20 56 64 62 65 20 2a 76 3b   ){.    Vdbe *v;
3d60: 0a 20 20 20 20 76 20 3d 20 28 56 64 62 65 2a 29  .    v = (Vdbe*)
3d70: 70 53 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74  pStmt;.    sqlit
3d80: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 76  e3_mutex_enter(v
3d90: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
3da0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 53 74    rc = sqlite3St
3db0: 65 70 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  ep(v);.    sqlit
3dc0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 76  e3_mutex_leave(v
3dd0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
3de0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
3df0: 0a 23 65 6c 73 65 0a 69 6e 74 20 73 71 6c 69 74  .#else.int sqlit
3e00: 65 33 5f 73 74 65 70 28 73 71 6c 69 74 65 33 5f  e3_step(sqlite3_
3e10: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
3e20: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
3e30: 4d 49 53 55 53 45 3b 0a 20 20 69 66 28 20 70 53  MISUSE;.  if( pS
3e40: 74 6d 74 20 29 7b 0a 20 20 20 20 69 6e 74 20 63  tmt ){.    int c
3e50: 6e 74 20 3d 20 30 3b 0a 20 20 20 20 56 64 62 65  nt = 0;.    Vdbe
3e60: 20 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *v = (Vdbe*)pSt
3e70: 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  mt;.    sqlite3 
3e80: 2a 64 62 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 20  *db = v->db;.   
3e90: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
3ea0: 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
3eb0: 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72 63 20  .    while( (rc 
3ec0: 3d 20 73 71 6c 69 74 65 33 53 74 65 70 28 76 29  = sqlite3Step(v)
3ed0: 29 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  )==SQLITE_SCHEMA
3ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 26 26 20 63  .           && c
3ef0: 6e 74 2b 2b 20 3c 20 35 0a 20 20 20 20 20 20 20  nt++ < 5.       
3f00: 20 20 20 20 26 26 20 76 64 62 65 52 65 70 72 65      && vdbeRepre
3f10: 70 61 72 65 28 76 29 20 29 7b 0a 20 20 20 20 20  pare(v) ){.     
3f20: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70   sqlite3_reset(p
3f30: 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76 2d 3e  Stmt);.      v->
3f40: 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 20  expired = 0;.   
3f50: 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53   }.    if( rc==S
3f60: 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 26 26 20  QLITE_SCHEMA && 
3f70: 76 2d 3e 7a 53 71 6c 20 26 26 20 64 62 2d 3e 70  v->zSql && db->p
3f80: 45 72 72 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  Err ){.      /* 
3f90: 54 68 69 73 20 63 61 73 65 20 6f 63 63 75 72 73  This case occurs
3fa0: 20 61 66 74 65 72 20 66 61 69 6c 69 6e 67 20 74   after failing t
3fb0: 6f 20 72 65 63 6f 6d 70 69 6c 65 20 61 6e 20 73  o recompile an s
3fc0: 71 6c 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 20  ql statement. . 
3fd0: 20 20 20 20 20 2a 2a 20 54 68 65 20 65 72 72 6f       ** The erro
3fe0: 72 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74  r message from t
3ff0: 68 65 20 53 51 4c 20 63 6f 6d 70 69 6c 65 72 20  he SQL compiler 
4000: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
4010: 20 6c 6f 61 64 65 64 20 0a 20 20 20 20 20 20 2a   loaded .      *
4020: 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  * into the datab
4030: 61 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73  ase handle. This
4040: 20 62 6c 6f 63 6b 20 63 6f 70 69 65 73 20 74 68   block copies th
4050: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4060: 0a 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74  .      ** from t
4070: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
4080: 6c 65 20 69 6e 74 6f 20 74 68 65 20 73 74 61 74  le into the stat
4090: 65 6d 65 6e 74 20 61 6e 64 20 73 65 74 73 20 74  ement and sets t
40a0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20  he statement.   
40b0: 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 63 6f     ** program co
40c0: 75 6e 74 65 72 20 74 6f 20 30 20 74 6f 20 65 6e  unter to 0 to en
40d0: 73 75 72 65 20 74 68 61 74 20 77 68 65 6e 20 74  sure that when t
40e0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
40f0: 0a 20 20 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69  .      ** finali
4100: 7a 65 64 20 6f 72 20 72 65 73 65 74 20 74 68 65  zed or reset the
4110: 20 70 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65   parser error me
4120: 73 73 61 67 65 20 69 73 20 61 76 61 69 6c 61 62  ssage is availab
4130: 6c 65 20 76 69 61 0a 20 20 20 20 20 20 2a 2a 20  le via.      ** 
4140: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
4150: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
4160: 63 6f 64 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  code()..      */
4170: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
4180: 72 20 2a 7a 45 72 72 20 3d 20 28 63 6f 6e 73 74  r *zErr = (const
4190: 20 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f   char *)sqlite3_
41a0: 76 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70  value_text(db->p
41b0: 45 72 72 29 3b 20 0a 20 20 20 20 20 20 73 71 6c  Err); .      sql
41c0: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 76  ite3DbFree(db, v
41d0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
41e0: 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f    if( !db->mallo
41f0: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20  cFailed ){.     
4200: 20 20 20 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     v->zErrMsg = 
4210: 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
4220: 64 62 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20  db, zErr);.     
4230: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
4240: 20 20 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30    v->zErrMsg = 0
4250: 3b 0a 20 20 20 20 20 20 20 20 76 2d 3e 72 63 20  ;.        v->rc 
4260: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
4270: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4280: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
4290: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20  iExit(db, rc);. 
42a0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
42b0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
42c0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
42d0: 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  rc;.}.#endif../*
42e0: 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20  .** Extract the 
42f0: 75 73 65 72 20 64 61 74 61 20 66 72 6f 6d 20 61  user data from a
4300: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
4310: 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 72   structure and r
4320: 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74  eturn a.** point
4330: 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a 76 6f 69  er to it..*/.voi
4340: 64 20 2a 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  d *sqlite3_user_
4350: 64 61 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e  data(sqlite3_con
4360: 74 65 78 74 20 2a 70 29 7b 0a 20 20 61 73 73 65  text *p){.  asse
4370: 72 74 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e  rt( p && p->pFun
4380: 63 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d  c );.  return p-
4390: 3e 70 46 75 6e 63 2d 3e 70 55 73 65 72 44 61 74  >pFunc->pUserDat
43a0: 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72  a;.}../*.** Extr
43b0: 61 63 74 20 74 68 65 20 75 73 65 72 20 64 61 74  act the user dat
43c0: 61 20 66 72 6f 6d 20 61 20 73 71 6c 69 74 65 33  a from a sqlite3
43d0: 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63 74 75  _context structu
43e0: 72 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 0a  re and return a.
43f0: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74  ** pointer to it
4400: 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73 71  ..*/.sqlite3 *sq
4410: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62  lite3_context_db
4420: 5f 68 61 6e 64 6c 65 28 73 71 6c 69 74 65 33 5f  _handle(sqlite3_
4430: 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61  context *p){.  a
4440: 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70  ssert( p && p->p
4450: 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72 6e  Func );.  return
4460: 20 70 2d 3e 73 2e 64 62 3b 0a 7d 0a 0a 2f 2a 0a   p->s.db;.}../*.
4470: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4480: 20 69 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   is the implemen
4490: 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  tation of an SQL
44a0: 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 61   function that a
44b0: 6c 77 61 79 73 0a 2a 2a 20 66 61 69 6c 73 20 77  lways.** fails w
44c0: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ith an error mes
44d0: 73 61 67 65 20 73 74 61 74 69 6e 67 20 74 68 61  sage stating tha
44e0: 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  t the function i
44f0: 73 20 75 73 65 64 20 69 6e 20 74 68 65 0a 2a 2a  s used in the.**
4500: 20 77 72 6f 6e 67 20 63 6f 6e 74 65 78 74 2e 20   wrong context. 
4510: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6f 76 65   The sqlite3_ove
4520: 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e 28 29  rload_function()
4530: 20 41 50 49 20 6d 69 67 68 74 20 63 6f 6e 73 74   API might const
4540: 72 75 63 74 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ruct.** SQL func
4550: 74 69 6f 6e 20 74 68 61 74 20 75 73 65 20 74 68  tion that use th
4560: 69 73 20 72 6f 75 74 69 6e 65 20 73 6f 20 74 68  is routine so th
4570: 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73  at the functions
4580: 20 77 69 6c 6c 20 65 78 69 73 74 0a 2a 2a 20 66   will exist.** f
4590: 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
45a0: 6f 6e 20 62 75 74 20 61 72 65 20 61 63 74 75 61  on but are actua
45b0: 6c 6c 79 20 6f 76 65 72 6c 6f 61 64 65 64 20 62  lly overloaded b
45c0: 79 20 74 68 65 20 78 46 69 6e 64 46 75 6e 63 74  y the xFindFunct
45d0: 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  ion.** method of
45e0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2e   virtual tables.
45f0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4600: 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
4610: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
4620: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 20 2f 2a  xt *context,  /*
4630: 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 61   The function ca
4640: 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  lling context */
4650: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4670: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
4680: 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
4690: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
46a0: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 20 20  3_value **argv  
46b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
46c0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
46d0: 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  /.){.  const cha
46e0: 72 20 2a 7a 4e 61 6d 65 20 3d 20 63 6f 6e 74 65  r *zName = conte
46f0: 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a 4e 61 6d 65  xt->pFunc->zName
4700: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a  ;.  char *zErr;.
4710: 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33    zErr = sqlite3
4720: 4d 50 72 69 6e 74 66 28 30 2c 0a 20 20 20 20 20  MPrintf(0,.     
4730: 20 22 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20   "unable to use 
4740: 66 75 6e 63 74 69 6f 6e 20 25 73 20 69 6e 20 74  function %s in t
4750: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6e  he requested con
4760: 74 65 78 74 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  text", zName);. 
4770: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4780: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 7a  error(context, z
4790: 45 72 72 2c 20 2d 31 29 3b 0a 20 20 73 71 6c 69  Err, -1);.  sqli
47a0: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
47b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  }../*.** Allocat
47c0: 65 20 6f 72 20 72 65 74 75 72 6e 20 74 68 65 20  e or return the 
47d0: 61 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65 78  aggregate contex
47e0: 74 20 66 6f 72 20 61 20 75 73 65 72 20 66 75 6e  t for a user fun
47f0: 63 74 69 6f 6e 2e 20 20 41 20 6e 65 77 0a 2a 2a  ction.  A new.**
4800: 20 63 6f 6e 74 65 78 74 20 69 73 20 61 6c 6c 6f   context is allo
4810: 63 61 74 65 64 20 6f 6e 20 74 68 65 20 66 69 72  cated on the fir
4820: 73 74 20 63 61 6c 6c 2e 20 20 53 75 62 73 65 71  st call.  Subseq
4830: 75 65 6e 74 20 63 61 6c 6c 73 20 72 65 74 75 72  uent calls retur
4840: 6e 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 63 6f  n the.** same co
4850: 6e 74 65 78 74 20 74 68 61 74 20 77 61 73 20 72  ntext that was r
4860: 65 74 75 72 6e 65 64 20 6f 6e 20 70 72 69 6f 72  eturned on prior
4870: 20 63 61 6c 6c 73 2e 0a 2a 2f 0a 76 6f 69 64 20   calls..*/.void 
4880: 2a 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61  *sqlite3_aggrega
4890: 74 65 5f 63 6f 6e 74 65 78 74 28 73 71 6c 69 74  te_context(sqlit
48a0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69  e3_context *p, i
48b0: 6e 74 20 6e 42 79 74 65 29 7b 0a 20 20 4d 65 6d  nt nByte){.  Mem
48c0: 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74   *pMem;.  assert
48d0: 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20  ( p && p->pFunc 
48e0: 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74  && p->pFunc->xSt
48f0: 65 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ep );.  assert( 
4900: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
4910: 6c 64 28 70 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  ld(p->s.db->mute
4920: 78 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 70  x) );.  pMem = p
4930: 2d 3e 70 4d 65 6d 3b 0a 20 20 69 66 28 20 28 70  ->pMem;.  if( (p
4940: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
4950: 5f 41 67 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Agg)==0 ){.    
4960: 69 66 28 20 6e 42 79 74 65 3d 3d 30 20 29 7b 0a  if( nByte==0 ){.
4970: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4980: 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72  eMemReleaseExter
4990: 6e 61 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  nal(pMem);.     
49a0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
49b0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
49c0: 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  Mem->z = 0;.    
49d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
49e0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
49f0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 3b  pMem, nByte, 0);
4a00: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
4a10: 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20 20  gs = MEM_Agg;.  
4a20: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65 66      pMem->u.pDef
4a30: 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20 20   = p->pFunc;.   
4a40: 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 20 29     if( pMem->z )
4a50: 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74  {.        memset
4a60: 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79  (pMem->z, 0, nBy
4a70: 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  te);.      }.   
4a80: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
4a90: 28 76 6f 69 64 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  (void*)pMem->z;.
4aa0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
4ab0: 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61 74  the auxilary dat
4ac0: 61 20 70 6f 69 6e 74 65 72 2c 20 69 66 20 61 6e  a pointer, if an
4ad0: 79 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27  y, for the iArg'
4ae0: 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  th argument to.*
4af0: 2a 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  * the user-funct
4b00: 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70  ion defined by p
4b10: 43 74 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  Ctx..*/.void *sq
4b20: 6c 69 74 65 33 5f 67 65 74 5f 61 75 78 64 61 74  lite3_get_auxdat
4b30: 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  a(sqlite3_contex
4b40: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 41 72  t *pCtx, int iAr
4b50: 67 29 7b 0a 20 20 56 64 62 65 46 75 6e 63 20 2a  g){.  VdbeFunc *
4b60: 70 56 64 62 65 46 75 6e 63 3b 0a 0a 20 20 61 73  pVdbeFunc;..  as
4b70: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
4b80: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
4b90: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
4ba0: 20 70 56 64 62 65 46 75 6e 63 20 3d 20 70 43 74   pVdbeFunc = pCt
4bb0: 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  x->pVdbeFunc;.  
4bc0: 69 66 28 20 21 70 56 64 62 65 46 75 6e 63 20 7c  if( !pVdbeFunc |
4bd0: 7c 20 69 41 72 67 3e 3d 70 56 64 62 65 46 75 6e  | iArg>=pVdbeFun
4be0: 63 2d 3e 6e 41 75 78 20 7c 7c 20 69 41 72 67 3c  c->nAux || iArg<
4bf0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
4c00: 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  0;.  }.  return 
4c10: 70 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78  pVdbeFunc->apAux
4c20: 5b 69 41 72 67 5d 2e 70 41 75 78 3b 0a 7d 0a 0a  [iArg].pAux;.}..
4c30: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 61 75  /*.** Set the au
4c40: 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e  xilary data poin
4c50: 74 65 72 20 61 6e 64 20 64 65 6c 65 74 65 20 66  ter and delete f
4c60: 75 6e 63 74 69 6f 6e 2c 20 66 6f 72 20 74 68 65  unction, for the
4c70: 20 69 41 72 67 27 74 68 0a 2a 2a 20 61 72 67 75   iArg'th.** argu
4c80: 6d 65 6e 74 20 74 6f 20 74 68 65 20 75 73 65 72  ment to the user
4c90: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 65  -function define
4ca0: 64 20 62 79 20 70 43 74 78 2e 20 41 6e 79 20 70  d by pCtx. Any p
4cb0: 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 69 73  revious value is
4cc0: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 62 79 20 63  .** deleted by c
4cd0: 61 6c 6c 69 6e 67 20 74 68 65 20 64 65 6c 65 74  alling the delet
4ce0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  e function speci
4cf0: 66 69 65 64 20 77 68 65 6e 20 69 74 20 77 61 73  fied when it was
4d00: 20 73 65 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   set..*/.void sq
4d10: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
4d20: 61 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  a(.  sqlite3_con
4d30: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69  text *pCtx, .  i
4d40: 6e 74 20 69 41 72 67 2c 20 0a 20 20 76 6f 69 64  nt iArg, .  void
4d50: 20 2a 70 41 75 78 2c 20 0a 20 20 76 6f 69 64 20   *pAux, .  void 
4d60: 28 2a 78 44 65 6c 65 74 65 29 28 76 6f 69 64 2a  (*xDelete)(void*
4d70: 29 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 41 75  ).){.  struct Au
4d80: 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b  xData *pAuxData;
4d90: 0a 20 20 56 64 62 65 46 75 6e 63 20 2a 70 56 64  .  VdbeFunc *pVd
4da0: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 69 41  beFunc;.  if( iA
4db0: 72 67 3c 30 20 29 20 67 6f 74 6f 20 66 61 69 6c  rg<0 ) goto fail
4dc0: 65 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73  ed;..  assert( s
4dd0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
4de0: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
4df0: 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65 46  tex) );.  pVdbeF
4e00: 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64 62  unc = pCtx->pVdb
4e10: 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70 56  eFunc;.  if( !pV
4e20: 64 62 65 46 75 6e 63 20 7c 7c 20 70 56 64 62 65  dbeFunc || pVdbe
4e30: 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72 67  Func->nAux<=iArg
4e40: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 75 78   ){.    int nAux
4e50: 20 3d 20 28 70 56 64 62 65 46 75 6e 63 20 3f 20   = (pVdbeFunc ? 
4e60: 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20  pVdbeFunc->nAux 
4e70: 3a 20 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e 4d  : 0);.    int nM
4e80: 61 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28 56  alloc = sizeof(V
4e90: 64 62 65 46 75 6e 63 29 20 2b 20 73 69 7a 65 6f  dbeFunc) + sizeo
4ea0: 66 28 73 74 72 75 63 74 20 41 75 78 44 61 74 61  f(struct AuxData
4eb0: 29 2a 69 41 72 67 3b 0a 20 20 20 20 70 56 64 62  )*iArg;.    pVdb
4ec0: 65 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 44  eFunc = sqlite3D
4ed0: 62 52 65 61 6c 6c 6f 63 28 70 43 74 78 2d 3e 73  bRealloc(pCtx->s
4ee0: 2e 64 62 2c 20 70 56 64 62 65 46 75 6e 63 2c 20  .db, pVdbeFunc, 
4ef0: 6e 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66  nMalloc);.    if
4f00: 28 20 21 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  ( !pVdbeFunc ){.
4f10: 20 20 20 20 20 20 67 6f 74 6f 20 66 61 69 6c 65        goto faile
4f20: 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 74  d;.    }.    pCt
4f30: 78 2d 3e 70 56 64 62 65 46 75 6e 63 20 3d 20 70  x->pVdbeFunc = p
4f40: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d 65  VdbeFunc;.    me
4f50: 6d 73 65 74 28 26 70 56 64 62 65 46 75 6e 63 2d  mset(&pVdbeFunc-
4f60: 3e 61 70 41 75 78 5b 6e 41 75 78 5d 2c 20 30 2c  >apAux[nAux], 0,
4f70: 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 41   sizeof(struct A
4f80: 75 78 44 61 74 61 29 2a 28 69 41 72 67 2b 31 2d  uxData)*(iArg+1-
4f90: 6e 41 75 78 29 29 3b 0a 20 20 20 20 70 56 64 62  nAux));.    pVdb
4fa0: 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3d 20 69 41  eFunc->nAux = iA
4fb0: 72 67 2b 31 3b 0a 20 20 20 20 70 56 64 62 65 46  rg+1;.    pVdbeF
4fc0: 75 6e 63 2d 3e 70 46 75 6e 63 20 3d 20 70 43 74  unc->pFunc = pCt
4fd0: 78 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  x->pFunc;.  }.. 
4fe0: 20 70 41 75 78 44 61 74 61 20 3d 20 26 70 56 64   pAuxData = &pVd
4ff0: 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69 41  beFunc->apAux[iA
5000: 72 67 5d 3b 0a 20 20 69 66 28 20 70 41 75 78 44  rg];.  if( pAuxD
5010: 61 74 61 2d 3e 70 41 75 78 20 26 26 20 70 41 75  ata->pAux && pAu
5020: 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20 29  xData->xDelete )
5030: 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d 3e  {.    pAuxData->
5040: 78 44 65 6c 65 74 65 28 70 41 75 78 44 61 74 61  xDelete(pAuxData
5050: 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 20 20 70  ->pAux);.  }.  p
5060: 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20 3d 20  AuxData->pAux = 
5070: 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61 74 61  pAux;.  pAuxData
5080: 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44 65 6c  ->xDelete = xDel
5090: 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a 0a  ete;.  return;..
50a0: 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20 78 44  failed:.  if( xD
50b0: 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78 44 65  elete ){.    xDe
50c0: 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20 7d 0a  lete(pAux);.  }.
50d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
50e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
50f0: 6d 65 73 20 74 68 65 20 53 74 65 70 20 66 75 6e  mes the Step fun
5100: 63 74 69 6f 6e 20 6f 66 20 61 20 61 67 67 72 65  ction of a aggre
5110: 67 61 74 65 20 68 61 73 20 62 65 65 6e 20 0a 2a  gate has been .*
5120: 2a 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  * called..**.** 
5130: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
5140: 20 64 65 70 72 65 63 61 74 65 64 2e 20 20 44 6f   deprecated.  Do
5150: 20 6e 6f 74 20 75 73 65 20 69 74 20 66 6f 72 20   not use it for 
5160: 6e 65 77 20 63 6f 64 65 2e 20 20 49 74 20 69 73  new code.  It is
5170: 0a 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79  .** provide only
5180: 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b 69   to avoid breaki
5190: 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65 2e 20  ng legacy code. 
51a0: 20 4e 65 77 20 61 67 67 72 65 67 61 74 65 20 66   New aggregate f
51b0: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65  unction.** imple
51c0: 6d 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c  mentations shoul
51d0: 64 20 6b 65 65 70 20 74 68 65 69 72 20 6f 77 6e  d keep their own
51e0: 20 63 6f 75 6e 74 73 20 77 69 74 68 69 6e 20 74   counts within t
51f0: 68 65 69 72 20 61 67 67 72 65 67 61 74 65 0a 2a  heir aggregate.*
5200: 2a 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e  * context..*/.in
5210: 74 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  t sqlite3_aggreg
5220: 61 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65  ate_count(sqlite
5230: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
5240: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
5250: 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e 70 46 75  >pFunc && p->pFu
5260: 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a 20 20 72  nc->xStep );.  r
5270: 65 74 75 72 6e 20 70 2d 3e 70 4d 65 6d 2d 3e 6e  eturn p->pMem->n
5280: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
5290: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
52a0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
52b0: 65 73 75 6c 74 20 73 65 74 20 66 6f 72 20 74 68  esult set for th
52c0: 65 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d  e statement pStm
52d0: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
52e0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73  3_column_count(s
52f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5300: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d  mt){.  Vdbe *pVm
5310: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
5320: 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 20 3f  ;.  return pVm ?
5330: 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e   pVm->nResColumn
5340: 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52   : 0;.}../*.** R
5350: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
5360: 20 6f 66 20 76 61 6c 75 65 73 20 61 76 61 69 6c   of values avail
5370: 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 75  able from the cu
5380: 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74 68 65  rrent row of the
5390: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 65 78  .** currently ex
53a0: 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
53b0: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20  t pStmt..*/.int 
53c0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
53d0: 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  nt(sqlite3_stmt 
53e0: 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20  *pStmt){.  Vdbe 
53f0: 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70  *pVm = (Vdbe *)p
5400: 53 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 3d  Stmt;.  if( pVm=
5410: 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65 73 75  =0 || pVm->pResu
5420: 6c 74 53 65 74 3d 3d 30 20 29 20 72 65 74 75 72  ltSet==0 ) retur
5430: 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 56  n 0;.  return pV
5440: 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b 0a 7d  m->nResColumn;.}
5450: 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  .../*.** Check t
5460: 6f 20 73 65 65 20 69 66 20 63 6f 6c 75 6d 6e 20  o see if column 
5470: 69 43 6f 6c 20 6f 66 20 74 68 65 20 67 69 76 65  iCol of the give
5480: 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 76  n statement is v
5490: 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69 74 20  alid.  If.** it 
54a0: 69 73 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69  is, return a poi
54b0: 6e 74 65 72 20 74 6f 20 74 68 65 20 4d 65 6d 20  nter to the Mem 
54c0: 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  for the value of
54d0: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a   that column..**
54e0: 20 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f 74 20   If iCol is not 
54f0: 76 61 6c 69 64 2c 20 72 65 74 75 72 6e 20 61 20  valid, return a 
5500: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d  pointer to a Mem
5510: 20 77 68 69 63 68 20 68 61 73 20 61 20 76 61 6c   which has a val
5520: 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a 2a  ue.** of NULL..*
5530: 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 63 6f  /.static Mem *co
5540: 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65 33 5f  lumnMem(sqlite3_
5550: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
5560: 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d   i){.  Vdbe *pVm
5570: 3b 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a 20 20  ;.  int vals;.  
5580: 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70 56  Mem *pOut;..  pV
5590: 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  m = (Vdbe *)pStm
55a0: 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26 20  t;.  if( pVm && 
55b0: 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 21  pVm->pResultSet!
55c0: 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52 65  =0 && i<pVm->nRe
55d0: 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30 20  sColumn && i>=0 
55e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  ){.    sqlite3_m
55f0: 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d 3e  utex_enter(pVm->
5600: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
5610: 76 61 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f 64  vals = sqlite3_d
5620: 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
5630: 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 56  ;.    pOut = &pV
5640: 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b 69 5d  m->pResultSet[i]
5650: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
5660: 74 61 74 69 63 20 63 6f 6e 73 74 20 4d 65 6d 20  tatic const Mem 
5670: 6e 75 6c 6c 4d 65 6d 20 3d 20 7b 7b 30 7d 2c 20  nullMem = {{0}, 
5680: 30 2e 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20 4d  0.0, 0, "", 0, M
5690: 45 4d 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45 5f  EM_Null, SQLITE_
56a0: 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d 3b  NULL, 0, 0, 0 };
56b0: 0a 20 20 20 20 69 66 28 20 70 56 6d 2d 3e 64 62  .    if( pVm->db
56c0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
56d0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56  3_mutex_enter(pV
56e0: 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  m->db->mutex);. 
56f0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
5700: 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49 54  r(pVm->db, SQLIT
5710: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
5720: 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28 4d   }.    pOut = (M
5730: 65 6d 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20 20  em*)&nullMem;.  
5740: 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  }.  return pOut;
5750: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
5760: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
5770: 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e 67  d after invoking
5780: 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   an sqlite3_valu
5790: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 6f  e_XXX function o
57a0: 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76  n a .** column v
57b0: 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61 6c  alue (i.e. a val
57c0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ue returned by e
57d0: 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51 4c  valuating an SQL
57e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
57f0: 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69 73  he.** select lis
5800: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  t of a SELECT st
5810: 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d 61  atement) that ma
5820: 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f 63  y cause a malloc
5830: 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20 0a  () failure. If .
5840: 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20  ** malloc() has 
5850: 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72 65  failed, the thre
5860: 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ads mallocFailed
5870: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
5880: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 0a   and the result.
5890: 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74 65  ** code of state
58a0: 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20 74  ment pStmt set t
58b0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a  o SQLITE_NOMEM..
58c0: 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61 6c  **.** Specifical
58d0: 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c 6c  ly, this is call
58e0: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a 0a  ed from within:.
58f0: 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  **.**     sqlite
5900: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a 2a  3_column_int().*
5910: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
5920: 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a 20  lumn_int64().** 
5930: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
5940: 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20 20  mn_text().**    
5950: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5960: 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20 20  text16().**     
5970: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 72  sqlite3_column_r
5980: 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  eal().**     sql
5990: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
59a0: 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  s().**     sqlit
59b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
59c0: 36 28 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e 6f  6().**.** But no
59d0: 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 6f  t for sqlite3_co
59e0: 6c 75 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68 69  lumn_blob(), whi
59f0: 63 68 20 6e 65 76 65 72 20 63 61 6c 6c 73 20 6d  ch never calls m
5a00: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74  alloc()..*/.stat
5a10: 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d 61  ic void columnMa
5a20: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c 69  llocFailure(sqli
5a30: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
5a40: 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c 6f  .{.  /* If mallo
5a50: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
5a60: 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63 6f  g an encoding co
5a70: 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e 20  nversion within 
5a80: 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  an.  ** sqlite3_
5a90: 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c 20  column_XXX API, 
5aa0: 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65 74  then set the ret
5ab0: 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65 20  urn code of the 
5ac0: 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 2a  statement to.  *
5ad0: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20  * SQLITE_NOMEM. 
5ae0: 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  The next call to
5af0: 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e 79   _step() (if any
5b00: 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  ) will return SQ
5b10: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a 20  LITE_ERROR.  ** 
5b20: 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29 20  and _finalize() 
5b30: 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d 45  will return NOME
5b40: 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20 2a  M..  */.  Vdbe *
5b50: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
5b60: 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  t;.  if( p ){.  
5b70: 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65    p->rc = sqlite
5b80: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
5b90: 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  p->rc);.    sqli
5ba0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
5bb0: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
5bc0: 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a   }.}../*********
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5be0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  *** sqlite3_colu
5bf0: 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  mn_  ***********
5c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c10: 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ****.** The foll
5c20: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61  owing routines a
5c30: 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  re used to acces
5c40: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68  s elements of th
5c50: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a  e current row.**
5c60: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
5c70: 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69  et..*/.const voi
5c80: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
5c90: 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73  n_blob(sqlite3_s
5ca0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
5cb0: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i){.  const void
5cc0: 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73   *val;.  val = s
5cd0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
5ce0: 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  b( columnMem(pSt
5cf0: 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45 76  mt,i) );.  /* Ev
5d00: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20  en though there 
5d10: 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20 63  is no encoding c
5d20: 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75 65  onversion, value
5d30: 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20 20  _blob() might.  
5d40: 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20  ** need to call 
5d50: 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70 61  malloc() to expa
5d60: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  nd the result of
5d70: 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a 20   a zeroblob() . 
5d80: 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 20   ** expression. 
5d90: 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d 61  .  */.  columnMa
5da0: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
5db0: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
5dc0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
5dd0: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71 6c  column_bytes(sql
5de0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
5df0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
5e00: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
5e10: 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75 6d  lue_bytes( colum
5e20: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5e30: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5e40: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5e50: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69   return val;.}.i
5e60: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
5e70: 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  n_bytes16(sqlite
5e80: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
5e90: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c  nt i){.  int val
5ea0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5eb0: 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d 6e  _bytes16( column
5ec0: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
5ed0: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
5ee0: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
5ef0: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f  return val;.}.do
5f00: 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f 6c  uble sqlite3_col
5f10: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  umn_double(sqlit
5f20: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5f30: 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c 65  int i){.  double
5f40: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
5f50: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f 6c  alue_double( col
5f60: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
5f70: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
5f80: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
5f90: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
5fa0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
5fb0: 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f  umn_int(sqlite3_
5fc0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
5fd0: 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d   i){.  int val =
5fe0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
5ff0: 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  nt( columnMem(pS
6000: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
6010: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
6020: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
6030: 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69   val;.}.sqlite_i
6040: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt64 sqlite3_col
6050: 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74 65  umn_int64(sqlite
6060: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
6070: 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65 5f  nt i){.  sqlite_
6080: 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c 69  int64 val = sqli
6090: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
60a0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
60b0: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
60c0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
60d0: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
60e0: 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  l;.}.const unsig
60f0: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
6100: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 71  3_column_text(sq
6110: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6120: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f 6e  t, int i){.  con
6130: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
6140: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
6150: 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c 75  value_text( colu
6160: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
6170: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
6180: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
6190: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
61a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
61b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61  qlite3_column_va
61c0: 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  lue(sqlite3_stmt
61d0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
61e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
61f0: 20 2a 70 4f 75 74 20 3d 20 63 6f 6c 75 6d 6e 4d   *pOut = columnM
6200: 65 6d 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  em(pStmt, i);.  
6210: 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c  columnMallocFail
6220: 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65  ure(pStmt);.  re
6230: 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 23 69 66  turn pOut;.}.#if
6240: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6250: 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69  _UTF16.const voi
6260: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
6270: 6e 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33  n_text16(sqlite3
6280: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6290: 74 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f  t i){.  const vo
62a0: 69 64 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65  id *val = sqlite
62b0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 20  3_value_text16( 
62c0: 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c  columnMem(pStmt,
62d0: 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61  i) );.  columnMa
62e0: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
62f0: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
6300: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
6310: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
6320: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
6330: 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 71 6c 69 74  olumn_type(sqlit
6340: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6350: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 69 54  int i){.  int iT
6360: 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  ype = sqlite3_va
6370: 6c 75 65 5f 74 79 70 65 28 20 63 6f 6c 75 6d 6e  lue_type( column
6380: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
6390: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
63a0: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
63b0: 72 65 74 75 72 6e 20 69 54 79 70 65 3b 0a 7d 0a  return iType;.}.
63c0: 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ./* The followin
63d0: 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 78  g function is ex
63e0: 70 65 72 69 6d 65 6e 74 61 6c 20 61 6e 64 20 73  perimental and s
63f0: 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
6400: 20 6f 72 0a 2a 2a 20 72 65 6d 6f 76 61 6c 20 2a   or.** removal *
6410: 2f 0a 2f 2a 69 6e 74 20 73 71 6c 69 74 65 33 5f  /./*int sqlite3_
6420: 63 6f 6c 75 6d 6e 5f 6e 75 6d 65 72 69 63 5f 74  column_numeric_t
6430: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
6440: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
6450: 0a 2a 2a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .**  return sqli
6460: 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69  te3_value_numeri
6470: 63 5f 74 79 70 65 28 20 63 6f 6c 75 6d 6e 4d 65  c_type( columnMe
6480: 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 2a 2a  m(pStmt,i) );.**
6490: 7d 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  }.*/../*.** Conv
64a0: 65 72 74 20 74 68 65 20 4e 2d 74 68 20 65 6c 65  ert the N-th ele
64b0: 6d 65 6e 74 20 6f 66 20 70 53 74 6d 74 2d 3e 70  ment of pStmt->p
64c0: 43 6f 6c 4e 61 6d 65 5b 5d 20 69 6e 74 6f 20 61  ColName[] into a
64d0: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 0a 2a 2a   string using.**
64e0: 20 78 46 75 6e 63 28 29 20 74 68 65 6e 20 72 65   xFunc() then re
64f0: 74 75 72 6e 20 74 68 61 74 20 73 74 72 69 6e 67  turn that string
6500: 2e 20 20 49 66 20 4e 20 69 73 20 6f 75 74 20 6f  .  If N is out o
6510: 66 20 72 61 6e 67 65 2c 20 72 65 74 75 72 6e 20  f range, return 
6520: 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 61  0..**.** There a
6530: 72 65 20 75 70 20 74 6f 20 35 20 6e 61 6d 65 73  re up to 5 names
6540: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
6550: 2e 20 20 75 73 65 54 79 70 65 20 64 65 74 65 72  .  useType deter
6560: 6d 69 6e 65 73 20 77 68 69 63 68 0a 2a 2a 20 6e  mines which.** n
6570: 61 6d 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ame is returned.
6580: 20 20 48 65 72 65 20 61 72 65 20 74 68 65 20 6e    Here are the n
6590: 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ames:.**.**    0
65a0: 20 20 20 20 20 20 54 68 65 20 63 6f 6c 75 6d 6e        The column
65b0: 20 6e 61 6d 65 20 61 73 20 69 74 20 73 68 6f 75   name as it shou
65c0: 6c 64 20 62 65 20 64 69 73 70 6c 61 79 65 64 20  ld be displayed 
65d0: 66 6f 72 20 6f 75 74 70 75 74 0a 2a 2a 20 20 20  for output.**   
65e0: 20 31 20 20 20 20 20 20 54 68 65 20 64 61 74 61   1      The data
65f0: 74 79 70 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  type name for th
6600: 65 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 20 20 20 32  e column.**    2
6610: 20 20 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f        The name o
6620: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
6630: 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  hat the column d
6640: 65 72 69 76 65 73 20 66 72 6f 6d 0a 2a 2a 20 20  erives from.**  
6650: 20 20 33 20 20 20 20 20 20 54 68 65 20 6e 61 6d    3      The nam
6660: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
6670: 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  hat the column d
6680: 65 72 69 76 65 73 20 66 72 6f 6d 0a 2a 2a 20 20  erives from.**  
6690: 20 20 34 20 20 20 20 20 20 54 68 65 20 6e 61 6d    4      The nam
66a0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63  e of the table c
66b0: 6f 6c 75 6d 6e 20 74 68 61 74 20 74 68 65 20 72  olumn that the r
66c0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72  esult column der
66d0: 69 76 65 73 20 66 72 6f 6d 0a 2a 2a 0a 2a 2a 20  ives from.**.** 
66e0: 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  If the result is
66f0: 20 6e 6f 74 20 61 20 73 69 6d 70 6c 65 20 63 6f   not a simple co
6700: 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 20 28  lumn reference (
6710: 69 66 20 69 74 20 69 73 20 61 6e 20 65 78 70 72  if it is an expr
6720: 65 73 73 69 6f 6e 0a 2a 2a 20 6f 72 20 61 20 63  ession.** or a c
6730: 6f 6e 73 74 61 6e 74 29 20 74 68 65 6e 20 75 73  onstant) then us
6740: 65 54 79 70 65 73 20 32 2c 20 33 2c 20 61 6e 64  eTypes 2, 3, and
6750: 20 34 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a   4 return NULL..
6760: 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20  */.static const 
6770: 76 6f 69 64 20 2a 63 6f 6c 75 6d 6e 4e 61 6d 65  void *columnName
6780: 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  (.  sqlite3_stmt
6790: 20 2a 70 53 74 6d 74 2c 0a 20 20 69 6e 74 20 4e   *pStmt,.  int N
67a0: 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
67b0: 28 2a 78 46 75 6e 63 29 28 4d 65 6d 2a 29 2c 0a  (*xFunc)(Mem*),.
67c0: 20 20 69 6e 74 20 75 73 65 54 79 70 65 0a 29 7b    int useType.){
67d0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 72  .  const void *r
67e0: 65 74 20 3d 20 30 3b 0a 20 20 56 64 62 65 20 2a  et = 0;.  Vdbe *
67f0: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
6800: 74 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 0a 0a  t;.  int n;.  ..
6810: 20 20 69 66 28 20 70 21 3d 30 20 29 7b 0a 20 20    if( p!=0 ){.  
6820: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f    n = sqlite3_co
6830: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
6840: 29 3b 0a 20 20 20 20 69 66 28 20 4e 3c 6e 20 26  );.    if( N<n &
6850: 26 20 4e 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  & N>=0 ){.      
6860: 4e 20 2b 3d 20 75 73 65 54 79 70 65 2a 6e 3b 0a  N += useType*n;.
6870: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75        sqlite3_mu
6880: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
6890: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 72  >mutex);.      r
68a0: 65 74 20 3d 20 78 46 75 6e 63 28 26 70 2d 3e 61  et = xFunc(&p->a
68b0: 43 6f 6c 4e 61 6d 65 5b 4e 5d 29 3b 0a 0a 20 20  ColName[N]);..  
68c0: 20 20 20 20 2f 2a 20 41 20 6d 61 6c 6c 6f 63 20      /* A malloc 
68d0: 6d 61 79 20 68 61 76 65 20 66 61 69 6c 65 64 20  may have failed 
68e0: 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 78 46  inside of the xF
68f0: 75 6e 63 28 29 20 63 61 6c 6c 2e 20 49 66 20 74  unc() call. If t
6900: 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  his.      ** is 
6910: 74 68 65 20 63 61 73 65 2c 20 63 6c 65 61 72 20  the case, clear 
6920: 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  the mallocFailed
6930: 20 66 6c 61 67 20 61 6e 64 20 72 65 74 75 72 6e   flag and return
6940: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2f 0a   NULL..      */.
6950: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 64 62 20        if( p->db 
6960: 26 26 20 70 2d 3e 64 62 2d 3e 6d 61 6c 6c 6f 63  && p->db->malloc
6970: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20  Failed ){.      
6980: 20 20 70 2d 3e 64 62 2d 3e 6d 61 6c 6c 6f 63 46    p->db->mallocF
6990: 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 20  ailed = 0;.     
69a0: 20 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20 20     ret = 0;.    
69b0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
69c0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
69d0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
69e0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
69f0: 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ret;.}../*.** Re
6a00: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
6a10: 20 74 68 65 20 4e 74 68 20 63 6f 6c 75 6d 6e 20   the Nth column 
6a20: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
6a30: 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51  t returned by SQ
6a40: 4c 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 70  L.** statement p
6a50: 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  Stmt..*/.const c
6a60: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  har *sqlite3_col
6a70: 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33  umn_name(sqlite3
6a80: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6a90: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6aa0: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6ab0: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6ac0: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
6ad0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6ae0: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  ext, COLNAME_NAM
6af0: 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  E);.}.#ifndef SQ
6b00: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6b10: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
6b20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
6b30: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
6b40: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
6b50: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
6b60: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
6b70: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
6b80: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
6b90: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20  3_value_text16, 
6ba0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d  COLNAME_NAME);.}
6bb0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
6bc0: 6f 6e 73 74 72 61 69 6e 74 3a 20 20 49 66 20 79  onstraint:  If y
6bd0: 6f 75 20 68 61 76 65 20 45 4e 41 42 4c 45 5f 43  ou have ENABLE_C
6be0: 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 74  OLUMN_METADATA t
6bf0: 68 65 6e 20 79 6f 75 20 6d 75 73 74 0a 2a 2a 20  hen you must.** 
6c00: 6e 6f 74 20 64 65 66 69 6e 65 20 4f 4d 49 54 5f  not define OMIT_
6c10: 44 45 43 4c 54 59 50 45 2e 0a 2a 2f 0a 23 69 66  DECLTYPE..*/.#if
6c20: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6c30: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 29 20 26  OMIT_DECLTYPE) &
6c40: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
6c50: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
6c60: 45 54 41 44 41 54 41 29 0a 23 20 65 72 72 6f 72  ETADATA).# error
6c70: 20 22 4d 75 73 74 20 6e 6f 74 20 64 65 66 69 6e   "Must not defin
6c80: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4f 4d  e both SQLITE_OM
6c90: 49 54 5f 44 45 43 4c 54 59 50 45 20 5c 0a 20 20  IT_DECLTYPE \.  
6ca0: 20 20 20 20 20 20 20 61 6e 64 20 53 51 4c 49 54         and SQLIT
6cb0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
6cc0: 4d 45 54 41 44 41 54 41 22 0a 23 65 6e 64 69 66  METADATA".#endif
6cd0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
6ce0: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 2f  _OMIT_DECLTYPE./
6cf0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
6d00: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
6d10: 6f 6e 20 74 79 70 65 20 28 69 66 20 61 70 70 6c  on type (if appl
6d20: 69 63 61 62 6c 65 29 20 6f 66 20 74 68 65 20 27  icable) of the '
6d30: 69 27 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6f  i'th column.** o
6d40: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
6d50: 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   of SQL statemen
6d60: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73  t pStmt..*/.cons
6d70: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6d80: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
6d90: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6da0: 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72  tmt, int N){.  r
6db0: 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65  eturn columnName
6dc0: 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e  (.      pStmt, N
6dd0: 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a  , (const void*(*
6de0: 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f  )(Mem*))sqlite3_
6df0: 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e  value_text, COLN
6e00: 41 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a 7d  AME_DECLTYPE);.}
6e10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6e20: 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74  OMIT_UTF16.const
6e30: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63   void *sqlite3_c
6e40: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
6e50: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
6e60: 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  Stmt, int N){.  
6e70: 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d  return columnNam
6e80: 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20  e(.      pStmt, 
6e90: 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28  N, (const void*(
6ea0: 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33  *)(Mem*))sqlite3
6eb0: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43  _value_text16, C
6ec0: 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29  OLNAME_DECLTYPE)
6ed0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
6ee0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
6ef0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
6f00: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
6f10: 45 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  E */..#ifdef SQL
6f20: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6f30: 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a 0a 2a 2a  N_METADATA./*.**
6f40: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
6f50: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
6f60: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65   from which a re
6f70: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69  sult column deri
6f80: 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20  ves..** NULL is 
6f90: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
6fa0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73  result column is
6fb0: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
6fc0: 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a  r constant or.**
6fd0: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77   anything else w
6fe0: 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75  hich is not an u
6ff0: 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65  nabiguous refere
7000: 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73  nce to a databas
7010: 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e  e column..*/.con
7020: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
7030: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
7040: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
7050: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
7060: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
7070: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
7080: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
7090: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
70a0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
70b0: 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42 41  , COLNAME_DATABA
70c0: 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  SE);.}.#ifndef S
70d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
70e0: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
70f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
7100: 62 61 73 65 5f 6e 61 6d 65 31 36 28 73 71 6c 69  base_name16(sqli
7110: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7120: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
7130: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
7140: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
7150: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
7160: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
7170: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
7180: 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a 23  E_DATABASE);.}.#
7190: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
71a0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f  OMIT_UTF16 */../
71b0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
71c0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
71d0: 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72  e from which a r
71e0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72  esult column der
71f0: 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73  ives..** NULL is
7200: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
7210: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
7220: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
7230: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a  or constant or.*
7240: 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20  * anything else 
7250: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20  which is not an 
7260: 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72  unabiguous refer
7270: 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61  ence to a databa
7280: 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f  se column..*/.co
7290: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
72a0: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
72b0: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
72c0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
72d0: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
72e0: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
72f0: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
7300: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
7310: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
7320: 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29 3b 0a  COLNAME_TABLE);.
7330: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
7340: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73  _OMIT_UTF16.cons
7350: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
7360: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
7370: 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  e16(sqlite3_stmt
7380: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
7390: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
73a0: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
73b0: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
73c0: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
73d0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
73e0: 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29  , COLNAME_TABLE)
73f0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
7400: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
7410: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
7420: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
7430: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 66 72   table column fr
7440: 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73 75 6c  om which a resul
7450: 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  t column derives
7460: 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  ..** NULL is ret
7470: 75 72 6e 65 64 20 69 66 20 74 68 65 20 72 65 73  urned if the res
7480: 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  ult column is an
7490: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63   expression or c
74a0: 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e  onstant or.** an
74b0: 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63  ything else whic
74c0: 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62  h is not an unab
74d0: 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65  iguous reference
74e0: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63   to a database c
74f0: 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  olumn..*/.const 
7500: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f  char *sqlite3_co
7510: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
7520: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
7530: 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  Stmt, int N){.  
7540: 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d  return columnNam
7550: 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20  e(.      pStmt, 
7560: 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28  N, (const void*(
7570: 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33  *)(Mem*))sqlite3
7580: 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c  _value_text, COL
7590: 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a  NAME_COLUMN);.}.
75a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
75b0: 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20  MIT_UTF16.const 
75c0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
75d0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
75e0: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
75f0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
7600: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
7610: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
7620: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
7630: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
7640: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c  e3_value_text16,
7650: 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29   COLNAME_COLUMN)
7660: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
7670: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
7680: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
7690: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
76a0: 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f 0a 0a 0a  N_METADATA */...
76b0: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
76c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
76d0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 20 20   sqlite3_bind_  
76e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
76f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 0a  ***********.** .
7700: 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75 73 65 64  ** Routines used
7710: 20 74 6f 20 61 74 74 61 63 68 20 76 61 6c 75 65   to attach value
7720: 73 20 74 6f 20 77 69 6c 64 63 61 72 64 73 20 69  s to wildcards i
7730: 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  n a compiled SQL
7740: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 2f   statement..*/./
7750: 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74 68 65 20  *.** Unbind the 
7760: 76 61 6c 75 65 20 62 6f 75 6e 64 20 74 6f 20 76  value bound to v
7770: 61 72 69 61 62 6c 65 20 69 20 69 6e 20 76 69 72  ariable i in vir
7780: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 70 2e 20  tual machine p. 
7790: 54 68 69 73 20 69 73 20 74 68 65 20 0a 2a 2a 20  This is the .** 
77a0: 74 68 65 20 73 61 6d 65 20 61 73 20 62 69 6e 64  the same as bind
77b0: 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ing a NULL value
77c0: 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20   to the column. 
77d0: 49 66 20 74 68 65 20 22 69 22 20 70 61 72 61 6d  If the "i" param
77e0: 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75 74 20 6f  eter is.** out o
77f0: 66 20 72 61 6e 67 65 2c 20 74 68 65 6e 20 53 51  f range, then SQ
7800: 4c 49 54 45 5f 52 41 4e 47 45 20 69 73 20 72 65  LITE_RANGE is re
7810: 74 75 72 6e 65 64 2e 20 4f 74 68 65 77 69 73 65  turned. Othewise
7820: 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a 2a   SQLITE_OK..**.*
7830: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
7840: 20 73 74 6f 72 65 64 20 69 6e 20 64 61 74 61 62   stored in datab
7850: 61 73 65 20 70 2d 3e 64 62 20 69 73 20 6f 76 65  ase p->db is ove
7860: 72 77 72 69 74 74 65 6e 20 77 69 74 68 20 74 68  rwritten with th
7870: 65 20 72 65 74 75 72 6e 0a 2a 2a 20 76 61 6c 75  e return.** valu
7880: 65 20 69 6e 20 61 6e 79 20 63 61 73 65 2e 0a 2a  e in any case..*
7890: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 64 62  /.static int vdb
78a0: 65 55 6e 62 69 6e 64 28 56 64 62 65 20 2a 70 2c  eUnbind(Vdbe *p,
78b0: 20 69 6e 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a   int i){.  Mem *
78c0: 70 56 61 72 3b 0a 20 20 69 66 28 20 70 3d 3d 30  pVar;.  if( p==0
78d0: 20 7c 7c 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44   || p->magic!=VD
78e0: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 7c 7c 20  BE_MAGIC_RUN || 
78f0: 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  p->pc>=0 ){.    
7900: 69 66 28 20 70 20 29 20 73 71 6c 69 74 65 33 45  if( p ) sqlite3E
7910: 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c 49  rror(p->db, SQLI
7920: 54 45 5f 4d 49 53 55 53 45 2c 20 30 29 3b 0a 20  TE_MISUSE, 0);. 
7930: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7940: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
7950: 66 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e  f( i<1 || i>p->n
7960: 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Var ){.    sqlit
7970: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53  e3Error(p->db, S
7980: 51 4c 49 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b  QLITE_RANGE, 0);
7990: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
79a0: 54 45 5f 52 41 4e 47 45 3b 0a 20 20 7d 0a 20 20  TE_RANGE;.  }.  
79b0: 69 2d 2d 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  i--;.  pVar = &p
79c0: 2d 3e 61 56 61 72 5b 69 5d 3b 0a 20 20 73 71 6c  ->aVar[i];.  sql
79d0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
79e0: 73 65 28 70 56 61 72 29 3b 0a 20 20 70 56 61 72  se(pVar);.  pVar
79f0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
7a00: 6c 6c 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  ll;.  sqlite3Err
7a10: 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45  or(p->db, SQLITE
7a20: 5f 4f 4b 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  _OK, 0);.  retur
7a30: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
7a40: 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 74 65 78  /*.** Bind a tex
7a50: 74 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 2e  t or BLOB value.
7a60: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62  .*/.static int b
7a70: 69 6e 64 54 65 78 74 28 0a 20 20 73 71 6c 69 74  indText(.  sqlit
7a80: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
7a90: 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 6d 65    /* The stateme
7aa0: 6e 74 20 74 6f 20 62 69 6e 64 20 61 67 61 69 6e  nt to bind again
7ab0: 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 2c 20 20  st */.  int i,  
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ad0: 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 70  * Index of the p
7ae0: 61 72 61 6d 65 74 65 72 20 74 6f 20 62 69 6e 64  arameter to bind
7af0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64   */.  const void
7b00: 20 2a 7a 44 61 74 61 2c 20 20 20 20 20 2f 2a 20   *zData,     /* 
7b10: 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 64  Pointer to the d
7b20: 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20  ata to be bound 
7b30: 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20  */.  int nData, 
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7b50: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
7b60: 66 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75  f data to be bou
7b70: 6e 64 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  nd */.  void (*x
7b80: 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20 2f  Del)(void*),   /
7b90: 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
7ba0: 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 69   the data */.  i
7bb0: 6e 74 20 65 6e 63 6f 64 69 6e 67 20 20 20 20 20  nt encoding     
7bc0: 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e        /* Encodin
7bd0: 67 20 66 6f 72 20 74 68 65 20 64 61 74 61 20 2a  g for the data *
7be0: 2f 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  /.){.  Vdbe *p =
7bf0: 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a   (Vdbe *)pStmt;.
7c00: 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69    Mem *pVar;.  i
7c10: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 70 3d  nt rc;..  if( p=
7c20: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
7c30: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
7c40: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
7c50: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
7c60: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20 3d 20  >mutex);.  rc = 
7c70: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
7c80: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
7c90: 54 45 5f 4f 4b 20 26 26 20 7a 44 61 74 61 21 3d  TE_OK && zData!=
7ca0: 30 20 29 7b 0a 20 20 20 20 70 56 61 72 20 3d 20  0 ){.    pVar = 
7cb0: 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 3b 0a 20  &p->aVar[i-1];. 
7cc0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
7cd0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 56 61  dbeMemSetStr(pVa
7ce0: 72 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c  r, zData, nData,
7cf0: 20 65 6e 63 6f 64 69 6e 67 2c 20 78 44 65 6c 29   encoding, xDel)
7d00: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
7d10: 4c 49 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f 64  LITE_OK && encod
7d20: 69 6e 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ing!=0 ){.      
7d30: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7d40: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
7d50: 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29  Var, ENC(p->db))
7d60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d70: 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20  te3Error(p->db, 
7d80: 72 63 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d  rc, 0);.    rc =
7d90: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
7da0: 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 7d 0a  p->db, rc);.  }.
7db0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
7dc0: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
7dd0: 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  ex);.  return rc
7de0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64  ;.}.../*.** Bind
7df0: 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 74 6f   a blob value to
7e00: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
7e10: 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69  t variable..*/.i
7e20: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
7e30: 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f  blob(.  sqlite3_
7e40: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20  stmt *pStmt, .  
7e50: 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20  int i, .  const 
7e60: 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20  void *zData, .  
7e70: 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f  int nData, .  vo
7e80: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
7e90: 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62 69  ).){.  return bi
7ea0: 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c  ndText(pStmt, i,
7eb0: 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 78   zData, nData, x
7ec0: 44 65 6c 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20 73  Del, 0);.}.int s
7ed0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
7ee0: 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  le(sqlite3_stmt 
7ef0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 64  *pStmt, int i, d
7f00: 6f 75 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a 20  ouble rValue){. 
7f10: 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20   int rc;.  Vdbe 
7f20: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
7f30: 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  mt;.  sqlite3_mu
7f40: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
7f50: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20 3d 20  >mutex);.  rc = 
7f60: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
7f70: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
7f80: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
7f90: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f  ite3VdbeMemSetDo
7fa0: 75 62 6c 65 28 26 70 2d 3e 61 56 61 72 5b 69 2d  uble(&p->aVar[i-
7fb0: 31 5d 2c 20 72 56 61 6c 75 65 29 3b 0a 20 20 7d  1], rValue);.  }
7fc0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
7fd0: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
7fe0: 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
7ff0: 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  c;.}.int sqlite3
8000: 5f 62 69 6e 64 5f 69 6e 74 28 73 71 6c 69 74 65  _bind_int(sqlite
8010: 33 5f 73 74 6d 74 20 2a 70 2c 20 69 6e 74 20 69  3_stmt *p, int i
8020: 2c 20 69 6e 74 20 69 56 61 6c 75 65 29 7b 0a 20  , int iValue){. 
8030: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
8040: 62 69 6e 64 5f 69 6e 74 36 34 28 70 2c 20 69 2c  bind_int64(p, i,
8050: 20 28 69 36 34 29 69 56 61 6c 75 65 29 3b 0a 7d   (i64)iValue);.}
8060: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
8070: 64 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f  d_int64(sqlite3_
8080: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
8090: 20 69 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34   i, sqlite_int64
80a0: 20 69 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20   iValue){.  int 
80b0: 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  rc;.  Vdbe *p = 
80c0: 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20  (Vdbe *)pStmt;. 
80d0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
80e0: 6e 74 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  nter(p->db->mute
80f0: 78 29 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55  x);.  rc = vdbeU
8100: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69  nbind(p, i);.  i
8110: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
8120: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
8130: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
8140: 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 69 56  p->aVar[i-1], iV
8150: 61 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  alue);.  }.  sql
8160: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
8170: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
8180: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69    return rc;.}.i
8190: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
81a0: 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 73 74 6d  null(sqlite3_stm
81b0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
81c0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64  {.  int rc;.  Vd
81d0: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
81e0: 53 74 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Stmt;.  sqlite3_
81f0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64  mutex_enter(p->d
8200: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20  b->mutex);.  rc 
8210: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
8220: 69 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  i);.  sqlite3_mu
8230: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
8240: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
8250: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
8260: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 20 0a  te3_bind_text( .
8270: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
8280: 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c  pStmt, .  int i,
8290: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   .  const char *
82a0: 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44  zData, .  int nD
82b0: 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  ata, .  void (*x
82c0: 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  Del)(void*).){. 
82d0: 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74   return bindText
82e0: 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61  (pStmt, i, zData
82f0: 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 53  , nData, xDel, S
8300: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23  QLITE_UTF8);.}.#
8310: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8320: 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
8330: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
8340: 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  (.  sqlite3_stmt
8350: 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20   *pStmt, .  int 
8360: 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i, .  const void
8370: 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20   *zData, .  int 
8380: 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28  nData, .  void (
8390: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b  *xDel)(void*).){
83a0: 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65  .  return bindTe
83b0: 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61  xt(pStmt, i, zDa
83c0: 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c  ta, nData, xDel,
83d0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
83e0: 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  IVE);.}.#endif /
83f0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
8400: 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  F16 */.int sqlit
8410: 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73 71  e3_bind_value(sq
8420: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8430: 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74 20  t, int i, const 
8440: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
8450: 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63  Value){.  int rc
8460: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
8470: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 73  dbe *)pStmt;.  s
8480: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
8490: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
84a0: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
84b0: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
84c0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
84d0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
84e0: 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 70  e3VdbeMemCopy(&p
84f0: 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 70 56 61  ->aVar[i-1], pVa
8500: 6c 75 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  lue);.    if( rc
8510: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
8520: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
8530: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8540: 69 6e 67 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31  ing(&p->aVar[i-1
8550: 5d 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a  ], ENC(p->db));.
8560: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
8570: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
8580: 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 73 71  p->db, rc);.  sq
8590: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
85a0: 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  e(p->db->mutex);
85b0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
85c0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
85d0: 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69 74 65  _zeroblob(sqlite
85e0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
85f0: 6e 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a 20 20  nt i, int n){.  
8600: 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a  int rc;.  Vdbe *
8610: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
8620: 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  t;.  sqlite3_mut
8630: 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d 3e  ex_enter(p->db->
8640: 6d 75 74 65 78 29 3b 0a 20 20 72 63 20 3d 20 76  mutex);.  rc = v
8650: 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b  dbeUnbind(p, i);
8660: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
8670: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
8680: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65 72  te3VdbeMemSetZer
8690: 6f 42 6c 6f 62 28 26 70 2d 3e 61 56 61 72 5b 69  oBlob(&p->aVar[i
86a0: 2d 31 5d 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 73  -1], n);.  }.  s
86b0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
86c0: 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  ve(p->db->mutex)
86d0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
86e0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
86f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c  he number of wil
8700: 64 63 61 72 64 73 20 74 68 61 74 20 63 61 6e 20  dcards that can 
8710: 62 65 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 62  be potentially b
8720: 6f 75 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68 69 73  ound to..** This
8730: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 64 64 65   routine is adde
8740: 64 20 74 6f 20 73 75 70 70 6f 72 74 20 44 42 44  d to support DBD
8750: 3a 3a 53 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69  ::SQLite.  .*/.i
8760: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
8770: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
8780: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
8790: 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20  tmt){.  Vdbe *p 
87a0: 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a  = (Vdbe*)pStmt;.
87b0: 20 20 72 65 74 75 72 6e 20 70 20 3f 20 70 2d 3e    return p ? p->
87c0: 6e 56 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a  nVar : 0;.}../*.
87d0: 2a 2a 20 43 72 65 61 74 65 20 61 20 6d 61 70 70  ** Create a mapp
87e0: 69 6e 67 20 66 72 6f 6d 20 76 61 72 69 61 62 6c  ing from variabl
87f0: 65 20 6e 75 6d 62 65 72 73 20 74 6f 20 76 61 72  e numbers to var
8800: 69 61 62 6c 65 20 6e 61 6d 65 73 0a 2a 2a 20 69  iable names.** i
8810: 6e 20 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72  n the Vdbe.azVar
8820: 5b 5d 20 61 72 72 61 79 2c 20 69 66 20 73 75 63  [] array, if suc
8830: 68 20 61 20 6d 61 70 70 69 6e 67 20 64 6f 65 73  h a mapping does
8840: 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
8850: 65 78 69 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  exist..*/.static
8860: 20 76 6f 69 64 20 63 72 65 61 74 65 56 61 72 4d   void createVarM
8870: 61 70 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69  ap(Vdbe *p){.  i
8880: 66 28 20 21 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a  f( !p->okVar ){.
8890: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
88a0: 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d 3e 6d  x_enter(p->db->m
88b0: 75 74 65 78 29 3b 0a 20 20 20 20 69 66 28 20 21  utex);.    if( !
88c0: 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20 20 20 20  p->okVar ){.    
88d0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 4f    int j;.      O
88e0: 70 20 2a 70 4f 70 3b 0a 20 20 20 20 20 20 66 6f  p *pOp;.      fo
88f0: 72 28 6a 3d 30 2c 20 70 4f 70 3d 70 2d 3e 61 4f  r(j=0, pOp=p->aO
8900: 70 3b 20 6a 3c 70 2d 3e 6e 4f 70 3b 20 6a 2b 2b  p; j<p->nOp; j++
8910: 2c 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 20 20  , pOp++){.      
8920: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
8930: 65 3d 3d 4f 50 5f 56 61 72 69 61 62 6c 65 20 29  e==OP_Variable )
8940: 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
8950: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
8960: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
8970: 72 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  r );.          p
8980: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
8990: 31 5d 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  1] = pOp->p4.z;.
89a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
89b0: 7d 0a 20 20 20 20 20 20 70 2d 3e 6f 6b 56 61 72  }.      p->okVar
89c0: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
89d0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
89e0: 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(p->db->mutex
89f0: 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  );.  }.}../*.** 
8a00: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
8a10: 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 70 61  of a wildcard pa
8a20: 72 61 6d 65 74 65 72 2e 20 20 52 65 74 75 72 6e  rameter.  Return
8a30: 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 69 6e 64   NULL if the ind
8a40: 65 78 0a 2a 2a 20 69 73 20 6f 75 74 20 6f 66 20  ex.** is out of 
8a50: 72 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20  range or if the 
8a60: 77 69 6c 64 63 61 72 64 20 69 73 20 75 6e 6e 61  wildcard is unna
8a70: 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  med..**.** The r
8a80: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
8a90: 55 54 46 2d 38 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  UTF-8..*/.const 
8aa0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 62 69  char *sqlite3_bi
8ab0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
8ac0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
8ad0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
8ae0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
8af0: 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 70  *)pStmt;.  if( p
8b00: 3d 3d 30 20 7c 7c 20 69 3c 31 20 7c 7c 20 69 3e  ==0 || i<1 || i>
8b10: 70 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 72  p->nVar ){.    r
8b20: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 63  eturn 0;.  }.  c
8b30: 72 65 61 74 65 56 61 72 4d 61 70 28 70 29 3b 0a  reateVarMap(p);.
8b40: 20 20 72 65 74 75 72 6e 20 70 2d 3e 61 7a 56 61    return p->azVa
8b50: 72 5b 69 2d 31 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  r[i-1];.}../*.**
8b60: 20 47 69 76 65 6e 20 61 20 77 69 6c 64 63 61 72   Given a wildcar
8b70: 64 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65  d parameter name
8b80: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 69 6e 64  , return the ind
8b90: 65 78 20 6f 66 20 74 68 65 20 76 61 72 69 61 62  ex of the variab
8ba0: 6c 65 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  le.** with that 
8bb0: 6e 61 6d 65 2e 20 20 49 66 20 74 68 65 72 65 20  name.  If there 
8bc0: 69 73 20 6e 6f 20 76 61 72 69 61 62 6c 65 20 77  is no variable w
8bd0: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 6e 61  ith the given na
8be0: 6d 65 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 30 2e  me,.** return 0.
8bf0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
8c00: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
8c10: 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 73 74 6d  ndex(sqlite3_stm
8c20: 74 20 2a 70 53 74 6d 74 2c 20 63 6f 6e 73 74 20  t *pStmt, const 
8c30: 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20  char *zName){.  
8c40: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
8c50: 29 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b  )pStmt;.  int i;
8c60: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20  .  if( p==0 ){. 
8c70: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
8c80: 0a 20 20 63 72 65 61 74 65 56 61 72 4d 61 70 28  .  createVarMap(
8c90: 70 29 3b 20 0a 20 20 69 66 28 20 7a 4e 61 6d 65  p); .  if( zName
8ca0: 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   ){.    for(i=0;
8cb0: 20 69 3c 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29   i<p->nVar; i++)
8cc0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
8cd0: 61 72 20 2a 7a 20 3d 20 70 2d 3e 61 7a 56 61 72  ar *z = p->azVar
8ce0: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
8cf0: 20 26 26 20 73 74 72 63 6d 70 28 7a 2c 7a 4e 61   && strcmp(z,zNa
8d00: 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
8d10: 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a 20 20    return i+1;.  
8d20: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
8d30: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
8d40: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c  *.** Transfer al
8d50: 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20  l bindings from 
8d60: 74 68 65 20 66 69 72 73 74 20 73 74 61 74 65 6d  the first statem
8d70: 65 6e 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ent over to the 
8d80: 73 65 63 6f 6e 64 2e 0a 2a 2a 20 49 66 20 74 68  second..** If th
8d90: 65 20 74 77 6f 20 73 74 61 74 65 6d 65 6e 74 73  e two statements
8da0: 20 63 6f 6e 74 61 69 6e 20 61 20 64 69 66 66 65   contain a diffe
8db0: 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 62  rent number of b
8dc0: 69 6e 64 69 6e 67 73 2c 20 74 68 65 6e 0a 2a 2a  indings, then.**
8dd0: 20 61 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52   an SQLITE_ERROR
8de0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
8df0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61  .int sqlite3_tra
8e00: 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 73  nsfer_bindings(s
8e10: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72  qlite3_stmt *pFr
8e20: 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f  omStmt, sqlite3_
8e30: 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a  stmt *pToStmt){.
8e40: 20 20 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20    Vdbe *pFrom = 
8e50: 28 56 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74  (Vdbe*)pFromStmt
8e60: 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20  ;.  Vdbe *pTo = 
8e70: 28 56 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a  (Vdbe*)pToStmt;.
8e80: 20 20 69 6e 74 20 69 2c 20 72 63 20 3d 20 53 51    int i, rc = SQ
8e90: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 28  LITE_OK;.  if( (
8ea0: 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21 3d 56 44  pFrom->magic!=VD
8eb0: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
8ec0: 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21 3d 56 44  pFrom->magic!=VD
8ed0: 42 45 5f 4d 41 47 49 43 5f 48 41 4c 54 29 0a 20  BE_MAGIC_HALT). 
8ee0: 20 20 20 7c 7c 20 28 70 54 6f 2d 3e 6d 61 67 69     || (pTo->magi
8ef0: 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c!=VDBE_MAGIC_RU
8f00: 4e 20 26 26 20 70 54 6f 2d 3e 6d 61 67 69 63 21  N && pTo->magic!
8f10: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 48 41 4c 54  =VDBE_MAGIC_HALT
8f20: 29 0a 20 20 20 20 7c 7c 20 70 54 6f 2d 3e 64 62  ).    || pTo->db
8f30: 21 3d 70 46 72 6f 6d 2d 3e 64 62 20 29 7b 0a 20  !=pFrom->db ){. 
8f40: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
8f50: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
8f60: 66 28 20 70 46 72 6f 6d 2d 3e 6e 56 61 72 21 3d  f( pFrom->nVar!=
8f70: 70 54 6f 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20  pTo->nVar ){.   
8f80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
8f90: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  RROR;.  }.  sqli
8fa0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
8fb0: 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  pTo->db->mutex);
8fc0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
8fd0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 70  SQLITE_OK && i<p
8fe0: 46 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29  From->nVar; i++)
8ff0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
9000: 65 4d 65 6d 4d 6f 76 65 28 26 70 54 6f 2d 3e 61  eMemMove(&pTo->a
9010: 56 61 72 5b 69 5d 2c 20 26 70 46 72 6f 6d 2d 3e  Var[i], &pFrom->
9020: 61 56 61 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  aVar[i]);.  }.  
9030: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
9040: 61 76 65 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74  ave(pTo->db->mut
9050: 65 78 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ex);.  assert( r
9060: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
9070: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
9080: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b   );.  return rc;
9090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
90a0: 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 64 61   the sqlite3* da
90b0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 6f  tabase handle to
90c0: 20 77 68 69 63 68 20 74 68 65 20 70 72 65 70 61   which the prepa
90d0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 67 69  red statement gi
90e0: 76 65 6e 0a 2a 2a 20 69 6e 20 74 68 65 20 61 72  ven.** in the ar
90f0: 67 75 6d 65 6e 74 20 62 65 6c 6f 6e 67 73 2e 20  gument belongs. 
9100: 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61 6d   This is the sam
9110: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
9120: 65 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 74 68  e that was.** th
9130: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
9140: 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
9150: 70 72 65 70 61 72 65 28 29 20 74 68 61 74 20 77  prepare() that w
9160: 61 73 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  as used to creat
9170: 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 6d 65  e.** the stateme
9180: 6e 74 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  nt in the first 
9190: 70 6c 61 63 65 2e 0a 2a 2f 0a 73 71 6c 69 74 65  place..*/.sqlite
91a0: 33 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f 68 61  3 *sqlite3_db_ha
91b0: 6e 64 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  ndle(sqlite3_stm
91c0: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72 65 74  t *pStmt){.  ret
91d0: 75 72 6e 20 70 53 74 6d 74 20 3f 20 28 28 56 64  urn pStmt ? ((Vd
91e0: 62 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62 20 3a  be*)pStmt)->db :
91f0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   0;.}../*.** Ret
9200: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
9210: 20 74 68 65 20 6e 65 78 74 20 70 72 65 70 61 72   the next prepar
9220: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74  ed statement aft
9230: 65 72 20 70 53 74 6d 74 20 61 73 73 6f 63 69 61  er pStmt associa
9240: 74 65 64 0a 2a 2a 20 77 69 74 68 20 64 61 74 61  ted.** with data
9250: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
9260: 70 44 62 2e 20 20 49 66 20 70 53 74 6d 74 20 69  pDb.  If pStmt i
9270: 73 20 4e 55 4c 4c 2c 20 72 65 74 75 72 6e 20 74  s NULL, return t
9280: 68 65 20 66 69 72 73 74 0a 2a 2a 20 70 72 65 70  he first.** prep
9290: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 66  ared statement f
92a0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
92b0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 52 65 74  connection.  Ret
92c0: 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72  urn NULL if ther
92d0: 65 0a 2a 2a 20 61 72 65 20 6e 6f 20 6d 6f 72 65  e.** are no more
92e0: 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f 73 74 6d  ..*/.sqlite3_stm
92f0: 74 20 2a 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f  t *sqlite3_next_
9300: 73 74 6d 74 28 73 71 6c 69 74 65 33 20 2a 70 44  stmt(sqlite3 *pD
9310: 62 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  b, sqlite3_stmt 
9320: 2a 70 53 74 6d 74 29 7b 0a 20 20 73 71 6c 69 74  *pStmt){.  sqlit
9330: 65 33 5f 73 74 6d 74 20 2a 70 4e 65 78 74 3b 0a  e3_stmt *pNext;.
9340: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
9350: 65 6e 74 65 72 28 70 44 62 2d 3e 6d 75 74 65 78  enter(pDb->mutex
9360: 29 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d  );.  if( pStmt==
9370: 30 20 29 7b 0a 20 20 20 20 70 4e 65 78 74 20 3d  0 ){.    pNext =
9380: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
9390: 70 44 62 2d 3e 70 56 64 62 65 3b 0a 20 20 7d 65  pDb->pVdbe;.  }e
93a0: 6c 73 65 7b 0a 20 20 20 20 70 4e 65 78 74 20 3d  lse{.    pNext =
93b0: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
93c0: 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 2d 3e  ((Vdbe*)pStmt)->
93d0: 70 4e 65 78 74 3b 0a 20 20 7d 0a 20 20 73 71 6c  pNext;.  }.  sql
93e0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
93f0: 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  (pDb->mutex);.  
9400: 72 65 74 75 72 6e 20 70 4e 65 78 74 3b 0a 7d 0a  return pNext;.}.