/ Hex Artifact Content
Login

Artifact 59412373ec89e075bd7b4c5e497527c8d2d9ad5b:


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 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
0620: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
0630: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70  .** Invoke the p
0640: 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b 2e  rofile callback.
0650: 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69    This routine i
0660: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 69 66  s only called if
0670: 20 77 65 20 61 6c 72 65 61 64 79 0a 2a 2a 20 6b   we already.** k
0680: 6e 6f 77 20 74 68 61 74 20 74 68 65 20 70 72 6f  now that the pro
0690: 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b 20 69 73  file callback is
06a0: 20 64 65 66 69 6e 65 64 20 61 6e 64 20 6e 65 65   defined and nee
06b0: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
06c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
06d0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 76 6f 69 64  TE_NOINLINE void
06e0: 20 69 6e 76 6f 6b 65 50 72 6f 66 69 6c 65 43 61   invokeProfileCa
06f0: 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
0700: 64 62 2c 20 56 64 62 65 20 2a 70 29 7b 0a 20 20  db, Vdbe *p){.  
0710: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 4e  sqlite3_int64 iN
0720: 6f 77 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  ow;.  assert( p-
0730: 3e 73 74 61 72 74 54 69 6d 65 3e 30 20 29 3b 0a  >startTime>0 );.
0740: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 78 50    assert( db->xP
0750: 72 6f 66 69 6c 65 21 3d 30 20 29 3b 0a 20 20 61  rofile!=0 );.  a
0760: 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
0770: 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  busy==0 );.  ass
0780: 65 72 74 28 20 70 2d 3e 7a 53 71 6c 21 3d 30 20  ert( p->zSql!=0 
0790: 29 3b 0a 20 20 73 71 6c 69 74 65 33 4f 73 43 75  );.  sqlite3OsCu
07a0: 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 64  rrentTimeInt64(d
07b0: 62 2d 3e 70 56 66 73 2c 20 26 69 4e 6f 77 29 3b  b->pVfs, &iNow);
07c0: 0a 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 28  .  db->xProfile(
07d0: 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67 2c  db->pProfileArg,
07e0: 20 70 2d 3e 7a 53 71 6c 2c 20 28 69 4e 6f 77 20   p->zSql, (iNow 
07f0: 2d 20 70 2d 3e 73 74 61 72 74 54 69 6d 65 29 2a  - p->startTime)*
0800: 31 30 30 30 30 30 30 29 3b 0a 20 20 70 2d 3e 73  1000000);.  p->s
0810: 74 61 72 74 54 69 6d 65 20 3d 20 30 3b 0a 7d 0a  tartTime = 0;.}.
0820: 2f 2a 0a 2a 2a 20 54 68 65 20 63 68 65 63 6b 50  /*.** The checkP
0830: 72 6f 66 69 6c 65 43 61 6c 6c 62 61 63 6b 28 44  rofileCallback(D
0840: 42 2c 50 29 20 6d 61 63 72 6f 20 63 68 65 63 6b  B,P) macro check
0850: 73 20 74 6f 20 73 65 65 20 69 66 20 61 20 70 72  s to see if a pr
0860: 6f 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b 0a 2a  ofile callback.*
0870: 2a 20 69 73 20 6e 65 65 64 65 64 2c 20 61 6e 64  * is needed, and
0880: 20 69 74 20 69 6e 76 6f 6b 65 73 20 74 68 65 20   it invokes the 
0890: 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69  callback if it i
08a0: 73 20 6e 65 65 64 65 64 2e 0a 2a 2f 0a 23 20 64  s needed..*/.# d
08b0: 65 66 69 6e 65 20 63 68 65 63 6b 50 72 6f 66 69  efine checkProfi
08c0: 6c 65 43 61 6c 6c 62 61 63 6b 28 44 42 2c 50 29  leCallback(DB,P)
08d0: 20 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e   \.   if( ((P)->
08e0: 73 74 61 72 74 54 69 6d 65 29 3e 30 20 29 7b 20  startTime)>0 ){ 
08f0: 69 6e 76 6f 6b 65 50 72 6f 66 69 6c 65 43 61 6c  invokeProfileCal
0900: 6c 62 61 63 6b 28 44 42 2c 50 29 3b 20 7d 0a 23  lback(DB,P); }.#
0910: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 63 68  else.# define ch
0920: 65 63 6b 50 72 6f 66 69 6c 65 43 61 6c 6c 62 61  eckProfileCallba
0930: 63 6b 28 44 42 2c 50 29 20 20 2f 2a 6e 6f 2d 6f  ck(DB,P)  /*no-o
0940: 70 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  p*/.#endif../*.*
0950: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0960: 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73  routine destroys
0970: 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69   a virtual machi
0980: 6e 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74  ne that is creat
0990: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c  ed by.** the sql
09a0: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72  ite3_compile() r
09b0: 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74 65  outine. The inte
09c0: 67 65 72 20 72 65 74 75 72 6e 65 64 20 69 73 20  ger returned is 
09d0: 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75  an SQLITE_.** su
09e0: 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f  ccess/failure co
09f0: 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  de that describe
0a00: 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
0a10: 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 76 69  executing the vi
0a20: 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
0a30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
0a40: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72  tine sets the er
0a50: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72  ror code and str
0a60: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a  ing returned by.
0a70: 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  ** sqlite3_errco
0a80: 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72  de(), sqlite3_er
0a90: 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74  rmsg() and sqlit
0aa0: 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a  e3_errmsg16()..*
0ab0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69  /.int sqlite3_fi
0ac0: 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73  nalize(sqlite3_s
0ad0: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
0ae0: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74  nt rc;.  if( pSt
0af0: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  mt==0 ){.    /* 
0b00: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
0b10: 46 3a 20 52 2d 35 37 32 32 38 2d 31 32 39 30 34  F: R-57228-12904
0b20: 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65   Invoking sqlite
0b30: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f 6e 20  3_finalize() on 
0b40: 61 20 4e 55 4c 4c 0a 20 20 20 20 2a 2a 20 70 6f  a NULL.    ** po
0b50: 69 6e 74 65 72 20 69 73 20 61 20 68 61 72 6d 6c  inter is a harml
0b60: 65 73 73 20 6e 6f 2d 6f 70 2e 20 2a 2f 0a 20 20  ess no-op. */.  
0b70: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
0b80: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
0b90: 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29  dbe *v = (Vdbe*)
0ba0: 70 53 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69 74  pStmt;.    sqlit
0bb0: 65 33 20 2a 64 62 20 3d 20 76 2d 3e 64 62 3b 0a  e3 *db = v->db;.
0bc0: 20 20 20 20 69 66 28 20 76 64 62 65 53 61 66 65      if( vdbeSafe
0bd0: 74 79 28 76 29 20 29 20 72 65 74 75 72 6e 20 53  ty(v) ) return S
0be0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
0bf0: 54 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  T;.    sqlite3_m
0c00: 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
0c10: 75 74 65 78 29 3b 0a 20 20 20 20 63 68 65 63 6b  utex);.    check
0c20: 50 72 6f 66 69 6c 65 43 61 6c 6c 62 61 63 6b 28  ProfileCallback(
0c30: 64 62 2c 20 76 29 3b 0a 20 20 20 20 72 63 20 3d  db, v);.    rc =
0c40: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
0c50: 6c 69 7a 65 28 76 29 3b 0a 20 20 20 20 72 63 20  lize(v);.    rc 
0c60: 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  = sqlite3ApiExit
0c70: 28 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71  (db, rc);.    sq
0c80: 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
0c90: 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 64 62  ndCloseZombie(db
0ca0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
0cb0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72  rc;.}../*.** Ter
0cc0: 6d 69 6e 61 74 65 20 74 68 65 20 63 75 72 72 65  minate the curre
0cd0: 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  nt execution of 
0ce0: 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
0cf0: 20 61 6e 64 20 72 65 73 65 74 20 69 74 0a 2a 2a   and reset it.**
0d00: 20 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74 61   back to its sta
0d10: 72 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20 74  rting state so t
0d20: 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
0d30: 75 73 65 64 2e 20 41 20 73 75 63 63 65 73 73 20  used. A success 
0d40: 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65  code from.** the
0d50: 20 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f 6e   prior execution
0d60: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a   is returned..**
0d70: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
0d80: 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72 20   sets the error 
0d90: 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20  code and string 
0da0: 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73  returned by.** s
0db0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29  qlite3_errcode()
0dc0: 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
0dd0: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65  () and sqlite3_e
0de0: 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e  rrmsg16()..*/.in
0df0: 74 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  t sqlite3_reset(
0e00: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
0e10: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  tmt){.  int rc;.
0e20: 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29    if( pStmt==0 )
0e30: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
0e40: 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  E_OK;.  }else{. 
0e50: 20 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64     Vdbe *v = (Vd
0e60: 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 20 20 73  be*)pStmt;.    s
0e70: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 2d 3e  qlite3 *db = v->
0e80: 64 62 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  db;.    sqlite3_
0e90: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
0ea0: 6d 75 74 65 78 29 3b 0a 20 20 20 20 63 68 65 63  mutex);.    chec
0eb0: 6b 50 72 6f 66 69 6c 65 43 61 6c 6c 62 61 63 6b  kProfileCallback
0ec0: 28 64 62 2c 20 76 29 3b 0a 20 20 20 20 72 63 20  (db, v);.    rc 
0ed0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73  = sqlite3VdbeRes
0ee0: 65 74 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  et(v);.    sqlit
0ef0: 65 33 56 64 62 65 52 65 77 69 6e 64 28 76 29 3b  e3VdbeRewind(v);
0f00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 72 63  .    assert( (rc
0f10: 20 26 20 28 64 62 2d 3e 65 72 72 4d 61 73 6b 29   & (db->errMask)
0f20: 29 3d 3d 72 63 20 29 3b 0a 20 20 20 20 72 63 20  )==rc );.    rc 
0f30: 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  = sqlite3ApiExit
0f40: 28 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71  (db, rc);.    sq
0f50: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
0f60: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
0f70: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
0f80: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 61 6c 6c 20  ../*.** Set all 
0f90: 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 69  the parameters i
0fa0: 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 53  n the compiled S
0fb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  QL statement to 
0fc0: 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  NULL..*/.int sql
0fd0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
0fe0: 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
0ff0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20   *pStmt){.  int 
1000: 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  i;.  int rc = SQ
1010: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 56 64 62 65 20  LITE_OK;.  Vdbe 
1020: 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *p = (Vdbe*)pStm
1030: 74 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 48  t;.#if SQLITE_TH
1040: 52 45 41 44 53 41 46 45 0a 20 20 73 71 6c 69 74  READSAFE.  sqlit
1050: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 20  e3_mutex *mutex 
1060: 3d 20 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29  = ((Vdbe*)pStmt)
1070: 2d 3e 64 62 2d 3e 6d 75 74 65 78 3b 0a 23 65 6e  ->db->mutex;.#en
1080: 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  dif.  sqlite3_mu
1090: 74 65 78 5f 65 6e 74 65 72 28 6d 75 74 65 78 29  tex_enter(mutex)
10a0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
10b0: 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20  ->nVar; i++){.  
10c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10d0: 52 65 6c 65 61 73 65 28 26 70 2d 3e 61 56 61 72  Release(&p->aVar
10e0: 5b 69 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 56 61  [i]);.    p->aVa
10f0: 72 5b 69 5d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  r[i].flags = MEM
1100: 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28  _Null;.  }.  if(
1110: 20 70 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20   p->isPrepareV2 
1120: 26 26 20 70 2d 3e 65 78 70 6d 61 73 6b 20 29 7b  && p->expmask ){
1130: 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
1140: 3d 20 31 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 1;.  }.  sqlit
1150: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 6d  e3_mutex_leave(m
1160: 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
1170: 72 63 3b 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  rc;.}.../*******
1180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1190: 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 61  ***** sqlite3_va
11a0: 6c 75 65 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  lue_  **********
11b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
11c0: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
11d0: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
11e0: 65 78 74 72 61 63 74 20 69 6e 66 6f 72 6d 61 74  extract informat
11f0: 69 6f 6e 20 66 72 6f 6d 20 61 20 4d 65 6d 20 6f  ion from a Mem o
1200: 72 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0a  r sqlite3_value.
1210: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ** structure..*/
1220: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
1230: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
1240: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
1250: 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d  Val){.  Mem *p =
1260: 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69   (Mem*)pVal;.  i
1270: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  f( p->flags & (M
1280: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
1290: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
12a0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
12b0: 42 6c 6f 62 28 70 29 21 3d 53 51 4c 49 54 45 5f  Blob(p)!=SQLITE_
12c0: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  OK ){.      asse
12d0: 72 74 28 20 70 2d 3e 66 6c 61 67 73 3d 3d 4d 45  rt( p->flags==ME
12e0: 4d 5f 4e 75 6c 6c 20 26 26 20 70 2d 3e 7a 3d 3d  M_Null && p->z==
12f0: 30 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  0 );.      retur
1300: 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  n 0;.    }.    p
1310: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 42  ->flags |= MEM_B
1320: 6c 6f 62 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  lob;.    return 
1330: 70 2d 3e 6e 20 3f 20 70 2d 3e 7a 20 3a 20 30 3b  p->n ? p->z : 0;
1340: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
1350: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
1360: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 3b 0a 20  ue_text(pVal);. 
1370: 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33   }.}.int sqlite3
1380: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 73 71 6c  _value_bytes(sql
1390: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
13a0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
13b0: 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 70 56  te3ValueBytes(pV
13c0: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  al, SQLITE_UTF8)
13d0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
13e0: 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28 73 71  value_bytes16(sq
13f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
1400: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
1410: 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 70  ite3ValueBytes(p
1420: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Val, SQLITE_UTF1
1430: 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 64 6f 75 62  6NATIVE);.}.doub
1440: 6c 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  le sqlite3_value
1450: 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33 5f  _double(sqlite3_
1460: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
1470: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64  return sqlite3Vd
1480: 62 65 52 65 61 6c 56 61 6c 75 65 28 28 4d 65 6d  beRealValue((Mem
1490: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73  *)pVal);.}.int s
14a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
14b0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
14c0: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
14d0: 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65  (int)sqlite3Vdbe
14e0: 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70  IntValue((Mem*)p
14f0: 56 61 6c 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69  Val);.}.sqlite_i
1500: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 76 61 6c  nt64 sqlite3_val
1510: 75 65 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33  ue_int64(sqlite3
1520: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
1530: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
1540: 64 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d  dbeIntValue((Mem
1550: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 75 6e 73 69 67  *)pVal);.}.unsig
1560: 6e 65 64 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ned int sqlite3_
1570: 76 61 6c 75 65 5f 73 75 62 74 79 70 65 28 73 71  value_subtype(sq
1580: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
1590: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 28 4d  l){.  return ((M
15a0: 65 6d 2a 29 70 56 61 6c 29 2d 3e 65 53 75 62 74  em*)pVal)->eSubt
15b0: 79 70 65 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73  ype;.}.const uns
15c0: 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69  igned char *sqli
15d0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 73  te3_value_text(s
15e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
15f0: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 63  al){.  return (c
1600: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1610: 61 72 20 2a 29 73 71 6c 69 74 65 33 56 61 6c 75  ar *)sqlite3Valu
1620: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
1630: 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66 6e  TE_UTF8);.}.#ifn
1640: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1650: 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64  UTF16.const void
1660: 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f   *sqlite3_value_
1670: 74 65 78 74 31 36 28 73 71 6c 69 74 65 33 5f 76  text16(sqlite3_v
1680: 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20 72  alue* pVal){.  r
1690: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c  eturn sqlite3Val
16a0: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
16b0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
16c0: 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.}.const void *
16d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
16e0: 78 74 31 36 62 65 28 73 71 6c 69 74 65 33 5f 76  xt16be(sqlite3_v
16f0: 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72  alue *pVal){.  r
1700: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c  eturn sqlite3Val
1710: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
1720: 49 54 45 5f 55 54 46 31 36 42 45 29 3b 0a 7d 0a  ITE_UTF16BE);.}.
1730: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
1740: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
1750: 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  le(sqlite3_value
1760: 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72   *pVal){.  retur
1770: 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65  n sqlite3ValueTe
1780: 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f  xt(pVal, SQLITE_
1790: 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23 65 6e 64  UTF16LE);.}.#end
17a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
17b0: 54 5f 55 54 46 31 36 20 2a 2f 0a 2f 2a 20 45 56  T_UTF16 */./* EV
17c0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 37  IDENCE-OF: R-127
17d0: 39 33 2d 34 33 32 38 33 20 45 76 65 72 79 20 76  93-43283 Every v
17e0: 61 6c 75 65 20 69 6e 20 53 51 4c 69 74 65 20 68  alue in SQLite h
17f0: 61 73 20 6f 6e 65 20 6f 66 20 66 69 76 65 0a 2a  as one of five.*
1800: 2a 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20 64 61  * fundamental da
1810: 74 61 74 79 70 65 73 3a 20 36 34 2d 62 69 74 20  tatypes: 64-bit 
1820: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 36  signed integer 6
1830: 34 2d 62 69 74 20 49 45 45 45 20 66 6c 6f 61 74  4-bit IEEE float
1840: 69 6e 67 0a 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d  ing.** point num
1850: 62 65 72 20 73 74 72 69 6e 67 20 42 4c 4f 42 20  ber string BLOB 
1860: 4e 55 4c 4c 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  NULL.*/.int sqli
1870: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 73  te3_value_type(s
1880: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56  qlite3_value* pV
1890: 61 6c 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f  al){.  static co
18a0: 6e 73 74 20 75 38 20 61 54 79 70 65 5b 5d 20 3d  nst u8 aType[] =
18b0: 20 7b 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 42   {.     SQLITE_B
18c0: 4c 4f 42 2c 20 20 20 20 20 2f 2a 20 30 78 30 30  LOB,     /* 0x00
18d0: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
18e0: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30  NULL,     /* 0x0
18f0: 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  1 */.     SQLITE
1900: 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20 30 78  _TEXT,     /* 0x
1910: 30 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  02 */.     SQLIT
1920: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
1930: 78 30 33 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x03 */.     SQLI
1940: 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20  TE_INTEGER,  /* 
1950: 30 78 30 34 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x04 */.     SQL
1960: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1970: 20 30 78 30 35 20 2a 2f 0a 20 20 20 20 20 53 51   0x05 */.     SQ
1980: 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f  LITE_INTEGER,  /
1990: 2a 20 30 78 30 36 20 2a 2f 0a 20 20 20 20 20 53  * 0x06 */.     S
19a0: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
19b0: 2f 2a 20 30 78 30 37 20 2a 2f 0a 20 20 20 20 20  /* 0x07 */.     
19c0: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
19d0: 20 2f 2a 20 30 78 30 38 20 2a 2f 0a 20 20 20 20   /* 0x08 */.    
19e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
19f0: 20 20 2f 2a 20 30 78 30 39 20 2a 2f 0a 20 20 20    /* 0x09 */.   
1a00: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
1a10: 20 20 20 2f 2a 20 30 78 30 61 20 2a 2f 0a 20 20     /* 0x0a */.  
1a20: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
1a30: 20 20 20 20 2f 2a 20 30 78 30 62 20 2a 2f 0a 20      /* 0x0b */. 
1a40: 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47      SQLITE_INTEG
1a50: 45 52 2c 20 20 2f 2a 20 30 78 30 63 20 2a 2f 0a  ER,  /* 0x0c */.
1a60: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1a70: 2c 20 20 20 20 20 2f 2a 20 30 78 30 64 20 2a 2f  ,     /* 0x0d */
1a80: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  .     SQLITE_INT
1a90: 45 47 45 52 2c 20 20 2f 2a 20 30 78 30 65 20 2a  EGER,  /* 0x0e *
1aa0: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1ab0: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30 66 20  LL,     /* 0x0f 
1ac0: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 42  */.     SQLITE_B
1ad0: 4c 4f 42 2c 20 20 20 20 20 2f 2a 20 30 78 31 30  LOB,     /* 0x10
1ae0: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
1af0: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31  NULL,     /* 0x1
1b00: 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  1 */.     SQLITE
1b10: 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20 30 78  _TEXT,     /* 0x
1b20: 31 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  12 */.     SQLIT
1b30: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
1b40: 78 31 33 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x13 */.     SQLI
1b50: 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20  TE_INTEGER,  /* 
1b60: 30 78 31 34 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x14 */.     SQL
1b70: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1b80: 20 30 78 31 35 20 2a 2f 0a 20 20 20 20 20 53 51   0x15 */.     SQ
1b90: 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f  LITE_INTEGER,  /
1ba0: 2a 20 30 78 31 36 20 2a 2f 0a 20 20 20 20 20 53  * 0x16 */.     S
1bb0: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
1bc0: 2f 2a 20 30 78 31 37 20 2a 2f 0a 20 20 20 20 20  /* 0x17 */.     
1bd0: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
1be0: 20 2f 2a 20 30 78 31 38 20 2a 2f 0a 20 20 20 20   /* 0x18 */.    
1bf0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
1c00: 20 20 2f 2a 20 30 78 31 39 20 2a 2f 0a 20 20 20    /* 0x19 */.   
1c10: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
1c20: 20 20 20 2f 2a 20 30 78 31 61 20 2a 2f 0a 20 20     /* 0x1a */.  
1c30: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
1c40: 20 20 20 20 2f 2a 20 30 78 31 62 20 2a 2f 0a 20      /* 0x1b */. 
1c50: 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47      SQLITE_INTEG
1c60: 45 52 2c 20 20 2f 2a 20 30 78 31 63 20 2a 2f 0a  ER,  /* 0x1c */.
1c70: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1c80: 2c 20 20 20 20 20 2f 2a 20 30 78 31 64 20 2a 2f  ,     /* 0x1d */
1c90: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  .     SQLITE_INT
1ca0: 45 47 45 52 2c 20 20 2f 2a 20 30 78 31 65 20 2a  EGER,  /* 0x1e *
1cb0: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1cc0: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31 66 20  LL,     /* 0x1f 
1cd0: 2a 2f 0a 20 20 7d 3b 0a 20 20 72 65 74 75 72 6e  */.  };.  return
1ce0: 20 61 54 79 70 65 5b 70 56 61 6c 2d 3e 66 6c 61   aType[pVal->fla
1cf0: 67 73 26 4d 45 4d 5f 41 66 66 4d 61 73 6b 5d 3b  gs&MEM_AffMask];
1d00: 0a 7d 0a 0a 2f 2a 20 4d 61 6b 65 20 61 20 63 6f  .}../* Make a co
1d10: 70 79 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  py of an sqlite3
1d20: 5f 76 61 6c 75 65 20 6f 62 6a 65 63 74 0a 2a 2f  _value object.*/
1d30: 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
1d40: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 75  sqlite3_value_du
1d50: 70 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  p(const sqlite3_
1d60: 76 61 6c 75 65 20 2a 70 4f 72 69 67 29 7b 0a 20  value *pOrig){. 
1d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
1d80: 70 4e 65 77 3b 0a 20 20 69 66 28 20 70 4f 72 69  pNew;.  if( pOri
1d90: 67 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  g==0 ) return 0;
1da0: 0a 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  pNew = sqlite
1db0: 33 5f 6d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66  3_malloc( sizeof
1dc0: 28 2a 70 4e 65 77 29 20 29 3b 0a 20 20 69 66 28  (*pNew) );.  if(
1dd0: 20 70 4e 65 77 3d 3d 30 20 29 20 72 65 74 75 72   pNew==0 ) retur
1de0: 6e 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 70 4e  n 0;.  memset(pN
1df0: 65 77 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70  ew, 0, sizeof(*p
1e00: 4e 65 77 29 29 3b 0a 20 20 6d 65 6d 63 70 79 28  New));.  memcpy(
1e10: 70 4e 65 77 2c 20 70 4f 72 69 67 2c 20 4d 45 4d  pNew, pOrig, MEM
1e20: 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 4e 65  CELLSIZE);.  pNe
1e30: 77 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  w->flags &= ~MEM
1e40: 5f 44 79 6e 3b 0a 20 20 70 4e 65 77 2d 3e 64 62  _Dyn;.  pNew->db
1e50: 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4e 65 77   = 0;.  if( pNew
1e60: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1e70: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
1e80: 20 20 70 4e 65 77 2d 3e 66 6c 61 67 73 20 26 3d    pNew->flags &=
1e90: 20 7e 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45   ~(MEM_Static|ME
1ea0: 4d 5f 44 79 6e 29 3b 0a 20 20 20 20 70 4e 65 77  M_Dyn);.    pNew
1eb0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45  ->flags |= MEM_E
1ec0: 70 68 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71  phem;.    if( sq
1ed0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
1ee0: 57 72 69 74 65 61 62 6c 65 28 70 4e 65 77 29 21  Writeable(pNew)!
1ef0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1f00: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
1f10: 46 72 65 65 28 70 4e 65 77 29 3b 0a 20 20 20 20  Free(pNew);.    
1f20: 20 20 70 4e 65 77 20 3d 20 30 3b 0a 20 20 20 20    pNew = 0;.    
1f30: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  }.  }.  return p
1f40: 4e 65 77 3b 0a 7d 0a 0a 2f 2a 20 44 65 73 74 72  New;.}../* Destr
1f50: 6f 79 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61  oy an sqlite3_va
1f60: 6c 75 65 20 6f 62 6a 65 63 74 20 70 72 65 76 69  lue object previ
1f70: 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66  ously obtained f
1f80: 72 6f 6d 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  rom.** sqlite3_v
1f90: 61 6c 75 65 5f 64 75 70 28 29 2e 0a 2a 2f 0a 76  alue_dup()..*/.v
1fa0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  oid sqlite3_valu
1fb0: 65 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 76  e_free(sqlite3_v
1fc0: 61 6c 75 65 20 2a 70 4f 6c 64 29 7b 0a 20 20 73  alue *pOld){.  s
1fd0: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
1fe0: 70 4f 6c 64 29 3b 0a 7d 0a 20 20 0a 0a 2f 2a 2a  pOld);.}.  ../**
1ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74  ********** sqlit
2010: 65 33 5f 72 65 73 75 6c 74 5f 20 20 2a 2a 2a 2a  e3_result_  ****
2020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
2040: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75  he following rou
2050: 74 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 62  tines are used b
2060: 79 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66  y user-defined f
2070: 75 6e 63 74 69 6f 6e 73 20 74 6f 20 73 70 65 63  unctions to spec
2080: 69 66 79 0a 2a 2a 20 74 68 65 20 66 75 6e 63 74  ify.** the funct
2090: 69 6f 6e 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  ion result..**.*
20a0: 2a 20 54 68 65 20 73 65 74 53 74 72 4f 72 45 72  * The setStrOrEr
20b0: 72 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 63  ror() function c
20c0: 61 6c 6c 73 20 73 71 6c 69 74 65 33 56 64 62 65  alls sqlite3Vdbe
20d0: 4d 65 6d 53 65 74 53 74 72 28 29 20 74 6f 20 73  MemSetStr() to s
20e0: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 72 65 73 75  tore the.** resu
20f0: 6c 74 20 61 73 20 61 20 73 74 72 69 6e 67 20 6f  lt as a string o
2100: 72 20 62 6c 6f 62 20 62 75 74 20 69 66 20 74 68  r blob but if th
2110: 65 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  e string or blob
2120: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 69   is too large, i
2130: 74 0a 2a 2a 20 74 68 65 6e 20 73 65 74 73 20 74  t.** then sets t
2140: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 74 6f  he error code to
2150: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 0a 2a   SQLITE_TOOBIG.*
2160: 2a 0a 2a 2a 20 54 68 65 20 69 6e 76 6f 6b 65 56  *.** The invokeV
2170: 61 6c 75 65 44 65 73 74 72 75 63 74 6f 72 28 50  alueDestructor(P
2180: 2c 58 29 20 72 6f 75 74 69 6e 65 20 69 6e 76 6f  ,X) routine invo
2190: 6b 65 73 20 64 65 73 74 72 75 63 74 6f 72 20 66  kes destructor f
21a0: 75 6e 63 74 69 6f 6e 20 58 28 29 0a 2a 2a 20 6f  unction X().** o
21b0: 6e 20 76 61 6c 75 65 20 50 20 69 73 20 6e 6f 74  n value P is not
21c0: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 75 73 65   going to be use
21d0: 64 20 61 6e 64 20 6e 65 65 64 20 74 6f 20 62 65  d and need to be
21e0: 20 64 65 73 74 72 6f 79 65 64 2e 0a 2a 2f 0a 73   destroyed..*/.s
21f0: 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 52 65  tatic void setRe
2200: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 0a  sultStrOrError(.
2210: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2220: 74 20 2a 70 43 74 78 2c 20 20 2f 2a 20 46 75 6e  t *pCtx,  /* Fun
2230: 63 74 69 6f 6e 20 63 6f 6e 74 65 78 74 20 2a 2f  ction context */
2240: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2250: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74  ,          /* St
2260: 72 69 6e 67 20 70 6f 69 6e 74 65 72 20 2a 2f 0a  ring pointer */.
2270: 20 20 69 6e 74 20 6e 2c 20 20 20 20 20 20 20 20    int n,        
2280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2290: 65 73 20 69 6e 20 73 74 72 69 6e 67 2c 20 6f 72  es in string, or
22a0: 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 75   negative */.  u
22b0: 38 20 65 6e 63 2c 20 20 20 20 20 20 20 20 20 20  8 enc,          
22c0: 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69         /* Encodi
22d0: 6e 67 20 6f 66 20 7a 2e 20 20 30 20 66 6f 72 20  ng of z.  0 for 
22e0: 42 4c 4f 42 73 20 2a 2f 0a 20 20 76 6f 69 64 20  BLOBs */.  void 
22f0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 20 20  (*xDel)(void*)  
2300: 20 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72     /* Destructor
2310: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
2320: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2330: 65 4d 65 6d 53 65 74 53 74 72 28 70 43 74 78 2d  eMemSetStr(pCtx-
2340: 3e 70 4f 75 74 2c 20 7a 2c 20 6e 2c 20 65 6e 63  >pOut, z, n, enc
2350: 2c 20 78 44 65 6c 29 3d 3d 53 51 4c 49 54 45 5f  , xDel)==SQLITE_
2360: 54 4f 4f 42 49 47 20 29 7b 0a 20 20 20 20 73 71  TOOBIG ){.    sq
2370: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
2380: 6f 72 5f 74 6f 6f 62 69 67 28 70 43 74 78 29 3b  or_toobig(pCtx);
2390: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 69 6e  .  }.}.static in
23a0: 74 20 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73  t invokeValueDes
23b0: 74 72 75 63 74 6f 72 28 0a 20 20 63 6f 6e 73 74  tructor(.  const
23c0: 20 76 6f 69 64 20 2a 70 2c 20 20 20 20 20 20 20   void *p,       
23d0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
23e0: 6f 20 64 65 73 74 72 6f 79 20 2a 2f 0a 20 20 76  o destroy */.  v
23f0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
2400: 2a 29 2c 20 20 20 20 20 20 20 2f 2a 20 54 68 65  *),       /* The
2410: 20 64 65 73 74 72 75 63 74 6f 72 20 2a 2f 0a 20   destructor */. 
2420: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2430: 20 2a 70 43 74 78 20 20 20 20 20 20 2f 2a 20 53   *pCtx      /* S
2440: 65 74 20 61 20 53 51 4c 49 54 45 5f 54 4f 4f 42  et a SQLITE_TOOB
2450: 49 47 20 65 72 72 6f 72 20 69 66 20 6e 6f 20 4e  IG error if no N
2460: 55 4c 4c 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65  ULL */.){.  asse
2470: 72 74 28 20 78 44 65 6c 21 3d 53 51 4c 49 54 45  rt( xDel!=SQLITE
2480: 5f 44 59 4e 41 4d 49 43 20 29 3b 0a 20 20 69 66  _DYNAMIC );.  if
2490: 28 20 78 44 65 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( xDel==0 ){.   
24a0: 20 2f 2a 20 6e 6f 6f 70 20 2a 2f 0a 20 20 7d 65   /* noop */.  }e
24b0: 6c 73 65 20 69 66 28 20 78 44 65 6c 3d 3d 53 51  lse if( xDel==SQ
24c0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 20 29  LITE_TRANSIENT )
24d0: 7b 0a 20 20 20 20 2f 2a 20 6e 6f 6f 70 20 2a 2f  {.    /* noop */
24e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 44  .  }else{.    xD
24f0: 65 6c 28 28 76 6f 69 64 2a 29 70 29 3b 0a 20 20  el((void*)p);.  
2500: 7d 0a 20 20 69 66 28 20 70 43 74 78 20 29 20 73  }.  if( pCtx ) s
2510: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
2520: 72 6f 72 5f 74 6f 6f 62 69 67 28 70 43 74 78 29  ror_toobig(pCtx)
2530: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
2540: 45 5f 54 4f 4f 42 49 47 3b 0a 7d 0a 76 6f 69 64  E_TOOBIG;.}.void
2550: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2560: 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f  blob(.  sqlite3_
2570: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
2580: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
2590: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
25a0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
25b0: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
25c0: 6e 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  n>=0 );.  assert
25d0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
25e0: 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d  held(pCtx->pOut-
25f0: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
2600: 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45   setResultStrOrE
2610: 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c  rror(pCtx, z, n,
2620: 20 30 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69   0, xDel);.}.voi
2630: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
2640: 5f 62 6c 6f 62 36 34 28 0a 20 20 73 71 6c 69 74  _blob64(.  sqlit
2650: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
2660: 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  , .  const void 
2670: 2a 7a 2c 20 0a 20 20 73 71 6c 69 74 65 33 5f 75  *z, .  sqlite3_u
2680: 69 6e 74 36 34 20 6e 2c 0a 20 20 76 6f 69 64 20  int64 n,.  void 
2690: 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a  (*xDel)(void *).
26a0: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
26b0: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
26c0: 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e  pCtx->pOut->db->
26d0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65  mutex) );.  asse
26e0: 72 74 28 20 78 44 65 6c 21 3d 53 51 4c 49 54 45  rt( xDel!=SQLITE
26f0: 5f 44 59 4e 41 4d 49 43 20 29 3b 0a 20 20 69 66  _DYNAMIC );.  if
2700: 28 20 6e 3e 30 78 37 66 66 66 66 66 66 66 20 29  ( n>0x7fffffff )
2710: 7b 0a 20 20 20 20 28 76 6f 69 64 29 69 6e 76 6f  {.    (void)invo
2720: 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63 74 6f  keValueDestructo
2730: 72 28 7a 2c 20 78 44 65 6c 2c 20 70 43 74 78 29  r(z, xDel, pCtx)
2740: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2750: 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72  etResultStrOrErr
2760: 6f 72 28 70 43 74 78 2c 20 7a 2c 20 28 69 6e 74  or(pCtx, z, (int
2770: 29 6e 2c 20 30 2c 20 78 44 65 6c 29 3b 0a 20 20  )n, 0, xDel);.  
2780: 7d 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  }.}.void sqlite3
2790: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 73  _result_double(s
27a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
27b0: 70 43 74 78 2c 20 64 6f 75 62 6c 65 20 72 56 61  pCtx, double rVa
27c0: 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  l){.  assert( sq
27d0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
27e0: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
27f0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
2800: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44 6f  ite3VdbeMemSetDo
2810: 75 62 6c 65 28 70 43 74 78 2d 3e 70 4f 75 74 2c  uble(pCtx->pOut,
2820: 20 72 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   rVal);.}.void s
2830: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
2840: 72 6f 72 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ror(sqlite3_cont
2850: 65 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  ext *pCtx, const
2860: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
2870: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
2880: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2890: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
28a0: 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78 2d  utex) );.  pCtx-
28b0: 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54  >isError = SQLIT
28c0: 45 5f 45 52 52 4f 52 3b 0a 20 20 70 43 74 78 2d  E_ERROR;.  pCtx-
28d0: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 31  >fErrorOrAux = 1
28e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
28f0: 65 6d 53 65 74 53 74 72 28 70 43 74 78 2d 3e 70  emSetStr(pCtx->p
2900: 4f 75 74 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  Out, z, n, SQLIT
2910: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 54  E_UTF8, SQLITE_T
2920: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66  RANSIENT);.}.#if
2930: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2940: 5f 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69  _UTF16.void sqli
2950: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
2960: 31 36 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  16(sqlite3_conte
2970: 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20  xt *pCtx, const 
2980: 76 6f 69 64 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b  void *z, int n){
2990: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
29a0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
29b0: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
29c0: 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78 2d 3e  tex) );.  pCtx->
29d0: 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45  isError = SQLITE
29e0: 5f 45 52 52 4f 52 3b 0a 20 20 70 43 74 78 2d 3e  _ERROR;.  pCtx->
29f0: 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 31 3b  fErrorOrAux = 1;
2a00: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2a10: 6d 53 65 74 53 74 72 28 70 43 74 78 2d 3e 70 4f  mSetStr(pCtx->pO
2a20: 75 74 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  ut, z, n, SQLITE
2a30: 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51  _UTF16NATIVE, SQ
2a40: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2a50: 0a 7d 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  .}.#endif.void s
2a60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
2a70: 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  t(sqlite3_contex
2a80: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 56 61  t *pCtx, int iVa
2a90: 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  l){.  assert( sq
2aa0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
2ab0: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
2ac0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
2ad0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2ae0: 74 36 34 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20  t64(pCtx->pOut, 
2af0: 28 69 36 34 29 69 56 61 6c 29 3b 0a 7d 0a 76 6f  (i64)iVal);.}.vo
2b00: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2b10: 74 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f  t_int64(sqlite3_
2b20: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69  context *pCtx, i
2b30: 36 34 20 69 56 61 6c 29 7b 0a 20 20 61 73 73 65  64 iVal){.  asse
2b40: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
2b50: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75  x_held(pCtx->pOu
2b60: 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  t->db->mutex) );
2b70: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2b80: 6d 53 65 74 49 6e 74 36 34 28 70 43 74 78 2d 3e  mSetInt64(pCtx->
2b90: 70 4f 75 74 2c 20 69 56 61 6c 29 3b 0a 7d 0a 76  pOut, iVal);.}.v
2ba0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
2bb0: 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  lt_null(sqlite3_
2bc0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a  context *pCtx){.
2bd0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2be0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
2bf0: 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74  x->pOut->db->mut
2c00: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
2c10: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2c20: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 7d 0a 76 6f  Ctx->pOut);.}.vo
2c30: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2c40: 74 5f 73 75 62 74 79 70 65 28 73 71 6c 69 74 65  t_subtype(sqlite
2c50: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2c60: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 65 53   unsigned int eS
2c70: 75 62 74 79 70 65 29 7b 0a 20 20 4d 65 6d 20 2a  ubtype){.  Mem *
2c80: 70 4f 75 74 20 3d 20 70 43 74 78 2d 3e 70 4f 75  pOut = pCtx->pOu
2c90: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  t;.  assert( sql
2ca0: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
2cb0: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pOut->db->mutex)
2cc0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 53 75 62   );.  pOut->eSub
2cd0: 74 79 70 65 20 3d 20 65 53 75 62 74 79 70 65 20  type = eSubtype 
2ce0: 26 20 30 78 66 66 3b 0a 20 20 70 4f 75 74 2d 3e  & 0xff;.  pOut->
2cf0: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 75 62  flags |= MEM_Sub
2d00: 74 79 70 65 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  type;.}.void sql
2d10: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
2d20: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
2d30: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f  ext *pCtx, .  co
2d40: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 0a 20 20  nst char *z, .  
2d50: 69 6e 74 20 6e 2c 0a 20 20 76 6f 69 64 20 28 2a  int n,.  void (*
2d60: 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b  xDel)(void *).){
2d70: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
2d80: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
2d90: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
2da0: 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73  tex) );.  setRes
2db0: 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43  ultStrOrError(pC
2dc0: 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  tx, z, n, SQLITE
2dd0: 5f 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a  _UTF8, xDel);.}.
2de0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
2df0: 75 6c 74 5f 74 65 78 74 36 34 28 0a 20 20 73 71  ult_text64(.  sq
2e00: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2e10: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68  Ctx, .  const ch
2e20: 61 72 20 2a 7a 2c 20 0a 20 20 73 71 6c 69 74 65  ar *z, .  sqlite
2e30: 33 5f 75 69 6e 74 36 34 20 6e 2c 0a 20 20 76 6f  3_uint64 n,.  vo
2e40: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
2e50: 2a 29 2c 0a 20 20 75 6e 73 69 67 6e 65 64 20 63  *),.  unsigned c
2e60: 68 61 72 20 65 6e 63 0a 29 7b 0a 20 20 61 73 73  har enc.){.  ass
2e70: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2e80: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
2e90: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
2ea0: 3b 0a 20 20 61 73 73 65 72 74 28 20 78 44 65 6c  ;.  assert( xDel
2eb0: 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43  !=SQLITE_DYNAMIC
2ec0: 20 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53   );.  if( enc==S
2ed0: 51 4c 49 54 45 5f 55 54 46 31 36 20 29 20 65 6e  QLITE_UTF16 ) en
2ee0: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c = SQLITE_UTF16
2ef0: 4e 41 54 49 56 45 3b 0a 20 20 69 66 28 20 6e 3e  NATIVE;.  if( n>
2f00: 30 78 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20  0x7fffffff ){.  
2f10: 20 20 28 76 6f 69 64 29 69 6e 76 6f 6b 65 56 61    (void)invokeVa
2f20: 6c 75 65 44 65 73 74 72 75 63 74 6f 72 28 7a 2c  lueDestructor(z,
2f30: 20 78 44 65 6c 2c 20 70 43 74 78 29 3b 0a 20 20   xDel, pCtx);.  
2f40: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 65 74 52 65  }else{.    setRe
2f50: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
2f60: 43 74 78 2c 20 7a 2c 20 28 69 6e 74 29 6e 2c 20  Ctx, z, (int)n, 
2f70: 65 6e 63 2c 20 78 44 65 6c 29 3b 0a 20 20 7d 0a  enc, xDel);.  }.
2f80: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
2f90: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64  _OMIT_UTF16.void
2fa0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2fb0: 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65  text16(.  sqlite
2fc0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2fd0: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
2fe0: 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20  z, .  int n, .  
2ff0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
3000: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
3010: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
3020: 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d  held(pCtx->pOut-
3030: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
3040: 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45   setResultStrOrE
3050: 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c  rror(pCtx, z, n,
3060: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3070: 49 56 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f  IVE, xDel);.}.vo
3080: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
3090: 74 5f 74 65 78 74 31 36 62 65 28 0a 20 20 73 71  t_text16be(.  sq
30a0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
30b0: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Ctx, .  const vo
30c0: 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  id *z, .  int n,
30d0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
30e0: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
30f0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
3100: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
3110: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
3120: 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74  );.  setResultSt
3130: 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a  rOrError(pCtx, z
3140: 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , n, SQLITE_UTF1
3150: 36 42 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f  6BE, xDel);.}.vo
3160: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
3170: 74 5f 74 65 78 74 31 36 6c 65 28 0a 20 20 73 71  t_text16le(.  sq
3180: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
3190: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Ctx, .  const vo
31a0: 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  id *z, .  int n,
31b0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
31c0: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
31d0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
31e0: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
31f0: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
3200: 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74  );.  setResultSt
3210: 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a  rOrError(pCtx, z
3220: 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , n, SQLITE_UTF1
3230: 36 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 65  6LE, xDel);.}.#e
3240: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
3250: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 76 6f 69  MIT_UTF16 */.voi
3260: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
3270: 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 63  _value(sqlite3_c
3280: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 73 71  ontext *pCtx, sq
3290: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
32a0: 6c 75 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20  lue){.  assert( 
32b0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
32c0: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
32d0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
32e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
32f0: 79 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 70 56  y(pCtx->pOut, pV
3300: 61 6c 75 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  alue);.}.void sq
3310: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
3320: 6f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f  oblob(sqlite3_co
3330: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74  ntext *pCtx, int
3340: 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73   n){.  assert( s
3350: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
3360: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
3370: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
3380: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a  lite3VdbeMemSetZ
3390: 65 72 6f 42 6c 6f 62 28 70 43 74 78 2d 3e 70 4f  eroBlob(pCtx->pO
33a0: 75 74 2c 20 6e 29 3b 0a 7d 0a 69 6e 74 20 73 71  ut, n);.}.int sq
33b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
33c0: 6f 62 6c 6f 62 36 34 28 73 71 6c 69 74 65 33 5f  oblob64(sqlite3_
33d0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 75  context *pCtx, u
33e0: 36 34 20 6e 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  64 n){.  Mem *pO
33f0: 75 74 20 3d 20 70 43 74 78 2d 3e 70 4f 75 74 3b  ut = pCtx->pOut;
3400: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
3410: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 4f  e3_mutex_held(pO
3420: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
3430: 3b 0a 20 20 69 66 28 20 6e 3e 28 75 36 34 29 70  ;.  if( n>(u64)p
3440: 4f 75 74 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  Out->db->aLimit[
3450: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
3460: 47 54 48 5d 20 29 7b 0a 20 20 20 20 72 65 74 75  GTH] ){.    retu
3470: 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  rn SQLITE_TOOBIG
3480: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
3490: 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f  dbeMemSetZeroBlo
34a0: 62 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 28 69  b(pCtx->pOut, (i
34b0: 6e 74 29 6e 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt)n);.  return 
34c0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 76 6f 69  SQLITE_OK;.}.voi
34d0: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
34e0: 5f 65 72 72 6f 72 5f 63 6f 64 65 28 73 71 6c 69  _error_code(sqli
34f0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
3500: 78 2c 20 69 6e 74 20 65 72 72 43 6f 64 65 29 7b  x, int errCode){
3510: 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
3520: 20 3d 20 65 72 72 43 6f 64 65 3b 0a 20 20 70 43   = errCode;.  pC
3530: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
3540: 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
3550: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
3560: 43 74 78 2d 3e 70 56 64 62 65 20 29 20 70 43 74  Ctx->pVdbe ) pCt
3570: 78 2d 3e 70 56 64 62 65 2d 3e 72 63 41 70 70 20  x->pVdbe->rcApp 
3580: 3d 20 65 72 72 43 6f 64 65 3b 0a 23 65 6e 64 69  = errCode;.#endi
3590: 66 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f  f.  if( pCtx->pO
35a0: 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
35b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
35c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
35d0: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 73 71 6c  (pCtx->pOut, sql
35e0: 69 74 65 33 45 72 72 53 74 72 28 65 72 72 43 6f  ite3ErrStr(errCo
35f0: 64 65 29 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20  de), -1, .      
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3610: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20     SQLITE_UTF8, 
3620: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
3630: 20 20 7d 0a 7d 0a 0a 2f 2a 20 46 6f 72 63 65 20    }.}../* Force 
3640: 61 6e 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  an SQLITE_TOOBIG
3650: 20 65 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20   error. */.void 
3660: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
3670: 72 72 6f 72 5f 74 6f 6f 62 69 67 28 73 71 6c 69  rror_toobig(sqli
3680: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
3690: 78 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  x){.  assert( sq
36a0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
36b0: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
36c0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74  >mutex) );.  pCt
36d0: 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c  x->isError = SQL
36e0: 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 70 43  ITE_TOOBIG;.  pC
36f0: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
3700: 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  = 1;.  sqlite3Vd
3710: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43 74 78  beMemSetStr(pCtx
3720: 2d 3e 70 4f 75 74 2c 20 22 73 74 72 69 6e 67 20  ->pOut, "string 
3730: 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22  or blob too big"
3740: 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20  , -1, .         
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
3760: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
3770: 45 5f 53 54 41 54 49 43 29 3b 0a 7d 0a 0a 2f 2a  E_STATIC);.}../*
3780: 20 41 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   An SQLITE_NOMEM
3790: 20 65 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20   error. */.void 
37a0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
37b0: 72 72 6f 72 5f 6e 6f 6d 65 6d 28 73 71 6c 69 74  rror_nomem(sqlit
37c0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
37d0: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
37e0: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
37f0: 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e  pCtx->pOut->db->
3800: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69  mutex) );.  sqli
3810: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
3820: 6c 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  l(pCtx->pOut);. 
3830: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d   pCtx->isError =
3840: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
3850: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
3860: 75 78 20 3d 20 31 3b 0a 20 20 70 43 74 78 2d 3e  ux = 1;.  pCtx->
3870: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 61 6c 6c 6f 63  pOut->db->malloc
3880: 46 61 69 6c 65 64 20 3d 20 31 3b 0a 7d 0a 0a 2f  Failed = 1;.}../
3890: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
38a0: 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  on is called aft
38b0: 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
38c0: 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 6d 69 74   has been commit
38d0: 74 65 64 2e 20 49 74 20 0a 2a 2a 20 69 6e 76 6f  ted. It .** invo
38e0: 6b 65 73 20 63 61 6c 6c 62 61 63 6b 73 20 72 65  kes callbacks re
38f0: 67 69 73 74 65 72 65 64 20 77 69 74 68 20 73 71  gistered with sq
3900: 6c 69 74 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28 29  lite3_wal_hook()
3910: 20 61 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   as required..*/
3920: 0a 73 74 61 74 69 63 20 69 6e 74 20 64 6f 57 61  .static int doWa
3930: 6c 43 61 6c 6c 62 61 63 6b 73 28 73 71 6c 69 74  lCallbacks(sqlit
3940: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 72  e3 *db){.  int r
3950: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3960: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
3970: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 69 3b 0a  IT_WAL.  int i;.
3980: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
3990: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
39a0: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d  Btree *pBt = db-
39b0: 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
39c0: 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
39d0: 20 20 69 6e 74 20 6e 45 6e 74 72 79 3b 0a 20 20    int nEntry;.  
39e0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
39f0: 45 6e 74 65 72 28 70 42 74 29 3b 0a 20 20 20 20  Enter(pBt);.    
3a00: 20 20 6e 45 6e 74 72 79 20 3d 20 73 71 6c 69 74    nEntry = sqlit
3a10: 65 33 50 61 67 65 72 57 61 6c 43 61 6c 6c 62 61  e3PagerWalCallba
3a20: 63 6b 28 73 71 6c 69 74 65 33 42 74 72 65 65 50  ck(sqlite3BtreeP
3a30: 61 67 65 72 28 70 42 74 29 29 3b 0a 20 20 20 20  ager(pBt));.    
3a40: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65    sqlite3BtreeLe
3a50: 61 76 65 28 70 42 74 29 3b 0a 20 20 20 20 20 20  ave(pBt);.      
3a60: 69 66 28 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c  if( db->xWalCall
3a70: 62 61 63 6b 20 26 26 20 6e 45 6e 74 72 79 3e 30  back && nEntry>0
3a80: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3a90: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
3aa0: 3d 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61  = db->xWalCallba
3ab0: 63 6b 28 64 62 2d 3e 70 57 61 6c 41 72 67 2c 20  ck(db->pWalArg, 
3ac0: 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
3ad0: 4e 61 6d 65 2c 20 6e 45 6e 74 72 79 29 3b 0a 20  Name, nEntry);. 
3ae0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
3af0: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
3b00: 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45   rc;.}.../*.** E
3b10: 78 65 63 75 74 65 20 74 68 65 20 73 74 61 74 65  xecute the state
3b20: 6d 65 6e 74 20 70 53 74 6d 74 2c 20 65 69 74 68  ment pStmt, eith
3b30: 65 72 20 75 6e 74 69 6c 20 61 20 72 6f 77 20 6f  er until a row o
3b40: 66 20 64 61 74 61 20 69 73 20 72 65 61 64 79 2c  f data is ready,
3b50: 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
3b60: 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  t is completely 
3b70: 65 78 65 63 75 74 65 64 20 6f 72 20 61 6e 20 65  executed or an e
3b80: 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a  rror occurs..**.
3b90: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3ba0: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
3bb0: 75 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67 69 63  ulk of the logic
3bc0: 20 62 65 68 69 6e 64 20 74 68 65 20 73 71 6c 69   behind the sqli
3bd0: 74 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41 50 49  te_step().** API
3be0: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 74 68 69 6e  .  The only thin
3bf0: 67 20 6f 6d 69 74 74 65 64 20 69 73 20 74 68 65  g omitted is the
3c00: 20 61 75 74 6f 6d 61 74 69 63 20 72 65 63 6f 6d   automatic recom
3c10: 70 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20 73 63  pile if a .** sc
3c20: 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61 73 20  hema change has 
3c30: 6f 63 63 75 72 72 65 64 2e 20 20 54 68 61 74 20  occurred.  That 
3c40: 64 65 74 61 69 6c 20 69 73 20 68 61 6e 64 6c 65  detail is handle
3c50: 64 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75 74 65  d by the.** oute
3c60: 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
3c70: 20 77 72 61 70 70 65 72 20 70 72 6f 63 65 64 75   wrapper procedu
3c80: 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  re..*/.static in
3c90: 74 20 73 71 6c 69 74 65 33 53 74 65 70 28 56 64  t sqlite3Step(Vd
3ca0: 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  be *p){.  sqlite
3cb0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
3cc0: 0a 0a 20 20 61 73 73 65 72 74 28 70 29 3b 0a 20  ..  assert(p);. 
3cd0: 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56   if( p->magic!=V
3ce0: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 7b  DBE_MAGIC_RUN ){
3cf0: 0a 20 20 20 20 2f 2a 20 57 65 20 75 73 65 64 20  .    /* We used 
3d00: 74 6f 20 72 65 71 75 69 72 65 20 74 68 61 74 20  to require that 
3d10: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20  sqlite3_reset() 
3d20: 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65  be called before
3d30: 20 72 65 74 72 79 69 6e 67 0a 20 20 20 20 2a 2a   retrying.    **
3d40: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
3d50: 61 66 74 65 72 20 61 6e 79 20 65 72 72 6f 72 20  after any error 
3d60: 6f 72 20 61 66 74 65 72 20 53 51 4c 49 54 45 5f  or after SQLITE_
3d70: 44 4f 4e 45 2e 20 20 42 75 74 20 62 65 67 69 6e  DONE.  But begin
3d80: 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 77 69 74 68  ning.    ** with
3d90: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 2c 20   version 3.7.0, 
3da0: 77 65 20 63 68 61 6e 67 65 64 20 74 68 69 73 20  we changed this 
3db0: 73 6f 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f  so that sqlite3_
3dc0: 72 65 73 65 74 28 29 20 77 6f 75 6c 64 0a 20 20  reset() would.  
3dd0: 20 20 2a 2a 20 62 65 20 63 61 6c 6c 65 64 20 61    ** be called a
3de0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 73  utomatically ins
3df0: 74 65 61 64 20 6f 66 20 74 68 72 6f 77 69 6e 67  tead of throwing
3e00: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
3e10: 53 45 20 65 72 72 6f 72 2e 0a 20 20 20 20 2a 2a  SE error..    **
3e20: 20 54 68 69 73 20 22 61 75 74 6f 6d 61 74 69 63   This "automatic
3e30: 2d 72 65 73 65 74 22 20 63 68 61 6e 67 65 20 69  -reset" change i
3e40: 73 20 6e 6f 74 20 74 65 63 68 6e 69 63 61 6c 6c  s not technicall
3e50: 79 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69  y an incompatibi
3e60: 6c 69 74 79 2c 20 0a 20 20 20 20 2a 2a 20 73 69  lity, .    ** si
3e70: 6e 63 65 20 61 6e 79 20 61 70 70 6c 69 63 61 74  nce any applicat
3e80: 69 6f 6e 20 74 68 61 74 20 72 65 63 65 69 76 65  ion that receive
3e90: 73 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  s an SQLITE_MISU
3ea0: 53 45 20 69 73 20 62 72 6f 6b 65 6e 20 62 79 0a  SE is broken by.
3eb0: 20 20 20 20 2a 2a 20 64 65 66 69 6e 69 74 69 6f      ** definitio
3ec0: 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
3ed0: 20 4e 65 76 65 72 74 68 65 6c 65 73 73 2c 20 73   Nevertheless, s
3ee0: 6f 6d 65 20 70 75 62 6c 69 73 68 65 64 20 61 70  ome published ap
3ef0: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
3f00: 77 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20  were originally 
3f10: 77 72 69 74 74 65 6e 0a 20 20 20 20 2a 2a 20 66  written.    ** f
3f20: 6f 72 20 76 65 72 73 69 6f 6e 20 33 2e 36 2e 32  or version 3.6.2
3f30: 33 20 6f 72 20 65 61 72 6c 69 65 72 20 64 6f 20  3 or earlier do 
3f40: 69 6e 20 66 61 63 74 20 64 65 70 65 6e 64 20 6f  in fact depend o
3f50: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
3f60: 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 73 2c  .    ** returns,
3f70: 20 61 6e 64 20 74 68 6f 73 65 20 77 65 72 65 20   and those were 
3f80: 62 72 6f 6b 65 6e 20 62 79 20 74 68 65 20 61 75  broken by the au
3f90: 74 6f 6d 61 74 69 63 2d 72 65 73 65 74 20 63 68  tomatic-reset ch
3fa0: 61 6e 67 65 2e 20 20 41 73 20 61 0a 20 20 20 20  ange.  As a.    
3fb0: 2a 2a 20 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64  ** a work-around
3fc0: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49  , the SQLITE_OMI
3fd0: 54 5f 41 55 54 4f 52 45 53 45 54 20 63 6f 6d 70  T_AUTORESET comp
3fe0: 69 6c 65 2d 74 69 6d 65 20 72 65 73 74 6f 72 65  ile-time restore
3ff0: 73 20 74 68 65 0a 20 20 20 20 2a 2a 20 6c 65 67  s the.    ** leg
4000: 61 63 79 20 62 65 68 61 76 69 6f 72 20 6f 66 20  acy behavior of 
4010: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
4020: 5f 4d 49 53 55 53 45 20 66 6f 72 20 63 61 73 65  _MISUSE for case
4030: 73 20 77 68 65 72 65 20 74 68 65 20 0a 20 20 20  s where the .   
4040: 20 2a 2a 20 70 72 65 76 69 6f 75 73 20 73 71 6c   ** previous sql
4050: 69 74 65 33 5f 73 74 65 70 28 29 20 72 65 74 75  ite3_step() retu
4060: 72 6e 65 64 20 73 6f 6d 65 74 68 69 6e 67 20 6f  rned something o
4070: 74 68 65 72 20 74 68 61 6e 20 61 20 53 51 4c 49  ther than a SQLI
4080: 54 45 5f 4c 4f 43 4b 45 44 0a 20 20 20 20 2a 2a  TE_LOCKED.    **
4090: 20 6f 72 20 53 51 4c 49 54 45 5f 42 55 53 59 20   or SQLITE_BUSY 
40a0: 65 72 72 6f 72 2e 0a 20 20 20 20 2a 2f 0a 23 69  error..    */.#i
40b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
40c0: 5f 41 55 54 4f 52 45 53 45 54 0a 20 20 20 20 69  _AUTORESET.    i
40d0: 66 28 20 28 72 63 20 3d 20 70 2d 3e 72 63 26 30  f( (rc = p->rc&0
40e0: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
40f0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
4100: 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
4110: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 28 73  sqlite3_reset((s
4120: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 70 29 3b  qlite3_stmt*)p);
4130: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4140: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4150: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
4160: 20 7d 0a 23 65 6c 73 65 0a 20 20 20 20 73 71 6c   }.#else.    sql
4170: 69 74 65 33 5f 72 65 73 65 74 28 28 73 71 6c 69  ite3_reset((sqli
4180: 74 65 33 5f 73 74 6d 74 2a 29 70 29 3b 0a 23 65  te3_stmt*)p);.#e
4190: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ndif.  }..  /* C
41a0: 68 65 63 6b 20 74 68 61 74 20 6d 61 6c 6c 6f 63  heck that malloc
41b0: 28 29 20 68 61 73 20 6e 6f 74 20 66 61 69 6c 65  () has not faile
41c0: 64 2e 20 49 66 20 69 74 20 68 61 73 2c 20 72 65  d. If it has, re
41d0: 74 75 72 6e 20 65 61 72 6c 79 2e 20 2a 2f 0a 20  turn early. */. 
41e0: 20 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 69   db = p->db;.  i
41f0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4200: 6c 65 64 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  led ){.    p->rc
4210: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
4220: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4230: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20  TE_NOMEM;.  }.. 
4240: 20 69 66 28 20 70 2d 3e 70 63 3c 3d 30 20 26 26   if( p->pc<=0 &&
4250: 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
4260: 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54     p->rc = SQLIT
4270: 45 5f 53 43 48 45 4d 41 3b 0a 20 20 20 20 72 63  E_SCHEMA;.    rc
4280: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
4290: 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f 6f 66  .    goto end_of
42a0: 5f 73 74 65 70 3b 0a 20 20 7d 0a 20 20 69 66 28  _step;.  }.  if(
42b0: 20 70 2d 3e 70 63 3c 30 20 29 7b 0a 20 20 20 20   p->pc<0 ){.    
42c0: 2f 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  /* If there are 
42d0: 6e 6f 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  no other stateme
42e0: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  nts currently ru
42f0: 6e 6e 69 6e 67 2c 20 74 68 65 6e 0a 20 20 20 20  nning, then.    
4300: 2a 2a 20 72 65 73 65 74 20 74 68 65 20 69 6e 74  ** reset the int
4310: 65 72 72 75 70 74 20 66 6c 61 67 2e 20 20 54 68  errupt flag.  Th
4320: 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 63 61  is prevents a ca
4330: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 69 6e  ll to sqlite3_in
4340: 74 65 72 72 75 70 74 0a 20 20 20 20 2a 2a 20 66  terrupt.    ** f
4350: 72 6f 6d 20 69 6e 74 65 72 72 75 70 74 69 6e 67  rom interrupting
4360: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61   a statement tha
4370: 74 20 68 61 73 20 6e 6f 74 20 79 65 74 20 73 74  t has not yet st
4380: 61 72 74 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  arted..    */.  
4390: 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 41    if( db->nVdbeA
43a0: 63 74 69 76 65 3d 3d 30 20 29 7b 0a 20 20 20 20  ctive==0 ){.    
43b0: 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72    db->u1.isInter
43c0: 72 75 70 74 65 64 20 3d 20 30 3b 0a 20 20 20 20  rupted = 0;.    
43d0: 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  }..    assert( d
43e0: 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
43f0: 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
4400: 74 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 7c 7c  t==0 .        ||
4410: 20 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43   (db->nDeferredC
4420: 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
4430: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
4440: 30 29 0a 20 20 20 20 29 3b 0a 0a 23 69 66 6e 64  0).    );..#ifnd
4450: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
4460: 52 41 43 45 0a 20 20 20 20 69 66 28 20 64 62 2d  RACE.    if( db-
4470: 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21 64 62  >xProfile && !db
4480: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 26 26 20 70  ->init.busy && p
4490: 2d 3e 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20  ->zSql ){.      
44a0: 73 71 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74  sqlite3OsCurrent
44b0: 54 69 6d 65 49 6e 74 36 34 28 64 62 2d 3e 70 56  TimeInt64(db->pV
44c0: 66 73 2c 20 26 70 2d 3e 73 74 61 72 74 54 69 6d  fs, &p->startTim
44d0: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
44e0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e       assert( p->
44f0: 73 74 61 72 74 54 69 6d 65 3d 3d 30 20 29 3b 0a  startTime==0 );.
4500: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
4510: 20 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76    db->nVdbeActiv
4520: 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  e++;.    if( p->
4530: 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 20 64 62  readOnly==0 ) db
4540: 2d 3e 6e 56 64 62 65 57 72 69 74 65 2b 2b 3b 0a  ->nVdbeWrite++;.
4550: 20 20 20 20 69 66 28 20 70 2d 3e 62 49 73 52 65      if( p->bIsRe
4560: 61 64 65 72 20 29 20 64 62 2d 3e 6e 56 64 62 65  ader ) db->nVdbe
4570: 52 65 61 64 2b 2b 3b 0a 20 20 20 20 70 2d 3e 70  Read++;.    p->p
4580: 63 20 3d 20 30 3b 0a 20 20 7d 0a 23 69 66 64 65  c = 0;.  }.#ifde
4590: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
45a0: 20 70 2d 3e 72 63 41 70 70 20 3d 20 53 51 4c 49   p->rcApp = SQLI
45b0: 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 23 69  TE_OK;.#endif.#i
45c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
45d0: 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 66 28 20  T_EXPLAIN.  if( 
45e0: 70 2d 3e 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20  p->explain ){.  
45f0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
4600: 62 65 4c 69 73 74 28 70 29 3b 0a 20 20 7d 65 6c  beList(p);.  }el
4610: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
4620: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4630: 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 64 62 2d 3e   */.  {.    db->
4640: 6e 56 64 62 65 45 78 65 63 2b 2b 3b 0a 20 20 20  nVdbeExec++;.   
4650: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
4660: 65 45 78 65 63 28 70 29 3b 0a 20 20 20 20 64 62  eExec(p);.    db
4670: 2d 3e 6e 56 64 62 65 45 78 65 63 2d 2d 3b 0a 20  ->nVdbeExec--;. 
4680: 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
4690: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
46a0: 2f 2a 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  /* If the statem
46b0: 65 6e 74 20 63 6f 6d 70 6c 65 74 65 64 20 73 75  ent completed su
46c0: 63 63 65 73 73 66 75 6c 6c 79 2c 20 69 6e 76 6f  ccessfully, invo
46d0: 6b 65 20 74 68 65 20 70 72 6f 66 69 6c 65 20 63  ke the profile c
46e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 66 28  allback */.  if(
46f0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20   rc!=SQLITE_ROW 
4700: 29 20 63 68 65 63 6b 50 72 6f 66 69 6c 65 43 61  ) checkProfileCa
4710: 6c 6c 62 61 63 6b 28 64 62 2c 20 70 29 3b 0a 23  llback(db, p);.#
4720: 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 72 63 3d  endif..  if( rc=
4730: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
4740: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72      assert( p->r
4750: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
4760: 20 20 20 20 70 2d 3e 72 63 20 3d 20 64 6f 57 61      p->rc = doWa
4770: 6c 43 61 6c 6c 62 61 63 6b 73 28 64 62 29 3b 0a  lCallbacks(db);.
4780: 20 20 20 20 69 66 28 20 70 2d 3e 72 63 21 3d 53      if( p->rc!=S
4790: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
47a0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
47b0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ROR;.    }.  }..
47c0: 20 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20    db->errCode = 
47d0: 72 63 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  rc;.  if( SQLITE
47e0: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 41  _NOMEM==sqlite3A
47f0: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 70 2d  piExit(p->db, p-
4800: 3e 72 63 29 20 29 7b 0a 20 20 20 20 70 2d 3e 72  >rc) ){.    p->r
4810: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
4820: 3b 0a 20 20 7d 0a 65 6e 64 5f 6f 66 5f 73 74 65  ;.  }.end_of_ste
4830: 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20  p:.  /* At this 
4840: 70 6f 69 6e 74 20 6c 6f 63 61 6c 20 76 61 72 69  point local vari
4850: 61 62 6c 65 20 72 63 20 68 6f 6c 64 73 20 74 68  able rc holds th
4860: 65 20 76 61 6c 75 65 20 74 68 61 74 20 73 68 6f  e value that sho
4870: 75 6c 64 20 62 65 20 0a 20 20 2a 2a 20 72 65 74  uld be .  ** ret
4880: 75 72 6e 65 64 20 69 66 20 74 68 69 73 20 73 74  urned if this st
4890: 61 74 65 6d 65 6e 74 20 77 61 73 20 63 6f 6d 70  atement was comp
48a0: 69 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 6c  iled using the l
48b0: 65 67 61 63 79 20 0a 20 20 2a 2a 20 73 71 6c 69  egacy .  ** sqli
48c0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 69 6e  te3_prepare() in
48d0: 74 65 72 66 61 63 65 2e 20 41 63 63 6f 72 64 69  terface. Accordi
48e0: 6e 67 20 74 6f 20 74 68 65 20 64 6f 63 73 2c 20  ng to the docs, 
48f0: 74 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  this can only.  
4900: 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
4910: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
4920: 69 72 73 74 20 61 73 73 65 72 74 28 29 20 62 65  irst assert() be
4930: 6c 6f 77 2e 20 56 61 72 69 61 62 6c 65 20 70 2d  low. Variable p-
4940: 3e 72 63 20 0a 20 20 2a 2a 20 63 6f 6e 74 61 69  >rc .  ** contai
4950: 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
4960: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
4970: 6e 65 64 20 69 66 20 73 71 6c 69 74 65 33 5f 66  ned if sqlite3_f
4980: 69 6e 61 6c 69 7a 65 28 29 20 0a 20 20 2a 2a 20  inalize() .  ** 
4990: 77 65 72 65 20 63 61 6c 6c 65 64 20 6f 6e 20 73  were called on s
49a0: 74 61 74 65 6d 65 6e 74 20 70 2e 0a 20 20 2a 2f  tatement p..  */
49b0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
49c0: 51 4c 49 54 45 5f 52 4f 57 20 20 7c 7c 20 72 63  QLITE_ROW  || rc
49d0: 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 20 20  ==SQLITE_DONE   
49e0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
49f0: 52 4f 52 20 0a 20 20 20 20 20 20 20 7c 7c 20 28  ROR .       || (
4a00: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
4a10: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
4a20: 49 54 45 5f 4d 49 53 55 53 45 0a 20 20 29 3b 0a  ITE_MISUSE.  );.
4a30: 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 72 63    assert( (p->rc
4a40: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20  !=SQLITE_ROW && 
4a50: 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  p->rc!=SQLITE_DO
4a60: 4e 45 29 20 7c 7c 20 70 2d 3e 72 63 3d 3d 70 2d  NE) || p->rc==p-
4a70: 3e 72 63 41 70 70 20 29 3b 0a 20 20 69 66 28 20  >rcApp );.  if( 
4a80: 70 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26  p->isPrepareV2 &
4a90: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57  & rc!=SQLITE_ROW
4aa0: 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44   && rc!=SQLITE_D
4ab0: 4f 4e 45 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ONE ){.    /* If
4ac0: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
4ad0: 77 61 73 20 70 72 65 70 61 72 65 64 20 75 73 69  was prepared usi
4ae0: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
4af0: 72 65 5f 76 32 28 29 2c 20 61 6e 64 20 61 6e 0a  re_v2(), and an.
4b00: 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 68 61 73      ** error has
4b10: 20 6f 63 63 75 72 72 65 64 2c 20 74 68 65 6e 20   occurred, then 
4b20: 72 65 74 75 72 6e 20 74 68 65 20 65 72 72 6f 72  return the error
4b30: 20 63 6f 64 65 20 69 6e 20 70 2d 3e 72 63 20 74   code in p->rc t
4b40: 6f 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 61 6c  o the.    ** cal
4b50: 6c 65 72 2e 20 53 65 74 20 74 68 65 20 65 72 72  ler. Set the err
4b60: 6f 72 20 63 6f 64 65 20 69 6e 20 74 68 65 20 64  or code in the d
4b70: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
4b80: 6f 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  o the same value
4b90: 2e 0a 20 20 20 20 2a 2f 20 0a 20 20 20 20 72 63  ..    */ .    rc
4ba0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 54 72   = sqlite3VdbeTr
4bb0: 61 6e 73 66 65 72 45 72 72 6f 72 28 70 29 3b 0a  ansferError(p);.
4bc0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 28 72 63    }.  return (rc
4bd0: 26 64 62 2d 3e 65 72 72 4d 61 73 6b 29 3b 0a 7d  &db->errMask);.}
4be0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
4bf0: 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 69 6d  the top-level im
4c00: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
4c10: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4c20: 20 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65 33   Call.** sqlite3
4c30: 53 74 65 70 28 29 20 74 6f 20 64 6f 20 6d 6f 73  Step() to do mos
4c40: 74 20 6f 66 20 74 68 65 20 77 6f 72 6b 2e 20 20  t of the work.  
4c50: 49 66 20 61 20 73 63 68 65 6d 61 20 65 72 72 6f  If a schema erro
4c60: 72 20 6f 63 63 75 72 73 2c 0a 2a 2a 20 63 61 6c  r occurs,.** cal
4c70: 6c 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  l sqlite3Reprepa
4c80: 72 65 28 29 20 61 6e 64 20 74 72 79 20 61 67 61  re() and try aga
4c90: 69 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  in..*/.int sqlit
4ca0: 65 33 5f 73 74 65 70 28 73 71 6c 69 74 65 33 5f  e3_step(sqlite3_
4cb0: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
4cc0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
4cd0: 4f 4b 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75  OK;      /* Resu
4ce0: 6c 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 53  lt from sqlite3S
4cf0: 74 65 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 72  tep() */.  int r
4d00: 63 32 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  c2 = SQLITE_OK; 
4d10: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 66 72      /* Result fr
4d20: 6f 6d 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  om sqlite3Reprep
4d30: 61 72 65 28 29 20 2a 2f 0a 20 20 56 64 62 65 20  are() */.  Vdbe 
4d40: 2a 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *v = (Vdbe*)pStm
4d50: 74 3b 20 20 2f 2a 20 74 68 65 20 70 72 65 70 61  t;  /* the prepa
4d60: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
4d70: 0a 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 20  .  int cnt = 0; 
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4d90: 6f 75 6e 74 65 72 20 74 6f 20 70 72 65 76 65 6e  ounter to preven
4da0: 74 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 20  t infinite loop 
4db0: 6f 66 20 72 65 70 72 65 70 61 72 65 73 20 2a 2f  of reprepares */
4dc0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4de0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
4df0: 65 63 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28  ection */..  if(
4e00: 20 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e 75   vdbeSafetyNotNu
4e10: 6c 6c 28 76 29 20 29 7b 0a 20 20 20 20 72 65 74  ll(v) ){.    ret
4e20: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
4e30: 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 64 62  E_BKPT;.  }.  db
4e40: 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 73 71 6c 69   = v->db;.  sqli
4e50: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
4e60: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 76 2d  db->mutex);.  v-
4e70: 3e 64 6f 69 6e 67 52 65 72 75 6e 20 3d 20 30 3b  >doingRerun = 0;
4e80: 0a 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20  .  while( (rc = 
4e90: 73 71 6c 69 74 65 33 53 74 65 70 28 76 29 29 3d  sqlite3Step(v))=
4ea0: 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20  =SQLITE_SCHEMA. 
4eb0: 20 20 20 20 20 20 20 20 26 26 20 63 6e 74 2b 2b          && cnt++
4ec0: 20 3c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 43   < SQLITE_MAX_SC
4ed0: 48 45 4d 41 5f 52 45 54 52 59 20 29 7b 0a 20 20  HEMA_RETRY ){.  
4ee0: 20 20 69 6e 74 20 73 61 76 65 64 50 63 20 3d 20    int savedPc = 
4ef0: 76 2d 3e 70 63 3b 0a 20 20 20 20 72 63 32 20 3d  v->pc;.    rc2 =
4f00: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 65 70   rc = sqlite3Rep
4f10: 72 65 70 61 72 65 28 76 29 3b 0a 20 20 20 20 69  repare(v);.    i
4f20: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
4f30: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c  ) break;.    sql
4f40: 69 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74  ite3_reset(pStmt
4f50: 29 3b 0a 20 20 20 20 69 66 28 20 73 61 76 65 64  );.    if( saved
4f60: 50 63 3e 3d 30 20 29 20 76 2d 3e 64 6f 69 6e 67  Pc>=0 ) v->doing
4f70: 52 65 72 75 6e 20 3d 20 31 3b 0a 20 20 20 20 61  Rerun = 1;.    a
4f80: 73 73 65 72 74 28 20 76 2d 3e 65 78 70 69 72 65  ssert( v->expire
4f90: 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  d==0 );.  }.  if
4fa0: 28 20 72 63 32 21 3d 53 51 4c 49 54 45 5f 4f 4b  ( rc2!=SQLITE_OK
4fb0: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4fc0: 63 61 73 65 20 6f 63 63 75 72 73 20 61 66 74 65  case occurs afte
4fd0: 72 20 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63  r failing to rec
4fe0: 6f 6d 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74  ompile an sql st
4ff0: 61 74 65 6d 65 6e 74 2e 20 0a 20 20 20 20 2a 2a  atement. .    **
5000: 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   The error messa
5010: 67 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 20  ge from the SQL 
5020: 63 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c 72  compiler has alr
5030: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
5040: 20 0a 20 20 20 20 2a 2a 20 69 6e 74 6f 20 74 68   .    ** into th
5050: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
5060: 65 2e 20 54 68 69 73 20 62 6c 6f 63 6b 20 63 6f  e. This block co
5070: 70 69 65 73 20 74 68 65 20 65 72 72 6f 72 20 6d  pies the error m
5080: 65 73 73 61 67 65 20 0a 20 20 20 20 2a 2a 20 66  essage .    ** f
5090: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
50a0: 20 68 61 6e 64 6c 65 20 69 6e 74 6f 20 74 68 65   handle into the
50b0: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 73   statement and s
50c0: 65 74 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ets the statemen
50d0: 74 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d  t.    ** program
50e0: 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 20 74 6f   counter to 0 to
50f0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 68 65   ensure that whe
5100: 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  n the statement 
5110: 69 73 20 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c  is .    ** final
5120: 69 7a 65 64 20 6f 72 20 72 65 73 65 74 20 74 68  ized or reset th
5130: 65 20 70 61 72 73 65 72 20 65 72 72 6f 72 20 6d  e parser error m
5140: 65 73 73 61 67 65 20 69 73 20 61 76 61 69 6c 61  essage is availa
5150: 62 6c 65 20 76 69 61 0a 20 20 20 20 2a 2a 20 73  ble via.    ** s
5160: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
5170: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63  and sqlite3_errc
5180: 6f 64 65 28 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  ode()..    */.  
5190: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
51a0: 72 72 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72  rr = (const char
51b0: 20 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   *)sqlite3_value
51c0: 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b  _text(db->pErr);
51d0: 20 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46   .    sqlite3DbF
51e0: 72 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72 4d  ree(db, v->zErrM
51f0: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 21 64 62  sg);.    if( !db
5200: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
5210: 7b 0a 20 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d  {.      v->zErrM
5220: 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
5230: 72 44 75 70 28 64 62 2c 20 7a 45 72 72 29 3b 0a  rDup(db, zErr);.
5240: 20 20 20 20 20 20 76 2d 3e 72 63 20 3d 20 72 63        v->rc = rc
5250: 32 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  2;.    } else {.
5260: 20 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d 73 67        v->zErrMsg
5270: 20 3d 20 30 3b 0a 20 20 20 20 20 20 76 2d 3e 72   = 0;.      v->r
5280: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
5290: 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 7d  NOMEM;.    }.  }
52a0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
52b0: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
52c0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
52d0: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
52e0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
52f0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74  .../*.** Extract
5300: 20 74 68 65 20 75 73 65 72 20 64 61 74 61 20 66   the user data f
5310: 72 6f 6d 20 61 20 73 71 6c 69 74 65 33 5f 63 6f  rom a sqlite3_co
5320: 6e 74 65 78 74 20 73 74 72 75 63 74 75 72 65 20  ntext structure 
5330: 61 6e 64 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20  and return a.** 
5340: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a  pointer to it..*
5350: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
5360: 75 73 65 72 5f 64 61 74 61 28 73 71 6c 69 74 65  user_data(sqlite
5370: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
5380: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
5390: 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75  >pFunc );.  retu
53a0: 72 6e 20 70 2d 3e 70 46 75 6e 63 2d 3e 70 55 73  rn p->pFunc->pUs
53b0: 65 72 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  erData;.}../*.**
53c0: 20 45 78 74 72 61 63 74 20 74 68 65 20 75 73 65   Extract the use
53d0: 72 20 64 61 74 61 20 66 72 6f 6d 20 61 20 73 71  r data from a sq
53e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74  lite3_context st
53f0: 72 75 63 74 75 72 65 20 61 6e 64 20 72 65 74 75  ructure and retu
5400: 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  rn a.** pointer 
5410: 74 6f 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 49 4d 50  to it..**.** IMP
5420: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
5430: 52 2d 34 36 37 39 38 2d 35 30 33 30 31 20 54 68  R-46798-50301 Th
5440: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
5450: 74 5f 64 62 5f 68 61 6e 64 6c 65 28 29 20 69 6e  t_db_handle() in
5460: 74 65 72 66 61 63 65 0a 2a 2a 20 72 65 74 75 72  terface.** retur
5470: 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  ns a copy of the
5480: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
5490: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
54a0: 69 6f 6e 20 28 74 68 65 20 31 73 74 0a 2a 2a 20  ion (the 1st.** 
54b0: 70 61 72 61 6d 65 74 65 72 29 20 6f 66 20 74 68  parameter) of th
54c0: 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  e sqlite3_create
54d0: 5f 66 75 6e 63 74 69 6f 6e 28 29 20 61 6e 64 0a  _function() and.
54e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ** sqlite3_creat
54f0: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 72  e_function16() r
5500: 6f 75 74 69 6e 65 73 20 74 68 61 74 20 6f 72 69  outines that ori
5510: 67 69 6e 61 6c 6c 79 20 72 65 67 69 73 74 65 72  ginally register
5520: 65 64 20 74 68 65 0a 2a 2a 20 61 70 70 6c 69 63  ed the.** applic
5530: 61 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 66 75  ation defined fu
5540: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 71 6c 69 74  nction..*/.sqlit
5550: 65 33 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6e 74  e3 *sqlite3_cont
5560: 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71  ext_db_handle(sq
5570: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5580: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26  ){.  assert( p &
5590: 26 20 70 2d 3e 70 4f 75 74 20 29 3b 0a 20 20 72  & p->pOut );.  r
55a0: 65 74 75 72 6e 20 70 2d 3e 70 4f 75 74 2d 3e 64  eturn p->pOut->d
55b0: 62 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  b;.}../*.** Retu
55c0: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
55d0: 69 6d 65 20 66 6f 72 20 61 20 73 74 61 74 65 6d  ime for a statem
55e0: 65 6e 74 2e 20 20 49 66 20 74 68 65 20 63 75 72  ent.  If the cur
55f0: 72 65 6e 74 20 74 69 6d 65 0a 2a 2a 20 69 73 20  rent time.** is 
5600: 72 65 71 75 65 73 74 65 64 20 6d 6f 72 65 20 74  requested more t
5610: 68 61 6e 20 6f 6e 63 65 20 77 69 74 68 69 6e 20  han once within 
5620: 74 68 65 20 73 61 6d 65 20 72 75 6e 20 6f 66 20  the same run of 
5630: 61 20 73 69 6e 67 6c 65 20 70 72 65 70 61 72 65  a single prepare
5640: 64 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2c 20  d.** statement, 
5650: 74 68 65 20 65 78 61 63 74 20 73 61 6d 65 20 74  the exact same t
5660: 69 6d 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  ime is returned 
5670: 66 6f 72 20 65 61 63 68 20 69 6e 76 6f 63 61 74  for each invocat
5680: 69 6f 6e 20 72 65 67 61 72 64 6c 65 73 73 0a 2a  ion regardless.*
5690: 2a 20 6f 66 20 74 68 65 20 61 6d 6f 75 6e 74 20  * of the amount 
56a0: 6f 66 20 74 69 6d 65 20 74 68 61 74 20 65 6c 61  of time that ela
56b0: 70 73 65 73 20 62 65 74 77 65 65 6e 20 69 6e 76  pses between inv
56c0: 6f 63 61 74 69 6f 6e 73 2e 20 20 49 6e 20 6f 74  ocations.  In ot
56d0: 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74 68  her words,.** th
56e0: 65 20 74 69 6d 65 20 72 65 74 75 72 6e 65 64 20  e time returned 
56f0: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 74 69  is always the ti
5700: 6d 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  me of the first 
5710: 63 61 6c 6c 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33  call..*/.sqlite3
5720: 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
5730: 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
5740: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5750: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 23 69 66  ){.  int rc;.#if
5760: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
5770: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5780: 34 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  4.  sqlite3_int6
5790: 34 20 2a 70 69 54 69 6d 65 20 3d 20 26 70 2d 3e  4 *piTime = &p->
57a0: 70 56 64 62 65 2d 3e 69 43 75 72 72 65 6e 74 54  pVdbe->iCurrentT
57b0: 69 6d 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ime;.  assert( p
57c0: 2d 3e 70 56 64 62 65 21 3d 30 20 29 3b 0a 23 65  ->pVdbe!=0 );.#e
57d0: 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  lse.  sqlite3_in
57e0: 74 36 34 20 69 54 69 6d 65 20 3d 20 30 3b 0a 20  t64 iTime = 0;. 
57f0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a   sqlite3_int64 *
5800: 70 69 54 69 6d 65 20 3d 20 70 2d 3e 70 56 64 62  piTime = p->pVdb
5810: 65 21 3d 30 20 3f 20 26 70 2d 3e 70 56 64 62 65  e!=0 ? &p->pVdbe
5820: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3a  ->iCurrentTime :
5830: 20 26 69 54 69 6d 65 3b 0a 23 65 6e 64 69 66 0a   &iTime;.#endif.
5840: 20 20 69 66 28 20 2a 70 69 54 69 6d 65 3d 3d 30    if( *piTime==0
5850: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
5860: 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d  ite3OsCurrentTim
5870: 65 49 6e 74 36 34 28 70 2d 3e 70 4f 75 74 2d 3e  eInt64(p->pOut->
5880: 64 62 2d 3e 70 56 66 73 2c 20 70 69 54 69 6d 65  db->pVfs, piTime
5890: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
58a0: 2a 70 69 54 69 6d 65 20 3d 20 30 3b 0a 20 20 7d  *piTime = 0;.  }
58b0: 0a 20 20 72 65 74 75 72 6e 20 2a 70 69 54 69 6d  .  return *piTim
58c0: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  e;.}../*.** The 
58d0: 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65  following is the
58e0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
58f0: 6f 66 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  of an SQL functi
5900: 6f 6e 20 74 68 61 74 20 61 6c 77 61 79 73 0a 2a  on that always.*
5910: 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
5920: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
5930: 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 66  ating that the f
5940: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
5950: 69 6e 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67 20  in the.** wrong 
5960: 63 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 73 71  context.  The sq
5970: 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
5980: 75 6e 63 74 69 6f 6e 28 29 20 41 50 49 20 6d 69  unction() API mi
5990: 67 68 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a 2a  ght construct.**
59a0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68   SQL function th
59b0: 61 74 20 75 73 65 20 74 68 69 73 20 72 6f 75 74  at use this rout
59c0: 69 6e 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  ine so that the 
59d0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 65  functions will e
59e0: 78 69 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d 65  xist.** for name
59f0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20   resolution but 
5a00: 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6f 76 65  are actually ove
5a10: 72 6c 6f 61 64 65 64 20 62 79 20 74 68 65 20 78  rloaded by the x
5a20: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a 20  FindFunction.** 
5a30: 6d 65 74 68 6f 64 20 6f 66 20 76 69 72 74 75 61  method of virtua
5a40: 6c 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  l tables..*/.voi
5a50: 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
5a60: 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  Function(.  sqli
5a70: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
5a80: 74 65 78 74 2c 20 20 2f 2a 20 54 68 65 20 66 75  text,  /* The fu
5a90: 6e 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63  nction calling c
5aa0: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
5ab0: 4e 6f 74 55 73 65 64 2c 20 20 20 20 20 20 20 20  NotUsed,        
5ac0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5ad0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
5ae0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
5af0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
5b00: 20 2a 2a 4e 6f 74 55 73 65 64 32 20 20 20 2f 2a   **NotUsed2   /*
5b10: 20 56 61 6c 75 65 20 6f 66 20 65 61 63 68 20 61   Value of each a
5b20: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5b30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
5b40: 65 20 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46 75  e = context->pFu
5b50: 6e 63 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68 61  nc->zName;.  cha
5b60: 72 20 2a 7a 45 72 72 3b 0a 20 20 55 4e 55 53 45  r *zErr;.  UNUSE
5b70: 44 5f 50 41 52 41 4d 45 54 45 52 32 28 4e 6f 74  D_PARAMETER2(Not
5b80: 55 73 65 64 2c 20 4e 6f 74 55 73 65 64 32 29 3b  Used, NotUsed2);
5b90: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
5ba0: 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
5bb0: 20 22 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20   "unable to use 
5bc0: 66 75 6e 63 74 69 6f 6e 20 25 73 20 69 6e 20 74  function %s in t
5bd0: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6e  he requested con
5be0: 74 65 78 74 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  text", zName);. 
5bf0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
5c00: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 7a  error(context, z
5c10: 45 72 72 2c 20 2d 31 29 3b 0a 20 20 73 71 6c 69  Err, -1);.  sqli
5c20: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
5c30: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
5c40: 61 20 6e 65 77 20 61 67 67 72 65 67 61 74 65 20  a new aggregate 
5c50: 63 6f 6e 74 65 78 74 20 66 6f 72 20 70 20 61 6e  context for p an
5c60: 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  d return a point
5c70: 65 72 20 74 6f 0a 2a 2a 20 69 74 73 20 70 4d 65  er to.** its pMe
5c80: 6d 2d 3e 7a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  m->z element..*/
5c90: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
5ca0: 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 2a 63 72  OINLINE void *cr
5cb0: 65 61 74 65 41 67 67 43 6f 6e 74 65 78 74 28 73  eateAggContext(s
5cc0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
5cd0: 70 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20  p, int nByte){. 
5ce0: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 70 2d 3e   Mem *pMem = p->
5cf0: 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
5d00: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
5d10: 45 4d 5f 41 67 67 29 3d 3d 30 20 29 3b 0a 20 20  EM_Agg)==0 );.  
5d20: 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b 0a  if( nByte<=0 ){.
5d30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
5d40: 65 6d 53 65 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b  emSetNull(pMem);
5d50: 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 30  .    pMem->z = 0
5d60: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
5d70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
5d80: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
5d90: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 4d  , nByte);.    pM
5da0: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
5db0: 41 67 67 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 75  Agg;.    pMem->u
5dc0: 2e 70 44 65 66 20 3d 20 70 2d 3e 70 46 75 6e 63  .pDef = p->pFunc
5dd0: 3b 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e  ;.    if( pMem->
5de0: 7a 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  z ){.      memse
5df0: 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42  t(pMem->z, 0, nB
5e00: 79 74 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  yte);.    }.  }.
5e10: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29    return (void*)
5e20: 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  pMem->z;.}../*.*
5e30: 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72 65  * Allocate or re
5e40: 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67 61  turn the aggrega
5e50: 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 61  te context for a
5e60: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20   user function. 
5e70: 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65 78   A new.** contex
5e80: 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f  t is allocated o
5e90: 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  n the first call
5ea0: 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 61  .  Subsequent ca
5eb0: 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a 2a  lls return the.*
5ec0: 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20 74  * same context t
5ed0: 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65 64  hat was returned
5ee0: 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73 2e   on prior calls.
5ef0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
5f00: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
5f10: 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ext(sqlite3_cont
5f20: 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79 74  ext *p, int nByt
5f30: 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20  e){.  assert( p 
5f40: 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70  && p->pFunc && p
5f50: 2d 3e 70 46 75 6e 63 2d 3e 78 46 69 6e 61 6c 69  ->pFunc->xFinali
5f60: 7a 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ze );.  assert( 
5f70: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
5f80: 6c 64 28 70 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e  ld(p->pOut->db->
5f90: 6d 75 74 65 78 29 20 29 3b 0a 20 20 74 65 73 74  mutex) );.  test
5fa0: 63 61 73 65 28 20 6e 42 79 74 65 3c 30 20 29 3b  case( nByte<0 );
5fb0: 0a 20 20 69 66 28 20 28 70 2d 3e 70 4d 65 6d 2d  .  if( (p->pMem-
5fc0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67  >flags & MEM_Agg
5fd0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
5fe0: 72 6e 20 63 72 65 61 74 65 41 67 67 43 6f 6e 74  rn createAggCont
5ff0: 65 78 74 28 70 2c 20 6e 42 79 74 65 29 3b 0a 20  ext(p, nByte);. 
6000: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
6010: 72 6e 20 28 76 6f 69 64 2a 29 70 2d 3e 70 4d 65  rn (void*)p->pMe
6020: 6d 2d 3e 7a 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  m->z;.  }.}../*.
6030: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 75  ** Return the au
6040: 78 69 6c 69 61 72 79 20 64 61 74 61 20 70 6f 69  xiliary data poi
6050: 6e 74 65 72 2c 20 69 66 20 61 6e 79 2c 20 66 6f  nter, if any, fo
6060: 72 20 74 68 65 20 69 41 72 67 27 74 68 20 61 72  r the iArg'th ar
6070: 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  gument to.** the
6080: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
6090: 65 66 69 6e 65 64 20 62 79 20 70 43 74 78 2e 0a  efined by pCtx..
60a0: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
60b0: 5f 67 65 74 5f 61 75 78 64 61 74 61 28 73 71 6c  _get_auxdata(sql
60c0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
60d0: 74 78 2c 20 69 6e 74 20 69 41 72 67 29 7b 0a 20  tx, int iArg){. 
60e0: 20 41 75 78 44 61 74 61 20 2a 70 41 75 78 44 61   AuxData *pAuxDa
60f0: 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73  ta;..  assert( s
6100: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
6110: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
6120: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 23 69 66 20  ->mutex) );.#if 
6130: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6140: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
6150: 66 28 20 70 43 74 78 2d 3e 70 56 64 62 65 3d 3d  f( pCtx->pVdbe==
6160: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65  0 ) return 0;.#e
6170: 6c 73 65 0a 20 20 61 73 73 65 72 74 28 20 70 43  lse.  assert( pC
6180: 74 78 2d 3e 70 56 64 62 65 21 3d 30 20 29 3b 0a  tx->pVdbe!=0 );.
6190: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 41 75  #endif.  for(pAu
61a0: 78 44 61 74 61 3d 70 43 74 78 2d 3e 70 56 64 62  xData=pCtx->pVdb
61b0: 65 2d 3e 70 41 75 78 44 61 74 61 3b 20 70 41 75  e->pAuxData; pAu
61c0: 78 44 61 74 61 3b 20 70 41 75 78 44 61 74 61 3d  xData; pAuxData=
61d0: 70 41 75 78 44 61 74 61 2d 3e 70 4e 65 78 74 29  pAuxData->pNext)
61e0: 7b 0a 20 20 20 20 69 66 28 20 70 41 75 78 44 61  {.    if( pAuxDa
61f0: 74 61 2d 3e 69 4f 70 3d 3d 70 43 74 78 2d 3e 69  ta->iOp==pCtx->i
6200: 4f 70 20 26 26 20 70 41 75 78 44 61 74 61 2d 3e  Op && pAuxData->
6210: 69 41 72 67 3d 3d 69 41 72 67 20 29 20 62 72 65  iArg==iArg ) bre
6220: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  ak;.  }..  retur
6230: 6e 20 28 70 41 75 78 44 61 74 61 20 3f 20 70 41  n (pAuxData ? pA
6240: 75 78 44 61 74 61 2d 3e 70 41 75 78 20 3a 20 30  uxData->pAux : 0
6250: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  );.}../*.** Set 
6260: 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
6270: 74 61 20 70 6f 69 6e 74 65 72 20 61 6e 64 20 64  ta pointer and d
6280: 65 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e 2c 20  elete function, 
6290: 66 6f 72 20 74 68 65 20 69 41 72 67 27 74 68 0a  for the iArg'th.
62a0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ** argument to t
62b0: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
62c0: 20 64 65 66 69 6e 65 64 20 62 79 20 70 43 74 78   defined by pCtx
62d0: 2e 20 41 6e 79 20 70 72 65 76 69 6f 75 73 20 76  . Any previous v
62e0: 61 6c 75 65 20 69 73 0a 2a 2a 20 64 65 6c 65 74  alue is.** delet
62f0: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
6300: 65 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f  e delete functio
6310: 6e 20 73 70 65 63 69 66 69 65 64 20 77 68 65 6e  n specified when
6320: 20 69 74 20 77 61 73 20 73 65 74 2e 0a 2a 2f 0a   it was set..*/.
6330: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73 65 74  void sqlite3_set
6340: 5f 61 75 78 64 61 74 61 28 0a 20 20 73 71 6c 69  _auxdata(.  sqli
6350: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
6360: 78 2c 20 0a 20 20 69 6e 74 20 69 41 72 67 2c 20  x, .  int iArg, 
6370: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 2c 20 0a  .  void *pAux, .
6380: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 65 74 65    void (*xDelete
6390: 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 41 75  )(void*).){.  Au
63a0: 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b  xData *pAuxData;
63b0: 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 20 3d  .  Vdbe *pVdbe =
63c0: 20 70 43 74 78 2d 3e 70 56 64 62 65 3b 0a 0a 20   pCtx->pVdbe;.. 
63d0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
63e0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
63f0: 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65  ->pOut->db->mute
6400: 78 29 20 29 3b 0a 20 20 69 66 28 20 69 41 72 67  x) );.  if( iArg
6410: 3c 30 20 29 20 67 6f 74 6f 20 66 61 69 6c 65 64  <0 ) goto failed
6420: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
6430: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
6440: 53 54 41 54 34 0a 20 20 69 66 28 20 70 56 64 62  STAT4.  if( pVdb
6450: 65 3d 3d 30 20 29 20 67 6f 74 6f 20 66 61 69 6c  e==0 ) goto fail
6460: 65 64 3b 0a 23 65 6c 73 65 0a 20 20 61 73 73 65  ed;.#else.  asse
6470: 72 74 28 20 70 56 64 62 65 21 3d 30 20 29 3b 0a  rt( pVdbe!=0 );.
6480: 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 70 41  #endif..  for(pA
6490: 75 78 44 61 74 61 3d 70 56 64 62 65 2d 3e 70 41  uxData=pVdbe->pA
64a0: 75 78 44 61 74 61 3b 20 70 41 75 78 44 61 74 61  uxData; pAuxData
64b0: 3b 20 70 41 75 78 44 61 74 61 3d 70 41 75 78 44  ; pAuxData=pAuxD
64c0: 61 74 61 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  ata->pNext){.   
64d0: 20 69 66 28 20 70 41 75 78 44 61 74 61 2d 3e 69   if( pAuxData->i
64e0: 4f 70 3d 3d 70 43 74 78 2d 3e 69 4f 70 20 26 26  Op==pCtx->iOp &&
64f0: 20 70 41 75 78 44 61 74 61 2d 3e 69 41 72 67 3d   pAuxData->iArg=
6500: 3d 69 41 72 67 20 29 20 62 72 65 61 6b 3b 0a 20  =iArg ) break;. 
6510: 20 7d 0a 20 20 69 66 28 20 70 41 75 78 44 61 74   }.  if( pAuxDat
6520: 61 3d 3d 30 20 29 7b 0a 20 20 20 20 70 41 75 78  a==0 ){.    pAux
6530: 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33 44 62  Data = sqlite3Db
6540: 4d 61 6c 6c 6f 63 5a 65 72 6f 28 70 56 64 62 65  MallocZero(pVdbe
6550: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 41 75 78  ->db, sizeof(Aux
6560: 44 61 74 61 29 29 3b 0a 20 20 20 20 69 66 28 20  Data));.    if( 
6570: 21 70 41 75 78 44 61 74 61 20 29 20 67 6f 74 6f  !pAuxData ) goto
6580: 20 66 61 69 6c 65 64 3b 0a 20 20 20 20 70 41 75   failed;.    pAu
6590: 78 44 61 74 61 2d 3e 69 4f 70 20 3d 20 70 43 74  xData->iOp = pCt
65a0: 78 2d 3e 69 4f 70 3b 0a 20 20 20 20 70 41 75 78  x->iOp;.    pAux
65b0: 44 61 74 61 2d 3e 69 41 72 67 20 3d 20 69 41 72  Data->iArg = iAr
65c0: 67 3b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d  g;.    pAuxData-
65d0: 3e 70 4e 65 78 74 20 3d 20 70 56 64 62 65 2d 3e  >pNext = pVdbe->
65e0: 70 41 75 78 44 61 74 61 3b 0a 20 20 20 20 70 56  pAuxData;.    pV
65f0: 64 62 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20  dbe->pAuxData = 
6600: 70 41 75 78 44 61 74 61 3b 0a 20 20 20 20 69 66  pAuxData;.    if
6610: 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72  ( pCtx->fErrorOr
6620: 41 75 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Aux==0 ){.      
6630: 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
6640: 30 3b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 66  0;.      pCtx->f
6650: 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 31 3b 0a  ErrorOrAux = 1;.
6660: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
6670: 28 20 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c  ( pAuxData->xDel
6680: 65 74 65 20 29 7b 0a 20 20 20 20 70 41 75 78 44  ete ){.    pAuxD
6690: 61 74 61 2d 3e 78 44 65 6c 65 74 65 28 70 41 75  ata->xDelete(pAu
66a0: 78 44 61 74 61 2d 3e 70 41 75 78 29 3b 0a 20 20  xData->pAux);.  
66b0: 7d 0a 0a 20 20 70 41 75 78 44 61 74 61 2d 3e 70  }..  pAuxData->p
66c0: 41 75 78 20 3d 20 70 41 75 78 3b 0a 20 20 70 41  Aux = pAux;.  pA
66d0: 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20  uxData->xDelete 
66e0: 3d 20 78 44 65 6c 65 74 65 3b 0a 20 20 72 65 74  = xDelete;.  ret
66f0: 75 72 6e 3b 0a 0a 66 61 69 6c 65 64 3a 0a 20 20  urn;..failed:.  
6700: 69 66 28 20 78 44 65 6c 65 74 65 20 29 7b 0a 20  if( xDelete ){. 
6710: 20 20 20 78 44 65 6c 65 74 65 28 70 41 75 78 29     xDelete(pAux)
6720: 3b 0a 20 20 7d 0a 7d 0a 0a 23 69 66 6e 64 65 66  ;.  }.}..#ifndef
6730: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
6740: 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20 52 65  RECATED./*.** Re
6750: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
6760: 6f 66 20 74 69 6d 65 73 20 74 68 65 20 53 74 65  of times the Ste
6770: 70 20 66 75 6e 63 74 69 6f 6e 20 6f 66 20 61 6e  p function of an
6780: 20 61 67 67 72 65 67 61 74 65 20 68 61 73 20 62   aggregate has b
6790: 65 65 6e 20 0a 2a 2a 20 63 61 6c 6c 65 64 2e 0a  een .** called..
67a0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  **.** This funct
67b0: 69 6f 6e 20 69 73 20 64 65 70 72 65 63 61 74 65  ion is deprecate
67c0: 64 2e 20 20 44 6f 20 6e 6f 74 20 75 73 65 20 69  d.  Do not use i
67d0: 74 20 66 6f 72 20 6e 65 77 20 63 6f 64 65 2e 20  t for new code. 
67e0: 20 49 74 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64   It is.** provid
67f0: 65 20 6f 6e 6c 79 20 74 6f 20 61 76 6f 69 64 20  e only to avoid 
6800: 62 72 65 61 6b 69 6e 67 20 6c 65 67 61 63 79 20  breaking legacy 
6810: 63 6f 64 65 2e 20 20 4e 65 77 20 61 67 67 72 65  code.  New aggre
6820: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  gate function.**
6830: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
6840: 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 74 68 65   should keep the
6850: 69 72 20 6f 77 6e 20 63 6f 75 6e 74 73 20 77 69  ir own counts wi
6860: 74 68 69 6e 20 74 68 65 69 72 20 61 67 67 72 65  thin their aggre
6870: 67 61 74 65 0a 2a 2a 20 63 6f 6e 74 65 78 74 2e  gate.** context.
6880: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6890: 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28  aggregate_count(
68a0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
68b0: 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70  *p){.  assert( p
68c0: 20 26 26 20 70 2d 3e 70 4d 65 6d 20 26 26 20 70   && p->pMem && p
68d0: 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e 70 46  ->pFunc && p->pF
68e0: 75 6e 63 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 29  unc->xFinalize )
68f0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 70 4d  ;.  return p->pM
6900: 65 6d 2d 3e 6e 3b 0a 7d 0a 23 65 6e 64 69 66 0a  em->n;.}.#endif.
6910: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6920: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
6930: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
6940: 74 20 73 65 74 20 66 6f 72 20 74 68 65 20 73 74  t set for the st
6950: 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a  atement pStmt..*
6960: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  /.int sqlite3_co
6970: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 71 6c 69 74  lumn_count(sqlit
6980: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
6990: 0a 20 20 56 64 62 65 20 2a 70 56 6d 20 3d 20 28  .  Vdbe *pVm = (
69a0: 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20  Vdbe *)pStmt;.  
69b0: 72 65 74 75 72 6e 20 70 56 6d 20 3f 20 70 56 6d  return pVm ? pVm
69c0: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 20 3a 20 30  ->nResColumn : 0
69d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
69e0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
69f0: 76 61 6c 75 65 73 20 61 76 61 69 6c 61 62 6c 65  values available
6a00: 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
6a10: 74 20 72 6f 77 20 6f 66 20 74 68 65 0a 2a 2a 20  t row of the.** 
6a20: 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74  currently execut
6a30: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 53  ing statement pS
6a40: 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  tmt..*/.int sqli
6a50: 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28 73  te3_data_count(s
6a60: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
6a70: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d  mt){.  Vdbe *pVm
6a80: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
6a90: 3b 0a 20 20 69 66 28 20 70 56 6d 3d 3d 30 20 7c  ;.  if( pVm==0 |
6aa0: 7c 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65  | pVm->pResultSe
6ab0: 74 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  t==0 ) return 0;
6ac0: 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 2d 3e 6e  .  return pVm->n
6ad0: 52 65 73 43 6f 6c 75 6d 6e 3b 0a 7d 0a 0a 2f 2a  ResColumn;.}../*
6ae0: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70 6f 69  .** Return a poi
6af0: 6e 74 65 72 20 74 6f 20 73 74 61 74 69 63 20 6d  nter to static m
6b00: 65 6d 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  emory containing
6b10: 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 20 76 61 6c   an SQL NULL val
6b20: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  ue..*/.static co
6b30: 6e 73 74 20 4d 65 6d 20 2a 63 6f 6c 75 6d 6e 4e  nst Mem *columnN
6b40: 75 6c 6c 56 61 6c 75 65 28 76 6f 69 64 29 7b 0a  ullValue(void){.
6b50: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
6b60: 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63 74 75   the Mem structu
6b70: 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  re contains an e
6b80: 6c 65 6d 65 6e 74 0a 20 20 2a 2a 20 6f 66 20 74  lement.  ** of t
6b90: 79 70 65 20 69 36 34 2c 20 6f 6e 20 63 65 72 74  ype i64, on cert
6ba0: 61 69 6e 20 61 72 63 68 69 74 65 63 74 75 72 65  ain architecture
6bb0: 73 20 28 78 38 36 29 20 77 69 74 68 20 63 65 72  s (x86) with cer
6bc0: 74 61 69 6e 20 63 6f 6d 70 69 6c 65 72 0a 20 20  tain compiler.  
6bd0: 2a 2a 20 73 77 69 74 63 68 65 73 20 28 2d 4f 73  ** switches (-Os
6be0: 29 2c 20 67 63 63 20 6d 61 79 20 61 6c 69 67 6e  ), gcc may align
6bf0: 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a 65 63 74   this Mem object
6c00: 20 6f 6e 20 61 20 34 2d 62 79 74 65 20 62 6f 75   on a 4-byte bou
6c10: 6e 64 61 72 79 0a 20 20 2a 2a 20 69 6e 73 74 65  ndary.  ** inste
6c20: 61 64 20 6f 66 20 61 6e 20 38 2d 62 79 74 65 20  ad of an 8-byte 
6c30: 6f 6e 65 2e 20 54 68 69 73 20 61 6c 6c 20 77 6f  one. This all wo
6c40: 72 6b 73 20 66 69 6e 65 2c 20 65 78 63 65 70 74  rks fine, except
6c50: 20 74 68 61 74 20 77 68 65 6e 0a 20 20 2a 2a 20   that when.  ** 
6c60: 72 75 6e 6e 69 6e 67 20 77 69 74 68 20 53 51 4c  running with SQL
6c70: 49 54 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65  ITE_DEBUG define
6c80: 64 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64  d the SQLite cod
6c90: 65 20 73 6f 6d 65 74 69 6d 65 73 20 61 73 73 65  e sometimes asse
6ca0: 72 74 28 29 73 0a 20 20 2a 2a 20 74 68 61 74 20  rt()s.  ** that 
6cb0: 61 20 4d 65 6d 20 73 74 72 75 63 74 75 72 65 20  a Mem structure 
6cc0: 69 73 20 6c 6f 63 61 74 65 64 20 6f 6e 20 61 6e  is located on an
6cd0: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
6ce0: 2e 20 54 6f 20 70 72 65 76 65 6e 74 0a 20 20 2a  . To prevent.  *
6cf0: 2a 20 74 68 65 73 65 20 61 73 73 65 72 74 28 29  * these assert()
6d00: 73 20 66 72 6f 6d 20 66 61 69 6c 69 6e 67 2c 20  s from failing, 
6d10: 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 77 69  when building wi
6d20: 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  th SQLITE_DEBUG 
6d30: 64 65 66 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  defined.  ** usi
6d40: 6e 67 20 67 63 63 2c 20 77 65 20 66 6f 72 63 65  ng gcc, we force
6d50: 20 6e 75 6c 6c 4d 65 6d 20 74 6f 20 62 65 20 38   nullMem to be 8
6d60: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20 75 73  -byte aligned us
6d70: 69 6e 67 20 74 68 65 20 6d 61 67 69 63 61 6c 0a  ing the magical.
6d80: 20 20 2a 2a 20 5f 5f 61 74 74 72 69 62 75 74 65    ** __attribute
6d90: 5f 5f 28 28 61 6c 69 67 6e 65 64 28 38 29 29 29  __((aligned(8)))
6da0: 20 6d 61 63 72 6f 2e 20 20 2a 2f 0a 20 20 73 74   macro.  */.  st
6db0: 61 74 69 63 20 63 6f 6e 73 74 20 4d 65 6d 20 6e  atic const Mem n
6dc0: 75 6c 6c 4d 65 6d 20 0a 23 69 66 20 64 65 66 69  ullMem .#if defi
6dd0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
6de0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47  ) && defined(__G
6df0: 4e 55 43 5f 5f 29 0a 20 20 20 20 5f 5f 61 74 74  NUC__).    __att
6e00: 72 69 62 75 74 65 5f 5f 28 28 61 6c 69 67 6e 65  ribute__((aligne
6e10: 64 28 38 29 29 29 20 0a 23 65 6e 64 69 66 0a 20  d(8))) .#endif. 
6e20: 20 20 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 2f     = {.        /
6e30: 2a 20 2e 75 20 20 20 20 20 20 20 20 20 20 3d 20  * .u          = 
6e40: 2a 2f 20 7b 30 7d 2c 0a 20 20 20 20 20 20 20 20  */ {0},.        
6e50: 2f 2a 20 2e 66 6c 61 67 73 20 20 20 20 20 20 3d  /* .flags      =
6e60: 20 2a 2f 20 28 75 31 36 29 4d 45 4d 5f 4e 75 6c   */ (u16)MEM_Nul
6e70: 6c 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 65  l,.        /* .e
6e80: 6e 63 20 20 20 20 20 20 20 20 3d 20 2a 2f 20 28  nc        = */ (
6e90: 75 38 29 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a  u8)0,.        /*
6ea0: 20 2e 65 53 75 62 74 79 70 65 20 20 20 3d 20 2a   .eSubtype   = *
6eb0: 2f 20 28 75 38 29 30 2c 0a 20 20 20 20 20 20 20  / (u8)0,.       
6ec0: 20 2f 2a 20 2e 6e 20 20 20 20 20 20 20 20 20 20   /* .n          
6ed0: 3d 20 2a 2f 20 28 69 6e 74 29 30 2c 0a 20 20 20  = */ (int)0,.   
6ee0: 20 20 20 20 20 2f 2a 20 2e 7a 20 20 20 20 20 20       /* .z      
6ef0: 20 20 20 20 3d 20 2a 2f 20 28 63 68 61 72 2a 29      = */ (char*)
6f00: 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 7a  0,.        /* .z
6f10: 4d 61 6c 6c 6f 63 20 20 20 20 3d 20 2a 2f 20 28  Malloc    = */ (
6f20: 63 68 61 72 2a 29 30 2c 0a 20 20 20 20 20 20 20  char*)0,.       
6f30: 20 2f 2a 20 2e 73 7a 4d 61 6c 6c 6f 63 20 20 20   /* .szMalloc   
6f40: 3d 20 2a 2f 20 28 69 6e 74 29 30 2c 0a 20 20 20  = */ (int)0,.   
6f50: 20 20 20 20 20 2f 2a 20 2e 75 54 65 6d 70 20 20       /* .uTemp  
6f60: 20 20 20 20 3d 20 2a 2f 20 28 75 33 32 29 30 2c      = */ (u32)0,
6f70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 64 62 20  .        /* .db 
6f80: 20 20 20 20 20 20 20 20 3d 20 2a 2f 20 28 73 71          = */ (sq
6f90: 6c 69 74 65 33 2a 29 30 2c 0a 20 20 20 20 20 20  lite3*)0,.      
6fa0: 20 20 2f 2a 20 2e 78 44 65 6c 20 20 20 20 20 20    /* .xDel      
6fb0: 20 3d 20 2a 2f 20 28 76 6f 69 64 28 2a 29 28 76   = */ (void(*)(v
6fc0: 6f 69 64 2a 29 29 30 2c 0a 23 69 66 64 65 66 20  oid*))0,.#ifdef 
6fd0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
6fe0: 20 20 20 20 20 2f 2a 20 2e 70 53 63 6f 70 79 46       /* .pScopyF
6ff0: 72 6f 6d 20 3d 20 2a 2f 20 28 4d 65 6d 2a 29 30  rom = */ (Mem*)0
7000: 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 70 46  ,.        /* .pF
7010: 69 6c 6c 65 72 20 20 20 20 3d 20 2a 2f 20 28 76  iller    = */ (v
7020: 6f 69 64 2a 29 30 2c 0a 23 65 6e 64 69 66 0a 20  oid*)0,.#endif. 
7030: 20 20 20 20 20 7d 3b 0a 20 20 72 65 74 75 72 6e       };.  return
7040: 20 26 6e 75 6c 6c 4d 65 6d 3b 0a 7d 0a 0a 2f 2a   &nullMem;.}../*
7050: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
7060: 20 69 66 20 63 6f 6c 75 6d 6e 20 69 43 6f 6c 20   if column iCol 
7070: 6f 66 20 74 68 65 20 67 69 76 65 6e 20 73 74 61  of the given sta
7080: 74 65 6d 65 6e 74 20 69 73 20 76 61 6c 69 64 2e  tement is valid.
7090: 20 20 49 66 0a 2a 2a 20 69 74 20 69 73 2c 20 72    If.** it is, r
70a0: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
70b0: 74 6f 20 74 68 65 20 4d 65 6d 20 66 6f 72 20 74  to the Mem for t
70c0: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74  he value of that
70d0: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 49 66 20 69   column..** If i
70e0: 43 6f 6c 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  Col is not valid
70f0: 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  , return a point
7100: 65 72 20 74 6f 20 61 20 4d 65 6d 20 77 68 69 63  er to a Mem whic
7110: 68 20 68 61 73 20 61 20 76 61 6c 75 65 0a 2a 2a  h has a value.**
7120: 20 6f 66 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61   of NULL..*/.sta
7130: 74 69 63 20 4d 65 6d 20 2a 63 6f 6c 75 6d 6e 4d  tic Mem *columnM
7140: 65 6d 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  em(sqlite3_stmt 
7150: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
7160: 20 20 56 64 62 65 20 2a 70 56 6d 3b 0a 20 20 4d    Vdbe *pVm;.  M
7170: 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70 56 6d  em *pOut;..  pVm
7180: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
7190: 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26 20 70  ;.  if( pVm && p
71a0: 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 21 3d  Vm->pResultSet!=
71b0: 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52 65 73  0 && i<pVm->nRes
71c0: 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30 20 29  Column && i>=0 )
71d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  {.    sqlite3_mu
71e0: 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d 3e 64  tex_enter(pVm->d
71f0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 70  b->mutex);.    p
7200: 4f 75 74 20 3d 20 26 70 56 6d 2d 3e 70 52 65 73  Out = &pVm->pRes
7210: 75 6c 74 53 65 74 5b 69 5d 3b 0a 20 20 7d 65 6c  ultSet[i];.  }el
7220: 73 65 7b 0a 20 20 20 20 69 66 28 20 70 56 6d 20  se{.    if( pVm 
7230: 26 26 20 41 4c 57 41 59 53 28 70 56 6d 2d 3e 64  && ALWAYS(pVm->d
7240: 62 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  b) ){.      sqli
7250: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
7260: 70 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  pVm->db->mutex);
7270: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
7280: 72 6f 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c  ror(pVm->db, SQL
7290: 49 54 45 5f 52 41 4e 47 45 29 3b 0a 20 20 20 20  ITE_RANGE);.    
72a0: 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28 4d 65  }.    pOut = (Me
72b0: 6d 2a 29 63 6f 6c 75 6d 6e 4e 75 6c 6c 56 61 6c  m*)columnNullVal
72c0: 75 65 28 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ue();.  }.  retu
72d0: 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn pOut;.}../*.*
72e0: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
72f0: 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
7300: 69 6e 76 6f 6b 69 6e 67 20 61 6e 20 73 71 6c 69  invoking an sqli
7310: 74 65 33 5f 76 61 6c 75 65 5f 58 58 58 20 66 75  te3_value_XXX fu
7320: 6e 63 74 69 6f 6e 20 6f 6e 20 61 20 0a 2a 2a 20  nction on a .** 
7330: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28 69 2e  column value (i.
7340: 65 2e 20 61 20 76 61 6c 75 65 20 72 65 74 75 72  e. a value retur
7350: 6e 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  ned by evaluatin
7360: 67 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73 73  g an SQL express
7370: 69 6f 6e 20 69 6e 20 74 68 65 0a 2a 2a 20 73 65  ion in the.** se
7380: 6c 65 63 74 20 6c 69 73 74 20 6f 66 20 61 20 53  lect list of a S
7390: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 29  ELECT statement)
73a0: 20 74 68 61 74 20 6d 61 79 20 63 61 75 73 65 20   that may cause 
73b0: 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75  a malloc() failu
73c0: 72 65 2e 20 49 66 20 0a 2a 2a 20 6d 61 6c 6c 6f  re. If .** mallo
73d0: 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20  c() has failed, 
73e0: 74 68 65 20 74 68 72 65 61 64 73 20 6d 61 6c 6c  the threads mall
73f0: 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 69 73  ocFailed flag is
7400: 20 63 6c 65 61 72 65 64 20 61 6e 64 20 74 68 65   cleared and the
7410: 20 72 65 73 75 6c 74 0a 2a 2a 20 63 6f 64 65 20   result.** code 
7420: 6f 66 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74  of statement pSt
7430: 6d 74 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  mt set to SQLITE
7440: 5f 4e 4f 4d 45 4d 2e 0a 2a 2a 0a 2a 2a 20 53 70  _NOMEM..**.** Sp
7450: 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 69 73  ecifically, this
7460: 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
7470: 77 69 74 68 69 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20  within:.**.**   
7480: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
7490: 5f 69 6e 74 28 29 0a 2a 2a 20 20 20 20 20 73 71  _int().**     sq
74a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
74b0: 36 34 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  64().**     sqli
74c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
74d0: 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33  ).**     sqlite3
74e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
74f0: 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f  .**     sqlite3_
7500: 63 6f 6c 75 6d 6e 5f 72 65 61 6c 28 29 0a 2a 2a  column_real().**
7510: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
7520: 75 6d 6e 5f 62 79 74 65 73 28 29 0a 2a 2a 20 20  umn_bytes().**  
7530: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
7540: 6e 5f 62 79 74 65 73 31 36 28 29 0a 2a 2a 20 20  n_bytes16().**  
7550: 20 20 20 73 71 69 69 74 65 33 5f 63 6f 6c 75 6d     sqiite3_colum
7560: 6e 5f 62 6c 6f 62 28 29 0a 2a 2f 0a 73 74 61 74  n_blob().*/.stat
7570: 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d 61  ic void columnMa
7580: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c 69  llocFailure(sqli
7590: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
75a0: 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c 6f  .{.  /* If mallo
75b0: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
75c0: 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63 6f  g an encoding co
75d0: 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e 20  nversion within 
75e0: 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  an.  ** sqlite3_
75f0: 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c 20  column_XXX API, 
7600: 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65 74  then set the ret
7610: 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65 20  urn code of the 
7620: 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 2a  statement to.  *
7630: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20  * SQLITE_NOMEM. 
7640: 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  The next call to
7650: 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e 79   _step() (if any
7660: 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  ) will return SQ
7670: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a 20  LITE_ERROR.  ** 
7680: 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29 20  and _finalize() 
7690: 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d 45  will return NOME
76a0: 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20 2a  M..  */.  Vdbe *
76b0: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
76c0: 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  t;.  if( p ){.  
76d0: 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65    p->rc = sqlite
76e0: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
76f0: 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  p->rc);.    sqli
7700: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
7710: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
7720: 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a   }.}../*********
7730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7740: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  *** sqlite3_colu
7750: 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  mn_  ***********
7760: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7770: 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ****.** The foll
7780: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61  owing routines a
7790: 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  re used to acces
77a0: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68  s elements of th
77b0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a  e current row.**
77c0: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
77d0: 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69  et..*/.const voi
77e0: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
77f0: 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73  n_blob(sqlite3_s
7800: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
7810: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i){.  const void
7820: 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73   *val;.  val = s
7830: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
7840: 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  b( columnMem(pSt
7850: 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45 76  mt,i) );.  /* Ev
7860: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20  en though there 
7870: 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20 63  is no encoding c
7880: 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75 65  onversion, value
7890: 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20 20  _blob() might.  
78a0: 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20  ** need to call 
78b0: 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70 61  malloc() to expa
78c0: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  nd the result of
78d0: 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a 20   a zeroblob() . 
78e0: 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 20   ** expression. 
78f0: 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d 61  .  */.  columnMa
7900: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
7910: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
7920: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
7930: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71 6c  column_bytes(sql
7940: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7950: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
7960: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
7970: 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75 6d  lue_bytes( colum
7980: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
7990: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
79a0: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
79b0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69   return val;.}.i
79c0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
79d0: 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  n_bytes16(sqlite
79e0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
79f0: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c  nt i){.  int val
7a00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
7a10: 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d 6e  _bytes16( column
7a20: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
7a30: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
7a40: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
7a50: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f  return val;.}.do
7a60: 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f 6c  uble sqlite3_col
7a70: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  umn_double(sqlit
7a80: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
7a90: 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c 65  int i){.  double
7aa0: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
7ab0: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f 6c  alue_double( col
7ac0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
7ad0: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
7ae0: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
7af0: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
7b00: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
7b10: 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f  umn_int(sqlite3_
7b20: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
7b30: 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d   i){.  int val =
7b40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
7b50: 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  nt( columnMem(pS
7b60: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
7b70: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
7b80: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
7b90: 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69   val;.}.sqlite_i
7ba0: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt64 sqlite3_col
7bb0: 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74 65  umn_int64(sqlite
7bc0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
7bd0: 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65 5f  nt i){.  sqlite_
7be0: 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c 69  int64 val = sqli
7bf0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
7c00: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
7c10: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
7c20: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
7c30: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
7c40: 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  l;.}.const unsig
7c50: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
7c60: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 71  3_column_text(sq
7c70: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7c80: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f 6e  t, int i){.  con
7c90: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
7ca0: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
7cb0: 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c 75  value_text( colu
7cc0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
7cd0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
7ce0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
7cf0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
7d00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
7d10: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61  qlite3_column_va
7d20: 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  lue(sqlite3_stmt
7d30: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
7d40: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 63  .  Mem *pOut = c
7d50: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 20  olumnMem(pStmt, 
7d60: 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  i);.  if( pOut->
7d70: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63  flags&MEM_Static
7d80: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
7d90: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61 74  ags &= ~MEM_Stat
7da0: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
7db0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d  ags |= MEM_Ephem
7dc0: 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d 61  ;.  }.  columnMa
7dd0: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
7de0: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73 71  t);.  return (sq
7df0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70 4f  lite3_value *)pO
7e00: 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  ut;.}.#ifndef SQ
7e10: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7e20: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
7e30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
7e40: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
7e50: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
7e60: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c   const void *val
7e70: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
7e80: 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d  _text16( columnM
7e90: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
7ea0: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
7eb0: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
7ec0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e  eturn val;.}.#en
7ed0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7ee0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
7ef0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
7f00: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
7f10: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
7f20: 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20 73  .  int iType = s
7f30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
7f40: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
7f50: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
7f60: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
7f70: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
7f80: 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  iType;.}../*.** 
7f90: 43 6f 6e 76 65 72 74 20 74 68 65 20 4e 2d 74 68  Convert the N-th
7fa0: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 70 53 74 6d   element of pStm
7fb0: 74 2d 3e 70 43 6f 6c 4e 61 6d 65 5b 5d 20 69 6e  t->pColName[] in
7fc0: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
7fd0: 67 0a 2a 2a 20 78 46 75 6e 63 28 29 20 74 68 65  g.** xFunc() the
7fe0: 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20 73 74  n return that st
7ff0: 72 69 6e 67 2e 20 20 49 66 20 4e 20 69 73 20 6f  ring.  If N is o
8000: 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72 65 74  ut of range, ret
8010: 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  urn 0..**.** The
8020: 72 65 20 61 72 65 20 75 70 20 74 6f 20 35 20 6e  re are up to 5 n
8030: 61 6d 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  ames for each co
8040: 6c 75 6d 6e 2e 20 20 75 73 65 54 79 70 65 20 64  lumn.  useType d
8050: 65 74 65 72 6d 69 6e 65 73 20 77 68 69 63 68 0a  etermines which.
8060: 2a 2a 20 6e 61 6d 65 20 69 73 20 72 65 74 75 72  ** name is retur
8070: 6e 65 64 2e 20 20 48 65 72 65 20 61 72 65 20 74  ned.  Here are t
8080: 68 65 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20  he names:.**.** 
8090: 20 20 20 30 20 20 20 20 20 20 54 68 65 20 63 6f     0      The co
80a0: 6c 75 6d 6e 20 6e 61 6d 65 20 61 73 20 69 74 20  lumn name as it 
80b0: 73 68 6f 75 6c 64 20 62 65 20 64 69 73 70 6c 61  should be displa
80c0: 79 65 64 20 66 6f 72 20 6f 75 74 70 75 74 0a 2a  yed for output.*
80d0: 2a 20 20 20 20 31 20 20 20 20 20 20 54 68 65 20  *    1      The 
80e0: 64 61 74 61 74 79 70 65 20 6e 61 6d 65 20 66 6f  datatype name fo
80f0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  r the column.** 
8100: 20 20 20 32 20 20 20 20 20 20 54 68 65 20 6e 61     2      The na
8110: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
8120: 73 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  se that the colu
8130: 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a  mn derives from.
8140: 2a 2a 20 20 20 20 33 20 20 20 20 20 20 54 68 65  **    3      The
8150: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
8160: 6c 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  le that the colu
8170: 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a  mn derives from.
8180: 2a 2a 20 20 20 20 34 20 20 20 20 20 20 54 68 65  **    4      The
8190: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
81a0: 6c 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 74  le column that t
81b0: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
81c0: 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a 2a 2a   derives from.**
81d0: 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c  .** If the resul
81e0: 74 20 69 73 20 6e 6f 74 20 61 20 73 69 6d 70 6c  t is not a simpl
81f0: 65 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  e column referen
8200: 63 65 20 28 69 66 20 69 74 20 69 73 20 61 6e 20  ce (if it is an 
8210: 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 6f 72  expression.** or
8220: 20 61 20 63 6f 6e 73 74 61 6e 74 29 20 74 68 65   a constant) the
8230: 6e 20 75 73 65 54 79 70 65 73 20 32 2c 20 33 2c  n useTypes 2, 3,
8240: 20 61 6e 64 20 34 20 72 65 74 75 72 6e 20 4e 55   and 4 return NU
8250: 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f  LL..*/.static co
8260: 6e 73 74 20 76 6f 69 64 20 2a 63 6f 6c 75 6d 6e  nst void *column
8270: 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  Name(.  sqlite3_
8280: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 0a 20 20 69  stmt *pStmt,.  i
8290: 6e 74 20 4e 2c 0a 20 20 63 6f 6e 73 74 20 76 6f  nt N,.  const vo
82a0: 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 4d 65 6d  id *(*xFunc)(Mem
82b0: 2a 29 2c 0a 20 20 69 6e 74 20 75 73 65 54 79 70  *),.  int useTyp
82c0: 65 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  e.){.  const voi
82d0: 64 20 2a 72 65 74 3b 0a 20 20 56 64 62 65 20 2a  d *ret;.  Vdbe *
82e0: 70 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71  p;.  int n;.  sq
82f0: 6c 69 74 65 33 20 2a 64 62 3b 0a 23 69 66 64 65  lite3 *db;.#ifde
8300: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8310: 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
8320: 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20  pStmt==0 ){.    
8330: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
8340: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
8350: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
8360: 69 66 0a 20 20 72 65 74 20 3d 20 30 3b 0a 20 20  if.  ret = 0;.  
8370: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
8380: 74 3b 0a 20 20 64 62 20 3d 20 70 2d 3e 64 62 3b  t;.  db = p->db;
8390: 0a 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30  .  assert( db!=0
83a0: 20 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65   );.  n = sqlite
83b0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
83c0: 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 4e 3c 6e  Stmt);.  if( N<n
83d0: 20 26 26 20 4e 3e 3d 30 20 29 7b 0a 20 20 20 20   && N>=0 ){.    
83e0: 4e 20 2b 3d 20 75 73 65 54 79 70 65 2a 6e 3b 0a  N += useType*n;.
83f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
8400: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
8410: 78 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  x);.    assert( 
8420: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
8430: 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 74 20 3d  ==0 );.    ret =
8440: 20 78 46 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e   xFunc(&p->aColN
8450: 61 6d 65 5b 4e 5d 29 3b 0a 20 20 20 20 20 2f 2a  ame[N]);.     /*
8460: 20 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61   A malloc may ha
8470: 76 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65  ve failed inside
8480: 20 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29 20   of the xFunc() 
8490: 63 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20  call. If this.  
84a0: 20 20 2a 2a 20 69 73 20 74 68 65 20 63 61 73 65    ** is the case
84b0: 2c 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c 6c  , clear the mall
84c0: 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61 6e  ocFailed flag an
84d0: 64 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20  d return NULL.. 
84e0: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
84f0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
8500: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
8510: 6f 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20  ocFailed = 0;.  
8520: 20 20 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20      ret = 0;.   
8530: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d   }.    sqlite3_m
8540: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
8550: 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74  utex);.  }.  ret
8560: 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn ret;.}../*.*
8570: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
8580: 65 20 6f 66 20 74 68 65 20 4e 74 68 20 63 6f 6c  e of the Nth col
8590: 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
85a0: 74 20 73 65 74 20 72 65 74 75 72 6e 65 64 20 62  t set returned b
85b0: 79 20 53 51 4c 0a 2a 2a 20 73 74 61 74 65 6d 65  y SQL.** stateme
85c0: 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e  nt pStmt..*/.con
85d0: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
85e0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c  _column_name(sql
85f0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8600: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
8610: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
8620: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
8630: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
8640: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
8650: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
8660: 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  _NAME);.}.#ifnde
8670: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
8680: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
8690: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
86a0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
86b0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
86c0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
86d0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
86e0: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
86f0: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
8700: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
8710: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45  16, COLNAME_NAME
8720: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
8730: 2a 2a 20 43 6f 6e 73 74 72 61 69 6e 74 3a 20 20  ** Constraint:  
8740: 49 66 20 79 6f 75 20 68 61 76 65 20 45 4e 41 42  If you have ENAB
8750: 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41  LE_COLUMN_METADA
8760: 54 41 20 74 68 65 6e 20 79 6f 75 20 6d 75 73 74  TA then you must
8770: 0a 2a 2a 20 6e 6f 74 20 64 65 66 69 6e 65 20 4f  .** not define O
8780: 4d 49 54 5f 44 45 43 4c 54 59 50 45 2e 0a 2a 2f  MIT_DECLTYPE..*/
8790: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
87a0: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
87b0: 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  E) && defined(SQ
87c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
87d0: 4d 4e 5f 4d 45 54 41 44 41 54 41 29 0a 23 20 65  MN_METADATA).# e
87e0: 72 72 6f 72 20 22 4d 75 73 74 20 6e 6f 74 20 64  rror "Must not d
87f0: 65 66 69 6e 65 20 62 6f 74 68 20 53 51 4c 49 54  efine both SQLIT
8800: 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20  E_OMIT_DECLTYPE 
8810: 5c 0a 20 20 20 20 20 20 20 20 20 61 6e 64 20 53  \.         and S
8820: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
8830: 55 4d 4e 5f 4d 45 54 41 44 41 54 41 22 0a 23 65  UMN_METADATA".#e
8840: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
8850: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59  LITE_OMIT_DECLTY
8860: 50 45 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  PE./*.** Return 
8870: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61  the column decla
8880: 72 61 74 69 6f 6e 20 74 79 70 65 20 28 69 66 20  ration type (if 
8890: 61 70 70 6c 69 63 61 62 6c 65 29 20 6f 66 20 74  applicable) of t
88a0: 68 65 20 27 69 27 74 68 20 63 6f 6c 75 6d 6e 0a  he 'i'th column.
88b0: 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
88c0: 20 73 65 74 20 6f 66 20 53 51 4c 20 73 74 61 74   set of SQL stat
88d0: 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a  ement pStmt..*/.
88e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
88f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
8900: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
8910: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
8920: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
8930: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
8940: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
8950: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
8960: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
8970: 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45  COLNAME_DECLTYPE
8980: 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  );.}.#ifndef SQL
8990: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
89a0: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
89b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
89c0: 70 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  pe16(sqlite3_stm
89d0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
89e0: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
89f0: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
8a00: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
8a10: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
8a20: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
8a30: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54  6, COLNAME_DECLT
8a40: 59 50 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  YPE);.}.#endif /
8a50: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
8a60: 46 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  F16 */.#endif /*
8a70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43   SQLITE_OMIT_DEC
8a80: 4c 54 59 50 45 20 2a 2f 0a 0a 23 69 66 64 65 66  LTYPE */..#ifdef
8a90: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
8aa0: 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 2f  OLUMN_METADATA./
8ab0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
8ac0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
8ad0: 62 61 73 65 20 66 72 6f 6d 20 77 68 69 63 68 20  base from which 
8ae0: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  a result column 
8af0: 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c  derives..** NULL
8b00: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
8b10: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
8b20: 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
8b30: 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f  on or constant o
8b40: 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c  r.** anything el
8b50: 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20  se which is not 
8b60: 61 6e 20 75 6e 61 6d 62 69 67 75 6f 75 73 20 72  an unambiguous r
8b70: 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61  eference to a da
8b80: 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  tabase column..*
8b90: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
8ba0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
8bb0: 61 62 61 73 65 5f 6e 61 6d 65 28 73 71 6c 69 74  abase_name(sqlit
8bc0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
8bd0: 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e  int N){.  return
8be0: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20   columnName(.   
8bf0: 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f     pStmt, N, (co
8c00: 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d  nst void*(*)(Mem
8c10: 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  *))sqlite3_value
8c20: 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44  _text, COLNAME_D
8c30: 41 54 41 42 41 53 45 29 3b 0a 7d 0a 23 69 66 6e  ATABASE);.}.#ifn
8c40: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8c50: 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64  UTF16.const void
8c60: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
8c70: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
8c80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
8c90: 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20  Stmt, int N){.  
8ca0: 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d  return columnNam
8cb0: 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20  e(.      pStmt, 
8cc0: 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28  N, (const void*(
8cd0: 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33  *)(Mem*))sqlite3
8ce0: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43  _value_text16, C
8cf0: 4f 4c 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29  OLNAME_DATABASE)
8d00: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
8d10: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
8d20: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
8d30: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8d40: 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63   table from whic
8d50: 68 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  h a result colum
8d60: 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55  n derives..** NU
8d70: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
8d80: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
8d90: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
8da0: 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74  sion or constant
8db0: 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20   or.** anything 
8dc0: 65 6c 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f  else which is no
8dd0: 74 20 61 6e 20 75 6e 61 6d 62 69 67 75 6f 75 73  t an unambiguous
8de0: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20   reference to a 
8df0: 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e  database column.
8e00: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
8e10: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8e20: 61 62 6c 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65  able_name(sqlite
8e30: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
8e40: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
8e50: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
8e60: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
8e70: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
8e80: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
8e90: 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41  text, COLNAME_TA
8ea0: 42 4c 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20  BLE);.}.#ifndef 
8eb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
8ec0: 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  6.const void *sq
8ed0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
8ee0: 6c 65 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65  le_name16(sqlite
8ef0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
8f00: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
8f10: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
8f20: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
8f30: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
8f40: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
8f50: 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f  text16, COLNAME_
8f60: 54 41 42 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66  TABLE);.}.#endif
8f70: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
8f80: 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  UTF16 */../*.** 
8f90: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
8fa0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c  of the table col
8fb0: 75 6d 6e 20 66 72 6f 6d 20 77 68 69 63 68 20 61  umn from which a
8fc0: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64   result column d
8fd0: 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20  erives..** NULL 
8fe0: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
8ff0: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
9000: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
9010: 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72  n or constant or
9020: 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  .** anything els
9030: 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61  e which is not a
9040: 6e 20 75 6e 61 6d 62 69 67 75 6f 75 73 20 72 65  n unambiguous re
9050: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74  ference to a dat
9060: 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f  abase column..*/
9070: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
9080: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
9090: 69 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f  in_name(sqlite3_
90a0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
90b0: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f   N){.  return co
90c0: 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20  lumnName(.      
90d0: 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74  pStmt, N, (const
90e0: 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29   void*(*)(Mem*))
90f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
9100: 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55  xt, COLNAME_COLU
9110: 4d 4e 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  MN);.}.#ifndef S
9120: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
9130: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
9140: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
9150: 69 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65  in_name16(sqlite
9160: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
9170: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
9180: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
9190: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
91a0: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
91b0: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
91c0: 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f  text16, COLNAME_
91d0: 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 65 6e 64 69  COLUMN);.}.#endi
91e0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
91f0: 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64 69 66  _UTF16 */.#endif
9200: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
9210: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
9220: 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  A */.../********
9230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
9240: 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f  ******* sqlite3_
9250: 62 69 6e 64 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  bind_  *********
9260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
9270: 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52 6f 75 74 69 6e  **.** .** Routin
9280: 65 73 20 75 73 65 64 20 74 6f 20 61 74 74 61 63  es used to attac
9290: 68 20 76 61 6c 75 65 73 20 74 6f 20 77 69 6c 64  h values to wild
92a0: 63 61 72 64 73 20 69 6e 20 61 20 63 6f 6d 70 69  cards in a compi
92b0: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
92c0: 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 55 6e 62 69  t..*/./*.** Unbi
92d0: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 62 6f 75  nd the value bou
92e0: 6e 64 20 74 6f 20 76 61 72 69 61 62 6c 65 20 69  nd to variable i
92f0: 20 69 6e 20 76 69 72 74 75 61 6c 20 6d 61 63 68   in virtual mach
9300: 69 6e 65 20 70 2e 20 54 68 69 73 20 69 73 20 74  ine p. This is t
9310: 68 65 20 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  he .** the same 
9320: 61 73 20 62 69 6e 64 69 6e 67 20 61 20 4e 55 4c  as binding a NUL
9330: 4c 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 63  L value to the c
9340: 6f 6c 75 6d 6e 2e 20 49 66 20 74 68 65 20 22 69  olumn. If the "i
9350: 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 0a 2a  " parameter is.*
9360: 2a 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20  * out of range, 
9370: 74 68 65 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47  then SQLITE_RANG
9380: 45 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f  E is returned. O
9390: 74 68 65 77 69 73 65 20 53 51 4c 49 54 45 5f 4f  thewise SQLITE_O
93a0: 4b 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 75 63 63 65  K..**.** A succe
93b0: 73 73 66 75 6c 20 65 76 61 6c 75 61 74 69 6f 6e  ssful evaluation
93c0: 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   of this routine
93d0: 20 61 63 71 75 69 72 65 73 20 74 68 65 20 6d 75   acquires the mu
93e0: 74 65 78 20 6f 6e 20 70 2e 0a 2a 2a 20 74 68 65  tex on p..** the
93f0: 20 6d 75 74 65 78 20 69 73 20 72 65 6c 65 61 73   mutex is releas
9400: 65 64 20 69 66 20 61 6e 79 20 6b 69 6e 64 20 6f  ed if any kind o
9410: 66 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a  f error occurs..
9420: 2a 2a 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  **.** The error 
9430: 63 6f 64 65 20 73 74 6f 72 65 64 20 69 6e 20 64  code stored in d
9440: 61 74 61 62 61 73 65 20 70 2d 3e 64 62 20 69 73  atabase p->db is
9450: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74   overwritten wit
9460: 68 20 74 68 65 20 72 65 74 75 72 6e 0a 2a 2a 20  h the return.** 
9470: 76 61 6c 75 65 20 69 6e 20 61 6e 79 20 63 61 73  value in any cas
9480: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
9490: 20 76 64 62 65 55 6e 62 69 6e 64 28 56 64 62 65   vdbeUnbind(Vdbe
94a0: 20 2a 70 2c 20 69 6e 74 20 69 29 7b 0a 20 20 4d   *p, int i){.  M
94b0: 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20  em *pVar;.  if( 
94c0: 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e 75 6c  vdbeSafetyNotNul
94d0: 6c 28 70 29 20 29 7b 0a 20 20 20 20 72 65 74 75  l(p) ){.    retu
94e0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
94f0: 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73 71 6c  _BKPT;.  }.  sql
9500: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
9510: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
9520: 20 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d    if( p->magic!=
9530: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 7c  VDBE_MAGIC_RUN |
9540: 7c 20 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20  | p->pc>=0 ){.  
9550: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70    sqlite3Error(p
9560: 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4d 49 53  ->db, SQLITE_MIS
9570: 55 53 45 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  USE);.    sqlite
9580: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
9590: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
95a0: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 53 51 4c   sqlite3_log(SQL
95b0: 49 54 45 5f 4d 49 53 55 53 45 2c 20 0a 20 20 20  ITE_MISUSE, .   
95c0: 20 20 20 20 20 22 62 69 6e 64 20 6f 6e 20 61 20       "bind on a 
95d0: 62 75 73 79 20 70 72 65 70 61 72 65 64 20 73 74  busy prepared st
95e0: 61 74 65 6d 65 6e 74 3a 20 5b 25 73 5d 22 2c 20  atement: [%s]", 
95f0: 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 20 20 72 65  p->zSql);.    re
9600: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
9610: 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69  SE_BKPT;.  }.  i
9620: 66 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e  f( i<1 || i>p->n
9630: 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Var ){.    sqlit
9640: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53  e3Error(p->db, S
9650: 51 4c 49 54 45 5f 52 41 4e 47 45 29 3b 0a 20 20  QLITE_RANGE);.  
9660: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
9670: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
9680: 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ex);.    return 
9690: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a 20 20  SQLITE_RANGE;.  
96a0: 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61 72 20  }.  i--;.  pVar 
96b0: 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b 0a 20  = &p->aVar[i];. 
96c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
96d0: 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a 20 20  elease(pVar);.  
96e0: 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pVar->flags = ME
96f0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69 74 65  M_Null;.  sqlite
9700: 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51  3Error(p->db, SQ
9710: 4c 49 54 45 5f 4f 4b 29 3b 0a 0a 20 20 2f 2a 20  LITE_OK);..  /* 
9720: 49 66 20 74 68 65 20 62 69 74 20 63 6f 72 72 65  If the bit corre
9730: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 69 73  sponding to this
9740: 20 76 61 72 69 61 62 6c 65 20 69 6e 20 56 64 62   variable in Vdb
9750: 65 2e 65 78 70 6d 61 73 6b 20 69 73 20 73 65 74  e.expmask is set
9760: 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 62 69 6e  , then .  ** bin
9770: 64 69 6e 67 20 61 20 6e 65 77 20 76 61 6c 75 65  ding a new value
9780: 20 74 6f 20 74 68 69 73 20 76 61 72 69 61 62 6c   to this variabl
9790: 65 20 69 6e 76 61 6c 69 64 61 74 65 73 20 74 68  e invalidates th
97a0: 65 20 63 75 72 72 65 6e 74 20 71 75 65 72 79 20  e current query 
97b0: 70 6c 61 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  plan..  **.  ** 
97c0: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
97d0: 46 3a 20 52 2d 34 38 34 34 30 2d 33 37 35 39 35  F: R-48440-37595
97e0: 20 49 66 20 74 68 65 20 73 70 65 63 69 66 69 63   If the specific
97f0: 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74 6f 20   value bound to 
9800: 68 6f 73 74 0a 20 20 2a 2a 20 70 61 72 61 6d 65  host.  ** parame
9810: 74 65 72 20 69 6e 20 74 68 65 20 57 48 45 52 45  ter in the WHERE
9820: 20 63 6c 61 75 73 65 20 6d 69 67 68 74 20 69 6e   clause might in
9830: 66 6c 75 65 6e 63 65 20 74 68 65 20 63 68 6f 69  fluence the choi
9840: 63 65 20 6f 66 20 71 75 65 72 79 20 70 6c 61 6e  ce of query plan
9850: 0a 20 20 2a 2a 20 66 6f 72 20 61 20 73 74 61 74  .  ** for a stat
9860: 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20  ement, then the 
9870: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
9880: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
9890: 72 65 63 6f 6d 70 69 6c 65 64 2c 0a 20 20 2a 2a  recompiled,.  **
98a0: 20 61 73 20 69 66 20 74 68 65 72 65 20 68 61 64   as if there had
98b0: 20 62 65 65 6e 20 61 20 73 63 68 65 6d 61 20 63   been a schema c
98c0: 68 61 6e 67 65 2c 20 6f 6e 20 74 68 65 20 66 69  hange, on the fi
98d0: 72 73 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70  rst sqlite3_step
98e0: 28 29 20 63 61 6c 6c 0a 20 20 2a 2a 20 66 6f 6c  () call.  ** fol
98f0: 6c 6f 77 69 6e 67 20 61 6e 79 20 63 68 61 6e 67  lowing any chang
9900: 65 20 74 6f 20 74 68 65 20 62 69 6e 64 69 6e 67  e to the binding
9910: 73 20 6f 66 20 74 68 61 74 20 70 61 72 61 6d 65  s of that parame
9920: 74 65 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ter..  */.  if( 
9930: 70 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26  p->isPrepareV2 &
9940: 26 0a 20 20 20 20 20 28 28 69 3c 33 32 20 26 26  &.     ((i<32 &&
9950: 20 70 2d 3e 65 78 70 6d 61 73 6b 20 26 20 28 28   p->expmask & ((
9960: 75 33 32 29 31 20 3c 3c 20 69 29 29 20 7c 7c 20  u32)1 << i)) || 
9970: 70 2d 3e 65 78 70 6d 61 73 6b 3d 3d 30 78 66 66  p->expmask==0xff
9980: 66 66 66 66 66 66 29 0a 20 20 29 7b 0a 20 20 20  ffffff).  ){.   
9990: 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
99a0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
99b0: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
99c0: 2a 20 42 69 6e 64 20 61 20 74 65 78 74 20 6f 72  * Bind a text or
99d0: 20 42 4c 4f 42 20 76 61 6c 75 65 2e 0a 2a 2f 0a   BLOB value..*/.
99e0: 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e 64 54  static int bindT
99f0: 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  ext(.  sqlite3_s
9a00: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20 2f 2a  tmt *pStmt,   /*
9a10: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
9a20: 6f 20 62 69 6e 64 20 61 67 61 69 6e 73 74 20 2a  o bind against *
9a30: 2f 0a 20 20 69 6e 74 20 69 2c 20 20 20 20 20 20  /.  int i,      
9a40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
9a50: 64 65 78 20 6f 66 20 74 68 65 20 70 61 72 61 6d  dex of the param
9a60: 65 74 65 72 20 74 6f 20 62 69 6e 64 20 2a 2f 0a  eter to bind */.
9a70: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44    const void *zD
9a80: 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ata,     /* Poin
9a90: 74 65 72 20 74 6f 20 74 68 65 20 64 61 74 61 20  ter to the data 
9aa0: 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f 0a 20  to be bound */. 
9ab0: 20 69 6e 74 20 6e 44 61 74 61 2c 20 20 20 20 20   int nData,     
9ac0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9ad0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
9ae0: 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a  ta to be bound *
9af0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  /.  void (*xDel)
9b00: 28 76 6f 69 64 2a 29 2c 20 20 20 2f 2a 20 44 65  (void*),   /* De
9b10: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 74 68 65  structor for the
9b20: 20 64 61 74 61 20 2a 2f 0a 20 20 75 38 20 65 6e   data */.  u8 en
9b30: 63 6f 64 69 6e 67 20 20 20 20 20 20 20 20 20 20  coding          
9b40: 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 66 6f    /* Encoding fo
9b50: 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 29 7b  r the data */.){
9b60: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
9b70: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 4d 65  be *)pStmt;.  Me
9b80: 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e 74 20 72  m *pVar;.  int r
9b90: 63 3b 0a 0a 20 20 72 63 20 3d 20 76 64 62 65 55  c;..  rc = vdbeU
9ba0: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69  nbind(p, i);.  i
9bb0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
9bc0: 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 44 61 74   ){.    if( zDat
9bd0: 61 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 56  a!=0 ){.      pV
9be0: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 2d  ar = &p->aVar[i-
9bf0: 31 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  1];.      rc = s
9c00: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9c10: 53 74 72 28 70 56 61 72 2c 20 7a 44 61 74 61 2c  Str(pVar, zData,
9c20: 20 6e 44 61 74 61 2c 20 65 6e 63 6f 64 69 6e 67   nData, encoding
9c30: 2c 20 78 44 65 6c 29 3b 0a 20 20 20 20 20 20 69  , xDel);.      i
9c40: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
9c50: 20 26 26 20 65 6e 63 6f 64 69 6e 67 21 3d 30 20   && encoding!=0 
9c60: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
9c70: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
9c80: 65 45 6e 63 6f 64 69 6e 67 28 70 56 61 72 2c 20  eEncoding(pVar, 
9c90: 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20  ENC(p->db));.   
9ca0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
9cb0: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 72  e3Error(p->db, r
9cc0: 63 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  c);.      rc = s
9cd0: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d  qlite3ApiExit(p-
9ce0: 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 7d 0a  >db, rc);.    }.
9cf0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
9d00: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
9d10: 75 74 65 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69  utex);.  }else i
9d20: 66 28 20 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f  f( xDel!=SQLITE_
9d30: 53 54 41 54 49 43 20 26 26 20 78 44 65 6c 21 3d  STATIC && xDel!=
9d40: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
9d50: 20 29 7b 0a 20 20 20 20 78 44 65 6c 28 28 76 6f   ){.    xDel((vo
9d60: 69 64 2a 29 7a 44 61 74 61 29 3b 0a 20 20 7d 0a  id*)zData);.  }.
9d70: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
9d80: 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 62 6c  ./*.** Bind a bl
9d90: 6f 62 20 76 61 6c 75 65 20 74 6f 20 61 6e 20 53  ob value to an S
9da0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 76 61 72  QL statement var
9db0: 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  iable..*/.int sq
9dc0: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
9dd0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
9de0: 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69  *pStmt, .  int i
9df0: 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  , .  const void 
9e00: 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e  *zData, .  int n
9e10: 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a  Data, .  void (*
9e20: 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  xDel)(void*).){.
9e30: 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78    return bindTex
9e40: 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74  t(pStmt, i, zDat
9e50: 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20  a, nData, xDel, 
9e60: 30 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  0);.}.int sqlite
9e70: 33 5f 62 69 6e 64 5f 62 6c 6f 62 36 34 28 0a 20  3_bind_blob64(. 
9e80: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
9e90: 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20  Stmt, .  int i, 
9ea0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
9eb0: 44 61 74 61 2c 20 0a 20 20 73 71 6c 69 74 65 33  Data, .  sqlite3
9ec0: 5f 75 69 6e 74 36 34 20 6e 44 61 74 61 2c 20 0a  _uint64 nData, .
9ed0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
9ee0: 6f 69 64 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72  oid*).){.  asser
9ef0: 74 28 20 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f  t( xDel!=SQLITE_
9f00: 44 59 4e 41 4d 49 43 20 29 3b 0a 20 20 69 66 28  DYNAMIC );.  if(
9f10: 20 6e 44 61 74 61 3e 30 78 37 66 66 66 66 66 66   nData>0x7ffffff
9f20: 66 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  f ){.    return 
9f30: 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73 74 72  invokeValueDestr
9f40: 75 63 74 6f 72 28 7a 44 61 74 61 2c 20 78 44 65  uctor(zData, xDe
9f50: 6c 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  l, 0);.  }else{.
9f60: 20 20 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54      return bindT
9f70: 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44  ext(pStmt, i, zD
9f80: 61 74 61 2c 20 28 69 6e 74 29 6e 44 61 74 61 2c  ata, (int)nData,
9f90: 20 78 44 65 6c 2c 20 30 29 3b 0a 20 20 7d 0a 7d   xDel, 0);.  }.}
9fa0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
9fb0: 64 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33  d_double(sqlite3
9fc0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
9fd0: 74 20 69 2c 20 64 6f 75 62 6c 65 20 72 56 61 6c  t i, double rVal
9fe0: 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ue){.  int rc;. 
9ff0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
a000: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d   *)pStmt;.  rc =
a010: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
a020: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
a030: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
a040: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44  lite3VdbeMemSetD
a050: 6f 75 62 6c 65 28 26 70 2d 3e 61 56 61 72 5b 69  ouble(&p->aVar[i
a060: 2d 31 5d 2c 20 72 56 61 6c 75 65 29 3b 0a 20 20  -1], rValue);.  
a070: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
a080: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
a090: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
a0a0: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
a0b0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 73 71 6c  te3_bind_int(sql
a0c0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 2c 20 69 6e  ite3_stmt *p, in
a0d0: 74 20 69 2c 20 69 6e 74 20 69 56 61 6c 75 65 29  t i, int iValue)
a0e0: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
a0f0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 2c  e3_bind_int64(p,
a100: 20 69 2c 20 28 69 36 34 29 69 56 61 6c 75 65 29   i, (i64)iValue)
a110: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
a120: 62 69 6e 64 5f 69 6e 74 36 34 28 73 71 6c 69 74  bind_int64(sqlit
a130: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
a140: 69 6e 74 20 69 2c 20 73 71 6c 69 74 65 5f 69 6e  int i, sqlite_in
a150: 74 36 34 20 69 56 61 6c 75 65 29 7b 0a 20 20 69  t64 iValue){.  i
a160: 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70  nt rc;.  Vdbe *p
a170: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
a180: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
a190: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
a1a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
a1b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
a1c0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 70 2d  eMemSetInt64(&p-
a1d0: 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 69 56 61 6c  >aVar[i-1], iVal
a1e0: 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ue);.    sqlite3
a1f0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e  _mutex_leave(p->
a200: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
a210: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69    return rc;.}.i
a220: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
a230: 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 73 74 6d  null(sqlite3_stm
a240: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
a250: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64  {.  int rc;.  Vd
a260: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
a270: 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62  Stmt;.  rc = vdb
a280: 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20  eUnbind(p, i);. 
a290: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
a2a0: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
a2b0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
a2c0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
a2d0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
a2e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
a2f0: 5f 74 65 78 74 28 20 0a 20 20 73 71 6c 69 74 65  _text( .  sqlite
a300: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a  3_stmt *pStmt, .
a310: 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73    int i, .  cons
a320: 74 20 63 68 61 72 20 2a 7a 44 61 74 61 2c 20 0a  t char *zData, .
a330: 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20    int nData, .  
a340: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
a350: 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  d*).){.  return 
a360: 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20  bindText(pStmt, 
a370: 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c  i, zData, nData,
a380: 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55 54   xDel, SQLITE_UT
a390: 46 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  F8);.}.int sqlit
a3a0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 36 34 28 20  e3_bind_text64( 
a3b0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
a3c0: 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69  *pStmt, .  int i
a3d0: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
a3e0: 2a 7a 44 61 74 61 2c 20 0a 20 20 73 71 6c 69 74  *zData, .  sqlit
a3f0: 65 33 5f 75 69 6e 74 36 34 20 6e 44 61 74 61 2c  e3_uint64 nData,
a400: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
a410: 28 76 6f 69 64 2a 29 2c 0a 20 20 75 6e 73 69 67  (void*),.  unsig
a420: 6e 65 64 20 63 68 61 72 20 65 6e 63 0a 29 7b 0a  ned char enc.){.
a430: 20 20 61 73 73 65 72 74 28 20 78 44 65 6c 21 3d    assert( xDel!=
a440: 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 29  SQLITE_DYNAMIC )
a450: 3b 0a 20 20 69 66 28 20 6e 44 61 74 61 3e 30 78  ;.  if( nData>0x
a460: 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20 20 20  7fffffff ){.    
a470: 72 65 74 75 72 6e 20 69 6e 76 6f 6b 65 56 61 6c  return invokeVal
a480: 75 65 44 65 73 74 72 75 63 74 6f 72 28 7a 44 61  ueDestructor(zDa
a490: 74 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a 20 20  ta, xDel, 0);.  
a4a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 65  }else{.    if( e
a4b0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
a4c0: 20 29 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f   ) enc = SQLITE_
a4d0: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
a4e0: 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74   return bindText
a4f0: 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61  (pStmt, i, zData
a500: 2c 20 28 69 6e 74 29 6e 44 61 74 61 2c 20 78 44  , (int)nData, xD
a510: 65 6c 2c 20 65 6e 63 29 3b 0a 20 20 7d 0a 7d 0a  el, enc);.  }.}.
a520: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a530: 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
a540: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
a550: 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  6(.  sqlite3_stm
a560: 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74  t *pStmt, .  int
a570: 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i, .  const voi
a580: 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74  d *zData, .  int
a590: 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20   nData, .  void 
a5a0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29  (*xDel)(void*).)
a5b0: 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54  {.  return bindT
a5c0: 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44  ext(pStmt, i, zD
a5d0: 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c  ata, nData, xDel
a5e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
a5f0: 54 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  TIVE);.}.#endif 
a600: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
a610: 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  TF16 */.int sqli
a620: 74 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73  te3_bind_value(s
a630: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
a640: 6d 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74  mt, int i, const
a650: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
a660: 70 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72  pValue){.  int r
a670: 63 3b 0a 20 20 73 77 69 74 63 68 28 20 73 71 6c  c;.  switch( sql
a680: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
a690: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
a6a0: 70 56 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 63  pValue) ){.    c
a6b0: 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  ase SQLITE_INTEG
a6c0: 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ER: {.      rc =
a6d0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
a6e0: 74 36 34 28 70 53 74 6d 74 2c 20 69 2c 20 70 56  t64(pStmt, i, pV
a6f0: 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20 20 20  alue->u.i);.    
a700: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
a710: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46     case SQLITE_F
a720: 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 72 63  LOAT: {.      rc
a730: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
a740: 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69 2c  double(pStmt, i,
a750: 20 70 56 61 6c 75 65 2d 3e 75 2e 72 29 3b 0a 20   pValue->u.r);. 
a760: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a770: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
a780: 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20  E_BLOB: {.      
a790: 69 66 28 20 70 56 61 6c 75 65 2d 3e 66 6c 61 67  if( pValue->flag
a7a0: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
a7b0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
a7c0: 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
a7d0: 6f 62 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61  ob(pStmt, i, pVa
a7e0: 6c 75 65 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  lue->u.nZero);. 
a7f0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
a800: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a810: 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74  _bind_blob(pStmt
a820: 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 7a 2c 20  , i, pValue->z, 
a830: 70 56 61 6c 75 65 2d 3e 6e 2c 53 51 4c 49 54 45  pValue->n,SQLITE
a840: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
a850: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
a860: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
a870: 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a   SQLITE_TEXT: {.
a880: 20 20 20 20 20 20 72 63 20 3d 20 62 69 6e 64 54        rc = bindT
a890: 65 78 74 28 70 53 74 6d 74 2c 69 2c 20 20 70 56  ext(pStmt,i,  pV
a8a0: 61 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d  alue->z, pValue-
a8b0: 3e 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  >n, SQLITE_TRANS
a8c0: 49 45 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20  IENT,.          
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8e0: 20 20 20 20 70 56 61 6c 75 65 2d 3e 65 6e 63 29      pValue->enc)
a8f0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
a900: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
a910: 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  : {.      rc = s
a920: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
a930: 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
a940: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
a950: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
a960: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
a970: 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69  nd_zeroblob(sqli
a980: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
a990: 20 69 6e 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a   int i, int n){.
a9a0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
a9b0: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
a9c0: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
a9d0: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
a9e0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
a9f0: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
aa00: 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c  VdbeMemSetZeroBl
aa10: 6f 62 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d  ob(&p->aVar[i-1]
aa20: 2c 20 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , n);.    sqlite
aa30: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
aa40: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
aa50: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
aa60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
aa70: 5f 7a 65 72 6f 62 6c 6f 62 36 34 28 73 71 6c 69  _zeroblob64(sqli
aa80: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
aa90: 20 69 6e 74 20 69 2c 20 73 71 6c 69 74 65 33 5f   int i, sqlite3_
aaa0: 75 69 6e 74 36 34 20 6e 29 7b 0a 20 20 69 6e 74  uint64 n){.  int
aab0: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
aac0: 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a   (Vdbe *)pStmt;.
aad0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
aae0: 65 6e 74 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74  enter(p->db->mut
aaf0: 65 78 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 36  ex);.  if( n>(u6
ab00: 34 29 70 2d 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  4)p->db->aLimit[
ab10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
ab20: 47 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  GTH] ){.    rc =
ab30: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
ab40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
ab50: 65 72 74 28 20 28 6e 20 26 20 30 78 37 46 46 46  ert( (n & 0x7FFF
ab60: 46 46 46 46 29 3d 3d 6e 20 29 3b 0a 20 20 20 20  FFFF)==n );.    
ab70: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
ab80: 64 5f 7a 65 72 6f 62 6c 6f 62 28 70 53 74 6d 74  d_zeroblob(pStmt
ab90: 2c 20 69 2c 20 6e 29 3b 0a 20 20 7d 0a 20 20 72  , i, n);.  }.  r
aba0: 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78  c = sqlite3ApiEx
abb0: 69 74 28 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20  it(p->db, rc);. 
abc0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
abd0: 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  eave(p->db->mute
abe0: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
abf0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
ac00: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 77   the number of w
ac10: 69 6c 64 63 61 72 64 73 20 74 68 61 74 20 63 61  ildcards that ca
ac20: 6e 20 62 65 20 70 6f 74 65 6e 74 69 61 6c 6c 79  n be potentially
ac30: 20 62 6f 75 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68   bound to..** Th
ac40: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 64  is routine is ad
ac50: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 44  ded to support D
ac60: 42 44 3a 3a 53 51 4c 69 74 65 2e 20 20 0a 2a 2f  BD::SQLite.  .*/
ac70: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
ac80: 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
ac90: 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  t(sqlite3_stmt *
aca0: 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a  pStmt){.  Vdbe *
acb0: 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  p = (Vdbe*)pStmt
acc0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 20 3f 20 70  ;.  return p ? p
acd0: 2d 3e 6e 56 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f  ->nVar : 0;.}../
ace0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
acf0: 6e 61 6d 65 20 6f 66 20 61 20 77 69 6c 64 63 61  name of a wildca
ad00: 72 64 20 70 61 72 61 6d 65 74 65 72 2e 20 20 52  rd parameter.  R
ad10: 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68  eturn NULL if th
ad20: 65 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 6f 75  e index.** is ou
ad30: 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69 66  t of range or if
ad40: 20 74 68 65 20 77 69 6c 64 63 61 72 64 20 69 73   the wildcard is
ad50: 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20   unnamed..**.** 
ad60: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
ad70: 77 61 79 73 20 55 54 46 2d 38 2e 0a 2a 2f 0a 63  ways UTF-8..*/.c
ad80: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
ad90: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
ada0: 72 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73  r_name(sqlite3_s
adb0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
adc0: 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  i){.  Vdbe *p = 
add0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
ade0: 69 66 28 20 70 3d 3d 30 20 7c 7c 20 69 3c 31 20  if( p==0 || i<1 
adf0: 7c 7c 20 69 3e 70 2d 3e 6e 7a 56 61 72 20 29 7b  || i>p->nzVar ){
ae00: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
ae10: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 61   }.  return p->a
ae20: 7a 56 61 72 5b 69 2d 31 5d 3b 0a 7d 0a 0a 2f 2a  zVar[i-1];.}../*
ae30: 0a 2a 2a 20 47 69 76 65 6e 20 61 20 77 69 6c 64  .** Given a wild
ae40: 63 61 72 64 20 70 61 72 61 6d 65 74 65 72 20 6e  card parameter n
ae50: 61 6d 65 2c 20 72 65 74 75 72 6e 20 74 68 65 20  ame, return the 
ae60: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 76 61 72  index of the var
ae70: 69 61 62 6c 65 0a 2a 2a 20 77 69 74 68 20 74 68  iable.** with th
ae80: 61 74 20 6e 61 6d 65 2e 20 20 49 66 20 74 68 65  at name.  If the
ae90: 72 65 20 69 73 20 6e 6f 20 76 61 72 69 61 62 6c  re is no variabl
aea0: 65 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e  e with the given
aeb0: 20 6e 61 6d 65 2c 0a 2a 2a 20 72 65 74 75 72 6e   name,.** return
aec0: 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74   0..*/.int sqlit
aed0: 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
aee0: 6e 64 65 78 28 56 64 62 65 20 2a 70 2c 20 63 6f  ndex(Vdbe *p, co
aef0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
af00: 20 69 6e 74 20 6e 4e 61 6d 65 29 7b 0a 20 20 69   int nName){.  i
af10: 6e 74 20 69 3b 0a 20 20 69 66 28 20 70 3d 3d 30  nt i;.  if( p==0
af20: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30   ){.    return 0
af30: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d  ;.  }.  if( zNam
af40: 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30  e ){.    for(i=0
af50: 3b 20 69 3c 70 2d 3e 6e 7a 56 61 72 3b 20 69 2b  ; i<p->nzVar; i+
af60: 2b 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  +){.      const 
af70: 63 68 61 72 20 2a 7a 20 3d 20 70 2d 3e 61 7a 56  char *z = p->azV
af80: 61 72 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28  ar[i];.      if(
af90: 20 7a 20 26 26 20 73 74 72 6e 63 6d 70 28 7a 2c   z && strncmp(z,
afa0: 7a 4e 61 6d 65 2c 6e 4e 61 6d 65 29 3d 3d 30 20  zName,nName)==0 
afb0: 26 26 20 7a 5b 6e 4e 61 6d 65 5d 3d 3d 30 20 29  && z[nName]==0 )
afc0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
afd0: 20 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   i+1;.      }.  
afe0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
aff0: 20 30 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65   0;.}.int sqlite
b000: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
b010: 5f 69 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 73  _index(sqlite3_s
b020: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 63 6f 6e 73  tmt *pStmt, cons
b030: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a  t char *zName){.
b040: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
b050: 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
b060: 65 78 28 28 56 64 62 65 2a 29 70 53 74 6d 74 2c  ex((Vdbe*)pStmt,
b070: 20 7a 4e 61 6d 65 2c 20 73 71 6c 69 74 65 33 53   zName, sqlite3S
b080: 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 29 3b  trlen30(zName));
b090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66  .}../*.** Transf
b0a0: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
b0b0: 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 73  from the first s
b0c0: 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 20 74 6f  tatement over to
b0d0: 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 2a 2f 0a   the second..*/.
b0e0: 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73  int sqlite3Trans
b0f0: 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69  ferBindings(sqli
b100: 74 65 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d 53  te3_stmt *pFromS
b110: 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  tmt, sqlite3_stm
b120: 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20 56  t *pToStmt){.  V
b130: 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56 64  dbe *pFrom = (Vd
b140: 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a 20  be*)pFromStmt;. 
b150: 20 56 64 62 65 20 2a 70 54 6f 20 3d 20 28 56 64   Vdbe *pTo = (Vd
b160: 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20 69  be*)pToStmt;.  i
b170: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
b180: 70 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f 6d 2d 3e  pTo->db==pFrom->
b190: 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  db );.  assert( 
b1a0: 70 54 6f 2d 3e 6e 56 61 72 3d 3d 70 46 72 6f 6d  pTo->nVar==pFrom
b1b0: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 73 71 6c 69  ->nVar );.  sqli
b1c0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
b1d0: 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  pTo->db->mutex);
b1e0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 46  .  for(i=0; i<pF
b1f0: 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b  rom->nVar; i++){
b200: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b210: 4d 65 6d 4d 6f 76 65 28 26 70 54 6f 2d 3e 61 56  MemMove(&pTo->aV
b220: 61 72 5b 69 5d 2c 20 26 70 46 72 6f 6d 2d 3e 61  ar[i], &pFrom->a
b230: 56 61 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 73  Var[i]);.  }.  s
b240: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
b250: 76 65 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65  ve(pTo->db->mute
b260: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  x);.  return SQL
b270: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  ITE_OK;.}..#ifnd
b280: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b290: 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20  EPRECATED./*.** 
b2a0: 44 65 70 72 65 63 61 74 65 64 20 65 78 74 65 72  Deprecated exter
b2b0: 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20  nal interface.  
b2c0: 49 6e 74 65 72 6e 61 6c 2f 63 6f 72 65 20 53 51  Internal/core SQ
b2d0: 4c 69 74 65 20 63 6f 64 65 0a 2a 2a 20 73 68 6f  Lite code.** sho
b2e0: 75 6c 64 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  uld call sqlite3
b2f0: 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
b300: 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 6d 69  ..**.** It is mi
b310: 73 75 73 65 20 74 6f 20 63 61 6c 6c 20 74 68 69  suse to call thi
b320: 73 20 72 6f 75 74 69 6e 65 20 77 69 74 68 20 73  s routine with s
b330: 74 61 74 65 6d 65 6e 74 73 20 66 72 6f 6d 20 64  tatements from d
b340: 69 66 66 65 72 65 6e 74 0a 2a 2a 20 64 61 74 61  ifferent.** data
b350: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
b360: 2e 20 20 42 75 74 20 61 73 20 74 68 69 73 20 69  .  But as this i
b370: 73 20 61 20 64 65 70 72 65 63 61 74 65 64 20 69  s a deprecated i
b380: 6e 74 65 72 66 61 63 65 2c 20 77 65 0a 2a 2a 20  nterface, we.** 
b390: 77 69 6c 6c 20 6e 6f 74 20 62 6f 74 68 65 72 20  will not bother 
b3a0: 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 74 68 61  to check for tha
b3b0: 74 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a 2a 0a  t condition..**.
b3c0: 2a 2a 20 49 66 20 74 68 65 20 74 77 6f 20 73 74  ** If the two st
b3d0: 61 74 65 6d 65 6e 74 73 20 63 6f 6e 74 61 69 6e  atements contain
b3e0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75 6d   a different num
b3f0: 62 65 72 20 6f 66 20 62 69 6e 64 69 6e 67 73 2c  ber of bindings,
b400: 20 74 68 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c 49   then.** an SQLI
b410: 54 45 5f 45 52 52 4f 52 20 69 73 20 72 65 74 75  TE_ERROR is retu
b420: 72 6e 65 64 2e 20 20 4e 6f 74 68 69 6e 67 20 65  rned.  Nothing e
b430: 6c 73 65 20 63 61 6e 20 67 6f 20 77 72 6f 6e 67  lse can go wrong
b440: 2c 20 73 6f 20 6f 74 68 65 72 77 69 73 65 0a 2a  , so otherwise.*
b450: 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72  * SQLITE_OK is r
b460: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20  eturned..*/.int 
b470: 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
b480: 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  _bindings(sqlite
b490: 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d 53 74 6d  3_stmt *pFromStm
b4a0: 74 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  t, sqlite3_stmt 
b4b0: 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20 56 64 62  *pToStmt){.  Vdb
b4c0: 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56 64 62 65  e *pFrom = (Vdbe
b4d0: 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a 20 20 56  *)pFromStmt;.  V
b4e0: 64 62 65 20 2a 70 54 6f 20 3d 20 28 56 64 62 65  dbe *pTo = (Vdbe
b4f0: 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20 69 66 28  *)pToStmt;.  if(
b500: 20 70 46 72 6f 6d 2d 3e 6e 56 61 72 21 3d 70 54   pFrom->nVar!=pT
b510: 6f 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 72  o->nVar ){.    r
b520: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
b530: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 54  OR;.  }.  if( pT
b540: 6f 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26  o->isPrepareV2 &
b550: 26 20 70 54 6f 2d 3e 65 78 70 6d 61 73 6b 20 29  & pTo->expmask )
b560: 7b 0a 20 20 20 20 70 54 6f 2d 3e 65 78 70 69 72  {.    pTo->expir
b570: 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66  ed = 1;.  }.  if
b580: 28 20 70 46 72 6f 6d 2d 3e 69 73 50 72 65 70 61  ( pFrom->isPrepa
b590: 72 65 56 32 20 26 26 20 70 46 72 6f 6d 2d 3e 65  reV2 && pFrom->e
b5a0: 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20 70 46  xpmask ){.    pF
b5b0: 72 6f 6d 2d 3e 65 78 70 69 72 65 64 20 3d 20 31  rom->expired = 1
b5c0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73  ;.  }.  return s
b5d0: 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
b5e0: 6e 64 69 6e 67 73 28 70 46 72 6f 6d 53 74 6d 74  ndings(pFromStmt
b5f0: 2c 20 70 54 6f 53 74 6d 74 29 3b 0a 7d 0a 23 65  , pToStmt);.}.#e
b600: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
b610: 72 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  rn the sqlite3* 
b620: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
b630: 74 6f 20 77 68 69 63 68 20 74 68 65 20 70 72 65  to which the pre
b640: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
b650: 67 69 76 65 6e 0a 2a 2a 20 69 6e 20 74 68 65 20  given.** in the 
b660: 61 72 67 75 6d 65 6e 74 20 62 65 6c 6f 6e 67 73  argument belongs
b670: 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73  .  This is the s
b680: 61 6d 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  ame database han
b690: 64 6c 65 20 74 68 61 74 20 77 61 73 0a 2a 2a 20  dle that was.** 
b6a0: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
b6b0: 6e 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  nt to the sqlite
b6c0: 33 5f 70 72 65 70 61 72 65 28 29 20 74 68 61 74  3_prepare() that
b6d0: 20 77 61 73 20 75 73 65 64 20 74 6f 20 63 72 65   was used to cre
b6e0: 61 74 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65  ate.** the state
b6f0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 66 69 72 73  ment in the firs
b700: 74 20 70 6c 61 63 65 2e 0a 2a 2f 0a 73 71 6c 69  t place..*/.sqli
b710: 74 65 33 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f  te3 *sqlite3_db_
b720: 68 61 6e 64 6c 65 28 73 71 6c 69 74 65 33 5f 73  handle(sqlite3_s
b730: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72  tmt *pStmt){.  r
b740: 65 74 75 72 6e 20 70 53 74 6d 74 20 3f 20 28 28  eturn pStmt ? ((
b750: 56 64 62 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62  Vdbe*)pStmt)->db
b760: 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52   : 0;.}../*.** R
b770: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68  eturn true if th
b780: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
b790: 6d 65 6e 74 20 69 73 20 67 75 61 72 61 6e 74 65  ment is guarante
b7a0: 65 64 20 74 6f 20 6e 6f 74 20 6d 6f 64 69 66 79  ed to not modify
b7b0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
b7c0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
b7d0: 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 73  _stmt_readonly(s
b7e0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
b7f0: 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 70 53  mt){.  return pS
b800: 74 6d 74 20 3f 20 28 28 56 64 62 65 2a 29 70 53  tmt ? ((Vdbe*)pS
b810: 74 6d 74 29 2d 3e 72 65 61 64 4f 6e 6c 79 20 3a  tmt)->readOnly :
b820: 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   1;.}../*.** Ret
b830: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
b840: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
b850: 6e 74 20 69 73 20 69 6e 20 6e 65 65 64 20 6f 66  nt is in need of
b860: 20 62 65 69 6e 67 20 72 65 73 65 74 2e 0a 2a 2f   being reset..*/
b870: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 6d  .int sqlite3_stm
b880: 74 5f 62 75 73 79 28 73 71 6c 69 74 65 33 5f 73  t_busy(sqlite3_s
b890: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56  tmt *pStmt){.  V
b8a0: 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29  dbe *v = (Vdbe*)
b8b0: 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20  pStmt;.  return 
b8c0: 76 21 3d 30 20 26 26 20 76 2d 3e 70 63 3e 3d 30  v!=0 && v->pc>=0
b8d0: 20 26 26 20 76 2d 3e 6d 61 67 69 63 3d 3d 56 44   && v->magic==VD
b8e0: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 3b 0a 7d 0a  BE_MAGIC_RUN;.}.
b8f0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
b900: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
b910: 65 78 74 20 70 72 65 70 61 72 65 64 20 73 74 61  ext prepared sta
b920: 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70 53 74  tement after pSt
b930: 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  mt associated.**
b940: 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20 63   with database c
b950: 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e 20 20  onnection pDb.  
b960: 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55 4c 4c  If pStmt is NULL
b970: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66 69 72  , return the fir
b980: 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64 20 73  st.** prepared s
b990: 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74 68 65  tatement for the
b9a0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
b9b0: 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20 4e 55  tion.  Return NU
b9c0: 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a 20 61  LL if there.** a
b9d0: 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f 0a 73  re no more..*/.s
b9e0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 71 6c  qlite3_stmt *sql
b9f0: 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28 73  ite3_next_stmt(s
ba00: 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73 71 6c  qlite3 *pDb, sql
ba10: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
ba20: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
ba30: 74 20 2a 70 4e 65 78 74 3b 0a 23 69 66 64 65 66  t *pNext;.#ifdef
ba40: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
ba50: 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
ba60: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
ba70: 63 6b 4f 6b 28 70 44 62 29 20 29 7b 0a 20 20 20  ckOk(pDb) ){.   
ba80: 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49   (void)SQLITE_MI
ba90: 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72  SUSE_BKPT;.    r
baa0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e  eturn 0;.  }.#en
bab0: 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  dif.  sqlite3_mu
bac0: 74 65 78 5f 65 6e 74 65 72 28 70 44 62 2d 3e 6d  tex_enter(pDb->m
bad0: 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 53 74  utex);.  if( pSt
bae0: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4e 65  mt==0 ){.    pNe
baf0: 78 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74  xt = (sqlite3_st
bb00: 6d 74 2a 29 70 44 62 2d 3e 70 56 64 62 65 3b 0a  mt*)pDb->pVdbe;.
bb10: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4e 65    }else{.    pNe
bb20: 78 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74  xt = (sqlite3_st
bb30: 6d 74 2a 29 28 28 56 64 62 65 2a 29 70 53 74 6d  mt*)((Vdbe*)pStm
bb40: 74 29 2d 3e 70 4e 65 78 74 3b 0a 20 20 7d 0a 20  t)->pNext;.  }. 
bb50: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
bb60: 65 61 76 65 28 70 44 62 2d 3e 6d 75 74 65 78 29  eave(pDb->mutex)
bb70: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4e 65 78 74  ;.  return pNext
bb80: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
bb90: 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  n the value of a
bba0: 20 73 74 61 74 75 73 20 63 6f 75 6e 74 65 72 20   status counter 
bbb0: 66 6f 72 20 61 20 70 72 65 70 61 72 65 64 20 73  for a prepared s
bbc0: 74 61 74 65 6d 65 6e 74 0a 2a 2f 0a 69 6e 74 20  tatement.*/.int 
bbd0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
bbe0: 74 75 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  tus(sqlite3_stmt
bbf0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 6f 70 2c   *pStmt, int op,
bc00: 20 69 6e 74 20 72 65 73 65 74 46 6c 61 67 29 7b   int resetFlag){
bc10: 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 20 3d  .  Vdbe *pVdbe =
bc20: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
bc30: 20 75 33 32 20 76 3b 0a 23 69 66 64 65 66 20 53   u32 v;.#ifdef S
bc40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
bc50: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 70 53  _ARMOR.  if( !pS
bc60: 74 6d 74 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  tmt ){.    (void
bc70: 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42  )SQLITE_MISUSE_B
bc80: 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  KPT;.    return 
bc90: 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  0;.  }.#endif.  
bca0: 76 20 3d 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e  v = pVdbe->aCoun
bcb0: 74 65 72 5b 6f 70 5d 3b 0a 20 20 69 66 28 20 72  ter[op];.  if( r
bcc0: 65 73 65 74 46 6c 61 67 20 29 20 70 56 64 62 65  esetFlag ) pVdbe
bcd0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 5d 20 3d  ->aCounter[op] =
bce0: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 28 69 6e   0;.  return (in
bcf0: 74 29 76 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  t)v;.}..#ifdef S
bd00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
bd10: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 2f 2a 0a  T_SCANSTATUS./*.
bd20: 2a 2a 20 52 65 74 75 72 6e 20 73 74 61 74 75 73  ** Return status
bd30: 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67   data for a sing
bd40: 6c 65 20 6c 6f 6f 70 20 77 69 74 68 69 6e 20 71  le loop within q
bd50: 75 65 72 79 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69  uery pStmt..*/.i
bd60: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  nt sqlite3_stmt_
bd70: 73 63 61 6e 73 74 61 74 75 73 28 0a 20 20 73 71  scanstatus(.  sq
bd80: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
bd90: 74 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t,            /*
bda0: 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   Prepared statem
bdb0: 65 6e 74 20 62 65 69 6e 67 20 71 75 65 72 69 65  ent being querie
bdc0: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 2c 20  d */.  int idx, 
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bde0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
bdf0: 6f 66 20 6c 6f 6f 70 20 74 6f 20 72 65 70 6f 72  of loop to repor
be00: 74 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 53  t on */.  int iS
be10: 63 61 6e 53 74 61 74 75 73 4f 70 2c 20 20 20 20  canStatusOp,    
be20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
be30: 63 68 20 6d 65 74 72 69 63 20 74 6f 20 72 65 74  ch metric to ret
be40: 75 72 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  urn */.  void *p
be50: 4f 75 74 20 20 20 20 20 20 20 20 20 20 20 20 20  Out             
be60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a           /* OUT:
be70: 20 57 72 69 74 65 20 74 68 65 20 61 6e 73 77 65   Write the answe
be80: 72 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 56  r here */.){.  V
be90: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29  dbe *p = (Vdbe*)
bea0: 70 53 74 6d 74 3b 0a 20 20 53 63 61 6e 53 74 61  pStmt;.  ScanSta
beb0: 74 75 73 20 2a 70 53 63 61 6e 3b 0a 20 20 69 66  tus *pScan;.  if
bec0: 28 20 69 64 78 3c 30 20 7c 7c 20 69 64 78 3e 3d  ( idx<0 || idx>=
bed0: 70 2d 3e 6e 53 63 61 6e 20 29 20 72 65 74 75 72  p->nScan ) retur
bee0: 6e 20 31 3b 0a 20 20 70 53 63 61 6e 20 3d 20 26  n 1;.  pScan = &
bef0: 70 2d 3e 61 53 63 61 6e 5b 69 64 78 5d 3b 0a 20  p->aScan[idx];. 
bf00: 20 73 77 69 74 63 68 28 20 69 53 63 61 6e 53 74   switch( iScanSt
bf10: 61 74 75 73 4f 70 20 29 7b 0a 20 20 20 20 63 61  atusOp ){.    ca
bf20: 73 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  se SQLITE_SCANST
bf30: 41 54 5f 4e 4c 4f 4f 50 3a 20 7b 0a 20 20 20 20  AT_NLOOP: {.    
bf40: 20 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36    *(sqlite3_int6
bf50: 34 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45  4*)pOut = p->anE
bf60: 78 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 4c  xec[pScan->addrL
bf70: 6f 6f 70 5d 3b 0a 20 20 20 20 20 20 62 72 65 61  oop];.      brea
bf80: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
bf90: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
bfa0: 54 5f 4e 56 49 53 49 54 3a 20 7b 0a 20 20 20 20  T_NVISIT: {.    
bfb0: 20 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36    *(sqlite3_int6
bfc0: 34 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45  4*)pOut = p->anE
bfd0: 78 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 56  xec[pScan->addrV
bfe0: 69 73 69 74 5d 3b 0a 20 20 20 20 20 20 62 72 65  isit];.      bre
bff0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
c000: 73 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54  se SQLITE_SCANST
c010: 41 54 5f 45 53 54 3a 20 7b 0a 20 20 20 20 20 20  AT_EST: {.      
c020: 64 6f 75 62 6c 65 20 72 20 3d 20 31 2e 30 3b 0a  double r = 1.0;.
c030: 20 20 20 20 20 20 4c 6f 67 45 73 74 20 78 20 3d        LogEst x =
c040: 20 70 53 63 61 6e 2d 3e 6e 45 73 74 3b 0a 20 20   pScan->nEst;.  
c050: 20 20 20 20 77 68 69 6c 65 28 20 78 3c 31 30 30      while( x<100
c060: 20 29 7b 0a 20 20 20 20 20 20 20 20 78 20 2b 3d   ){.        x +=
c070: 20 31 30 3b 0a 20 20 20 20 20 20 20 20 72 20 2a   10;.        r *
c080: 3d 20 30 2e 35 3b 0a 20 20 20 20 20 20 7d 0a 20  = 0.5;.      }. 
c090: 20 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 70       *(double*)p
c0a0: 4f 75 74 20 3d 20 72 2a 73 71 6c 69 74 65 33 4c  Out = r*sqlite3L
c0b0: 6f 67 45 73 74 54 6f 49 6e 74 28 78 29 3b 0a 20  ogEstToInt(x);. 
c0c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c0d0: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
c0e0: 45 5f 53 43 41 4e 53 54 41 54 5f 4e 41 4d 45 3a  E_SCANSTAT_NAME:
c0f0: 20 7b 0a 20 20 20 20 20 20 2a 28 63 6f 6e 73 74   {.      *(const
c100: 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20 70   char**)pOut = p
c110: 53 63 61 6e 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 20  Scan->zName;.   
c120: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
c130: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
c140: 53 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e  SCANSTAT_EXPLAIN
c150: 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53  : {.      if( pS
c160: 63 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e  can->addrExplain
c170: 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 28 63 6f   ){.        *(co
c180: 6e 73 74 20 63 68 61 72 2a 2a 29 70 4f 75 74 20  nst char**)pOut 
c190: 3d 20 70 2d 3e 61 4f 70 5b 20 70 53 63 61 6e 2d  = p->aOp[ pScan-
c1a0: 3e 61 64 64 72 45 78 70 6c 61 69 6e 20 5d 2e 70  >addrExplain ].p
c1b0: 34 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  4.z;.      }else
c1c0: 7b 0a 20 20 20 20 20 20 20 20 2a 28 63 6f 6e 73  {.        *(cons
c1d0: 74 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20  t char**)pOut = 
c1e0: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
c1f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
c200: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43    case SQLITE_SC
c210: 41 4e 53 54 41 54 5f 53 45 4c 45 43 54 49 44 3a  ANSTAT_SELECTID:
c220: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53 63   {.      if( pSc
c230: 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e 20  an->addrExplain 
c240: 29 7b 0a 20 20 20 20 20 20 20 20 2a 28 69 6e 74  ){.        *(int
c250: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 4f 70 5b  *)pOut = p->aOp[
c260: 20 70 53 63 61 6e 2d 3e 61 64 64 72 45 78 70 6c   pScan->addrExpl
c270: 61 69 6e 20 5d 2e 70 31 3b 0a 20 20 20 20 20 20  ain ].p1;.      
c280: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a  }else{.        *
c290: 28 69 6e 74 2a 29 70 4f 75 74 20 3d 20 2d 31 3b  (int*)pOut = -1;
c2a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
c2b0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
c2c0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
c2d0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d   return 1;.    }
c2e0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
c2f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 5a 65 72 6f 20 61  .}../*.** Zero a
c300: 6c 6c 20 63 6f 75 6e 74 65 72 73 20 61 73 73 6f  ll counters asso
c310: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
c320: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61  sqlite3_stmt_sca
c330: 6e 73 74 61 74 75 73 28 29 20 64 61 74 61 2e 0a  nstatus() data..
c340: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
c350: 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 5f  stmt_scanstatus_
c360: 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74  reset(sqlite3_st
c370: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64  mt *pStmt){.  Vd
c380: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
c390: 53 74 6d 74 3b 0a 20 20 6d 65 6d 73 65 74 28 70  Stmt;.  memset(p
c3a0: 2d 3e 61 6e 45 78 65 63 2c 20 30 2c 20 70 2d 3e  ->anExec, 0, p->
c3b0: 6e 4f 70 20 2a 20 73 69 7a 65 6f 66 28 69 36 34  nOp * sizeof(i64
c3c0: 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ));.}.#endif /* 
c3d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
c3e0: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 20 2a 2f  MT_SCANSTATUS */
c3f0: 0a                                               .