/ Hex Artifact Content
Login

Artifact b10052643e45b611e52f4782ebc761e01c1add75:


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 36 37 20  beapi.c,v 1.167 
01e0: 32 30 30 39 2f 30 36 2f 32 35 20 30 31 3a 34 37  2009/06/25 01:47
01f0: 3a 31 32 20 64 72 68 20 45 78 70 20 24 0a 2a 2f  :12 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 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
0240: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a  T_DEPRECATED./*.
0250: 2a 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 28  ** Return TRUE (
0260: 6e 6f 6e 2d 7a 65 72 6f 29 20 6f 66 20 74 68 65  non-zero) of the
0270: 20 73 74 61 74 65 6d 65 6e 74 20 73 75 70 70 6c   statement suppl
0280: 69 65 64 20 61 73 20 61 6e 20 61 72 67 75 6d 65  ied as an argume
0290: 6e 74 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62  nt needs.** to b
02a0: 65 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41  e recompiled.  A
02b0: 20 73 74 61 74 65 6d 65 6e 74 20 6e 65 65 64 73   statement needs
02c0: 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65   to be recompile
02d0: 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 0a 2a  d whenever the.*
02e0: 2a 20 65 78 65 63 75 74 69 6f 6e 20 65 6e 76 69  * execution envi
02f0: 72 6f 6e 6d 65 6e 74 20 63 68 61 6e 67 65 73 20  ronment changes 
0300: 69 6e 20 61 20 77 61 79 20 74 68 61 74 20 77 6f  in a way that wo
0310: 75 6c 64 20 61 6c 74 65 72 20 74 68 65 20 70 72  uld alter the pr
0320: 6f 67 72 61 6d 0a 2a 2a 20 74 68 61 74 20 73 71  ogram.** that sq
0330: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
0340: 67 65 6e 65 72 61 74 65 73 2e 20 20 46 6f 72 20  generates.  For 
0350: 65 78 61 6d 70 6c 65 2c 20 69 66 20 6e 65 77 20  example, if new 
0360: 66 75 6e 63 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20  functions or.** 
0370: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
0380: 63 65 73 20 61 72 65 20 72 65 67 69 73 74 65 72  ces are register
0390: 65 64 20 6f 72 20 69 66 20 61 6e 20 61 75 74 68  ed or if an auth
03a0: 6f 72 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  orizer function 
03b0: 69 73 0a 2a 2a 20 61 64 64 65 64 20 6f 72 20 63  is.** added or c
03c0: 68 61 6e 67 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  hanged..*/.int s
03d0: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28 73  qlite3_expired(s
03e0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
03f0: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  mt){.  Vdbe *p =
0400: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
0410: 20 72 65 74 75 72 6e 20 70 3d 3d 30 20 7c 7c 20   return p==0 || 
0420: 70 2d 3e 65 78 70 69 72 65 64 3b 0a 7d 0a 23 65  p->expired;.}.#e
0430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
0440: 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e  following routin
0450: 65 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72  e destroys a vir
0460: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61  tual machine tha
0470: 74 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  t is created by.
0480: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
0490: 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65  ompile() routine
04a0: 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65  . The integer re
04b0: 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c  turned is an SQL
04c0: 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f  ITE_.** success/
04d0: 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61  failure code tha
04e0: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
04f0: 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74  result of execut
0500: 69 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ing the virtual.
0510: 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a  ** machine..**.*
0520: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
0530: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
0540: 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65  de and string re
0550: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
0560: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20  ite3_errcode(), 
0570: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
0580: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
0590: 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20  msg16()..*/.int 
05a0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
05b0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
05c0: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b  Stmt){.  int rc;
05d0: 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20  .  if( pStmt==0 
05e0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
05f0: 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  TE_OK;.  }else{.
0600: 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56      Vdbe *v = (V
0610: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 20 20  dbe*)pStmt;.    
0620: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 2d  sqlite3 *db = v-
0630: 3e 64 62 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  >db;.#if SQLITE_
0640: 54 48 52 45 41 44 53 41 46 45 0a 20 20 20 20 73  THREADSAFE.    s
0650: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
0660: 74 65 78 20 3d 20 76 2d 3e 64 62 2d 3e 6d 75 74  tex = v->db->mut
0670: 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 73  ex;.#endif.    s
0680: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
0690: 65 72 28 6d 75 74 65 78 29 3b 0a 20 20 20 20 72  er(mutex);.    r
06a0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  c = sqlite3VdbeF
06b0: 69 6e 61 6c 69 7a 65 28 76 29 3b 0a 20 20 20 20  inalize(v);.    
06c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45  rc = sqlite3ApiE
06d0: 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20 20 20  xit(db, rc);.   
06e0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
06f0: 65 61 76 65 28 6d 75 74 65 78 29 3b 0a 20 20 7d  eave(mutex);.  }
0700: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
0710: 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65  ./*.** Terminate
0720: 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65   the current exe
0730: 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c  cution of an SQL
0740: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
0750: 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20  eset it.** back 
0760: 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20  to its starting 
0770: 73 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74  state so that it
0780: 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20   can be reused. 
0790: 41 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66  A success code f
07a0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72  rom.** the prior
07b0: 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65   execution is re
07c0: 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  turned..**.** Th
07d0: 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20  is routine sets 
07e0: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  the error code a
07f0: 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  nd string return
0800: 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
0810: 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69  _errcode(), sqli
0820: 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64  te3_errmsg() and
0830: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31   sqlite3_errmsg1
0840: 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  6()..*/.int sqli
0850: 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65  te3_reset(sqlite
0860: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
0870: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
0880: 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20  pStmt==0 ){.    
0890: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
08a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
08b0: 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53  e *v = (Vdbe*)pS
08c0: 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  tmt;.    sqlite3
08d0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 76 2d 3e  _mutex_enter(v->
08e0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
08f0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
0900: 52 65 73 65 74 28 76 29 3b 0a 20 20 20 20 73 71  Reset(v);.    sq
0910: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61  lite3VdbeMakeRea
0920: 64 79 28 76 2c 20 2d 31 2c 20 30 2c 20 30 2c 20  dy(v, -1, 0, 0, 
0930: 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 61 73  0, 0, 0);.    as
0940: 73 65 72 74 28 20 28 72 63 20 26 20 28 76 2d 3e  sert( (rc & (v->
0950: 64 62 2d 3e 65 72 72 4d 61 73 6b 29 29 3d 3d 72  db->errMask))==r
0960: 63 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  c );.    rc = sq
0970: 6c 69 74 65 33 41 70 69 45 78 69 74 28 76 2d 3e  lite3ApiExit(v->
0980: 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71 6c  db, rc);.    sql
0990: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
09a0: 28 76 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (v->db->mutex);.
09b0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
09c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 61 6c  .}../*.** Set al
09d0: 6c 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  l the parameters
09e0: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
09f0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74   SQL statement t
0a00: 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73  o NULL..*/.int s
0a10: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
0a20: 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
0a30: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e  mt *pStmt){.  in
0a40: 74 20 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  t i;.  int rc = 
0a50: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 56 64 62  SQLITE_OK;.  Vdb
0a60: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
0a70: 74 6d 74 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  tmt;.#if SQLITE_
0a80: 54 48 52 45 41 44 53 41 46 45 0a 20 20 73 71 6c  THREADSAFE.  sql
0a90: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
0aa0: 78 20 3d 20 28 28 56 64 62 65 2a 29 70 53 74 6d  x = ((Vdbe*)pStm
0ab0: 74 29 2d 3e 64 62 2d 3e 6d 75 74 65 78 3b 0a 23  t)->db->mutex;.#
0ac0: 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f  endif.  sqlite3_
0ad0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 75 74 65  mutex_enter(mute
0ae0: 78 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  x);.  for(i=0; i
0af0: 3c 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a  <p->nVar; i++){.
0b00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
0b10: 65 6d 52 65 6c 65 61 73 65 28 26 70 2d 3e 61 56  emRelease(&p->aV
0b20: 61 72 5b 69 5d 29 3b 0a 20 20 20 20 70 2d 3e 61  ar[i]);.    p->a
0b30: 56 61 72 5b 69 5d 2e 66 6c 61 67 73 20 3d 20 4d  Var[i].flags = M
0b40: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a 20 20 73  EM_Null;.  }.  s
0b50: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
0b60: 76 65 28 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  ve(mutex);.  ret
0b70: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 2a 2a  urn rc;.}.../***
0b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65  ********* sqlite
0ba0: 33 5f 76 61 6c 75 65 5f 20 20 2a 2a 2a 2a 2a 2a  3_value_  ******
0bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65  *********.** The
0bd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69   following routi
0be0: 6e 65 73 20 65 78 74 72 61 63 74 20 69 6e 66 6f  nes extract info
0bf0: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 4d  rmation from a M
0c00: 65 6d 20 6f 72 20 73 71 6c 69 74 65 33 5f 76 61  em or sqlite3_va
0c10: 6c 75 65 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  lue.** structure
0c20: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
0c30: 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  *sqlite3_value_b
0c40: 6c 6f 62 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  lob(sqlite3_valu
0c50: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20  e *pVal){.  Mem 
0c60: 2a 70 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b  *p = (Mem*)pVal;
0c70: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  .  if( p->flags 
0c80: 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
0c90: 53 74 72 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  Str) ){.    sqli
0ca0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
0cb0: 42 6c 6f 62 28 70 29 3b 0a 20 20 20 20 70 2d 3e  Blob(p);.    p->
0cc0: 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74  flags &= ~MEM_St
0cd0: 72 3b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73 20  r;.    p->flags 
0ce0: 7c 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 20  |= MEM_Blob;.   
0cf0: 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 20 20   return p->z;.  
0d00: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
0d10: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  n sqlite3_value_
0d20: 74 65 78 74 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  text(pVal);.  }.
0d30: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  }.int sqlite3_va
0d40: 6c 75 65 5f 62 79 74 65 73 28 73 71 6c 69 74 65  lue_bytes(sqlite
0d50: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
0d60: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
0d70: 56 61 6c 75 65 42 79 74 65 73 28 70 56 61 6c 2c  ValueBytes(pVal,
0d80: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d   SQLITE_UTF8);.}
0d90: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
0da0: 75 65 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74  ue_bytes16(sqlit
0db0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
0dc0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
0dd0: 33 56 61 6c 75 65 42 79 74 65 73 28 70 56 61 6c  3ValueBytes(pVal
0de0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
0df0: 54 49 56 45 29 3b 0a 7d 0a 64 6f 75 62 6c 65 20  TIVE);.}.double 
0e00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
0e10: 75 62 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  uble(sqlite3_val
0e20: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
0e30: 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65 52  urn sqlite3VdbeR
0e40: 65 61 6c 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70  ealValue((Mem*)p
0e50: 56 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  Val);.}.int sqli
0e60: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 73 71  te3_value_int(sq
0e70: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
0e80: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 69 6e  l){.  return (in
0e90: 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
0ea0: 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c  Value((Mem*)pVal
0eb0: 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69 6e 74 36  );.}.sqlite_int6
0ec0: 34 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  4 sqlite3_value_
0ed0: 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f 76 61  int64(sqlite3_va
0ee0: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
0ef0: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65  turn sqlite3Vdbe
0f00: 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70  IntValue((Mem*)p
0f10: 56 61 6c 29 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e  Val);.}.const un
0f20: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c  signed char *sql
0f30: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
0f40: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
0f50: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28  Val){.  return (
0f60: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
0f70: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 56 61 6c  har *)sqlite3Val
0f80: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
0f90: 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66  ITE_UTF8);.}.#if
0fa0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0fb0: 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69  _UTF16.const voi
0fc0: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
0fd0: 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33 5f  _text16(sqlite3_
0fe0: 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20  value* pVal){.  
0ff0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61  return sqlite3Va
1000: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
1010: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
1020: 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20  );.}.const void 
1030: 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  *sqlite3_value_t
1040: 65 78 74 31 36 62 65 28 73 71 6c 69 74 65 33 5f  ext16be(sqlite3_
1050: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
1060: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61  return sqlite3Va
1070: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
1080: 4c 49 54 45 5f 55 54 46 31 36 42 45 29 3b 0a 7d  LITE_UTF16BE);.}
1090: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
10a0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
10b0: 36 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  6le(sqlite3_valu
10c0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75  e *pVal){.  retu
10d0: 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54  rn sqlite3ValueT
10e0: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
10f0: 5f 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23 65 6e  _UTF16LE);.}.#en
1100: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
1110: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
1120: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
1130: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
1140: 2a 20 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72  * pVal){.  retur
1150: 6e 20 70 56 61 6c 2d 3e 74 79 70 65 3b 0a 7d 0a  n pVal->type;.}.
1160: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
1170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73  ************** s
1180: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 20 20  qlite3_result_  
1190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
11b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11c0: 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73   routines are us
11d0: 65 64 20 62 79 20 75 73 65 72 2d 64 65 66 69 6e  ed by user-defin
11e0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  ed functions to 
11f0: 73 70 65 63 69 66 79 0a 2a 2a 20 74 68 65 20 66  specify.** the f
1200: 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74 2e 0a  unction result..
1210: 2a 2a 0a 2a 2a 20 54 68 65 20 73 65 74 53 74 72  **.** The setStr
1220: 4f 72 45 72 72 6f 72 28 29 20 66 75 6e 74 69 6f  OrError() funtio
1230: 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 56  n calls sqlite3V
1240: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 29 20 74  dbeMemSetStr() t
1250: 6f 20 73 74 6f 72 65 20 74 68 65 0a 2a 2a 20 72  o store the.** r
1260: 65 73 75 6c 74 20 61 73 20 61 20 73 74 72 69 6e  esult as a strin
1270: 67 20 6f 72 20 62 6c 6f 62 20 62 75 74 20 69 66  g or blob but if
1280: 20 74 68 65 20 73 74 72 69 6e 67 20 6f 72 20 62   the string or b
1290: 6c 6f 62 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  lob is too large
12a0: 2c 20 69 74 0a 2a 2a 20 74 68 65 6e 20 73 65 74  , it.** then set
12b0: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
12c0: 20 74 6f 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   to SQLITE_TOOBI
12d0: 47 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  G.*/.static void
12e0: 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45   setResultStrOrE
12f0: 72 72 6f 72 28 0a 20 20 73 71 6c 69 74 65 33 5f  rror(.  sqlite3_
1300: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 20  context *pCtx,  
1310: 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 6f 6e 74  /* Function cont
1320: 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
1330: 68 61 72 20 2a 7a 2c 20 20 20 20 20 20 20 20 20  har *z,         
1340: 20 2f 2a 20 53 74 72 69 6e 67 20 70 6f 69 6e 74   /* String point
1350: 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c 20 20  er */.  int n,  
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 2f 2a 20 42 79 74 65 73 20 69 6e 20 73 74 72 69  /* Bytes in stri
1380: 6e 67 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 20  ng, or negative 
1390: 2a 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20 20 20  */.  u8 enc,    
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13b0: 45 6e 63 6f 64 69 6e 67 20 6f 66 20 7a 2e 20 20  Encoding of z.  
13c0: 30 20 66 6f 72 20 42 4c 4f 42 73 20 2a 2f 0a 20  0 for BLOBs */. 
13d0: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
13e0: 69 64 2a 29 20 20 20 20 20 2f 2a 20 44 65 73 74  id*)     /* Dest
13f0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
1400: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  */.){.  if( sqli
1410: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
1420: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
1430: 20 65 6e 63 2c 20 78 44 65 6c 29 3d 3d 53 51 4c   enc, xDel)==SQL
1440: 49 54 45 5f 54 4f 4f 42 49 47 20 29 7b 0a 20 20  ITE_TOOBIG ){.  
1450: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
1460: 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28 70 43  _error_toobig(pC
1470: 74 78 29 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64 20  tx);.  }.}.void 
1480: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62  sqlite3_result_b
1490: 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  lob(.  sqlite3_c
14a0: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
14b0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20   const void *z, 
14c0: 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69  .  int n, .  voi
14d0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a  d (*xDel)(void *
14e0: 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 6e  ).){.  assert( n
14f0: 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1500: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
1510: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
1520: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52  mutex) );.  setR
1530: 65 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28  esultStrOrError(
1540: 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 30 2c 20 78  pCtx, z, n, 0, x
1550: 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Del);.}.void sql
1560: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
1570: 6c 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  le(sqlite3_conte
1580: 78 74 20 2a 70 43 74 78 2c 20 64 6f 75 62 6c 65  xt *pCtx, double
1590: 20 72 56 61 6c 29 7b 0a 20 20 61 73 73 65 72 74   rVal){.  assert
15a0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
15b0: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
15c0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
15d0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f  ite3VdbeMemSetDo
15e0: 75 62 6c 65 28 26 70 43 74 78 2d 3e 73 2c 20 72  uble(&pCtx->s, r
15f0: 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Val);.}.void sql
1600: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
1610: 72 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  r(sqlite3_contex
1620: 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 63  t *pCtx, const c
1630: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a  har *z, int n){.
1640: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1650: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
1660: 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20  x->s.db->mutex) 
1670: 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72  );.  pCtx->isErr
1680: 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  or = SQLITE_ERRO
1690: 52 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  R;.  sqlite3Vdbe
16a0: 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d  MemSetStr(&pCtx-
16b0: 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  >s, z, n, SQLITE
16c0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 54 52  _UTF8, SQLITE_TR
16d0: 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e  ANSIENT);.}.#ifn
16e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16f0: 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69 74  UTF16.void sqlit
1700: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31  e3_result_error1
1710: 36 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  6(sqlite3_contex
1720: 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20 76  t *pCtx, const v
1730: 6f 69 64 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a  oid *z, int n){.
1740: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1750: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
1760: 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20  x->s.db->mutex) 
1770: 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72  );.  pCtx->isErr
1780: 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  or = SQLITE_ERRO
1790: 52 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  R;.  sqlite3Vdbe
17a0: 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d  MemSetStr(&pCtx-
17b0: 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  >s, z, n, SQLITE
17c0: 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51  _UTF16NATIVE, SQ
17d0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
17e0: 0a 7d 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  .}.#endif.void s
17f0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
1800: 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  t(sqlite3_contex
1810: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 56 61  t *pCtx, int iVa
1820: 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  l){.  assert( sq
1830: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
1840: 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74  (pCtx->s.db->mut
1850: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
1860: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
1870: 26 70 43 74 78 2d 3e 73 2c 20 28 69 36 34 29 69  &pCtx->s, (i64)i
1880: 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Val);.}.void sql
1890: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
18a0: 34 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  4(sqlite3_contex
18b0: 74 20 2a 70 43 74 78 2c 20 69 36 34 20 69 56 61  t *pCtx, i64 iVa
18c0: 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  l){.  assert( sq
18d0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
18e0: 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74  (pCtx->s.db->mut
18f0: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
1900: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
1910: 26 70 43 74 78 2d 3e 73 2c 20 69 56 61 6c 29 3b  &pCtx->s, iVal);
1920: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
1930: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69  result_null(sqli
1940: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
1950: 78 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  x){.  assert( sq
1960: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
1970: 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74  (pCtx->s.db->mut
1980: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
1990: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26  VdbeMemSetNull(&
19a0: 70 43 74 78 2d 3e 73 29 3b 0a 7d 0a 76 6f 69 64  pCtx->s);.}.void
19b0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
19c0: 74 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f  text(.  sqlite3_
19d0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
19e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c    const char *z,
19f0: 20 0a 20 20 69 6e 74 20 6e 2c 0a 20 20 76 6f 69   .  int n,.  voi
1a00: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a  d (*xDel)(void *
1a10: 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  ).){.  assert( s
1a20: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
1a30: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
1a40: 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73  tex) );.  setRes
1a50: 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43  ultStrOrError(pC
1a60: 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  tx, z, n, SQLITE
1a70: 5f 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a  _UTF8, xDel);.}.
1a80: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1a90: 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64 20 73  MIT_UTF16.void s
1aa0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
1ab0: 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65 33 5f  xt16(.  sqlite3_
1ac0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
1ad0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
1ae0: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
1af0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
1b00: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
1b10: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
1b20: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
1b30: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
1b40: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
1b50: 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  Ctx, z, n, SQLIT
1b60: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 78  E_UTF16NATIVE, x
1b70: 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Del);.}.void sql
1b80: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
1b90: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
1ba0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
1bb0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
1bc0: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
1bd0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
1be0: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
1bf0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
1c00: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
1c10: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
1c20: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
1c30: 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  Ctx, z, n, SQLIT
1c40: 45 5f 55 54 46 31 36 42 45 2c 20 78 44 65 6c 29  E_UTF16BE, xDel)
1c50: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
1c60: 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65  _result_text16le
1c70: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
1c80: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f  ext *pCtx, .  co
1c90: 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20  nst void *z, .  
1ca0: 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28  int n, .  void (
1cb0: 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29  *xDel)(void *).)
1cc0: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
1cd0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
1ce0: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
1cf0: 29 20 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74  ) );.  setResult
1d00: 53 74 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c  StrOrError(pCtx,
1d10: 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54   z, n, SQLITE_UT
1d20: 46 31 36 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a  F16LE, xDel);.}.
1d30: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1d40: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 76  _OMIT_UTF16 */.v
1d50: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
1d60: 6c 74 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33  lt_value(sqlite3
1d70: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1d80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
1d90: 56 61 6c 75 65 29 7b 0a 20 20 61 73 73 65 72 74  Value){.  assert
1da0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
1db0: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
1dc0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
1dd0: 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
1de0: 26 70 43 74 78 2d 3e 73 2c 20 70 56 61 6c 75 65  &pCtx->s, pValue
1df0: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
1e00: 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f  3_result_zeroblo
1e10: 62 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  b(sqlite3_contex
1e20: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 6e 29 7b  t *pCtx, int n){
1e30: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1e40: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
1e50: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
1e60: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
1e70: 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28  eMemSetZeroBlob(
1e80: 26 70 43 74 78 2d 3e 73 2c 20 6e 29 3b 0a 7d 0a  &pCtx->s, n);.}.
1e90: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
1ea0: 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28 73  ult_error_code(s
1eb0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1ec0: 70 43 74 78 2c 20 69 6e 74 20 65 72 72 43 6f 64  pCtx, int errCod
1ed0: 65 29 7b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72  e){.  pCtx->isEr
1ee0: 72 6f 72 20 3d 20 65 72 72 43 6f 64 65 3b 0a 20  ror = errCode;. 
1ef0: 20 69 66 28 20 70 43 74 78 2d 3e 73 2e 66 6c 61   if( pCtx->s.fla
1f00: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1f10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1f20: 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d  MemSetStr(&pCtx-
1f30: 3e 73 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  >s, sqlite3ErrSt
1f40: 72 28 65 72 72 43 6f 64 65 29 2c 20 2d 31 2c 20  r(errCode), -1, 
1f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f60: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1f70: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
1f80: 41 54 49 43 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  ATIC);.  }.}../*
1f90: 20 46 6f 72 63 65 20 61 6e 20 53 51 4c 49 54 45   Force an SQLITE
1fa0: 5f 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e 20 2a  _TOOBIG error. *
1fb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
1fc0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62  esult_error_toob
1fd0: 69 67 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ig(sqlite3_conte
1fe0: 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73  xt *pCtx){.  ass
1ff0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2000: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
2010: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2020: 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
2030: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20  SQLITE_TOOBIG;. 
2040: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2050: 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c 20  etStr(&pCtx->s, 
2060: 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  "string or blob 
2070: 74 6f 6f 20 62 69 67 22 2c 20 2d 31 2c 20 0a 20  too big", -1, . 
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
20a0: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
20b0: 29 3b 0a 7d 0a 0a 2f 2a 20 41 6e 20 53 51 4c 49  );.}../* An SQLI
20c0: 54 45 5f 4e 4f 4d 45 4d 20 65 72 72 6f 72 2e 20  TE_NOMEM error. 
20d0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
20e0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d  result_error_nom
20f0: 65 6d 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  em(sqlite3_conte
2100: 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73  xt *pCtx){.  ass
2110: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2120: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
2130: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2140: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2150: 74 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73 29 3b  tNull(&pCtx->s);
2160: 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
2170: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2180: 0a 20 20 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  .  pCtx->s.db->m
2190: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
21a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  .}../*.** Execut
21b0: 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  e the statement 
21c0: 70 53 74 6d 74 2c 20 65 69 74 68 65 72 20 75 6e  pStmt, either un
21d0: 74 69 6c 20 61 20 72 6f 77 20 6f 66 20 64 61 74  til a row of dat
21e0: 61 20 69 73 20 72 65 61 64 79 2c 20 74 68 65 0a  a is ready, the.
21f0: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ** statement is 
2200: 63 6f 6d 70 6c 65 74 65 6c 79 20 65 78 65 63 75  completely execu
2210: 74 65 64 20 6f 72 20 61 6e 20 65 72 72 6f 72 20  ted or an error 
2220: 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  occurs..**.** Th
2230: 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65  is routine imple
2240: 6d 65 6e 74 73 20 74 68 65 20 62 75 6c 6b 20 6f  ments the bulk o
2250: 66 20 74 68 65 20 6c 6f 67 69 63 20 62 65 68 69  f the logic behi
2260: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  nd the sqlite_st
2270: 65 70 28 29 0a 2a 2a 20 41 50 49 2e 20 20 54 68  ep().** API.  Th
2280: 65 20 6f 6e 6c 79 20 74 68 69 6e 67 20 6f 6d 69  e only thing omi
2290: 74 74 65 64 20 69 73 20 74 68 65 20 61 75 74 6f  tted is the auto
22a0: 6d 61 74 69 63 20 72 65 63 6f 6d 70 69 6c 65 20  matic recompile 
22b0: 69 66 20 61 20 0a 2a 2a 20 73 63 68 65 6d 61 20  if a .** schema 
22c0: 63 68 61 6e 67 65 20 68 61 73 20 6f 63 63 75 72  change has occur
22d0: 72 65 64 2e 20 20 54 68 61 74 20 64 65 74 61 69  red.  That detai
22e0: 6c 20 69 73 20 68 61 6e 64 6c 65 64 20 62 79 20  l is handled by 
22f0: 74 68 65 0a 2a 2a 20 6f 75 74 65 72 20 73 71 6c  the.** outer sql
2300: 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
2310: 70 65 72 20 70 72 6f 63 65 64 75 72 65 2e 0a 2a  per procedure..*
2320: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
2330: 69 74 65 33 53 74 65 70 28 56 64 62 65 20 2a 70  ite3Step(Vdbe *p
2340: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
2350: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 61  ;.  int rc;..  a
2360: 73 73 65 72 74 28 70 29 3b 0a 20 20 69 66 28 20  ssert(p);.  if( 
2370: 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d  p->magic!=VDBE_M
2380: 41 47 49 43 5f 52 55 4e 20 29 7b 0a 20 20 20 20  AGIC_RUN ){.    
2390: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
23a0: 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  SUSE;.  }..  /* 
23b0: 41 73 73 65 72 74 20 74 68 61 74 20 6d 61 6c 6c  Assert that mall
23c0: 6f 63 28 29 20 68 61 73 20 6e 6f 74 20 66 61 69  oc() has not fai
23d0: 6c 65 64 20 2a 2f 0a 20 20 64 62 20 3d 20 70 2d  led */.  db = p-
23e0: 3e 64 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  >db;.  if( db->m
23f0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
2400: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
2410: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20 20 69  _NOMEM;.  }..  i
2420: 66 28 20 70 2d 3e 70 63 3c 3d 30 20 26 26 20 70  f( p->pc<=0 && p
2430: 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
2440: 20 69 66 28 20 41 4c 57 41 59 53 28 70 2d 3e 72   if( ALWAYS(p->r
2450: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
2460: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43  p->rc==SQLITE_SC
2470: 48 45 4d 41 29 20 29 7b 0a 20 20 20 20 20 20 70  HEMA) ){.      p
2480: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43  ->rc = SQLITE_SC
2490: 48 45 4d 41 3b 0a 20 20 20 20 7d 0a 20 20 20 20  HEMA;.    }.    
24a0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
24b0: 52 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  R;.    goto end_
24c0: 6f 66 5f 73 74 65 70 3b 0a 20 20 7d 0a 20 20 69  of_step;.  }.  i
24d0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
24e0: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 70 2d  On(db) ){.    p-
24f0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53  >rc = SQLITE_MIS
2500: 55 53 45 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  USE;.    return 
2510: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
2520: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 30   }.  if( p->pc<0
2530: 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
2540: 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72  ere are no other
2550: 20 73 74 61 74 65 6d 65 6e 74 73 20 63 75 72 72   statements curr
2560: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 74  ently running, t
2570: 68 65 6e 0a 20 20 20 20 2a 2a 20 72 65 73 65 74  hen.    ** reset
2580: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 66   the interrupt f
2590: 6c 61 67 2e 20 20 54 68 69 73 20 70 72 65 76 65  lag.  This preve
25a0: 6e 74 73 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  nts a call to sq
25b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 0a  lite3_interrupt.
25c0: 20 20 20 20 2a 2a 20 66 72 6f 6d 20 69 6e 74 65      ** from inte
25d0: 72 72 75 70 74 69 6e 67 20 61 20 73 74 61 74 65  rrupting a state
25e0: 6d 65 6e 74 20 74 68 61 74 20 68 61 73 20 6e 6f  ment that has no
25f0: 74 20 79 65 74 20 73 74 61 72 74 65 64 2e 0a 20  t yet started.. 
2600: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
2610: 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3d  ->activeVdbeCnt=
2620: 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 ){.      db->
2630: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
2640: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = 0;.    }..   
2650: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 77 72 69   assert( db->wri
2660: 74 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 64  teVdbeCnt>0 || d
2670: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
2680: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
2690: 64 43 6f 6e 73 3d 3d 30 20 29 3b 0a 0a 23 69 66  dCons==0 );..#if
26a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26b0: 5f 54 52 41 43 45 0a 20 20 20 20 69 66 28 20 64  _TRACE.    if( d
26c0: 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21  b->xProfile && !
26d0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b  db->init.busy ){
26e0: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 4e  .      double rN
26f0: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
2700: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64  3OsCurrentTime(d
2710: 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b  b->pVfs, &rNow);
2720: 0a 20 20 20 20 20 20 70 2d 3e 73 74 61 72 74 54  .      p->startT
2730: 69 6d 65 20 3d 20 28 75 36 34 29 28 28 72 4e 6f  ime = (u64)((rNo
2740: 77 20 2d 20 28 69 6e 74 29 72 4e 6f 77 29 2a 33  w - (int)rNow)*3
2750: 36 30 30 2e 30 2a 32 34 2e 30 2a 31 30 30 30 30  600.0*24.0*10000
2760: 30 30 30 30 30 2e 30 29 3b 0a 20 20 20 20 7d 0a  00000.0);.    }.
2770: 23 65 6e 64 69 66 0a 0a 20 20 20 20 64 62 2d 3e  #endif..    db->
2780: 61 63 74 69 76 65 56 64 62 65 43 6e 74 2b 2b 3b  activeVdbeCnt++;
2790: 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 65 61 64  .    if( p->read
27a0: 4f 6e 6c 79 3d 3d 30 20 29 20 64 62 2d 3e 77 72  Only==0 ) db->wr
27b0: 69 74 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20 20  iteVdbeCnt++;.  
27c0: 20 20 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 7d    p->pc = 0;.  }
27d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27e0: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
27f0: 66 28 20 70 2d 3e 65 78 70 6c 61 69 6e 20 29 7b  f( p->explain ){
2800: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2810: 33 56 64 62 65 4c 69 73 74 28 70 29 3b 0a 20 20  3VdbeList(p);.  
2820: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
2830: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
2840: 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  AIN */.  {.    r
2850: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  c = sqlite3VdbeE
2860: 78 65 63 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 69  xec(p);.  }..  i
2870: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2880: 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72  Off(db) ){.    r
2890: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
28a0: 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  E;.  }..#ifndef 
28b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
28c0: 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  E.  /* Invoke th
28d0: 65 20 70 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61  e profile callba
28e0: 63 6b 20 69 66 20 74 68 65 72 65 20 69 73 20 6f  ck if there is o
28f0: 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63  ne.  */.  if( rc
2900: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20  !=SQLITE_ROW && 
2910: 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20  db->xProfile && 
2920: 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 26  !db->init.busy &
2930: 26 20 70 2d 3e 7a 53 71 6c 20 29 7b 0a 20 20 20  & p->zSql ){.   
2940: 20 64 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20 20   double rNow;.  
2950: 20 20 75 36 34 20 65 6c 61 70 73 65 54 69 6d 65    u64 elapseTime
2960: 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73  ;..    sqlite3Os
2970: 43 75 72 72 65 6e 74 54 69 6d 65 28 64 62 2d 3e  CurrentTime(db->
2980: 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b 0a 20 20  pVfs, &rNow);.  
2990: 20 20 65 6c 61 70 73 65 54 69 6d 65 20 3d 20 28    elapseTime = (
29a0: 75 36 34 29 28 28 72 4e 6f 77 20 2d 20 28 69 6e  u64)((rNow - (in
29b0: 74 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32  t)rNow)*3600.0*2
29c0: 34 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30  4.0*1000000000.0
29d0: 29 3b 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d  );.    elapseTim
29e0: 65 20 2d 3d 20 70 2d 3e 73 74 61 72 74 54 69 6d  e -= p->startTim
29f0: 65 3b 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 66  e;.    db->xProf
2a00: 69 6c 65 28 64 62 2d 3e 70 50 72 6f 66 69 6c 65  ile(db->pProfile
2a10: 41 72 67 2c 20 70 2d 3e 7a 53 71 6c 2c 20 65 6c  Arg, p->zSql, el
2a20: 61 70 73 65 54 69 6d 65 29 3b 0a 20 20 7d 0a 23  apseTime);.  }.#
2a30: 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e 65 72 72  endif..  db->err
2a40: 43 6f 64 65 20 3d 20 72 63 3b 0a 20 20 69 66 28  Code = rc;.  if(
2a50: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73   SQLITE_NOMEM==s
2a60: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d  qlite3ApiExit(p-
2a70: 3e 64 62 2c 20 70 2d 3e 72 63 29 20 29 7b 0a 20  >db, p->rc) ){. 
2a80: 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54     p->rc = SQLIT
2a90: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 65 6e 64  E_NOMEM;.  }.end
2aa0: 5f 6f 66 5f 73 74 65 70 3a 0a 20 20 2f 2a 20 41  _of_step:.  /* A
2ab0: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 6c 6f 63  t this point loc
2ac0: 61 6c 20 76 61 72 69 61 62 6c 65 20 72 63 20 68  al variable rc h
2ad0: 6f 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 74  olds the value t
2ae0: 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 0a 20  hat should be . 
2af0: 20 2a 2a 20 72 65 74 75 72 6e 65 64 20 69 66 20   ** returned if 
2b00: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  this statement w
2b10: 61 73 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e  as compiled usin
2b20: 67 20 74 68 65 20 6c 65 67 61 63 79 20 0a 20 20  g the legacy .  
2b30: 2a 2a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ** sqlite3_prepa
2b40: 72 65 28 29 20 69 6e 74 65 72 66 61 63 65 2e 20  re() interface. 
2b50: 41 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  According to the
2b60: 20 64 6f 63 73 2c 20 74 68 69 73 20 63 61 6e 20   docs, this can 
2b70: 6f 6e 6c 79 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  only.  ** be one
2b80: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
2b90: 6e 20 74 68 65 20 66 69 72 73 74 20 61 73 73 65  n the first asse
2ba0: 72 74 28 29 20 62 65 6c 6f 77 2e 20 56 61 72 69  rt() below. Vari
2bb0: 61 62 6c 65 20 70 2d 3e 72 63 20 0a 20 20 2a 2a  able p->rc .  **
2bc0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61   contains the va
2bd0: 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
2be0: 65 20 72 65 74 75 72 6e 65 64 20 69 66 20 73 71  e returned if sq
2bf0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
2c00: 20 0a 20 20 2a 2a 20 77 65 72 65 20 63 61 6c 6c   .  ** were call
2c10: 65 64 20 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20  ed on statement 
2c20: 70 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  p..  */.  assert
2c30: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  ( rc==SQLITE_ROW
2c40: 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f    || rc==SQLITE_
2c50: 44 4f 4e 45 20 20 20 7c 7c 20 72 63 3d 3d 53 51  DONE   || rc==SQ
2c60: 4c 49 54 45 5f 45 52 52 4f 52 20 0a 20 20 20 20  LITE_ERROR .    
2c70: 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45     || rc==SQLITE
2c80: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
2c90: 49 54 45 5f 4d 49 53 55 53 45 0a 20 20 29 3b 0a  ITE_MISUSE.  );.
2ca0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21    assert( p->rc!
2cb0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 70  =SQLITE_ROW && p
2cc0: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ->rc!=SQLITE_DON
2cd0: 45 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 69 73  E );.  if( p->is
2ce0: 50 72 65 70 61 72 65 56 32 20 26 26 20 72 63 21  PrepareV2 && rc!
2cf0: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72  =SQLITE_ROW && r
2d00: 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c!=SQLITE_DONE )
2d10: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
2d20: 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70   statement was p
2d30: 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 71  repared using sq
2d40: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
2d50: 28 29 2c 20 61 6e 64 20 61 6e 0a 20 20 20 20 2a  (), and an.    *
2d60: 2a 20 65 72 72 6f 72 20 68 61 73 20 6f 63 63 75  * error has occu
2d70: 72 65 64 2c 20 74 68 65 6e 20 72 65 74 75 72 6e  red, then return
2d80: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
2d90: 69 6e 20 70 2d 3e 72 63 20 74 6f 20 74 68 65 0a  in p->rc to the.
2da0: 20 20 20 20 2a 2a 20 63 61 6c 6c 65 72 2e 20 53      ** caller. S
2db0: 65 74 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  et the error cod
2dc0: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2dd0: 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20  e handle to the 
2de0: 73 61 6d 65 20 76 61 6c 75 65 2e 0a 20 20 20 20  same value..    
2df0: 2a 2f 20 0a 20 20 20 20 72 63 20 3d 20 64 62 2d  */ .    rc = db-
2e00: 3e 65 72 72 43 6f 64 65 20 3d 20 70 2d 3e 72 63  >errCode = p->rc
2e10: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 28  ;.  }.  return (
2e20: 72 63 26 64 62 2d 3e 65 72 72 4d 61 73 6b 29 3b  rc&db->errMask);
2e30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
2e40: 73 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20  s the top-level 
2e50: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
2e60: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
2e70: 2e 20 20 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74  .  Call.** sqlit
2e80: 65 33 53 74 65 70 28 29 20 74 6f 20 64 6f 20 6d  e3Step() to do m
2e90: 6f 73 74 20 6f 66 20 74 68 65 20 77 6f 72 6b 2e  ost of the work.
2ea0: 20 20 49 66 20 61 20 73 63 68 65 6d 61 20 65 72    If a schema er
2eb0: 72 6f 72 20 6f 63 63 75 72 73 2c 0a 2a 2a 20 63  ror occurs,.** c
2ec0: 61 6c 6c 20 73 71 6c 69 74 65 33 52 65 70 72 65  all sqlite3Repre
2ed0: 70 61 72 65 28 29 20 61 6e 64 20 74 72 79 20 61  pare() and try a
2ee0: 67 61 69 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  gain..*/.int sql
2ef0: 69 74 65 33 5f 73 74 65 70 28 73 71 6c 69 74 65  ite3_step(sqlite
2f00: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
2f10: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
2f20: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 69 66 28 20  E_MISUSE;.  if( 
2f30: 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 6e 74  pStmt ){.    int
2f40: 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 56 64   cnt = 0;.    Vd
2f50: 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29 70  be *v = (Vdbe*)p
2f60: 53 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  Stmt;.    sqlite
2f70: 33 20 2a 64 62 20 3d 20 76 2d 3e 64 62 3b 0a 20  3 *db = v->db;. 
2f80: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
2f90: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
2fa0: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 72  );.    while( (r
2fb0: 63 20 3d 20 73 71 6c 69 74 65 33 53 74 65 70 28  c = sqlite3Step(
2fc0: 76 29 29 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45  v))==SQLITE_SCHE
2fd0: 4d 41 0a 20 20 20 20 20 20 20 20 20 20 20 26 26  MA.           &&
2fe0: 20 63 6e 74 2b 2b 20 3c 20 35 0a 20 20 20 20 20   cnt++ < 5.     
2ff0: 20 20 20 20 20 20 26 26 20 28 72 63 20 3d 20 73        && (rc = s
3000: 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
3010: 76 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  v))==SQLITE_OK )
3020: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3030: 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20  reset(pStmt);.  
3040: 20 20 20 20 76 2d 3e 65 78 70 69 72 65 64 20 3d      v->expired =
3050: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   0;.    }.    if
3060: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48  ( rc==SQLITE_SCH
3070: 45 4d 41 20 26 26 20 41 4c 57 41 59 53 28 76 2d  EMA && ALWAYS(v-
3080: 3e 69 73 50 72 65 70 61 72 65 56 32 29 20 26 26  >isPrepareV2) &&
3090: 20 41 4c 57 41 59 53 28 64 62 2d 3e 70 45 72 72   ALWAYS(db->pErr
30a0: 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68  ) ){.      /* Th
30b0: 69 73 20 63 61 73 65 20 6f 63 63 75 72 73 20 61  is case occurs a
30c0: 66 74 65 72 20 66 61 69 6c 69 6e 67 20 74 6f 20  fter failing to 
30d0: 72 65 63 6f 6d 70 69 6c 65 20 61 6e 20 73 71 6c  recompile an sql
30e0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 20 20 20   statement. .   
30f0: 20 20 20 2a 2a 20 54 68 65 20 65 72 72 6f 72 20     ** The error 
3100: 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74 68 65  message from the
3110: 20 53 51 4c 20 63 6f 6d 70 69 6c 65 72 20 68 61   SQL compiler ha
3120: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c  s already been l
3130: 6f 61 64 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  oaded .      ** 
3140: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
3150: 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73 20 62  e handle. This b
3160: 6c 6f 63 6b 20 63 6f 70 69 65 73 20 74 68 65 20  lock copies the 
3170: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 0a 20  error message . 
3180: 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74 68 65       ** from the
3190: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
31a0: 20 69 6e 74 6f 20 74 68 65 20 73 74 61 74 65 6d   into the statem
31b0: 65 6e 74 20 61 6e 64 20 73 65 74 73 20 74 68 65  ent and sets the
31c0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 20   statement.     
31d0: 20 2a 2a 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e   ** program coun
31e0: 74 65 72 20 74 6f 20 30 20 74 6f 20 65 6e 73 75  ter to 0 to ensu
31f0: 72 65 20 74 68 61 74 20 77 68 65 6e 20 74 68 65  re that when the
3200: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 0a 20   statement is . 
3210: 20 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69 7a 65       ** finalize
3220: 64 20 6f 72 20 72 65 73 65 74 20 74 68 65 20 70  d or reset the p
3230: 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65 73 73  arser error mess
3240: 61 67 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65  age is available
3250: 20 76 69 61 0a 20 20 20 20 20 20 2a 2a 20 73 71   via.      ** sq
3260: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
3270: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nd sqlite3_errco
3280: 64 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  de()..      */. 
3290: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
32a0: 2a 7a 45 72 72 20 3d 20 28 63 6f 6e 73 74 20 63  *zErr = (const c
32b0: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 76 61  har *)sqlite3_va
32c0: 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45 72  lue_text(db->pEr
32d0: 72 29 3b 20 0a 20 20 20 20 20 20 73 71 6c 69 74  r); .      sqlit
32e0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 76 2d 3e  e3DbFree(db, v->
32f0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20  zErrMsg);.      
3300: 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  if( !db->mallocF
3310: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 20  ailed ){.       
3320: 20 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   v->zErrMsg = sq
3330: 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
3340: 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 7d  , zErr);.      }
3350: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
3360: 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  v->zErrMsg = 0;.
3370: 20 20 20 20 20 20 20 20 76 2d 3e 72 63 20 3d 20          v->rc = 
3380: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
3390: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
33a0: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45  rc = sqlite3ApiE
33b0: 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20 20 20  xit(db, rc);.   
33c0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
33d0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
33e0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
33f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61  ;.}../*.** Extra
3400: 63 74 20 74 68 65 20 75 73 65 72 20 64 61 74 61  ct the user data
3410: 20 66 72 6f 6d 20 61 20 73 71 6c 69 74 65 33 5f   from a sqlite3_
3420: 63 6f 6e 74 65 78 74 20 73 74 72 75 63 74 75 72  context structur
3430: 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61 0a 2a  e and return a.*
3440: 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  * pointer to it.
3450: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
3460: 33 5f 75 73 65 72 5f 64 61 74 61 28 73 71 6c 69  3_user_data(sqli
3470: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b  te3_context *p){
3480: 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20  .  assert( p && 
3490: 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72 65  p->pFunc );.  re
34a0: 74 75 72 6e 20 70 2d 3e 70 46 75 6e 63 2d 3e 70  turn p->pFunc->p
34b0: 55 73 65 72 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a  UserData;.}../*.
34c0: 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 75  ** Extract the u
34d0: 73 65 72 20 64 61 74 61 20 66 72 6f 6d 20 61 20  ser data from a 
34e0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
34f0: 73 74 72 75 63 74 75 72 65 20 61 6e 64 20 72 65  structure and re
3500: 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  turn a.** pointe
3510: 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a 73 71 6c 69  r to it..*/.sqli
3520: 74 65 33 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6e  te3 *sqlite3_con
3530: 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 73  text_db_handle(s
3540: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
3550: 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20  p){.  assert( p 
3560: 26 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20  && p->pFunc );. 
3570: 20 72 65 74 75 72 6e 20 70 2d 3e 73 2e 64 62 3b   return p->s.db;
3580: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
3590: 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65 20 69  llowing is the i
35a0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
35b0: 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
35c0: 20 74 68 61 74 20 61 6c 77 61 79 73 0a 2a 2a 20   that always.** 
35d0: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
35e0: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 61 74  ror message stat
35f0: 69 6e 67 20 74 68 61 74 20 74 68 65 20 66 75 6e  ing that the fun
3600: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 69 6e  ction is used in
3610: 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f   the.** wrong co
3620: 6e 74 65 78 74 2e 20 20 54 68 65 20 73 71 6c 69  ntext.  The sqli
3630: 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
3640: 63 74 69 6f 6e 28 29 20 41 50 49 20 6d 69 67 68  ction() API migh
3650: 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a 2a 20 53  t construct.** S
3660: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  QL function that
3670: 20 75 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e   use this routin
3680: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 66 75  e so that the fu
3690: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 65 78 69  nctions will exi
36a0: 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d 65 20 72  st.** for name r
36b0: 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20 61 72  esolution but ar
36c0: 65 20 61 63 74 75 61 6c 6c 79 20 6f 76 65 72 6c  e actually overl
36d0: 6f 61 64 65 64 20 62 79 20 74 68 65 20 78 46 69  oaded by the xFi
36e0: 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65  ndFunction.** me
36f0: 74 68 6f 64 20 6f 66 20 76 69 72 74 75 61 6c 20  thod of virtual 
3700: 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20  tables..*/.void 
3710: 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
3720: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
3730: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
3740: 78 74 2c 20 20 2f 2a 20 54 68 65 20 66 75 6e 63  xt,  /* The func
3750: 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63 6f 6e  tion calling con
3760: 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 4e 6f  text */.  int No
3770: 74 55 73 65 64 2c 20 20 20 20 20 20 20 20 20 20  tUsed,          
3780: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3790: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
37a0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
37b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
37c0: 2a 4e 6f 74 55 73 65 64 32 20 20 20 2f 2a 20 56  *NotUsed2   /* V
37d0: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 61 72 67  alue of each arg
37e0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f  ument */.){.  co
37f0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20  nst char *zName 
3800: 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46 75 6e 63  = context->pFunc
3810: 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68 61 72 20  ->zName;.  char 
3820: 2a 7a 45 72 72 3b 0a 20 20 55 4e 55 53 45 44 5f  *zErr;.  UNUSED_
3830: 50 41 52 41 4d 45 54 45 52 32 28 4e 6f 74 55 73  PARAMETER2(NotUs
3840: 65 64 2c 20 4e 6f 74 55 73 65 64 32 29 3b 0a 20  ed, NotUsed2);. 
3850: 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f   zErr = sqlite3_
3860: 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20 20 22  mprintf(.      "
3870: 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 66 75  unable to use fu
3880: 6e 63 74 69 6f 6e 20 25 73 20 69 6e 20 74 68 65  nction %s in the
3890: 20 72 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65   requested conte
38a0: 78 74 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 73  xt", zName);.  s
38b0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
38c0: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 7a 45 72  ror(context, zEr
38d0: 72 2c 20 2d 31 29 3b 0a 20 20 73 71 6c 69 74 65  r, -1);.  sqlite
38e0: 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 7d 0a  3_free(zErr);.}.
38f0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
3900: 6f 72 20 72 65 74 75 72 6e 20 74 68 65 20 61 67  or return the ag
3910: 67 72 65 67 61 74 65 20 63 6f 6e 74 65 78 74 20  gregate context 
3920: 66 6f 72 20 61 20 75 73 65 72 20 66 75 6e 63 74  for a user funct
3930: 69 6f 6e 2e 20 20 41 20 6e 65 77 0a 2a 2a 20 63  ion.  A new.** c
3940: 6f 6e 74 65 78 74 20 69 73 20 61 6c 6c 6f 63 61  ontext is alloca
3950: 74 65 64 20 6f 6e 20 74 68 65 20 66 69 72 73 74  ted on the first
3960: 20 63 61 6c 6c 2e 20 20 53 75 62 73 65 71 75 65   call.  Subseque
3970: 6e 74 20 63 61 6c 6c 73 20 72 65 74 75 72 6e 20  nt calls return 
3980: 74 68 65 0a 2a 2a 20 73 61 6d 65 20 63 6f 6e 74  the.** same cont
3990: 65 78 74 20 74 68 61 74 20 77 61 73 20 72 65 74  ext that was ret
39a0: 75 72 6e 65 64 20 6f 6e 20 70 72 69 6f 72 20 63  urned on prior c
39b0: 61 6c 6c 73 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  alls..*/.void *s
39c0: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
39d0: 5f 63 6f 6e 74 65 78 74 28 73 71 6c 69 74 65 33  _context(sqlite3
39e0: 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74  _context *p, int
39f0: 20 6e 42 79 74 65 29 7b 0a 20 20 4d 65 6d 20 2a   nByte){.  Mem *
3a00: 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
3a10: 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26  p && p->pFunc &&
3a20: 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70   p->pFunc->xStep
3a30: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
3a40: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
3a50: 28 70 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  (p->s.db->mutex)
3a60: 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e   );.  pMem = p->
3a70: 70 4d 65 6d 3b 0a 20 20 69 66 28 20 28 70 4d 65  pMem;.  if( (pMe
3a80: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41  m->flags & MEM_A
3a90: 67 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  gg)==0 ){.    if
3aa0: 28 20 6e 42 79 74 65 3d 3d 30 20 29 7b 0a 20 20  ( nByte==0 ){.  
3ab0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
3ac0: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
3ad0: 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 70  l(pMem);.      p
3ae0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
3af0: 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d 65  _Null;.      pMe
3b00: 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 7d 65  m->z = 0;.    }e
3b10: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
3b20: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d  e3VdbeMemGrow(pM
3b30: 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 3b 0a 20  em, nByte, 0);. 
3b40: 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
3b50: 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20 20 20 20   = MEM_Agg;.    
3b60: 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65 66 20 3d    pMem->u.pDef =
3b70: 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20 20 20 20   p->pFunc;.     
3b80: 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 20 29 7b 0a   if( pMem->z ){.
3b90: 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70          memset(p
3ba0: 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65  Mem->z, 0, nByte
3bb0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
3bc0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 28 76  .  }.  return (v
3bd0: 6f 69 64 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a  oid*)pMem->z;.}.
3be0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
3bf0: 65 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 20  e auxilary data 
3c00: 70 6f 69 6e 74 65 72 2c 20 69 66 20 61 6e 79 2c  pointer, if any,
3c10: 20 66 6f 72 20 74 68 65 20 69 41 72 67 27 74 68   for the iArg'th
3c20: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3c30: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
3c40: 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70 43 74  n defined by pCt
3c50: 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  x..*/.void *sqli
3c60: 74 65 33 5f 67 65 74 5f 61 75 78 64 61 74 61 28  te3_get_auxdata(
3c70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
3c80: 2a 70 43 74 78 2c 20 69 6e 74 20 69 41 72 67 29  *pCtx, int iArg)
3c90: 7b 0a 20 20 56 64 62 65 46 75 6e 63 20 2a 70 56  {.  VdbeFunc *pV
3ca0: 64 62 65 46 75 6e 63 3b 0a 0a 20 20 61 73 73 65  dbeFunc;..  asse
3cb0: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3cc0: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64  x_held(pCtx->s.d
3cd0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 70  b->mutex) );.  p
3ce0: 56 64 62 65 46 75 6e 63 20 3d 20 70 43 74 78 2d  VdbeFunc = pCtx-
3cf0: 3e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 69 66  >pVdbeFunc;.  if
3d00: 28 20 21 70 56 64 62 65 46 75 6e 63 20 7c 7c 20  ( !pVdbeFunc || 
3d10: 69 41 72 67 3e 3d 70 56 64 62 65 46 75 6e 63 2d  iArg>=pVdbeFunc-
3d20: 3e 6e 41 75 78 20 7c 7c 20 69 41 72 67 3c 30 20  >nAux || iArg<0 
3d30: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
3d40: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 56  .  }.  return pV
3d50: 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69  dbeFunc->apAux[i
3d60: 41 72 67 5d 2e 70 41 75 78 3b 0a 7d 0a 0a 2f 2a  Arg].pAux;.}../*
3d70: 0a 2a 2a 20 53 65 74 20 74 68 65 20 61 75 78 69  .** Set the auxi
3d80: 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e 74 65  lary data pointe
3d90: 72 20 61 6e 64 20 64 65 6c 65 74 65 20 66 75 6e  r and delete fun
3da0: 63 74 69 6f 6e 2c 20 66 6f 72 20 74 68 65 20 69  ction, for the i
3db0: 41 72 67 27 74 68 0a 2a 2a 20 61 72 67 75 6d 65  Arg'th.** argume
3dc0: 6e 74 20 74 6f 20 74 68 65 20 75 73 65 72 2d 66  nt to the user-f
3dd0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 65 64 20  unction defined 
3de0: 62 79 20 70 43 74 78 2e 20 41 6e 79 20 70 72 65  by pCtx. Any pre
3df0: 76 69 6f 75 73 20 76 61 6c 75 65 20 69 73 0a 2a  vious value is.*
3e00: 2a 20 64 65 6c 65 74 65 64 20 62 79 20 63 61 6c  * deleted by cal
3e10: 6c 69 6e 67 20 74 68 65 20 64 65 6c 65 74 65 20  ling the delete 
3e20: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
3e30: 65 64 20 77 68 65 6e 20 69 74 20 77 61 73 20 73  ed when it was s
3e40: 65 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  et..*/.void sqli
3e50: 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28  te3_set_auxdata(
3e60: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
3e70: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
3e80: 20 69 41 72 67 2c 20 0a 20 20 76 6f 69 64 20 2a   iArg, .  void *
3e90: 70 41 75 78 2c 20 0a 20 20 76 6f 69 64 20 28 2a  pAux, .  void (*
3ea0: 78 44 65 6c 65 74 65 29 28 76 6f 69 64 2a 29 0a  xDelete)(void*).
3eb0: 29 7b 0a 20 20 73 74 72 75 63 74 20 41 75 78 44  ){.  struct AuxD
3ec0: 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b 0a 20  ata *pAuxData;. 
3ed0: 20 56 64 62 65 46 75 6e 63 20 2a 70 56 64 62 65   VdbeFunc *pVdbe
3ee0: 46 75 6e 63 3b 0a 20 20 69 66 28 20 69 41 72 67  Func;.  if( iArg
3ef0: 3c 30 20 29 20 67 6f 74 6f 20 66 61 69 6c 65 64  <0 ) goto failed
3f00: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ;..  assert( sql
3f10: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
3f20: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
3f30: 78 29 20 29 3b 0a 20 20 70 56 64 62 65 46 75 6e  x) );.  pVdbeFun
3f40: 63 20 3d 20 70 43 74 78 2d 3e 70 56 64 62 65 46  c = pCtx->pVdbeF
3f50: 75 6e 63 3b 0a 20 20 69 66 28 20 21 70 56 64 62  unc;.  if( !pVdb
3f60: 65 46 75 6e 63 20 7c 7c 20 70 56 64 62 65 46 75  eFunc || pVdbeFu
3f70: 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72 67 20 29  nc->nAux<=iArg )
3f80: 7b 0a 20 20 20 20 69 6e 74 20 6e 41 75 78 20 3d  {.    int nAux =
3f90: 20 28 70 56 64 62 65 46 75 6e 63 20 3f 20 70 56   (pVdbeFunc ? pV
3fa0: 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3a 20  dbeFunc->nAux : 
3fb0: 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e 4d 61 6c  0);.    int nMal
3fc0: 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28 56 64 62  loc = sizeof(Vdb
3fd0: 65 46 75 6e 63 29 20 2b 20 73 69 7a 65 6f 66 28  eFunc) + sizeof(
3fe0: 73 74 72 75 63 74 20 41 75 78 44 61 74 61 29 2a  struct AuxData)*
3ff0: 69 41 72 67 3b 0a 20 20 20 20 70 56 64 62 65 46  iArg;.    pVdbeF
4000: 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 44 62 52  unc = sqlite3DbR
4010: 65 61 6c 6c 6f 63 28 70 43 74 78 2d 3e 73 2e 64  ealloc(pCtx->s.d
4020: 62 2c 20 70 56 64 62 65 46 75 6e 63 2c 20 6e 4d  b, pVdbeFunc, nM
4030: 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20  alloc);.    if( 
4040: 21 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20  !pVdbeFunc ){.  
4050: 20 20 20 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b      goto failed;
4060: 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 74 78 2d  .    }.    pCtx-
4070: 3e 70 56 64 62 65 46 75 6e 63 20 3d 20 70 56 64  >pVdbeFunc = pVd
4080: 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d 65 6d 73  beFunc;.    mems
4090: 65 74 28 26 70 56 64 62 65 46 75 6e 63 2d 3e 61  et(&pVdbeFunc->a
40a0: 70 41 75 78 5b 6e 41 75 78 5d 2c 20 30 2c 20 73  pAux[nAux], 0, s
40b0: 69 7a 65 6f 66 28 73 74 72 75 63 74 20 41 75 78  izeof(struct Aux
40c0: 44 61 74 61 29 2a 28 69 41 72 67 2b 31 2d 6e 41  Data)*(iArg+1-nA
40d0: 75 78 29 29 3b 0a 20 20 20 20 70 56 64 62 65 46  ux));.    pVdbeF
40e0: 75 6e 63 2d 3e 6e 41 75 78 20 3d 20 69 41 72 67  unc->nAux = iArg
40f0: 2b 31 3b 0a 20 20 20 20 70 56 64 62 65 46 75 6e  +1;.    pVdbeFun
4100: 63 2d 3e 70 46 75 6e 63 20 3d 20 70 43 74 78 2d  c->pFunc = pCtx-
4110: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 70  >pFunc;.  }..  p
4120: 41 75 78 44 61 74 61 20 3d 20 26 70 56 64 62 65  AuxData = &pVdbe
4130: 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69 41 72 67  Func->apAux[iArg
4140: 5d 3b 0a 20 20 69 66 28 20 70 41 75 78 44 61 74  ];.  if( pAuxDat
4150: 61 2d 3e 70 41 75 78 20 26 26 20 70 41 75 78 44  a->pAux && pAuxD
4160: 61 74 61 2d 3e 78 44 65 6c 65 74 65 20 29 7b 0a  ata->xDelete ){.
4170: 20 20 20 20 70 41 75 78 44 61 74 61 2d 3e 78 44      pAuxData->xD
4180: 65 6c 65 74 65 28 70 41 75 78 44 61 74 61 2d 3e  elete(pAuxData->
4190: 70 41 75 78 29 3b 0a 20 20 7d 0a 20 20 70 41 75  pAux);.  }.  pAu
41a0: 78 44 61 74 61 2d 3e 70 41 75 78 20 3d 20 70 41  xData->pAux = pA
41b0: 75 78 3b 0a 20 20 70 41 75 78 44 61 74 61 2d 3e  ux;.  pAuxData->
41c0: 78 44 65 6c 65 74 65 20 3d 20 78 44 65 6c 65 74  xDelete = xDelet
41d0: 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 66 61  e;.  return;..fa
41e0: 69 6c 65 64 3a 0a 20 20 69 66 28 20 78 44 65 6c  iled:.  if( xDel
41f0: 65 74 65 20 29 7b 0a 20 20 20 20 78 44 65 6c 65  ete ){.    xDele
4200: 74 65 28 70 41 75 78 29 3b 0a 20 20 7d 0a 7d 0a  te(pAux);.  }.}.
4210: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4220: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
4230: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4240: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
4250: 20 74 68 65 20 53 74 65 70 20 66 75 6e 63 74 69   the Step functi
4260: 6f 6e 20 6f 66 20 61 20 61 67 67 72 65 67 61 74  on of a aggregat
4270: 65 20 68 61 73 20 62 65 65 6e 20 0a 2a 2a 20 63  e has been .** c
4280: 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  alled..**.** Thi
4290: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  s function is de
42a0: 70 72 65 63 61 74 65 64 2e 20 20 44 6f 20 6e 6f  precated.  Do no
42b0: 74 20 75 73 65 20 69 74 20 66 6f 72 20 6e 65 77  t use it for new
42c0: 20 63 6f 64 65 2e 20 20 49 74 20 69 73 0a 2a 2a   code.  It is.**
42d0: 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79 20 74 6f   provide only to
42e0: 20 61 76 6f 69 64 20 62 72 65 61 6b 69 6e 67 20   avoid breaking 
42f0: 6c 65 67 61 63 79 20 63 6f 64 65 2e 20 20 4e 65  legacy code.  Ne
4300: 77 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  w aggregate func
4310: 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  tion.** implemen
4320: 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6b  tations should k
4330: 65 65 70 20 74 68 65 69 72 20 6f 77 6e 20 63 6f  eep their own co
4340: 75 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 69  unts within thei
4350: 72 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 63  r aggregate.** c
4360: 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e 74 20 73  ontext..*/.int s
4370: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
4380: 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 63  _count(sqlite3_c
4390: 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61 73  ontext *p){.  as
43a0: 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70 4d  sert( p && p->pM
43b0: 65 6d 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26  em && p->pFunc &
43c0: 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65  & p->pFunc->xSte
43d0: 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d  p );.  return p-
43e0: 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23 65 6e 64  >pMem->n;.}.#end
43f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
4400: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
4410: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65  olumns in the re
4420: 73 75 6c 74 20 73 65 74 20 66 6f 72 20 74 68 65  sult set for the
4430: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
4440: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4450: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 71  _column_count(sq
4460: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
4470: 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 20  t){.  Vdbe *pVm 
4480: 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b  = (Vdbe *)pStmt;
4490: 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 20 3f 20  .  return pVm ? 
44a0: 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 20  pVm->nResColumn 
44b0: 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  : 0;.}../*.** Re
44c0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
44d0: 6f 66 20 76 61 6c 75 65 73 20 61 76 61 69 6c 61  of values availa
44e0: 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ble from the cur
44f0: 72 65 6e 74 20 72 6f 77 20 6f 66 20 74 68 65 0a  rent row of the.
4500: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  ** currently exe
4510: 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
4520: 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73   pStmt..*/.int s
4530: 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
4540: 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  t(sqlite3_stmt *
4550: 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a  pStmt){.  Vdbe *
4560: 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53  pVm = (Vdbe *)pS
4570: 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 3d 3d  tmt;.  if( pVm==
4580: 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65 73 75 6c  0 || pVm->pResul
4590: 74 53 65 74 3d 3d 30 20 29 20 72 65 74 75 72 6e  tSet==0 ) return
45a0: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d   0;.  return pVm
45b0: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b 0a 7d 0a  ->nResColumn;.}.
45c0: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f  ../*.** Check to
45d0: 20 73 65 65 20 69 66 20 63 6f 6c 75 6d 6e 20 69   see if column i
45e0: 43 6f 6c 20 6f 66 20 74 68 65 20 67 69 76 65 6e  Col of the given
45f0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 76 61   statement is va
4600: 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69 74 20 69  lid.  If.** it i
4610: 73 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e  s, return a poin
4620: 74 65 72 20 74 6f 20 74 68 65 20 4d 65 6d 20 66  ter to the Mem f
4630: 6f 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  or the value of 
4640: 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  that column..** 
4650: 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f 74 20 76  If iCol is not v
4660: 61 6c 69 64 2c 20 72 65 74 75 72 6e 20 61 20 70  alid, return a p
4670: 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20  ointer to a Mem 
4680: 77 68 69 63 68 20 68 61 73 20 61 20 76 61 6c 75  which has a valu
4690: 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a 2a 2f  e.** of NULL..*/
46a0: 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 63 6f 6c  .static Mem *col
46b0: 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65 33 5f 73  umnMem(sqlite3_s
46c0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
46d0: 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 3b  i){.  Vdbe *pVm;
46e0: 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a 20 20 4d  .  int vals;.  M
46f0: 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70 56 6d  em *pOut;..  pVm
4700: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
4710: 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26 20 70  ;.  if( pVm && p
4720: 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 21 3d  Vm->pResultSet!=
4730: 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52 65 73  0 && i<pVm->nRes
4740: 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30 20 29  Column && i>=0 )
4750: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  {.    sqlite3_mu
4760: 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d 3e 64  tex_enter(pVm->d
4770: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 76  b->mutex);.    v
4780: 61 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f 64 61  als = sqlite3_da
4790: 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  ta_count(pStmt);
47a0: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 56 6d  .    pOut = &pVm
47b0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b 69 5d 3b  ->pResultSet[i];
47c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
47d0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 70 61   If the value pa
47e0: 73 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  ssed as the seco
47f0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  nd argument is o
4800: 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72 65 74  ut of range, ret
4810: 75 72 6e 0a 20 20 20 20 2a 2a 20 61 20 70 6f 69  urn.    ** a poi
4820: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 6f 6c 6c  nter to the foll
4830: 6f 77 69 6e 67 20 73 74 61 74 69 63 20 4d 65 6d  owing static Mem
4840: 20 6f 62 6a 65 63 74 20 77 68 69 63 68 20 63 6f   object which co
4850: 6e 74 61 69 6e 73 20 74 68 65 0a 20 20 20 20 2a  ntains the.    *
4860: 2a 20 76 61 6c 75 65 20 53 51 4c 20 4e 55 4c 4c  * value SQL NULL
4870: 2e 20 45 76 65 6e 20 74 68 6f 75 67 68 20 74 68  . Even though th
4880: 65 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 20  e Mem structure 
4890: 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6c 65 6d  contains an elem
48a0: 65 6e 74 0a 20 20 20 20 2a 2a 20 6f 66 20 74 79  ent.    ** of ty
48b0: 70 65 20 69 36 34 2c 20 6f 6e 20 63 65 72 74 61  pe i64, on certa
48c0: 69 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 20  in architecture 
48d0: 28 78 38 36 29 20 77 69 74 68 20 63 65 72 74 61  (x86) with certa
48e0: 69 6e 20 63 6f 6d 70 69 6c 65 72 0a 20 20 20 20  in compiler.    
48f0: 2a 2a 20 73 77 69 74 63 68 65 73 20 28 2d 4f 73  ** switches (-Os
4900: 29 2c 20 67 63 63 20 6d 61 79 20 61 6c 69 67 6e  ), gcc may align
4910: 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a 65 63 74   this Mem object
4920: 20 6f 6e 20 61 20 34 2d 62 79 74 65 20 62 6f 75   on a 4-byte bou
4930: 6e 64 61 72 79 0a 20 20 20 20 2a 2a 20 69 6e 73  ndary.    ** ins
4940: 74 65 61 64 20 6f 66 20 61 6e 20 38 2d 62 79 74  tead of an 8-byt
4950: 65 20 6f 6e 65 2e 20 54 68 69 73 20 61 6c 6c 20  e one. This all 
4960: 77 6f 72 6b 73 20 66 69 6e 65 2c 20 65 78 63 65  works fine, exce
4970: 70 74 20 74 68 61 74 20 77 68 65 6e 0a 20 20 20  pt that when.   
4980: 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 77 69 74 68   ** running with
4990: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 64 65   SQLITE_DEBUG de
49a0: 66 69 6e 65 64 20 74 68 65 20 53 51 4c 69 74 65  fined the SQLite
49b0: 20 63 6f 64 65 20 73 6f 6d 65 74 69 6d 65 73 20   code sometimes 
49c0: 61 73 73 65 72 74 28 29 73 0a 20 20 20 20 2a 2a  assert()s.    **
49d0: 20 74 68 61 74 20 61 20 4d 65 6d 20 73 74 72 75   that a Mem stru
49e0: 63 74 75 72 65 20 69 73 20 6c 6f 63 61 74 65 64  cture is located
49f0: 20 6f 6e 20 61 6e 20 38 2d 62 79 74 65 20 62 6f   on an 8-byte bo
4a00: 75 6e 64 61 72 79 2e 20 54 6f 20 70 72 65 76 65  undary. To preve
4a10: 6e 74 0a 20 20 20 20 2a 2a 20 74 68 69 73 20 61  nt.    ** this a
4a20: 73 73 65 72 74 28 29 20 66 72 6f 6d 20 66 61 69  ssert() from fai
4a30: 6c 69 6e 67 2c 20 77 68 65 6e 20 62 75 69 6c 64  ling, when build
4a40: 69 6e 67 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ing with SQLITE_
4a50: 44 45 42 55 47 20 64 65 66 69 6e 65 64 0a 20 20  DEBUG defined.  
4a60: 20 20 2a 2a 20 75 73 69 6e 67 20 67 63 63 2c 20    ** using gcc, 
4a70: 66 6f 72 63 65 20 6e 75 6c 6c 4d 65 6d 20 74 6f  force nullMem to
4a80: 20 62 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e   be 8-byte align
4a90: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6d 61 67  ed using the mag
4aa0: 69 63 61 6c 0a 20 20 20 20 2a 2a 20 5f 5f 61 74  ical.    ** __at
4ab0: 74 72 69 62 75 74 65 5f 5f 28 28 61 6c 69 67 6e  tribute__((align
4ac0: 65 64 28 38 29 29 29 20 6d 61 63 72 6f 2e 20 20  ed(8))) macro.  
4ad0: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
4ae0: 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65 6d 20  nst Mem nullMem 
4af0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
4b00: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
4b10: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a  fined(__GNUC__).
4b20: 20 20 20 20 20 20 5f 5f 61 74 74 72 69 62 75 74        __attribut
4b30: 65 5f 5f 28 28 61 6c 69 67 6e 65 64 28 38 29 29  e__((aligned(8))
4b40: 29 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  ) .#endif.      
4b50: 3d 20 7b 7b 30 7d 2c 20 28 64 6f 75 62 6c 65 29  = {{0}, (double)
4b60: 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20 4d 45 4d  0, 0, "", 0, MEM
4b70: 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45 5f 4e 55  _Null, SQLITE_NU
4b80: 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d 3b 0a 0a  LL, 0, 0, 0 };..
4b90: 20 20 20 20 69 66 28 20 70 56 6d 20 26 26 20 41      if( pVm && A
4ba0: 4c 57 41 59 53 28 70 56 6d 2d 3e 64 62 29 20 29  LWAYS(pVm->db) )
4bb0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4bc0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d  mutex_enter(pVm-
4bd0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
4be0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
4bf0: 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f  pVm->db, SQLITE_
4c00: 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20 20 7d  RANGE, 0);.    }
4c10: 0a 20 20 20 20 70 4f 75 74 20 3d 20 28 4d 65 6d  .    pOut = (Mem
4c20: 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20 20 7d 0a  *)&nullMem;.  }.
4c30: 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d    return pOut;.}
4c40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
4c50: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
4c60: 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e 67 20 61  after invoking a
4c70: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  n sqlite3_value_
4c80: 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20  XXX function on 
4c90: 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76 61 6c  a .** column val
4ca0: 75 65 20 28 69 2e 65 2e 20 61 20 76 61 6c 75 65  ue (i.e. a value
4cb0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 76 61   returned by eva
4cc0: 6c 75 61 74 69 6e 67 20 61 6e 20 53 51 4c 20 65  luating an SQL e
4cd0: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
4ce0: 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69 73 74 20  .** select list 
4cf0: 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
4d00: 65 6d 65 6e 74 29 20 74 68 61 74 20 6d 61 79 20  ement) that may 
4d10: 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f 63 28 29  cause a malloc()
4d20: 20 66 61 69 6c 75 72 65 2e 20 49 66 20 0a 2a 2a   failure. If .**
4d30: 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61   malloc() has fa
4d40: 69 6c 65 64 2c 20 74 68 65 20 74 68 72 65 61 64  iled, the thread
4d50: 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66  s mallocFailed f
4d60: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 61  lag is cleared a
4d70: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  nd the result.**
4d80: 20 63 6f 64 65 20 6f 66 20 73 74 61 74 65 6d 65   code of stateme
4d90: 6e 74 20 70 53 74 6d 74 20 73 65 74 20 74 6f 20  nt pStmt set to 
4da0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a 2a 2a  SQLITE_NOMEM..**
4db0: 0a 2a 2a 20 53 70 65 63 69 66 69 63 61 6c 6c 79  .** Specifically
4dc0: 2c 20 74 68 69 73 20 69 73 20 63 61 6c 6c 65 64  , this is called
4dd0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a 0a 2a 2a   from within:.**
4de0: 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f  .**     sqlite3_
4df0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a 2a 2a 20  column_int().** 
4e00: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
4e10: 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a 20 20 20  mn_int64().**   
4e20: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
4e30: 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20 20 20 73  _text().**     s
4e40: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4e50: 78 74 31 36 28 29 0a 2a 2a 20 20 20 20 20 73 71  xt16().**     sq
4e60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 72 65 61  lite3_column_rea
4e70: 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  l().**     sqlit
4e80: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
4e90: 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33  ).**     sqlite3
4ea0: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 28  _column_bytes16(
4eb0: 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e 6f 74 20  ).**.** But not 
4ec0: 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  for sqlite3_colu
4ed0: 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68 69 63 68  mn_blob(), which
4ee0: 20 6e 65 76 65 72 20 63 61 6c 6c 73 20 6d 61 6c   never calls mal
4ef0: 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  loc()..*/.static
4f00: 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   void columnMall
4f10: 6f 63 46 61 69 6c 75 72 65 28 73 71 6c 69 74 65  ocFailure(sqlite
4f20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 0a 7b  3_stmt *pStmt).{
4f30: 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c 6f 63 28  .  /* If malloc(
4f40: 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20  ) failed during 
4f50: 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76  an encoding conv
4f60: 65 72 73 69 6f 6e 20 77 69 74 68 69 6e 20 61 6e  ersion within an
4f70: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  .  ** sqlite3_co
4f80: 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c 20 74 68  lumn_XXX API, th
4f90: 65 6e 20 73 65 74 20 74 68 65 20 72 65 74 75 72  en set the retur
4fa0: 6e 20 63 6f 64 65 20 6f 66 20 74 68 65 20 73 74  n code of the st
4fb0: 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 2a 2a 20  atement to.  ** 
4fc0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20 54 68  SQLITE_NOMEM. Th
4fd0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 5f  e next call to _
4fe0: 73 74 65 70 28 29 20 28 69 66 20 61 6e 79 29 20  step() (if any) 
4ff0: 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49  will return SQLI
5000: 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a 20 61 6e  TE_ERROR.  ** an
5010: 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29 20 77 69  d _finalize() wi
5020: 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d 45 4d 2e  ll return NOMEM.
5030: 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 20  .  */.  Vdbe *p 
5040: 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b  = (Vdbe *)pStmt;
5050: 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20  .  if( p ){.    
5060: 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65 33 41  p->rc = sqlite3A
5070: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 70 2d  piExit(p->db, p-
5080: 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  >rc);.    sqlite
5090: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
50a0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
50b0: 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
50c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
50d0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
50e0: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
50f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5100: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
5110: 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ing routines are
5120: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
5130: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20  elements of the 
5140: 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a 20 69  current row.** i
5150: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
5160: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
5170: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
5180: 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73 74 6d  blob(sqlite3_stm
5190: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
51a0: 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  {.  const void *
51b0: 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73 71 6c  val;.  val = sql
51c0: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
51d0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
51e0: 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45 76 65 6e  ,i) );.  /* Even
51f0: 20 74 68 6f 75 67 68 20 74 68 65 72 65 20 69 73   though there is
5200: 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20 63 6f 6e   no encoding con
5210: 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75 65 5f 62  version, value_b
5220: 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20 20 2a 2a  lob() might.  **
5230: 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20 6d 61   need to call ma
5240: 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70 61 6e 64  lloc() to expand
5250: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
5260: 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a 20 20 2a   zeroblob() .  *
5270: 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20  * expression. . 
5280: 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   */.  columnMall
5290: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
52a0: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
52b0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  }.int sqlite3_co
52c0: 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71 6c 69 74  lumn_bytes(sqlit
52d0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
52e0: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61  int i){.  int va
52f0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5300: 65 5f 62 79 74 65 73 28 20 63 6f 6c 75 6d 6e 4d  e_bytes( columnM
5310: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
5320: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
5330: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
5340: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74  eturn val;.}.int
5350: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5360: 62 79 74 65 73 31 36 28 73 71 6c 69 74 65 33 5f  bytes16(sqlite3_
5370: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
5380: 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d   i){.  int val =
5390: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
53a0: 79 74 65 73 31 36 28 20 63 6f 6c 75 6d 6e 4d 65  ytes16( columnMe
53b0: 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20  m(pStmt,i) );.  
53c0: 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c  columnMallocFail
53d0: 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65  ure(pStmt);.  re
53e0: 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f 75 62  turn val;.}.doub
53f0: 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  le sqlite3_colum
5400: 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33  n_double(sqlite3
5410: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
5420: 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c 65 20 76  t i){.  double v
5430: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
5440: 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f 6c 75 6d  ue_double( colum
5450: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5460: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5470: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5480: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69   return val;.}.i
5490: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
54a0: 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 73 74  n_int(sqlite3_st
54b0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
54c0: 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d 20 73  ){.  int val = s
54d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
54e0: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
54f0: 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e  t,i) );.  column
5500: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
5510: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
5520: 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69 6e 74  al;.}.sqlite_int
5530: 36 34 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  64 sqlite3_colum
5540: 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f  n_int64(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 73 71 6c 69 74 65 5f 69 6e   i){.  sqlite_in
5570: 74 36 34 20 76 61 6c 20 3d 20 73 71 6c 69 74 65  t64 val = sqlite
5580: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 20 63  3_value_int64( c
5590: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69  olumnMem(pStmt,i
55a0: 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c  ) );.  columnMal
55b0: 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74  locFailure(pStmt
55c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b  );.  return val;
55d0: 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .}.const unsigne
55e0: 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  d char *sqlite3_
55f0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 71 6c 69  column_text(sqli
5600: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
5610: 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f 6e 73 74   int i){.  const
5620: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
5630: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
5640: 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c 75 6d 6e  lue_text( column
5650: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
5660: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
5670: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
5680: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 73 71  return val;.}.sq
5690: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
56a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61 6c 75  ite3_column_valu
56b0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
56c0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
56d0: 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 63 6f 6c   Mem *pOut = col
56e0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 20 69 29  umnMem(pStmt, i)
56f0: 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c  ;.  if( pOut->fl
5700: 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63 20 29  ags&MEM_Static )
5710: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
5720: 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61 74 69 63  s &= ~MEM_Static
5730: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
5740: 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a  s |= MEM_Ephem;.
5750: 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c    }.  columnMall
5760: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
5770: 3b 0a 20 20 72 65 74 75 72 6e 20 28 73 71 6c 69  ;.  return (sqli
5780: 74 65 33 5f 76 61 6c 75 65 20 2a 29 70 4f 75 74  te3_value *)pOut
5790: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
57a0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
57b0: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
57c0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
57d0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
57e0: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63  tmt, int i){.  c
57f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 20 3d  onst void *val =
5800: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
5810: 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d 65 6d  ext16( columnMem
5820: 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63  (pStmt,i) );.  c
5830: 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75  olumnMallocFailu
5840: 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74  re(pStmt);.  ret
5850: 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e 64 69  urn val;.}.#endi
5860: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
5870: 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71  _UTF16 */.int sq
5880: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
5890: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
58a0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
58b0: 20 69 6e 74 20 69 54 79 70 65 20 3d 20 73 71 6c   int iType = sql
58c0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
58d0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
58e0: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
58f0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
5900: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 69 54  mt);.  return iT
5910: 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 66  ype;.}../* The f
5920: 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f  ollowing functio
5930: 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61  n is experimenta
5940: 6c 20 61 6e 64 20 73 75 62 6a 65 63 74 20 74 6f  l and subject to
5950: 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a 20 72 65   change or.** re
5960: 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e 74 20 73  moval */./*int s
5970: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 75  qlite3_column_nu
5980: 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74  meric_type(sqlit
5990: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
59a0: 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72 65 74 75  int i){.**  retu
59b0: 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  rn sqlite3_value
59c0: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 20 63  _numeric_type( c
59d0: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69  olumnMem(pStmt,i
59e0: 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a 2f 2a 0a  ) );.**}.*/../*.
59f0: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 4e  ** Convert the N
5a00: 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 70  -th element of p
5a10: 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65 5b 5d  Stmt->pColName[]
5a20: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 75   into a string u
5a30: 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63 28 29 20  sing.** xFunc() 
5a40: 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 61 74  then return that
5a50: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e 20 69   string.  If N i
5a60: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20  s out of range, 
5a70: 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20  return 0..**.** 
5a80: 54 68 65 72 65 20 61 72 65 20 75 70 20 74 6f 20  There are up to 
5a90: 35 20 6e 61 6d 65 73 20 66 6f 72 20 65 61 63 68  5 names for each
5aa0: 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65 54 79 70   column.  useTyp
5ab0: 65 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 69  e determines whi
5ac0: 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 72 65  ch.** name is re
5ad0: 74 75 72 6e 65 64 2e 20 20 48 65 72 65 20 61 72  turned.  Here ar
5ae0: 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  e the names:.**.
5af0: 2a 2a 20 20 20 20 30 20 20 20 20 20 20 54 68 65  **    0      The
5b00: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 73 20   column name as 
5b10: 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64 69 73  it should be dis
5b20: 70 6c 61 79 65 64 20 66 6f 72 20 6f 75 74 70 75  played for outpu
5b30: 74 0a 2a 2a 20 20 20 20 31 20 20 20 20 20 20 54  t.**    1      T
5b40: 68 65 20 64 61 74 61 74 79 70 65 20 6e 61 6d 65  he datatype name
5b50: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a   for the column.
5b60: 2a 2a 20 20 20 20 32 20 20 20 20 20 20 54 68 65  **    2      The
5b70: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
5b80: 61 62 61 73 65 20 74 68 61 74 20 74 68 65 20 63  abase that the c
5b90: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72  olumn derives fr
5ba0: 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20 20 20 20  om.**    3      
5bb0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
5bc0: 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 63  table that the c
5bd0: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72  olumn derives fr
5be0: 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20 20 20 20  om.**    4      
5bf0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
5c00: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74 68 61  table column tha
5c10: 74 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  t the result col
5c20: 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d  umn derives from
5c30: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  .**.** If the re
5c40: 73 75 6c 74 20 69 73 20 6e 6f 74 20 61 20 73 69  sult is not a si
5c50: 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72 65 66 65  mple column refe
5c60: 72 65 6e 63 65 20 28 69 66 20 69 74 20 69 73 20  rence (if it is 
5c70: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  an expression.**
5c80: 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 29 20   or a constant) 
5c90: 74 68 65 6e 20 75 73 65 54 79 70 65 73 20 32 2c  then useTypes 2,
5ca0: 20 33 2c 20 61 6e 64 20 34 20 72 65 74 75 72 6e   3, and 4 return
5cb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63   NULL..*/.static
5cc0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 63 6f 6c   const void *col
5cd0: 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74  umnName(.  sqlit
5ce0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 0a  e3_stmt *pStmt,.
5cf0: 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f 6e 73 74    int N,.  const
5d00: 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28   void *(*xFunc)(
5d10: 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20 75 73 65  Mem*),.  int use
5d20: 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  Type.){.  const 
5d30: 76 6f 69 64 20 2a 72 65 74 20 3d 20 30 3b 0a 20  void *ret = 0;. 
5d40: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
5d50: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20   *)pStmt;.  int 
5d60: 6e 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  n;.  sqlite3 *db
5d70: 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 0a 20 20 61   = p->db;.  .  a
5d80: 73 73 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a  ssert( db!=0 );.
5d90: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f    n = sqlite3_co
5da0: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
5db0: 29 3b 0a 20 20 69 66 28 20 4e 3c 6e 20 26 26 20  );.  if( N<n && 
5dc0: 4e 3e 3d 30 20 29 7b 0a 20 20 20 20 4e 20 2b 3d  N>=0 ){.    N +=
5dd0: 20 75 73 65 54 79 70 65 2a 6e 3b 0a 20 20 20 20   useType*n;.    
5de0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
5df0: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
5e00: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
5e10: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d 3d 30 20  mallocFailed==0 
5e20: 29 3b 0a 20 20 20 20 72 65 74 20 3d 20 78 46 75  );.    ret = xFu
5e30: 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61 6d 65 5b  nc(&p->aColName[
5e40: 4e 5d 29 3b 0a 20 20 20 20 20 2f 2a 20 41 20 6d  N]);.     /* A m
5e50: 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76 65 20 66  alloc may have f
5e60: 61 69 6c 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ailed inside of 
5e70: 74 68 65 20 78 46 75 6e 63 28 29 20 63 61 6c 6c  the xFunc() call
5e80: 2e 20 49 66 20 74 68 69 73 0a 20 20 20 20 2a 2a  . If this.    **
5e90: 20 69 73 20 74 68 65 20 63 61 73 65 2c 20 63 6c   is the case, cl
5ea0: 65 61 72 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61  ear the mallocFa
5eb0: 69 6c 65 64 20 66 6c 61 67 20 61 6e 64 20 72 65  iled flag and re
5ec0: 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  turn NULL..    *
5ed0: 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  /.    if( db->ma
5ee0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
5ef0: 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
5f00: 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  iled = 0;.      
5f10: 72 65 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ret = 0;.    }. 
5f20: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
5f30: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
5f40: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
5f50: 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ret;.}../*.** Re
5f60: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
5f70: 20 74 68 65 20 4e 74 68 20 63 6f 6c 75 6d 6e 20   the Nth column 
5f80: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  of the result se
5f90: 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51  t returned by SQ
5fa0: 4c 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 70  L.** statement p
5fb0: 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  Stmt..*/.const c
5fc0: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  har *sqlite3_col
5fd0: 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33  umn_name(sqlite3
5fe0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
5ff0: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6000: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6010: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6020: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
6030: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6040: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  ext, COLNAME_NAM
6050: 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  E);.}.#ifndef SQ
6060: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6070: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
6080: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
6090: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
60a0: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
60b0: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
60c0: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
60d0: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
60e0: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
60f0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20  3_value_text16, 
6100: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d  COLNAME_NAME);.}
6110: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
6120: 6f 6e 73 74 72 61 69 6e 74 3a 20 20 49 66 20 79  onstraint:  If y
6130: 6f 75 20 68 61 76 65 20 45 4e 41 42 4c 45 5f 43  ou have ENABLE_C
6140: 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 74  OLUMN_METADATA t
6150: 68 65 6e 20 79 6f 75 20 6d 75 73 74 0a 2a 2a 20  hen you must.** 
6160: 6e 6f 74 20 64 65 66 69 6e 65 20 4f 4d 49 54 5f  not define OMIT_
6170: 44 45 43 4c 54 59 50 45 2e 0a 2a 2f 0a 23 69 66  DECLTYPE..*/.#if
6180: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6190: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 29 20 26  OMIT_DECLTYPE) &
61a0: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
61b0: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
61c0: 45 54 41 44 41 54 41 29 0a 23 20 65 72 72 6f 72  ETADATA).# error
61d0: 20 22 4d 75 73 74 20 6e 6f 74 20 64 65 66 69 6e   "Must not defin
61e0: 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4f 4d  e both SQLITE_OM
61f0: 49 54 5f 44 45 43 4c 54 59 50 45 20 5c 0a 20 20  IT_DECLTYPE \.  
6200: 20 20 20 20 20 20 20 61 6e 64 20 53 51 4c 49 54         and SQLIT
6210: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
6220: 4d 45 54 41 44 41 54 41 22 0a 23 65 6e 64 69 66  METADATA".#endif
6230: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
6240: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 2f  _OMIT_DECLTYPE./
6250: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
6260: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
6270: 6f 6e 20 74 79 70 65 20 28 69 66 20 61 70 70 6c  on type (if appl
6280: 69 63 61 62 6c 65 29 20 6f 66 20 74 68 65 20 27  icable) of the '
6290: 69 27 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6f  i'th column.** o
62a0: 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  f the result set
62b0: 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   of SQL statemen
62c0: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73  t pStmt..*/.cons
62d0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
62e0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
62f0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6300: 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72  tmt, int N){.  r
6310: 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65  eturn columnName
6320: 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e  (.      pStmt, N
6330: 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a  , (const void*(*
6340: 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f  )(Mem*))sqlite3_
6350: 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e  value_text, COLN
6360: 41 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a 7d  AME_DECLTYPE);.}
6370: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6380: 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74  OMIT_UTF16.const
6390: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63   void *sqlite3_c
63a0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
63b0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
63c0: 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  Stmt, int N){.  
63d0: 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d  return columnNam
63e0: 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20  e(.      pStmt, 
63f0: 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28  N, (const void*(
6400: 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33  *)(Mem*))sqlite3
6410: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43  _value_text16, C
6420: 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29  OLNAME_DECLTYPE)
6430: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
6440: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
6450: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
6460: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
6470: 45 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  E */..#ifdef SQL
6480: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6490: 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a 0a 2a 2a  N_METADATA./*.**
64a0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
64b0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
64c0: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65   from which a re
64d0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69  sult column deri
64e0: 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20  ves..** NULL is 
64f0: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
6500: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73  result column is
6510: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
6520: 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a  r constant or.**
6530: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77   anything else w
6540: 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75  hich is not an u
6550: 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65  nabiguous refere
6560: 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73  nce to a databas
6570: 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e  e column..*/.con
6580: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
6590: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
65a0: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
65b0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
65c0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
65d0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
65e0: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
65f0: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
6600: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6610: 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42 41  , COLNAME_DATABA
6620: 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  SE);.}.#ifndef S
6630: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
6640: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
6650: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
6660: 62 61 73 65 5f 6e 61 6d 65 31 36 28 73 71 6c 69  base_name16(sqli
6670: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
6680: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
6690: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
66a0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
66b0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
66c0: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
66d0: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
66e0: 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a 23  E_DATABASE);.}.#
66f0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
6700: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f  OMIT_UTF16 */../
6710: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
6720: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
6730: 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72  e from which a r
6740: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72  esult column der
6750: 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73  ives..** NULL is
6760: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
6770: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
6780: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
6790: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a  or constant or.*
67a0: 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20  * anything else 
67b0: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20  which is not an 
67c0: 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72  unabiguous refer
67d0: 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61  ence to a databa
67e0: 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f  se column..*/.co
67f0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
6800: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
6810: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
6820: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
6830: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6840: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6850: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
6860: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6870: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
6880: 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29 3b 0a  COLNAME_TABLE);.
6890: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
68a0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73  _OMIT_UTF16.cons
68b0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
68c0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
68d0: 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  e16(sqlite3_stmt
68e0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
68f0: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6900: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6910: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
6920: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6930: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
6940: 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29  , COLNAME_TABLE)
6950: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
6960: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
6970: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
6980: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
6990: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 66 72   table column fr
69a0: 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73 75 6c  om which a resul
69b0: 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  t column derives
69c0: 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  ..** NULL is ret
69d0: 75 72 6e 65 64 20 69 66 20 74 68 65 20 72 65 73  urned if the res
69e0: 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  ult column is an
69f0: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63   expression or c
6a00: 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e  onstant or.** an
6a10: 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63  ything else whic
6a20: 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62  h is not an unab
6a30: 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65  iguous reference
6a40: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63   to a database c
6a50: 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  olumn..*/.const 
6a60: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f  char *sqlite3_co
6a70: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
6a80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
6a90: 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  Stmt, int N){.  
6aa0: 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d  return columnNam
6ab0: 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20  e(.      pStmt, 
6ac0: 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28  N, (const void*(
6ad0: 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33  *)(Mem*))sqlite3
6ae0: 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c  _value_text, COL
6af0: 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a  NAME_COLUMN);.}.
6b00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
6b10: 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20  MIT_UTF16.const 
6b20: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
6b30: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
6b40: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
6b50: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
6b60: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
6b70: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
6b80: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
6b90: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
6ba0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c  e3_value_text16,
6bb0: 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29   COLNAME_COLUMN)
6bc0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
6bd0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
6be0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
6bf0: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6c00: 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f 0a 0a 0a  N_METADATA */...
6c10: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
6c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6c30: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 20 20   sqlite3_bind_  
6c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 0a  ***********.** .
6c60: 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75 73 65 64  ** Routines used
6c70: 20 74 6f 20 61 74 74 61 63 68 20 76 61 6c 75 65   to attach value
6c80: 73 20 74 6f 20 77 69 6c 64 63 61 72 64 73 20 69  s to wildcards i
6c90: 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c  n a compiled SQL
6ca0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 2f   statement..*/./
6cb0: 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74 68 65 20  *.** Unbind the 
6cc0: 76 61 6c 75 65 20 62 6f 75 6e 64 20 74 6f 20 76  value bound to v
6cd0: 61 72 69 61 62 6c 65 20 69 20 69 6e 20 76 69 72  ariable i in vir
6ce0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 70 2e 20  tual machine p. 
6cf0: 54 68 69 73 20 69 73 20 74 68 65 20 0a 2a 2a 20  This is the .** 
6d00: 74 68 65 20 73 61 6d 65 20 61 73 20 62 69 6e 64  the same as bind
6d10: 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ing a NULL value
6d20: 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20   to the column. 
6d30: 49 66 20 74 68 65 20 22 69 22 20 70 61 72 61 6d  If the "i" param
6d40: 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75 74 20 6f  eter is.** out o
6d50: 66 20 72 61 6e 67 65 2c 20 74 68 65 6e 20 53 51  f range, then SQ
6d60: 4c 49 54 45 5f 52 41 4e 47 45 20 69 73 20 72 65  LITE_RANGE is re
6d70: 74 75 72 6e 65 64 2e 20 4f 74 68 65 77 69 73 65  turned. Othewise
6d80: 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a 2a   SQLITE_OK..**.*
6d90: 2a 20 41 20 73 75 63 63 65 73 73 66 75 6c 20 65  * A successful e
6da0: 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 69  valuation of thi
6db0: 73 20 72 6f 75 74 69 6e 65 20 61 63 71 75 69 72  s routine acquir
6dc0: 65 73 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20  es the mutex on 
6dd0: 70 2e 0a 2a 2a 20 74 68 65 20 6d 75 74 65 78 20  p..** the mutex 
6de0: 69 73 20 72 65 6c 65 61 73 65 64 20 69 66 20 61  is released if a
6df0: 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72  ny kind of error
6e00: 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54   occurs..**.** T
6e10: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 73 74  he error code st
6e20: 6f 72 65 64 20 69 6e 20 64 61 74 61 62 61 73 65  ored in database
6e30: 20 70 2d 3e 64 62 20 69 73 20 6f 76 65 72 77 72   p->db is overwr
6e40: 69 74 74 65 6e 20 77 69 74 68 20 74 68 65 20 72  itten with the r
6e50: 65 74 75 72 6e 0a 2a 2a 20 76 61 6c 75 65 20 69  eturn.** value i
6e60: 6e 20 61 6e 79 20 63 61 73 65 2e 0a 2a 2f 0a 73  n any case..*/.s
6e70: 74 61 74 69 63 20 69 6e 74 20 76 64 62 65 55 6e  tatic int vdbeUn
6e80: 62 69 6e 64 28 56 64 62 65 20 2a 70 2c 20 69 6e  bind(Vdbe *p, in
6e90: 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a 70 56 61  t i){.  Mem *pVa
6ea0: 72 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20  r;.  if( p==0 ) 
6eb0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
6ec0: 53 55 53 45 3b 0a 20 20 73 71 6c 69 74 65 33 5f  SUSE;.  sqlite3_
6ed0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64  mutex_enter(p->d
6ee0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28  b->mutex);.  if(
6ef0: 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f   p->magic!=VDBE_
6f00: 4d 41 47 49 43 5f 52 55 4e 20 7c 7c 20 70 2d 3e  MAGIC_RUN || p->
6f10: 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  pc>=0 ){.    sql
6f20: 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c  ite3Error(p->db,
6f30: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20   SQLITE_MISUSE, 
6f40: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  0);.    sqlite3_
6f50: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64  mutex_leave(p->d
6f60: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 72  b->mutex);.    r
6f70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
6f80: 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  USE;.  }.  if( i
6f90: 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20  <1 || i>p->nVar 
6fa0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
6fb0: 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54  ror(p->db, SQLIT
6fc0: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
6fd0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
6fe0: 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  eave(p->db->mute
6ff0: 78 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53  x);.    return S
7000: 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a 20 20 7d  QLITE_RANGE;.  }
7010: 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61 72 20 3d  .  i--;.  pVar =
7020: 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b 0a 20 20   &p->aVar[i];.  
7030: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
7040: 6c 65 61 73 65 28 70 56 61 72 29 3b 0a 20 20 70  lease(pVar);.  p
7050: 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Var->flags = MEM
7060: 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69 74 65 33  _Null;.  sqlite3
7070: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c  Error(p->db, SQL
7080: 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 0a 20 20 2f  ITE_OK, 0);..  /
7090: 2a 20 49 66 20 74 68 65 20 62 69 74 20 63 6f 72  * If the bit cor
70a0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
70b0: 69 73 20 76 61 72 69 61 62 6c 65 20 69 6e 20 56  is variable in V
70c0: 64 62 65 2e 65 78 70 6d 61 73 6b 20 69 73 20 73  dbe.expmask is s
70d0: 65 74 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 62  et, then .  ** b
70e0: 69 6e 64 69 6e 67 20 61 20 6e 65 77 20 76 61 6c  inding a new val
70f0: 75 65 20 74 6f 20 74 68 69 73 20 76 61 72 69 61  ue to this varia
7100: 62 6c 65 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ble invalidates 
7110: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
7120: 79 20 70 6c 61 6e 2e 0a 20 20 2a 2f 0a 20 20 69  y plan..  */.  i
7130: 66 28 20 70 2d 3e 69 73 50 72 65 70 61 72 65 56  f( p->isPrepareV
7140: 32 20 26 26 0a 20 20 20 20 20 28 28 69 3c 33 32  2 &&.     ((i<32
7150: 20 26 26 20 70 2d 3e 65 78 70 6d 61 73 6b 20 26   && p->expmask &
7160: 20 28 28 75 33 32 29 31 20 3c 3c 20 69 29 29 20   ((u32)1 << i)) 
7170: 7c 7c 20 70 2d 3e 65 78 70 6d 61 73 6b 3d 3d 30  || p->expmask==0
7180: 78 66 66 66 66 66 66 66 66 29 0a 20 20 29 7b 0a  xffffffff).  ){.
7190: 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
71a0: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
71b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
71c0: 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 74 65 78 74  *.** Bind a text
71d0: 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 2e 0a   or BLOB value..
71e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69  */.static int bi
71f0: 6e 64 54 65 78 74 28 0a 20 20 73 71 6c 69 74 65  ndText(.  sqlite
7200: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 20  3_stmt *pStmt,  
7210: 20 2f 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   /* The statemen
7220: 74 20 74 6f 20 62 69 6e 64 20 61 67 61 69 6e 73  t to bind agains
7230: 74 20 2a 2f 0a 20 20 69 6e 74 20 69 2c 20 20 20  t */.  int i,   
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7250: 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20 70 61   Index of the pa
7260: 72 61 6d 65 74 65 72 20 74 6f 20 62 69 6e 64 20  rameter to bind 
7270: 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  */.  const void 
7280: 2a 7a 44 61 74 61 2c 20 20 20 20 20 2f 2a 20 50  *zData,     /* P
7290: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 64 61  ointer to the da
72a0: 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a  ta to be bound *
72b0: 2f 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 20  /.  int nData,  
72c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
72d0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
72e0: 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e   data to be boun
72f0: 64 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  d */.  void (*xD
7300: 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20 2f 2a  el)(void*),   /*
7310: 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20   Destructor for 
7320: 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 38  the data */.  u8
7330: 20 65 6e 63 6f 64 69 6e 67 20 20 20 20 20 20 20   encoding       
7340: 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67       /* Encoding
7350: 20 66 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f   for the data */
7360: 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  .){.  Vdbe *p = 
7370: 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20  (Vdbe *)pStmt;. 
7380: 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e   Mem *pVar;.  in
7390: 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 76 64  t rc;..  rc = vd
73a0: 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a  beUnbind(p, i);.
73b0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
73c0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 7a  _OK ){.    if( z
73d0: 44 61 74 61 21 3d 30 20 29 7b 0a 20 20 20 20 20  Data!=0 ){.     
73e0: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
73f0: 5b 69 2d 31 5d 3b 0a 20 20 20 20 20 20 72 63 20  [i-1];.      rc 
7400: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
7410: 53 65 74 53 74 72 28 70 56 61 72 2c 20 7a 44 61  SetStr(pVar, zDa
7420: 74 61 2c 20 6e 44 61 74 61 2c 20 65 6e 63 6f 64  ta, nData, encod
7430: 69 6e 67 2c 20 78 44 65 6c 29 3b 0a 20 20 20 20  ing, xDel);.    
7440: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7450: 5f 4f 4b 20 26 26 20 65 6e 63 6f 64 69 6e 67 21  _OK && encoding!
7460: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
7470: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
7480: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 56 61  angeEncoding(pVa
7490: 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a  r, ENC(p->db));.
74a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
74b0: 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62  lite3Error(p->db
74c0: 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20 20 20 20  , rc, 0);.      
74d0: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45  rc = sqlite3ApiE
74e0: 78 69 74 28 70 2d 3e 64 62 2c 20 72 63 29 3b 0a  xit(p->db, rc);.
74f0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
7500: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
7510: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
7520: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
7530: 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 62  ../*.** Bind a b
7540: 6c 6f 62 20 76 61 6c 75 65 20 74 6f 20 61 6e 20  lob value to an 
7550: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 76 61  SQL statement va
7560: 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  riable..*/.int s
7570: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
7580: 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  (.  sqlite3_stmt
7590: 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20   *pStmt, .  int 
75a0: 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i, .  const void
75b0: 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20   *zData, .  int 
75c0: 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28  nData, .  void (
75d0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b  *xDel)(void*).){
75e0: 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65  .  return bindTe
75f0: 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61  xt(pStmt, i, zDa
7600: 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c  ta, nData, xDel,
7610: 20 30 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   0);.}.int sqlit
7620: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73  e3_bind_double(s
7630: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7640: 6d 74 2c 20 69 6e 74 20 69 2c 20 64 6f 75 62 6c  mt, int i, doubl
7650: 65 20 72 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74  e rValue){.  int
7660: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
7670: 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a   (Vdbe *)pStmt;.
7680: 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e    rc = vdbeUnbin
7690: 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72  d(p, i);.  if( r
76a0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
76b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
76c0: 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70 2d 3e  emSetDouble(&p->
76d0: 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56 61 6c 75  aVar[i-1], rValu
76e0: 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e);.    sqlite3_
76f0: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64  mutex_leave(p->d
7700: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20  b->mutex);.  }. 
7710: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e   return rc;.}.in
7720: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  t sqlite3_bind_i
7730: 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  nt(sqlite3_stmt 
7740: 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20 69  *p, int i, int i
7750: 56 61 6c 75 65 29 7b 0a 20 20 72 65 74 75 72 6e  Value){.  return
7760: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
7770: 74 36 34 28 70 2c 20 69 2c 20 28 69 36 34 29 69  t64(p, i, (i64)i
7780: 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20 73 71  Value);.}.int sq
7790: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
77a0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
77b0: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c  Stmt, int i, sql
77c0: 69 74 65 5f 69 6e 74 36 34 20 69 56 61 6c 75 65  ite_int64 iValue
77d0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56  ){.  int rc;.  V
77e0: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a  dbe *p = (Vdbe *
77f0: 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76  )pStmt;.  rc = v
7800: 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b  dbeUnbind(p, i);
7810: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
7820: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
7830: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
7840: 36 34 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d  64(&p->aVar[i-1]
7850: 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20 20 20 73  , iValue);.    s
7860: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
7870: 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  ve(p->db->mutex)
7880: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
7890: 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  c;.}.int sqlite3
78a0: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71 6c 69 74  _bind_null(sqlit
78b0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
78c0: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 72 63  int i){.  int rc
78d0: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
78e0: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63  dbe*)pStmt;.  rc
78f0: 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c   = vdbeUnbind(p,
7900: 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   i);.  if( rc==S
7910: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
7920: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
7930: 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(p->db->mutex
7940: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
7950: 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  rc;.}.int sqlite
7960: 33 5f 62 69 6e 64 5f 74 65 78 74 28 20 0a 20 20  3_bind_text( .  
7970: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7980: 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a  tmt, .  int i, .
7990: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
79a0: 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74  ata, .  int nDat
79b0: 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  a, .  void (*xDe
79c0: 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72  l)(void*).){.  r
79d0: 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28 70  eturn bindText(p
79e0: 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20  Stmt, i, zData, 
79f0: 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c  nData, xDel, SQL
7a00: 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66  ITE_UTF8);.}.#if
7a10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7a20: 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
7a30: 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a  e3_bind_text16(.
7a40: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
7a50: 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c  pStmt, .  int i,
7a60: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
7a70: 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44  zData, .  int nD
7a80: 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  ata, .  void (*x
7a90: 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  Del)(void*).){. 
7aa0: 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74   return bindText
7ab0: 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61  (pStmt, i, zData
7ac0: 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 53  , nData, xDel, S
7ad0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
7ae0: 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  E);.}.#endif /* 
7af0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
7b00: 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  6 */.int sqlite3
7b10: 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73 71 6c 69  _bind_value(sqli
7b20: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7b30: 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74 20 73 71   int i, const sq
7b40: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
7b50: 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  lue){.  int rc;.
7b60: 20 20 73 77 69 74 63 68 28 20 70 56 61 6c 75 65    switch( pValue
7b70: 2d 3e 74 79 70 65 20 29 7b 0a 20 20 20 20 63 61  ->type ){.    ca
7b80: 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  se SQLITE_INTEGE
7b90: 52 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  R: {.      rc = 
7ba0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
7bb0: 36 34 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61  64(pStmt, i, pVa
7bc0: 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 20  lue->u.i);.     
7bd0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
7be0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
7bf0: 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 72 63 20  OAT: {.      rc 
7c00: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  = sqlite3_bind_d
7c10: 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69 2c 20  ouble(pStmt, i, 
7c20: 70 56 61 6c 75 65 2d 3e 72 29 3b 0a 20 20 20 20  pValue->r);.    
7c30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
7c40: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
7c50: 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  LOB: {.      if(
7c60: 20 70 56 61 6c 75 65 2d 3e 66 6c 61 67 73 20 26   pValue->flags &
7c70: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
7c80: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
7c90: 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28  3_bind_zeroblob(
7ca0: 70 53 74 6d 74 2c 20 69 2c 20 70 56 61 6c 75 65  pStmt, i, pValue
7cb0: 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20  ->u.nZero);.    
7cc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
7cd0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
7ce0: 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69  nd_blob(pStmt, i
7cf0: 2c 20 70 56 61 6c 75 65 2d 3e 7a 2c 20 70 56 61  , pValue->z, pVa
7d00: 6c 75 65 2d 3e 6e 2c 53 51 4c 49 54 45 5f 54 52  lue->n,SQLITE_TR
7d10: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
7d20: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
7d30: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
7d40: 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a 20 20 20  LITE_TEXT: {.   
7d50: 20 20 20 72 63 20 3d 20 62 69 6e 64 54 65 78 74     rc = bindText
7d60: 28 70 53 74 6d 74 2c 69 2c 20 20 70 56 61 6c 75  (pStmt,i,  pValu
7d70: 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d 3e 6e 2c  e->z, pValue->n,
7d80: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
7d90: 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  T,.             
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 70 56 61 6c 75 65 2d 3e 65 6e 63 29 3b 0a 20   pValue->enc);. 
7dc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
7dd0: 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b  }.    default: {
7de0: 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
7df0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53  te3_bind_null(pS
7e00: 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 62  tmt, i);.      b
7e10: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
7e20: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69    return rc;.}.i
7e30: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
7e40: 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69 74 65 33  zeroblob(sqlite3
7e50: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
7e60: 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 69  t i, int n){.  i
7e70: 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70  nt rc;.  Vdbe *p
7e80: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
7e90: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
7ea0: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
7eb0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
7ec0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
7ed0: 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28  eMemSetZeroBlob(
7ee0: 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 6e  &p->aVar[i-1], n
7ef0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  );.    sqlite3_m
7f00: 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62  utex_leave(p->db
7f10: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20  ->mutex);.  }.  
7f20: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
7f30: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
7f40: 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63 61 72  umber of wildcar
7f50: 64 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 70  ds that can be p
7f60: 6f 74 65 6e 74 69 61 6c 6c 79 20 62 6f 75 6e 64  otentially bound
7f70: 20 74 6f 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75   to..** This rou
7f80: 74 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f  tine is added to
7f90: 20 73 75 70 70 6f 72 74 20 44 42 44 3a 3a 53 51   support DBD::SQ
7fa0: 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73  Lite.  .*/.int s
7fb0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
7fc0: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73 71 6c 69  meter_count(sqli
7fd0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
7fe0: 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  {.  Vdbe *p = (V
7ff0: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65  dbe*)pStmt;.  re
8000: 74 75 72 6e 20 70 20 3f 20 70 2d 3e 6e 56 61 72  turn p ? p->nVar
8010: 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43   : 0;.}../*.** C
8020: 72 65 61 74 65 20 61 20 6d 61 70 70 69 6e 67 20  reate a mapping 
8030: 66 72 6f 6d 20 76 61 72 69 61 62 6c 65 20 6e 75  from variable nu
8040: 6d 62 65 72 73 20 74 6f 20 76 61 72 69 61 62 6c  mbers to variabl
8050: 65 20 6e 61 6d 65 73 0a 2a 2a 20 69 6e 20 74 68  e names.** in th
8060: 65 20 56 64 62 65 2e 61 7a 56 61 72 5b 5d 20 61  e Vdbe.azVar[] a
8070: 72 72 61 79 2c 20 69 66 20 73 75 63 68 20 61 20  rray, if such a 
8080: 6d 61 70 70 69 6e 67 20 64 6f 65 73 20 6e 6f 74  mapping does not
8090: 20 61 6c 72 65 61 64 79 0a 2a 2a 20 65 78 69 73   already.** exis
80a0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  t..*/.static voi
80b0: 64 20 63 72 65 61 74 65 56 61 72 4d 61 70 28 56  d createVarMap(V
80c0: 64 62 65 20 2a 70 29 7b 0a 20 20 69 66 28 20 21  dbe *p){.  if( !
80d0: 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20 20 20 20  p->okVar ){.    
80e0: 69 6e 74 20 6a 3b 0a 20 20 20 20 4f 70 20 2a 70  int j;.    Op *p
80f0: 4f 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  Op;.    sqlite3_
8100: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64  mutex_enter(p->d
8110: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 2f  b->mutex);.    /
8120: 2a 20 54 68 65 20 72 61 63 65 20 63 6f 6e 64 69  * The race condi
8130: 74 69 6f 6e 20 68 65 72 65 20 69 73 20 68 61 72  tion here is har
8140: 6d 6c 65 73 73 2e 20 20 49 66 20 74 77 6f 20 74  mless.  If two t
8150: 68 72 65 61 64 73 20 63 61 6c 6c 20 74 68 69 73  hreads call this
8160: 0a 20 20 20 20 2a 2a 20 72 6f 75 74 69 6e 65 20  .    ** routine 
8170: 6f 6e 20 74 68 65 20 73 61 6d 65 20 56 64 62 65  on the same Vdbe
8180: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
8190: 65 2c 20 74 68 65 79 20 62 6f 74 68 20 6d 69 67  e, they both mig
81a0: 68 74 20 65 6e 64 0a 20 20 20 20 2a 2a 20 75 70  ht end.    ** up
81b0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 74 68   initializing th
81c0: 65 20 56 64 62 65 2e 61 7a 56 61 72 5b 5d 20 61  e Vdbe.azVar[] a
81d0: 72 72 61 79 2e 20 20 54 68 61 74 20 69 73 20 61  rray.  That is a
81e0: 20 6c 69 74 74 6c 65 20 65 78 74 72 61 0a 20 20   little extra.  
81f0: 20 20 2a 2a 20 77 6f 72 6b 20 62 75 74 20 69 74    ** work but it
8200: 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68 65 20   results in the 
8210: 73 61 6d 65 20 61 6e 73 77 65 72 2e 0a 20 20 20  same answer..   
8220: 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a 3d 30 2c   */.    for(j=0,
8230: 20 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20 6a 3c 70   pOp=p->aOp; j<p
8240: 2d 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70 4f 70 2b  ->nOp; j++, pOp+
8250: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  +){.      if( pO
8260: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 56 61  p->opcode==OP_Va
8270: 72 69 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  riable ){.      
8280: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8290: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
82a0: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20 20 20  p->nVar );.     
82b0: 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d     p->azVar[pOp-
82c0: 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d 3e 70 34  >p1-1] = pOp->p4
82d0: 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .z;.      }.    
82e0: 7d 0a 20 20 20 20 70 2d 3e 6f 6b 56 61 72 20 3d  }.    p->okVar =
82f0: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   1;.    sqlite3_
8300: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64  mutex_leave(p->d
8310: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 7d  b->mutex);.  }.}
8320: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
8330: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77 69 6c  he name of a wil
8340: 64 63 61 72 64 20 70 61 72 61 6d 65 74 65 72 2e  dcard parameter.
8350: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66    Return NULL if
8360: 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 69 73   the index.** is
8370: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72   out of range or
8380: 20 69 66 20 74 68 65 20 77 69 6c 64 63 61 72 64   if the wildcard
8390: 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a 0a   is unnamed..**.
83a0: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
83b0: 20 61 6c 77 61 79 73 20 55 54 46 2d 38 2e 0a 2a   always UTF-8..*
83c0: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
83d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
83e0: 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c 69 74 65  eter_name(sqlite
83f0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
8400: 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70  nt i){.  Vdbe *p
8410: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
8420: 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 69  .  if( p==0 || i
8430: 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20  <1 || i>p->nVar 
8440: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
8450: 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 56 61 72  .  }.  createVar
8460: 4d 61 70 28 70 29 3b 0a 20 20 72 65 74 75 72 6e  Map(p);.  return
8470: 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31 5d 3b 0a   p->azVar[i-1];.
8480: 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61  }../*.** Given a
8490: 20 77 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65   wildcard parame
84a0: 74 65 72 20 6e 61 6d 65 2c 20 72 65 74 75 72 6e  ter name, return
84b0: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
84c0: 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 77 69  e variable.** wi
84d0: 74 68 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 49  th that name.  I
84e0: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 76 61  f there is no va
84f0: 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20  riable with the 
8500: 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 72  given name,.** r
8510: 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74 20  eturn 0..*/.int 
8520: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
8530: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 73 71 6c  ameter_index(sql
8540: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8550: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
8560: 61 6d 65 29 7b 0a 20 20 56 64 62 65 20 2a 70 20  ame){.  Vdbe *p 
8570: 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a  = (Vdbe*)pStmt;.
8580: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 70    int i;.  if( p
8590: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
85a0: 6e 20 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74  n 0;.  }.  creat
85b0: 65 56 61 72 4d 61 70 28 70 29 3b 20 0a 20 20 69  eVarMap(p); .  i
85c0: 66 28 20 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20  f( zName ){.    
85d0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56  for(i=0; i<p->nV
85e0: 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ar; i++){.      
85f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
8600: 70 2d 3e 61 7a 56 61 72 5b 69 5d 3b 0a 20 20 20  p->azVar[i];.   
8610: 20 20 20 69 66 28 20 7a 20 26 26 20 73 74 72 63     if( z && strc
8620: 6d 70 28 7a 2c 7a 4e 61 6d 65 29 3d 3d 30 20 29  mp(z,zName)==0 )
8630: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
8640: 20 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   i+1;.      }.  
8650: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
8660: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61   0;.}../*.** Tra
8670: 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e  nsfer all bindin
8680: 67 73 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73  gs from the firs
8690: 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 76 65 72  t statement over
86a0: 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a   to the second..
86b0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  */.int sqlite3Tr
86c0: 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
86d0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72  qlite3_stmt *pFr
86e0: 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f  omStmt, sqlite3_
86f0: 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a  stmt *pToStmt){.
8700: 20 20 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20    Vdbe *pFrom = 
8710: 28 56 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74  (Vdbe*)pFromStmt
8720: 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20  ;.  Vdbe *pTo = 
8730: 28 56 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a  (Vdbe*)pToStmt;.
8740: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
8750: 74 28 20 70 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f  t( pTo->db==pFro
8760: 6d 2d 3e 64 62 20 29 3b 0a 20 20 61 73 73 65 72  m->db );.  asser
8770: 74 28 20 70 54 6f 2d 3e 6e 56 61 72 3d 3d 70 46  t( pTo->nVar==pF
8780: 72 6f 6d 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 73  rom->nVar );.  s
8790: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
87a0: 65 72 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65  er(pTo->db->mute
87b0: 78 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  x);.  for(i=0; i
87c0: 3c 70 46 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b  <pFrom->nVar; i+
87d0: 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
87e0: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 70 54 6f 2d  dbeMemMove(&pTo-
87f0: 3e 61 56 61 72 5b 69 5d 2c 20 26 70 46 72 6f 6d  >aVar[i], &pFrom
8800: 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 7d 0a  ->aVar[i]);.  }.
8810: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
8820: 6c 65 61 76 65 28 70 54 6f 2d 3e 64 62 2d 3e 6d  leave(pTo->db->m
8830: 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
8840: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
8850: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8860: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a  T_DEPRECATED./*.
8870: 2a 2a 20 44 65 70 72 65 63 61 74 65 64 20 65 78  ** Deprecated ex
8880: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
8890: 2e 20 20 49 6e 74 65 72 6e 61 6c 2f 63 6f 72 65  .  Internal/core
88a0: 20 53 51 4c 69 74 65 20 63 6f 64 65 0a 2a 2a 20   SQLite code.** 
88b0: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 73 71 6c 69  should call sqli
88c0: 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
88d0: 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 73 20 69 73  ngs..**.** Is is
88e0: 20 6d 69 73 75 73 65 20 74 6f 20 63 61 6c 6c 20   misuse to call 
88f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 74  this routine wit
8900: 68 20 73 74 61 74 65 6d 65 6e 74 73 20 66 72 6f  h statements fro
8910: 6d 20 64 69 66 66 65 72 65 6e 74 0a 2a 2a 20 64  m different.** d
8920: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8930: 6f 6e 73 2e 20 20 42 75 74 20 61 73 20 74 68 69  ons.  But as thi
8940: 73 20 69 73 20 61 20 64 65 70 72 65 63 61 74 65  s is a deprecate
8950: 64 20 69 6e 74 65 72 66 61 63 65 2c 20 77 65 0a  d interface, we.
8960: 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 62 6f 74 68  ** will not both
8970: 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  er to check for 
8980: 74 68 61 74 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a  that condition..
8990: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 77 6f  **.** If the two
89a0: 20 73 74 61 74 65 6d 65 6e 74 73 20 63 6f 6e 74   statements cont
89b0: 61 69 6e 20 61 20 64 69 66 66 65 72 65 6e 74 20  ain a different 
89c0: 6e 75 6d 62 65 72 20 6f 66 20 62 69 6e 64 69 6e  number of bindin
89d0: 67 73 2c 20 74 68 65 6e 0a 2a 2a 20 61 6e 20 53  gs, then.** an S
89e0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 73 20 72  QLITE_ERROR is r
89f0: 65 74 75 72 6e 65 64 2e 20 20 4e 6f 74 68 69 6e  eturned.  Nothin
8a00: 67 20 65 6c 73 65 20 63 61 6e 20 67 6f 20 77 72  g else can go wr
8a10: 6f 6e 67 2c 20 73 6f 20 6f 74 68 65 72 77 69 73  ong, so otherwis
8a20: 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 69  e.** SQLITE_OK i
8a30: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69  s returned..*/.i
8a40: 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61 6e 73  nt sqlite3_trans
8a50: 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c  fer_bindings(sql
8a60: 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d  ite3_stmt *pFrom
8a70: 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f 73 74  Stmt, sqlite3_st
8a80: 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20  mt *pToStmt){.  
8a90: 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56  Vdbe *pFrom = (V
8aa0: 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a  dbe*)pFromStmt;.
8ab0: 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20 28 56    Vdbe *pTo = (V
8ac0: 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20  dbe*)pToStmt;.  
8ad0: 69 66 28 20 70 46 72 6f 6d 2d 3e 6e 56 61 72 21  if( pFrom->nVar!
8ae0: 3d 70 54 6f 2d 3e 6e 56 61 72 20 29 7b 0a 20 20  =pTo->nVar ){.  
8af0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8b00: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
8b10: 75 72 6e 20 73 71 6c 69 74 65 33 54 72 61 6e 73  urn sqlite3Trans
8b20: 66 65 72 42 69 6e 64 69 6e 67 73 28 70 46 72 6f  ferBindings(pFro
8b30: 6d 53 74 6d 74 2c 20 70 54 6f 53 74 6d 74 29 3b  mStmt, pToStmt);
8b40: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
8b50: 20 52 65 74 75 72 6e 20 74 68 65 20 73 71 6c 69   Return the sqli
8b60: 74 65 33 2a 20 64 61 74 61 62 61 73 65 20 68 61  te3* database ha
8b70: 6e 64 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  ndle to which th
8b80: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
8b90: 6d 65 6e 74 20 67 69 76 65 6e 0a 2a 2a 20 69 6e  ment given.** in
8ba0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 62 65   the argument be
8bb0: 6c 6f 6e 67 73 2e 20 20 54 68 69 73 20 69 73 20  longs.  This is 
8bc0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
8bd0: 65 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 61  e handle that wa
8be0: 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
8bf0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
8c00: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8c10: 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74   that was used t
8c20: 6f 20 63 72 65 61 74 65 0a 2a 2a 20 74 68 65 20  o create.** the 
8c30: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
8c40: 20 66 69 72 73 74 20 70 6c 61 63 65 2e 0a 2a 2f   first place..*/
8c50: 0a 73 71 6c 69 74 65 33 20 2a 73 71 6c 69 74 65  .sqlite3 *sqlite
8c60: 33 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69  3_db_handle(sqli
8c70: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
8c80: 7b 0a 20 20 72 65 74 75 72 6e 20 70 53 74 6d 74  {.  return pStmt
8c90: 20 3f 20 28 28 56 64 62 65 2a 29 70 53 74 6d 74   ? ((Vdbe*)pStmt
8ca0: 29 2d 3e 64 62 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a  )->db : 0;.}../*
8cb0: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69  .** Return a poi
8cc0: 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  nter to the next
8cd0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
8ce0: 65 6e 74 20 61 66 74 65 72 20 70 53 74 6d 74 20  ent after pStmt 
8cf0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
8d00: 74 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  th database conn
8d10: 65 63 74 69 6f 6e 20 70 44 62 2e 20 20 49 66 20  ection pDb.  If 
8d20: 70 53 74 6d 74 20 69 73 20 4e 55 4c 4c 2c 20 72  pStmt is NULL, r
8d30: 65 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 0a  eturn the first.
8d40: 2a 2a 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ** prepared stat
8d50: 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 64 61  ement for the da
8d60: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8d70: 6e 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20  n.  Return NULL 
8d80: 69 66 20 74 68 65 72 65 0a 2a 2a 20 61 72 65 20  if there.** are 
8d90: 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f 0a 73 71 6c 69  no more..*/.sqli
8da0: 74 65 33 5f 73 74 6d 74 20 2a 73 71 6c 69 74 65  te3_stmt *sqlite
8db0: 33 5f 6e 65 78 74 5f 73 74 6d 74 28 73 71 6c 69  3_next_stmt(sqli
8dc0: 74 65 33 20 2a 70 44 62 2c 20 73 71 6c 69 74 65  te3 *pDb, sqlite
8dd0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
8de0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
8df0: 70 4e 65 78 74 3b 0a 20 20 73 71 6c 69 74 65 33  pNext;.  sqlite3
8e00: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 44 62  _mutex_enter(pDb
8e10: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20  ->mutex);.  if( 
8e20: 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20  pStmt==0 ){.    
8e30: 70 4e 65 78 74 20 3d 20 28 73 71 6c 69 74 65 33  pNext = (sqlite3
8e40: 5f 73 74 6d 74 2a 29 70 44 62 2d 3e 70 56 64 62  _stmt*)pDb->pVdb
8e50: 65 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  e;.  }else{.    
8e60: 70 4e 65 78 74 20 3d 20 28 73 71 6c 69 74 65 33  pNext = (sqlite3
8e70: 5f 73 74 6d 74 2a 29 28 28 56 64 62 65 2a 29 70  _stmt*)((Vdbe*)p
8e80: 53 74 6d 74 29 2d 3e 70 4e 65 78 74 3b 0a 20 20  Stmt)->pNext;.  
8e90: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
8ea0: 78 5f 6c 65 61 76 65 28 70 44 62 2d 3e 6d 75 74  x_leave(pDb->mut
8eb0: 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4e  ex);.  return pN
8ec0: 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ext;.}../*.** Re
8ed0: 74 75 72 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  turn the value o
8ee0: 66 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74  f a status count
8ef0: 65 72 20 66 6f 72 20 61 20 70 72 65 70 61 72 65  er for a prepare
8f00: 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f 0a 69  d statement.*/.i
8f10: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  nt sqlite3_stmt_
8f20: 73 74 61 74 75 73 28 73 71 6c 69 74 65 33 5f 73  status(sqlite3_s
8f30: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
8f40: 6f 70 2c 20 69 6e 74 20 72 65 73 65 74 46 6c 61  op, int resetFla
8f50: 67 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  g){.  Vdbe *pVdb
8f60: 65 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  e = (Vdbe*)pStmt
8f70: 3b 0a 20 20 69 6e 74 20 76 20 3d 20 70 56 64 62  ;.  int v = pVdb
8f80: 65 2d 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 2d 31  e->aCounter[op-1
8f90: 5d 3b 0a 20 20 69 66 28 20 72 65 73 65 74 46 6c  ];.  if( resetFl
8fa0: 61 67 20 29 20 70 56 64 62 65 2d 3e 61 43 6f 75  ag ) pVdbe->aCou
8fb0: 6e 74 65 72 5b 6f 70 2d 31 5d 20 3d 20 30 3b 0a  nter[op-1] = 0;.
8fc0: 20 20 72 65 74 75 72 6e 20 76 3b 0a 7d 0a          return v;.}.