/ Hex Artifact Content
Login

Artifact 3ca7808c67a10b5c20150108b431d520d141e93e:


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 70 29  MemExpandBlob(p)
0520: 3b 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 66 6c  ;.    if( (p->fl
0530: 61 67 73 20 26 20 4d 45 4d 5f 54 65 72 6d 29 3d  ags & MEM_Term)=
0540: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 66  =0 ){.      p->f
0550: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 72  lags &= ~MEM_Str
0560: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
0570: 72 6e 20 70 2d 3e 7a 3b 0a 20 20 7d 65 6c 73 65  rn p->z;.  }else
0580: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c  {.    return sql
0590: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
05a0: 70 56 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 69 6e 74  pVal);.  }.}.int
05b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
05c0: 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
05d0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
05e0: 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65  urn sqlite3Value
05f0: 42 79 74 65 73 28 70 56 61 6c 2c 20 53 51 4c 49  Bytes(pVal, SQLI
0600: 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 69 6e 74 20  TE_UTF8);.}.int 
0610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
0620: 74 65 73 31 36 28 73 71 6c 69 74 65 33 5f 76 61  tes16(sqlite3_va
0630: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
0640: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75  turn sqlite3Valu
0650: 65 42 79 74 65 73 28 70 56 61 6c 2c 20 53 51 4c  eBytes(pVal, SQL
0660: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
0670: 3b 0a 7d 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74  ;.}.double sqlit
0680: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
0690: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
06a0: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  Val){.  return s
06b0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
06c0: 6c 75 65 28 28 4d 65 6d 2a 29 70 56 61 6c 29 3b  lue((Mem*)pVal);
06d0: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  .}.int sqlite3_v
06e0: 61 6c 75 65 5f 69 6e 74 28 73 71 6c 69 74 65 33  alue_int(sqlite3
06f0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
0700: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
0710: 64 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d  dbeIntValue((Mem
0720: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 73 71 6c 69 74  *)pVal);.}.sqlit
0730: 65 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f  e_int64 sqlite3_
0740: 76 61 6c 75 65 5f 69 6e 74 36 34 28 73 71 6c 69  value_int64(sqli
0750: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
0760: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
0770: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 28  e3VdbeIntValue((
0780: 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 63 6f  Mem*)pVal);.}.co
0790: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
07a0: 72 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r *sqlite3_value
07b0: 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  _text(sqlite3_va
07c0: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
07d0: 74 75 72 6e 20 28 63 6f 6e 73 74 20 75 6e 73 69  turn (const unsi
07e0: 67 6e 65 64 20 63 68 61 72 20 2a 29 73 71 6c 69  gned char *)sqli
07f0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
0800: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  l, SQLITE_UTF8);
0810: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
0820: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
0830: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
0840: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 73 71  _value_text16(sq
0850: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56 61  lite3_value* pVa
0860: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
0870: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
0880: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
0890: 4e 41 54 49 56 45 29 3b 0a 7d 0a 63 6f 6e 73 74  NATIVE);.}.const
08a0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76   void *sqlite3_v
08b0: 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 73 71  alue_text16be(sq
08c0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
08d0: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
08e0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(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 70 56 61 6c 2c 20  ValueText(pVal, 
0960: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 3b  SQLITE_UTF16LE);
0970: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
0980: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
0990: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
09a0: 6c 75 65 5f 74 79 70 65 28 73 71 6c 69 74 65 33  lue_type(sqlite3
09b0: 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20  _value* pVal){. 
09c0: 20 72 65 74 75 72 6e 20 70 56 61 6c 2d 3e 74 79   return pVal->ty
09d0: 70 65 3b 0a 7d 0a 2f 2a 20 73 71 6c 69 74 65 33  pe;.}./* sqlite3
09e0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
09f0: 79 70 65 28 29 20 64 65 66 69 6e 65 64 20 69 6e  ype() defined in
0a00: 20 76 64 62 65 2e 63 20 2a 2f 0a 0a 2f 2a 2a 2a   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 20 73 71 6c 69 74 65  ********* sqlite
0a30: 33 5f 72 65 73 75 6c 74 5f 20 20 2a 2a 2a 2a 2a  3_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 0a 2a 2a 20 54 68  **********.** Th
0a60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
0a70: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 62 79  ines are used by
0a80: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
0a90: 6e 63 74 69 6f 6e 73 20 74 6f 20 73 70 65 63 69  nctions to speci
0aa0: 66 79 0a 2a 2a 20 74 68 65 20 66 75 6e 63 74 69  fy.** the functi
0ab0: 6f 6e 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 76 6f  on result..*/.vo
0ac0: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
0ad0: 74 5f 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65  t_blob(.  sqlite
0ae0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
0af0: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
0b00: 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20  z, .  int n, .  
0b10: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
0b20: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
0b30: 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 73 71 6c 69  ( n>=0 );.  sqli
0b40: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
0b50: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
0b60: 20 30 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69   0, xDel);.}.voi
0b70: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
0b80: 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33 5f  _double(sqlite3_
0b90: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 64  context *pCtx, d
0ba0: 6f 75 62 6c 65 20 72 56 61 6c 29 7b 0a 20 20 73  ouble rVal){.  s
0bb0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
0bc0: 44 6f 75 62 6c 65 28 26 70 43 74 78 2d 3e 73 2c  Double(&pCtx->s,
0bd0: 20 72 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   rVal);.}.void s
0be0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
0bf0: 72 6f 72 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ror(sqlite3_cont
0c00: 65 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  ext *pCtx, const
0c10: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
0c20: 7b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  {.  pCtx->isErro
0c30: 72 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  r = 1;.  sqlite3
0c40: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70  VdbeMemSetStr(&p
0c50: 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51  Ctx->s, z, n, SQ
0c60: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
0c70: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a  E_TRANSIENT);.}.
0c80: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
0c90: 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64 20 73  MIT_UTF16.void s
0ca0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
0cb0: 72 6f 72 31 36 28 73 71 6c 69 74 65 33 5f 63 6f  ror16(sqlite3_co
0cc0: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e  ntext *pCtx, con
0cd0: 73 74 20 76 6f 69 64 20 2a 7a 2c 20 69 6e 74 20  st void *z, int 
0ce0: 6e 29 7b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72  n){.  pCtx->isEr
0cf0: 72 6f 72 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74  ror = 1;.  sqlit
0d00: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
0d10: 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20  &pCtx->s, z, n, 
0d20: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
0d30: 56 45 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  VE, SQLITE_TRANS
0d40: 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  IENT);.}.#endif.
0d50: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
0d60: 75 6c 74 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f  ult_int(sqlite3_
0d70: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69  context *pCtx, i
0d80: 6e 74 20 69 56 61 6c 29 7b 0a 20 20 73 71 6c 69  nt iVal){.  sqli
0d90: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
0da0: 36 34 28 26 70 43 74 78 2d 3e 73 2c 20 28 69 36  64(&pCtx->s, (i6
0db0: 34 29 69 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20  4)iVal);.}.void 
0dc0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
0dd0: 6e 74 36 34 28 73 71 6c 69 74 65 33 5f 63 6f 6e  nt64(sqlite3_con
0de0: 74 65 78 74 20 2a 70 43 74 78 2c 20 69 36 34 20  text *pCtx, i64 
0df0: 69 56 61 6c 29 7b 0a 20 20 73 71 6c 69 74 65 33  iVal){.  sqlite3
0e00: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
0e10: 26 70 43 74 78 2d 3e 73 2c 20 69 56 61 6c 29 3b  &pCtx->s, iVal);
0e20: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
0e30: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69  result_null(sqli
0e40: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
0e50: 78 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  x){.  sqlite3Vdb
0e60: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70 43 74  eMemSetNull(&pCt
0e70: 78 2d 3e 73 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  x->s);.}.void sq
0e80: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
0e90: 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t(.  sqlite3_con
0ea0: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63  text *pCtx, .  c
0eb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 0a 20  onst char *z, . 
0ec0: 20 69 6e 74 20 6e 2c 0a 20 20 76 6f 69 64 20 28   int n,.  void (
0ed0: 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29  *xDel)(void *).)
0ee0: 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  {.  sqlite3VdbeM
0ef0: 65 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e  emSetStr(&pCtx->
0f00: 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f  s, z, n, SQLITE_
0f10: 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23  UTF8, xDel);.}.#
0f20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
0f30: 49 54 5f 55 54 46 31 36 0a 76 6f 69 64 20 73 71  IT_UTF16.void sq
0f40: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
0f50: 74 31 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  t16(.  sqlite3_c
0f60: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
0f70: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20   const void *z, 
0f80: 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69  .  int n, .  voi
0f90: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a  d (*xDel)(void *
0fa0: 29 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ).){.  sqlite3Vd
0fb0: 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74  beMemSetStr(&pCt
0fc0: 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  x->s, z, n, SQLI
0fd0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
0fe0: 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  xDel);.}.void sq
0ff0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
1000: 74 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33  t16be(.  sqlite3
1010: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1020: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
1030: 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76  , .  int n, .  v
1040: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
1050: 20 2a 29 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   *).){.  sqlite3
1060: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70  VdbeMemSetStr(&p
1070: 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51  Ctx->s, z, n, SQ
1080: 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 78 44  LITE_UTF16BE, xD
1090: 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  el);.}.void sqli
10a0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
10b0: 36 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  6le(.  sqlite3_c
10c0: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
10d0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20   const void *z, 
10e0: 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69  .  int n, .  voi
10f0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a  d (*xDel)(void *
1100: 29 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ).){.  sqlite3Vd
1110: 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74  beMemSetStr(&pCt
1120: 78 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  x->s, z, n, SQLI
1130: 54 45 5f 55 54 46 31 36 4c 45 2c 20 78 44 65 6c  TE_UTF16LE, xDel
1140: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
1150: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1160: 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
1170: 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65 28 73 71  _result_value(sq
1180: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
1190: 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  Ctx, sqlite3_val
11a0: 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 73  ue *pValue){.  s
11b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
11c0: 79 28 26 70 43 74 78 2d 3e 73 2c 20 70 56 61 6c  y(&pCtx->s, pVal
11d0: 75 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  ue);.}.void sqli
11e0: 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62  te3_result_zerob
11f0: 6c 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  lob(sqlite3_cont
1200: 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 6e  ext *pCtx, int n
1210: 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ){.  sqlite3Vdbe
1220: 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 26  MemSetZeroBlob(&
1230: 70 43 74 78 2d 3e 73 2c 20 6e 29 3b 0a 7d 0a 0a  pCtx->s, n);.}..
1240: 2f 2a 20 46 6f 72 63 65 20 61 6e 20 53 51 4c 49  /* Force an SQLI
1250: 54 45 5f 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e  TE_TOOBIG error.
1260: 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
1270: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f  _result_error_to
1280: 6f 62 69 67 28 73 71 6c 69 74 65 33 5f 63 6f 6e  obig(sqlite3_con
1290: 74 65 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 73  text *pCtx){.  s
12a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
12b0: 5a 65 72 6f 42 6c 6f 62 28 26 70 43 74 78 2d 3e  ZeroBlob(&pCtx->
12c0: 73 2c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  s, SQLITE_MAX_LE
12d0: 4e 47 54 48 2b 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  NGTH+1);.}.../*.
12e0: 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
12f0: 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2c 20  tatement pStmt, 
1300: 65 69 74 68 65 72 20 75 6e 74 69 6c 20 61 20 72  either until a r
1310: 6f 77 20 6f 66 20 64 61 74 61 20 69 73 20 72 65  ow of data is re
1320: 61 64 79 2c 20 74 68 65 0a 2a 2a 20 73 74 61 74  ady, the.** stat
1330: 65 6d 65 6e 74 20 69 73 20 63 6f 6d 70 6c 65 74  ement is complet
1340: 65 6c 79 20 65 78 65 63 75 74 65 64 20 6f 72 20  ely executed or 
1350: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e  an error occurs.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
1370: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  ine implements t
1380: 68 65 20 62 75 6c 6b 20 6f 66 20 74 68 65 20 6c  he bulk of the l
1390: 6f 67 69 63 20 62 65 68 69 6e 64 20 74 68 65 20  ogic behind the 
13a0: 73 71 6c 69 74 65 5f 73 74 65 70 28 29 0a 2a 2a  sqlite_step().**
13b0: 20 41 50 49 2e 20 20 54 68 65 20 6f 6e 6c 79 20   API.  The only 
13c0: 74 68 69 6e 67 20 6f 6d 69 74 74 65 64 20 69 73  thing omitted is
13d0: 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 20 72   the automatic r
13e0: 65 63 6f 6d 70 69 6c 65 20 69 66 20 61 20 0a 2a  ecompile if a .*
13f0: 2a 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20  * schema change 
1400: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20 20 54  has occurred.  T
1410: 68 61 74 20 64 65 74 61 69 6c 20 69 73 20 68 61  hat detail is ha
1420: 6e 64 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  ndled by the.** 
1430: 6f 75 74 65 72 20 73 71 6c 69 74 65 33 5f 73 74  outer sqlite3_st
1440: 65 70 28 29 20 77 72 61 70 70 65 72 20 70 72 6f  ep() wrapper pro
1450: 63 65 64 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69  cedure..*/.stati
1460: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 53 74 65  c int sqlite3Ste
1470: 70 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 73 71  p(Vdbe *p){.  sq
1480: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
1490: 20 72 63 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72   rc;..  /* Asser
14a0: 74 20 74 68 61 74 20 6d 61 6c 6c 6f 63 28 29 20  t that malloc() 
14b0: 68 61 73 20 6e 6f 74 20 66 61 69 6c 65 64 20 2a  has not failed *
14c0: 2f 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  /.  assert( !sql
14d0: 69 74 65 33 4d 61 6c 6c 6f 63 46 61 69 6c 65 64  ite3MallocFailed
14e0: 28 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 3d 3d  () );..  if( p==
14f0: 30 20 7c 7c 20 70 2d 3e 6d 61 67 69 63 21 3d 56  0 || p->magic!=V
1500: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 7b  DBE_MAGIC_RUN ){
1510: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1520: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
1530: 20 69 66 28 20 70 2d 3e 61 62 6f 72 74 65 64 20   if( p->aborted 
1540: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
1550: 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 7d 0a  LITE_ABORT;.  }.
1560: 20 20 69 66 28 20 70 2d 3e 70 63 3c 3d 30 20 26    if( p->pc<=0 &
1570: 26 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  & p->expired ){.
1580: 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
1590: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15a0: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
15b0: 5f 53 43 48 45 4d 41 3b 0a 20 20 20 20 7d 0a 20  _SCHEMA;.    }. 
15c0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
15d0: 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 65  RROR;.    goto e
15e0: 6e 64 5f 6f 66 5f 73 74 65 70 3b 0a 20 20 7d 0a  nd_of_step;.  }.
15f0: 20 20 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20    db = p->db;.  
1600: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
1610: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 70  yOn(db) ){.    p
1620: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49  ->rc = SQLITE_MI
1630: 53 55 53 45 3b 0a 20 20 20 20 72 65 74 75 72 6e  SUSE;.    return
1640: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
1650: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c    }.  if( p->pc<
1660: 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
1670: 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65  here are no othe
1680: 72 20 73 74 61 74 65 6d 65 6e 74 73 20 63 75 72  r statements cur
1690: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20  rently running, 
16a0: 74 68 65 6e 0a 20 20 20 20 2a 2a 20 72 65 73 65  then.    ** rese
16b0: 74 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  t the interrupt 
16c0: 66 6c 61 67 2e 20 20 54 68 69 73 20 70 72 65 76  flag.  This prev
16d0: 65 6e 74 73 20 61 20 63 61 6c 6c 20 74 6f 20 73  ents a call to s
16e0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
16f0: 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20 69 6e 74  .    ** from int
1700: 65 72 72 75 70 74 69 6e 67 20 61 20 73 74 61 74  errupting a stat
1710: 65 6d 65 6e 74 20 74 68 61 74 20 68 61 73 20 6e  ement that has n
1720: 6f 74 20 79 65 74 20 73 74 61 72 74 65 64 2e 0a  ot yet started..
1730: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
1740: 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
1750: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ==0 ){.      db-
1760: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
1770: 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 23 69  d = 0;.    }..#i
1780: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1790: 54 5f 54 52 41 43 45 0a 20 20 20 20 2f 2a 20 49  T_TRACE.    /* I
17a0: 6e 76 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20  nvoke the trace 
17b0: 63 61 6c 6c 62 61 63 6b 20 69 66 20 74 68 65 72  callback if ther
17c0: 65 20 69 73 20 6f 6e 65 0a 20 20 20 20 2a 2f 0a  e is one.    */.
17d0: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61      if( db->xTra
17e0: 63 65 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e  ce && !db->init.
17f0: 62 75 73 79 20 29 7b 0a 20 20 20 20 20 20 61 73  busy ){.      as
1800: 73 65 72 74 28 20 70 2d 3e 6e 4f 70 3e 30 20 29  sert( p->nOp>0 )
1810: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1820: 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d  p->aOp[p->nOp-1]
1830: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70  .opcode==OP_Noop
1840: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1850: 28 20 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d  ( p->aOp[p->nOp-
1860: 31 5d 2e 70 33 21 3d 30 20 29 3b 0a 20 20 20 20  1].p3!=0 );.    
1870: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
1880: 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70 33 74 79 70  [p->nOp-1].p3typ
1890: 65 3d 3d 50 33 5f 44 59 4e 41 4d 49 43 20 29 3b  e==P3_DYNAMIC );
18a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 61  .      sqlite3Sa
18b0: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
18c0: 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
18d0: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2d 3e  ->pTraceArg, p->
18e0: 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70 33  aOp[p->nOp-1].p3
18f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  );.      if( sql
1900: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
1910: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72   ){.        p->r
1920: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
1930: 45 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  E;.        retur
1940: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
1950: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1960: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 66     if( db->xProf
1970: 69 6c 65 20 26 26 20 21 64 62 2d 3e 69 6e 69 74  ile && !db->init
1980: 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 20 20 64  .busy ){.      d
1990: 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20 20 20 20  ouble rNow;.    
19a0: 20 20 73 71 6c 69 74 65 33 4f 73 43 75 72 72 65    sqlite3OsCurre
19b0: 6e 74 54 69 6d 65 28 26 72 4e 6f 77 29 3b 0a 20  ntTime(&rNow);. 
19c0: 20 20 20 20 20 70 2d 3e 73 74 61 72 74 54 69 6d       p->startTim
19d0: 65 20 3d 20 28 72 4e 6f 77 20 2d 20 28 69 6e 74  e = (rNow - (int
19e0: 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32 34  )rNow)*3600.0*24
19f0: 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30 3b  .0*1000000000.0;
1a00: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
1a10: 20 20 20 2f 2a 20 50 72 69 6e 74 20 61 20 63 6f     /* Print a co
1a20: 70 79 20 6f 66 20 53 51 4c 20 61 73 20 69 74 20  py of SQL as it 
1a30: 69 73 20 65 78 65 63 75 74 65 64 20 69 66 20 74  is executed if t
1a40: 68 65 20 53 51 4c 5f 54 52 41 43 45 20 70 72 61  he SQL_TRACE pra
1a50: 67 6d 61 20 69 73 20 74 75 72 6e 65 64 0a 20 20  gma is turned.  
1a60: 20 20 2a 2a 20 6f 6e 20 69 6e 20 64 65 62 75 67    ** on in debug
1a70: 67 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 2a  ging mode..    *
1a80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1a90: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 64  DEBUG.    if( (d
1aa0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
1ab0: 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29  E_SqlTrace)!=0 )
1ac0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
1ad0: 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
1ae0: 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 70 2d  trace: %s\n", p-
1af0: 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70  >aOp[p->nOp-1].p
1b00: 33 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  3);.    }.#endif
1b10: 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
1b20: 20 2a 2f 0a 0a 20 20 20 20 64 62 2d 3e 61 63 74   */..    db->act
1b30: 69 76 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20 20  iveVdbeCnt++;.  
1b40: 20 20 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 7d    p->pc = 0;.  }
1b50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b60: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1b70: 66 28 20 70 2d 3e 65 78 70 6c 61 69 6e 20 29 7b  f( p->explain ){
1b80: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1b90: 33 56 64 62 65 4c 69 73 74 28 70 29 3b 0a 20 20  3VdbeList(p);.  
1ba0: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
1bb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1bc0: 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72  AIN */.  {.    r
1bd0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  c = sqlite3VdbeE
1be0: 78 65 63 28 70 29 3b 0a 20 20 7d 0a 0a 20 20 69  xec(p);.  }..  i
1bf0: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1c00: 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72  Off(db) ){.    r
1c10: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
1c20: 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  E;.  }..#ifndef 
1c30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1c40: 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  E.  /* Invoke th
1c50: 65 20 70 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61  e profile callba
1c60: 63 6b 20 69 66 20 74 68 65 72 65 20 69 73 20 6f  ck if there is o
1c70: 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63  ne.  */.  if( rc
1c80: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20  !=SQLITE_ROW && 
1c90: 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20  db->xProfile && 
1ca0: 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29  !db->init.busy )
1cb0: 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f  {.    double rNo
1cc0: 77 3b 0a 20 20 20 20 75 36 34 20 65 6c 61 70 73  w;.    u64 elaps
1cd0: 65 54 69 6d 65 3b 0a 0a 20 20 20 20 73 71 6c 69  eTime;..    sqli
1ce0: 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65  te3OsCurrentTime
1cf0: 28 26 72 4e 6f 77 29 3b 0a 20 20 20 20 65 6c 61  (&rNow);.    ela
1d00: 70 73 65 54 69 6d 65 20 3d 20 28 72 4e 6f 77 20  pseTime = (rNow 
1d10: 2d 20 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36 30  - (int)rNow)*360
1d20: 30 2e 30 2a 32 34 2e 30 2a 31 30 30 30 30 30 30  0.0*24.0*1000000
1d30: 30 30 30 2e 30 20 2d 20 70 2d 3e 73 74 61 72 74  000.0 - p->start
1d40: 54 69 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  Time;.    assert
1d50: 28 20 70 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ( p->nOp>0 );.  
1d60: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
1d70: 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 6f 70 63 6f 64  [p->nOp-1].opcod
1d80: 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 29 3b 0a 20 20  e==OP_Noop );.  
1d90: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
1da0: 5b 70 2d 3e 6e 4f 70 2d 31 5d 2e 70 33 21 3d 30  [p->nOp-1].p3!=0
1db0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1dc0: 70 2d 3e 61 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d  p->aOp[p->nOp-1]
1dd0: 2e 70 33 74 79 70 65 3d 3d 50 33 5f 44 59 4e 41  .p3type==P3_DYNA
1de0: 4d 49 43 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  MIC );.    db->x
1df0: 50 72 6f 66 69 6c 65 28 64 62 2d 3e 70 50 72 6f  Profile(db->pPro
1e00: 66 69 6c 65 41 72 67 2c 20 70 2d 3e 61 4f 70 5b  fileArg, p->aOp[
1e10: 70 2d 3e 6e 4f 70 2d 31 5d 2e 70 33 2c 20 65 6c  p->nOp-1].p3, el
1e20: 61 70 73 65 54 69 6d 65 29 3b 0a 20 20 7d 0a 23  apseTime);.  }.#
1e30: 65 6e 64 69 66 0a 0a 20 20 73 71 6c 69 74 65 33  endif..  sqlite3
1e40: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 72 63 2c  Error(p->db, rc,
1e50: 20 30 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 73   0);.  p->rc = s
1e60: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d  qlite3ApiExit(p-
1e70: 3e 64 62 2c 20 70 2d 3e 72 63 29 3b 0a 65 6e 64  >db, p->rc);.end
1e80: 5f 6f 66 5f 73 74 65 70 3a 0a 20 20 61 73 73 65  _of_step:.  asse
1e90: 72 74 28 20 28 72 63 26 30 78 66 66 29 3d 3d 72  rt( (rc&0xff)==r
1ea0: 63 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 53  c );.  if( p->zS
1eb0: 71 6c 20 26 26 20 28 72 63 26 30 78 66 66 29 3c  ql && (rc&0xff)<
1ec0: 53 51 4c 49 54 45 5f 52 4f 57 20 29 7b 0a 20 20  SQLITE_ROW ){.  
1ed0: 20 20 2f 2a 20 54 68 69 73 20 62 65 68 61 76 69    /* This behavi
1ee0: 6f 72 20 6f 63 63 75 72 73 20 69 66 20 73 71 6c  or occurs if sql
1ef0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
1f00: 29 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75  ) was used to bu
1f10: 69 6c 64 0a 20 20 20 20 2a 2a 20 74 68 65 20 70  ild.    ** the p
1f20: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1f30: 74 2e 20 20 52 65 74 75 72 6e 20 65 72 72 6f 72  t.  Return error
1f40: 20 63 6f 64 65 73 20 64 69 72 65 63 74 6c 79 20   codes directly 
1f50: 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 70 2d  */.    return p-
1f60: 3e 72 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >rc;.  }else{.  
1f70: 20 20 2f 2a 20 54 68 69 73 20 69 73 20 66 6f 72    /* This is for
1f80: 20 6c 65 67 61 63 79 20 73 71 6c 69 74 65 33 5f   legacy sqlite3_
1f90: 70 72 65 70 61 72 65 28 29 20 62 75 69 6c 64 73  prepare() builds
1fa0: 20 61 6e 64 20 77 68 65 6e 20 74 68 65 20 63 6f   and when the co
1fb0: 64 65 0a 20 20 20 20 2a 2a 20 69 73 20 53 51 4c  de.    ** is SQL
1fc0: 49 54 45 5f 52 4f 57 20 6f 72 20 53 51 4c 49 54  ITE_ROW or SQLIT
1fd0: 45 5f 44 4f 4e 45 20 2a 2f 0a 20 20 20 20 72 65  E_DONE */.    re
1fe0: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 7d 0a 0a  turn rc;.  }.}..
1ff0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
2000: 65 20 74 6f 70 2d 6c 65 76 65 6c 20 69 6d 70 6c  e top-level impl
2010: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 73 71  ementation of sq
2020: 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 43  lite3_step().  C
2030: 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 53 74  all.** sqlite3St
2040: 65 70 28 29 20 74 6f 20 64 6f 20 6d 6f 73 74 20  ep() to do most 
2050: 6f 66 20 74 68 65 20 77 6f 72 6b 2e 20 20 49 66  of the work.  If
2060: 20 61 20 73 63 68 65 6d 61 20 65 72 72 6f 72 20   a schema error 
2070: 6f 63 63 75 72 73 2c 0a 2a 2a 20 63 61 6c 6c 20  occurs,.** call 
2080: 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
2090: 28 29 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  () and try again
20a0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
20b0: 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a 69  TE_OMIT_PARSER.i
20c0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  nt sqlite3_step(
20d0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
20e0: 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  tmt){.  return s
20f0: 71 6c 69 74 65 33 53 74 65 70 28 28 56 64 62 65  qlite3Step((Vdbe
2100: 2a 29 70 53 74 6d 74 29 3b 0a 7d 0a 23 65 6c 73  *)pStmt);.}.#els
2110: 65 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74  e.int sqlite3_st
2120: 65 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  ep(sqlite3_stmt 
2130: 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 63  *pStmt){.  int c
2140: 6e 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63  nt = 0;.  int rc
2150: 3b 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56  ;.  Vdbe *v = (V
2160: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 77 68  dbe*)pStmt;.  wh
2170: 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74  ile( (rc = sqlit
2180: 65 33 53 74 65 70 28 76 29 29 3d 3d 53 51 4c 49  e3Step(v))==SQLI
2190: 54 45 5f 53 43 48 45 4d 41 0a 20 20 20 20 20 20  TE_SCHEMA.      
21a0: 20 20 20 26 26 20 63 6e 74 2b 2b 20 3c 20 35 0a     && cnt++ < 5.
21b0: 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69           && sqli
21c0: 74 65 33 52 65 70 72 65 70 61 72 65 28 76 29 20  te3Reprepare(v) 
21d0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  ){.    sqlite3_r
21e0: 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20  eset(pStmt);.   
21f0: 20 76 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   v->expired = 0;
2200: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2210: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
2220: 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 75 73  * Extract the us
2230: 65 72 20 64 61 74 61 20 66 72 6f 6d 20 61 20 73  er data from a s
2240: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
2250: 74 72 75 63 74 75 72 65 20 61 6e 64 20 72 65 74  tructure and ret
2260: 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72  urn a.** pointer
2270: 20 74 6f 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20   to it..*/.void 
2280: 2a 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  *sqlite3_user_da
2290: 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ta(sqlite3_conte
22a0: 78 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74  xt *p){.  assert
22b0: 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20  ( p && p->pFunc 
22c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 70  );.  return p->p
22d0: 46 75 6e 63 2d 3e 70 55 73 65 72 44 61 74 61 3b  Func->pUserData;
22e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
22f0: 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65 20 69  llowing is the i
2300: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
2310: 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
2320: 20 74 68 61 74 20 61 6c 77 61 79 73 0a 2a 2a 20   that always.** 
2330: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
2340: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 61 74  ror message stat
2350: 69 6e 67 20 74 68 61 74 20 74 68 65 20 66 75 6e  ing that the fun
2360: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 69 6e  ction is used in
2370: 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f   the.** wrong co
2380: 6e 74 65 78 74 2e 20 20 54 68 65 20 73 71 6c 69  ntext.  The sqli
2390: 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
23a0: 63 74 69 6f 6e 28 29 20 41 50 49 20 6d 69 67 68  ction() API migh
23b0: 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a 2a 20 53  t construct.** S
23c0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  QL function that
23d0: 20 75 73 65 20 74 68 69 73 20 72 6f 75 74 69 6e   use this routin
23e0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 66 75  e so that the fu
23f0: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 65 78 69  nctions will exi
2400: 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d 65 20 72  st.** for name r
2410: 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20 61 72  esolution but ar
2420: 65 20 61 63 74 75 61 6c 6c 79 20 6f 76 65 72 6c  e actually overl
2430: 6f 61 64 65 64 20 62 79 20 74 68 65 20 78 46 69  oaded by the xFi
2440: 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65  ndFunction.** me
2450: 74 68 6f 64 20 6f 66 20 76 69 72 74 75 61 6c 20  thod of virtual 
2460: 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20  tables..*/.void 
2470: 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
2480: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
2490: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
24a0: 78 74 2c 20 20 2f 2a 20 54 68 65 20 66 75 6e 63  xt,  /* The func
24b0: 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63 6f 6e  tion calling con
24c0: 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 61 72  text */.  int ar
24d0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
24e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24f0: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
2500: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
2510: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2520: 2a 61 72 67 76 20 20 20 20 20 20 20 2f 2a 20 56  *argv       /* V
2530: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 61 72 67  alue of each arg
2540: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f  ument */.){.  co
2550: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20  nst char *zName 
2560: 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46 75 6e 63  = context->pFunc
2570: 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68 61 72 20  ->zName;.  char 
2580: 2a 7a 45 72 72 3b 0a 20 20 7a 45 72 72 20 3d 20  *zErr;.  zErr = 
2590: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 0a  sqlite3MPrintf(.
25a0: 20 20 20 20 20 20 22 75 6e 61 62 6c 65 20 74 6f        "unable to
25b0: 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 25 73   use function %s
25c0: 20 69 6e 20 74 68 65 20 72 65 71 75 65 73 74 65   in the requeste
25d0: 64 20 63 6f 6e 74 65 78 74 22 2c 20 7a 4e 61 6d  d context", zNam
25e0: 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  e);.  sqlite3_re
25f0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
2600: 78 74 2c 20 7a 45 72 72 2c 20 2d 31 29 3b 0a 20  xt, zErr, -1);. 
2610: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72 72   sqliteFree(zErr
2620: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  );.}../*.** Allo
2630: 63 61 74 65 20 6f 72 20 72 65 74 75 72 6e 20 74  cate or return t
2640: 68 65 20 61 67 67 72 65 67 61 74 65 20 63 6f 6e  he aggregate con
2650: 74 65 78 74 20 66 6f 72 20 61 20 75 73 65 72 20  text for a user 
2660: 66 75 6e 63 74 69 6f 6e 2e 20 20 41 20 6e 65 77  function.  A new
2670: 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 61  .** context is a
2680: 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20  llocated on the 
2690: 66 69 72 73 74 20 63 61 6c 6c 2e 20 20 53 75 62  first call.  Sub
26a0: 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 72 65  sequent calls re
26b0: 74 75 72 6e 20 74 68 65 0a 2a 2a 20 73 61 6d 65  turn the.** same
26c0: 20 63 6f 6e 74 65 78 74 20 74 68 61 74 20 77 61   context that wa
26d0: 73 20 72 65 74 75 72 6e 65 64 20 6f 6e 20 70 72  s returned on pr
26e0: 69 6f 72 20 63 61 6c 6c 73 2e 0a 2a 2f 0a 76 6f  ior calls..*/.vo
26f0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 61 67 67 72  id *sqlite3_aggr
2700: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 73 71  egate_context(sq
2710: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2720: 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20 20  , int nByte){.  
2730: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 70 2d 3e 70  Mem *pMem = p->p
2740: 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
2750: 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26 20   && p->pFunc && 
2760: 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70 20  p->pFunc->xStep 
2770: 29 3b 0a 20 20 69 66 28 20 28 70 4d 65 6d 2d 3e  );.  if( (pMem->
2780: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67 29  flags & MEM_Agg)
2790: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 6e  ==0 ){.    if( n
27a0: 42 79 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Byte==0 ){.     
27b0: 20 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 66   assert( pMem->f
27c0: 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
27d0: 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 7a 20  ;.      pMem->z 
27e0: 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
27f0: 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
2800: 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20 20 20  s = MEM_Agg;.   
2810: 20 20 20 70 4d 65 6d 2d 3e 78 44 65 6c 20 3d 20     pMem->xDel = 
2820: 73 71 6c 69 74 65 33 46 72 65 65 58 3b 0a 20 20  sqlite3FreeX;.  
2830: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65 66      pMem->u.pDef
2840: 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20 20   = p->pFunc;.   
2850: 20 20 20 69 66 28 20 6e 42 79 74 65 3c 3d 4e 42     if( nByte<=NB
2860: 46 53 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4d  FS ){.        pM
2870: 65 6d 2d 3e 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 53  em->z = pMem->zS
2880: 68 6f 72 74 3b 0a 20 20 20 20 20 20 20 20 6d 65  hort;.        me
2890: 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c  mset(pMem->z, 0,
28a0: 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 20 20 7d   nByte);.      }
28b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 4d  else{.        pM
28c0: 65 6d 2d 3e 7a 20 3d 20 73 71 6c 69 74 65 4d 61  em->z = sqliteMa
28d0: 6c 6c 6f 63 28 20 6e 42 79 74 65 20 29 3b 0a 20  lloc( nByte );. 
28e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
28f0: 0a 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a  .  return (void*
2900: 29 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a  )pMem->z;.}../*.
2910: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 75  ** Return the au
2920: 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e  xilary data poin
2930: 74 65 72 2c 20 69 66 20 61 6e 79 2c 20 66 6f 72  ter, if any, for
2940: 20 74 68 65 20 69 41 72 67 27 74 68 20 61 72 67   the iArg'th arg
2950: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  ument to.** the 
2960: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
2970: 66 69 6e 65 64 20 62 79 20 70 43 74 78 2e 0a 2a  fined by pCtx..*
2980: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
2990: 67 65 74 5f 61 75 78 64 61 74 61 28 73 71 6c 69  get_auxdata(sqli
29a0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
29b0: 78 2c 20 69 6e 74 20 69 41 72 67 29 7b 0a 20 20  x, int iArg){.  
29c0: 56 64 62 65 46 75 6e 63 20 2a 70 56 64 62 65 46  VdbeFunc *pVdbeF
29d0: 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64 62  unc = pCtx->pVdb
29e0: 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70 56  eFunc;.  if( !pV
29f0: 64 62 65 46 75 6e 63 20 7c 7c 20 69 41 72 67 3e  dbeFunc || iArg>
2a00: 3d 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78  =pVdbeFunc->nAux
2a10: 20 7c 7c 20 69 41 72 67 3c 30 20 29 7b 0a 20 20   || iArg<0 ){.  
2a20: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
2a30: 20 20 72 65 74 75 72 6e 20 70 56 64 62 65 46 75    return pVdbeFu
2a40: 6e 63 2d 3e 61 70 41 75 78 5b 69 41 72 67 5d 2e  nc->apAux[iArg].
2a50: 70 41 75 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  pAux;.}../*.** S
2a60: 65 74 20 74 68 65 20 61 75 78 69 6c 61 72 79 20  et the auxilary 
2a70: 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 6e 64  data pointer and
2a80: 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e   delete function
2a90: 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27 74  , for the iArg't
2aa0: 68 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  h.** argument to
2ab0: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
2ac0: 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70 43  on defined by pC
2ad0: 74 78 2e 20 41 6e 79 20 70 72 65 76 69 6f 75 73  tx. Any previous
2ae0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 64 65 6c   value is.** del
2af0: 65 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  eted by calling 
2b00: 74 68 65 20 64 65 6c 65 74 65 20 66 75 6e 63 74  the delete funct
2b10: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 77 68  ion specified wh
2b20: 65 6e 20 69 74 20 77 61 73 20 73 65 74 2e 0a 2a  en it was set..*
2b30: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
2b40: 65 74 5f 61 75 78 64 61 74 61 28 0a 20 20 73 71  et_auxdata(.  sq
2b50: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2b60: 43 74 78 2c 20 0a 20 20 69 6e 74 20 69 41 72 67  Ctx, .  int iArg
2b70: 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 2c  , .  void *pAux,
2b80: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 65   .  void (*xDele
2b90: 74 65 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  te)(void*).){.  
2ba0: 73 74 72 75 63 74 20 41 75 78 44 61 74 61 20 2a  struct AuxData *
2bb0: 70 41 75 78 44 61 74 61 3b 0a 20 20 56 64 62 65  pAuxData;.  Vdbe
2bc0: 46 75 6e 63 20 2a 70 56 64 62 65 46 75 6e 63 3b  Func *pVdbeFunc;
2bd0: 0a 20 20 69 66 28 20 69 41 72 67 3c 30 20 29 20  .  if( iArg<0 ) 
2be0: 72 65 74 75 72 6e 3b 0a 0a 20 20 70 56 64 62 65  return;..  pVdbe
2bf0: 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64  Func = pCtx->pVd
2c00: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70  beFunc;.  if( !p
2c10: 56 64 62 65 46 75 6e 63 20 7c 7c 20 70 56 64 62  VdbeFunc || pVdb
2c20: 65 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72  eFunc->nAux<=iAr
2c30: 67 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 4d 61  g ){.    int nMa
2c40: 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28 56 64  lloc = sizeof(Vd
2c50: 62 65 46 75 6e 63 29 20 2b 20 73 69 7a 65 6f 66  beFunc) + sizeof
2c60: 28 73 74 72 75 63 74 20 41 75 78 44 61 74 61 29  (struct AuxData)
2c70: 2a 69 41 72 67 3b 0a 20 20 20 20 70 56 64 62 65  *iArg;.    pVdbe
2c80: 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 52 65 61  Func = sqliteRea
2c90: 6c 6c 6f 63 28 70 56 64 62 65 46 75 6e 63 2c 20  lloc(pVdbeFunc, 
2ca0: 6e 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66  nMalloc);.    if
2cb0: 28 20 21 70 56 64 62 65 46 75 6e 63 20 29 20 72  ( !pVdbeFunc ) r
2cc0: 65 74 75 72 6e 3b 0a 20 20 20 20 70 43 74 78 2d  eturn;.    pCtx-
2cd0: 3e 70 56 64 62 65 46 75 6e 63 20 3d 20 70 56 64  >pVdbeFunc = pVd
2ce0: 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d 65 6d 73  beFunc;.    mems
2cf0: 65 74 28 26 70 56 64 62 65 46 75 6e 63 2d 3e 61  et(&pVdbeFunc->a
2d00: 70 41 75 78 5b 70 56 64 62 65 46 75 6e 63 2d 3e  pAux[pVdbeFunc->
2d10: 6e 41 75 78 5d 2c 20 30 2c 20 0a 20 20 20 20 20  nAux], 0, .     
2d20: 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 73          sizeof(s
2d30: 74 72 75 63 74 20 41 75 78 44 61 74 61 29 2a 28  truct AuxData)*(
2d40: 69 41 72 67 2b 31 2d 70 56 64 62 65 46 75 6e 63  iArg+1-pVdbeFunc
2d50: 2d 3e 6e 41 75 78 29 29 3b 0a 20 20 20 20 70 56  ->nAux));.    pV
2d60: 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3d 20  dbeFunc->nAux = 
2d70: 69 41 72 67 2b 31 3b 0a 20 20 20 20 70 56 64 62  iArg+1;.    pVdb
2d80: 65 46 75 6e 63 2d 3e 70 46 75 6e 63 20 3d 20 70  eFunc->pFunc = p
2d90: 43 74 78 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a  Ctx->pFunc;.  }.
2da0: 0a 20 20 70 41 75 78 44 61 74 61 20 3d 20 26 70  .  pAuxData = &p
2db0: 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b  VdbeFunc->apAux[
2dc0: 69 41 72 67 5d 3b 0a 20 20 69 66 28 20 70 41 75  iArg];.  if( pAu
2dd0: 78 44 61 74 61 2d 3e 70 41 75 78 20 26 26 20 70  xData->pAux && p
2de0: 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65  AuxData->xDelete
2df0: 20 29 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61   ){.    pAuxData
2e00: 2d 3e 78 44 65 6c 65 74 65 28 70 41 75 78 44 61  ->xDelete(pAuxDa
2e10: 74 61 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 20  ta->pAux);.  }. 
2e20: 20 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20   pAuxData->pAux 
2e30: 3d 20 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61  = pAux;.  pAuxDa
2e40: 74 61 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44  ta->xDelete = xD
2e50: 65 6c 65 74 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  elete;.}../*.** 
2e60: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
2e70: 72 20 6f 66 20 74 69 6d 65 73 20 74 68 65 20 53  r of times the S
2e80: 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 6f 66 20  tep function of 
2e90: 61 20 61 67 67 72 65 67 61 74 65 20 68 61 73 20  a aggregate has 
2ea0: 62 65 65 6e 20 0a 2a 2a 20 63 61 6c 6c 65 64 2e  been .** called.
2eb0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
2ec0: 74 69 6f 6e 20 69 73 20 64 65 70 72 65 63 61 74  tion is deprecat
2ed0: 65 64 2e 20 20 44 6f 20 6e 6f 74 20 75 73 65 20  ed.  Do not use 
2ee0: 69 74 20 66 6f 72 20 6e 65 77 20 63 6f 64 65 2e  it for new code.
2ef0: 20 20 49 74 20 69 73 0a 2a 2a 20 70 72 6f 76 69    It is.** provi
2f00: 64 65 20 6f 6e 6c 79 20 74 6f 20 61 76 6f 69 64  de only to avoid
2f10: 20 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79   breaking legacy
2f20: 20 63 6f 64 65 2e 20 20 4e 65 77 20 61 67 67 72   code.  New aggr
2f30: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 2a  egate function.*
2f40: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
2f50: 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 74 68  s should keep th
2f60: 65 69 72 20 6f 77 6e 20 63 6f 75 6e 74 73 20 77  eir own counts w
2f70: 69 74 68 69 6e 20 74 68 65 69 72 20 61 67 67 72  ithin their aggr
2f80: 65 67 61 74 65 0a 2a 2a 20 63 6f 6e 74 65 78 74  egate.** context
2f90: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2fa0: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74  _aggregate_count
2fb0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2fc0: 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20   *p){.  assert( 
2fd0: 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26  p && p->pFunc &&
2fe0: 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70   p->pFunc->xStep
2ff0: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e   );.  return p->
3000: 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a  pMem->n;.}../*.*
3010: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
3020: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
3030: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
3040: 20 66 6f 72 20 74 68 65 20 73 74 61 74 65 6d 65   for the stateme
3050: 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74  nt pStmt..*/.int
3060: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3070: 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74  count(sqlite3_st
3080: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64  mt *pStmt){.  Vd
3090: 62 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20  be *pVm = (Vdbe 
30a0: 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72  *)pStmt;.  retur
30b0: 6e 20 70 56 6d 20 3f 20 70 56 6d 2d 3e 6e 52 65  n pVm ? pVm->nRe
30c0: 73 43 6f 6c 75 6d 6e 20 3a 20 30 3b 0a 7d 0a 0a  sColumn : 0;.}..
30d0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
30e0: 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
30f0: 73 20 61 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d  s available from
3100: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
3110: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 75 72 72 65   of the.** curre
3120: 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
3130: 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a  tatement pStmt..
3140: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 64  */.int sqlite3_d
3150: 61 74 61 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65  ata_count(sqlite
3160: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
3170: 20 20 56 64 62 65 20 2a 70 56 6d 20 3d 20 28 56    Vdbe *pVm = (V
3180: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69  dbe *)pStmt;.  i
3190: 66 28 20 70 56 6d 3d 3d 30 20 7c 7c 20 21 70 56  f( pVm==0 || !pV
31a0: 6d 2d 3e 72 65 73 4f 6e 53 74 61 63 6b 20 29 20  m->resOnStack ) 
31b0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75  return 0;.  retu
31c0: 72 6e 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75  rn pVm->nResColu
31d0: 6d 6e 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68  mn;.}.../*.** Ch
31e0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 63 6f  eck to see if co
31f0: 6c 75 6d 6e 20 69 43 6f 6c 20 6f 66 20 74 68 65  lumn iCol of the
3200: 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74   given statement
3210: 20 69 73 20 76 61 6c 69 64 2e 20 20 49 66 0a 2a   is valid.  If.*
3220: 2a 20 69 74 20 69 73 2c 20 72 65 74 75 72 6e 20  * it is, return 
3230: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
3240: 20 4d 65 6d 20 66 6f 72 20 74 68 65 20 76 61 6c   Mem for the val
3250: 75 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d  ue of that colum
3260: 6e 2e 0a 2a 2a 20 49 66 20 69 43 6f 6c 20 69 73  n..** If iCol is
3270: 20 6e 6f 74 20 76 61 6c 69 64 2c 20 72 65 74 75   not valid, retu
3280: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
3290: 61 20 4d 65 6d 20 77 68 69 63 68 20 68 61 73 20  a Mem which has 
32a0: 61 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 4e 55  a value.** of NU
32b0: 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 4d 65  LL..*/.static Me
32c0: 6d 20 2a 63 6f 6c 75 6d 6e 4d 65 6d 28 73 71 6c  m *columnMem(sql
32d0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
32e0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65  , int i){.  Vdbe
32f0: 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29   *pVm = (Vdbe *)
3300: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 61 6c  pStmt;.  int val
3310: 73 20 3d 20 73 71 6c 69 74 65 33 5f 64 61 74 61  s = sqlite3_data
3320: 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20  _count(pStmt);. 
3330: 20 69 66 28 20 69 3e 3d 76 61 6c 73 20 7c 7c 20   if( i>=vals || 
3340: 69 3c 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  i<0 ){.    stati
3350: 63 20 63 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c  c const Mem null
3360: 4d 65 6d 20 3d 20 7b 7b 30 7d 2c 20 30 2e 30 2c  Mem = {{0}, 0.0,
3370: 20 22 22 2c 20 30 2c 20 4d 45 4d 5f 4e 75 6c 6c   "", 0, MEM_Null
3380: 2c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 20 7d 3b  , SQLITE_NULL };
3390: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
33a0: 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49 54  r(pVm->db, SQLIT
33b0: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
33c0: 20 72 65 74 75 72 6e 20 28 4d 65 6d 2a 29 26 6e   return (Mem*)&n
33d0: 75 6c 6c 4d 65 6d 3b 0a 20 20 7d 0a 20 20 72 65  ullMem;.  }.  re
33e0: 74 75 72 6e 20 26 70 56 6d 2d 3e 70 54 6f 73 5b  turn &pVm->pTos[
33f0: 28 31 2d 76 61 6c 73 29 2b 69 5d 3b 0a 7d 0a 0a  (1-vals)+i];.}..
3400: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
3410: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 61 66  ion is called af
3420: 74 65 72 20 69 6e 76 6f 6b 69 6e 67 20 61 6e 20  ter invoking an 
3430: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 58 58  sqlite3_value_XX
3440: 58 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 61 20  X function on a 
3450: 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  .** column value
3460: 20 28 69 2e 65 2e 20 61 20 76 61 6c 75 65 20 72   (i.e. a value r
3470: 65 74 75 72 6e 65 64 20 62 79 20 65 76 61 6c 75  eturned by evalu
3480: 61 74 69 6e 67 20 61 6e 20 53 51 4c 20 65 78 70  ating an SQL exp
3490: 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 0a 2a  ression in the.*
34a0: 2a 20 73 65 6c 65 63 74 20 6c 69 73 74 20 6f 66  * select list of
34b0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
34c0: 65 6e 74 29 20 74 68 61 74 20 6d 61 79 20 63 61  ent) that may ca
34d0: 75 73 65 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66  use a malloc() f
34e0: 61 69 6c 75 72 65 2e 20 49 66 20 0a 2a 2a 20 6d  ailure. If .** m
34f0: 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c  alloc() has fail
3500: 65 64 2c 20 74 68 65 20 74 68 72 65 61 64 73 20  ed, the threads 
3510: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61  mallocFailed fla
3520: 67 20 69 73 20 63 6c 65 61 72 65 64 20 61 6e 64  g is cleared and
3530: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 63   the result.** c
3540: 6f 64 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ode of statement
3550: 20 70 53 74 6d 74 20 73 65 74 20 74 6f 20 53 51   pStmt set to SQ
3560: 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a 2a 2a 0a 2a  LITE_NOMEM..**.*
3570: 2a 20 53 70 65 63 69 66 69 63 6c 79 2c 20 74 68  * Specificly, th
3580: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  is is called fro
3590: 6d 20 77 69 74 68 69 6e 3a 0a 2a 2a 0a 2a 2a 20  m within:.**.** 
35a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
35b0: 6d 6e 5f 69 6e 74 28 29 0a 2a 2a 20 20 20 20 20  mn_int().**     
35c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
35d0: 6e 74 36 34 28 29 0a 2a 2a 20 20 20 20 20 73 71  nt64().**     sq
35e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
35f0: 74 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  t().**     sqlit
3600: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
3610: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
3620: 33 5f 63 6f 6c 75 6d 6e 5f 72 65 61 6c 28 29 0a  3_column_real().
3630: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
3640: 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 29 0a 2a 2a  olumn_bytes().**
3650: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
3660: 75 6d 6e 5f 62 79 74 65 73 31 36 28 29 0a 2a 2a  umn_bytes16().**
3670: 0a 2a 2a 20 42 75 74 20 6e 6f 74 20 66 6f 72 20  .** But not for 
3680: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
3690: 6c 6f 62 28 29 2c 20 77 68 69 63 68 20 6e 65 76  lob(), which nev
36a0: 65 72 20 63 61 6c 6c 73 20 6d 61 6c 6c 6f 63 28  er calls malloc(
36b0: 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  )..*/.static voi
36c0: 64 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61  d columnMallocFa
36d0: 69 6c 75 72 65 28 73 71 6c 69 74 65 33 5f 73 74  ilure(sqlite3_st
36e0: 6d 74 20 2a 70 53 74 6d 74 29 0a 7b 0a 20 20 2f  mt *pStmt).{.  /
36f0: 2a 20 49 66 20 6d 61 6c 6c 6f 63 28 29 20 66 61  * If malloc() fa
3700: 69 6c 65 64 20 64 75 72 69 6e 67 20 61 6e 20 65  iled during an e
3710: 6e 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69  ncoding conversi
3720: 6f 6e 20 77 69 74 68 69 6e 20 61 6e 0a 20 20 2a  on within an.  *
3730: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
3740: 5f 58 58 58 20 41 50 49 2c 20 74 68 65 6e 20 73  _XXX API, then s
3750: 65 74 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  et the return co
3760: 64 65 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d  de of the statem
3770: 65 6e 74 20 74 6f 0a 20 20 2a 2a 20 53 51 4c 49  ent to.  ** SQLI
3780: 54 45 5f 4e 4f 4d 45 4d 2e 20 54 68 65 20 6e 65  TE_NOMEM. The ne
3790: 78 74 20 63 61 6c 6c 20 74 6f 20 5f 73 74 65 70  xt call to _step
37a0: 28 29 20 28 69 66 20 61 6e 79 29 20 77 69 6c 6c  () (if any) will
37b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
37c0: 52 52 4f 52 0a 20 20 2a 2a 20 61 6e 64 20 5f 66  RROR.  ** and _f
37d0: 69 6e 61 6c 69 7a 65 28 29 20 77 69 6c 6c 20 72  inalize() will r
37e0: 65 74 75 72 6e 20 4e 4f 4d 45 4d 2e 0a 20 20 2a  eturn NOMEM..  *
37f0: 2f 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  /.  Vdbe *p = (V
3800: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 70  dbe *)pStmt;.  p
3810: 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70  ->rc = sqlite3Ap
3820: 69 45 78 69 74 28 30 2c 20 70 2d 3e 72 63 29 3b  iExit(0, p->rc);
3830: 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
3840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3850: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
3860: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
3870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3880: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
3890: 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ing routines are
38a0: 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
38b0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20  elements of the 
38c0: 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a 20 69  current row.** i
38d0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  n the result set
38e0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20  ..*/.const void 
38f0: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
3900: 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73 74 6d  blob(sqlite3_stm
3910: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
3920: 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  {.  const void *
3930: 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73 71 6c  val;.  val = sql
3940: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
3950: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
3960: 2c 69 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  ,i) );.  return 
3970: 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  val;.}.int sqlit
3980: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
3990: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
39a0: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69  tmt, int i){.  i
39b0: 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  nt val = sqlite3
39c0: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 20 63 6f  _value_bytes( co
39d0: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
39e0: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
39f0: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
3a00: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
3a10: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  }.int sqlite3_co
3a20: 6c 75 6d 6e 5f 62 79 74 65 73 31 36 28 73 71 6c  lumn_bytes16(sql
3a30: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
3a40: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
3a50: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
3a60: 6c 75 65 5f 62 79 74 65 73 31 36 28 20 63 6f 6c  lue_bytes16( col
3a70: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
3a80: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
3a90: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
3aa0: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
3ab0: 0a 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f  .double sqlite3_
3ac0: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71  column_double(sq
3ad0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
3ae0: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75  t, int i){.  dou
3af0: 62 6c 65 20 76 61 6c 20 3d 20 73 71 6c 69 74 65  ble val = sqlite
3b00: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20  3_value_double( 
3b10: 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c  columnMem(pStmt,
3b20: 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61  i) );.  columnMa
3b30: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
3b40: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
3b50: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
3b60: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74  column_int(sqlit
3b70: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
3b80: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61  int i){.  int va
3b90: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
3ba0: 65 5f 69 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d  e_int( columnMem
3bb0: 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63  (pStmt,i) );.  c
3bc0: 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75  olumnMallocFailu
3bd0: 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74  re(pStmt);.  ret
3be0: 75 72 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74  urn val;.}.sqlit
3bf0: 65 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f  e_int64 sqlite3_
3c00: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c  column_int64(sql
3c10: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
3c20: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69  , int i){.  sqli
3c30: 74 65 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 73  te_int64 val = s
3c40: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
3c50: 36 34 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  64( columnMem(pS
3c60: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
3c70: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
3c80: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
3c90: 20 76 61 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e   val;.}.const un
3ca0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c  signed char *sql
3cb0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
3cc0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
3cd0: 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20  Stmt, int i){.  
3ce0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
3cf0: 68 61 72 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  har *val = sqlit
3d00: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 20 63  e3_value_text( c
3d10: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69  olumnMem(pStmt,i
3d20: 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c  ) );.  columnMal
3d30: 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74  locFailure(pStmt
3d40: 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b  );.  return val;
3d50: 0a 7d 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .}.sqlite3_value
3d60: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
3d70: 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73  _value(sqlite3_s
3d80: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
3d90: 69 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  i){.  return col
3da0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 20 69 29  umnMem(pStmt, i)
3db0: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
3dc0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
3dd0: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
3de0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
3df0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
3e00: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63  tmt, int i){.  c
3e10: 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 20 3d  onst void *val =
3e20: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
3e30: 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d 65 6d  ext16( columnMem
3e40: 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63  (pStmt,i) );.  c
3e50: 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75  olumnMallocFailu
3e60: 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74  re(pStmt);.  ret
3e70: 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e 64 69  urn val;.}.#endi
3e80: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
3e90: 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71  _UTF16 */.int sq
3ea0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
3eb0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
3ec0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
3ed0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
3ee0: 76 61 6c 75 65 5f 74 79 70 65 28 20 63 6f 6c 75  value_type( colu
3ef0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
3f00: 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 66 6f 6c 6c  ;.}../* The foll
3f10: 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69  owing function i
3f20: 73 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 61  s experimental a
3f30: 6e 64 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68  nd subject to ch
3f40: 61 6e 67 65 20 6f 72 0a 2a 2a 20 72 65 6d 6f 76  ange or.** remov
3f50: 61 6c 20 2a 2f 0a 2f 2a 69 6e 74 20 73 71 6c 69  al */./*int sqli
3f60: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 75 6d 65 72  te3_column_numer
3f70: 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f  ic_type(sqlite3_
3f80: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
3f90: 20 69 29 7b 0a 2a 2a 20 20 72 65 74 75 72 6e 20   i){.**  return 
3fa0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75  sqlite3_value_nu
3fb0: 6d 65 72 69 63 5f 74 79 70 65 28 20 63 6f 6c 75  meric_type( colu
3fc0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
3fd0: 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ;.**}.*/../*.** 
3fe0: 43 6f 6e 76 65 72 74 20 74 68 65 20 4e 2d 74 68  Convert the N-th
3ff0: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 70 53 74 6d   element of pStm
4000: 74 2d 3e 70 43 6f 6c 4e 61 6d 65 5b 5d 20 69 6e  t->pColName[] in
4010: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
4020: 67 0a 2a 2a 20 78 46 75 6e 63 28 29 20 74 68 65  g.** xFunc() the
4030: 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20 73 74  n return that st
4040: 72 69 6e 67 2e 20 20 49 66 20 4e 20 69 73 20 6f  ring.  If N is o
4050: 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72 65 74  ut of range, ret
4060: 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  urn 0..**.** The
4070: 72 65 20 61 72 65 20 75 70 20 74 6f 20 35 20 6e  re are up to 5 n
4080: 61 6d 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  ames for each co
4090: 6c 75 6d 6e 2e 20 20 75 73 65 54 79 70 65 20 64  lumn.  useType d
40a0: 65 74 65 72 6d 69 6e 65 73 20 77 68 69 63 68 0a  etermines which.
40b0: 2a 2a 20 6e 61 6d 65 20 69 73 20 72 65 74 75 72  ** name is retur
40c0: 6e 65 64 2e 20 20 48 65 72 65 20 61 72 65 20 74  ned.  Here are t
40d0: 68 65 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  he names:.**.** 
40e0: 20 20 20 30 20 20 20 20 20 20 54 68 65 20 63 6f     0      The co
40f0: 6c 75 6d 6e 20 6e 61 6d 65 20 61 73 20 69 74 20  lumn name as it 
4100: 73 68 6f 75 6c 64 20 62 65 20 64 69 73 70 6c 61  should be displa
4110: 79 65 64 20 66 6f 72 20 6f 75 74 70 75 74 0a 2a  yed for output.*
4120: 2a 20 20 20 20 31 20 20 20 20 20 20 54 68 65 20  *    1      The 
4130: 64 61 74 61 74 79 70 65 20 6e 61 6d 65 20 66 6f  datatype name fo
4140: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  r the column.** 
4150: 20 20 20 32 20 20 20 20 20 20 54 68 65 20 6e 61     2      The na
4160: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
4170: 73 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  se that the colu
4180: 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a  mn derives from.
4190: 2a 2a 20 20 20 20 33 20 20 20 20 20 20 54 68 65  **    3      The
41a0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
41b0: 6c 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  le that the colu
41c0: 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a  mn derives from.
41d0: 2a 2a 20 20 20 20 34 20 20 20 20 20 20 54 68 65  **    4      The
41e0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
41f0: 6c 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 74  le column that t
4200: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
4210: 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a 2a 2a   derives from.**
4220: 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c  .** If the resul
4230: 74 20 69 73 20 6e 6f 74 20 61 20 73 69 6d 70 6c  t is not a simpl
4240: 65 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  e column referen
4250: 63 65 20 28 69 66 20 69 74 20 69 73 20 61 6e 20  ce (if it is an 
4260: 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 6f 72  expression.** or
4270: 20 61 20 63 6f 6e 73 74 61 6e 74 29 20 74 68 65   a constant) the
4280: 6e 20 75 73 65 54 79 70 65 73 20 32 2c 20 33 2c  n useTypes 2, 3,
4290: 20 61 6e 64 20 34 20 72 65 74 75 72 6e 20 4e 55   and 4 return NU
42a0: 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  LL..*/.static co
42b0: 6e 73 74 20 76 6f 69 64 20 2a 63 6f 6c 75 6d 6e  nst void *column
42c0: 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  Name(.  sqlite3_
42d0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 0a 20 20 69  stmt *pStmt,.  i
42e0: 6e 74 20 4e 2c 0a 20 20 63 6f 6e 73 74 20 76 6f  nt N,.  const vo
42f0: 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 4d 65 6d  id *(*xFunc)(Mem
4300: 2a 29 2c 0a 20 20 69 6e 74 20 75 73 65 54 79 70  *),.  int useTyp
4310: 65 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  e.){.  const voi
4320: 64 20 2a 72 65 74 3b 0a 20 20 56 64 62 65 20 2a  d *ret;.  Vdbe *
4330: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
4340: 74 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c  t;.  int n = sql
4350: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
4360: 74 28 70 53 74 6d 74 29 3b 0a 0a 20 20 69 66 28  t(pStmt);..  if(
4370: 20 70 3d 3d 30 20 7c 7c 20 4e 3e 3d 6e 20 7c 7c   p==0 || N>=n ||
4380: 20 4e 3c 30 20 29 7b 0a 20 20 20 20 72 65 74 75   N<0 ){.    retu
4390: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 4e 20 2b 3d  rn 0;.  }.  N +=
43a0: 20 75 73 65 54 79 70 65 2a 6e 3b 0a 20 20 72 65   useType*n;.  re
43b0: 74 20 3d 20 78 46 75 6e 63 28 26 70 2d 3e 61 43  t = xFunc(&p->aC
43c0: 6f 6c 4e 61 6d 65 5b 4e 5d 29 3b 0a 0a 20 20 2f  olName[N]);..  /
43d0: 2a 20 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68  * A malloc may h
43e0: 61 76 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64  ave failed insid
43f0: 65 20 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29  e of the xFunc()
4400: 20 63 61 6c 6c 2e 20 49 66 20 74 68 69 73 20 69   call. If this i
4410: 73 20 74 68 65 20 63 61 73 65 2c 0a 20 20 2a 2a  s the case,.  **
4420: 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c 6c 6f   clear the mallo
4430: 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61 6e 64  cFailed flag and
4440: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20 20   return NULL..  
4450: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 41 70 69 45  */.  sqlite3ApiE
4460: 78 69 74 28 30 2c 20 30 29 3b 0a 20 20 72 65 74  xit(0, 0);.  ret
4470: 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn ret;.}../*.*
4480: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
4490: 65 20 6f 66 20 74 68 65 20 4e 74 68 20 63 6f 6c  e of the Nth col
44a0: 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
44b0: 74 20 73 65 74 20 72 65 74 75 72 6e 65 64 20 62  t set returned b
44c0: 79 20 53 51 4c 0a 2a 2a 20 73 74 61 74 65 6d 65  y SQL.** stateme
44d0: 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e  nt pStmt..*/.con
44e0: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
44f0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c  _column_name(sql
4500: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
4510: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
4520: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
4530: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
4540: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
4550: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
4560: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
4570: 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  _NAME);.}.#ifnde
4580: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
4590: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
45a0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
45b0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
45c0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
45d0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
45e0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
45f0: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
4600: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
4610: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
4620: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45  16, COLNAME_NAME
4630: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
4640: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f  ** Return the co
4650: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
4660: 20 74 79 70 65 20 28 69 66 20 61 70 70 6c 69 63   type (if applic
4670: 61 62 6c 65 29 20 6f 66 20 74 68 65 20 27 69 27  able) of the 'i'
4680: 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6f 66 20  th column.** of 
4690: 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
46a0: 66 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  f SQL statement 
46b0: 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  pStmt..*/.const 
46c0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f  char *sqlite3_co
46d0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 71  lumn_decltype(sq
46e0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
46f0: 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74  t, int N){.  ret
4700: 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a  urn columnName(.
4710: 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20        pStmt, N, 
4720: 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28  (const void*(*)(
4730: 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61  Mem*))sqlite3_va
4740: 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d  lue_text, COLNAM
4750: 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a 23  E_DECLTYPE);.}.#
4760: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4770: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
4780: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
4790: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 28 73  umn_decltype16(s
47a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
47b0: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
47c0: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
47d0: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
47e0: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
47f0: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
4800: 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c  alue_text16, COL
4810: 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a  NAME_DECLTYPE);.
4820: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4830: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
4840: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
4850: 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
4860: 54 41 44 41 54 41 0a 2f 2a 0a 2a 2a 20 52 65 74  TADATA./*.** Ret
4870: 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
4880: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72 6f  the database fro
4890: 6d 20 77 68 69 63 68 20 61 20 72 65 73 75 6c 74  m which a result
48a0: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e   column derives.
48b0: 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  .** NULL is retu
48c0: 72 6e 65 64 20 69 66 20 74 68 65 20 72 65 73 75  rned if the resu
48d0: 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  lt column is an 
48e0: 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f  expression or co
48f0: 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79  nstant or.** any
4900: 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63 68  thing else which
4910: 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69   is not an unabi
4920: 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65 20  guous reference 
4930: 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  to a database co
4940: 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  lumn..*/.const c
4950: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  har *sqlite3_col
4960: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
4970: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
4980: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
4990: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
49a0: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
49b0: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
49c0: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
49d0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f  3_value_text, CO
49e0: 4c 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29 3b  LNAME_DATABASE);
49f0: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
4a00: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
4a10: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
4a20: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
4a30: 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f  _name16(sqlite3_
4a40: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
4a50: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f   N){.  return co
4a60: 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20  lumnName(.      
4a70: 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74  pStmt, N, (const
4a80: 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29   void*(*)(Mem*))
4a90: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
4aa0: 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41  xt16, COLNAME_DA
4ab0: 54 41 42 41 53 45 29 3b 0a 7d 0a 23 65 6e 64 69  TABASE);.}.#endi
4ac0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
4ad0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _UTF16 */../*.**
4ae0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
4af0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 66 72   of the table fr
4b00: 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73 75 6c  om which a resul
4b10: 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  t column derives
4b20: 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74  ..** NULL is ret
4b30: 75 72 6e 65 64 20 69 66 20 74 68 65 20 72 65 73  urned if the res
4b40: 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  ult column is an
4b50: 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63   expression or c
4b60: 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e  onstant or.** an
4b70: 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63  ything else whic
4b80: 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 62  h is not an unab
4b90: 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65  iguous reference
4ba0: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63   to a database c
4bb0: 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  olumn..*/.const 
4bc0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f  char *sqlite3_co
4bd0: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28  lumn_table_name(
4be0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
4bf0: 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72  tmt, int N){.  r
4c00: 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65  eturn columnName
4c10: 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e  (.      pStmt, N
4c20: 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a  , (const void*(*
4c30: 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f  )(Mem*))sqlite3_
4c40: 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e  value_text, COLN
4c50: 41 4d 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 69  AME_TABLE);.}.#i
4c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4c70: 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f  T_UTF16.const vo
4c80: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
4c90: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28  mn_table_name16(
4ca0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
4cb0: 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72  tmt, int N){.  r
4cc0: 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65  eturn columnName
4cd0: 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e  (.      pStmt, N
4ce0: 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a  , (const void*(*
4cf0: 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f  )(Mem*))sqlite3_
4d00: 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f  value_text16, CO
4d10: 4c 4e 41 4d 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a  LNAME_TABLE);.}.
4d20: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
4d30: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
4d40: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4d50: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
4d60: 6c 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d 20 77  le column from w
4d70: 68 69 63 68 20 61 20 72 65 73 75 6c 74 20 63 6f  hich a result co
4d80: 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a  lumn derives..**
4d90: 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65   NULL is returne
4da0: 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
4db0: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
4dc0: 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74  ression or const
4dd0: 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69  ant or.** anythi
4de0: 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20 69 73  ng else which is
4df0: 20 6e 6f 74 20 61 6e 20 75 6e 61 62 69 67 75 6f   not an unabiguo
4e00: 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  us reference to 
4e10: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  a database colum
4e20: 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
4e30: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
4e40: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 71 6c  _origin_name(sql
4e50: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
4e60: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
4e70: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
4e80: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
4e90: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
4ea0: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
4eb0: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
4ec0: 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 69 66 6e  _COLUMN);.}.#ifn
4ed0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4ee0: 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64  UTF16.const void
4ef0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
4f00: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 28 73  _origin_name16(s
4f10: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
4f20: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
4f30: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
4f40: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
4f50: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
4f60: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
4f70: 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c  alue_text16, COL
4f80: 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a  NAME_COLUMN);.}.
4f90: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
4fa0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23  _OMIT_UTF16 */.#
4fb0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4fc0: 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
4fd0: 54 41 44 41 54 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a  TADATA */.../***
4fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c  ************ sql
5000: 69 74 65 33 5f 62 69 6e 64 5f 20 20 2a 2a 2a 2a  ite3_bind_  ****
5010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5020: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52  *******.** .** R
5030: 6f 75 74 69 6e 65 73 20 75 73 65 64 20 74 6f 20  outines used to 
5040: 61 74 74 61 63 68 20 76 61 6c 75 65 73 20 74 6f  attach values to
5050: 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20 61 20   wildcards in a 
5060: 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61  compiled SQL sta
5070: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  tement..*/./*.**
5080: 20 55 6e 62 69 6e 64 20 74 68 65 20 76 61 6c 75   Unbind the valu
5090: 65 20 62 6f 75 6e 64 20 74 6f 20 76 61 72 69 61  e bound to varia
50a0: 62 6c 65 20 69 20 69 6e 20 76 69 72 74 75 61 6c  ble i in virtual
50b0: 20 6d 61 63 68 69 6e 65 20 70 2e 20 54 68 69 73   machine p. This
50c0: 20 69 73 20 74 68 65 20 0a 2a 2a 20 74 68 65 20   is the .** the 
50d0: 73 61 6d 65 20 61 73 20 62 69 6e 64 69 6e 67 20  same as binding 
50e0: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 74 6f 20  a NULL value to 
50f0: 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 49 66 20 74  the column. If t
5100: 68 65 20 22 69 22 20 70 61 72 61 6d 65 74 65 72  he "i" parameter
5110: 20 69 73 0a 2a 2a 20 6f 75 74 20 6f 66 20 72 61   is.** out of ra
5120: 6e 67 65 2c 20 74 68 65 6e 20 53 51 4c 49 54 45  nge, then SQLITE
5130: 5f 52 41 4e 47 45 20 69 73 20 72 65 74 75 72 6e  _RANGE is return
5140: 65 64 2e 20 4f 74 68 65 77 69 73 65 20 53 51 4c  ed. Othewise SQL
5150: 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a 20 54 68  ITE_OK..**.** Th
5160: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 73 74 6f  e error code sto
5170: 72 65 64 20 69 6e 20 64 61 74 61 62 61 73 65 20  red in database 
5180: 70 2d 3e 64 62 20 69 73 20 6f 76 65 72 77 72 69  p->db is overwri
5190: 74 74 65 6e 20 77 69 74 68 20 74 68 65 20 72 65  tten with the re
51a0: 74 75 72 6e 0a 2a 2a 20 76 61 6c 75 65 20 69 6e  turn.** value in
51b0: 20 61 6e 79 20 63 61 73 65 2e 0a 2a 2f 0a 73 74   any case..*/.st
51c0: 61 74 69 63 20 69 6e 74 20 76 64 62 65 55 6e 62  atic int vdbeUnb
51d0: 69 6e 64 28 56 64 62 65 20 2a 70 2c 20 69 6e 74  ind(Vdbe *p, int
51e0: 20 69 29 7b 0a 20 20 4d 65 6d 20 2a 70 56 61 72   i){.  Mem *pVar
51f0: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c 20  ;.  if( p==0 || 
5200: 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d  p->magic!=VDBE_M
5210: 41 47 49 43 5f 52 55 4e 20 7c 7c 20 70 2d 3e 70  AGIC_RUN || p->p
5220: 63 3e 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  c>=0 ){.    if( 
5230: 70 20 29 20 73 71 6c 69 74 65 33 45 72 72 6f 72  p ) sqlite3Error
5240: 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4d  (p->db, SQLITE_M
5250: 49 53 55 53 45 2c 20 30 29 3b 0a 20 20 20 20 72  ISUSE, 0);.    r
5260: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
5270: 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  USE;.  }.  if( i
5280: 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61 72 20  <1 || i>p->nVar 
5290: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72  ){.    sqlite3Er
52a0: 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54  ror(p->db, SQLIT
52b0: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
52c0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   return SQLITE_R
52d0: 41 4e 47 45 3b 0a 20 20 7d 0a 20 20 69 2d 2d 3b  ANGE;.  }.  i--;
52e0: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
52f0: 61 72 5b 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ar[i];.  sqlite3
5300: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
5310: 56 61 72 29 3b 0a 20 20 70 56 61 72 2d 3e 66 6c  Var);.  pVar->fl
5320: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
5330: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70    sqlite3Error(p
5340: 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c  ->db, SQLITE_OK,
5350: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51   0);.  return SQ
5360: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
5370: 2a 20 42 69 6e 64 20 61 20 74 65 78 74 20 6f 72  * Bind a text or
5380: 20 42 4c 4f 42 20 76 61 6c 75 65 2e 0a 2a 2f 0a   BLOB value..*/.
5390: 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 64 54  static int bindT
53a0: 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  ext(.  sqlite3_s
53b0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69  tmt *pStmt, .  i
53c0: 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76  nt i, .  const v
53d0: 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69  oid *zData, .  i
53e0: 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69  nt nData, .  voi
53f0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
5400: 2c 0a 20 20 69 6e 74 20 65 6e 63 6f 64 69 6e 67  ,.  int encoding
5410: 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  .){.  Vdbe *p = 
5420: 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20  (Vdbe *)pStmt;. 
5430: 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e   Mem *pVar;.  in
5440: 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 76 64  t rc;..  rc = vd
5450: 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a  beUnbind(p, i);.
5460: 20 20 69 66 28 20 72 63 20 7c 7c 20 7a 44 61 74    if( rc || zDat
5470: 61 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  a==0 ){.    retu
5480: 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 70 56 61  rn rc;.  }.  pVa
5490: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 2d 31  r = &p->aVar[i-1
54a0: 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ];.  rc = sqlite
54b0: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
54c0: 56 61 72 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74  Var, zData, nDat
54d0: 61 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 78 44 65  a, encoding, xDe
54e0: 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  l);.  if( rc==SQ
54f0: 4c 49 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f 64  LITE_OK && encod
5500: 69 6e 67 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  ing!=0 ){.    rc
5510: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
5520: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 56 61  angeEncoding(pVa
5530: 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a  r, ENC(p->db));.
5540: 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 45 72    }..  sqlite3Er
5550: 72 6f 72 28 28 28 56 64 62 65 20 2a 29 70 53 74  ror(((Vdbe *)pSt
5560: 6d 74 29 2d 3e 64 62 2c 20 72 63 2c 20 30 29 3b  mt)->db, rc, 0);
5570: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
5580: 33 41 70 69 45 78 69 74 28 28 28 56 64 62 65 20  3ApiExit(((Vdbe 
5590: 2a 29 70 53 74 6d 74 29 2d 3e 64 62 2c 20 72 63  *)pStmt)->db, rc
55a0: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e  );.}.../*.** Bin
55b0: 64 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 74  d a blob value t
55c0: 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  o an SQL stateme
55d0: 6e 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a  nt variable..*/.
55e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
55f0: 5f 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33  _blob(.  sqlite3
5600: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20  _stmt *pStmt, . 
5610: 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74   int i, .  const
5620: 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20   void *zData, . 
5630: 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76   int nData, .  v
5640: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
5650: 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62  *).){.  return b
5660: 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69  indText(pStmt, i
5670: 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20  , zData, nData, 
5680: 78 44 65 6c 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20  xDel, 0);.}.int 
5690: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
56a0: 62 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ble(sqlite3_stmt
56b0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20   *pStmt, int i, 
56c0: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a  double rValue){.
56d0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
56e0: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
56f0: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
5700: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
5710: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
5720: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
5730: 56 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65  VdbeMemSetDouble
5740: 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20  (&p->aVar[i-1], 
5750: 72 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 72  rValue);.  }.  r
5760: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20  eturn rc;.}.int 
5770: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
5780: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
5790: 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20 69 56 61  , int i, int iVa
57a0: 6c 75 65 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  lue){.  return s
57b0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
57c0: 34 28 70 2c 20 69 2c 20 28 69 36 34 29 69 56 61  4(p, i, (i64)iVa
57d0: 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  lue);.}.int sqli
57e0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73  te3_bind_int64(s
57f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5800: 6d 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c 69 74  mt, int i, sqlit
5810: 65 5f 69 6e 74 36 34 20 69 56 61 6c 75 65 29 7b  e_int64 iValue){
5820: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62  .  int rc;.  Vdb
5830: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
5840: 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62  Stmt;.  rc = vdb
5850: 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20  eUnbind(p, i);. 
5860: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
5870: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
5880: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
5890: 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20  (&p->aVar[i-1], 
58a0: 69 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 72  iValue);.  }.  r
58b0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20  eturn rc;.}.int 
58c0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
58d0: 6c 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20  l(sqlite3_stmt* 
58e0: 70 2c 20 69 6e 74 20 69 29 7b 0a 20 20 72 65 74  p, int i){.  ret
58f0: 75 72 6e 20 76 64 62 65 55 6e 62 69 6e 64 28 28  urn vdbeUnbind((
5900: 56 64 62 65 20 2a 29 70 2c 20 69 29 3b 0a 7d 0a  Vdbe *)p, i);.}.
5910: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
5920: 5f 74 65 78 74 28 20 0a 20 20 73 71 6c 69 74 65  _text( .  sqlite
5930: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a  3_stmt *pStmt, .
5940: 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73    int i, .  cons
5950: 74 20 63 68 61 72 20 2a 7a 44 61 74 61 2c 20 0a  t char *zData, .
5960: 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20    int nData, .  
5970: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
5980: 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  d*).){.  return 
5990: 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20  bindText(pStmt, 
59a0: 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c  i, zData, nData,
59b0: 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55 54   xDel, SQLITE_UT
59c0: 46 38 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  F8);.}.#ifndef S
59d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
59e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
59f0: 64 5f 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69  d_text16(.  sqli
5a00: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
5a10: 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f   .  int i, .  co
5a20: 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c  nst void *zData,
5a30: 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a   .  int nData, .
5a40: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
5a50: 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72  oid*).){.  retur
5a60: 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74  n bindText(pStmt
5a70: 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74  , i, zData, nDat
5a80: 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f  a, xDel, SQLITE_
5a90: 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a  UTF16NATIVE);.}.
5aa0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
5ab0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69  _OMIT_UTF16 */.i
5ac0: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
5ad0: 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74  value(sqlite3_st
5ae0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
5af0: 2c 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  , const sqlite3_
5b00: 76 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a  value *pValue){.
5b10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
5b20: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
5b30: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
5b40: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
5b50: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
5b60: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
5b70: 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 70 2d 3e  VdbeMemCopy(&p->
5b80: 61 56 61 72 5b 69 2d 31 5d 2c 20 70 56 61 6c 75  aVar[i-1], pValu
5b90: 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  e);.  }.  return
5ba0: 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   rc;.}.int sqlit
5bb0: 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62  e3_bind_zeroblob
5bc0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
5bd0: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 69 6e 74  Stmt, int i, int
5be0: 20 6e 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20   n){.  int rc;. 
5bf0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
5c00: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d   *)pStmt;.  rc =
5c10: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
5c20: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
5c30: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
5c40: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a  lite3VdbeMemSetZ
5c50: 65 72 6f 42 6c 6f 62 28 26 70 2d 3e 61 56 61 72  eroBlob(&p->aVar
5c60: 5b 69 2d 31 5d 2c 20 6e 29 3b 0a 20 20 7d 0a 20  [i-1], n);.  }. 
5c70: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
5c80: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
5c90: 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63 61  number of wildca
5ca0: 72 64 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  rds that can be 
5cb0: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 62 6f 75 6e  potentially boun
5cc0: 64 20 74 6f 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  d to..** This ro
5cd0: 75 74 69 6e 65 20 69 73 20 61 64 64 65 64 20 74  utine is added t
5ce0: 6f 20 73 75 70 70 6f 72 74 20 44 42 44 3a 3a 53  o support DBD::S
5cf0: 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69 6e 74 20  QLite.  .*/.int 
5d00: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
5d10: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73 71 6c  ameter_count(sql
5d20: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
5d30: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
5d40: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 72  Vdbe*)pStmt;.  r
5d50: 65 74 75 72 6e 20 70 20 3f 20 70 2d 3e 6e 56 61  eturn p ? p->nVa
5d60: 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  r : 0;.}../*.** 
5d70: 43 72 65 61 74 65 20 61 20 6d 61 70 70 69 6e 67  Create a mapping
5d80: 20 66 72 6f 6d 20 76 61 72 69 61 62 6c 65 20 6e   from variable n
5d90: 75 6d 62 65 72 73 20 74 6f 20 76 61 72 69 61 62  umbers to variab
5da0: 6c 65 20 6e 61 6d 65 73 0a 2a 2a 20 69 6e 20 74  le names.** in t
5db0: 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b 5d 20  he Vdbe.azVar[] 
5dc0: 61 72 72 61 79 2c 20 69 66 20 73 75 63 68 20 61  array, if such a
5dd0: 20 6d 61 70 70 69 6e 67 20 64 6f 65 73 20 6e 6f   mapping does no
5de0: 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 65 78 69  t already.** exi
5df0: 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  st..*/.static vo
5e00: 69 64 20 63 72 65 61 74 65 56 61 72 4d 61 70 28  id createVarMap(
5e10: 56 64 62 65 20 2a 70 29 7b 0a 20 20 69 66 28 20  Vdbe *p){.  if( 
5e20: 21 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20 20 20  !p->okVar ){.   
5e30: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 4f 70 20 2a   int j;.    Op *
5e40: 70 4f 70 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30  pOp;.    for(j=0
5e50: 2c 20 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20 6a 3c  , pOp=p->aOp; j<
5e60: 70 2d 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70 4f 70  p->nOp; j++, pOp
5e70: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
5e80: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 56  Op->opcode==OP_V
5e90: 61 72 69 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  ariable ){.     
5ea0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5eb0: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
5ec0: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20 20  =p->nVar );.    
5ed0: 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70 4f 70      p->azVar[pOp
5ee0: 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d 3e 70  ->p1-1] = pOp->p
5ef0: 33 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  3;.      }.    }
5f00: 0a 20 20 20 20 70 2d 3e 6f 6b 56 61 72 20 3d 20  .    p->okVar = 
5f10: 31 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  1;.  }.}../*.** 
5f20: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
5f30: 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 70 61  of a wildcard pa
5f40: 72 61 6d 65 74 65 72 2e 20 20 52 65 74 75 72 6e  rameter.  Return
5f50: 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 69 6e 64   NULL if the ind
5f60: 65 78 0a 2a 2a 20 69 73 20 6f 75 74 20 6f 66 20  ex.** is out of 
5f70: 72 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20  range or if the 
5f80: 77 69 6c 64 63 61 72 64 20 69 73 20 75 6e 6e 61  wildcard is unna
5f90: 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  med..**.** The r
5fa0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
5fb0: 55 54 46 2d 38 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  UTF-8..*/.const 
5fc0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 62 69  char *sqlite3_bi
5fd0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
5fe0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
5ff0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
6000: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
6010: 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 70  *)pStmt;.  if( p
6020: 3d 3d 30 20 7c 7c 20 69 3c 31 20 7c 7c 20 69 3e  ==0 || i<1 || i>
6030: 70 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 72  p->nVar ){.    r
6040: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 63  eturn 0;.  }.  c
6050: 72 65 61 74 65 56 61 72 4d 61 70 28 70 29 3b 0a  reateVarMap(p);.
6060: 20 20 72 65 74 75 72 6e 20 70 2d 3e 61 7a 56 61    return p->azVa
6070: 72 5b 69 2d 31 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  r[i-1];.}../*.**
6080: 20 47 69 76 65 6e 20 61 20 77 69 6c 64 63 61 72   Given a wildcar
6090: 64 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65  d parameter name
60a0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 69 6e 64  , return the ind
60b0: 65 78 20 6f 66 20 74 68 65 20 76 61 72 69 61 62  ex of the variab
60c0: 6c 65 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20  le.** with that 
60d0: 6e 61 6d 65 2e 20 20 49 66 20 74 68 65 72 65 20  name.  If there 
60e0: 69 73 20 6e 6f 20 76 61 72 69 61 62 6c 65 20 77  is no variable w
60f0: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 6e 61  ith the given na
6100: 6d 65 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 30 2e  me,.** return 0.
6110: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6120: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
6130: 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 73 74 6d  ndex(sqlite3_stm
6140: 74 20 2a 70 53 74 6d 74 2c 20 63 6f 6e 73 74 20  t *pStmt, const 
6150: 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20  char *zName){.  
6160: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
6170: 29 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b  )pStmt;.  int i;
6180: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20  .  if( p==0 ){. 
6190: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
61a0: 0a 20 20 63 72 65 61 74 65 56 61 72 4d 61 70 28  .  createVarMap(
61b0: 70 29 3b 20 0a 20 20 69 66 28 20 7a 4e 61 6d 65  p); .  if( zName
61c0: 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   ){.    for(i=0;
61d0: 20 69 3c 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29   i<p->nVar; i++)
61e0: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
61f0: 61 72 20 2a 7a 20 3d 20 70 2d 3e 61 7a 56 61 72  ar *z = p->azVar
6200: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
6210: 20 26 26 20 73 74 72 63 6d 70 28 7a 2c 7a 4e 61   && strcmp(z,zNa
6220: 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
6230: 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a 20 20    return i+1;.  
6240: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
6250: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
6260: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c  *.** Transfer al
6270: 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20  l bindings from 
6280: 74 68 65 20 66 69 72 73 74 20 73 74 61 74 65 6d  the first statem
6290: 65 6e 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ent over to the 
62a0: 73 65 63 6f 6e 64 2e 0a 2a 2a 20 49 66 20 74 68  second..** If th
62b0: 65 20 74 77 6f 20 73 74 61 74 65 6d 65 6e 74 73  e two statements
62c0: 20 63 6f 6e 74 61 69 6e 20 61 20 64 69 66 66 65   contain a diffe
62d0: 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 62  rent number of b
62e0: 69 6e 64 69 6e 67 73 2c 20 74 68 65 6e 0a 2a 2a  indings, then.**
62f0: 20 61 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52   an SQLITE_ERROR
6300: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
6310: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61  .int sqlite3_tra
6320: 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 73  nsfer_bindings(s
6330: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72  qlite3_stmt *pFr
6340: 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f  omStmt, sqlite3_
6350: 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a  stmt *pToStmt){.
6360: 20 20 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20    Vdbe *pFrom = 
6370: 28 56 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74  (Vdbe*)pFromStmt
6380: 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20  ;.  Vdbe *pTo = 
6390: 28 56 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a  (Vdbe*)pToStmt;.
63a0: 20 20 69 6e 74 20 69 2c 20 72 63 20 3d 20 53 51    int i, rc = SQ
63b0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 28  LITE_OK;.  if( (
63c0: 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21 3d 56 44  pFrom->magic!=VD
63d0: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
63e0: 70 46 72 6f 6d 2d 3e 6d 61 67 69 63 21 3d 56 44  pFrom->magic!=VD
63f0: 42 45 5f 4d 41 47 49 43 5f 48 41 4c 54 29 0a 20  BE_MAGIC_HALT). 
6400: 20 20 20 7c 7c 20 28 70 54 6f 2d 3e 6d 61 67 69     || (pTo->magi
6410: 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c!=VDBE_MAGIC_RU
6420: 4e 20 26 26 20 70 54 6f 2d 3e 6d 61 67 69 63 21  N && pTo->magic!
6430: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 48 41 4c 54  =VDBE_MAGIC_HALT
6440: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
6450: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
6460: 20 7d 0a 20 20 69 66 28 20 70 46 72 6f 6d 2d 3e   }.  if( pFrom->
6470: 6e 56 61 72 21 3d 70 54 6f 2d 3e 6e 56 61 72 20  nVar!=pTo->nVar 
6480: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
6490: 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
64a0: 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d 53    for(i=0; rc==S
64b0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 70 46  QLITE_OK && i<pF
64c0: 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b  rom->nVar; i++){
64d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .    sqlite3Mall
64e0: 6f 63 44 69 73 61 6c 6c 6f 77 28 29 3b 0a 20 20  ocDisallow();.  
64f0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
6500: 62 65 4d 65 6d 4d 6f 76 65 28 26 70 54 6f 2d 3e  beMemMove(&pTo->
6510: 61 56 61 72 5b 69 5d 2c 20 26 70 46 72 6f 6d 2d  aVar[i], &pFrom-
6520: 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 20 20 73  >aVar[i]);.    s
6530: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 6c 6f  qlite3MallocAllo
6540: 77 28 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  w();.  }.  asser
6550: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
6560: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   || rc==SQLITE_N
6570: 4f 4d 45 4d 20 29 3b 0a 20 20 72 65 74 75 72 6e  OMEM );.  return
6580: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65   rc;.}../*.** Re
6590: 74 75 72 6e 20 74 68 65 20 73 71 6c 69 74 65 33  turn the sqlite3
65a0: 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * database handl
65b0: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 70  e to which the p
65c0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
65d0: 74 20 67 69 76 65 6e 0a 2a 2a 20 69 6e 20 74 68  t given.** in th
65e0: 65 20 61 72 67 75 6d 65 6e 74 20 62 65 6c 6f 6e  e argument belon
65f0: 67 73 2e 20 20 54 68 69 73 20 69 73 20 74 68 65  gs.  This is the
6600: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 68   same database h
6610: 61 6e 64 6c 65 20 74 68 61 74 20 77 61 73 0a 2a  andle that was.*
6620: 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
6630: 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71 6c 69  ment to the sqli
6640: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 74 68  te3_prepare() th
6650: 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 63  at was used to c
6660: 72 65 61 74 65 0a 2a 2a 20 74 68 65 20 73 74 61  reate.** the sta
6670: 74 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 66 69  tement in the fi
6680: 72 73 74 20 70 6c 61 63 65 2e 0a 2a 2f 0a 73 71  rst place..*/.sq
6690: 6c 69 74 65 33 20 2a 73 71 6c 69 74 65 33 5f 64  lite3 *sqlite3_d
66a0: 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69 74 65 33  b_handle(sqlite3
66b0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
66c0: 20 72 65 74 75 72 6e 20 70 53 74 6d 74 20 3f 20   return pStmt ? 
66d0: 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 2d 3e  ((Vdbe*)pStmt)->
66e0: 64 62 20 3a 20 30 3b 0a 7d 0a                    db : 0;.}.