/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact a8e8b6292864e71998df527f69cc5dde778a96c0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 34 20 4d 61 79 20 32  /*.** 2004 May 2
0010: 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  6.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0180: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0190: 73 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  se to implement 
01a0: 41 50 49 73 20 74 68 61 74 20 61 72 65 20 70 61  APIs that are pa
01b0: 72 74 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  rt of the.** VDB
01c0: 45 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  E..*/.#include "
01d0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e  sqliteInt.h".#in
01e0: 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68  clude "vdbeInt.h
01f0: 22 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  "..#ifndef SQLIT
0200: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
0210: 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  D./*.** Return T
0220: 52 55 45 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 6f  RUE (non-zero) o
0230: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
0240: 73 75 70 70 6c 69 65 64 20 61 73 20 61 6e 20 61  supplied as an a
0250: 72 67 75 6d 65 6e 74 20 6e 65 65 64 73 0a 2a 2a  rgument needs.**
0260: 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65   to be recompile
0270: 64 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  d.  A statement 
0280: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 63 6f  needs to be reco
0290: 6d 70 69 6c 65 64 20 77 68 65 6e 65 76 65 72 20  mpiled whenever 
02a0: 74 68 65 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e  the.** execution
02b0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 63 68 61   environment cha
02c0: 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20 74 68  nges in a way th
02d0: 61 74 20 77 6f 75 6c 64 20 61 6c 74 65 72 20 74  at would alter t
02e0: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 74 68  he program.** th
02f0: 61 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  at sqlite3_prepa
0300: 72 65 28 29 20 67 65 6e 65 72 61 74 65 73 2e 20  re() generates. 
0310: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   For example, if
0320: 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
0330: 72 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  r.** collating s
0340: 65 71 75 65 6e 63 65 73 20 61 72 65 20 72 65 67  equences are reg
0350: 69 73 74 65 72 65 64 20 6f 72 20 69 66 20 61 6e  istered or if an
0360: 20 61 75 74 68 6f 72 69 7a 65 72 20 66 75 6e 63   authorizer func
0370: 74 69 6f 6e 20 69 73 0a 2a 2a 20 61 64 64 65 64  tion is.** added
0380: 20 6f 72 20 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a   or changed..*/.
0390: 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 70 69  int sqlite3_expi
03a0: 72 65 64 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  red(sqlite3_stmt
03b0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65   *pStmt){.  Vdbe
03c0: 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *p = (Vdbe*)pSt
03d0: 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 3d 3d  mt;.  return p==
03e0: 30 20 7c 7c 20 70 2d 3e 65 78 70 69 72 65 64 3b  0 || p->expired;
03f0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
0400: 20 43 68 65 63 6b 20 6f 6e 20 61 20 56 64 62 65   Check on a Vdbe
0410: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 74   to make sure it
0420: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 66 69   has not been fi
0430: 6e 61 6c 69 7a 65 64 2e 20 20 4c 6f 67 0a 2a 2a  nalized.  Log.**
0440: 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 72 65   an error and re
0450: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
0460: 68 61 73 20 62 65 65 6e 20 66 69 6e 61 6c 69 7a  has been finaliz
0470: 65 64 20 28 6f 72 20 69 73 20 6f 74 68 65 72 77  ed (or is otherw
0480: 69 73 65 0a 2a 2a 20 69 6e 76 61 6c 69 64 29 2e  ise.** invalid).
0490: 20 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69    Return false i
04a0: 66 20 69 74 20 69 73 20 6f 6b 2e 0a 2a 2f 0a 73  f it is ok..*/.s
04b0: 74 61 74 69 63 20 69 6e 74 20 76 64 62 65 53 61  tatic int vdbeSa
04c0: 66 65 74 79 28 56 64 62 65 20 2a 70 29 7b 0a 20  fety(Vdbe *p){. 
04d0: 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
04e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
04f0: 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20  (SQLITE_MISUSE, 
0500: 22 41 50 49 20 63 61 6c 6c 65 64 20 77 69 74 68  "API called with
0510: 20 66 69 6e 61 6c 69 7a 65 64 20 70 72 65 70 61   finalized prepa
0520: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 22 29 3b  red statement");
0530: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
0540: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
0550: 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  rn 0;.  }.}.stat
0560: 69 63 20 69 6e 74 20 76 64 62 65 53 61 66 65 74  ic int vdbeSafet
0570: 79 4e 6f 74 4e 75 6c 6c 28 56 64 62 65 20 2a 70  yNotNull(Vdbe *p
0580: 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b  ){.  if( p==0 ){
0590: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
05a0: 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20  (SQLITE_MISUSE, 
05b0: 22 41 50 49 20 63 61 6c 6c 65 64 20 77 69 74 68  "API called with
05c0: 20 4e 55 4c 4c 20 70 72 65 70 61 72 65 64 20 73   NULL prepared s
05d0: 74 61 74 65 6d 65 6e 74 22 29 3b 0a 20 20 20 20  tatement");.    
05e0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
05f0: 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 76 64  e{.    return vd
0600: 62 65 53 61 66 65 74 79 28 70 29 3b 0a 20 20 7d  beSafety(p);.  }
0610: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
0620: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
0630: 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75  destroys a virtu
0640: 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20  al machine that 
0650: 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
0660: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d   the sqlite3_com
0670: 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 20  pile() routine. 
0680: 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74 75  The integer retu
0690: 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54  rned is an SQLIT
06a0: 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66 61  E_.** success/fa
06b0: 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74 20  ilure code that 
06c0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72 65  describes the re
06d0: 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69 6e  sult of executin
06e0: 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  g the virtual.**
06f0: 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20   machine..**.** 
0700: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
0710: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
0720: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
0730: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
0740: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
0750: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
0760: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
0770: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
0780: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73  lite3_finalize(s
0790: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
07a0: 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  mt){.  int rc;. 
07b0: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
07c0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
07d0: 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _OK;.  }else{.  
07e0: 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64 62    Vdbe *v = (Vdb
07f0: 65 2a 29 70 53 74 6d 74 3b 0a 20 20 20 20 73 71  e*)pStmt;.    sq
0800: 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 2d 3e 64  lite3 *db = v->d
0810: 62 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 48  b;.#if SQLITE_TH
0820: 52 45 41 44 53 41 46 45 0a 20 20 20 20 73 71 6c  READSAFE.    sql
0830: 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65  ite3_mutex *mute
0840: 78 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  x;.#endif.    if
0850: 28 20 76 64 62 65 53 61 66 65 74 79 28 76 29 20  ( vdbeSafety(v) 
0860: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
0870: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 69 66  MISUSE_BKPT;.#if
0880: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
0890: 46 45 0a 20 20 20 20 6d 75 74 65 78 20 3d 20 76  FE.    mutex = v
08a0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 3b 0a 23 65 6e  ->db->mutex;.#en
08b0: 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  dif.    sqlite3_
08c0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 75 74 65  mutex_enter(mute
08d0: 78 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  x);.    rc = sql
08e0: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
08f0: 28 76 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  (v);.    rc = sq
0900: 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c  lite3ApiExit(db,
0910: 20 72 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   rc);.    sqlite
0920: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 6d 75  3_mutex_leave(mu
0930: 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tex);.  }.  retu
0940: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
0950: 54 65 72 6d 69 6e 61 74 65 20 74 68 65 20 63 75  Terminate the cu
0960: 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20  rrent execution 
0970: 6f 66 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  of an SQL statem
0980: 65 6e 74 20 61 6e 64 20 72 65 73 65 74 20 69 74  ent and reset it
0990: 0a 2a 2a 20 62 61 63 6b 20 74 6f 20 69 74 73 20  .** back to its 
09a0: 73 74 61 72 74 69 6e 67 20 73 74 61 74 65 20 73  starting state s
09b0: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
09c0: 20 72 65 75 73 65 64 2e 20 41 20 73 75 63 63 65   reused. A succe
09d0: 73 73 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20  ss code from.** 
09e0: 74 68 65 20 70 72 69 6f 72 20 65 78 65 63 75 74  the prior execut
09f0: 69 6f 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ion is returned.
0a00: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
0a10: 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72 72  ine sets the err
0a20: 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69  or code and stri
0a30: 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a  ng returned by.*
0a40: 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  * sqlite3_errcod
0a50: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  e(), sqlite3_err
0a60: 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65  msg() and sqlite
0a70: 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f  3_errmsg16()..*/
0a80: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73  .int sqlite3_res
0a90: 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  et(sqlite3_stmt 
0aa0: 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72  *pStmt){.  int r
0ab0: 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d  c;.  if( pStmt==
0ac0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
0ad0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
0ae0: 7b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20  {.    Vdbe *v = 
0af0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
0b00: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
0b10: 65 6e 74 65 72 28 76 2d 3e 64 62 2d 3e 6d 75 74  enter(v->db->mut
0b20: 65 78 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ex);.    rc = sq
0b30: 6c 69 74 65 33 56 64 62 65 52 65 73 65 74 28 76  lite3VdbeReset(v
0b40: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
0b50: 62 65 4d 61 6b 65 52 65 61 64 79 28 76 2c 20 2d  beMakeReady(v, -
0b60: 31 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  1, 0, 0, 0, 0, 0
0b70: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
0b80: 72 63 20 26 20 28 76 2d 3e 64 62 2d 3e 65 72 72  rc & (v->db->err
0b90: 4d 61 73 6b 29 29 3d 3d 72 63 20 29 3b 0a 20 20  Mask))==rc );.  
0ba0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
0bb0: 69 45 78 69 74 28 76 2d 3e 64 62 2c 20 72 63 29  iExit(v->db, rc)
0bc0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  ;.    sqlite3_mu
0bd0: 74 65 78 5f 6c 65 61 76 65 28 76 2d 3e 64 62 2d  tex_leave(v->db-
0be0: 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72  >mutex);.  }.  r
0bf0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
0c00: 2a 2a 20 53 65 74 20 61 6c 6c 20 74 68 65 20 70  ** Set all the p
0c10: 61 72 61 6d 65 74 65 72 73 20 69 6e 20 74 68 65  arameters in the
0c20: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
0c30: 61 74 65 6d 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e  atement to NULL.
0c40: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
0c50: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 73  clear_bindings(s
0c60: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
0c70: 6d 74 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  mt){.  int i;.  
0c80: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
0c90: 4f 4b 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  OK;.  Vdbe *p = 
0ca0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 23 69  (Vdbe*)pStmt;.#i
0cb0: 66 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  f SQLITE_THREADS
0cc0: 41 46 45 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  AFE.  sqlite3_mu
0cd0: 74 65 78 20 2a 6d 75 74 65 78 20 3d 20 28 28 56  tex *mutex = ((V
0ce0: 64 62 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62 2d  dbe*)pStmt)->db-
0cf0: 3e 6d 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a 20  >mutex;.#endif. 
0d00: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
0d10: 6e 74 65 72 28 6d 75 74 65 78 29 3b 0a 20 20 66  nter(mutex);.  f
0d20: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61  or(i=0; i<p->nVa
0d30: 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  r; i++){.    sql
0d40: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
0d50: 73 65 28 26 70 2d 3e 61 56 61 72 5b 69 5d 29 3b  se(&p->aVar[i]);
0d60: 0a 20 20 20 20 70 2d 3e 61 56 61 72 5b 69 5d 2e  .    p->aVar[i].
0d70: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
0d80: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 69  ;.  }.  if( p->i
0d90: 73 50 72 65 70 61 72 65 56 32 20 26 26 20 70 2d  sPrepareV2 && p-
0da0: 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20  >expmask ){.    
0db0: 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
0dc0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
0dd0: 74 65 78 5f 6c 65 61 76 65 28 6d 75 74 65 78 29  tex_leave(mutex)
0de0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
0df0: 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0e10: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 20   sqlite3_value_ 
0e20: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
0e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0e40: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0e50: 67 20 72 6f 75 74 69 6e 65 73 20 65 78 74 72 61  g routines extra
0e60: 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ct information f
0e70: 72 6f 6d 20 61 20 4d 65 6d 20 6f 72 20 73 71 6c  rom a Mem or sql
0e80: 69 74 65 33 5f 76 61 6c 75 65 0a 2a 2a 20 73 74  ite3_value.** st
0e90: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 63 6f 6e 73  ructure..*/.cons
0ea0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
0eb0: 76 61 6c 75 65 5f 62 6c 6f 62 28 73 71 6c 69 74  value_blob(sqlit
0ec0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
0ed0: 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d  .  Mem *p = (Mem
0ee0: 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 2d  *)pVal;.  if( p-
0ef0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
0f00: 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  ob|MEM_Str) ){. 
0f10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
0f20: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 29 3b 0a  mExpandBlob(p);.
0f30: 20 20 20 20 70 2d 3e 66 6c 61 67 73 20 26 3d 20      p->flags &= 
0f40: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 20 20 70 2d  ~MEM_Str;.    p-
0f50: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 42 6c  >flags |= MEM_Bl
0f60: 6f 62 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70  ob;.    return p
0f70: 2d 3e 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ->z;.  }else{.  
0f80: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
0f90: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
0fa0: 29 3b 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c  );.  }.}.int sql
0fb0: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
0fc0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
0fd0: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
0fe0: 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
0ff0: 73 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  s(pVal, SQLITE_U
1000: 54 46 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  TF8);.}.int sqli
1010: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31  te3_value_bytes1
1020: 36 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  6(sqlite3_value 
1030: 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e  *pVal){.  return
1040: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
1050: 65 73 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f  es(pVal, SQLITE_
1060: 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a  UTF16NATIVE);.}.
1070: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 76  double sqlite3_v
1080: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 73 71 6c 69  alue_double(sqli
1090: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
10a0: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
10b0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
10c0: 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69  (Mem*)pVal);.}.i
10d0: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
10e0: 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  _int(sqlite3_val
10f0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
1100: 75 72 6e 20 28 69 6e 74 29 73 71 6c 69 74 65 33  urn (int)sqlite3
1110: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65  VdbeIntValue((Me
1120: 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 73 71 6c 69  m*)pVal);.}.sqli
1130: 74 65 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  te_int64 sqlite3
1140: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 73 71 6c  _value_int64(sql
1150: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
1160: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
1170: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1180: 28 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 63  (Mem*)pVal);.}.c
1190: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11a0: 61 72 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar *sqlite3_valu
11b0: 65 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f 76  e_text(sqlite3_v
11c0: 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72  alue *pVal){.  r
11d0: 65 74 75 72 6e 20 28 63 6f 6e 73 74 20 75 6e 73  eturn (const uns
11e0: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 73 71 6c  igned char *)sql
11f0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
1200: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  al, SQLITE_UTF8)
1210: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
1220: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
1230: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
1240: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 73  3_value_text16(s
1250: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56  qlite3_value* pV
1260: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  al){.  return sq
1270: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70  lite3ValueText(p
1280: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Val, SQLITE_UTF1
1290: 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 63 6f 6e 73  6NATIVE);.}.cons
12a0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
12b0: 76 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 73  value_text16be(s
12c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
12d0: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  al){.  return sq
12e0: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70  lite3ValueText(p
12f0: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Val, SQLITE_UTF1
1300: 36 42 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f  6BE);.}.const vo
1310: 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  id *sqlite3_valu
1320: 65 5f 74 65 78 74 31 36 6c 65 28 73 71 6c 69 74  e_text16le(sqlit
1330: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
1340: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
1350: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
1360: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29   SQLITE_UTF16LE)
1370: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
1380: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
1390: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  */.int sqlite3_v
13a0: 61 6c 75 65 5f 74 79 70 65 28 73 71 6c 69 74 65  alue_type(sqlite
13b0: 33 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a  3_value* pVal){.
13c0: 20 20 72 65 74 75 72 6e 20 70 56 61 6c 2d 3e 74    return pVal->t
13d0: 79 70 65 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ype;.}../*******
13e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
13f0: 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 72 65  ***** sqlite3_re
1400: 73 75 6c 74 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  sult_  *********
1410: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1420: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ******.** The fo
1430: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73  llowing routines
1440: 20 61 72 65 20 75 73 65 64 20 62 79 20 75 73 65   are used by use
1450: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
1460: 6f 6e 73 20 74 6f 20 73 70 65 63 69 66 79 0a 2a  ons to specify.*
1470: 2a 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  * the function r
1480: 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  esult..**.** The
1490: 20 73 65 74 53 74 72 4f 72 45 72 72 6f 72 28 29   setStrOrError()
14a0: 20 66 75 6e 74 69 6f 6e 20 63 61 6c 6c 73 20 73   funtion calls s
14b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
14c0: 53 74 72 28 29 20 74 6f 20 73 74 6f 72 65 20 74  Str() to store t
14d0: 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20 61 73 20  he.** result as 
14e0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
14f0: 20 62 75 74 20 69 66 20 74 68 65 20 73 74 72 69   but if the stri
1500: 6e 67 20 6f 72 20 62 6c 6f 62 20 69 73 20 74 6f  ng or blob is to
1510: 6f 20 6c 61 72 67 65 2c 20 69 74 0a 2a 2a 20 74  o large, it.** t
1520: 68 65 6e 20 73 65 74 73 20 74 68 65 20 65 72 72  hen sets the err
1530: 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c 49 54  or code to SQLIT
1540: 45 5f 54 4f 4f 42 49 47 0a 2a 2f 0a 73 74 61 74  E_TOOBIG.*/.stat
1550: 69 63 20 76 6f 69 64 20 73 65 74 52 65 73 75 6c  ic void setResul
1560: 74 53 74 72 4f 72 45 72 72 6f 72 28 0a 20 20 73  tStrOrError(.  s
1570: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1580: 70 43 74 78 2c 20 20 2f 2a 20 46 75 6e 63 74 69  pCtx,  /* Functi
1590: 6f 6e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  on context */.  
15a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 20  const char *z,  
15b0: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
15c0: 67 20 70 6f 69 6e 74 65 72 20 2a 2f 0a 20 20 69  g pointer */.  i
15d0: 6e 74 20 6e 2c 20 20 20 20 20 20 20 20 20 20 20  nt n,           
15e0: 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
15f0: 69 6e 20 73 74 72 69 6e 67 2c 20 6f 72 20 6e 65  in string, or ne
1600: 67 61 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  gative */.  u8 e
1610: 6e 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  nc,             
1620: 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20      /* Encoding 
1630: 6f 66 20 7a 2e 20 20 30 20 66 6f 72 20 42 4c 4f  of z.  0 for BLO
1640: 42 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Bs */.  void (*x
1650: 44 65 6c 29 28 76 6f 69 64 2a 29 20 20 20 20 20  Del)(void*)     
1660: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 75  /* Destructor fu
1670: 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69  nction */.){.  i
1680: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
1690: 6d 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73  mSetStr(&pCtx->s
16a0: 2c 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44 65  , z, n, enc, xDe
16b0: 6c 29 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  l)==SQLITE_TOOBI
16c0: 47 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  G ){.    sqlite3
16d0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f  _result_error_to
16e0: 6f 62 69 67 28 70 43 74 78 29 3b 0a 20 20 7d 0a  obig(pCtx);.  }.
16f0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
1700: 65 73 75 6c 74 5f 62 6c 6f 62 28 0a 20 20 73 71  esult_blob(.  sq
1710: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
1720: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Ctx, .  const vo
1730: 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  id *z, .  int n,
1740: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
1750: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
1760: 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20  sert( n>=0 );.  
1770: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
1780: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
1790: 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  >s.db->mutex) );
17a0: 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f  .  setResultStrO
17b0: 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20  rError(pCtx, z, 
17c0: 6e 2c 20 30 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76  n, 0, xDel);.}.v
17d0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
17e0: 6c 74 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65  lt_double(sqlite
17f0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
1800: 20 64 6f 75 62 6c 65 20 72 56 61 6c 29 7b 0a 20   double rVal){. 
1810: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1820: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
1830: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
1840: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
1850: 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70 43 74  emSetDouble(&pCt
1860: 78 2d 3e 73 2c 20 72 56 61 6c 29 3b 0a 7d 0a 76  x->s, rVal);.}.v
1870: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
1880: 6c 74 5f 65 72 72 6f 72 28 73 71 6c 69 74 65 33  lt_error(sqlite3
1890: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
18a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
18b0: 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28  nt n){.  assert(
18c0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
18d0: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
18e0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78  mutex) );.  pCtx
18f0: 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49  ->isError = SQLI
1900: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  TE_ERROR;.  sqli
1910: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
1920: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
1930: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
1940: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
1950: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
1960: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69  E_OMIT_UTF16.voi
1970: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
1980: 5f 65 72 72 6f 72 31 36 28 73 71 6c 69 74 65 33  _error16(sqlite3
1990: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
19a0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 69  const void *z, i
19b0: 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28  nt n){.  assert(
19c0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
19d0: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
19e0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78  mutex) );.  pCtx
19f0: 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49  ->isError = SQLI
1a00: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  TE_ERROR;.  sqli
1a10: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
1a20: 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e 2c  (&pCtx->s, z, n,
1a30: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
1a40: 49 56 45 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  IVE, SQLITE_TRAN
1a50: 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66  SIENT);.}.#endif
1a60: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
1a70: 73 75 6c 74 5f 69 6e 74 28 73 71 6c 69 74 65 33  sult_int(sqlite3
1a80: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1a90: 69 6e 74 20 69 56 61 6c 29 7b 0a 20 20 61 73 73  int iVal){.  ass
1aa0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
1ab0: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
1ac0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
1ad0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1ae0: 74 49 6e 74 36 34 28 26 70 43 74 78 2d 3e 73 2c  tInt64(&pCtx->s,
1af0: 20 28 69 36 34 29 69 56 61 6c 29 3b 0a 7d 0a 76   (i64)iVal);.}.v
1b00: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
1b10: 6c 74 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33  lt_int64(sqlite3
1b20: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1b30: 69 36 34 20 69 56 61 6c 29 7b 0a 20 20 61 73 73  i64 iVal){.  ass
1b40: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
1b50: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
1b60: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
1b70: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1b80: 74 49 6e 74 36 34 28 26 70 43 74 78 2d 3e 73 2c  tInt64(&pCtx->s,
1b90: 20 69 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   iVal);.}.void s
1ba0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
1bb0: 6c 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ll(sqlite3_conte
1bc0: 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73  xt *pCtx){.  ass
1bd0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
1be0: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e  ex_held(pCtx->s.
1bf0: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
1c00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1c10: 74 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73 29 3b  tNull(&pCtx->s);
1c20: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
1c30: 72 65 73 75 6c 74 5f 74 65 78 74 28 0a 20 20 73  result_text(.  s
1c40: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1c50: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 63  pCtx, .  const c
1c60: 68 61 72 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  har *z, .  int n
1c70: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ,.  void (*xDel)
1c80: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
1c90: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
1ca0: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
1cb0: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
1cc0: 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45   setResultStrOrE
1cd0: 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c  rror(pCtx, z, n,
1ce0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 78 44   SQLITE_UTF8, xD
1cf0: 65 6c 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  el);.}.#ifndef S
1d00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1d10: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
1d20: 73 75 6c 74 5f 74 65 78 74 31 36 28 0a 20 20 73  sult_text16(.  s
1d30: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1d40: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76  pCtx, .  const v
1d50: 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  oid *z, .  int n
1d60: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
1d70: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
1d80: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
1d90: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
1da0: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
1db0: 20 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72    setResultStrOr
1dc0: 45 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e  Error(pCtx, z, n
1dd0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
1de0: 54 49 56 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76  TIVE, xDel);.}.v
1df0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
1e00: 6c 74 5f 74 65 78 74 31 36 62 65 28 0a 20 20 73  lt_text16be(.  s
1e10: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
1e20: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76  pCtx, .  const v
1e30: 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  oid *z, .  int n
1e40: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
1e50: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
1e60: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
1e70: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
1e80: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
1e90: 20 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72    setResultStrOr
1ea0: 45 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e  Error(pCtx, z, n
1eb0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
1ec0: 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20  , xDel);.}.void 
1ed0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
1ee0: 65 78 74 31 36 6c 65 28 0a 20 20 73 71 6c 69 74  ext16le(.  sqlit
1ef0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
1f00: 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  , .  const void 
1f10: 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20  *z, .  int n, . 
1f20: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
1f30: 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72  id *).){.  asser
1f40: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
1f50: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62  _held(pCtx->s.db
1f60: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 65  ->mutex) );.  se
1f70: 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72 6f  tResultStrOrErro
1f80: 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51  r(pCtx, z, n, SQ
1f90: 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 78 44  LITE_UTF16LE, xD
1fa0: 65 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  el);.}.#endif /*
1fb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
1fc0: 31 36 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  16 */.void sqlit
1fd0: 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65 28  e3_result_value(
1fe0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
1ff0: 2a 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  *pCtx, sqlite3_v
2000: 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a 20  alue *pValue){. 
2010: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2020: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2030: 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ->s.db->mutex) )
2040: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2050: 65 6d 43 6f 70 79 28 26 70 43 74 78 2d 3e 73 2c  emCopy(&pCtx->s,
2060: 20 70 56 61 6c 75 65 29 3b 0a 7d 0a 76 6f 69 64   pValue);.}.void
2070: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2080: 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69 74 65 33  zeroblob(sqlite3
2090: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
20a0: 69 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74  int n){.  assert
20b0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
20c0: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
20d0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
20e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65  ite3VdbeMemSetZe
20f0: 72 6f 42 6c 6f 62 28 26 70 43 74 78 2d 3e 73 2c  roBlob(&pCtx->s,
2100: 20 6e 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69   n);.}.void sqli
2110: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
2120: 5f 63 6f 64 65 28 73 71 6c 69 74 65 33 5f 63 6f  _code(sqlite3_co
2130: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74  ntext *pCtx, int
2140: 20 65 72 72 43 6f 64 65 29 7b 0a 20 20 70 43 74   errCode){.  pCt
2150: 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 65 72 72  x->isError = err
2160: 43 6f 64 65 3b 0a 20 20 69 66 28 20 70 43 74 78  Code;.  if( pCtx
2170: 2d 3e 73 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ->s.flags & MEM_
2180: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
2190: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
21a0: 28 26 70 43 74 78 2d 3e 73 2c 20 73 71 6c 69 74  (&pCtx->s, sqlit
21b0: 65 33 45 72 72 53 74 72 28 65 72 72 43 6f 64 65  e3ErrStr(errCode
21c0: 29 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20  ), -1, .        
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
21f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
2200: 7d 0a 7d 0a 0a 2f 2a 20 46 6f 72 63 65 20 61 6e  }.}../* Force an
2210: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65   SQLITE_TOOBIG e
2220: 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71  rror. */.void sq
2230: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
2240: 6f 72 5f 74 6f 6f 62 69 67 28 73 71 6c 69 74 65  or_toobig(sqlite
2250: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29  3_context *pCtx)
2260: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2270: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2280: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
2290: 29 20 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45  ) );.  pCtx->isE
22a0: 72 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 54 4f  rror = SQLITE_TO
22b0: 4f 42 49 47 3b 0a 20 20 73 71 6c 69 74 65 33 56  OBIG;.  sqlite3V
22c0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43  dbeMemSetStr(&pC
22d0: 74 78 2d 3e 73 2c 20 22 73 74 72 69 6e 67 20 6f  tx->s, "string o
22e0: 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 2c  r blob too big",
22f0: 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20   -1, .          
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2310: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
2320: 5f 53 54 41 54 49 43 29 3b 0a 7d 0a 0a 2f 2a 20  _STATIC);.}../* 
2330: 41 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  An SQLITE_NOMEM 
2340: 65 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73  error. */.void s
2350: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
2360: 72 6f 72 5f 6e 6f 6d 65 6d 28 73 71 6c 69 74 65  ror_nomem(sqlite
2370: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29  3_context *pCtx)
2380: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2390: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
23a0: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
23b0: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
23c0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 70 43  beMemSetNull(&pC
23d0: 74 78 2d 3e 73 29 3b 0a 20 20 70 43 74 78 2d 3e  tx->s);.  pCtx->
23e0: 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45  isError = SQLITE
23f0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 43 74 78 2d 3e  _NOMEM;.  pCtx->
2400: 73 2e 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  s.db->mallocFail
2410: 65 64 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ed = 1;.}../*.**
2420: 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 61   Execute the sta
2430: 74 65 6d 65 6e 74 20 70 53 74 6d 74 2c 20 65 69  tement pStmt, ei
2440: 74 68 65 72 20 75 6e 74 69 6c 20 61 20 72 6f 77  ther until a row
2450: 20 6f 66 20 64 61 74 61 20 69 73 20 72 65 61 64   of data is read
2460: 79 2c 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d  y, the.** statem
2470: 65 6e 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  ent is completel
2480: 79 20 65 78 65 63 75 74 65 64 20 6f 72 20 61 6e  y executed or an
2490: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a   error occurs..*
24a0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
24b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  e implements the
24c0: 20 62 75 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67   bulk of the log
24d0: 69 63 20 62 65 68 69 6e 64 20 74 68 65 20 73 71  ic behind the sq
24e0: 6c 69 74 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41  lite_step().** A
24f0: 50 49 2e 20 20 54 68 65 20 6f 6e 6c 79 20 74 68  PI.  The only th
2500: 69 6e 67 20 6f 6d 69 74 74 65 64 20 69 73 20 74  ing omitted is t
2510: 68 65 20 61 75 74 6f 6d 61 74 69 63 20 72 65 63  he automatic rec
2520: 6f 6d 70 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20  ompile if a .** 
2530: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61  schema change ha
2540: 73 20 6f 63 63 75 72 72 65 64 2e 20 20 54 68 61  s occurred.  Tha
2550: 74 20 64 65 74 61 69 6c 20 69 73 20 68 61 6e 64  t detail is hand
2560: 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75  led by the.** ou
2570: 74 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ter sqlite3_step
2580: 28 29 20 77 72 61 70 70 65 72 20 70 72 6f 63 65  () wrapper proce
2590: 64 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  dure..*/.static 
25a0: 69 6e 74 20 73 71 6c 69 74 65 33 53 74 65 70 28  int sqlite3Step(
25b0: 56 64 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69  Vdbe *p){.  sqli
25c0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
25d0: 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 70 29 3b  c;..  assert(p);
25e0: 0a 20 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21  .  if( p->magic!
25f0: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
2600: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  ){.    sqlite3_l
2610: 6f 67 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  og(SQLITE_MISUSE
2620: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 61 74  , .          "at
2630: 74 65 6d 70 74 20 74 6f 20 73 74 65 70 20 61 20  tempt to step a 
2640: 68 61 6c 74 65 64 20 73 74 61 74 65 6d 65 6e 74  halted statement
2650: 3a 20 5b 25 73 5d 22 2c 20 70 2d 3e 7a 53 71 6c  : [%s]", p->zSql
2660: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  );.    return SQ
2670: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
2680: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63  ;.  }..  /* Chec
2690: 6b 20 74 68 61 74 20 6d 61 6c 6c 6f 63 28 29 20  k that malloc() 
26a0: 68 61 73 20 6e 6f 74 20 66 61 69 6c 65 64 2e 20  has not failed. 
26b0: 49 66 20 69 74 20 68 61 73 2c 20 72 65 74 75 72  If it has, retur
26c0: 6e 20 65 61 72 6c 79 2e 20 2a 2f 0a 20 20 64 62  n early. */.  db
26d0: 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 69 66 28 20   = p->db;.  if( 
26e0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
26f0: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
2700: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
2710: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2720: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20 20 69 66  NOMEM;.  }..  if
2730: 28 20 70 2d 3e 70 63 3c 3d 30 20 26 26 20 70 2d  ( p->pc<=0 && p-
2740: 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20  >expired ){.    
2750: 69 66 28 20 41 4c 57 41 59 53 28 70 2d 3e 72 63  if( ALWAYS(p->rc
2760: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
2770: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48  ->rc==SQLITE_SCH
2780: 45 4d 41 29 20 29 7b 0a 20 20 20 20 20 20 70 2d  EMA) ){.      p-
2790: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48  >rc = SQLITE_SCH
27a0: 45 4d 41 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  EMA;.    }.    r
27b0: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
27c0: 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 6f  ;.    goto end_o
27d0: 66 5f 73 74 65 70 3b 0a 20 20 7d 0a 20 20 69 66  f_step;.  }.  if
27e0: 28 20 70 2d 3e 70 63 3c 30 20 29 7b 0a 20 20 20  ( p->pc<0 ){.   
27f0: 20 2f 2a 20 49 66 20 74 68 65 72 65 20 61 72 65   /* If there are
2800: 20 6e 6f 20 6f 74 68 65 72 20 73 74 61 74 65 6d   no other statem
2810: 65 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 72  ents currently r
2820: 75 6e 6e 69 6e 67 2c 20 74 68 65 6e 0a 20 20 20  unning, then.   
2830: 20 2a 2a 20 72 65 73 65 74 20 74 68 65 20 69 6e   ** reset the in
2840: 74 65 72 72 75 70 74 20 66 6c 61 67 2e 20 20 54  terrupt flag.  T
2850: 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 63  his prevents a c
2860: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 69  all to sqlite3_i
2870: 6e 74 65 72 72 75 70 74 0a 20 20 20 20 2a 2a 20  nterrupt.    ** 
2880: 66 72 6f 6d 20 69 6e 74 65 72 72 75 70 74 69 6e  from interruptin
2890: 67 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 68  g a statement th
28a0: 61 74 20 68 61 73 20 6e 6f 74 20 79 65 74 20 73  at has not yet s
28b0: 74 61 72 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  tarted..    */. 
28c0: 20 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76     if( db->activ
28d0: 65 56 64 62 65 43 6e 74 3d 3d 30 20 29 7b 0a 20  eVdbeCnt==0 ){. 
28e0: 20 20 20 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e       db->u1.isIn
28f0: 74 65 72 72 75 70 74 65 64 20 3d 20 30 3b 0a 20  terrupted = 0;. 
2900: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
2910: 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43  ( db->writeVdbeC
2920: 6e 74 3e 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  nt>0 || db->auto
2930: 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
2940: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2950: 30 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  0 );..#ifndef SQ
2960: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
2970: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
2980: 66 69 6c 65 20 26 26 20 21 64 62 2d 3e 69 6e 69  file && !db->ini
2990: 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 20 20  t.busy ){.      
29a0: 64 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20 20 20  double rNow;.   
29b0: 20 20 20 73 71 6c 69 74 65 33 4f 73 43 75 72 72     sqlite3OsCurr
29c0: 65 6e 74 54 69 6d 65 28 64 62 2d 3e 70 56 66 73  entTime(db->pVfs
29d0: 2c 20 26 72 4e 6f 77 29 3b 0a 20 20 20 20 20 20  , &rNow);.      
29e0: 70 2d 3e 73 74 61 72 74 54 69 6d 65 20 3d 20 28  p->startTime = (
29f0: 75 36 34 29 28 28 72 4e 6f 77 20 2d 20 28 69 6e  u64)((rNow - (in
2a00: 74 29 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32  t)rNow)*3600.0*2
2a10: 34 2e 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30  4.0*1000000000.0
2a20: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
2a30: 0a 20 20 20 20 64 62 2d 3e 61 63 74 69 76 65 56  .    db->activeV
2a40: 64 62 65 43 6e 74 2b 2b 3b 0a 20 20 20 20 69 66  dbeCnt++;.    if
2a50: 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2a60: 20 29 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65   ) db->writeVdbe
2a70: 43 6e 74 2b 2b 3b 0a 20 20 20 20 70 2d 3e 70 63  Cnt++;.    p->pc
2a80: 20 3d 20 30 3b 0a 20 20 7d 0a 23 69 66 6e 64 65   = 0;.  }.#ifnde
2a90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
2aa0: 50 4c 41 49 4e 0a 20 20 69 66 28 20 70 2d 3e 65  PLAIN.  if( p->e
2ab0: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 72 63  xplain ){.    rc
2ac0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4c 69   = sqlite3VdbeLi
2ad0: 73 74 28 70 29 3b 0a 20 20 7d 65 6c 73 65 0a 23  st(p);.  }else.#
2ae0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2af0: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a  OMIT_EXPLAIN */.
2b00: 20 20 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    {.    rc = sql
2b10: 69 74 65 33 56 64 62 65 45 78 65 63 28 70 29 3b  ite3VdbeExec(p);
2b20: 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  .  }..#ifndef SQ
2b30: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
2b40: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
2b50: 70 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b  profile callback
2b60: 20 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65   if there is one
2b70: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63 21 3d  .  */.  if( rc!=
2b80: 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 64 62  SQLITE_ROW && db
2b90: 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21 64  ->xProfile && !d
2ba0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 26 26 20  b->init.busy && 
2bb0: 70 2d 3e 7a 53 71 6c 20 29 7b 0a 20 20 20 20 64  p->zSql ){.    d
2bc0: 6f 75 62 6c 65 20 72 4e 6f 77 3b 0a 20 20 20 20  ouble rNow;.    
2bd0: 75 36 34 20 65 6c 61 70 73 65 54 69 6d 65 3b 0a  u64 elapseTime;.
2be0: 0a 20 20 20 20 73 71 6c 69 74 65 33 4f 73 43 75  .    sqlite3OsCu
2bf0: 72 72 65 6e 74 54 69 6d 65 28 64 62 2d 3e 70 56  rrentTime(db->pV
2c00: 66 73 2c 20 26 72 4e 6f 77 29 3b 0a 20 20 20 20  fs, &rNow);.    
2c10: 65 6c 61 70 73 65 54 69 6d 65 20 3d 20 28 75 36  elapseTime = (u6
2c20: 34 29 28 28 72 4e 6f 77 20 2d 20 28 69 6e 74 29  4)((rNow - (int)
2c30: 72 4e 6f 77 29 2a 33 36 30 30 2e 30 2a 32 34 2e  rNow)*3600.0*24.
2c40: 30 2a 31 30 30 30 30 30 30 30 30 30 2e 30 29 3b  0*1000000000.0);
2c50: 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d 65 20  .    elapseTime 
2c60: 2d 3d 20 70 2d 3e 73 74 61 72 74 54 69 6d 65 3b  -= p->startTime;
2c70: 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c  .    db->xProfil
2c80: 65 28 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72  e(db->pProfileAr
2c90: 67 2c 20 70 2d 3e 7a 53 71 6c 2c 20 65 6c 61 70  g, p->zSql, elap
2ca0: 73 65 54 69 6d 65 29 3b 0a 20 20 7d 0a 23 65 6e  seTime);.  }.#en
2cb0: 64 69 66 0a 0a 20 20 64 62 2d 3e 65 72 72 43 6f  dif..  db->errCo
2cc0: 64 65 20 3d 20 72 63 3b 0a 20 20 69 66 28 20 53  de = rc;.  if( S
2cd0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c  QLITE_NOMEM==sql
2ce0: 69 74 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64  ite3ApiExit(p->d
2cf0: 62 2c 20 70 2d 3e 72 63 29 20 29 7b 0a 20 20 20  b, p->rc) ){.   
2d00: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
2d10: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 65 6e 64 5f 6f  NOMEM;.  }.end_o
2d20: 66 5f 73 74 65 70 3a 0a 20 20 2f 2a 20 41 74 20  f_step:.  /* At 
2d30: 74 68 69 73 20 70 6f 69 6e 74 20 6c 6f 63 61 6c  this point local
2d40: 20 76 61 72 69 61 62 6c 65 20 72 63 20 68 6f 6c   variable rc hol
2d50: 64 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ds the value tha
2d60: 74 20 73 68 6f 75 6c 64 20 62 65 20 0a 20 20 2a  t should be .  *
2d70: 2a 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  * returned if th
2d80: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73  is statement was
2d90: 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20   compiled using 
2da0: 74 68 65 20 6c 65 67 61 63 79 20 0a 20 20 2a 2a  the legacy .  **
2db0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2dc0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 20 41 63  () interface. Ac
2dd0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 64  cording to the d
2de0: 6f 63 73 2c 20 74 68 69 73 20 63 61 6e 20 6f 6e  ocs, this can on
2df0: 6c 79 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  ly.  ** be one o
2e00: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
2e10: 74 68 65 20 66 69 72 73 74 20 61 73 73 65 72 74  the first assert
2e20: 28 29 20 62 65 6c 6f 77 2e 20 56 61 72 69 61 62  () below. Variab
2e30: 6c 65 20 70 2d 3e 72 63 20 0a 20 20 2a 2a 20 63  le p->rc .  ** c
2e40: 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75  ontains the valu
2e50: 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20  e that would be 
2e60: 72 65 74 75 72 6e 65 64 20 69 66 20 73 71 6c 69  returned if sqli
2e70: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 0a  te3_finalize() .
2e80: 20 20 2a 2a 20 77 65 72 65 20 63 61 6c 6c 65 64    ** were called
2e90: 20 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20 70 2e   on statement p.
2ea0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
2eb0: 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20 20  rc==SQLITE_ROW  
2ec0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  || rc==SQLITE_DO
2ed0: 4e 45 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  NE   || rc==SQLI
2ee0: 54 45 5f 45 52 52 4f 52 20 0a 20 20 20 20 20 20  TE_ERROR .      
2ef0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42   || rc==SQLITE_B
2f00: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
2f10: 45 5f 4d 49 53 55 53 45 0a 20 20 29 3b 0a 20 20  E_MISUSE.  );.  
2f20: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53  assert( p->rc!=S
2f30: 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 70 2d 3e  QLITE_ROW && p->
2f40: 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
2f50: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 69 73 50 72  );.  if( p->isPr
2f60: 65 70 61 72 65 56 32 20 26 26 20 72 63 21 3d 53  epareV2 && rc!=S
2f70: 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
2f80: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
2f90: 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73      /* If this s
2fa0: 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
2fb0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  pared using sqli
2fc0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
2fd0: 2c 20 61 6e 64 20 61 6e 0a 20 20 20 20 2a 2a 20  , and an.    ** 
2fe0: 65 72 72 6f 72 20 68 61 73 20 6f 63 63 75 72 65  error has occure
2ff0: 64 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  d, then return t
3000: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 6e  he error code in
3010: 20 70 2d 3e 72 63 20 74 6f 20 74 68 65 0a 20 20   p->rc to the.  
3020: 20 20 2a 2a 20 63 61 6c 6c 65 72 2e 20 53 65 74    ** caller. Set
3030: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
3040: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
3050: 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 73 61  handle to the sa
3060: 6d 65 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  me value..    */
3070: 20 0a 20 20 20 20 72 63 20 3d 20 64 62 2d 3e 65   .    rc = db->e
3080: 72 72 43 6f 64 65 20 3d 20 70 2d 3e 72 63 3b 0a  rrCode = p->rc;.
3090: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 28 72 63    }.  return (rc
30a0: 26 64 62 2d 3e 65 72 72 4d 61 73 6b 29 3b 0a 7d  &db->errMask);.}
30b0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
30c0: 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 69 6d  the top-level im
30d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
30e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
30f0: 20 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65 33   Call.** sqlite3
3100: 53 74 65 70 28 29 20 74 6f 20 64 6f 20 6d 6f 73  Step() to do mos
3110: 74 20 6f 66 20 74 68 65 20 77 6f 72 6b 2e 20 20  t of the work.  
3120: 49 66 20 61 20 73 63 68 65 6d 61 20 65 72 72 6f  If a schema erro
3130: 72 20 6f 63 63 75 72 73 2c 0a 2a 2a 20 63 61 6c  r occurs,.** cal
3140: 6c 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  l sqlite3Reprepa
3150: 72 65 28 29 20 61 6e 64 20 74 72 79 20 61 67 61  re() and try aga
3160: 69 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  in..*/.int sqlit
3170: 65 33 5f 73 74 65 70 28 73 71 6c 69 74 65 33 5f  e3_step(sqlite3_
3180: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
3190: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
31a0: 4f 4b 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75  OK;      /* Resu
31b0: 6c 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 53  lt from sqlite3S
31c0: 74 65 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 72  tep() */.  int r
31d0: 63 32 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  c2 = SQLITE_OK; 
31e0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 66 72      /* Result fr
31f0: 6f 6d 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  om sqlite3Reprep
3200: 61 72 65 28 29 20 2a 2f 0a 20 20 56 64 62 65 20  are() */.  Vdbe 
3210: 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *v = (Vdbe*)pStm
3220: 74 3b 20 20 2f 2a 20 74 68 65 20 70 72 65 70 61  t;  /* the prepa
3230: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
3240: 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 20  .  int cnt = 0; 
3250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
3260: 6f 75 6e 74 65 72 20 74 6f 20 70 72 65 76 65 6e  ounter to preven
3270: 74 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 20  t infinite loop 
3280: 6f 66 20 72 65 70 72 65 70 61 72 65 73 20 2a 2f  of reprepares */
3290: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
32b0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
32c0: 65 63 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28  ection */..  if(
32d0: 20 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e 75   vdbeSafetyNotNu
32e0: 6c 6c 28 76 29 20 29 7b 0a 20 20 20 20 72 65 74  ll(v) ){.    ret
32f0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
3300: 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 64 62  E_BKPT;.  }.  db
3310: 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 73 71 6c 69   = v->db;.  sqli
3320: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
3330: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 77 68  db->mutex);.  wh
3340: 69 6c 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74  ile( (rc = sqlit
3350: 65 33 53 74 65 70 28 76 29 29 3d 3d 53 51 4c 49  e3Step(v))==SQLI
3360: 54 45 5f 53 43 48 45 4d 41 0a 20 20 20 20 20 20  TE_SCHEMA.      
3370: 20 20 20 26 26 20 63 6e 74 2b 2b 20 3c 20 35 0a     && cnt++ < 5.
3380: 20 20 20 20 20 20 20 20 20 26 26 20 28 72 63 32           && (rc2
3390: 20 3d 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52   = rc = sqlite3R
33a0: 65 70 72 65 70 61 72 65 28 76 29 29 3d 3d 53 51  eprepare(v))==SQ
33b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
33c0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53 74  qlite3_reset(pSt
33d0: 6d 74 29 3b 0a 20 20 20 20 76 2d 3e 65 78 70 69  mt);.    v->expi
33e0: 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  red = 0;.  }.  i
33f0: 66 28 20 72 63 32 21 3d 53 51 4c 49 54 45 5f 4f  f( rc2!=SQLITE_O
3400: 4b 20 26 26 20 76 2d 3e 69 73 50 72 65 70 61 72  K && v->isPrepar
3410: 65 56 32 20 26 26 20 64 62 2d 3e 70 45 72 72 20  eV2 && db->pErr 
3420: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 63  ){.    /* This c
3430: 61 73 65 20 6f 63 63 75 72 73 20 61 66 74 65 72  ase occurs after
3440: 20 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63 6f   failing to reco
3450: 6d 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74 61  mpile an sql sta
3460: 74 65 6d 65 6e 74 2e 20 0a 20 20 20 20 2a 2a 20  tement. .    ** 
3470: 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
3480: 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 20 63  e from the SQL c
3490: 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c 72 65  ompiler has alre
34a0: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  ady been loaded 
34b0: 0a 20 20 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  .    ** into the
34c0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
34d0: 2e 20 54 68 69 73 20 62 6c 6f 63 6b 20 63 6f 70  . This block cop
34e0: 69 65 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65  ies the error me
34f0: 73 73 61 67 65 20 0a 20 20 20 20 2a 2a 20 66 72  ssage .    ** fr
3500: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
3510: 68 61 6e 64 6c 65 20 69 6e 74 6f 20 74 68 65 20  handle into the 
3520: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 73 65  statement and se
3530: 74 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ts the statement
3540: 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
3550: 63 6f 75 6e 74 65 72 20 74 6f 20 30 20 74 6f 20  counter to 0 to 
3560: 65 6e 73 75 72 65 20 74 68 61 74 20 77 68 65 6e  ensure that when
3570: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
3580: 73 20 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69  s .    ** finali
3590: 7a 65 64 20 6f 72 20 72 65 73 65 74 20 74 68 65  zed or reset the
35a0: 20 70 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65   parser error me
35b0: 73 73 61 67 65 20 69 73 20 61 76 61 69 6c 61 62  ssage is availab
35c0: 6c 65 20 76 69 61 0a 20 20 20 20 2a 2a 20 73 71  le via.    ** sq
35d0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
35e0: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nd sqlite3_errco
35f0: 64 65 28 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  de()..    */.   
3600: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
3610: 72 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20  r = (const char 
3620: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
3630: 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 20  text(db->pErr); 
3640: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
3650: 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72 4d 73  ee(db, v->zErrMs
3660: 67 29 3b 0a 20 20 20 20 69 66 28 20 21 64 62 2d  g);.    if( !db-
3670: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
3680: 0a 20 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d 73  .      v->zErrMs
3690: 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
36a0: 44 75 70 28 64 62 2c 20 7a 45 72 72 29 3b 0a 20  Dup(db, zErr);. 
36b0: 20 20 20 20 20 76 2d 3e 72 63 20 3d 20 72 63 32       v->rc = rc2
36c0: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ;.    } else {. 
36d0: 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d 73 67 20       v->zErrMsg 
36e0: 3d 20 30 3b 0a 20 20 20 20 20 20 76 2d 3e 72 63  = 0;.      v->rc
36f0: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   = rc = SQLITE_N
3700: 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  OMEM;.    }.  }.
3710: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
3720: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20  iExit(db, rc);. 
3730: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
3740: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
3750: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
3760: 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  ./*.** Extract t
3770: 68 65 20 75 73 65 72 20 64 61 74 61 20 66 72 6f  he user data fro
3780: 6d 20 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  m a sqlite3_cont
3790: 65 78 74 20 73 74 72 75 63 74 75 72 65 20 61 6e  ext structure an
37a0: 64 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f  d return a.** po
37b0: 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a  inter to it..*/.
37c0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 73  void *sqlite3_us
37d0: 65 72 5f 64 61 74 61 28 73 71 6c 69 74 65 33 5f  er_data(sqlite3_
37e0: 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61  context *p){.  a
37f0: 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70  ssert( p && p->p
3800: 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72 6e  Func );.  return
3810: 20 70 2d 3e 70 46 75 6e 63 2d 3e 70 55 73 65 72   p->pFunc->pUser
3820: 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  Data;.}../*.** E
3830: 78 74 72 61 63 74 20 74 68 65 20 75 73 65 72 20  xtract the user 
3840: 64 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69  data from a sqli
3850: 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75  te3_context stru
3860: 63 74 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e  cture and return
3870: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
3880: 20 69 74 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20   it..*/.sqlite3 
3890: 2a 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  *sqlite3_context
38a0: 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69 74  _db_handle(sqlit
38b0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a  e3_context *p){.
38c0: 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70    assert( p && p
38d0: 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72 65 74  ->pFunc );.  ret
38e0: 75 72 6e 20 70 2d 3e 73 2e 64 62 3b 0a 7d 0a 0a  urn p->s.db;.}..
38f0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
3900: 69 6e 67 20 69 73 20 74 68 65 20 69 6d 70 6c 65  ing is the imple
3910: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20  mentation of an 
3920: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  SQL function tha
3930: 74 20 61 6c 77 61 79 73 0a 2a 2a 20 66 61 69 6c  t always.** fail
3940: 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
3950: 6d 65 73 73 61 67 65 20 73 74 61 74 69 6e 67 20  message stating 
3960: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
3970: 6e 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  n is used in the
3980: 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f 6e 74 65 78  .** wrong contex
3990: 74 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  t.  The sqlite3_
39a0: 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
39b0: 6e 28 29 20 41 50 49 20 6d 69 67 68 74 20 63 6f  n() API might co
39c0: 6e 73 74 72 75 63 74 0a 2a 2a 20 53 51 4c 20 66  nstruct.** SQL f
39d0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73 65  unction that use
39e0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 73 6f   this routine so
39f0: 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69   that the functi
3a00: 6f 6e 73 20 77 69 6c 6c 20 65 78 69 73 74 0a 2a  ons will exist.*
3a10: 2a 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  * for name resol
3a20: 75 74 69 6f 6e 20 62 75 74 20 61 72 65 20 61 63  ution but are ac
3a30: 74 75 61 6c 6c 79 20 6f 76 65 72 6c 6f 61 64 65  tually overloade
3a40: 64 20 62 79 20 74 68 65 20 78 46 69 6e 64 46 75  d by the xFindFu
3a50: 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f 64  nction.** method
3a60: 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
3a70: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
3a80: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
3a90: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  on(.  sqlite3_co
3aa0: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
3ab0: 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e   /* The function
3ac0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74   calling context
3ad0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65   */.  int NotUse
3ae0: 64 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d,              
3af0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
3b00: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
3b10: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  unction */.  sql
3b20: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 4e 6f 74  ite3_value **Not
3b30: 55 73 65 64 32 20 20 20 2f 2a 20 56 61 6c 75 65  Used2   /* Value
3b40: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3b50: 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  t */.){.  const 
3b60: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 63 6f  char *zName = co
3b70: 6e 74 65 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a 4e  ntext->pFunc->zN
3b80: 61 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  ame;.  char *zEr
3b90: 72 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  r;.  UNUSED_PARA
3ba0: 4d 45 54 45 52 32 28 4e 6f 74 55 73 65 64 2c 20  METER2(NotUsed, 
3bb0: 4e 6f 74 55 73 65 64 32 29 3b 0a 20 20 7a 45 72  NotUsed2);.  zEr
3bc0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
3bd0: 6e 74 66 28 0a 20 20 20 20 20 20 22 75 6e 61 62  ntf(.      "unab
3be0: 6c 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69  le to use functi
3bf0: 6f 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71  on %s in the req
3c00: 75 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c  uested context",
3c10: 20 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74   zName);.  sqlit
3c20: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
3c30: 63 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d  context, zErr, -
3c40: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  1);.  sqlite3_fr
3c50: 65 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  ee(zErr);.}../*.
3c60: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72  ** Allocate or r
3c70: 65 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67  eturn the aggreg
3c80: 61 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20  ate context for 
3c90: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  a user function.
3ca0: 20 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65    A new.** conte
3cb0: 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
3cc0: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c  on the first cal
3cd0: 6c 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63  l.  Subsequent c
3ce0: 61 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a  alls return the.
3cf0: 2a 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20  ** same context 
3d00: 74 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65  that was returne
3d10: 64 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73  d on prior calls
3d20: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
3d30: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
3d40: 74 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e  text(sqlite3_con
3d50: 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79  text *p, int nBy
3d60: 74 65 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  te){.  Mem *pMem
3d70: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26  ;.  assert( p &&
3d80: 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e   p->pFunc && p->
3d90: 70 46 75 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a  pFunc->xStep );.
3da0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3db0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d 3e  3_mutex_held(p->
3dc0: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
3dd0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d    pMem = p->pMem
3de0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 42  ;.  testcase( nB
3df0: 79 74 65 3c 30 20 29 3b 0a 20 20 69 66 28 20 28  yte<0 );.  if( (
3e00: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
3e10: 4d 5f 41 67 67 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Agg)==0 ){.   
3e20: 20 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b   if( nByte<=0 ){
3e30: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3e40: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
3e50: 72 6e 61 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rnal(pMem);.    
3e60: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
3e70: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
3e80: 70 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  pMem->z = 0;.   
3e90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
3ea0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
3eb0: 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29  (pMem, nByte, 0)
3ec0: 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  ;.      pMem->fl
3ed0: 61 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20  ags = MEM_Agg;. 
3ee0: 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65       pMem->u.pDe
3ef0: 66 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20  f = p->pFunc;.  
3f00: 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 20      if( pMem->z 
3f10: 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
3f20: 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42  t(pMem->z, 0, nB
3f30: 79 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  yte);.      }.  
3f40: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
3f50: 20 28 76 6f 69 64 2a 29 70 4d 65 6d 2d 3e 7a 3b   (void*)pMem->z;
3f60: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3f70: 20 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61   the auxilary da
3f80: 74 61 20 70 6f 69 6e 74 65 72 2c 20 69 66 20 61  ta pointer, if a
3f90: 6e 79 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67  ny, for the iArg
3fa0: 27 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  'th argument to.
3fb0: 2a 2a 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  ** the user-func
3fc0: 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20  tion defined by 
3fd0: 70 43 74 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  pCtx..*/.void *s
3fe0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 78 64 61  qlite3_get_auxda
3ff0: 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ta(sqlite3_conte
4000: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 41  xt *pCtx, int iA
4010: 72 67 29 7b 0a 20 20 56 64 62 65 46 75 6e 63 20  rg){.  VdbeFunc 
4020: 2a 70 56 64 62 65 46 75 6e 63 3b 0a 0a 20 20 61  *pVdbeFunc;..  a
4030: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
4040: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
4050: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
4060: 20 20 70 56 64 62 65 46 75 6e 63 20 3d 20 70 43    pVdbeFunc = pC
4070: 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b 0a 20  tx->pVdbeFunc;. 
4080: 20 69 66 28 20 21 70 56 64 62 65 46 75 6e 63 20   if( !pVdbeFunc 
4090: 7c 7c 20 69 41 72 67 3e 3d 70 56 64 62 65 46 75  || iArg>=pVdbeFu
40a0: 6e 63 2d 3e 6e 41 75 78 20 7c 7c 20 69 41 72 67  nc->nAux || iArg
40b0: 3c 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  <0 ){.    return
40c0: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
40d0: 20 70 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75   pVdbeFunc->apAu
40e0: 78 5b 69 41 72 67 5d 2e 70 41 75 78 3b 0a 7d 0a  x[iArg].pAux;.}.
40f0: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 61  ./*.** Set the a
4100: 75 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69  uxilary data poi
4110: 6e 74 65 72 20 61 6e 64 20 64 65 6c 65 74 65 20  nter and delete 
4120: 66 75 6e 63 74 69 6f 6e 2c 20 66 6f 72 20 74 68  function, for th
4130: 65 20 69 41 72 67 27 74 68 0a 2a 2a 20 61 72 67  e iArg'th.** arg
4140: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 75 73 65  ument to the use
4150: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r-function defin
4160: 65 64 20 62 79 20 70 43 74 78 2e 20 41 6e 79 20  ed by pCtx. Any 
4170: 70 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 69  previous value i
4180: 73 0a 2a 2a 20 64 65 6c 65 74 65 64 20 62 79 20  s.** deleted by 
4190: 63 61 6c 6c 69 6e 67 20 74 68 65 20 64 65 6c 65  calling the dele
41a0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  te function spec
41b0: 69 66 69 65 64 20 77 68 65 6e 20 69 74 20 77 61  ified when it wa
41c0: 73 20 73 65 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  s set..*/.void s
41d0: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
41e0: 74 61 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ta(.  sqlite3_co
41f0: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20  ntext *pCtx, .  
4200: 69 6e 74 20 69 41 72 67 2c 20 0a 20 20 76 6f 69  int iArg, .  voi
4210: 64 20 2a 70 41 75 78 2c 20 0a 20 20 76 6f 69 64  d *pAux, .  void
4220: 20 28 2a 78 44 65 6c 65 74 65 29 28 76 6f 69 64   (*xDelete)(void
4230: 2a 29 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 41  *).){.  struct A
4240: 75 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61  uxData *pAuxData
4250: 3b 0a 20 20 56 64 62 65 46 75 6e 63 20 2a 70 56  ;.  VdbeFunc *pV
4260: 64 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 69  dbeFunc;.  if( i
4270: 41 72 67 3c 30 20 29 20 67 6f 74 6f 20 66 61 69  Arg<0 ) goto fai
4280: 6c 65 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  led;..  assert( 
4290: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
42a0: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
42b0: 75 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65  utex) );.  pVdbe
42c0: 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64  Func = pCtx->pVd
42d0: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70  beFunc;.  if( !p
42e0: 56 64 62 65 46 75 6e 63 20 7c 7c 20 70 56 64 62  VdbeFunc || pVdb
42f0: 65 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72  eFunc->nAux<=iAr
4300: 67 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 75  g ){.    int nAu
4310: 78 20 3d 20 28 70 56 64 62 65 46 75 6e 63 20 3f  x = (pVdbeFunc ?
4320: 20 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78   pVdbeFunc->nAux
4330: 20 3a 20 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e   : 0);.    int n
4340: 4d 61 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28  Malloc = sizeof(
4350: 56 64 62 65 46 75 6e 63 29 20 2b 20 73 69 7a 65  VdbeFunc) + size
4360: 6f 66 28 73 74 72 75 63 74 20 41 75 78 44 61 74  of(struct AuxDat
4370: 61 29 2a 69 41 72 67 3b 0a 20 20 20 20 70 56 64  a)*iArg;.    pVd
4380: 62 65 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33  beFunc = sqlite3
4390: 44 62 52 65 61 6c 6c 6f 63 28 70 43 74 78 2d 3e  DbRealloc(pCtx->
43a0: 73 2e 64 62 2c 20 70 56 64 62 65 46 75 6e 63 2c  s.db, pVdbeFunc,
43b0: 20 6e 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69   nMalloc);.    i
43c0: 66 28 20 21 70 56 64 62 65 46 75 6e 63 20 29 7b  f( !pVdbeFunc ){
43d0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 66 61 69 6c  .      goto fail
43e0: 65 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43  ed;.    }.    pC
43f0: 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 20 3d 20  tx->pVdbeFunc = 
4400: 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d  pVdbeFunc;.    m
4410: 65 6d 73 65 74 28 26 70 56 64 62 65 46 75 6e 63  emset(&pVdbeFunc
4420: 2d 3e 61 70 41 75 78 5b 6e 41 75 78 5d 2c 20 30  ->apAux[nAux], 0
4430: 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20  , sizeof(struct 
4440: 41 75 78 44 61 74 61 29 2a 28 69 41 72 67 2b 31  AuxData)*(iArg+1
4450: 2d 6e 41 75 78 29 29 3b 0a 20 20 20 20 70 56 64  -nAux));.    pVd
4460: 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3d 20 69  beFunc->nAux = i
4470: 41 72 67 2b 31 3b 0a 20 20 20 20 70 56 64 62 65  Arg+1;.    pVdbe
4480: 46 75 6e 63 2d 3e 70 46 75 6e 63 20 3d 20 70 43  Func->pFunc = pC
4490: 74 78 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  tx->pFunc;.  }..
44a0: 20 20 70 41 75 78 44 61 74 61 20 3d 20 26 70 56    pAuxData = &pV
44b0: 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69  dbeFunc->apAux[i
44c0: 41 72 67 5d 3b 0a 20 20 69 66 28 20 70 41 75 78  Arg];.  if( pAux
44d0: 44 61 74 61 2d 3e 70 41 75 78 20 26 26 20 70 41  Data->pAux && pA
44e0: 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20  uxData->xDelete 
44f0: 29 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d  ){.    pAuxData-
4500: 3e 78 44 65 6c 65 74 65 28 70 41 75 78 44 61 74  >xDelete(pAuxDat
4510: 61 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 20 20  a->pAux);.  }.  
4520: 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20 3d  pAuxData->pAux =
4530: 20 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61 74   pAux;.  pAuxDat
4540: 61 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44 65  a->xDelete = xDe
4550: 6c 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a  lete;.  return;.
4560: 0a 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20 78  .failed:.  if( x
4570: 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78 44  Delete ){.    xD
4580: 65 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20 7d  elete(pAux);.  }
4590: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
45a0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
45b0: 45 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ED./*.** Return 
45c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
45d0: 6d 65 73 20 74 68 65 20 53 74 65 70 20 66 75 6e  mes the Step fun
45e0: 63 74 69 6f 6e 20 6f 66 20 61 20 61 67 67 72 65  ction of a aggre
45f0: 67 61 74 65 20 68 61 73 20 62 65 65 6e 20 0a 2a  gate has been .*
4600: 2a 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  * called..**.** 
4610: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
4620: 20 64 65 70 72 65 63 61 74 65 64 2e 20 20 44 6f   deprecated.  Do
4630: 20 6e 6f 74 20 75 73 65 20 69 74 20 66 6f 72 20   not use it for 
4640: 6e 65 77 20 63 6f 64 65 2e 20 20 49 74 20 69 73  new code.  It is
4650: 0a 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79  .** provide only
4660: 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b 69   to avoid breaki
4670: 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65 2e 20  ng legacy code. 
4680: 20 4e 65 77 20 61 67 67 72 65 67 61 74 65 20 66   New aggregate f
4690: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65  unction.** imple
46a0: 6d 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c  mentations shoul
46b0: 64 20 6b 65 65 70 20 74 68 65 69 72 20 6f 77 6e  d keep their own
46c0: 20 63 6f 75 6e 74 73 20 77 69 74 68 69 6e 20 74   counts within t
46d0: 68 65 69 72 20 61 67 67 72 65 67 61 74 65 0a 2a  heir aggregate.*
46e0: 2a 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e  * context..*/.in
46f0: 74 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  t sqlite3_aggreg
4700: 61 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65  ate_count(sqlite
4710: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
4720: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
4730: 3e 70 4d 65 6d 20 26 26 20 70 2d 3e 70 46 75 6e  >pMem && p->pFun
4740: 63 20 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78  c && p->pFunc->x
4750: 53 74 65 70 20 29 3b 0a 20 20 72 65 74 75 72 6e  Step );.  return
4760: 20 70 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23   p->pMem->n;.}.#
4770: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
4780: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
4790: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
47a0: 20 72 65 73 75 6c 74 20 73 65 74 20 66 6f 72 20   result set for 
47b0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 70 53  the statement pS
47c0: 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  tmt..*/.int sqli
47d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
47e0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
47f0: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
4800: 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  Vm = (Vdbe *)pSt
4810: 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d  mt;.  return pVm
4820: 20 3f 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75   ? pVm->nResColu
4830: 6d 6e 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  mn : 0;.}../*.**
4840: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
4850: 65 72 20 6f 66 20 76 61 6c 75 65 73 20 61 76 61  er of values ava
4860: 69 6c 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20  ilable from the 
4870: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74  current row of t
4880: 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  he.** currently 
4890: 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
48a0: 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e  ent pStmt..*/.in
48b0: 74 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  t sqlite3_data_c
48c0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  ount(sqlite3_stm
48d0: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
48e0: 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a  e *pVm = (Vdbe *
48f0: 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 70 56  )pStmt;.  if( pV
4900: 6d 3d 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65  m==0 || pVm->pRe
4910: 73 75 6c 74 53 65 74 3d 3d 30 20 29 20 72 65 74  sultSet==0 ) ret
4920: 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  urn 0;.  return 
4930: 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b  pVm->nResColumn;
4940: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  .}.../*.** Check
4950: 20 74 6f 20 73 65 65 20 69 66 20 63 6f 6c 75 6d   to see if colum
4960: 6e 20 69 43 6f 6c 20 6f 66 20 74 68 65 20 67 69  n iCol of the gi
4970: 76 65 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ven statement is
4980: 20 76 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69   valid.  If.** i
4990: 74 20 69 73 2c 20 72 65 74 75 72 6e 20 61 20 70  t is, return a p
49a0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 4d 65  ointer to the Me
49b0: 6d 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20  m for the value 
49c0: 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  of that column..
49d0: 2a 2a 20 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f  ** If iCol is no
49e0: 74 20 76 61 6c 69 64 2c 20 72 65 74 75 72 6e 20  t valid, return 
49f0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
4a00: 65 6d 20 77 68 69 63 68 20 68 61 73 20 61 20 76  em which has a v
4a10: 61 6c 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e  alue.** of NULL.
4a20: 0a 2a 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a  .*/.static Mem *
4a30: 63 6f 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65  columnMem(sqlite
4a40: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
4a50: 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70  nt i){.  Vdbe *p
4a60: 56 6d 3b 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a  Vm;.  int vals;.
4a70: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20    Mem *pOut;..  
4a80: 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53  pVm = (Vdbe *)pS
4a90: 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26  tmt;.  if( pVm &
4aa0: 26 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65  & pVm->pResultSe
4ab0: 74 21 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e  t!=0 && i<pVm->n
4ac0: 52 65 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d  ResColumn && i>=
4ad0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
4ae0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d  _mutex_enter(pVm
4af0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
4b00: 20 20 76 61 6c 73 20 3d 20 73 71 6c 69 74 65 33    vals = sqlite3
4b10: 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d  _data_count(pStm
4b20: 74 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26  t);.    pOut = &
4b30: 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b  pVm->pResultSet[
4b40: 69 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  i];.  }else{.   
4b50: 20 2f 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65   /* If the value
4b60: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 73   passed as the s
4b70: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 69  econd argument i
4b80: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20  s out of range, 
4b90: 72 65 74 75 72 6e 0a 20 20 20 20 2a 2a 20 61 20  return.    ** a 
4ba0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
4bb0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 69 63 20  ollowing static 
4bc0: 4d 65 6d 20 6f 62 6a 65 63 74 20 77 68 69 63 68  Mem object which
4bd0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 20 20   contains the.  
4be0: 20 20 2a 2a 20 76 61 6c 75 65 20 53 51 4c 20 4e    ** value SQL N
4bf0: 55 4c 4c 2e 20 45 76 65 6e 20 74 68 6f 75 67 68  ULL. Even though
4c00: 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63 74 75   the Mem structu
4c10: 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  re contains an e
4c20: 6c 65 6d 65 6e 74 0a 20 20 20 20 2a 2a 20 6f 66  lement.    ** of
4c30: 20 74 79 70 65 20 69 36 34 2c 20 6f 6e 20 63 65   type i64, on ce
4c40: 72 74 61 69 6e 20 61 72 63 68 69 74 65 63 74 75  rtain architectu
4c50: 72 65 20 28 78 38 36 29 20 77 69 74 68 20 63 65  re (x86) with ce
4c60: 72 74 61 69 6e 20 63 6f 6d 70 69 6c 65 72 0a 20  rtain compiler. 
4c70: 20 20 20 2a 2a 20 73 77 69 74 63 68 65 73 20 28     ** switches (
4c80: 2d 4f 73 29 2c 20 67 63 63 20 6d 61 79 20 61 6c  -Os), gcc may al
4c90: 69 67 6e 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a  ign this Mem obj
4ca0: 65 63 74 20 6f 6e 20 61 20 34 2d 62 79 74 65 20  ect on a 4-byte 
4cb0: 62 6f 75 6e 64 61 72 79 0a 20 20 20 20 2a 2a 20  boundary.    ** 
4cc0: 69 6e 73 74 65 61 64 20 6f 66 20 61 6e 20 38 2d  instead of an 8-
4cd0: 62 79 74 65 20 6f 6e 65 2e 20 54 68 69 73 20 61  byte one. This a
4ce0: 6c 6c 20 77 6f 72 6b 73 20 66 69 6e 65 2c 20 65  ll works fine, e
4cf0: 78 63 65 70 74 20 74 68 61 74 20 77 68 65 6e 0a  xcept that when.
4d00: 20 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 77      ** running w
4d10: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47  ith SQLITE_DEBUG
4d20: 20 64 65 66 69 6e 65 64 20 74 68 65 20 53 51 4c   defined the SQL
4d30: 69 74 65 20 63 6f 64 65 20 73 6f 6d 65 74 69 6d  ite code sometim
4d40: 65 73 20 61 73 73 65 72 74 28 29 73 0a 20 20 20  es assert()s.   
4d50: 20 2a 2a 20 74 68 61 74 20 61 20 4d 65 6d 20 73   ** that a Mem s
4d60: 74 72 75 63 74 75 72 65 20 69 73 20 6c 6f 63 61  tructure is loca
4d70: 74 65 64 20 6f 6e 20 61 6e 20 38 2d 62 79 74 65  ted on an 8-byte
4d80: 20 62 6f 75 6e 64 61 72 79 2e 20 54 6f 20 70 72   boundary. To pr
4d90: 65 76 65 6e 74 0a 20 20 20 20 2a 2a 20 74 68 69  event.    ** thi
4da0: 73 20 61 73 73 65 72 74 28 29 20 66 72 6f 6d 20  s assert() from 
4db0: 66 61 69 6c 69 6e 67 2c 20 77 68 65 6e 20 62 75  failing, when bu
4dc0: 69 6c 64 69 6e 67 20 77 69 74 68 20 53 51 4c 49  ilding with SQLI
4dd0: 54 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65 64  TE_DEBUG defined
4de0: 0a 20 20 20 20 2a 2a 20 75 73 69 6e 67 20 67 63  .    ** using gc
4df0: 63 2c 20 66 6f 72 63 65 20 6e 75 6c 6c 4d 65 6d  c, force nullMem
4e00: 20 74 6f 20 62 65 20 38 2d 62 79 74 65 20 61 6c   to be 8-byte al
4e10: 69 67 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  igned using the 
4e20: 6d 61 67 69 63 61 6c 0a 20 20 20 20 2a 2a 20 5f  magical.    ** _
4e30: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c  _attribute__((al
4e40: 69 67 6e 65 64 28 38 29 29 29 20 6d 61 63 72 6f  igned(8))) macro
4e50: 2e 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63  .  */.    static
4e60: 20 63 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d   const Mem nullM
4e70: 65 6d 20 0a 23 69 66 20 64 65 66 69 6e 65 64 28  em .#if defined(
4e80: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4e90: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
4ea0: 5f 29 0a 20 20 20 20 20 20 5f 5f 61 74 74 72 69  _).      __attri
4eb0: 62 75 74 65 5f 5f 28 28 61 6c 69 67 6e 65 64 28  bute__((aligned(
4ec0: 38 29 29 29 20 0a 23 65 6e 64 69 66 0a 20 20 20  8))) .#endif.   
4ed0: 20 20 20 3d 20 7b 7b 30 7d 2c 20 28 64 6f 75 62     = {{0}, (doub
4ee0: 6c 65 29 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20  le)0, 0, "", 0, 
4ef0: 4d 45 4d 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45  MEM_Null, SQLITE
4f00: 5f 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d  _NULL, 0, 0, 0 }
4f10: 3b 0a 0a 20 20 20 20 69 66 28 20 70 56 6d 20 26  ;..    if( pVm &
4f20: 26 20 41 4c 57 41 59 53 28 70 56 6d 2d 3e 64 62  & ALWAYS(pVm->db
4f30: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4f40: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
4f50: 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  Vm->db->mutex);.
4f60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
4f70: 6f 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49  or(pVm->db, SQLI
4f80: 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20  TE_RANGE, 0);.  
4f90: 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28    }.    pOut = (
4fa0: 4d 65 6d 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20  Mem*)&nullMem;. 
4fb0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74   }.  return pOut
4fc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
4fd0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
4fe0: 65 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e  ed after invokin
4ff0: 67 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  g an sqlite3_val
5000: 75 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  ue_XXX function 
5010: 6f 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  on a .** column 
5020: 76 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61  value (i.e. a va
5030: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
5040: 65 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51  evaluating an SQ
5050: 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  L expression in 
5060: 74 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69  the.** select li
5070: 73 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  st of a SELECT s
5080: 74 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d  tatement) that m
5090: 61 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f  ay cause a mallo
50a0: 63 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20  c() failure. If 
50b0: 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  .** malloc() has
50c0: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72   failed, the thr
50d0: 65 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65  eads mallocFaile
50e0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
50f0: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
5100: 0a 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74  .** code of stat
5110: 65 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20  ement pStmt set 
5120: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  to SQLITE_NOMEM.
5130: 0a 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61  .**.** Specifica
5140: 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c  lly, this is cal
5150: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a  led from within:
5160: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  .**.**     sqlit
5170: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a  e3_column_int().
5180: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
5190: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a  olumn_int64().**
51a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
51b0: 75 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20  umn_text().**   
51c0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
51d0: 5f 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20  _text16().**    
51e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
51f0: 72 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71  real().**     sq
5200: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
5210: 65 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  es().**     sqli
5220: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
5230: 31 36 28 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e  16().**.** But n
5240: 6f 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63  ot for sqlite3_c
5250: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68  olumn_blob(), wh
5260: 69 63 68 20 6e 65 76 65 72 20 63 61 6c 6c 73 20  ich never calls 
5270: 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61  malloc()..*/.sta
5280: 74 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d  tic void columnM
5290: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c  allocFailure(sql
52a0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
52b0: 29 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c  ).{.  /* If mall
52c0: 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69  oc() failed duri
52d0: 6e 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63  ng an encoding c
52e0: 6f 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e  onversion within
52f0: 20 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   an.  ** sqlite3
5300: 5f 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c  _column_XXX API,
5310: 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65   then set the re
5320: 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65  turn code of the
5330: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20   statement to.  
5340: 2a 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  ** SQLITE_NOMEM.
5350: 20 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   The next call t
5360: 6f 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e  o _step() (if an
5370: 79 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53  y) will return S
5380: 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a  QLITE_ERROR.  **
5390: 20 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29   and _finalize()
53a0: 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d   will return NOM
53b0: 45 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20  EM..  */.  Vdbe 
53c0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
53d0: 6d 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20  mt;.  if( p ){. 
53e0: 20 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74     p->rc = sqlit
53f0: 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c  e3ApiExit(p->db,
5400: 20 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c   p->rc);.    sql
5410: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
5420: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
5430: 20 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a    }.}../********
5440: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5450: 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  **** sqlite3_col
5460: 75 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  umn_  **********
5470: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5480: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
5490: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
54a0: 61 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  are used to acce
54b0: 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74  ss elements of t
54c0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a  he current row.*
54d0: 2a 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  * in the result 
54e0: 73 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f  set..*/.const vo
54f0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
5500: 6d 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f  mn_blob(sqlite3_
5510: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
5520: 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i){.  const voi
5530: 64 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20  d *val;.  val = 
5540: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
5550: 6f 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  ob( columnMem(pS
5560: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45  tmt,i) );.  /* E
5570: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65  ven though there
5580: 20 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20   is no encoding 
5590: 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75  conversion, valu
55a0: 65 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20  e_blob() might. 
55b0: 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c   ** need to call
55c0: 20 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70   malloc() to exp
55d0: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f  and the result o
55e0: 66 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a  f a zeroblob() .
55f0: 20 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e    ** expression.
5600: 20 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d   .  */.  columnM
5610: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
5620: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
5630: 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  l;.}.int sqlite3
5640: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71  _column_bytes(sq
5650: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5660: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
5670: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
5680: 61 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75  alue_bytes( colu
5690: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
56a0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
56b0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
56c0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
56d0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  int sqlite3_colu
56e0: 6d 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74  mn_bytes16(sqlit
56f0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5700: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61  int i){.  int va
5710: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5720: 65 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d  e_bytes16( colum
5730: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5740: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5750: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5760: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64   return val;.}.d
5770: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f  ouble sqlite3_co
5780: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69  lumn_double(sqli
5790: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
57a0: 20 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c   int i){.  doubl
57b0: 65 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  e val = sqlite3_
57c0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f  value_double( co
57d0: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
57e0: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
57f0: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
5800: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
5810: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  }.int sqlite3_co
5820: 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33  lumn_int(sqlite3
5830: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
5840: 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20  t i){.  int val 
5850: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
5860: 69 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  int( columnMem(p
5870: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
5880: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
5890: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
58a0: 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f  n val;.}.sqlite_
58b0: 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f  int64 sqlite3_co
58c0: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74  lumn_int64(sqlit
58d0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
58e0: 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65  int i){.  sqlite
58f0: 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c  _int64 val = sql
5900: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
5910: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
5920: 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e  t,i) );.  column
5930: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
5940: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
5950: 61 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69  al;.}.const unsi
5960: 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74  gned char *sqlit
5970: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
5980: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
5990: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f  mt, int i){.  co
59a0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
59b0: 72 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  r *val = sqlite3
59c0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c  _value_text( col
59d0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
59e0: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
59f0: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
5a00: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
5a10: 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
5a20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76  sqlite3_column_v
5a30: 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  alue(sqlite3_stm
5a40: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
5a50: 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  {.  Mem *pOut = 
5a60: 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c  columnMem(pStmt,
5a70: 20 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d   i);.  if( pOut-
5a80: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69  >flags&MEM_Stati
5a90: 63 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  c ){.    pOut->f
5aa0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61  lags &= ~MEM_Sta
5ab0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
5ac0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65  lags |= MEM_Ephe
5ad0: 6d 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d  m;.  }.  columnM
5ae0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
5af0: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73  mt);.  return (s
5b00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70  qlite3_value *)p
5b10: 4f 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  Out;.}.#ifndef S
5b20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
5b30: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
5b40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
5b50: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
5b60: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
5b70: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61    const void *va
5b80: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5b90: 65 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e  e_text16( column
5ba0: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
5bb0: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
5bc0: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
5bd0: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65  return val;.}.#e
5be0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
5bf0: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74  MIT_UTF16 */.int
5c00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5c10: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  type(sqlite3_stm
5c20: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
5c30: 7b 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20  {.  int iType = 
5c40: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
5c50: 70 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  pe( columnMem(pS
5c60: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
5c70: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
5c80: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
5c90: 20 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68   iType;.}../* Th
5ca0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63  e following func
5cb0: 74 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65  tion is experime
5cc0: 6e 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63 74  ntal and subject
5cd0: 20 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a   to change or.**
5ce0: 20 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e   removal */./*in
5cf0: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  t sqlite3_column
5d00: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
5d10: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5d20: 74 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72  t, int i){.**  r
5d30: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61  eturn sqlite3_va
5d40: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
5d50: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
5d60: 74 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a  t,i) );.**}.*/..
5d70: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
5d80: 65 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f  e N-th element o
5d90: 66 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d  f pStmt->pColNam
5da0: 65 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  e[] into a strin
5db0: 67 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63  g using.** xFunc
5dc0: 28 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  () then return t
5dd0: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  hat string.  If 
5de0: 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
5df0: 65 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a  e, return 0..**.
5e00: 2a 2a 20 54 68 65 72 65 20 61 72 65 20 75 70 20  ** There are up 
5e10: 74 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20 65  to 5 names for e
5e20: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65  ach column.  use
5e30: 54 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73 20  Type determines 
5e40: 77 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73  which.** name is
5e50: 20 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72 65   returned.  Here
5e60: 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a   are the names:.
5e70: 2a 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20 20  **.**    0      
5e80: 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  The column name 
5e90: 61 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  as it should be 
5ea0: 64 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f 75  displayed for ou
5eb0: 74 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20 20  tput.**    1    
5ec0: 20 20 54 68 65 20 64 61 74 61 74 79 70 65 20 6e    The datatype n
5ed0: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ame for the colu
5ee0: 6d 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20 20  mn.**    2      
5ef0: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
5f00: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 74 68  database that th
5f10: 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  e column derives
5f20: 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20   from.**    3   
5f30: 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74     The name of t
5f40: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
5f50: 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  e column derives
5f60: 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20   from.**    4   
5f70: 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74     The name of t
5f80: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  he table column 
5f90: 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
5fa0: 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66  column derives f
5fb0: 72 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  rom.**.** If the
5fc0: 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 61   result is not a
5fd0: 20 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72   simple column r
5fe0: 65 66 65 72 65 6e 63 65 20 28 69 66 20 69 74 20  eference (if it 
5ff0: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
6000: 0a 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e  .** or a constan
6010: 74 29 20 74 68 65 6e 20 75 73 65 54 79 70 65 73  t) then useTypes
6020: 20 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65 74   2, 3, and 4 ret
6030: 75 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61  urn NULL..*/.sta
6040: 74 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tic const void *
6050: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71  columnName(.  sq
6060: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6070: 74 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f  t,.  int N,.  co
6080: 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
6090: 63 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20  c)(Mem*),.  int 
60a0: 75 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e  useType.){.  con
60b0: 73 74 20 76 6f 69 64 20 2a 72 65 74 20 3d 20 30  st void *ret = 0
60c0: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
60d0: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69  dbe *)pStmt;.  i
60e0: 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 20  nt n;.  sqlite3 
60f0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 0a  *db = p->db;.  .
6100: 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30 20    assert( db!=0 
6110: 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  );.  n = sqlite3
6120: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
6130: 74 6d 74 29 3b 0a 20 20 69 66 28 20 4e 3c 6e 20  tmt);.  if( N<n 
6140: 26 26 20 4e 3e 3d 30 20 29 7b 0a 20 20 20 20 4e  && N>=0 ){.    N
6150: 20 2b 3d 20 75 73 65 54 79 70 65 2a 6e 3b 0a 20   += useType*n;. 
6160: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
6170: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
6180: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  );.    assert( d
6190: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d  b->mallocFailed=
61a0: 3d 30 20 29 3b 0a 20 20 20 20 72 65 74 20 3d 20  =0 );.    ret = 
61b0: 78 46 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61  xFunc(&p->aColNa
61c0: 6d 65 5b 4e 5d 29 3b 0a 20 20 20 20 20 2f 2a 20  me[N]);.     /* 
61d0: 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76  A malloc may hav
61e0: 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65 20  e failed inside 
61f0: 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29 20 63  of the xFunc() c
6200: 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20 20  all. If this.   
6210: 20 2a 2a 20 69 73 20 74 68 65 20 63 61 73 65 2c   ** is the case,
6220: 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c 6c 6f   clear the mallo
6230: 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61 6e 64  cFailed flag and
6240: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20 20   return NULL..  
6250: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
6260: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
6270: 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
6280: 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20  cFailed = 0;.   
6290: 20 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20 20     ret = 0;.    
62a0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  }.    sqlite3_mu
62b0: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
62c0: 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tex);.  }.  retu
62d0: 72 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn ret;.}../*.**
62e0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
62f0: 20 6f 66 20 74 68 65 20 4e 74 68 20 63 6f 6c 75   of the Nth colu
6300: 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
6310: 20 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79   set returned by
6320: 20 53 51 4c 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   SQL.** statemen
6330: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73  t pStmt..*/.cons
6340: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6350: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c 69  column_name(sqli
6360: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
6370: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
6380: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
6390: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
63a0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
63b0: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
63c0: 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f  e_text, COLNAME_
63d0: 4e 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  NAME);.}.#ifndef
63e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
63f0: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
6400: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
6410: 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  me16(sqlite3_stm
6420: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
6430: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
6440: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
6450: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
6460: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
6470: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
6480: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29  6, COLNAME_NAME)
6490: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
64a0: 2a 20 43 6f 6e 73 74 72 61 69 6e 74 3a 20 20 49  * Constraint:  I
64b0: 66 20 79 6f 75 20 68 61 76 65 20 45 4e 41 42 4c  f you have ENABL
64c0: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
64d0: 41 20 74 68 65 6e 20 79 6f 75 20 6d 75 73 74 0a  A then you must.
64e0: 2a 2a 20 6e 6f 74 20 64 65 66 69 6e 65 20 4f 4d  ** not define OM
64f0: 49 54 5f 44 45 43 4c 54 59 50 45 2e 0a 2a 2f 0a  IT_DECLTYPE..*/.
6500: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
6510: 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45  TE_OMIT_DECLTYPE
6520: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
6530: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6540: 4e 5f 4d 45 54 41 44 41 54 41 29 0a 23 20 65 72  N_METADATA).# er
6550: 72 6f 72 20 22 4d 75 73 74 20 6e 6f 74 20 64 65  ror "Must not de
6560: 66 69 6e 65 20 62 6f 74 68 20 53 51 4c 49 54 45  fine both SQLITE
6570: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20 5c  _OMIT_DECLTYPE \
6580: 0a 20 20 20 20 20 20 20 20 20 61 6e 64 20 53 51  .         and SQ
6590: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
65a0: 4d 4e 5f 4d 45 54 41 44 41 54 41 22 0a 23 65 6e  MN_METADATA".#en
65b0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
65c0: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
65d0: 45 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  E./*.** Return t
65e0: 68 65 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72  he column declar
65f0: 61 74 69 6f 6e 20 74 79 70 65 20 28 69 66 20 61  ation type (if a
6600: 70 70 6c 69 63 61 62 6c 65 29 20 6f 66 20 74 68  pplicable) of th
6610: 65 20 27 69 27 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e 'i'th column.*
6620: 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
6630: 73 65 74 20 6f 66 20 53 51 4c 20 73 74 61 74 65  set of SQL state
6640: 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63  ment pStmt..*/.c
6650: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
6660: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
6670: 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  pe(sqlite3_stmt 
6680: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
6690: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
66a0: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
66b0: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
66c0: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
66d0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43  e3_value_text, C
66e0: 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29  OLNAME_DECLTYPE)
66f0: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
6700: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
6710: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
6720: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
6730: 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  e16(sqlite3_stmt
6740: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
6750: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6760: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6770: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
6780: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6790: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
67a0: 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59  , COLNAME_DECLTY
67b0: 50 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  PE);.}.#endif /*
67c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
67d0: 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  16 */.#endif /* 
67e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
67f0: 54 59 50 45 20 2a 2f 0a 0a 23 69 66 64 65 66 20  TYPE */..#ifdef 
6800: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
6810: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a  LUMN_METADATA./*
6820: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
6830: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
6840: 61 73 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61  ase from which a
6850: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64   result column d
6860: 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20  erives..** NULL 
6870: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
6880: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
6890: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
68a0: 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72  n or constant or
68b0: 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  .** anything els
68c0: 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61  e which is not a
68d0: 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66  n unabiguous ref
68e0: 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61  erence to a data
68f0: 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  base column..*/.
6900: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
6910: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
6920: 61 73 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33  ase_name(sqlite3
6930: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6940: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6950: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6960: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6970: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
6980: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6990: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54  ext, COLNAME_DAT
69a0: 41 42 41 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  ABASE);.}.#ifnde
69b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
69c0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
69d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
69e0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73  atabase_name16(s
69f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
6a00: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
6a10: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
6a20: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
6a30: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
6a40: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
6a50: 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c  alue_text16, COL
6a60: 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a  NAME_DATABASE);.
6a70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
6a80: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
6a90: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
6aa0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
6ab0: 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20  able from which 
6ac0: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  a result column 
6ad0: 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c  derives..** NULL
6ae0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
6af0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
6b00: 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
6b10: 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f  on or constant o
6b20: 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c  r.** anything el
6b30: 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20  se which is not 
6b40: 61 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65  an unabiguous re
6b50: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74  ference to a dat
6b60: 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f  abase column..*/
6b70: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
6b80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
6b90: 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73  e_name(sqlite3_s
6ba0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
6bb0: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
6bc0: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
6bd0: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
6be0: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
6bf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
6c00: 74 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45  t, COLNAME_TABLE
6c10: 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  );.}.#ifndef SQL
6c20: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
6c30: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
6c40: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
6c50: 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73  name16(sqlite3_s
6c60: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
6c70: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
6c80: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
6c90: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
6ca0: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
6cb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
6cc0: 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42  t16, COLNAME_TAB
6cd0: 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  LE);.}.#endif /*
6ce0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6cf0: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  16 */../*.** Ret
6d00: 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
6d10: 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  the table column
6d20: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65   from which a re
6d30: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69  sult column deri
6d40: 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20  ves..** NULL is 
6d50: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
6d60: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73  result column is
6d70: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
6d80: 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a  r constant or.**
6d90: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77   anything else w
6da0: 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75  hich is not an u
6db0: 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65  nabiguous refere
6dc0: 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73  nce to a databas
6dd0: 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e  e column..*/.con
6de0: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
6df0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
6e00: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
6e10: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
6e20: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6e30: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6e40: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
6e50: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6e60: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
6e70: 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b  COLNAME_COLUMN);
6e80: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
6e90: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
6ea0: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
6eb0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
6ec0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
6ed0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
6ee0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
6ef0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
6f00: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
6f10: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
6f20: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6f30: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55  16, COLNAME_COLU
6f40: 4d 4e 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  MN);.}.#endif /*
6f50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6f60: 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  16 */.#endif /* 
6f70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
6f80: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f  LUMN_METADATA */
6f90: 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
6fa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6fb0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  *** sqlite3_bind
6fc0: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
6fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
6fe0: 2a 20 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75  * .** Routines u
6ff0: 73 65 64 20 74 6f 20 61 74 74 61 63 68 20 76 61  sed to attach va
7000: 6c 75 65 73 20 74 6f 20 77 69 6c 64 63 61 72 64  lues to wildcard
7010: 73 20 69 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20  s in a compiled 
7020: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  SQL statement..*
7030: 2f 0a 2f 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74  /./*.** Unbind t
7040: 68 65 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74  he value bound t
7050: 6f 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20  o variable i in 
7060: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
7070: 70 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 0a  p. This is the .
7080: 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 62  ** the same as b
7090: 69 6e 64 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61  inding a NULL va
70a0: 6c 75 65 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d  lue to the colum
70b0: 6e 2e 20 49 66 20 74 68 65 20 22 69 22 20 70 61  n. If the "i" pa
70c0: 72 61 6d 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75  rameter is.** ou
70d0: 74 20 6f 66 20 72 61 6e 67 65 2c 20 74 68 65 6e  t of range, then
70e0: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 69 73   SQLITE_RANGE is
70f0: 20 72 65 74 75 72 6e 65 64 2e 20 4f 74 68 65 77   returned. Othew
7100: 69 73 65 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a  ise SQLITE_OK..*
7110: 2a 0a 2a 2a 20 41 20 73 75 63 63 65 73 73 66 75  *.** A successfu
7120: 6c 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  l evaluation of 
7130: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61 63 71  this routine acq
7140: 75 69 72 65 73 20 74 68 65 20 6d 75 74 65 78 20  uires the mutex 
7150: 6f 6e 20 70 2e 0a 2a 2a 20 74 68 65 20 6d 75 74  on p..** the mut
7160: 65 78 20 69 73 20 72 65 6c 65 61 73 65 64 20 69  ex is released i
7170: 66 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72  f any kind of er
7180: 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a  ror occurs..**.*
7190: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
71a0: 20 73 74 6f 72 65 64 20 69 6e 20 64 61 74 61 62   stored in datab
71b0: 61 73 65 20 70 2d 3e 64 62 20 69 73 20 6f 76 65  ase p->db is ove
71c0: 72 77 72 69 74 74 65 6e 20 77 69 74 68 20 74 68  rwritten with th
71d0: 65 20 72 65 74 75 72 6e 0a 2a 2a 20 76 61 6c 75  e return.** valu
71e0: 65 20 69 6e 20 61 6e 79 20 63 61 73 65 2e 0a 2a  e in any case..*
71f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 64 62  /.static int vdb
7200: 65 55 6e 62 69 6e 64 28 56 64 62 65 20 2a 70 2c  eUnbind(Vdbe *p,
7210: 20 69 6e 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a   int i){.  Mem *
7220: 70 56 61 72 3b 0a 20 20 69 66 28 20 76 64 62 65  pVar;.  if( vdbe
7230: 53 61 66 65 74 79 4e 6f 74 4e 75 6c 6c 28 70 29  SafetyNotNull(p)
7240: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
7250: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
7260: 54 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  T;.  }.  sqlite3
7270: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e  _mutex_enter(p->
7280: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66  db->mutex);.  if
7290: 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45  ( p->magic!=VDBE
72a0: 5f 4d 41 47 49 43 5f 52 55 4e 20 7c 7c 20 70 2d  _MAGIC_RUN || p-
72b0: 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  >pc>=0 ){.    sq
72c0: 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62  lite3Error(p->db
72d0: 2c 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c  , SQLITE_MISUSE,
72e0: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
72f0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e  _mutex_leave(p->
7300: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
7310: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 53 51 4c 49  sqlite3_log(SQLI
7320: 54 45 5f 4d 49 53 55 53 45 2c 20 0a 20 20 20 20  TE_MISUSE, .    
7330: 20 20 20 20 22 62 69 6e 64 20 6f 6e 20 61 20 62      "bind on a b
7340: 75 73 79 20 70 72 65 70 61 72 65 64 20 73 74 61  usy prepared sta
7350: 74 65 6d 65 6e 74 3a 20 5b 25 73 5d 22 2c 20 70  tement: [%s]", p
7360: 2d 3e 7a 53 71 6c 29 3b 0a 20 20 20 20 72 65 74  ->zSql);.    ret
7370: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
7380: 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69 66  E_BKPT;.  }.  if
7390: 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56  ( i<1 || i>p->nV
73a0: 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ar ){.    sqlite
73b0: 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51  3Error(p->db, SQ
73c0: 4c 49 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a  LITE_RANGE, 0);.
73d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
73e0: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
73f0: 75 74 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72  utex);.    retur
7400: 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a  n SQLITE_RANGE;.
7410: 20 20 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61    }.  i--;.  pVa
7420: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b  r = &p->aVar[i];
7430: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
7440: 6d 52 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a  mRelease(pVar);.
7450: 20 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20    pVar->flags = 
7460: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69  MEM_Null;.  sqli
7470: 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20  te3Error(p->db, 
7480: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 0a  SQLITE_OK, 0);..
7490: 20 20 2f 2a 20 49 66 20 74 68 65 20 62 69 74 20    /* If the bit 
74a0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
74b0: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
74c0: 6e 20 56 64 62 65 2e 65 78 70 6d 61 73 6b 20 69  n Vdbe.expmask i
74d0: 73 20 73 65 74 2c 20 74 68 65 6e 20 0a 20 20 2a  s set, then .  *
74e0: 2a 20 62 69 6e 64 69 6e 67 20 61 20 6e 65 77 20  * binding a new 
74f0: 76 61 6c 75 65 20 74 6f 20 74 68 69 73 20 76 61  value to this va
7500: 72 69 61 62 6c 65 20 69 6e 76 61 6c 69 64 61 74  riable invalidat
7510: 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  es the current q
7520: 75 65 72 79 20 70 6c 61 6e 2e 0a 20 20 2a 2f 0a  uery plan..  */.
7530: 20 20 69 66 28 20 70 2d 3e 69 73 50 72 65 70 61    if( p->isPrepa
7540: 72 65 56 32 20 26 26 0a 20 20 20 20 20 28 28 69  reV2 &&.     ((i
7550: 3c 33 32 20 26 26 20 70 2d 3e 65 78 70 6d 61 73  <32 && p->expmas
7560: 6b 20 26 20 28 28 75 33 32 29 31 20 3c 3c 20 69  k & ((u32)1 << i
7570: 29 29 20 7c 7c 20 70 2d 3e 65 78 70 6d 61 73 6b  )) || p->expmask
7580: 3d 3d 30 78 66 66 66 66 66 66 66 66 29 0a 20 20  ==0xffffffff).  
7590: 29 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  ){.    p->expire
75a0: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  d = 1;.  }.  ret
75b0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
75c0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 74  ../*.** Bind a t
75d0: 65 78 74 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75  ext or BLOB valu
75e0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
75f0: 20 62 69 6e 64 54 65 78 74 28 0a 20 20 73 71 6c   bindText(.  sql
7600: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7610: 2c 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65  ,   /* The state
7620: 6d 65 6e 74 20 74 6f 20 62 69 6e 64 20 61 67 61  ment to bind aga
7630: 69 6e 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 2c  inst */.  int i,
7640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7650: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
7660: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 69   parameter to bi
7670: 6e 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f  nd */.  const vo
7680: 69 64 20 2a 7a 44 61 74 61 2c 20 20 20 20 20 2f  id *zData,     /
7690: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  * Pointer to the
76a0: 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e   data to be boun
76b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74 61  d */.  int nData
76c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
76d0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
76e0: 20 6f 66 20 64 61 74 61 20 74 6f 20 62 65 20 62   of data to be b
76f0: 6f 75 6e 64 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ound */.  void (
7700: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20  *xDel)(void*),  
7710: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
7720: 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  or the data */. 
7730: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 20 20 20   u8 encoding    
7740: 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64          /* Encod
7750: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
7760: 20 2a 2f 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70   */.){.  Vdbe *p
7770: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
7780: 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20  ;.  Mem *pVar;. 
7790: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d   int rc;..  rc =
77a0: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
77b0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
77c0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
77d0: 28 20 7a 44 61 74 61 21 3d 30 20 29 7b 0a 20 20  ( zData!=0 ){.  
77e0: 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61      pVar = &p->a
77f0: 56 61 72 5b 69 2d 31 5d 3b 0a 20 20 20 20 20 20  Var[i-1];.      
7800: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7810: 4d 65 6d 53 65 74 53 74 72 28 70 56 61 72 2c 20  MemSetStr(pVar, 
7820: 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 65 6e  zData, nData, en
7830: 63 6f 64 69 6e 67 2c 20 78 44 65 6c 29 3b 0a 20  coding, xDel);. 
7840: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
7850: 49 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f 64 69  ITE_OK && encodi
7860: 6e 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ng!=0 ){.       
7870: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7880: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
7890: 70 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29  pVar, ENC(p->db)
78a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
78b0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d   sqlite3Error(p-
78c0: 3e 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20  >db, rc, 0);.   
78d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41     rc = sqlite3A
78e0: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 72 63  piExit(p->db, rc
78f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
7900: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
7910: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
7920: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
7930: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20  .}.../*.** Bind 
7940: 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 74 6f 20  a blob value to 
7950: 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
7960: 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e   variable..*/.in
7970: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  t sqlite3_bind_b
7980: 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  lob(.  sqlite3_s
7990: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69  tmt *pStmt, .  i
79a0: 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76  nt i, .  const v
79b0: 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69  oid *zData, .  i
79c0: 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69  nt nData, .  voi
79d0: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
79e0: 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e  .){.  return bin
79f0: 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20  dText(pStmt, i, 
7a00: 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44  zData, nData, xD
7a10: 65 6c 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20 73 71  el, 0);.}.int sq
7a20: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
7a30: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
7a40: 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 64 6f  pStmt, int i, do
7a50: 75 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a 20 20  uble rValue){.  
7a60: 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a  int rc;.  Vdbe *
7a70: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
7a80: 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e  t;.  rc = vdbeUn
7a90: 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66  bind(p, i);.  if
7aa0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7ab0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
7ac0: 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26  beMemSetDouble(&
7ad0: 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56  p->aVar[i-1], rV
7ae0: 61 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  alue);.    sqlit
7af0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
7b00: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
7b10: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
7b20: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
7b30: 64 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 73 74  d_int(sqlite3_st
7b40: 6d 74 20 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e  mt *p, int i, in
7b50: 74 20 69 56 61 6c 75 65 29 7b 0a 20 20 72 65 74  t iValue){.  ret
7b60: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
7b70: 5f 69 6e 74 36 34 28 70 2c 20 69 2c 20 28 69 36  _int64(p, i, (i6
7b80: 34 29 69 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74  4)iValue);.}.int
7b90: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
7ba0: 74 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  t64(sqlite3_stmt
7bb0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20   *pStmt, int i, 
7bc0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 56 61  sqlite_int64 iVa
7bd0: 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  lue){.  int rc;.
7be0: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
7bf0: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20  e *)pStmt;.  rc 
7c00: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
7c10: 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  i);.  if( rc==SQ
7c20: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
7c30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7c40: 49 6e 74 36 34 28 26 70 2d 3e 61 56 61 72 5b 69  Int64(&p->aVar[i
7c50: 2d 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20  -1], iValue);.  
7c60: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
7c70: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
7c80: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
7c90: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
7ca0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71  te3_bind_null(sq
7cb0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7cc0: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
7cd0: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
7ce0: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
7cf0: 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64   rc = vdbeUnbind
7d00: 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63  (p, i);.  if( rc
7d10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
7d20: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
7d30: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
7d40: 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tex);.  }.  retu
7d50: 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c  rn rc;.}.int sql
7d60: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 20  ite3_bind_text( 
7d70: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
7d80: 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69  *pStmt, .  int i
7d90: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
7da0: 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e  *zData, .  int n
7db0: 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a  Data, .  void (*
7dc0: 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  xDel)(void*).){.
7dd0: 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78    return bindTex
7de0: 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74  t(pStmt, i, zDat
7df0: 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20  a, nData, xDel, 
7e00: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a  SQLITE_UTF8);.}.
7e10: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7e20: 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
7e30: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
7e40: 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  6(.  sqlite3_stm
7e50: 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74  t *pStmt, .  int
7e60: 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i, .  const voi
7e70: 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74  d *zData, .  int
7e80: 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20   nData, .  void 
7e90: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29  (*xDel)(void*).)
7ea0: 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54  {.  return bindT
7eb0: 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44  ext(pStmt, i, zD
7ec0: 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c  ata, nData, xDel
7ed0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
7ee0: 54 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  TIVE);.}.#endif 
7ef0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7f00: 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  TF16 */.int sqli
7f10: 74 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73  te3_bind_value(s
7f20: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7f30: 6d 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74  mt, int i, const
7f40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
7f50: 70 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72  pValue){.  int r
7f60: 63 3b 0a 20 20 73 77 69 74 63 68 28 20 70 56 61  c;.  switch( pVa
7f70: 6c 75 65 2d 3e 74 79 70 65 20 29 7b 0a 20 20 20  lue->type ){.   
7f80: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
7f90: 45 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63  EGER: {.      rc
7fa0: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
7fb0: 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 2c 20  int64(pStmt, i, 
7fc0: 70 56 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20  pValue->u.i);.  
7fd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
7fe0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
7ff0: 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20  _FLOAT: {.      
8000: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
8010: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
8020: 69 2c 20 70 56 61 6c 75 65 2d 3e 72 29 3b 0a 20  i, pValue->r);. 
8030: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
8040: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
8050: 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20  E_BLOB: {.      
8060: 69 66 28 20 70 56 61 6c 75 65 2d 3e 66 6c 61 67  if( pValue->flag
8070: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
8080: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
8090: 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
80a0: 6f 62 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61  ob(pStmt, i, pVa
80b0: 6c 75 65 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  lue->u.nZero);. 
80c0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
80d0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
80e0: 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74  _bind_blob(pStmt
80f0: 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 7a 2c 20  , i, pValue->z, 
8100: 70 56 61 6c 75 65 2d 3e 6e 2c 53 51 4c 49 54 45  pValue->n,SQLITE
8110: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
8120: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
8130: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
8140: 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a   SQLITE_TEXT: {.
8150: 20 20 20 20 20 20 72 63 20 3d 20 62 69 6e 64 54        rc = bindT
8160: 65 78 74 28 70 53 74 6d 74 2c 69 2c 20 20 70 56  ext(pStmt,i,  pV
8170: 61 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d  alue->z, pValue-
8180: 3e 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  >n, SQLITE_TRANS
8190: 49 45 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20  IENT,.          
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 20 20 20 20 70 56 61 6c 75 65 2d 3e 65 6e 63 29      pValue->enc)
81c0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
81d0: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
81e0: 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  : {.      rc = s
81f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
8200: 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
8210: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
8220: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
8230: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
8240: 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69  nd_zeroblob(sqli
8250: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
8260: 20 69 6e 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a   int i, int n){.
8270: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
8280: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
8290: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
82a0: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
82b0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
82c0: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
82d0: 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c  VdbeMemSetZeroBl
82e0: 6f 62 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d  ob(&p->aVar[i-1]
82f0: 2c 20 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , n);.    sqlite
8300: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
8310: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
8320: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
8330: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
8340: 65 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64  e number of wild
8350: 63 61 72 64 73 20 74 68 61 74 20 63 61 6e 20 62  cards that can b
8360: 65 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 62 6f  e potentially bo
8370: 75 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68 69 73 20  und to..** This 
8380: 72 6f 75 74 69 6e 65 20 69 73 20 61 64 64 65 64  routine is added
8390: 20 74 6f 20 73 75 70 70 6f 72 74 20 44 42 44 3a   to support DBD:
83a0: 3a 53 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69 6e  :SQLite.  .*/.in
83b0: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  t sqlite3_bind_p
83c0: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73  arameter_count(s
83d0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
83e0: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  mt){.  Vdbe *p =
83f0: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
8400: 20 72 65 74 75 72 6e 20 70 20 3f 20 70 2d 3e 6e   return p ? p->n
8410: 56 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  Var : 0;.}../*.*
8420: 2a 20 43 72 65 61 74 65 20 61 20 6d 61 70 70 69  * Create a mappi
8430: 6e 67 20 66 72 6f 6d 20 76 61 72 69 61 62 6c 65  ng from variable
8440: 20 6e 75 6d 62 65 72 73 20 74 6f 20 76 61 72 69   numbers to vari
8450: 61 62 6c 65 20 6e 61 6d 65 73 0a 2a 2a 20 69 6e  able names.** in
8460: 20 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b   the Vdbe.azVar[
8470: 5d 20 61 72 72 61 79 2c 20 69 66 20 73 75 63 68  ] array, if such
8480: 20 61 20 6d 61 70 70 69 6e 67 20 64 6f 65 73 20   a mapping does 
8490: 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 65  not already.** e
84a0: 78 69 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  xist..*/.static 
84b0: 76 6f 69 64 20 63 72 65 61 74 65 56 61 72 4d 61  void createVarMa
84c0: 70 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69 66  p(Vdbe *p){.  if
84d0: 28 20 21 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20  ( !p->okVar ){. 
84e0: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 4f 70     int j;.    Op
84f0: 20 2a 70 4f 70 3b 0a 20 20 20 20 73 71 6c 69 74   *pOp;.    sqlit
8500: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
8510: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
8520: 20 20 2f 2a 20 54 68 65 20 72 61 63 65 20 63 6f    /* The race co
8530: 6e 64 69 74 69 6f 6e 20 68 65 72 65 20 69 73 20  ndition here is 
8540: 68 61 72 6d 6c 65 73 73 2e 20 20 49 66 20 74 77  harmless.  If tw
8550: 6f 20 74 68 72 65 61 64 73 20 63 61 6c 6c 20 74  o threads call t
8560: 68 69 73 0a 20 20 20 20 2a 2a 20 72 6f 75 74 69  his.    ** routi
8570: 6e 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 56  ne on the same V
8580: 64 62 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  dbe at the same 
8590: 74 69 6d 65 2c 20 74 68 65 79 20 62 6f 74 68 20  time, they both 
85a0: 6d 69 67 68 74 20 65 6e 64 0a 20 20 20 20 2a 2a  might end.    **
85b0: 20 75 70 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67   up initializing
85c0: 20 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b   the Vdbe.azVar[
85d0: 5d 20 61 72 72 61 79 2e 20 20 54 68 61 74 20 69  ] array.  That i
85e0: 73 20 61 20 6c 69 74 74 6c 65 20 65 78 74 72 61  s a little extra
85f0: 0a 20 20 20 20 2a 2a 20 77 6f 72 6b 20 62 75 74  .    ** work but
8600: 20 69 74 20 72 65 73 75 6c 74 73 20 69 6e 20 74   it results in t
8610: 68 65 20 73 61 6d 65 20 61 6e 73 77 65 72 2e 0a  he same answer..
8620: 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a      */.    for(j
8630: 3d 30 2c 20 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20  =0, pOp=p->aOp; 
8640: 6a 3c 70 2d 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70  j<p->nOp; j++, p
8650: 4f 70 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  Op++){.      if(
8660: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
8670: 5f 56 61 72 69 61 62 6c 65 20 29 7b 0a 20 20 20  _Variable ){.   
8680: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
8690: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
86a0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
86b0: 20 20 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70        p->azVar[p
86c0: 4f 70 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d  Op->p1-1] = pOp-
86d0: 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20  >p4.z;.      }. 
86e0: 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6f 6b 56 61     }.    p->okVa
86f0: 72 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  r = 1;.    sqlit
8700: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
8710: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
8720: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
8730: 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  n the name of a 
8740: 77 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74  wildcard paramet
8750: 65 72 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  er.  Return NULL
8760: 20 69 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a   if the index.**
8770: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
8780: 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
8790: 61 72 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a  ard is unnamed..
87a0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  **.** The result
87b0: 20 69 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38   is always UTF-8
87c0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
87d0: 2a 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  *sqlite3_bind_pa
87e0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c  rameter_name(sql
87f0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8800: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65  , int i){.  Vdbe
8810: 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *p = (Vdbe*)pSt
8820: 6d 74 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c  mt;.  if( p==0 |
8830: 7c 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56  | i<1 || i>p->nV
8840: 61 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ar ){.    return
8850: 20 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65   0;.  }.  create
8860: 56 61 72 4d 61 70 28 70 29 3b 0a 20 20 72 65 74  VarMap(p);.  ret
8870: 75 72 6e 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31  urn p->azVar[i-1
8880: 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65  ];.}../*.** Give
8890: 6e 20 61 20 77 69 6c 64 63 61 72 64 20 70 61 72  n a wildcard par
88a0: 61 6d 65 74 65 72 20 6e 61 6d 65 2c 20 72 65 74  ameter name, ret
88b0: 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20 6f 66  urn the index of
88c0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
88d0: 20 77 69 74 68 20 74 68 61 74 20 6e 61 6d 65 2e   with that name.
88e0: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
88f0: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
8900: 68 65 20 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a  he given name,.*
8910: 2a 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69  * return 0..*/.i
8920: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
8930: 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
8940: 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  e *p, const char
8950: 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 6e 4e 61   *zName, int nNa
8960: 6d 65 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  me){.  int i;.  
8970: 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20  if( p==0 ){.    
8980: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
8990: 63 72 65 61 74 65 56 61 72 4d 61 70 28 70 29 3b  createVarMap(p);
89a0: 20 0a 20 20 69 66 28 20 7a 4e 61 6d 65 20 29 7b   .  if( zName ){
89b0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
89c0: 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a 20  p->nVar; i++){. 
89d0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
89e0: 2a 7a 20 3d 20 70 2d 3e 61 7a 56 61 72 5b 69 5d  *z = p->azVar[i]
89f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 20 26 26  ;.      if( z &&
8a00: 20 6d 65 6d 63 6d 70 28 7a 2c 7a 4e 61 6d 65 2c   memcmp(z,zName,
8a10: 6e 4e 61 6d 65 29 3d 3d 30 20 26 26 20 7a 5b 6e  nName)==0 && z[n
8a20: 4e 61 6d 65 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  Name]==0 ){.    
8a30: 20 20 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a      return i+1;.
8a40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
8a50: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
8a60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
8a70: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
8a80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
8a90: 53 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  Stmt, const char
8aa0: 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 72 65 74 75   *zName){.  retu
8ab0: 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  rn sqlite3VdbePa
8ac0: 72 61 6d 65 74 65 72 49 6e 64 65 78 28 28 56 64  rameterIndex((Vd
8ad0: 62 65 2a 29 70 53 74 6d 74 2c 20 7a 4e 61 6d 65  be*)pStmt, zName
8ae0: 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  , sqlite3Strlen3
8af0: 30 28 7a 4e 61 6d 65 29 29 3b 0a 7d 0a 0a 2f 2a  0(zName));.}../*
8b00: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c 6c  .** Transfer all
8b10: 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20 74   bindings from t
8b20: 68 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65  he first stateme
8b30: 6e 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20 73  nt over to the s
8b40: 65 63 6f 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  econd..*/.int sq
8b50: 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
8b60: 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
8b70: 6d 74 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73  mt *pFromStmt, s
8b80: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f  qlite3_stmt *pTo
8b90: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
8ba0: 46 72 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46  From = (Vdbe*)pF
8bb0: 72 6f 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20  romStmt;.  Vdbe 
8bc0: 2a 70 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54  *pTo = (Vdbe*)pT
8bd0: 6f 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  oStmt;.  int i;.
8be0: 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 64    assert( pTo->d
8bf0: 62 3d 3d 70 46 72 6f 6d 2d 3e 64 62 20 29 3b 0a  b==pFrom->db );.
8c00: 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 6e    assert( pTo->n
8c10: 56 61 72 3d 3d 70 46 72 6f 6d 2d 3e 6e 56 61 72  Var==pFrom->nVar
8c20: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   );.  sqlite3_mu
8c30: 74 65 78 5f 65 6e 74 65 72 28 70 54 6f 2d 3e 64  tex_enter(pTo->d
8c40: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72  b->mutex);.  for
8c50: 28 69 3d 30 3b 20 69 3c 70 46 72 6f 6d 2d 3e 6e  (i=0; i<pFrom->n
8c60: 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  Var; i++){.    s
8c70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
8c80: 65 28 26 70 54 6f 2d 3e 61 56 61 72 5b 69 5d 2c  e(&pTo->aVar[i],
8c90: 20 26 70 46 72 6f 6d 2d 3e 61 56 61 72 5b 69 5d   &pFrom->aVar[i]
8ca0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
8cb0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 54 6f  _mutex_leave(pTo
8cc0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
8cd0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8ce0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
8cf0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
8d00: 54 45 44 0a 2f 2a 0a 2a 2a 20 44 65 70 72 65 63  TED./*.** Deprec
8d10: 61 74 65 64 20 65 78 74 65 72 6e 61 6c 20 69 6e  ated external in
8d20: 74 65 72 66 61 63 65 2e 20 20 49 6e 74 65 72 6e  terface.  Intern
8d30: 61 6c 2f 63 6f 72 65 20 53 51 4c 69 74 65 20 63  al/core SQLite c
8d40: 6f 64 65 0a 2a 2a 20 73 68 6f 75 6c 64 20 63 61  ode.** should ca
8d50: 6c 6c 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  ll sqlite3Transf
8d60: 65 72 42 69 6e 64 69 6e 67 73 2e 0a 2a 2a 0a 2a  erBindings..**.*
8d70: 2a 20 49 73 20 69 73 20 6d 69 73 75 73 65 20 74  * Is is misuse t
8d80: 6f 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74  o call this rout
8d90: 69 6e 65 20 77 69 74 68 20 73 74 61 74 65 6d 65  ine with stateme
8da0: 6e 74 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65  nts from differe
8db0: 6e 74 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  nt.** database c
8dc0: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 42 75 74  onnections.  But
8dd0: 20 61 73 20 74 68 69 73 20 69 73 20 61 20 64 65   as this is a de
8de0: 70 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61  precated interfa
8df0: 63 65 2c 20 77 65 0a 2a 2a 20 77 69 6c 6c 20 6e  ce, we.** will n
8e00: 6f 74 20 62 6f 74 68 65 72 20 74 6f 20 63 68 65  ot bother to che
8e10: 63 6b 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 64  ck for that cond
8e20: 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ition..**.** If 
8e30: 74 68 65 20 74 77 6f 20 73 74 61 74 65 6d 65 6e  the two statemen
8e40: 74 73 20 63 6f 6e 74 61 69 6e 20 61 20 64 69 66  ts contain a dif
8e50: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  ferent number of
8e60: 20 62 69 6e 64 69 6e 67 73 2c 20 74 68 65 6e 0a   bindings, then.
8e70: 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 45 52 52  ** an SQLITE_ERR
8e80: 4f 52 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  OR is returned. 
8e90: 20 4e 6f 74 68 69 6e 67 20 65 6c 73 65 20 63 61   Nothing else ca
8ea0: 6e 20 67 6f 20 77 72 6f 6e 67 2c 20 73 6f 20 6f  n go wrong, so o
8eb0: 74 68 65 72 77 69 73 65 0a 2a 2a 20 53 51 4c 49  therwise.** SQLI
8ec0: 54 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65  TE_OK is returne
8ed0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
8ee0: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
8ef0: 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
8f00: 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71 6c   *pFromStmt, sql
8f10: 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53 74  ite3_stmt *pToSt
8f20: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 46 72  mt){.  Vdbe *pFr
8f30: 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46 72 6f  om = (Vdbe*)pFro
8f40: 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a 70  mStmt;.  Vdbe *p
8f50: 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54 6f 53  To = (Vdbe*)pToS
8f60: 74 6d 74 3b 0a 20 20 69 66 28 20 70 46 72 6f 6d  tmt;.  if( pFrom
8f70: 2d 3e 6e 56 61 72 21 3d 70 54 6f 2d 3e 6e 56 61  ->nVar!=pTo->nVa
8f80: 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  r ){.    return 
8f90: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
8fa0: 7d 0a 20 20 69 66 28 20 70 54 6f 2d 3e 69 73 50  }.  if( pTo->isP
8fb0: 72 65 70 61 72 65 56 32 20 26 26 20 70 54 6f 2d  repareV2 && pTo-
8fc0: 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20  >expmask ){.    
8fd0: 70 54 6f 2d 3e 65 78 70 69 72 65 64 20 3d 20 31  pTo->expired = 1
8fe0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 46 72 6f  ;.  }.  if( pFro
8ff0: 6d 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26  m->isPrepareV2 &
9000: 26 20 70 46 72 6f 6d 2d 3e 65 78 70 6d 61 73 6b  & pFrom->expmask
9010: 20 29 7b 0a 20 20 20 20 70 46 72 6f 6d 2d 3e 65   ){.    pFrom->e
9020: 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
9030: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
9040: 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
9050: 28 70 46 72 6f 6d 53 74 6d 74 2c 20 70 54 6f 53  (pFromStmt, pToS
9060: 74 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  tmt);.}.#endif..
9070: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
9080: 20 73 71 6c 69 74 65 33 2a 20 64 61 74 61 62 61   sqlite3* databa
9090: 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 77 68 69  se handle to whi
90a0: 63 68 20 74 68 65 20 70 72 65 70 61 72 65 64 20  ch the prepared 
90b0: 73 74 61 74 65 6d 65 6e 74 20 67 69 76 65 6e 0a  statement given.
90c0: 2a 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65  ** in the argume
90d0: 6e 74 20 62 65 6c 6f 6e 67 73 2e 20 20 54 68 69  nt belongs.  Thi
90e0: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 64 61  s is the same da
90f0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 68  tabase handle th
9100: 61 74 20 77 61 73 0a 2a 2a 20 74 68 65 20 66 69  at was.** the fi
9110: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
9120: 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70  the sqlite3_prep
9130: 61 72 65 28 29 20 74 68 61 74 20 77 61 73 20 75  are() that was u
9140: 73 65 64 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  sed to create.**
9150: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
9160: 6e 20 74 68 65 20 66 69 72 73 74 20 70 6c 61 63  n the first plac
9170: 65 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73  e..*/.sqlite3 *s
9180: 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65  qlite3_db_handle
9190: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
91a0: 53 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20  Stmt){.  return 
91b0: 70 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a 29  pStmt ? ((Vdbe*)
91c0: 70 53 74 6d 74 29 2d 3e 64 62 20 3a 20 30 3b 0a  pStmt)->db : 0;.
91d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
91e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
91f0: 20 6e 65 78 74 20 70 72 65 70 61 72 65 64 20 73   next prepared s
9200: 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70  tatement after p
9210: 53 74 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a  Stmt associated.
9220: 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61 73 65  ** with database
9230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e   connection pDb.
9240: 20 20 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55    If pStmt is NU
9250: 4c 4c 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66  LL, return the f
9260: 69 72 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64  irst.** prepared
9270: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74   statement for t
9280: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
9290: 65 63 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20  ection.  Return 
92a0: 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a  NULL if there.**
92b0: 20 61 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f   are no more..*/
92c0: 0a 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  .sqlite3_stmt *s
92d0: 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74  qlite3_next_stmt
92e0: 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73  (sqlite3 *pDb, s
92f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9300: 6d 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  mt){.  sqlite3_s
9310: 74 6d 74 20 2a 70 4e 65 78 74 3b 0a 20 20 73 71  tmt *pNext;.  sq
9320: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
9330: 72 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  r(pDb->mutex);. 
9340: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
9350: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
9360: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 70 44 62 2d  lite3_stmt*)pDb-
9370: 3e 70 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 7b  >pVdbe;.  }else{
9380: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
9390: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 28 28 56 64  lite3_stmt*)((Vd
93a0: 62 65 2a 29 70 53 74 6d 74 29 2d 3e 70 4e 65 78  be*)pStmt)->pNex
93b0: 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
93c0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 44 62  _mutex_leave(pDb
93d0: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
93e0: 72 6e 20 70 4e 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a  rn pNext;.}../*.
93f0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 76 61  ** Return the va
9400: 6c 75 65 20 6f 66 20 61 20 73 74 61 74 75 73 20  lue of a status 
9410: 63 6f 75 6e 74 65 72 20 66 6f 72 20 61 20 70 72  counter for a pr
9420: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
9430: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
9440: 73 74 6d 74 5f 73 74 61 74 75 73 28 73 71 6c 69  stmt_status(sqli
9450: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
9460: 20 69 6e 74 20 6f 70 2c 20 69 6e 74 20 72 65 73   int op, int res
9470: 65 74 46 6c 61 67 29 7b 0a 20 20 56 64 62 65 20  etFlag){.  Vdbe 
9480: 2a 70 56 64 62 65 20 3d 20 28 56 64 62 65 2a 29  *pVdbe = (Vdbe*)
9490: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 20 3d  pStmt;.  int v =
94a0: 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74 65 72   pVdbe->aCounter
94b0: 5b 6f 70 2d 31 5d 3b 0a 20 20 69 66 28 20 72 65  [op-1];.  if( re
94c0: 73 65 74 46 6c 61 67 20 29 20 70 56 64 62 65 2d  setFlag ) pVdbe-
94d0: 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 2d 31 5d 20  >aCounter[op-1] 
94e0: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 76 3b  = 0;.  return v;
94f0: 0a 7d 0a                                         .}.