/ Hex Artifact Content
Login

Artifact 16268e7a2614051c9c7f93679d9102b03206c129:


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 2f 0a 23 69 6e 63 6c 75 64 65 20 22  E..*/.#include "
01d0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e  sqliteInt.h".#in
01e0: 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68  clude "vdbeInt.h
01f0: 22 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  "../*.** Return 
0200: 54 52 55 45 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  TRUE (non-zero) 
0210: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
0220: 20 73 75 70 70 6c 69 65 64 20 61 73 20 61 6e 20   supplied as an 
0230: 61 72 67 75 6d 65 6e 74 20 6e 65 65 64 73 0a 2a  argument needs.*
0240: 2a 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c  * to be recompil
0250: 65 64 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74  ed.  A statement
0260: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 63   needs to be rec
0270: 6f 6d 70 69 6c 65 64 20 77 68 65 6e 65 76 65 72  ompiled whenever
0280: 20 74 68 65 0a 2a 2a 20 65 78 65 63 75 74 69 6f   the.** executio
0290: 6e 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 63 68  n environment ch
02a0: 61 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20 74  anges in a way t
02b0: 68 61 74 20 77 6f 75 6c 64 20 61 6c 74 65 72 20  hat would alter 
02c0: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 74  the program.** t
02d0: 68 61 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  hat sqlite3_prep
02e0: 61 72 65 28 29 20 67 65 6e 65 72 61 74 65 73 2e  are() generates.
02f0: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69    For example, i
0300: 66 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20  f new functions 
0310: 6f 72 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  or.** collating 
0320: 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 72 65  sequences are re
0330: 67 69 73 74 65 72 65 64 20 6f 72 20 69 66 20 61  gistered or if a
0340: 6e 20 61 75 74 68 6f 72 69 7a 65 72 20 66 75 6e  n authorizer fun
0350: 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 61 64 64 65  ction is.** adde
0360: 64 20 6f 72 20 63 68 61 6e 67 65 64 2e 0a 2a 2f  d or changed..*/
0370: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 70  .int sqlite3_exp
0380: 69 72 65 64 28 73 71 6c 69 74 65 33 5f 73 74 6d  ired(sqlite3_stm
0390: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
03a0: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
03b0: 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 3d  tmt;.  return p=
03c0: 3d 30 20 7c 7c 20 70 2d 3e 65 78 70 69 72 65 64  =0 || p->expired
03d0: 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
03e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03f0: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ** sqlite3_value
0400: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
0410: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0420: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
0430: 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 65 78 74  ing routines ext
0440: 72 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ract information
0450: 20 66 72 6f 6d 20 61 20 4d 65 6d 20 6f 72 20 73   from a Mem or s
0460: 71 6c 69 74 65 33 5f 76 61 6c 75 65 0a 2a 2a 20  qlite3_value.** 
0470: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 63 6f  structure..*/.co
0480: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
0490: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 73 71 6c  3_value_blob(sql
04a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
04b0: 29 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d  ){.  Mem *p = (M
04c0: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20  em*)pVal;.  if( 
04d0: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
04e0: 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  Blob|MEM_Str) ){
04f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
0500: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 30 2c  MemExpandBlob(0,
0510: 20 70 29 3b 0a 20 20 20 20 70 2d 3e 66 6c 61 67   p);.    p->flag
0520: 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20  s &= ~MEM_Str;. 
0530: 20 20 20 70 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d     p->flags |= M
0540: 45 4d 5f 42 6c 6f 62 3b 0a 20 20 20 20 72 65 74  EM_Blob;.    ret
0550: 75 72 6e 20 70 2d 3e 7a 3b 0a 20 20 7d 65 6c 73  urn p->z;.  }els
0560: 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71  e{.    return sq
0570: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
0580: 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 69 6e  (pVal);.  }.}.in
0590: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
05a0: 62 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  bytes(sqlite3_va
05b0: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
05c0: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75  turn sqlite3Valu
05d0: 65 42 79 74 65 73 28 30 2c 20 70 56 61 6c 2c 20  eBytes(0, pVal, 
05e0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a  SQLITE_UTF8);.}.
05f0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
0600: 65 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  e_bytes16(sqlite
0610: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
0620: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
0630: 56 61 6c 75 65 42 79 74 65 73 28 30 2c 20 70 56  ValueBytes(0, pV
0640: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
0650: 4e 41 54 49 56 45 29 3b 0a 7d 0a 64 6f 75 62 6c  NATIVE);.}.doubl
0660: 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  e sqlite3_value_
0670: 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33 5f 76  double(sqlite3_v
0680: 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72  alue *pVal){.  r
0690: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62  eturn sqlite3Vdb
06a0: 65 52 65 61 6c 56 61 6c 75 65 28 28 4d 65 6d 2a  eRealValue((Mem*
06b0: 29 70 56 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73 71  )pVal);.}.int sq
06c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
06d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
06e0: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  Val){.  return s
06f0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
0700: 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a  ue((Mem*)pVal);.
0710: 7d 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73  }.sqlite_int64 s
0720: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
0730: 36 34 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  64(sqlite3_value
0740: 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72   *pVal){.  retur
0750: 6e 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  n sqlite3VdbeInt
0760: 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c  Value((Mem*)pVal
0770: 29 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  );.}.const unsig
0780: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
0790: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 73 71 6c  3_value_text(sql
07a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
07b0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 63 6f 6e  ){.  return (con
07c0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
07d0: 20 2a 29 73 71 6c 69 74 65 33 56 61 6c 75 65 54   *)sqlite3ValueT
07e0: 65 78 74 28 30 2c 20 70 56 61 6c 2c 20 53 51 4c  ext(0, pVal, SQL
07f0: 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66  ITE_UTF8);.}.#if
0800: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0810: 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69  _UTF16.const voi
0820: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
0830: 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33 5f  _text16(sqlite3_
0840: 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20  value* pVal){.  
0850: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61  return sqlite3Va
0860: 6c 75 65 54 65 78 74 28 30 2c 20 70 56 61 6c 2c  lueText(0, pVal,
0870: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
0880: 49 56 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f  IVE);.}.const vo
0890: 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  id *sqlite3_valu
08a0: 65 5f 74 65 78 74 31 36 62 65 28 73 71 6c 69 74  e_text16be(sqlit
08b0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
08c0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
08d0: 33 56 61 6c 75 65 54 65 78 74 28 30 2c 20 70 56  3ValueText(0, pV
08e0: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
08f0: 42 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69  BE);.}.const voi
0900: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
0910: 5f 74 65 78 74 31 36 6c 65 28 73 71 6c 69 74 65  _text16le(sqlite
0920: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
0930: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
0940: 56 61 6c 75 65 54 65 78 74 28 30 2c 20 70 56 61  ValueText(0, pVa
0950: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  l, SQLITE_UTF16L
0960: 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  E);.}.#endif /* 
0970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
0980: 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  6 */.int sqlite3
0990: 5f 76 61 6c 75 65 5f 74 79 70 65 28 73 71 6c 69  _value_type(sqli
09a0: 74 65 33 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29  te3_value* pVal)
09b0: 7b 0a 20 20 72 65 74 75 72 6e 20 70 56 61 6c 2d  {.  return pVal-
09c0: 3e 74 79 70 65 3b 0a 7d 0a 2f 2a 20 73 71 6c 69  >type;.}./* sqli
09d0: 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69  te3_value_numeri
09e0: 63 5f 74 79 70 65 28 29 20 64 65 66 69 6e 65 64  c_type() defined
09f0: 20 69 6e 20 76 64 62 65 2e 63 20 2a 2f 0a 0a 2f   in vdbe.c */../
0a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c  ************ sql
0a20: 69 74 65 33 5f 72 65 73 75 6c 74 5f 20 20 2a 2a  ite3_result_  **
0a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
0a50: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
0a60: 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73 65 64  outines are used
0a70: 20 62 79 20 75 73 65 72 2d 64 65 66 69 6e 65 64   by user-defined
0a80: 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20 73 70   functions to sp
0a90: 65 63 69 66 79 0a 2a 2a 20 74 68 65 20 66 75 6e  ecify.** the fun
0aa0: 63 74 69 6f 6e 20 72 65 73 75 6c 74 2e 0a 2a 2f  ction result..*/
0ab0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
0ac0: 73 75 6c 74 5f 62 6c 6f 62 28 0a 20 20 73 71 6c  sult_blob(.  sql
0ad0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
0ae0: 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69  tx, .  const voi
0af0: 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20  d *z, .  int n, 
0b00: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
0b10: 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73  void *).){.  ass
0b20: 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 73  ert( n>=0 );.  s
0b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
0b40: 53 74 72 28 30 2c 20 26 70 43 74 78 2d 3e 73 2c  Str(0, &pCtx->s,
0b50: 20 7a 2c 20 6e 2c 20 30 2c 20 78 44 65 6c 29 3b   z, n, 0, xDel);
0b60: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
0b70: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 73 71  result_double(sq
0b80: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
0b90: 43 74 78 2c 20 64 6f 75 62 6c 65 20 72 56 61 6c  Ctx, double rVal
0ba0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ){.  sqlite3Vdbe
0bb0: 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70 43  MemSetDouble(&pC
0bc0: 74 78 2d 3e 73 2c 20 72 56 61 6c 29 3b 0a 7d 0a  tx->s, rVal);.}.
0bd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
0be0: 75 6c 74 5f 65 72 72 6f 72 28 73 71 6c 69 74 65  ult_error(sqlite
0bf0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
0c00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
0c10: 69 6e 74 20 6e 29 7b 0a 20 20 70 43 74 78 2d 3e  int n){.  pCtx->
0c20: 69 73 45 72 72 6f 72 20 3d 20 31 3b 0a 20 20 73  isError = 1;.  s
0c30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
0c40: 53 74 72 28 30 2c 20 26 70 43 74 78 2d 3e 73 2c  Str(0, &pCtx->s,
0c50: 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54   z, n, SQLITE_UT
0c60: 46 38 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  F8, SQLITE_TRANS
0c70: 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  IENT);.}.#ifndef
0c80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
0c90: 31 36 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  16.void sqlite3_
0ca0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28 73  result_error16(s
0cb0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
0cc0: 70 43 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64  pCtx, const void
0cd0: 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 70   *z, int n){.  p
0ce0: 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 31  Ctx->isError = 1
0cf0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
0d00: 65 6d 53 65 74 53 74 72 28 30 2c 20 26 70 43 74  emSetStr(0, &pCt
0d10: 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  x->s, z, n, SQLI
0d20: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
0d30: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
0d40: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 76 6f 69 64  );.}.#endif.void
0d50: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
0d60: 69 6e 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  int(sqlite3_cont
0d70: 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69  ext *pCtx, int i
0d80: 56 61 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33 56  Val){.  sqlite3V
0d90: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
0da0: 70 43 74 78 2d 3e 73 2c 20 28 69 36 34 29 69 56  pCtx->s, (i64)iV
0db0: 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  al);.}.void sqli
0dc0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
0dd0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
0de0: 20 2a 70 43 74 78 2c 20 69 36 34 20 69 56 61 6c   *pCtx, i64 iVal
0df0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ){.  sqlite3Vdbe
0e00: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 70 43 74  MemSetInt64(&pCt
0e10: 78 2d 3e 73 2c 20 69 56 61 6c 29 3b 0a 7d 0a 76  x->s, iVal);.}.v
0e20: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
0e30: 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  lt_null(sqlite3_
0e40: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a  context *pCtx){.
0e50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
0e60: 53 65 74 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73  SetNull(&pCtx->s
0e70: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
0e80: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 0a 20  3_result_text(. 
0e90: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
0ea0: 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74   *pCtx, .  const
0eb0: 20 63 68 61 72 20 2a 7a 2c 20 0a 20 20 69 6e 74   char *z, .  int
0ec0: 20 6e 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   n,.  void (*xDe
0ed0: 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20  l)(void *).){.  
0ee0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
0ef0: 74 53 74 72 28 30 2c 20 26 70 43 74 78 2d 3e 73  tStr(0, &pCtx->s
0f00: 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55  , z, n, SQLITE_U
0f10: 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 69  TF8, xDel);.}.#i
0f20: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
0f30: 54 5f 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c  T_UTF16.void sql
0f40: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
0f50: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  16(.  sqlite3_co
0f60: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20  ntext *pCtx, .  
0f70: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a  const void *z, .
0f80: 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64    int n, .  void
0f90: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29   (*xDel)(void *)
0fa0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  .){.  sqlite3Vdb
0fb0: 65 4d 65 6d 53 65 74 53 74 72 28 30 2c 20 26 70  eMemSetStr(0, &p
0fc0: 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51  Ctx->s, z, n, SQ
0fd0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
0fe0: 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20  , xDel);.}.void 
0ff0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
1000: 65 78 74 31 36 62 65 28 0a 20 20 73 71 6c 69 74  ext16be(.  sqlit
1010: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
1020: 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  , .  const void 
1030: 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20  *z, .  int n, . 
1040: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
1050: 69 64 20 2a 29 0a 29 7b 0a 20 20 73 71 6c 69 74  id *).){.  sqlit
1060: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
1070: 30 2c 20 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20  0, &pCtx->s, z, 
1080: 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  n, SQLITE_UTF16B
1090: 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64  E, xDel);.}.void
10a0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
10b0: 74 65 78 74 31 36 6c 65 28 0a 20 20 73 71 6c 69  text16le(.  sqli
10c0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
10d0: 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  x, .  const void
10e0: 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a   *z, .  int n, .
10f0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
1100: 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 73 71 6c 69  oid *).){.  sqli
1110: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
1120: 28 30 2c 20 26 70 43 74 78 2d 3e 73 2c 20 7a 2c  (0, &pCtx->s, z,
1130: 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   n, SQLITE_UTF16
1140: 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 65 6e  LE, xDel);.}.#en
1150: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
1160: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 76 6f 69 64  IT_UTF16 */.void
1170: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
1180: 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 63 6f  value(sqlite3_co
1190: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 73 71 6c  ntext *pCtx, sql
11a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
11b0: 75 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ue){.  sqlite3Vd
11c0: 62 65 4d 65 6d 43 6f 70 79 28 30 2c 20 26 70 43  beMemCopy(0, &pC
11d0: 74 78 2d 3e 73 2c 20 70 56 61 6c 75 65 29 3b 0a  tx->s, pValue);.
11e0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
11f0: 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28 73  esult_zeroblob(s
1200: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1210: 70 43 74 78 2c 20 69 6e 74 20 6e 29 7b 0a 20 20  pCtx, int n){.  
1220: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1230: 74 5a 65 72 6f 42 6c 6f 62 28 26 70 43 74 78 2d  tZeroBlob(&pCtx-
1240: 3e 73 2c 20 6e 29 3b 0a 7d 0a 0a 2f 2a 20 46 6f  >s, n);.}../* Fo
1250: 72 63 65 20 61 6e 20 53 51 4c 49 54 45 5f 54 4f  rce an SQLITE_TO
1260: 4f 42 49 47 20 65 72 72 6f 72 2e 20 2a 2f 0a 76  OBIG error. */.v
1270: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
1280: 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28  lt_error_toobig(
1290: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
12a0: 2a 70 43 74 78 29 7b 0a 20 20 73 71 6c 69 74 65  *pCtx){.  sqlite
12b0: 33 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42  3VdbeMemSetZeroB
12c0: 6c 6f 62 28 26 70 43 74 78 2d 3e 73 2c 20 53 51  lob(&pCtx->s, SQ
12d0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 2b  LITE_MAX_LENGTH+
12e0: 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78  1);.}.../*.** Ex
12f0: 65 63 75 74 65 20 74 68 65 20 73 74 61 74 65 6d  ecute the statem
1300: 65 6e 74 20 70 53 74 6d 74 2c 20 65 69 74 68 65  ent pStmt, eithe
1310: 72 20 75 6e 74 69 6c 20 61 20 72 6f 77 20 6f 66  r until a row of
1320: 20 64 61 74 61 20 69 73 20 72 65 61 64 79 2c 20   data is ready, 
1330: 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
1340: 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 65   is completely e
1350: 78 65 63 75 74 65 64 20 6f 72 20 61 6e 20 65 72  xecuted or an er
1360: 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a  ror occurs..**.*
1370: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
1380: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 75  mplements the bu
1390: 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67 69 63 20  lk of the logic 
13a0: 62 65 68 69 6e 64 20 74 68 65 20 73 71 6c 69 74  behind the sqlit
13b0: 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41 50 49 2e  e_step().** API.
13c0: 20 20 54 68 65 20 6f 6e 6c 79 20 74 68 69 6e 67    The only thing
13d0: 20 6f 6d 69 74 74 65 64 20 69 73 20 74 68 65 20   omitted is the 
13e0: 61 75 74 6f 6d 61 74 69 63 20 72 65 63 6f 6d 70  automatic recomp
13f0: 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20 73 63 68  ile if a .** sch
1400: 65 6d 61 20 63 68 61 6e 67 65 20 68 61 73 20 6f  ema change has o
1410: 63 63 75 72 72 65 64 2e 20 20 54 68 61 74 20 64  ccurred.  That d
1420: 65 74 61 69 6c 20 69 73 20 68 61 6e 64 6c 65 64  etail is handled
1430: 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75 74 65 72   by the.** outer
1440: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
1450: 77 72 61 70 70 65 72 20 70 72 6f 63 65 64 75 72  wrapper procedur
1460: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
1470: 20 73 71 6c 69 74 65 33 53 74 65 70 28 56 64 62   sqlite3Step(Vdb
1480: 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 33  e *p){.  sqlite3
1490: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
14a0: 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
14b0: 74 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 6e  t malloc() has n
14c0: 6f 74 20 66 61 69 6c 65 64 20 2a 2f 0a 20 20 64  ot failed */.  d
14d0: 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 61 73 73  b = p->db;.  ass
14e0: 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
14f0: 46 61 69 6c 65 64 20 29 3b 0a 0a 20 20 69 66 28  Failed );..  if(
1500: 20 70 3d 3d 30 20 7c 7c 20 70 2d 3e 6d 61 67 69   p==0 || p->magi
1510: 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c!=VDBE_MAGIC_RU
1520: 4e 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  N ){.    return 
1530: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
1540: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 61 62 6f 72   }.  if( p->abor
1550: 74 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ted ){.    retur
1560: 6e 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a  n SQLITE_ABORT;.
1570: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c    }.  if( p->pc<
1580: 3d 30 20 26 26 20 70 2d 3e 65 78 70 69 72 65 64  =0 && p->expired
1590: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72   ){.    if( p->r
15a0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
15b0: 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51        p->rc = SQ
15c0: 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 20  LITE_SCHEMA;.   
15d0: 20 7d 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49   }.    rc = SQLI
15e0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
15f0: 74 6f 20 65 6e 64 5f 6f 66 5f 73 74 65 70 3b 0a  to end_of_step;.
1600: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
1610: 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b  3SafetyOn(db) ){
1620: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
1630: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20  ITE_MISUSE;.    
1640: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
1650: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  SUSE;.  }.  if( 
1660: 70 2d 3e 70 63 3c 30 20 29 7b 0a 20 20 20 20 2f  p->pc<0 ){.    /
1670: 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  * If there are n
1680: 6f 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  o other statemen
1690: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  ts currently run
16a0: 6e 69 6e 67 2c 20 74 68 65 6e 0a 20 20 20 20 2a  ning, then.    *
16b0: 2a 20 72 65 73 65 74 20 74 68 65 20 69 6e 74 65  * reset the inte
16c0: 72 72 75 70 74 20 66 6c 61 67 2e 20 20 54 68 69  rrupt flag.  Thi
16d0: 73 20 70 72 65 76 65 6e 74 73 20 61 20 63 61 6c  s prevents a cal
16e0: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 69 6e 74  l to sqlite3_int
16f0: 65 72 72 75 70 74 0a 20 20 20 20 2a 2a 20 66 72  errupt.    ** fr
1700: 6f 6d 20 69 6e 74 65 72 72 75 70 74 69 6e 67 20  om interrupting 
1710: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  a statement that
1720: 20 68 61 73 20 6e 6f 74 20 79 65 74 20 73 74 61   has not yet sta
1730: 72 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  rted..    */.   
1740: 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56   if( db->activeV
1750: 64 62 65 43 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  dbeCnt==0 ){.   
1760: 20 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65     db->u1.isInte
1770: 72 72 75 70 74 65 64 20 3d 20 30 3b 0a 20 20 20  rrupted = 0;.   
1780: 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1790: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
17a0: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
17b0: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69  trace callback i
17c0: 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 20  f there is one. 
17d0: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
17e0: 2d 3e 78 54 72 61 63 65 20 26 26 20 21 64 62 2d  ->xTrace && !db-
17f0: 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20 20  >init.busy ){.  
1800: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e      assert( p->n
1810: 4f 70 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  Op>0 );.      as
1820: 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 70 2d 3e  sert( p->aOp[p->
1830: 6e 4f 70 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  nOp-1].opcode==O
1840: 50 5f 4e 6f 6f 70 20 29 3b 0a 20 20 20 20 20 20  P_Noop );.      
1850: 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 70  assert( p->aOp[p
1860: 2d 3e 6e 4f 70 2d 31 5d 2e 70 33 21 3d 30 20 29  ->nOp-1].p3!=0 )
1870: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1880: 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d  p->aOp[p->nOp-1]
1890: 2e 70 33 74 79 70 65 3d 3d 50 33 5f 44 59 4e 41  .p3type==P3_DYNA
18a0: 4d 49 43 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  MIC );.      sql
18b0: 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
18c0: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72  );.      db->xTr
18d0: 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72  ace(db->pTraceAr
18e0: 67 2c 20 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70  g, p->aOp[p->nOp
18f0: 2d 31 5d 2e 70 33 29 3b 0a 20 20 20 20 20 20 69  -1].p3);.      i
1900: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1910: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 20 20  On(db) ){.      
1920: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
1930: 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 20 20 20  _MISUSE;.       
1940: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1950: 49 53 55 53 45 3b 0a 20 20 20 20 20 20 7d 0a 20  ISUSE;.      }. 
1960: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d     }.    if( db-
1970: 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21 64 62  >xProfile && !db
1980: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20  ->init.busy ){. 
1990: 20 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77       double rNow
19a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
19b0: 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64 62 2d  sCurrentTime(db-
19c0: 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b 0a 20  >pVfs, &rNow);. 
19d0: 20 20 20 20 20 70 2d 3e 73 74 61 72 74 54 69 6d       p->startTim
19e0: 65 20 3d 20 28 72 4e 6f 77 20 2d 20 28 69 6e 74  e = (rNow - (int
19f0: 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32 34  )rNow)*3600.0*24
1a00: 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30 3b  .0*1000000000.0;
1a10: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
1a20: 20 20 20 2f 2a 20 50 72 69 6e 74 20 61 20 63 6f     /* Print a co
1a30: 70 79 20 6f 66 20 53 51 4c 20 61 73 20 69 74 20  py of SQL as it 
1a40: 69 73 20 65 78 65 63 75 74 65 64 20 69 66 20 74  is executed if t
1a50: 68 65 20 53 51 4c 5f 54 52 41 43 45 20 70 72 61  he SQL_TRACE pra
1a60: 67 6d 61 20 69 73 20 74 75 72 6e 65 64 0a 20 20  gma is turned.  
1a70: 20 20 2a 2a 20 6f 6e 20 69 6e 20 64 65 62 75 67    ** on in debug
1a80: 67 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 2a  ging mode..    *
1a90: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1aa0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 64  DEBUG.    if( (d
1ab0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
1ac0: 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29  E_SqlTrace)!=0 )
1ad0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
1ae0: 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
1af0: 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 70 2d  trace: %s\n", p-
1b00: 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70  >aOp[p->nOp-1].p
1b10: 33 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  3);.    }.#endif
1b20: 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
1b30: 20 2a 2f 0a 0a 20 20 20 20 64 62 2d 3e 61 63 74   */..    db->act
1b40: 69 76 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20 20  iveVdbeCnt++;.  
1b50: 20 20 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 7d    p->pc = 0;.  }
1b60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b70: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1b80: 66 28 20 70 2d 3e 65 78 70 6c 61 69 6e 20 29 7b  f( p->explain ){
1b90: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1ba0: 33 56 64 62 65 4c 69 73 74 28 70 29 3b 0a 20 20  3VdbeList(p);.  
1bb0: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
1bc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1bd0: 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  AIN */.  {.    r
1be0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  c = sqlite3VdbeE
1bf0: 78 65 63 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 69  xec(p);.  }..  i
1c00: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1c10: 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72  Off(db) ){.    r
1c20: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
1c30: 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  E;.  }..#ifndef 
1c40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1c50: 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  E.  /* Invoke th
1c60: 65 20 70 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61  e profile callba
1c70: 63 6b 20 69 66 20 74 68 65 72 65 20 69 73 20 6f  ck if there is o
1c80: 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63  ne.  */.  if( rc
1c90: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20  !=SQLITE_ROW && 
1ca0: 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20  db->xProfile && 
1cb0: 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29  !db->init.busy )
1cc0: 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f  {.    double rNo
1cd0: 77 3b 0a 20 20 20 20 75 36 34 20 65 6c 61 70 73  w;.    u64 elaps
1ce0: 65 54 69 6d 65 3b 0a 0a 20 20 20 20 73 71 6c 69  eTime;..    sqli
1cf0: 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65  te3OsCurrentTime
1d00: 28 64 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77  (db->pVfs, &rNow
1d10: 29 3b 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d  );.    elapseTim
1d20: 65 20 3d 20 28 72 4e 6f 77 20 2d 20 28 69 6e 74  e = (rNow - (int
1d30: 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32 34  )rNow)*3600.0*24
1d40: 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30 20  .0*1000000000.0 
1d50: 2d 20 70 2d 3e 73 74 61 72 74 54 69 6d 65 3b 0a  - p->startTime;.
1d60: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e      assert( p->n
1d70: 4f 70 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  Op>0 );.    asse
1d80: 72 74 28 20 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f  rt( p->aOp[p->nO
1d90: 70 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p-1].opcode==OP_
1da0: 4e 6f 6f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  Noop );.    asse
1db0: 72 74 28 20 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f  rt( p->aOp[p->nO
1dc0: 70 2d 31 5d 2e 70 33 21 3d 30 20 29 3b 0a 20 20  p-1].p3!=0 );.  
1dd0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
1de0: 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70 33 74 79 70  [p->nOp-1].p3typ
1df0: 65 3d 3d 50 33 5f 44 59 4e 41 4d 49 43 20 29 3b  e==P3_DYNAMIC );
1e00: 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c  .    db->xProfil
1e10: 65 28 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72  e(db->pProfileAr
1e20: 67 2c 20 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70  g, p->aOp[p->nOp
1e30: 2d 31 5d 2e 70 33 2c 20 65 6c 61 70 73 65 54 69  -1].p3, elapseTi
1e40: 6d 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  me);.  }.#endif.
1e50: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
1e60: 70 2d 3e 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20  p->db, rc, 0);. 
1e70: 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65 33   p->rc = sqlite3
1e80: 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 70  ApiExit(p->db, p
1e90: 2d 3e 72 63 29 3b 0a 65 6e 64 5f 6f 66 5f 73 74  ->rc);.end_of_st
1ea0: 65 70 3a 0a 20 20 61 73 73 65 72 74 28 20 28 72  ep:.  assert( (r
1eb0: 63 26 30 78 66 66 29 3d 3d 72 63 20 29 3b 0a 20  c&0xff)==rc );. 
1ec0: 20 69 66 28 20 70 2d 3e 7a 53 71 6c 20 26 26 20   if( p->zSql && 
1ed0: 28 72 63 26 30 78 66 66 29 3c 53 51 4c 49 54 45  (rc&0xff)<SQLITE
1ee0: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 2f 2a 20 54  _ROW ){.    /* T
1ef0: 68 69 73 20 62 65 68 61 76 69 6f 72 20 6f 63 63  his behavior occ
1f00: 75 72 73 20 69 66 20 73 71 6c 69 74 65 33 5f 70  urs if sqlite3_p
1f10: 72 65 70 61 72 65 5f 76 32 28 29 20 77 61 73 20  repare_v2() was 
1f20: 75 73 65 64 20 74 6f 20 62 75 69 6c 64 0a 20 20  used to build.  
1f30: 20 20 2a 2a 20 74 68 65 20 70 72 65 70 61 72 65    ** the prepare
1f40: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 52 65  d statement.  Re
1f50: 74 75 72 6e 20 65 72 72 6f 72 20 63 6f 64 65 73  turn error codes
1f60: 20 64 69 72 65 63 74 6c 79 20 2a 2f 0a 20 20 20   directly */.   
1f70: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d   sqlite3Error(p-
1f80: 3e 64 62 2c 20 70 2d 3e 72 63 2c 20 30 29 3b 0a  >db, p->rc, 0);.
1f90: 20 20 20 20 72 65 74 75 72 6e 20 70 2d 3e 72 63      return p->rc
1fa0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
1fb0: 2a 20 54 68 69 73 20 69 73 20 66 6f 72 20 6c 65  * This is for le
1fc0: 67 61 63 79 20 73 71 6c 69 74 65 33 5f 70 72 65  gacy sqlite3_pre
1fd0: 70 61 72 65 28 29 20 62 75 69 6c 64 73 20 61 6e  pare() builds an
1fe0: 64 20 77 68 65 6e 20 74 68 65 20 63 6f 64 65 0a  d when the code.
1ff0: 20 20 20 20 2a 2a 20 69 73 20 53 51 4c 49 54 45      ** is SQLITE
2000: 5f 52 4f 57 20 6f 72 20 53 51 4c 49 54 45 5f 44  _ROW or SQLITE_D
2010: 4f 4e 45 20 2a 2f 0a 20 20 20 20 72 65 74 75 72  ONE */.    retur
2020: 6e 20 72 63 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  n rc;.  }.}../*.
2030: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 74  ** This is the t
2040: 6f 70 2d 6c 65 76 65 6c 20 69 6d 70 6c 65 6d 65  op-level impleme
2050: 6e 74 61 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74  ntation of sqlit
2060: 65 33 5f 73 74 65 70 28 29 2e 20 20 43 61 6c 6c  e3_step().  Call
2070: 0a 2a 2a 20 73 71 6c 69 74 65 33 53 74 65 70 28  .** sqlite3Step(
2080: 29 20 74 6f 20 64 6f 20 6d 6f 73 74 20 6f 66 20  ) to do most of 
2090: 74 68 65 20 77 6f 72 6b 2e 20 20 49 66 20 61 20  the work.  If a 
20a0: 73 63 68 65 6d 61 20 65 72 72 6f 72 20 6f 63 63  schema error occ
20b0: 75 72 73 2c 0a 2a 2a 20 63 61 6c 6c 20 73 71 6c  urs,.** call sql
20c0: 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29 20  ite3Reprepare() 
20d0: 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2e 0a 2a  and try again..*
20e0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20f0: 4f 4d 49 54 5f 50 41 52 53 45 52 0a 69 6e 74 20  OMIT_PARSER.int 
2100: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 71 6c  sqlite3_step(sql
2110: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
2120: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
2130: 74 65 33 53 74 65 70 28 28 56 64 62 65 2a 29 70  te3Step((Vdbe*)p
2140: 53 74 6d 74 29 3b 0a 7d 0a 23 65 6c 73 65 0a 69  Stmt);.}.#else.i
2150: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  nt sqlite3_step(
2160: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
2170: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 63 6e 74 20  tmt){.  int cnt 
2180: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  = 0;.  int rc;. 
2190: 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65   Vdbe *v = (Vdbe
21a0: 2a 29 70 53 74 6d 74 3b 0a 20 20 77 68 69 6c 65  *)pStmt;.  while
21b0: 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 53  ( (rc = sqlite3S
21c0: 74 65 70 28 76 29 29 3d 3d 53 51 4c 49 54 45 5f  tep(v))==SQLITE_
21d0: 53 43 48 45 4d 41 0a 20 20 20 20 20 20 20 20 20  SCHEMA.         
21e0: 26 26 20 63 6e 74 2b 2b 20 3c 20 35 0a 20 20 20  && cnt++ < 5.   
21f0: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
2200: 52 65 70 72 65 70 61 72 65 28 76 29 20 29 7b 0a  Reprepare(v) ){.
2210: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65      sqlite3_rese
2220: 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 76 2d  t(pStmt);.    v-
2230: 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
2240: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
2250: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2260: 78 74 72 61 63 74 20 74 68 65 20 75 73 65 72 20  xtract the user 
2270: 64 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69  data from a sqli
2280: 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75  te3_context stru
2290: 63 74 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e  cture and return
22a0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
22b0: 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71   it..*/.void *sq
22c0: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
22d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
22e0: 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  *p){.  assert( p
22f0: 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a   && p->pFunc );.
2300: 20 20 72 65 74 75 72 6e 20 70 2d 3e 70 46 75 6e    return p->pFun
2310: 63 2d 3e 70 55 73 65 72 44 61 74 61 3b 0a 7d 0a  c->pUserData;.}.
2320: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
2330: 77 69 6e 67 20 69 73 20 74 68 65 20 69 6d 70 6c  wing is the impl
2340: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e  ementation of an
2350: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68   SQL function th
2360: 61 74 20 61 6c 77 61 79 73 0a 2a 2a 20 66 61 69  at always.** fai
2370: 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
2380: 20 6d 65 73 73 61 67 65 20 73 74 61 74 69 6e 67   message stating
2390: 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69   that the functi
23a0: 6f 6e 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  on is used in th
23b0: 65 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f 6e 74 65  e.** wrong conte
23c0: 78 74 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  xt.  The sqlite3
23d0: 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69  _overload_functi
23e0: 6f 6e 28 29 20 41 50 49 20 6d 69 67 68 74 20 63  on() API might c
23f0: 6f 6e 73 74 72 75 63 74 0a 2a 2a 20 53 51 4c 20  onstruct.** SQL 
2400: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73  function that us
2410: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 73  e this routine s
2420: 6f 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74  o that the funct
2430: 69 6f 6e 73 20 77 69 6c 6c 20 65 78 69 73 74 0a  ions will exist.
2440: 2a 2a 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ** for name reso
2450: 6c 75 74 69 6f 6e 20 62 75 74 20 61 72 65 20 61  lution but are a
2460: 63 74 75 61 6c 6c 79 20 6f 76 65 72 6c 6f 61 64  ctually overload
2470: 65 64 20 62 79 20 74 68 65 20 78 46 69 6e 64 46  ed by the xFindF
2480: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f  unction.** metho
2490: 64 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  d of virtual tab
24a0: 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  les..*/.void sql
24b0: 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
24c0: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  ion(.  sqlite3_c
24d0: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
24e0: 20 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f    /* The functio
24f0: 6e 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78  n calling contex
2500: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  t */.  int argc,
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2530: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
2540: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  function */.  sq
2550: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
2560: 67 76 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  gv       /* Valu
2570: 65 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  e of each argume
2580: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74  nt */.){.  const
2590: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 63   char *zName = c
25a0: 6f 6e 74 65 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a  ontext->pFunc->z
25b0: 4e 61 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45  Name;.  char *zE
25c0: 72 72 3b 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c  rr;.  zErr = sql
25d0: 69 74 65 33 4d 50 72 69 6e 74 66 28 30 2c 0a 20  ite3MPrintf(0,. 
25e0: 20 20 20 20 20 22 75 6e 61 62 6c 65 20 74 6f 20       "unable to 
25f0: 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 25 73 20  use function %s 
2600: 69 6e 20 74 68 65 20 72 65 71 75 65 73 74 65 64  in the requested
2610: 20 63 6f 6e 74 65 78 74 22 2c 20 7a 4e 61 6d 65   context", zName
2620: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
2630: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
2640: 74 2c 20 7a 45 72 72 2c 20 2d 31 29 3b 0a 20 20  t, zErr, -1);.  
2650: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
2660: 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  r);.}../*.** All
2670: 6f 63 61 74 65 20 6f 72 20 72 65 74 75 72 6e 20  ocate or return 
2680: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 63 6f  the aggregate co
2690: 6e 74 65 78 74 20 66 6f 72 20 61 20 75 73 65 72  ntext for a user
26a0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 41 20 6e 65   function.  A ne
26b0: 77 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  w.** context is 
26c0: 61 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65  allocated on the
26d0: 20 66 69 72 73 74 20 63 61 6c 6c 2e 20 20 53 75   first call.  Su
26e0: 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 72  bsequent calls r
26f0: 65 74 75 72 6e 20 74 68 65 0a 2a 2a 20 73 61 6d  eturn the.** sam
2700: 65 20 63 6f 6e 74 65 78 74 20 74 68 61 74 20 77  e context that w
2710: 61 73 20 72 65 74 75 72 6e 65 64 20 6f 6e 20 70  as returned on p
2720: 72 69 6f 72 20 63 61 6c 6c 73 2e 0a 2a 2f 0a 76  rior calls..*/.v
2730: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 61 67 67  oid *sqlite3_agg
2740: 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 73  regate_context(s
2750: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
2760: 70 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20  p, int nByte){. 
2770: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 70 2d 3e   Mem *pMem = p->
2780: 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2790: 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26  p && p->pFunc &&
27a0: 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70   p->pFunc->xStep
27b0: 20 29 3b 0a 20 20 69 66 28 20 28 70 4d 65 6d 2d   );.  if( (pMem-
27c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67  >flags & MEM_Agg
27d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
27e0: 6e 42 79 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20  nByte==0 ){.    
27f0: 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e    assert( pMem->
2800: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20  flags==MEM_Null 
2810: 29 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 7a  );.      pMem->z
2820: 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
2830: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2840: 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20 20  gs = MEM_Agg;.  
2850: 20 20 20 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d      pMem->xDel =
2860: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 3b 0a 20   sqlite3_free;. 
2870: 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65       pMem->u.pDe
2880: 66 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20  f = p->pFunc;.  
2890: 20 20 20 20 69 66 28 20 6e 42 79 74 65 3c 3d 4e      if( nByte<=N
28a0: 42 46 53 20 29 7b 0a 20 20 20 20 20 20 20 20 70  BFS ){.        p
28b0: 4d 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  Mem->z = pMem->z
28c0: 53 68 6f 72 74 3b 0a 20 20 20 20 20 20 20 20 6d  Short;.        m
28d0: 65 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30  emset(pMem->z, 0
28e0: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 20 20  , nByte);.      
28f0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
2900: 4d 65 6d 2d 3e 7a 20 3d 20 73 71 6c 69 74 65 33  Mem->z = sqlite3
2910: 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 70 2d 3e  DbMallocZero(p->
2920: 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2930: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
2940: 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29 70 4d  return (void*)pM
2950: 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  em->z;.}../*.** 
2960: 52 65 74 75 72 6e 20 74 68 65 20 61 75 78 69 6c  Return the auxil
2970: 61 72 79 20 64 61 74 61 20 70 6f 69 6e 74 65 72  ary data pointer
2980: 2c 20 69 66 20 61 6e 79 2c 20 66 6f 72 20 74 68  , if any, for th
2990: 65 20 69 41 72 67 27 74 68 20 61 72 67 75 6d 65  e iArg'th argume
29a0: 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 73 65  nt to.** the use
29b0: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r-function defin
29c0: 65 64 20 62 79 20 70 43 74 78 2e 0a 2a 2f 0a 76  ed by pCtx..*/.v
29d0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 67 65 74  oid *sqlite3_get
29e0: 5f 61 75 78 64 61 74 61 28 73 71 6c 69 74 65 33  _auxdata(sqlite3
29f0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2a00: 69 6e 74 20 69 41 72 67 29 7b 0a 20 20 56 64 62  int iArg){.  Vdb
2a10: 65 46 75 6e 63 20 2a 70 56 64 62 65 46 75 6e 63  eFunc *pVdbeFunc
2a20: 20 3d 20 70 43 74 78 2d 3e 70 56 64 62 65 46 75   = pCtx->pVdbeFu
2a30: 6e 63 3b 0a 20 20 69 66 28 20 21 70 56 64 62 65  nc;.  if( !pVdbe
2a40: 46 75 6e 63 20 7c 7c 20 69 41 72 67 3e 3d 70 56  Func || iArg>=pV
2a50: 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20 7c 7c  dbeFunc->nAux ||
2a60: 20 69 41 72 67 3c 30 20 29 7b 0a 20 20 20 20 72   iArg<0 ){.    r
2a70: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 72  eturn 0;.  }.  r
2a80: 65 74 75 72 6e 20 70 56 64 62 65 46 75 6e 63 2d  eturn pVdbeFunc-
2a90: 3e 61 70 41 75 78 5b 69 41 72 67 5d 2e 70 41 75  >apAux[iArg].pAu
2aa0: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  x;.}../*.** Set 
2ab0: 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61 74  the auxilary dat
2ac0: 61 20 70 6f 69 6e 74 65 72 20 61 6e 64 20 64 65  a pointer and de
2ad0: 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e 2c 20 66  lete function, f
2ae0: 6f 72 20 74 68 65 20 69 41 72 67 27 74 68 0a 2a  or the iArg'th.*
2af0: 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * argument to th
2b00: 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
2b10: 64 65 66 69 6e 65 64 20 62 79 20 70 43 74 78 2e  defined by pCtx.
2b20: 20 41 6e 79 20 70 72 65 76 69 6f 75 73 20 76 61   Any previous va
2b30: 6c 75 65 20 69 73 0a 2a 2a 20 64 65 6c 65 74 65  lue is.** delete
2b40: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
2b50: 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e   delete function
2b60: 20 73 70 65 63 69 66 69 65 64 20 77 68 65 6e 20   specified when 
2b70: 69 74 20 77 61 73 20 73 65 74 2e 0a 2a 2f 0a 76  it was set..*/.v
2b80: 6f 69 64 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  oid sqlite3_set_
2b90: 61 75 78 64 61 74 61 28 0a 20 20 73 71 6c 69 74  auxdata(.  sqlit
2ba0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
2bb0: 2c 20 0a 20 20 69 6e 74 20 69 41 72 67 2c 20 0a  , .  int iArg, .
2bc0: 20 20 76 6f 69 64 20 2a 70 41 75 78 2c 20 0a 20    void *pAux, . 
2bd0: 20 76 6f 69 64 20 28 2a 78 44 65 6c 65 74 65 29   void (*xDelete)
2be0: 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 73 74 72  (void*).){.  str
2bf0: 75 63 74 20 41 75 78 44 61 74 61 20 2a 70 41 75  uct AuxData *pAu
2c00: 78 44 61 74 61 3b 0a 20 20 56 64 62 65 46 75 6e  xData;.  VdbeFun
2c10: 63 20 2a 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  c *pVdbeFunc;.  
2c20: 69 66 28 20 69 41 72 67 3c 30 20 29 20 67 6f 74  if( iArg<0 ) got
2c30: 6f 20 66 61 69 6c 65 64 3b 0a 0a 20 20 70 56 64  o failed;..  pVd
2c40: 62 65 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70  beFunc = pCtx->p
2c50: 56 64 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20  VdbeFunc;.  if( 
2c60: 21 70 56 64 62 65 46 75 6e 63 20 7c 7c 20 70 56  !pVdbeFunc || pV
2c70: 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69  dbeFunc->nAux<=i
2c80: 41 72 67 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e  Arg ){.    int n
2c90: 41 75 78 20 3d 20 28 70 56 64 62 65 46 75 6e 63  Aux = (pVdbeFunc
2ca0: 20 3f 20 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41   ? pVdbeFunc->nA
2cb0: 75 78 20 3a 20 30 29 3b 0a 20 20 20 20 69 6e 74  ux : 0);.    int
2cc0: 20 6e 4d 61 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f   nMalloc = sizeo
2cd0: 66 28 56 64 62 65 46 75 6e 63 29 20 2b 20 73 69  f(VdbeFunc) + si
2ce0: 7a 65 6f 66 28 73 74 72 75 63 74 20 41 75 78 44  zeof(struct AuxD
2cf0: 61 74 61 29 2a 69 41 72 67 3b 0a 20 20 20 20 70  ata)*iArg;.    p
2d00: 56 64 62 65 46 75 6e 63 20 3d 20 73 71 6c 69 74  VdbeFunc = sqlit
2d10: 65 33 5f 72 65 61 6c 6c 6f 63 28 70 56 64 62 65  e3_realloc(pVdbe
2d20: 46 75 6e 63 2c 20 6e 4d 61 6c 6c 6f 63 29 3b 0a  Func, nMalloc);.
2d30: 20 20 20 20 69 66 28 20 21 70 56 64 62 65 46 75      if( !pVdbeFu
2d40: 6e 63 20 29 7b 0a 20 20 20 20 20 20 70 43 74 78  nc ){.      pCtx
2d50: 2d 3e 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ->db->mallocFail
2d60: 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 67 6f  ed = 1;.      go
2d70: 74 6f 20 66 61 69 6c 65 64 3b 0a 20 20 20 20 7d  to failed;.    }
2d80: 0a 20 20 20 20 70 43 74 78 2d 3e 70 56 64 62 65  .    pCtx->pVdbe
2d90: 46 75 6e 63 20 3d 20 70 56 64 62 65 46 75 6e 63  Func = pVdbeFunc
2da0: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 70 56  ;.    memset(&pV
2db0: 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 6e  dbeFunc->apAux[n
2dc0: 41 75 78 5d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  Aux], 0, sizeof(
2dd0: 73 74 72 75 63 74 20 41 75 78 44 61 74 61 29 2a  struct AuxData)*
2de0: 28 69 41 72 67 2b 31 2d 6e 41 75 78 29 29 3b 0a  (iArg+1-nAux));.
2df0: 20 20 20 20 70 56 64 62 65 46 75 6e 63 2d 3e 6e      pVdbeFunc->n
2e00: 41 75 78 20 3d 20 69 41 72 67 2b 31 3b 0a 20 20  Aux = iArg+1;.  
2e10: 20 20 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75    pVdbeFunc->pFu
2e20: 6e 63 20 3d 20 70 43 74 78 2d 3e 70 46 75 6e 63  nc = pCtx->pFunc
2e30: 3b 0a 20 20 7d 0a 0a 20 20 70 41 75 78 44 61 74  ;.  }..  pAuxDat
2e40: 61 20 3d 20 26 70 56 64 62 65 46 75 6e 63 2d 3e  a = &pVdbeFunc->
2e50: 61 70 41 75 78 5b 69 41 72 67 5d 3b 0a 20 20 69  apAux[iArg];.  i
2e60: 66 28 20 70 41 75 78 44 61 74 61 2d 3e 70 41 75  f( pAuxData->pAu
2e70: 78 20 26 26 20 70 41 75 78 44 61 74 61 2d 3e 78  x && pAuxData->x
2e80: 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 70 41  Delete ){.    pA
2e90: 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 28  uxData->xDelete(
2ea0: 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 29 3b  pAuxData->pAux);
2eb0: 0a 20 20 7d 0a 20 20 70 41 75 78 44 61 74 61 2d  .  }.  pAuxData-
2ec0: 3e 70 41 75 78 20 3d 20 70 41 75 78 3b 0a 20 20  >pAux = pAux;.  
2ed0: 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74  pAuxData->xDelet
2ee0: 65 20 3d 20 78 44 65 6c 65 74 65 3b 0a 20 20 72  e = xDelete;.  r
2ef0: 65 74 75 72 6e 3b 0a 0a 66 61 69 6c 65 64 3a 0a  eturn;..failed:.
2f00: 20 20 69 66 28 20 78 44 65 6c 65 74 65 20 29 7b    if( xDelete ){
2f10: 0a 20 20 20 20 78 44 65 6c 65 74 65 28 70 41 75  .    xDelete(pAu
2f20: 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  x);.  }.}../*.**
2f30: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
2f40: 65 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65 20  er of times the 
2f50: 53 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 6f 66  Step function of
2f60: 20 61 20 61 67 67 72 65 67 61 74 65 20 68 61 73   a aggregate has
2f70: 20 62 65 65 6e 20 0a 2a 2a 20 63 61 6c 6c 65 64   been .** called
2f80: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ..**.** This fun
2f90: 63 74 69 6f 6e 20 69 73 20 64 65 70 72 65 63 61  ction is depreca
2fa0: 74 65 64 2e 20 20 44 6f 20 6e 6f 74 20 75 73 65  ted.  Do not use
2fb0: 20 69 74 20 66 6f 72 20 6e 65 77 20 63 6f 64 65   it for new code
2fc0: 2e 20 20 49 74 20 69 73 0a 2a 2a 20 70 72 6f 76  .  It is.** prov
2fd0: 69 64 65 20 6f 6e 6c 79 20 74 6f 20 61 76 6f 69  ide only to avoi
2fe0: 64 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63  d breaking legac
2ff0: 79 20 63 6f 64 65 2e 20 20 4e 65 77 20 61 67 67  y code.  New agg
3000: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
3010: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
3020: 6e 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 74  ns should keep t
3030: 68 65 69 72 20 6f 77 6e 20 63 6f 75 6e 74 73 20  heir own counts 
3040: 77 69 74 68 69 6e 20 74 68 65 69 72 20 61 67 67  within their agg
3050: 72 65 67 61 74 65 0a 2a 2a 20 63 6f 6e 74 65 78  regate.** contex
3060: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
3070: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e  3_aggregate_coun
3080: 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  t(sqlite3_contex
3090: 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28  t *p){.  assert(
30a0: 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26   p && p->pFunc &
30b0: 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65  & p->pFunc->xSte
30c0: 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d  p );.  return p-
30d0: 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 0a 2f 2a 0a  >pMem->n;.}../*.
30e0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
30f0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
3100: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
3110: 74 20 66 6f 72 20 74 68 65 20 73 74 61 74 65 6d  t for the statem
3120: 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e  ent pStmt..*/.in
3130: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  t sqlite3_column
3140: 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73  _count(sqlite3_s
3150: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56  tmt *pStmt){.  V
3160: 64 62 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65  dbe *pVm = (Vdbe
3170: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75   *)pStmt;.  retu
3180: 72 6e 20 70 56 6d 20 3f 20 70 56 6d 2d 3e 6e 52  rn pVm ? pVm->nR
3190: 65 73 43 6f 6c 75 6d 6e 20 3a 20 30 3b 0a 7d 0a  esColumn : 0;.}.
31a0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
31b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
31c0: 65 73 20 61 76 61 69 6c 61 62 6c 65 20 66 72 6f  es available fro
31d0: 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  m the current ro
31e0: 77 20 6f 66 20 74 68 65 0a 2a 2a 20 63 75 72 72  w of the.** curr
31f0: 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
3200: 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e  statement pStmt.
3210: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
3220: 64 61 74 61 5f 63 6f 75 6e 74 28 73 71 6c 69 74  data_count(sqlit
3230: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
3240: 0a 20 20 56 64 62 65 20 2a 70 56 6d 20 3d 20 28  .  Vdbe *pVm = (
3250: 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20  Vdbe *)pStmt;.  
3260: 69 66 28 20 70 56 6d 3d 3d 30 20 7c 7c 20 21 70  if( pVm==0 || !p
3270: 56 6d 2d 3e 72 65 73 4f 6e 53 74 61 63 6b 20 29  Vm->resOnStack )
3280: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
3290: 75 72 6e 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c  urn pVm->nResCol
32a0: 75 6d 6e 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43  umn;.}.../*.** C
32b0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 63  heck to see if c
32c0: 6f 6c 75 6d 6e 20 69 43 6f 6c 20 6f 66 20 74 68  olumn iCol of th
32d0: 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e  e given statemen
32e0: 74 20 69 73 20 76 61 6c 69 64 2e 20 20 49 66 0a  t is valid.  If.
32f0: 2a 2a 20 69 74 20 69 73 2c 20 72 65 74 75 72 6e  ** it is, return
3300: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
3310: 65 20 4d 65 6d 20 66 6f 72 20 74 68 65 20 76 61  e Mem for the va
3320: 6c 75 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75  lue of that colu
3330: 6d 6e 2e 0a 2a 2a 20 49 66 20 69 43 6f 6c 20 69  mn..** If iCol i
3340: 73 20 6e 6f 74 20 76 61 6c 69 64 2c 20 72 65 74  s not valid, ret
3350: 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  urn a pointer to
3360: 20 61 20 4d 65 6d 20 77 68 69 63 68 20 68 61 73   a Mem which has
3370: 20 61 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 4e   a value.** of N
3380: 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 4d  ULL..*/.static M
3390: 65 6d 20 2a 63 6f 6c 75 6d 6e 4d 65 6d 28 73 71  em *columnMem(sq
33a0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
33b0: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62  t, int i){.  Vdb
33c0: 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a  e *pVm = (Vdbe *
33d0: 29 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 61  )pStmt;.  int va
33e0: 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f 64 61 74  ls = sqlite3_dat
33f0: 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a  a_count(pStmt);.
3400: 20 20 69 66 28 20 70 56 6d 3d 3d 30 20 7c 7c 20    if( pVm==0 || 
3410: 70 56 6d 2d 3e 72 65 73 4f 6e 53 74 61 63 6b 3d  pVm->resOnStack=
3420: 3d 30 20 7c 7c 20 69 3e 3d 70 56 6d 2d 3e 6e 52  =0 || i>=pVm->nR
3430: 65 73 43 6f 6c 75 6d 6e 20 7c 7c 20 69 3c 30 20  esColumn || i<0 
3440: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
3450: 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65 6d 20  nst Mem nullMem 
3460: 3d 20 7b 7b 30 7d 2c 20 30 2e 30 2c 20 22 22 2c  = {{0}, 0.0, "",
3470: 20 30 2c 20 4d 45 4d 5f 4e 75 6c 6c 2c 20 53 51   0, MEM_Null, SQ
3480: 4c 49 54 45 5f 4e 55 4c 4c 20 7d 3b 0a 20 20 20  LITE_NULL };.   
3490: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 56   sqlite3Error(pV
34a0: 6d 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 52 41  m->db, SQLITE_RA
34b0: 4e 47 45 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  NGE, 0);.    ret
34c0: 75 72 6e 20 28 4d 65 6d 2a 29 26 6e 75 6c 6c 4d  urn (Mem*)&nullM
34d0: 65 6d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  em;.  }.  return
34e0: 20 26 70 56 6d 2d 3e 70 54 6f 73 5b 28 31 2d 76   &pVm->pTos[(1-v
34f0: 61 6c 73 29 2b 69 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  als)+i];.}../*.*
3500: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3510: 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
3520: 69 6e 76 6f 6b 69 6e 67 20 61 6e 20 73 71 6c 69  invoking an sqli
3530: 74 65 33 5f 76 61 6c 75 65 5f 58 58 58 20 66 75  te3_value_XXX fu
3540: 6e 63 74 69 6f 6e 20 6f 6e 20 61 20 0a 2a 2a 20  nction on a .** 
3550: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 69 2e  column value (i.
3560: 65 2e 20 61 20 76 61 6c 75 65 20 72 65 74 75 72  e. a value retur
3570: 6e 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  ned by evaluatin
3580: 67 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73  g an SQL express
3590: 69 6f 6e 20 69 6e 20 74 68 65 0a 2a 2a 20 73 65  ion in the.** se
35a0: 6c 65 63 74 20 6c 69 73 74 20 6f 66 20 61 20 53  lect list of a S
35b0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 29  ELECT statement)
35c0: 20 74 68 61 74 20 6d 61 79 20 63 61 75 73 65 20   that may cause 
35d0: 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75  a malloc() failu
35e0: 72 65 2e 20 49 66 20 0a 2a 2a 20 6d 61 6c 6c 6f  re. If .** mallo
35f0: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
3600: 74 68 65 20 74 68 72 65 61 64 73 20 6d 61 6c 6c  the threads mall
3610: 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 69 73  ocFailed flag is
3620: 20 63 6c 65 61 72 65 64 20 61 6e 64 20 74 68 65   cleared and the
3630: 20 72 65 73 75 6c 74 0a 2a 2a 20 63 6f 64 65 20   result.** code 
3640: 6f 66 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74  of statement pSt
3650: 6d 74 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  mt set to SQLITE
3660: 5f 4e 4f 4d 45 4d 2e 0a 2a 2a 0a 2a 2a 20 53 70  _NOMEM..**.** Sp
3670: 65 63 69 66 69 63 6c 79 2c 20 74 68 69 73 20 69  ecificly, this i
3680: 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
3690: 74 68 69 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  thin:.**.**     
36a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
36b0: 6e 74 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  nt().**     sqli
36c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
36d0: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
36e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 0a  3_column_text().
36f0: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
3700: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 0a 2a  olumn_text16().*
3710: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
3720: 6c 75 6d 6e 5f 72 65 61 6c 28 29 0a 2a 2a 20 20  lumn_real().**  
3730: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
3740: 6e 5f 62 79 74 65 73 28 29 0a 2a 2a 20 20 20 20  n_bytes().**    
3750: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3760: 62 79 74 65 73 31 36 28 29 0a 2a 2a 0a 2a 2a 20  bytes16().**.** 
3770: 42 75 74 20 6e 6f 74 20 66 6f 72 20 73 71 6c 69  But not for sqli
3780: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
3790: 29 2c 20 77 68 69 63 68 20 6e 65 76 65 72 20 63  ), which never c
37a0: 61 6c 6c 73 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  alls malloc()..*
37b0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f  /.static void co
37c0: 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72  lumnMallocFailur
37d0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
37e0: 70 53 74 6d 74 29 0a 7b 0a 20 20 2f 2a 20 49 66  pStmt).{.  /* If
37f0: 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64   malloc() failed
3800: 20 64 75 72 69 6e 67 20 61 6e 20 65 6e 63 6f 64   during an encod
3810: 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e 20 77  ing conversion w
3820: 69 74 68 69 6e 20 61 6e 0a 20 20 2a 2a 20 73 71  ithin an.  ** sq
3830: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 58 58 58  lite3_column_XXX
3840: 20 41 50 49 2c 20 74 68 65 6e 20 73 65 74 20 74   API, then set t
3850: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f  he return code o
3860: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
3870: 74 6f 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 4e  to.  ** SQLITE_N
3880: 4f 4d 45 4d 2e 20 54 68 65 20 6e 65 78 74 20 63  OMEM. The next c
3890: 61 6c 6c 20 74 6f 20 5f 73 74 65 70 28 29 20 28  all to _step() (
38a0: 69 66 20 61 6e 79 29 20 77 69 6c 6c 20 72 65 74  if any) will ret
38b0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
38c0: 0a 20 20 2a 2a 20 61 6e 64 20 5f 66 69 6e 61 6c  .  ** and _final
38d0: 69 7a 65 28 29 20 77 69 6c 6c 20 72 65 74 75 72  ize() will retur
38e0: 6e 20 4e 4f 4d 45 4d 2e 0a 20 20 2a 2f 0a 20 20  n NOMEM..  */.  
38f0: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
3900: 2a 29 70 53 74 6d 74 3b 0a 20 20 70 2d 3e 72 63  *)pStmt;.  p->rc
3910: 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69   = sqlite3ApiExi
3920: 74 28 30 2c 20 70 2d 3e 72 63 29 3b 0a 7d 0a 0a  t(0, p->rc);.}..
3930: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
3940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71  ************* sq
3950: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 20 20 2a  lite3_column_  *
3960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
3980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
3990: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75 73 65  routines are use
39a0: 64 20 74 6f 20 61 63 63 65 73 73 20 65 6c 65 6d  d to access elem
39b0: 65 6e 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ents of the curr
39c0: 65 6e 74 20 72 6f 77 0a 2a 2a 20 69 6e 20 74 68  ent row.** in th
39d0: 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2f  e result set..*/
39e0: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
39f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
3a00: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
3a10: 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20  Stmt, int i){.  
3a20: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 3b  const void *val;
3a30: 0a 20 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  .  val = sqlite3
3a40: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 20 63 6f 6c  _value_blob( col
3a50: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
3a60: 29 3b 0a 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f  );.  /* Even tho
3a70: 75 67 68 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ugh there is no 
3a80: 65 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73  encoding convers
3a90: 69 6f 6e 2c 20 76 61 6c 75 65 5f 62 6c 6f 62 28  ion, value_blob(
3aa0: 29 20 6d 69 67 68 74 0a 20 20 2a 2a 20 6e 65 65  ) might.  ** nee
3ab0: 64 20 74 6f 20 63 61 6c 6c 20 6d 61 6c 6c 6f 63  d to call malloc
3ac0: 28 29 20 74 6f 20 65 78 70 61 6e 64 20 74 68 65  () to expand the
3ad0: 20 72 65 73 75 6c 74 20 6f 66 20 61 20 7a 65 72   result of a zer
3ae0: 6f 62 6c 6f 62 28 29 20 0a 20 20 2a 2a 20 65 78  oblob() .  ** ex
3af0: 70 72 65 73 73 69 6f 6e 2e 20 0a 20 20 2a 2f 0a  pression. .  */.
3b00: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
3b10: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
3b20: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e  return val;.}.in
3b30: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  t sqlite3_column
3b40: 5f 62 79 74 65 73 28 73 71 6c 69 74 65 33 5f 73  _bytes(sqlite3_s
3b50: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
3b60: 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d 20  i){.  int val = 
3b70: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3b80: 74 65 73 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  tes( columnMem(p
3b90: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
3ba0: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
3bb0: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
3bc0: 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c  n val;.}.int sql
3bd0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
3be0: 73 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  s16(sqlite3_stmt
3bf0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
3c00: 0a 20 20 69 6e 74 20 76 61 6c 20 3d 20 73 71 6c  .  int val = sql
3c10: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
3c20: 31 36 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  16( columnMem(pS
3c30: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
3c40: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
3c50: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
3c60: 20 76 61 6c 3b 0a 7d 0a 64 6f 75 62 6c 65 20 73   val;.}.double s
3c70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
3c80: 75 62 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  uble(sqlite3_stm
3c90: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
3ca0: 7b 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c 20 3d  {.  double val =
3cb0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
3cc0: 6f 75 62 6c 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d  ouble( columnMem
3cd0: 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63  (pStmt,i) );.  c
3ce0: 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75  olumnMallocFailu
3cf0: 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74  re(pStmt);.  ret
3d00: 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73  urn val;.}.int s
3d10: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
3d20: 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  t(sqlite3_stmt *
3d30: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
3d40: 20 69 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69 74   int val = sqlit
3d50: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 20 63 6f  e3_value_int( co
3d60: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
3d70: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
3d80: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
3d90: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
3da0: 7d 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73  }.sqlite_int64 s
3db0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
3dc0: 74 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  t64(sqlite3_stmt
3dd0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
3de0: 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
3df0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
3e00: 6c 75 65 5f 69 6e 74 36 34 28 20 63 6f 6c 75 6d  lue_int64( colum
3e10: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
3e20: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
3e30: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
3e40: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 63   return val;.}.c
3e50: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
3e60: 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar *sqlite3_colu
3e70: 6d 6e 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f  mn_text(sqlite3_
3e80: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
3e90: 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73   i){.  const uns
3ea0: 69 67 6e 65 64 20 63 68 61 72 20 2a 76 61 6c 20  igned char *val 
3eb0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3ec0: 74 65 78 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28  text( columnMem(
3ed0: 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f  pStmt,i) );.  co
3ee0: 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72  lumnMallocFailur
3ef0: 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75  e(pStmt);.  retu
3f00: 72 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65  rn val;.}.sqlite
3f10: 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
3f20: 5f 63 6f 6c 75 6d 6e 5f 76 61 6c 75 65 28 73 71  _column_value(sq
3f30: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
3f40: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 72 65 74  t, int i){.  ret
3f50: 75 72 6e 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  urn columnMem(pS
3f60: 74 6d 74 2c 20 69 29 3b 0a 7d 0a 23 69 66 6e 64  tmt, i);.}.#ifnd
3f70: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
3f80: 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20  TF16.const void 
3f90: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
3fa0: 74 65 78 74 31 36 28 73 71 6c 69 74 65 33 5f 73  text16(sqlite3_s
3fb0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
3fc0: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i){.  const void
3fd0: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
3fe0: 76 61 6c 75 65 5f 74 65 78 74 31 36 28 20 63 6f  value_text16( co
3ff0: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
4000: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
4010: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
4020: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
4030: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4040: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
4050: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
4060: 75 6d 6e 5f 74 79 70 65 28 73 71 6c 69 74 65 33  umn_type(sqlite3
4070: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
4080: 74 20 69 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  t i){.  return s
4090: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
40a0: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
40b0: 6d 74 2c 69 29 20 29 3b 0a 7d 0a 0a 2f 2a 20 54  mt,i) );.}../* T
40c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e  he following fun
40d0: 63 74 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d  ction is experim
40e0: 65 6e 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63  ental and subjec
40f0: 74 20 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a  t to change or.*
4100: 2a 20 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69  * removal */./*i
4110: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
4120: 6e 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  n_numeric_type(s
4130: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
4140: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20  mt, int i){.**  
4150: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76  return sqlite3_v
4160: 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70  alue_numeric_typ
4170: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
4180: 6d 74 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a  mt,i) );.**}.*/.
4190: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74  ./*.** Convert t
41a0: 68 65 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20  he N-th element 
41b0: 6f 66 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61  of pStmt->pColNa
41c0: 6d 65 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69  me[] into a stri
41d0: 6e 67 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e  ng using.** xFun
41e0: 63 28 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20  c() then return 
41f0: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66  that string.  If
4200: 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
4210: 67 65 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a  ge, return 0..**
4220: 0a 2a 2a 20 54 68 65 72 65 20 61 72 65 20 75 70  .** There are up
4230: 20 74 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20   to 5 names for 
4240: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73  each column.  us
4250: 65 54 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73  eType determines
4260: 20 77 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69   which.** name i
4270: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72  s returned.  Her
4280: 65 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a  e are the names:
4290: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20  .**.**    0     
42a0: 20 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   The column name
42b0: 20 61 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65   as it should be
42c0: 20 64 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f   displayed for o
42d0: 75 74 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20  utput.**    1   
42e0: 20 20 20 54 68 65 20 64 61 74 61 74 79 70 65 20     The datatype 
42f0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  name for the col
4300: 75 6d 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20  umn.**    2     
4310: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
4320: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 74   database that t
4330: 68 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65  he column derive
4340: 73 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20  s from.**    3  
4350: 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20      The name of 
4360: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
4370: 68 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65  he column derive
4380: 73 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20  s from.**    4  
4390: 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20      The name of 
43a0: 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  the table column
43b0: 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74   that the result
43c0: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
43d0: 66 72 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  from.**.** If th
43e0: 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
43f0: 61 20 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20  a simple column 
4400: 72 65 66 65 72 65 6e 63 65 20 28 69 66 20 69 74  reference (if it
4410: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
4420: 6e 0a 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61  n.** or a consta
4430: 6e 74 29 20 74 68 65 6e 20 75 73 65 54 79 70 65  nt) then useType
4440: 73 20 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65  s 2, 3, and 4 re
4450: 74 75 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74  turn NULL..*/.st
4460: 61 74 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20  atic const void 
4470: 2a 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73  *columnName(.  s
4480: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
4490: 6d 74 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63  mt,.  int N,.  c
44a0: 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75  onst void *(*xFu
44b0: 6e 63 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74  nc)(Mem*),.  int
44c0: 20 75 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f   useType.){.  co
44d0: 6e 73 74 20 76 6f 69 64 20 2a 72 65 74 3b 0a 20  nst void *ret;. 
44e0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
44f0: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20   *)pStmt;.  int 
4500: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
4510: 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
4520: 0a 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20  ..  if( p==0 || 
4530: 4e 3e 3d 6e 20 7c 7c 20 4e 3c 30 20 29 7b 0a 20  N>=n || N<0 ){. 
4540: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4550: 0a 20 20 4e 20 2b 3d 20 75 73 65 54 79 70 65 2a  .  N += useType*
4560: 6e 3b 0a 20 20 72 65 74 20 3d 20 78 46 75 6e 63  n;.  ret = xFunc
4570: 28 26 70 2d 3e 61 43 6f 6c 4e 61 6d 65 5b 4e 5d  (&p->aColName[N]
4580: 29 3b 0a 0a 20 20 2f 2a 20 41 20 6d 61 6c 6c 6f  );..  /* A mallo
4590: 63 20 6d 61 79 20 68 61 76 65 20 66 61 69 6c 65  c may have faile
45a0: 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
45b0: 78 46 75 6e 63 28 29 20 63 61 6c 6c 2e 20 49 66  xFunc() call. If
45c0: 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
45d0: 65 2c 0a 20 20 2a 2a 20 63 6c 65 61 72 20 74 68  e,.  ** clear th
45e0: 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66  e mallocFailed f
45f0: 6c 61 67 20 61 6e 64 20 72 65 74 75 72 6e 20 4e  lag and return N
4600: 55 4c 4c 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  ULL..  */.  sqli
4610: 74 65 33 41 70 69 45 78 69 74 28 30 2c 20 30 29  te3ApiExit(0, 0)
4620: 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a  ;.  return ret;.
4630: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
4640: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
4650: 4e 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  Nth column of th
4660: 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74  e result set ret
4670: 75 72 6e 65 64 20 62 79 20 53 51 4c 0a 2a 2a 20  urned by SQL.** 
4680: 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e  statement pStmt.
4690: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
46a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
46b0: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
46c0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
46d0: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
46e0: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
46f0: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
4700: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
4710: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
4720: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d  COLNAME_NAME);.}
4730: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4740: 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74  OMIT_UTF16.const
4750: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63   void *sqlite3_c
4760: 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 71 6c  olumn_name16(sql
4770: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
4780: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
4790: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
47a0: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
47b0: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
47c0: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
47d0: 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41  ue_text16, COLNA
47e0: 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 65 6e 64  ME_NAME);.}.#end
47f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
4800: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 63 6c   the column decl
4810: 61 72 61 74 69 6f 6e 20 74 79 70 65 20 28 69 66  aration type (if
4820: 20 61 70 70 6c 69 63 61 62 6c 65 29 20 6f 66 20   applicable) of 
4830: 74 68 65 20 27 69 27 74 68 20 63 6f 6c 75 6d 6e  the 'i'th column
4840: 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
4850: 74 20 73 65 74 20 6f 66 20 53 51 4c 20 73 74 61  t set of SQL sta
4860: 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f  tement pStmt..*/
4870: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
4880: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
4890: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  type(sqlite3_stm
48a0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
48b0: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
48c0: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
48d0: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
48e0: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
48f0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c  ite3_value_text,
4900: 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50   COLNAME_DECLTYP
4910: 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  E);.}.#ifndef SQ
4920: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
4930: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
4940: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
4950: 79 70 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ype16(sqlite3_st
4960: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
4970: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
4980: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
4990: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
49a0: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
49b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
49c0: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c  16, COLNAME_DECL
49d0: 54 59 50 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  TYPE);.}.#endif 
49e0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
49f0: 54 46 31 36 20 2a 2f 0a 0a 23 69 66 64 65 66 20  TF16 */..#ifdef 
4a00: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
4a10: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a  LUMN_METADATA./*
4a20: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
4a30: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
4a40: 61 73 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61  ase from which a
4a50: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64   result column d
4a60: 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20  erives..** NULL 
4a70: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
4a80: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
4a90: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
4aa0: 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72  n or constant or
4ab0: 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  .** anything els
4ac0: 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61  e which is not a
4ad0: 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66  n unabiguous ref
4ae0: 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61  erence to a data
4af0: 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  base column..*/.
4b00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
4b10: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
4b20: 61 73 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33  ase_name(sqlite3
4b30: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
4b40: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
4b50: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
4b60: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
4b70: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
4b80: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
4b90: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54  ext, COLNAME_DAT
4ba0: 41 42 41 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  ABASE);.}.#ifnde
4bb0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
4bc0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
4bd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
4be0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73  atabase_name16(s
4bf0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
4c00: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
4c10: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
4c20: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
4c30: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
4c40: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
4c50: 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c  alue_text16, COL
4c60: 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a  NAME_DATABASE);.
4c70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4c80: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
4c90: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4ca0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
4cb0: 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20  able from which 
4cc0: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  a result column 
4cd0: 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c  derives..** NULL
4ce0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
4cf0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
4d00: 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
4d10: 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f  on or constant o
4d20: 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c  r.** anything el
4d30: 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20  se which is not 
4d40: 61 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65  an unabiguous re
4d50: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74  ference to a dat
4d60: 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f  abase column..*/
4d70: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
4d80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
4d90: 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73  e_name(sqlite3_s
4da0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
4db0: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
4dc0: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
4dd0: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
4de0: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
4df0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4e00: 74 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45  t, COLNAME_TABLE
4e10: 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  );.}.#ifndef SQL
4e20: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
4e30: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
4e40: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
4e50: 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73  name16(sqlite3_s
4e60: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
4e70: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
4e80: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
4e90: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
4ea0: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
4eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4ec0: 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42  t16, COLNAME_TAB
4ed0: 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  LE);.}.#endif /*
4ee0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
4ef0: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  16 */../*.** Ret
4f00: 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
4f10: 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  the table column
4f20: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65   from which a re
4f30: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69  sult column deri
4f40: 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20  ves..** NULL is 
4f50: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
4f60: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73  result column is
4f70: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
4f80: 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a  r constant or.**
4f90: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77   anything else w
4fa0: 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75  hich is not an u
4fb0: 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65  nabiguous refere
4fc0: 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73  nce to a databas
4fd0: 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e  e column..*/.con
4fe0: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
4ff0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
5000: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
5010: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
5020: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
5030: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
5040: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
5050: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
5060: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
5070: 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b  COLNAME_COLUMN);
5080: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
5090: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
50a0: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
50b0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
50c0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
50d0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
50e0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
50f0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
5100: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
5110: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
5120: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5130: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55  16, COLNAME_COLU
5140: 4d 4e 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  MN);.}.#endif /*
5150: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
5160: 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  16 */.#endif /* 
5170: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
5180: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f  LUMN_METADATA */
5190: 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
51a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
51b0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  *** sqlite3_bind
51c0: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
51d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
51e0: 2a 20 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75  * .** Routines u
51f0: 73 65 64 20 74 6f 20 61 74 74 61 63 68 20 76 61  sed to attach va
5200: 6c 75 65 73 20 74 6f 20 77 69 6c 64 63 61 72 64  lues to wildcard
5210: 73 20 69 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20  s in a compiled 
5220: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  SQL statement..*
5230: 2f 0a 2f 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74  /./*.** Unbind t
5240: 68 65 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74  he value bound t
5250: 6f 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20  o variable i in 
5260: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5270: 70 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 0a  p. This is the .
5280: 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 62  ** the same as b
5290: 69 6e 64 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61  inding a NULL va
52a0: 6c 75 65 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d  lue to the colum
52b0: 6e 2e 20 49 66 20 74 68 65 20 22 69 22 20 70 61  n. If the "i" pa
52c0: 72 61 6d 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75  rameter is.** ou
52d0: 74 20 6f 66 20 72 61 6e 67 65 2c 20 74 68 65 6e  t of range, then
52e0: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 69 73   SQLITE_RANGE is
52f0: 20 72 65 74 75 72 6e 65 64 2e 20 4f 74 68 65 77   returned. Othew
5300: 69 73 65 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a  ise SQLITE_OK..*
5310: 2a 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63  *.** The error c
5320: 6f 64 65 20 73 74 6f 72 65 64 20 69 6e 20 64 61  ode stored in da
5330: 74 61 62 61 73 65 20 70 2d 3e 64 62 20 69 73 20  tabase p->db is 
5340: 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68  overwritten with
5350: 20 74 68 65 20 72 65 74 75 72 6e 0a 2a 2a 20 76   the return.** v
5360: 61 6c 75 65 20 69 6e 20 61 6e 79 20 63 61 73 65  alue in any case
5370: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
5380: 76 64 62 65 55 6e 62 69 6e 64 28 56 64 62 65 20  vdbeUnbind(Vdbe 
5390: 2a 70 2c 20 69 6e 74 20 69 29 7b 0a 20 20 4d 65  *p, int i){.  Me
53a0: 6d 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 70  m *pVar;.  if( p
53b0: 3d 3d 30 20 7c 7c 20 70 2d 3e 6d 61 67 69 63 21  ==0 || p->magic!
53c0: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
53d0: 7c 7c 20 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20  || p->pc>=0 ){. 
53e0: 20 20 20 69 66 28 20 70 20 29 20 73 71 6c 69 74     if( p ) sqlit
53f0: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53  e3Error(p->db, S
5400: 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20 30 29  QLITE_MISUSE, 0)
5410: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  ;.    return SQL
5420: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
5430: 20 20 69 66 28 20 69 3c 31 20 7c 7c 20 69 3e 70    if( i<1 || i>p
5440: 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 73 71  ->nVar ){.    sq
5450: 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62  lite3Error(p->db
5460: 2c 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 2c 20  , SQLITE_RANGE, 
5470: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53  0);.    return S
5480: 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a 20 20 7d  QLITE_RANGE;.  }
5490: 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61 72 20 3d  .  i--;.  pVar =
54a0: 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b 0a 20 20   &p->aVar[i];.  
54b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
54c0: 6c 65 61 73 65 28 70 56 61 72 29 3b 0a 20 20 70  lease(pVar);.  p
54d0: 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Var->flags = MEM
54e0: 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69 74 65 33  _Null;.  sqlite3
54f0: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c  Error(p->db, SQL
5500: 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20 20 72 65  ITE_OK, 0);.  re
5510: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
5520: 7d 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20  }../*.** Bind a 
5530: 74 65 78 74 20 6f 72 20 42 4c 4f 42 20 76 61 6c  text or BLOB val
5540: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
5550: 74 20 62 69 6e 64 54 65 78 74 28 0a 20 20 73 71  t bindText(.  sq
5560: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5570: 74 2c 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74  t,   /* The stat
5580: 65 6d 65 6e 74 20 74 6f 20 62 69 6e 64 20 61 67  ement to bind ag
5590: 61 69 6e 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69  ainst */.  int i
55a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
55b0: 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68    /* Index of th
55c0: 65 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  e parameter to b
55d0: 69 6e 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76  ind */.  const v
55e0: 6f 69 64 20 2a 7a 44 61 74 61 2c 20 20 20 20 20  oid *zData,     
55f0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68  /* Pointer to th
5600: 65 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75  e data to be bou
5610: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74  nd */.  int nDat
5620: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a,             /
5630: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
5640: 73 20 6f 66 20 64 61 74 61 20 74 6f 20 62 65 20  s of data to be 
5650: 62 6f 75 6e 64 20 2a 2f 0a 20 20 76 6f 69 64 20  bound */.  void 
5660: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20  (*xDel)(void*), 
5670: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
5680: 66 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  for the data */.
5690: 20 20 69 6e 74 20 65 6e 63 6f 64 69 6e 67 20 20    int encoding  
56a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f           /* Enco
56b0: 64 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74  ding for the dat
56c0: 61 20 2a 2f 0a 29 7b 0a 20 20 56 64 62 65 20 2a  a */.){.  Vdbe *
56d0: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
56e0: 74 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a  t;.  Mem *pVar;.
56f0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
5700: 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74   p==0 ){.    ret
5710: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
5720: 45 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  E;.  }.  sqlite3
5730: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e  _mutex_enter(p->
5740: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63  db->mutex);.  rc
5750: 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c   = vdbeUnbind(p,
5760: 20 69 29 3b 0a 20 20 69 66 28 20 72 63 20 7c 7c   i);.  if( rc ||
5770: 20 7a 44 61 74 61 3d 3d 30 20 29 7b 0a 20 20 20   zData==0 ){.   
5780: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
5790: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
57a0: 72 5b 69 2d 31 5d 3b 0a 20 20 72 63 20 3d 20 73  r[i-1];.  rc = s
57b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
57c0: 53 74 72 28 70 2d 3e 64 62 2c 20 70 56 61 72 2c  Str(p->db, pVar,
57d0: 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 65   zData, nData, e
57e0: 6e 63 6f 64 69 6e 67 2c 20 78 44 65 6c 29 3b 0a  ncoding, xDel);.
57f0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
5800: 5f 4f 4b 20 26 26 20 65 6e 63 6f 64 69 6e 67 21  _OK && encoding!
5810: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
5820: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5830: 45 6e 63 6f 64 69 6e 67 28 70 2d 3e 64 62 2c 20  Encoding(p->db, 
5840: 70 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29  pVar, ENC(p->db)
5850: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
5860: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 72 63 2c  Error(p->db, rc,
5870: 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
5880: 74 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62  te3ApiExit(p->db
5890: 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33  , rc);.  sqlite3
58a0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e  _mutex_leave(p->
58b0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
58c0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a  turn rc;.}.../*.
58d0: 2a 2a 20 42 69 6e 64 20 61 20 62 6c 6f 62 20 76  ** Bind a blob v
58e0: 61 6c 75 65 20 74 6f 20 61 6e 20 53 51 4c 20 73  alue to an SQL s
58f0: 74 61 74 65 6d 65 6e 74 20 76 61 72 69 61 62 6c  tatement variabl
5900: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
5910: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 73  3_bind_blob(.  s
5920: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5930: 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20  mt, .  int i, . 
5940: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61   const void *zDa
5950: 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61  ta, .  int nData
5960: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
5970: 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65  )(void*).){.  re
5980: 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53  turn bindText(pS
5990: 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e  tmt, i, zData, n
59a0: 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a  Data, xDel, 0);.
59b0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
59c0: 6e 64 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65  nd_double(sqlite
59d0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
59e0: 6e 74 20 69 2c 20 64 6f 75 62 6c 65 20 72 56 61  nt i, double rVa
59f0: 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  lue){.  int rc;.
5a00: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
5a10: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 73 71 6c  e *)pStmt;.  sql
5a20: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
5a30: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
5a40: 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e    rc = vdbeUnbin
5a50: 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72  d(p, i);.  if( r
5a60: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
5a70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
5a80: 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70 2d 3e  emSetDouble(&p->
5a90: 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56 61 6c 75  aVar[i-1], rValu
5aa0: 65 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  e);.  }.  sqlite
5ab0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
5ac0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  >db->mutex);.  r
5ad0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20  eturn rc;.}.int 
5ae0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
5af0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
5b00: 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20 69 56 61  , int i, int iVa
5b10: 6c 75 65 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  lue){.  return s
5b20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
5b30: 34 28 70 2c 20 69 2c 20 28 69 36 34 29 69 56 61  4(p, i, (i64)iVa
5b40: 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  lue);.}.int sqli
5b50: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73  te3_bind_int64(s
5b60: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5b70: 6d 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c 69 74  mt, int i, sqlit
5b80: 65 5f 69 6e 74 36 34 20 69 56 61 6c 75 65 29 7b  e_int64 iValue){
5b90: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62  .  int rc;.  Vdb
5ba0: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
5bb0: 53 74 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Stmt;.  sqlite3_
5bc0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64  mutex_enter(p->d
5bd0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20  b->mutex);.  rc 
5be0: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
5bf0: 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  i);.  if( rc==SQ
5c00: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
5c10: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
5c20: 49 6e 74 36 34 28 26 70 2d 3e 61 56 61 72 5b 69  Int64(&p->aVar[i
5c30: 2d 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20  -1], iValue);.  
5c40: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
5c50: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
5c60: 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
5c70: 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  rc;.}.int sqlite
5c80: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71 6c 69  3_bind_null(sqli
5c90: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
5ca0: 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 72   int i){.  int r
5cb0: 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  c;.  Vdbe *p = (
5cc0: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 73  Vdbe*)pStmt;.  s
5cd0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
5ce0: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
5cf0: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
5d00: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 73 71 6c  ind(p, i);.  sql
5d10: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
5d20: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
5d30: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69    return rc;.}.i
5d40: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
5d50: 74 65 78 74 28 20 0a 20 20 73 71 6c 69 74 65 33  text( .  sqlite3
5d60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20  _stmt *pStmt, . 
5d70: 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74   int i, .  const
5d80: 20 63 68 61 72 20 2a 7a 44 61 74 61 2c 20 0a 20   char *zData, . 
5d90: 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76   int nData, .  v
5da0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
5db0: 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62  *).){.  return b
5dc0: 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69  indText(pStmt, i
5dd0: 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20  , zData, nData, 
5de0: 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  xDel, SQLITE_UTF
5df0: 38 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  8);.}.#ifndef SQ
5e00: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
5e10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
5e20: 5f 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74  _text16(.  sqlit
5e30: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5e40: 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e  .  int i, .  con
5e50: 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20  st void *zData, 
5e60: 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20  .  int nData, . 
5e70: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
5e80: 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e  id*).){.  return
5e90: 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c   bindText(pStmt,
5ea0: 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61   i, zData, nData
5eb0: 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55  , xDel, SQLITE_U
5ec0: 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 23  TF16NATIVE);.}.#
5ed0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
5ee0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e  OMIT_UTF16 */.in
5ef0: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 76  t sqlite3_bind_v
5f00: 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  alue(sqlite3_stm
5f10: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c  t *pStmt, int i,
5f20: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 76   const sqlite3_v
5f30: 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a 20  alue *pValue){. 
5f40: 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20   int rc;.  Vdbe 
5f50: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
5f60: 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  mt;.  sqlite3_mu
5f70: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
5f80: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 63 20 3d 20  >mutex);.  rc = 
5f90: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
5fa0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
5fb0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
5fc0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
5fd0: 43 6f 70 79 28 30 2c 20 26 70 2d 3e 61 56 61 72  Copy(0, &p->aVar
5fe0: 5b 69 2d 31 5d 2c 20 70 56 61 6c 75 65 29 3b 0a  [i-1], pValue);.
5ff0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
6000: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
6010: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
6020: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
6030: 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f  te3_bind_zeroblo
6040: 62 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  b(sqlite3_stmt *
6050: 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 69 6e  pStmt, int i, in
6060: 74 20 6e 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  t n){.  int rc;.
6070: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
6080: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 73 71 6c  e *)pStmt;.  sql
6090: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
60a0: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
60b0: 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e    rc = vdbeUnbin
60c0: 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72  d(p, i);.  if( r
60d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
60e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
60f0: 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 26 70  emSetZeroBlob(&p
6100: 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 6e 29 3b  ->aVar[i-1], n);
6110: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  .  }.  sqlite3_m
6120: 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62  utex_leave(p->db
6130: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
6140: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
6150: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
6160: 72 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 74  r of wildcards t
6170: 68 61 74 20 63 61 6e 20 62 65 20 70 6f 74 65 6e  hat can be poten
6180: 74 69 61 6c 6c 79 20 62 6f 75 6e 64 20 74 6f 2e  tially bound to.
6190: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
61a0: 20 69 73 20 61 64 64 65 64 20 74 6f 20 73 75 70   is added to sup
61b0: 70 6f 72 74 20 44 42 44 3a 3a 53 51 4c 69 74 65  port DBD::SQLite
61c0: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
61d0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
61e0: 72 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f  r_count(sqlite3_
61f0: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
6200: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
6210: 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e  )pStmt;.  return
6220: 20 70 20 3f 20 70 2d 3e 6e 56 61 72 20 3a 20 30   p ? p->nVar : 0
6230: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74  ;.}../*.** Creat
6240: 65 20 61 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  e a mapping from
6250: 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
6260: 73 20 74 6f 20 76 61 72 69 61 62 6c 65 20 6e 61  s to variable na
6270: 6d 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 64  mes.** in the Vd
6280: 62 65 2e 61 7a 56 61 72 5b 5d 20 61 72 72 61 79  be.azVar[] array
6290: 2c 20 69 66 20 73 75 63 68 20 61 20 6d 61 70 70  , if such a mapp
62a0: 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72  ing does not alr
62b0: 65 61 64 79 0a 2a 2a 20 65 78 69 73 74 2e 0a 2a  eady.** exist..*
62c0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72  /.static void cr
62d0: 65 61 74 65 56 61 72 4d 61 70 28 56 64 62 65 20  eateVarMap(Vdbe 
62e0: 2a 70 29 7b 0a 20 20 69 66 28 20 21 70 2d 3e 6f  *p){.  if( !p->o
62f0: 6b 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  kVar ){.    sqli
6300: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
6310: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
6320: 20 20 20 69 66 28 20 21 70 2d 3e 6f 6b 56 61 72     if( !p->okVar
6330: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b   ){.      int j;
6340: 0a 20 20 20 20 20 20 4f 70 20 2a 70 4f 70 3b 0a  .      Op *pOp;.
6350: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
6360: 4f 70 3d 70 2d 3e 61 4f 70 3b 20 6a 3c 70 2d 3e  Op=p->aOp; j<p->
6370: 6e 4f 70 3b 20 6a 2b 2b 2c 20 70 4f 70 2b 2b 29  nOp; j++, pOp++)
6380: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  {.        if( pO
6390: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 56 61  p->opcode==OP_Va
63a0: 72 69 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  riable ){.      
63b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
63c0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
63d0: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20  <=p->nVar );.   
63e0: 20 20 20 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b         p->azVar[
63f0: 70 4f 70 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70  pOp->p1-1] = pOp
6400: 2d 3e 70 33 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ->p3;.        }.
6410: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 2d        }.      p-
6420: 3e 6f 6b 56 61 72 20 3d 20 31 3b 0a 20 20 20 20  >okVar = 1;.    
6430: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  }.    sqlite3_mu
6440: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
6450: 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 7d 0a 0a  >mutex);.  }.}..
6460: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
6470: 20 6e 61 6d 65 20 6f 66 20 61 20 77 69 6c 64 63   name of a wildc
6480: 61 72 64 20 70 61 72 61 6d 65 74 65 72 2e 20 20  ard parameter.  
6490: 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74  Return NULL if t
64a0: 68 65 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 6f  he index.** is o
64b0: 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69  ut of range or i
64c0: 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 20 69  f the wildcard i
64d0: 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a 0a 2a 2a  s unnamed..**.**
64e0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
64f0: 6c 77 61 79 73 20 55 54 46 2d 38 2e 0a 2a 2f 0a  lways UTF-8..*/.
6500: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
6510: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
6520: 65 72 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f  er_name(sqlite3_
6530: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
6540: 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d   i){.  Vdbe *p =
6550: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
6560: 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20 69 3c 31   if( p==0 || i<1
6570: 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20 29 7b   || i>p->nVar ){
6580: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
6590: 20 7d 0a 20 20 63 72 65 61 74 65 56 61 72 4d 61   }.  createVarMa
65a0: 70 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 70  p(p);.  return p
65b0: 2d 3e 61 7a 56 61 72 5b 69 2d 31 5d 3b 0a 7d 0a  ->azVar[i-1];.}.
65c0: 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61 20 77  ./*.** Given a w
65d0: 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65  ildcard paramete
65e0: 72 20 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 74  r name, return t
65f0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
6600: 76 61 72 69 61 62 6c 65 0a 2a 2a 20 77 69 74 68  variable.** with
6610: 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 49 66 20   that name.  If 
6620: 74 68 65 72 65 20 69 73 20 6e 6f 20 76 61 72 69  there is no vari
6630: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 67 69  able with the gi
6640: 76 65 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 72 65 74  ven name,.** ret
6650: 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urn 0..*/.int sq
6660: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
6670: 65 74 65 72 5f 69 6e 64 65 78 28 73 71 6c 69 74  eter_index(sqlit
6680: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6690: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
66a0: 65 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  e){.  Vdbe *p = 
66b0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
66c0: 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 70 3d 3d  int i;.  if( p==
66d0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
66e0: 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 56  0;.  }.  createV
66f0: 61 72 4d 61 70 28 70 29 3b 20 0a 20 20 69 66 28  arMap(p); .  if(
6700: 20 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f   zName ){.    fo
6710: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72  r(i=0; i<p->nVar
6720: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 6f  ; i++){.      co
6730: 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 2d  nst char *z = p-
6740: 3e 61 7a 56 61 72 5b 69 5d 3b 0a 20 20 20 20 20  >azVar[i];.     
6750: 20 69 66 28 20 7a 20 26 26 20 73 74 72 63 6d 70   if( z && strcmp
6760: 28 7a 2c 7a 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a  (z,zName)==0 ){.
6770: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69          return i
6780: 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  +1;.      }.    
6790: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
67a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73  ;.}../*.** Trans
67b0: 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73  fer all bindings
67c0: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20   from the first 
67d0: 73 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 20 74  statement over t
67e0: 6f 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 2a 2a  o the second..**
67f0: 20 49 66 20 74 68 65 20 74 77 6f 20 73 74 61 74   If the two stat
6800: 65 6d 65 6e 74 73 20 63 6f 6e 74 61 69 6e 20 61  ements contain a
6810: 20 64 69 66 66 65 72 65 6e 74 20 6e 75 6d 62 65   different numbe
6820: 72 20 6f 66 20 62 69 6e 64 69 6e 67 73 2c 20 74  r of bindings, t
6830: 68 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  hen.** an SQLITE
6840: 5f 45 52 52 4f 52 20 69 73 20 72 65 74 75 72 6e  _ERROR is return
6850: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
6860: 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
6870: 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
6880: 74 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71  t *pFromStmt, sq
6890: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53  lite3_stmt *pToS
68a0: 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 46  tmt){.  Vdbe *pF
68b0: 72 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46 72  rom = (Vdbe*)pFr
68c0: 6f 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a  omStmt;.  Vdbe *
68d0: 70 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54 6f  pTo = (Vdbe*)pTo
68e0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 2c 20 72  Stmt;.  int i, r
68f0: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
6900: 20 69 66 28 20 28 70 46 72 6f 6d 2d 3e 6d 61 67   if( (pFrom->mag
6910: 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic!=VDBE_MAGIC_R
6920: 55 4e 20 26 26 20 70 46 72 6f 6d 2d 3e 6d 61 67  UN && pFrom->mag
6930: 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 48  ic!=VDBE_MAGIC_H
6940: 41 4c 54 29 0a 20 20 20 20 7c 7c 20 28 70 54 6f  ALT).    || (pTo
6950: 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41  ->magic!=VDBE_MA
6960: 47 49 43 5f 52 55 4e 20 26 26 20 70 54 6f 2d 3e  GIC_RUN && pTo->
6970: 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49  magic!=VDBE_MAGI
6980: 43 5f 48 41 4c 54 29 20 29 7b 0a 20 20 20 20 72  C_HALT) ){.    r
6990: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
69a0: 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  USE;.  }.  if( p
69b0: 46 72 6f 6d 2d 3e 6e 56 61 72 21 3d 70 54 6f 2d  From->nVar!=pTo-
69c0: 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 72 65 74  >nVar ){.    ret
69d0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
69e0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  ;.  }.  for(i=0;
69f0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
6a00: 26 20 69 3c 70 46 72 6f 6d 2d 3e 6e 56 61 72 3b  & i<pFrom->nVar;
6a10: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
6a20: 65 33 4d 61 6c 6c 6f 63 44 69 73 61 6c 6c 6f 77  e3MallocDisallow
6a30: 28 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  ();.    rc = sql
6a40: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
6a50: 30 2c 20 26 70 54 6f 2d 3e 61 56 61 72 5b 69 5d  0, &pTo->aVar[i]
6a60: 2c 20 26 70 46 72 6f 6d 2d 3e 61 56 61 72 5b 69  , &pFrom->aVar[i
6a70: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 4d  ]);.    sqlite3M
6a80: 61 6c 6c 6f 63 41 6c 6c 6f 77 28 29 3b 0a 20 20  allocAllow();.  
6a90: 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  }.  assert( rc==
6aa0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
6ab0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b  =SQLITE_NOMEM );
6ac0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
6ad0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6ae0: 65 20 73 71 6c 69 74 65 33 2a 20 64 61 74 61 62  e sqlite3* datab
6af0: 61 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 77 68  ase handle to wh
6b00: 69 63 68 20 74 68 65 20 70 72 65 70 61 72 65 64  ich the prepared
6b10: 20 73 74 61 74 65 6d 65 6e 74 20 67 69 76 65 6e   statement given
6b20: 0a 2a 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d  .** in the argum
6b30: 65 6e 74 20 62 65 6c 6f 6e 67 73 2e 20 20 54 68  ent belongs.  Th
6b40: 69 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 64  is is the same d
6b50: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
6b60: 68 61 74 20 77 61 73 0a 2a 2a 20 74 68 65 20 66  hat was.** the f
6b70: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
6b80: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65   the sqlite3_pre
6b90: 70 61 72 65 28 29 20 74 68 61 74 20 77 61 73 20  pare() that was 
6ba0: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 0a 2a  used to create.*
6bb0: 2a 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * the statement 
6bc0: 69 6e 20 74 68 65 20 66 69 72 73 74 20 70 6c 61  in the first pla
6bd0: 63 65 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a  ce..*/.sqlite3 *
6be0: 73 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c  sqlite3_db_handl
6bf0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
6c00: 70 53 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e  pStmt){.  return
6c10: 20 70 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a   pStmt ? ((Vdbe*
6c20: 29 70 53 74 6d 74 29 2d 3e 64 62 20 3a 20 30 3b  )pStmt)->db : 0;
6c30: 0a 7d 0a                                         .}.