/ Hex Artifact Content
Login

Artifact ddfe341249929b89c47a0ff77f8043ef0987612b:


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