/ Hex Artifact Content
Login

Artifact 76b8fcedce6d6299599580d98ce71f6d806e297c6e584d27d0356de44df3b307:


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 73 71 6c 69 74 65 33 5f 69 6e  ow;.  sqlite3_in
0730: 74 36 34 20 69 45 6c 61 70 73 65 3b 0a 20 20 61  t64 iElapse;.  a
0740: 73 73 65 72 74 28 20 70 2d 3e 73 74 61 72 74 54  ssert( p->startT
0750: 69 6d 65 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ime>0 );.  asser
0760: 74 28 20 28 64 62 2d 3e 6d 54 72 61 63 65 20 26  t( (db->mTrace &
0770: 20 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 50   (SQLITE_TRACE_P
0780: 52 4f 46 49 4c 45 7c 53 51 4c 49 54 45 5f 54 52  ROFILE|SQLITE_TR
0790: 41 43 45 5f 58 50 52 4f 46 49 4c 45 29 29 21 3d  ACE_XPROFILE))!=
07a0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
07b0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
07c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
07d0: 7a 53 71 6c 21 3d 30 20 29 3b 0a 20 20 73 71 6c  zSql!=0 );.  sql
07e0: 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d  ite3OsCurrentTim
07f0: 65 49 6e 74 36 34 28 64 62 2d 3e 70 56 66 73 2c  eInt64(db->pVfs,
0800: 20 26 69 4e 6f 77 29 3b 0a 20 20 69 45 6c 61 70   &iNow);.  iElap
0810: 73 65 20 3d 20 28 69 4e 6f 77 20 2d 20 70 2d 3e  se = (iNow - p->
0820: 73 74 61 72 74 54 69 6d 65 29 2a 31 30 30 30 30  startTime)*10000
0830: 30 30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  00;.#ifndef SQLI
0840: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
0850: 45 44 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  ED.  if( db->xPr
0860: 6f 66 69 6c 65 20 29 7b 0a 20 20 20 20 64 62 2d  ofile ){.    db-
0870: 3e 78 50 72 6f 66 69 6c 65 28 64 62 2d 3e 70 50  >xProfile(db->pP
0880: 72 6f 66 69 6c 65 41 72 67 2c 20 70 2d 3e 7a 53  rofileArg, p->zS
0890: 71 6c 2c 20 69 45 6c 61 70 73 65 29 3b 0a 20 20  ql, iElapse);.  
08a0: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 64  }.#endif.  if( d
08b0: 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49  b->mTrace & SQLI
08c0: 54 45 5f 54 52 41 43 45 5f 50 52 4f 46 49 4c 45  TE_TRACE_PROFILE
08d0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
08e0: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
08f0: 50 52 4f 46 49 4c 45 2c 20 64 62 2d 3e 70 54 72  PROFILE, db->pTr
0900: 61 63 65 41 72 67 2c 20 70 2c 20 28 76 6f 69 64  aceArg, p, (void
0910: 2a 29 26 69 45 6c 61 70 73 65 29 3b 0a 20 20 7d  *)&iElapse);.  }
0920: 0a 20 20 70 2d 3e 73 74 61 72 74 54 69 6d 65 20  .  p->startTime 
0930: 3d 20 30 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 54 68 65  = 0;.}./*.** The
0940: 20 63 68 65 63 6b 50 72 6f 66 69 6c 65 43 61 6c   checkProfileCal
0950: 6c 62 61 63 6b 28 44 42 2c 50 29 20 6d 61 63 72  lback(DB,P) macr
0960: 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  o checks to see 
0970: 69 66 20 61 20 70 72 6f 66 69 6c 65 20 63 61 6c  if a profile cal
0980: 6c 62 61 63 6b 0a 2a 2a 20 69 73 20 6e 65 65 64  lback.** is need
0990: 65 64 2c 20 61 6e 64 20 69 74 20 69 6e 76 6f 6b  ed, and it invok
09a0: 65 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  es the callback 
09b0: 69 66 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e  if it is needed.
09c0: 0a 2a 2f 0a 23 20 64 65 66 69 6e 65 20 63 68 65  .*/.# define che
09d0: 63 6b 50 72 6f 66 69 6c 65 43 61 6c 6c 62 61 63  ckProfileCallbac
09e0: 6b 28 44 42 2c 50 29 20 5c 0a 20 20 20 69 66 28  k(DB,P) \.   if(
09f0: 20 28 28 50 29 2d 3e 73 74 61 72 74 54 69 6d 65   ((P)->startTime
0a00: 29 3e 30 20 29 7b 20 69 6e 76 6f 6b 65 50 72 6f  )>0 ){ invokePro
0a10: 66 69 6c 65 43 61 6c 6c 62 61 63 6b 28 44 42 2c  fileCallback(DB,
0a20: 50 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  P); }.#else.# de
0a30: 66 69 6e 65 20 63 68 65 63 6b 50 72 6f 66 69 6c  fine checkProfil
0a40: 65 43 61 6c 6c 62 61 63 6b 28 44 42 2c 50 29 20  eCallback(DB,P) 
0a50: 20 2f 2a 6e 6f 2d 6f 70 2a 2f 0a 23 65 6e 64 69   /*no-op*/.#endi
0a60: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
0a70: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 64  lowing routine d
0a80: 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75 61  estroys a virtua
0a90: 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20 69  l machine that i
0aa0: 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
0ab0: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  the sqlite3_comp
0ac0: 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 20 54  ile() routine. T
0ad0: 68 65 20 69 6e 74 65 67 65 72 20 72 65 74 75 72  he integer retur
0ae0: 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54 45  ned is an SQLITE
0af0: 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66 61 69  _.** success/fai
0b00: 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74 20 64  lure code that d
0b10: 65 73 63 72 69 62 65 73 20 74 68 65 20 72 65 73  escribes the res
0b20: 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69 6e 67  ult of executing
0b30: 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
0b40: 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 54  machine..**.** T
0b50: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
0b60: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
0b70: 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72  and string retur
0b80: 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ned by.** sqlite
0b90: 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c  3_errcode(), sql
0ba0: 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e  ite3_errmsg() an
0bb0: 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  d sqlite3_errmsg
0bc0: 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  16()..*/.int sql
0bd0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 71  ite3_finalize(sq
0be0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
0bf0: 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  t){.  int rc;.  
0c00: 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a  if( pStmt==0 ){.
0c10: 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
0c20: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 35 37 32 32  ATION-OF: R-5722
0c30: 38 2d 31 32 39 30 34 20 49 6e 76 6f 6b 69 6e 67  8-12904 Invoking
0c40: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0c50: 65 28 29 20 6f 6e 20 61 20 4e 55 4c 4c 0a 20 20  e() on a NULL.  
0c60: 20 20 2a 2a 20 70 6f 69 6e 74 65 72 20 69 73 20    ** pointer is 
0c70: 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70  a harmless no-op
0c80: 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53 51  . */.    rc = SQ
0c90: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
0ca0: 7b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20  {.    Vdbe *v = 
0cb0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
0cc0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
0cd0: 76 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28 20 76  v->db;.    if( v
0ce0: 64 62 65 53 61 66 65 74 79 28 76 29 20 29 20 72  dbeSafety(v) ) r
0cf0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
0d00: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 73 71  USE_BKPT;.    sq
0d10: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
0d20: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
0d30: 20 20 63 68 65 63 6b 50 72 6f 66 69 6c 65 43 61    checkProfileCa
0d40: 6c 6c 62 61 63 6b 28 64 62 2c 20 76 29 3b 0a 20  llback(db, v);. 
0d50: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
0d60: 64 62 65 46 69 6e 61 6c 69 7a 65 28 76 29 3b 0a  dbeFinalize(v);.
0d70: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
0d80: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
0d90: 0a 20 20 20 20 73 71 6c 69 74 65 33 4c 65 61 76  .    sqlite3Leav
0da0: 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
0db0: 6d 62 69 65 28 64 62 29 3b 0a 20 20 7d 0a 20 20  mbie(db);.  }.  
0dc0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
0dd0: 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74 68  .** Terminate th
0de0: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74  e current execut
0df0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73 74  ion of an SQL st
0e00: 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73 65  atement and rese
0e10: 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20  t it.** back to 
0e20: 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74 61  its starting sta
0e30: 74 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  te so that it ca
0e40: 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41 20 73  n be reused. A s
0e50: 75 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f 6d  uccess code from
0e60: 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65 78  .** the prior ex
0e70: 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75 72  ecution is retur
0e80: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ned..**.** This 
0e90: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
0ea0: 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20   error code and 
0eb0: 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
0ec0: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72  by.** sqlite3_er
0ed0: 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33  rcode(), sqlite3
0ee0: 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71  _errmsg() and sq
0ef0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29  lite3_errmsg16()
0f00: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
0f10: 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73  _reset(sqlite3_s
0f20: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
0f30: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74  nt rc;.  if( pSt
0f40: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  mt==0 ){.    rc 
0f50: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
0f60: 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 20 2a  else{.    Vdbe *
0f70: 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  v = (Vdbe*)pStmt
0f80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64  ;.    sqlite3 *d
0f90: 62 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 20 20 73  b = v->db;.    s
0fa0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
0fb0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
0fc0: 20 20 20 63 68 65 63 6b 50 72 6f 66 69 6c 65 43     checkProfileC
0fd0: 61 6c 6c 62 61 63 6b 28 64 62 2c 20 76 29 3b 0a  allback(db, v);.
0fe0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
0ff0: 56 64 62 65 52 65 73 65 74 28 76 29 3b 0a 20 20  VdbeReset(v);.  
1000: 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 77    sqlite3VdbeRew
1010: 69 6e 64 28 76 29 3b 0a 20 20 20 20 61 73 73 65  ind(v);.    asse
1020: 72 74 28 20 28 72 63 20 26 20 28 64 62 2d 3e 65  rt( (rc & (db->e
1030: 72 72 4d 61 73 6b 29 29 3d 3d 72 63 20 29 3b 0a  rrMask))==rc );.
1040: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1050: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
1060: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
1070: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
1080: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
1090: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  n rc;.}../*.** S
10a0: 65 74 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d  et all the param
10b0: 65 74 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d  eters in the com
10c0: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
10d0: 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ent to NULL..*/.
10e0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61  int sqlite3_clea
10f0: 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  r_bindings(sqlit
1100: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
1110: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
1120: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
1130: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
1140: 65 2a 29 70 53 74 6d 74 3b 0a 23 69 66 20 53 51  e*)pStmt;.#if SQ
1150: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a  LITE_THREADSAFE.
1160: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1170: 2a 6d 75 74 65 78 20 3d 20 28 28 56 64 62 65 2a  *mutex = ((Vdbe*
1180: 29 70 53 74 6d 74 29 2d 3e 64 62 2d 3e 6d 75 74  )pStmt)->db->mut
1190: 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c  ex;.#endif.  sql
11a0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
11b0: 28 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72 28 69  (mutex);.  for(i
11c0: 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b 20 69  =0; i<p->nVar; i
11d0: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
11e0: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
11f0: 70 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 20  p->aVar[i]);.   
1200: 20 70 2d 3e 61 56 61 72 5b 69 5d 2e 66 6c 61 67   p->aVar[i].flag
1210: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
1220: 7d 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  }.  assert( (p->
1230: 70 72 65 70 46 6c 61 67 73 20 26 20 53 51 4c 49  prepFlags & SQLI
1240: 54 45 5f 50 52 45 50 41 52 45 5f 53 41 56 45 53  TE_PREPARE_SAVES
1250: 51 4c 29 21 3d 30 20 7c 7c 20 70 2d 3e 65 78 70  QL)!=0 || p->exp
1260: 6d 61 73 6b 3d 3d 30 20 29 3b 0a 20 20 69 66 28  mask==0 );.  if(
1270: 20 70 2d 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20   p->expmask ){. 
1280: 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1290: 31 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  1;.  }.  sqlite3
12a0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 6d 75 74  _mutex_leave(mut
12b0: 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  ex);.  return rc
12c0: 3b 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}.../*********
12d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12e0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  *** sqlite3_valu
12f0: 65 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e_  ************
1300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1310: 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ***.** The follo
1320: 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 65 78  wing routines ex
1330: 74 72 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  tract informatio
1340: 6e 20 66 72 6f 6d 20 61 20 4d 65 6d 20 6f 72 20  n from a Mem or 
1350: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 0a 2a 2a  sqlite3_value.**
1360: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 63   structure..*/.c
1370: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
1380: 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 73 71  e3_value_blob(sq
1390: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
13a0: 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28  l){.  Mem *p = (
13b0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28  Mem*)pVal;.  if(
13c0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d   p->flags & (MEM
13d0: 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
13e0: 7b 0a 20 20 20 20 69 66 28 20 45 78 70 61 6e 64  {.    if( Expand
13f0: 42 6c 6f 62 28 70 29 21 3d 53 51 4c 49 54 45 5f  Blob(p)!=SQLITE_
1400: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  OK ){.      asse
1410: 72 74 28 20 70 2d 3e 66 6c 61 67 73 3d 3d 4d 45  rt( p->flags==ME
1420: 4d 5f 4e 75 6c 6c 20 26 26 20 70 2d 3e 7a 3d 3d  M_Null && p->z==
1430: 30 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  0 );.      retur
1440: 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  n 0;.    }.    p
1450: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 42  ->flags |= MEM_B
1460: 6c 6f 62 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  lob;.    return 
1470: 70 2d 3e 6e 20 3f 20 70 2d 3e 7a 20 3a 20 30 3b  p->n ? p->z : 0;
1480: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
1490: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
14a0: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 3b 0a 20  ue_text(pVal);. 
14b0: 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33   }.}.int sqlite3
14c0: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 73 71 6c  _value_bytes(sql
14d0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
14e0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
14f0: 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 70 56  te3ValueBytes(pV
1500: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  al, SQLITE_UTF8)
1510: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
1520: 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28 73 71  value_bytes16(sq
1530: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
1540: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
1550: 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 70  ite3ValueBytes(p
1560: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Val, SQLITE_UTF1
1570: 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 64 6f 75 62  6NATIVE);.}.doub
1580: 6c 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  le sqlite3_value
1590: 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33 5f  _double(sqlite3_
15a0: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
15b0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64  return sqlite3Vd
15c0: 62 65 52 65 61 6c 56 61 6c 75 65 28 28 4d 65 6d  beRealValue((Mem
15d0: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73  *)pVal);.}.int s
15e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
15f0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
1600: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
1610: 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65  (int)sqlite3Vdbe
1620: 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70  IntValue((Mem*)p
1630: 56 61 6c 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69  Val);.}.sqlite_i
1640: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 76 61 6c  nt64 sqlite3_val
1650: 75 65 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33  ue_int64(sqlite3
1660: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
1670: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
1680: 64 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d  dbeIntValue((Mem
1690: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 75 6e 73 69 67  *)pVal);.}.unsig
16a0: 6e 65 64 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ned int sqlite3_
16b0: 76 61 6c 75 65 5f 73 75 62 74 79 70 65 28 73 71  value_subtype(sq
16c0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
16d0: 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20  l){.  Mem *pMem 
16e0: 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20  = (Mem*)pVal;.  
16f0: 72 65 74 75 72 6e 20 28 28 70 4d 65 6d 2d 3e 66  return ((pMem->f
1700: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79  lags & MEM_Subty
1710: 70 65 29 20 3f 20 70 4d 65 6d 2d 3e 65 53 75 62  pe) ? pMem->eSub
1720: 74 79 70 65 20 3a 20 30 29 3b 0a 7d 0a 76 6f 69  type : 0);.}.voi
1730: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
1740: 5f 70 6f 69 6e 74 65 72 28 73 71 6c 69 74 65 33  _pointer(sqlite3
1750: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 63 6f  _value *pVal, co
1760: 6e 73 74 20 63 68 61 72 20 2a 7a 50 54 79 70 65  nst char *zPType
1770: 29 7b 0a 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d  ){.  Mem *p = (M
1780: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 69 66 28 20  em*)pVal;.  if( 
1790: 28 70 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 54  (p->flags&(MEM_T
17a0: 79 70 65 4d 61 73 6b 7c 4d 45 4d 5f 54 65 72 6d  ypeMask|MEM_Term
17b0: 7c 4d 45 4d 5f 53 75 62 74 79 70 65 29 29 20 3d  |MEM_Subtype)) =
17c0: 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  =.              
17d0: 20 20 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d     (MEM_Null|MEM
17e0: 5f 54 65 72 6d 7c 4d 45 4d 5f 53 75 62 74 79 70  _Term|MEM_Subtyp
17f0: 65 29 0a 20 20 20 26 26 20 7a 50 54 79 70 65 21  e).   && zPType!
1800: 3d 30 0a 20 20 20 26 26 20 70 2d 3e 65 53 75 62  =0.   && p->eSub
1810: 74 79 70 65 3d 3d 27 70 27 0a 20 20 20 26 26 20  type=='p'.   && 
1820: 73 74 72 63 6d 70 28 70 2d 3e 75 2e 7a 50 54 79  strcmp(p->u.zPTy
1830: 70 65 2c 20 7a 50 54 79 70 65 29 3d 3d 30 0a 20  pe, zPType)==0. 
1840: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
1850: 76 6f 69 64 2a 29 70 2d 3e 7a 3b 0a 20 20 7d 65  void*)p->z;.  }e
1860: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  lse{.    return 
1870: 30 3b 0a 20 20 7d 0a 7d 0a 63 6f 6e 73 74 20 75  0;.  }.}.const u
1880: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71  nsigned char *sq
1890: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
18a0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
18b0: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
18c0: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
18d0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 56 61  char *)sqlite3Va
18e0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
18f0: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69  LITE_UTF8);.}.#i
1900: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1910: 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f  T_UTF16.const vo
1920: 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  id *sqlite3_valu
1930: 65 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33  e_text16(sqlite3
1940: 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20  _value* pVal){. 
1950: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
1960: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
1970: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
1980: 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64  E);.}.const void
1990: 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f   *sqlite3_value_
19a0: 74 65 78 74 31 36 62 65 28 73 71 6c 69 74 65 33  text16be(sqlite3
19b0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
19c0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
19d0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
19e0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 29 3b 0a  QLITE_UTF16BE);.
19f0: 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  }.const void *sq
1a00: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1a10: 31 36 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  16le(sqlite3_val
1a20: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
1a30: 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65  urn sqlite3Value
1a40: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
1a50: 45 5f 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23 65  E_UTF16LE);.}.#e
1a60: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
1a70: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 2f 2a 20  MIT_UTF16 */./* 
1a80: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
1a90: 32 37 39 33 2d 34 33 32 38 33 20 45 76 65 72 79  2793-43283 Every
1aa0: 20 76 61 6c 75 65 20 69 6e 20 53 51 4c 69 74 65   value in SQLite
1ab0: 20 68 61 73 20 6f 6e 65 20 6f 66 20 66 69 76 65   has one of five
1ac0: 0a 2a 2a 20 66 75 6e 64 61 6d 65 6e 74 61 6c 20  .** fundamental 
1ad0: 64 61 74 61 74 79 70 65 73 3a 20 36 34 2d 62 69  datatypes: 64-bi
1ae0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
1af0: 20 36 34 2d 62 69 74 20 49 45 45 45 20 66 6c 6f   64-bit IEEE flo
1b00: 61 74 69 6e 67 0a 2a 2a 20 70 6f 69 6e 74 20 6e  ating.** point n
1b10: 75 6d 62 65 72 20 73 74 72 69 6e 67 20 42 4c 4f  umber string BLO
1b20: 42 20 4e 55 4c 4c 0a 2a 2f 0a 69 6e 74 20 73 71  B NULL.*/.int sq
1b30: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
1b40: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20  (sqlite3_value* 
1b50: 70 56 61 6c 29 7b 0a 20 20 73 74 61 74 69 63 20  pVal){.  static 
1b60: 63 6f 6e 73 74 20 75 38 20 61 54 79 70 65 5b 5d  const u8 aType[]
1b70: 20 3d 20 7b 0a 20 20 20 20 20 53 51 4c 49 54 45   = {.     SQLITE
1b80: 5f 42 4c 4f 42 2c 20 20 20 20 20 2f 2a 20 30 78  _BLOB,     /* 0x
1b90: 30 30 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  00 */.     SQLIT
1ba0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
1bb0: 78 30 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x01 */.     SQLI
1bc0: 54 45 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20  TE_TEXT,     /* 
1bd0: 30 78 30 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x02 */.     SQL
1be0: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1bf0: 20 30 78 30 33 20 2a 2f 0a 20 20 20 20 20 53 51   0x03 */.     SQ
1c00: 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f  LITE_INTEGER,  /
1c10: 2a 20 30 78 30 34 20 2a 2f 0a 20 20 20 20 20 53  * 0x04 */.     S
1c20: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
1c30: 2f 2a 20 30 78 30 35 20 2a 2f 0a 20 20 20 20 20  /* 0x05 */.     
1c40: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20  SQLITE_INTEGER, 
1c50: 20 2f 2a 20 30 78 30 36 20 2a 2f 0a 20 20 20 20   /* 0x06 */.    
1c60: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
1c70: 20 20 2f 2a 20 30 78 30 37 20 2a 2f 0a 20 20 20    /* 0x07 */.   
1c80: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
1c90: 20 20 20 2f 2a 20 30 78 30 38 20 2a 2f 0a 20 20     /* 0x08 */.  
1ca0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
1cb0: 20 20 20 20 2f 2a 20 30 78 30 39 20 2a 2f 0a 20      /* 0x09 */. 
1cc0: 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54      SQLITE_FLOAT
1cd0: 2c 20 20 20 20 2f 2a 20 30 78 30 61 20 2a 2f 0a  ,    /* 0x0a */.
1ce0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1cf0: 2c 20 20 20 20 20 2f 2a 20 30 78 30 62 20 2a 2f  ,     /* 0x0b */
1d00: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  .     SQLITE_INT
1d10: 45 47 45 52 2c 20 20 2f 2a 20 30 78 30 63 20 2a  EGER,  /* 0x0c *
1d20: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1d30: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30 64 20  LL,     /* 0x0d 
1d40: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49  */.     SQLITE_I
1d50: 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30 78 30 65  NTEGER,  /* 0x0e
1d60: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
1d70: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30  NULL,     /* 0x0
1d80: 66 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  f */.     SQLITE
1d90: 5f 42 4c 4f 42 2c 20 20 20 20 20 2f 2a 20 30 78  _BLOB,     /* 0x
1da0: 31 30 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  10 */.     SQLIT
1db0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
1dc0: 78 31 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x11 */.     SQLI
1dd0: 54 45 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20  TE_TEXT,     /* 
1de0: 30 78 31 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x12 */.     SQL
1df0: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1e00: 20 30 78 31 33 20 2a 2f 0a 20 20 20 20 20 53 51   0x13 */.     SQ
1e10: 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f  LITE_INTEGER,  /
1e20: 2a 20 30 78 31 34 20 2a 2f 0a 20 20 20 20 20 53  * 0x14 */.     S
1e30: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
1e40: 2f 2a 20 30 78 31 35 20 2a 2f 0a 20 20 20 20 20  /* 0x15 */.     
1e50: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 2c 20  SQLITE_INTEGER, 
1e60: 20 2f 2a 20 30 78 31 36 20 2a 2f 0a 20 20 20 20   /* 0x16 */.    
1e70: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
1e80: 20 20 2f 2a 20 30 78 31 37 20 2a 2f 0a 20 20 20    /* 0x17 */.   
1e90: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
1ea0: 20 20 20 2f 2a 20 30 78 31 38 20 2a 2f 0a 20 20     /* 0x18 */.  
1eb0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
1ec0: 20 20 20 20 2f 2a 20 30 78 31 39 20 2a 2f 0a 20      /* 0x19 */. 
1ed0: 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54      SQLITE_FLOAT
1ee0: 2c 20 20 20 20 2f 2a 20 30 78 31 61 20 2a 2f 0a  ,    /* 0x1a */.
1ef0: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1f00: 2c 20 20 20 20 20 2f 2a 20 30 78 31 62 20 2a 2f  ,     /* 0x1b */
1f10: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  .     SQLITE_INT
1f20: 45 47 45 52 2c 20 20 2f 2a 20 30 78 31 63 20 2a  EGER,  /* 0x1c *
1f30: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1f40: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31 64 20  LL,     /* 0x1d 
1f50: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 49  */.     SQLITE_I
1f60: 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30 78 31 65  NTEGER,  /* 0x1e
1f70: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
1f80: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31  NULL,     /* 0x1
1f90: 66 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  f */.     SQLITE
1fa0: 5f 46 4c 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78  _FLOAT,    /* 0x
1fb0: 32 30 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  20 */.     SQLIT
1fc0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
1fd0: 78 32 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x21 */.     SQLI
1fe0: 54 45 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20  TE_TEXT,     /* 
1ff0: 30 78 32 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x22 */.     SQL
2000: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
2010: 20 30 78 32 33 20 2a 2f 0a 20 20 20 20 20 53 51   0x23 */.     SQ
2020: 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20 20 2f  LITE_FLOAT,    /
2030: 2a 20 30 78 32 34 20 2a 2f 0a 20 20 20 20 20 53  * 0x24 */.     S
2040: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
2050: 2f 2a 20 30 78 32 35 20 2a 2f 0a 20 20 20 20 20  /* 0x25 */.     
2060: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
2070: 20 2f 2a 20 30 78 32 36 20 2a 2f 0a 20 20 20 20   /* 0x26 */.    
2080: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
2090: 20 20 2f 2a 20 30 78 32 37 20 2a 2f 0a 20 20 20    /* 0x27 */.   
20a0: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
20b0: 20 20 20 2f 2a 20 30 78 32 38 20 2a 2f 0a 20 20     /* 0x28 */.  
20c0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
20d0: 20 20 20 20 2f 2a 20 30 78 32 39 20 2a 2f 0a 20      /* 0x29 */. 
20e0: 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54      SQLITE_FLOAT
20f0: 2c 20 20 20 20 2f 2a 20 30 78 32 61 20 2a 2f 0a  ,    /* 0x2a */.
2100: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
2110: 2c 20 20 20 20 20 2f 2a 20 30 78 32 62 20 2a 2f  ,     /* 0x2b */
2120: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f  .     SQLITE_FLO
2130: 41 54 2c 20 20 20 20 2f 2a 20 30 78 32 63 20 2a  AT,    /* 0x2c *
2140: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
2150: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 32 64 20  LL,     /* 0x2d 
2160: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  */.     SQLITE_F
2170: 4c 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 32 65  LOAT,    /* 0x2e
2180: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
2190: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 32  NULL,     /* 0x2
21a0: 66 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  f */.     SQLITE
21b0: 5f 42 4c 4f 42 2c 20 20 20 20 20 2f 2a 20 30 78  _BLOB,     /* 0x
21c0: 33 30 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  30 */.     SQLIT
21d0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
21e0: 78 33 31 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x31 */.     SQLI
21f0: 54 45 5f 54 45 58 54 2c 20 20 20 20 20 2f 2a 20  TE_TEXT,     /* 
2200: 30 78 33 32 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x32 */.     SQL
2210: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
2220: 20 30 78 33 33 20 2a 2f 0a 20 20 20 20 20 53 51   0x33 */.     SQ
2230: 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20 20 2f  LITE_FLOAT,    /
2240: 2a 20 30 78 33 34 20 2a 2f 0a 20 20 20 20 20 53  * 0x34 */.     S
2250: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
2260: 2f 2a 20 30 78 33 35 20 2a 2f 0a 20 20 20 20 20  /* 0x35 */.     
2270: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
2280: 20 2f 2a 20 30 78 33 36 20 2a 2f 0a 20 20 20 20   /* 0x36 */.    
2290: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
22a0: 20 20 2f 2a 20 30 78 33 37 20 2a 2f 0a 20 20 20    /* 0x37 */.   
22b0: 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20    SQLITE_FLOAT, 
22c0: 20 20 20 2f 2a 20 30 78 33 38 20 2a 2f 0a 20 20     /* 0x38 */.  
22d0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
22e0: 20 20 20 20 2f 2a 20 30 78 33 39 20 2a 2f 0a 20      /* 0x39 */. 
22f0: 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54      SQLITE_FLOAT
2300: 2c 20 20 20 20 2f 2a 20 30 78 33 61 20 2a 2f 0a  ,    /* 0x3a */.
2310: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
2320: 2c 20 20 20 20 20 2f 2a 20 30 78 33 62 20 2a 2f  ,     /* 0x3b */
2330: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 4c 4f  .     SQLITE_FLO
2340: 41 54 2c 20 20 20 20 2f 2a 20 30 78 33 63 20 2a  AT,    /* 0x3c *
2350: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
2360: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 33 64 20  LL,     /* 0x3d 
2370: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  */.     SQLITE_F
2380: 4c 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 33 65  LOAT,    /* 0x3e
2390: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
23a0: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 33  NULL,     /* 0x3
23b0: 66 20 2a 2f 0a 20 20 7d 3b 0a 23 69 66 64 65 66  f */.  };.#ifdef
23c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
23d0: 7b 0a 20 20 20 20 69 6e 74 20 65 54 79 70 65 20  {.    int eType 
23e0: 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20  = SQLITE_BLOB;. 
23f0: 20 20 20 69 66 28 20 70 56 61 6c 2d 3e 66 6c 61     if( pVal->fla
2400: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
2410: 0a 20 20 20 20 20 20 65 54 79 70 65 20 3d 20 53  .      eType = S
2420: 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20 20 20  QLITE_NULL;.    
2430: 7d 65 6c 73 65 20 69 66 28 20 70 56 61 6c 2d 3e  }else if( pVal->
2440: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61  flags & (MEM_Rea
2450: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29  l|MEM_IntReal) )
2460: 7b 0a 20 20 20 20 20 20 65 54 79 70 65 20 3d 20  {.      eType = 
2470: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20  SQLITE_FLOAT;.  
2480: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 56 61 6c    }else if( pVal
2490: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
24a0: 74 20 29 7b 0a 20 20 20 20 20 20 65 54 79 70 65  t ){.      eType
24b0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45   = SQLITE_INTEGE
24c0: 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  R;.    }else if(
24d0: 20 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d   pVal->flags & M
24e0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
24f0: 65 54 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54  eType = SQLITE_T
2500: 45 58 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  EXT;.    }.    a
2510: 73 73 65 72 74 28 20 65 54 79 70 65 20 3d 3d 20  ssert( eType == 
2520: 61 54 79 70 65 5b 70 56 61 6c 2d 3e 66 6c 61 67  aType[pVal->flag
2530: 73 26 4d 45 4d 5f 41 66 66 4d 61 73 6b 5d 20 29  s&MEM_AffMask] )
2540: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72  ;.  }.#endif.  r
2550: 65 74 75 72 6e 20 61 54 79 70 65 5b 70 56 61 6c  eturn aType[pVal
2560: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 41 66 66 4d  ->flags&MEM_AffM
2570: 61 73 6b 5d 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75  ask];.}../* Retu
2580: 72 6e 20 74 72 75 65 20 69 66 20 61 20 70 61 72  rn true if a par
2590: 61 6d 65 74 65 72 20 74 6f 20 78 55 70 64 61 74  ameter to xUpdat
25a0: 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20  e represents an 
25b0: 75 6e 63 68 61 6e 67 65 64 20 63 6f 6c 75 6d 6e  unchanged column
25c0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
25d0: 76 61 6c 75 65 5f 6e 6f 63 68 61 6e 67 65 28 73  value_nochange(s
25e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
25f0: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 70  al){.  return (p
2600: 56 61 6c 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Val->flags&(MEM_
2610: 4e 75 6c 6c 7c 4d 45 4d 5f 5a 65 72 6f 29 29 3d  Null|MEM_Zero))=
2620: 3d 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 5a  =(MEM_Null|MEM_Z
2630: 65 72 6f 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75  ero);.}../* Retu
2640: 72 6e 20 74 72 75 65 20 69 66 20 61 20 70 61 72  rn true if a par
2650: 61 6d 65 74 65 72 20 76 61 6c 75 65 20 6f 72 69  ameter value ori
2660: 67 69 6e 61 74 65 64 20 66 72 6f 6d 20 61 6e 20  ginated from an 
2670: 73 71 6c 69 74 65 33 5f 62 69 6e 64 28 29 20 2a  sqlite3_bind() *
2680: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
2690: 6c 75 65 5f 66 72 6f 6d 62 69 6e 64 28 73 71 6c  lue_frombind(sql
26a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
26b0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 70 56 61  ){.  return (pVa
26c0: 6c 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 6f  l->flags&MEM_Fro
26d0: 6d 42 69 6e 64 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a  mBind)!=0;.}../*
26e0: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
26f0: 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  an sqlite3_value
2700: 20 6f 62 6a 65 63 74 0a 2a 2f 0a 73 71 6c 69 74   object.*/.sqlit
2710: 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2720: 33 5f 76 61 6c 75 65 5f 64 75 70 28 63 6f 6e 73  3_value_dup(cons
2730: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t sqlite3_value 
2740: 2a 70 4f 72 69 67 29 7b 0a 20 20 73 71 6c 69 74  *pOrig){.  sqlit
2750: 65 33 5f 76 61 6c 75 65 20 2a 70 4e 65 77 3b 0a  e3_value *pNew;.
2760: 20 20 69 66 28 20 70 4f 72 69 67 3d 3d 30 20 29    if( pOrig==0 )
2770: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 70 4e 65   return 0;.  pNe
2780: 77 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  w = sqlite3_mall
2790: 6f 63 28 20 73 69 7a 65 6f 66 28 2a 70 4e 65 77  oc( sizeof(*pNew
27a0: 29 20 29 3b 0a 20 20 69 66 28 20 70 4e 65 77 3d  ) );.  if( pNew=
27b0: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
27c0: 20 6d 65 6d 73 65 74 28 70 4e 65 77 2c 20 30 2c   memset(pNew, 0,
27d0: 20 73 69 7a 65 6f 66 28 2a 70 4e 65 77 29 29 3b   sizeof(*pNew));
27e0: 0a 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2c 20  .  memcpy(pNew, 
27f0: 70 4f 72 69 67 2c 20 4d 45 4d 43 45 4c 4c 53 49  pOrig, MEMCELLSI
2800: 5a 45 29 3b 0a 20 20 70 4e 65 77 2d 3e 66 6c 61  ZE);.  pNew->fla
2810: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
2820: 20 20 70 4e 65 77 2d 3e 64 62 20 3d 20 30 3b 0a    pNew->db = 0;.
2830: 20 20 69 66 28 20 70 4e 65 77 2d 3e 66 6c 61 67    if( pNew->flag
2840: 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  s&(MEM_Str|MEM_B
2850: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 70 4e 65 77  lob) ){.    pNew
2860: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
2870: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
2880: 3b 0a 20 20 20 20 70 4e 65 77 2d 3e 66 6c 61 67  ;.    pNew->flag
2890: 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a  s |= MEM_Ephem;.
28a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
28b0: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
28c0: 62 6c 65 28 70 4e 65 77 29 21 3d 53 51 4c 49 54  ble(pNew)!=SQLIT
28d0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
28e0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
28f0: 4e 65 77 29 3b 0a 20 20 20 20 20 20 70 4e 65 77  New);.      pNew
2900: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
2910: 20 20 72 65 74 75 72 6e 20 70 4e 65 77 3b 0a 7d    return pNew;.}
2920: 0a 0a 2f 2a 20 44 65 73 74 72 6f 79 20 61 6e 20  ../* Destroy an 
2930: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62  sqlite3_value ob
2940: 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20  ject previously 
2950: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a  obtained from.**
2960: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
2970: 75 70 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  up()..*/.void sq
2980: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 66 72 65 65  lite3_value_free
2990: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
29a0: 70 4f 6c 64 29 7b 0a 20 20 73 71 6c 69 74 65 33  pOld){.  sqlite3
29b0: 56 61 6c 75 65 46 72 65 65 28 70 4f 6c 64 29 3b  ValueFree(pOld);
29c0: 0a 7d 0a 20 20 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  .}.  ../********
29d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29e0: 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 72 65 73  **** sqlite3_res
29f0: 75 6c 74 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ult_  **********
2a00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a10: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
2a20: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
2a30: 61 72 65 20 75 73 65 64 20 62 79 20 75 73 65 72  are used by user
2a40: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
2a50: 6e 73 20 74 6f 20 73 70 65 63 69 66 79 0a 2a 2a  ns to specify.**
2a60: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
2a70: 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sult..**.** The 
2a80: 73 65 74 53 74 72 4f 72 45 72 72 6f 72 28 29 20  setStrOrError() 
2a90: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 73 20 73  function calls s
2aa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ab0: 53 74 72 28 29 20 74 6f 20 73 74 6f 72 65 20 74  Str() to store t
2ac0: 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20 61 73 20  he.** result as 
2ad0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
2ae0: 20 62 75 74 20 69 66 20 74 68 65 20 73 74 72 69   but if the stri
2af0: 6e 67 20 6f 72 20 62 6c 6f 62 20 69 73 20 74 6f  ng or blob is to
2b00: 6f 20 6c 61 72 67 65 2c 20 69 74 0a 2a 2a 20 74  o large, it.** t
2b10: 68 65 6e 20 73 65 74 73 20 74 68 65 20 65 72 72  hen sets the err
2b20: 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c 49 54  or code to SQLIT
2b30: 45 5f 54 4f 4f 42 49 47 0a 2a 2a 0a 2a 2a 20 54  E_TOOBIG.**.** T
2b40: 68 65 20 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65  he invokeValueDe
2b50: 73 74 72 75 63 74 6f 72 28 50 2c 58 29 20 72 6f  structor(P,X) ro
2b60: 75 74 69 6e 65 20 69 6e 76 6f 6b 65 73 20 64 65  utine invokes de
2b70: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
2b80: 6e 20 58 28 29 0a 2a 2a 20 6f 6e 20 76 61 6c 75  n X().** on valu
2b90: 65 20 50 20 69 73 20 6e 6f 74 20 67 6f 69 6e 67  e P is not going
2ba0: 20 74 6f 20 62 65 20 75 73 65 64 20 61 6e 64 20   to be used and 
2bb0: 6e 65 65 64 20 74 6f 20 62 65 20 64 65 73 74 72  need to be destr
2bc0: 6f 79 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  oyed..*/.static 
2bd0: 76 6f 69 64 20 73 65 74 52 65 73 75 6c 74 53 74  void setResultSt
2be0: 72 4f 72 45 72 72 6f 72 28 0a 20 20 73 71 6c 69  rOrError(.  sqli
2bf0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
2c00: 78 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  x,  /* Function 
2c10: 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  context */.  con
2c20: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
2c30: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 70       /* String p
2c40: 6f 69 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ointer */.  int 
2c50: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
2c60: 20 20 20 20 2f 2a 20 42 79 74 65 73 20 69 6e 20      /* Bytes in 
2c70: 73 74 72 69 6e 67 2c 20 6f 72 20 6e 65 67 61 74  string, or negat
2c80: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c  ive */.  u8 enc,
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 6f 66 20   /* Encoding of 
2cb0: 7a 2e 20 20 30 20 66 6f 72 20 42 4c 4f 42 73 20  z.  0 for BLOBs 
2cc0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  */.  void (*xDel
2cd0: 29 28 76 6f 69 64 2a 29 20 20 20 20 20 2f 2a 20  )(void*)     /* 
2ce0: 44 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  Destructor funct
2cf0: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ion */.){.  if( 
2d00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2d10: 74 53 74 72 28 70 43 74 78 2d 3e 70 4f 75 74 2c  tStr(pCtx->pOut,
2d20: 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44 65 6c   z, n, enc, xDel
2d30: 29 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  )==SQLITE_TOOBIG
2d40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
2d50: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f  result_error_too
2d60: 62 69 67 28 70 43 74 78 29 3b 0a 20 20 7d 0a 7d  big(pCtx);.  }.}
2d70: 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76 6f  .static int invo
2d80: 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63 74 6f  keValueDestructo
2d90: 72 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  r(.  const void 
2da0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
2db0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 64 65 73 74  /* Value to dest
2dc0: 72 6f 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  roy */.  void (*
2dd0: 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20  xDel)(void*),   
2de0: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 73 74 72      /* The destr
2df0: 75 63 74 6f 72 20 2a 2f 0a 20 20 73 71 6c 69 74  uctor */.  sqlit
2e00: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
2e10: 20 20 20 20 20 20 2f 2a 20 53 65 74 20 61 20 53        /* Set a S
2e20: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65 72 72  QLITE_TOOBIG err
2e30: 6f 72 20 69 66 20 6e 6f 20 4e 55 4c 4c 20 2a 2f  or if no NULL */
2e40: 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 78 44  .){.  assert( xD
2e50: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
2e60: 49 43 20 29 3b 0a 20 20 69 66 28 20 78 44 65 6c  IC );.  if( xDel
2e70: 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 6e 6f  ==0 ){.    /* no
2e80: 6f 70 20 2a 2f 0a 20 20 7d 65 6c 73 65 20 69 66  op */.  }else if
2e90: 28 20 78 44 65 6c 3d 3d 53 51 4c 49 54 45 5f 54  ( xDel==SQLITE_T
2ea0: 52 41 4e 53 49 45 4e 54 20 29 7b 0a 20 20 20 20  RANSIENT ){.    
2eb0: 2f 2a 20 6e 6f 6f 70 20 2a 2f 0a 20 20 7d 65 6c  /* noop */.  }el
2ec0: 73 65 7b 0a 20 20 20 20 78 44 65 6c 28 28 76 6f  se{.    xDel((vo
2ed0: 69 64 2a 29 70 29 3b 0a 20 20 7d 0a 20 20 69 66  id*)p);.  }.  if
2ee0: 28 20 70 43 74 78 20 29 20 73 71 6c 69 74 65 33  ( pCtx ) sqlite3
2ef0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f  _result_error_to
2f00: 6f 62 69 67 28 70 43 74 78 29 3b 0a 20 20 72 65  obig(pCtx);.  re
2f10: 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f 42  turn SQLITE_TOOB
2f20: 49 47 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  IG;.}.void sqlit
2f30: 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0a  e3_result_blob(.
2f40: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2f50: 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73  t *pCtx, .  cons
2f60: 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e  t void *z, .  in
2f70: 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  t n, .  void (*x
2f80: 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a  Del)(void *).){.
2f90: 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2fa0: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
2fb0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2fc0: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
2fd0: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
2fe0: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
2ff0: 43 74 78 2c 20 7a 2c 20 6e 2c 20 30 2c 20 78 44  Ctx, z, n, 0, xD
3000: 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  el);.}.void sqli
3010: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 36  te3_result_blob6
3020: 34 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  4(.  sqlite3_con
3030: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63  text *pCtx, .  c
3040: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20  onst void *z, . 
3050: 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
3060: 6e 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  n,.  void (*xDel
3070: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
3080: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
3090: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
30a0: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pOut->db->mutex)
30b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 78 44   );.  assert( xD
30c0: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
30d0: 49 43 20 29 3b 0a 20 20 69 66 28 20 6e 3e 30 78  IC );.  if( n>0x
30e0: 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20 20 20  7fffffff ){.    
30f0: 28 76 6f 69 64 29 69 6e 76 6f 6b 65 56 61 6c 75  (void)invokeValu
3100: 65 44 65 73 74 72 75 63 74 6f 72 28 7a 2c 20 78  eDestructor(z, x
3110: 44 65 6c 2c 20 70 43 74 78 29 3b 0a 20 20 7d 65  Del, pCtx);.  }e
3120: 6c 73 65 7b 0a 20 20 20 20 73 65 74 52 65 73 75  lse{.    setResu
3130: 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43 74  ltStrOrError(pCt
3140: 78 2c 20 7a 2c 20 28 69 6e 74 29 6e 2c 20 30 2c  x, z, (int)n, 0,
3150: 20 78 44 65 6c 29 3b 0a 20 20 7d 0a 7d 0a 76 6f   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 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33  t_double(sqlite3
3180: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
3190: 64 6f 75 62 6c 65 20 72 56 61 6c 29 7b 0a 20 20  double rVal){.  
31a0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
31b0: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
31c0: 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78  >pOut->db->mutex
31d0: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
31e0: 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 70  beMemSetDouble(p
31f0: 43 74 78 2d 3e 70 4f 75 74 2c 20 72 56 61 6c 29  Ctx->pOut, rVal)
3200: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
3210: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 73 71  _result_error(sq
3220: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
3230: 43 74 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Ctx, const char 
3240: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61 73  *z, int n){.  as
3250: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
3260: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
3270: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
3280: 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72  );.  pCtx->isErr
3290: 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  or = SQLITE_ERRO
32a0: 52 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  R;.  sqlite3Vdbe
32b0: 4d 65 6d 53 65 74 53 74 72 28 70 43 74 78 2d 3e  MemSetStr(pCtx->
32c0: 70 4f 75 74 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  pOut, z, n, SQLI
32d0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
32e0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 69  TRANSIENT);.}.#i
32f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
3300: 54 5f 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c  T_UTF16.void sql
3310: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
3320: 72 31 36 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  r16(sqlite3_cont
3330: 65 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74  ext *pCtx, const
3340: 20 76 6f 69 64 20 2a 7a 2c 20 69 6e 74 20 6e 29   void *z, int n)
3350: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
3360: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
3370: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
3380: 75 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78 2d  utex) );.  pCtx-
3390: 3e 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54  >isError = SQLIT
33a0: 45 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74  E_ERROR;.  sqlit
33b0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
33c0: 70 43 74 78 2d 3e 70 4f 75 74 2c 20 7a 2c 20 6e  pCtx->pOut, z, n
33d0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
33e0: 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 54 52 41  TIVE, SQLITE_TRA
33f0: 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69  NSIENT);.}.#endi
3400: 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  f.void sqlite3_r
3410: 65 73 75 6c 74 5f 69 6e 74 28 73 71 6c 69 74 65  esult_int(sqlite
3420: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
3430: 20 69 6e 74 20 69 56 61 6c 29 7b 0a 20 20 61 73   int iVal){.  as
3440: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
3450: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
3460: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
3470: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
3480: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 43 74 78  MemSetInt64(pCtx
3490: 2d 3e 70 4f 75 74 2c 20 28 69 36 34 29 69 56 61  ->pOut, (i64)iVa
34a0: 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  l);.}.void sqlit
34b0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
34c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
34d0: 2a 70 43 74 78 2c 20 69 36 34 20 69 56 61 6c 29  *pCtx, i64 iVal)
34e0: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
34f0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
3500: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
3510: 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74  utex) );.  sqlit
3520: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
3530: 34 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 69 56  4(pCtx->pOut, iV
3540: 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  al);.}.void sqli
3550: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
3560: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
3570: 2a 70 43 74 78 29 7b 0a 20 20 61 73 73 65 72 74  *pCtx){.  assert
3580: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
3590: 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d  held(pCtx->pOut-
35a0: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
35b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
35c0: 65 74 4e 75 6c 6c 28 70 43 74 78 2d 3e 70 4f 75  etNull(pCtx->pOu
35d0: 74 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  t);.}.void sqlit
35e0: 65 33 5f 72 65 73 75 6c 74 5f 70 6f 69 6e 74 65  e3_result_pointe
35f0: 72 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  r(.  sqlite3_con
3600: 74 65 78 74 20 2a 70 43 74 78 2c 0a 20 20 76 6f  text *pCtx,.  vo
3610: 69 64 20 2a 70 50 74 72 2c 0a 20 20 63 6f 6e 73  id *pPtr,.  cons
3620: 74 20 63 68 61 72 20 2a 7a 50 54 79 70 65 2c 0a  t char *zPType,.
3630: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 75    void (*xDestru
3640: 63 74 6f 72 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  ctor)(void*).){.
3650: 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 70 43    Mem *pOut = pC
3660: 74 78 2d 3e 70 4f 75 74 3b 0a 20 20 61 73 73 65  tx->pOut;.  asse
3670: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3680: 78 5f 68 65 6c 64 28 70 4f 75 74 2d 3e 64 62 2d  x_held(pOut->db-
3690: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
36a0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
36b0: 73 65 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74  se(pOut);.  pOut
36c0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
36d0: 6c 6c 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll;.  sqlite3Vdb
36e0: 65 4d 65 6d 53 65 74 50 6f 69 6e 74 65 72 28 70  eMemSetPointer(p
36f0: 4f 75 74 2c 20 70 50 74 72 2c 20 7a 50 54 79 70  Out, pPtr, zPTyp
3700: 65 2c 20 78 44 65 73 74 72 75 63 74 6f 72 29 3b  e, xDestructor);
3710: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
3720: 72 65 73 75 6c 74 5f 73 75 62 74 79 70 65 28 73  result_subtype(s
3730: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
3740: 70 43 74 78 2c 20 75 6e 73 69 67 6e 65 64 20 69  pCtx, unsigned i
3750: 6e 74 20 65 53 75 62 74 79 70 65 29 7b 0a 20 20  nt eSubtype){.  
3760: 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 70 43 74 78  Mem *pOut = pCtx
3770: 2d 3e 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74  ->pOut;.  assert
3780: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
3790: 68 65 6c 64 28 70 4f 75 74 2d 3e 64 62 2d 3e 6d  held(pOut->db->m
37a0: 75 74 65 78 29 20 29 3b 0a 20 20 70 4f 75 74 2d  utex) );.  pOut-
37b0: 3e 65 53 75 62 74 79 70 65 20 3d 20 65 53 75 62  >eSubtype = eSub
37c0: 74 79 70 65 20 26 20 30 78 66 66 3b 0a 20 20 70  type & 0xff;.  p
37d0: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
37e0: 4d 5f 53 75 62 74 79 70 65 3b 0a 7d 0a 76 6f 69  M_Subtype;.}.voi
37f0: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
3800: 5f 74 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33  _text(.  sqlite3
3810: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
3820: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
3830: 2c 20 0a 20 20 69 6e 74 20 6e 2c 0a 20 20 76 6f  , .  int n,.  vo
3840: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
3850: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
3860: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
3870: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
3880: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
3890: 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72  etResultStrOrErr
38a0: 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53  or(pCtx, z, n, S
38b0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 78 44 65 6c  QLITE_UTF8, xDel
38c0: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
38d0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 36 34 28  3_result_text64(
38e0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
38f0: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e  xt *pCtx, .  con
3900: 73 74 20 63 68 61 72 20 2a 7a 2c 20 0a 20 20 73  st char *z, .  s
3910: 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 6e 2c  qlite3_uint64 n,
3920: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
3930: 76 6f 69 64 20 2a 29 2c 0a 20 20 75 6e 73 69 67  void *),.  unsig
3940: 6e 65 64 20 63 68 61 72 20 65 6e 63 0a 29 7b 0a  ned char enc.){.
3950: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3960: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
3970: 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74  x->pOut->db->mut
3980: 65 78 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ex) );.  assert(
3990: 20 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59   xDel!=SQLITE_DY
39a0: 4e 41 4d 49 43 20 29 3b 0a 20 20 69 66 28 20 65  NAMIC );.  if( e
39b0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
39c0: 20 29 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f   ) enc = SQLITE_
39d0: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 69  UTF16NATIVE;.  i
39e0: 66 28 20 6e 3e 30 78 37 66 66 66 66 66 66 66 20  f( n>0x7fffffff 
39f0: 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 69 6e 76  ){.    (void)inv
3a00: 6f 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63 74  okeValueDestruct
3a10: 6f 72 28 7a 2c 20 78 44 65 6c 2c 20 70 43 74 78  or(z, xDel, pCtx
3a20: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
3a30: 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72  setResultStrOrEr
3a40: 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 28 69 6e  ror(pCtx, z, (in
3a50: 74 29 6e 2c 20 65 6e 63 2c 20 78 44 65 6c 29 3b  t)n, enc, xDel);
3a60: 0a 20 20 7d 0a 7d 0a 23 69 66 6e 64 65 66 20 53  .  }.}.#ifndef S
3a70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
3a80: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
3a90: 73 75 6c 74 5f 74 65 78 74 31 36 28 0a 20 20 73  sult_text16(.  s
3aa0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
3ab0: 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76  pCtx, .  const v
3ac0: 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e  oid *z, .  int n
3ad0: 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  , .  void (*xDel
3ae0: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
3af0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
3b00: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
3b10: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pOut->db->mutex)
3b20: 20 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53   );.  setResultS
3b30: 74 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20  trOrError(pCtx, 
3b40: 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46  z, n, SQLITE_UTF
3b50: 31 36 4e 41 54 49 56 45 2c 20 78 44 65 6c 29 3b  16NATIVE, xDel);
3b60: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
3b70: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28  result_text16be(
3b80: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
3b90: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e  xt *pCtx, .  con
3ba0: 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69  st void *z, .  i
3bb0: 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a  nt n, .  void (*
3bc0: 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b  xDel)(void *).){
3bd0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
3be0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
3bf0: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
3c00: 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73  tex) );.  setRes
3c10: 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43  ultStrOrError(pC
3c20: 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  tx, z, n, SQLITE
3c30: 5f 55 54 46 31 36 42 45 2c 20 78 44 65 6c 29 3b  _UTF16BE, xDel);
3c40: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
3c50: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
3c60: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
3c70: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e  xt *pCtx, .  con
3c80: 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69  st void *z, .  i
3c90: 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a  nt n, .  void (*
3ca0: 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b  xDel)(void *).){
3cb0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
3cc0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
3cd0: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
3ce0: 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73  tex) );.  setRes
3cf0: 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43  ultStrOrError(pC
3d00: 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  tx, z, n, SQLITE
3d10: 5f 55 54 46 31 36 4c 45 2c 20 78 44 65 6c 29 3b  _UTF16LE, xDel);
3d20: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
3d30: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
3d40: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
3d50: 65 73 75 6c 74 5f 76 61 6c 75 65 28 73 71 6c 69  esult_value(sqli
3d60: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
3d70: 78 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  x, sqlite3_value
3d80: 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 61 73 73   *pValue){.  ass
3d90: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
3da0: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
3db0: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
3dc0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
3dd0: 65 6d 43 6f 70 79 28 70 43 74 78 2d 3e 70 4f 75  emCopy(pCtx->pOu
3de0: 74 2c 20 70 56 61 6c 75 65 29 3b 0a 7d 0a 76 6f  t, pValue);.}.vo
3df0: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
3e00: 74 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69 74  t_zeroblob(sqlit
3e10: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
3e20: 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65  , int n){.  asse
3e30: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3e40: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75  x_held(pCtx->pOu
3e50: 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  t->db->mutex) );
3e60: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
3e70: 6d 53 65 74 5a 65 72 6f 42 6c 6f 62 28 70 43 74  mSetZeroBlob(pCt
3e80: 78 2d 3e 70 4f 75 74 2c 20 6e 29 3b 0a 7d 0a 69  x->pOut, n);.}.i
3e90: 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  nt sqlite3_resul
3ea0: 74 5f 7a 65 72 6f 62 6c 6f 62 36 34 28 73 71 6c  t_zeroblob64(sql
3eb0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
3ec0: 74 78 2c 20 75 36 34 20 6e 29 7b 0a 20 20 4d 65  tx, u64 n){.  Me
3ed0: 6d 20 2a 70 4f 75 74 20 3d 20 70 43 74 78 2d 3e  m *pOut = pCtx->
3ee0: 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20  pOut;.  assert( 
3ef0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
3f00: 6c 64 28 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74  ld(pOut->db->mut
3f10: 65 78 29 20 29 3b 0a 20 20 69 66 28 20 6e 3e 28  ex) );.  if( n>(
3f20: 75 36 34 29 70 4f 75 74 2d 3e 64 62 2d 3e 61 4c  u64)pOut->db->aL
3f30: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
3f40: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
3f50: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 54   return SQLITE_T
3f60: 4f 4f 42 49 47 3b 0a 20 20 7d 0a 20 20 73 71 6c  OOBIG;.  }.  sql
3f70: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65  ite3VdbeMemSetZe
3f80: 72 6f 42 6c 6f 62 28 70 43 74 78 2d 3e 70 4f 75  roBlob(pCtx->pOu
3f90: 74 2c 20 28 69 6e 74 29 6e 29 3b 0a 20 20 72 65  t, (int)n);.  re
3fa0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
3fb0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
3fc0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65  esult_error_code
3fd0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
3fe0: 20 2a 70 43 74 78 2c 20 69 6e 74 20 65 72 72 43   *pCtx, int errC
3ff0: 6f 64 65 29 7b 0a 20 20 70 43 74 78 2d 3e 69 73  ode){.  pCtx->is
4000: 45 72 72 6f 72 20 3d 20 65 72 72 43 6f 64 65 20  Error = errCode 
4010: 3f 20 65 72 72 43 6f 64 65 20 3a 20 2d 31 3b 0a  ? errCode : -1;.
4020: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4030: 42 55 47 0a 20 20 69 66 28 20 70 43 74 78 2d 3e  BUG.  if( pCtx->
4040: 70 56 64 62 65 20 29 20 70 43 74 78 2d 3e 70 56  pVdbe ) pCtx->pV
4050: 64 62 65 2d 3e 72 63 41 70 70 20 3d 20 65 72 72  dbe->rcApp = err
4060: 43 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Code;.#endif.  i
4070: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66  f( pCtx->pOut->f
4080: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
4090: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
40a0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43 74 78  beMemSetStr(pCtx
40b0: 2d 3e 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 45  ->pOut, sqlite3E
40c0: 72 72 53 74 72 28 65 72 72 43 6f 64 65 29 2c 20  rrStr(errCode), 
40d0: 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  -1, .           
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
40f0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
4100: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 7d  E_STATIC);.  }.}
4110: 0a 0a 2f 2a 20 46 6f 72 63 65 20 61 6e 20 53 51  ../* Force an SQ
4120: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65 72 72 6f  LITE_TOOBIG erro
4130: 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  r. */.void sqlit
4140: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f  e3_result_error_
4150: 74 6f 6f 62 69 67 28 73 71 6c 69 74 65 33 5f 63  toobig(sqlite3_c
4160: 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a 20  ontext *pCtx){. 
4170: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
4180: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
4190: 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65  ->pOut->db->mute
41a0: 78 29 20 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73  x) );.  pCtx->is
41b0: 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 54  Error = SQLITE_T
41c0: 4f 4f 42 49 47 3b 0a 20 20 73 71 6c 69 74 65 33  OOBIG;.  sqlite3
41d0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43  VdbeMemSetStr(pC
41e0: 74 78 2d 3e 70 4f 75 74 2c 20 22 73 74 72 69 6e  tx->pOut, "strin
41f0: 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
4200: 67 22 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20 20  g", -1, .       
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
4230: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 7d 0a 0a  ITE_STATIC);.}..
4240: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  /* An SQLITE_NOM
4250: 45 4d 20 65 72 72 6f 72 2e 20 2a 2f 0a 76 6f 69  EM error. */.voi
4260: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
4270: 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d 28 73 71 6c  _error_nomem(sql
4280: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
4290: 74 78 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  tx){.  assert( s
42a0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
42b0: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
42c0: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
42d0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
42e0: 75 6c 6c 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b  ull(pCtx->pOut);
42f0: 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
4300: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f   = SQLITE_NOMEM_
4310: 42 4b 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 4f  BKPT;.  sqlite3O
4320: 6f 6d 46 61 75 6c 74 28 70 43 74 78 2d 3e 70 4f  omFault(pCtx->pO
4330: 75 74 2d 3e 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ut->db);.}../*.*
4340: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
4350: 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
4360: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61  a transaction ha
4370: 73 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64  s been committed
4380: 2e 20 49 74 20 0a 2a 2a 20 69 6e 76 6f 6b 65 73  . It .** invokes
4390: 20 63 61 6c 6c 62 61 63 6b 73 20 72 65 67 69 73   callbacks regis
43a0: 74 65 72 65 64 20 77 69 74 68 20 73 71 6c 69 74  tered with sqlit
43b0: 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28 29 20 61 73  e3_wal_hook() as
43c0: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
43d0: 61 74 69 63 20 69 6e 74 20 64 6f 57 61 6c 43 61  atic int doWalCa
43e0: 6c 6c 62 61 63 6b 73 28 73 71 6c 69 74 65 33 20  llbacks(sqlite3 
43f0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  *db){.  int rc =
4400: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 6e   SQLITE_OK;.#ifn
4410: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4420: 57 41 4c 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  WAL.  int i;.  f
4430: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
4440: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 42 74 72  b; i++){.    Btr
4450: 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44  ee *pBt = db->aD
4460: 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66  b[i].pBt;.    if
4470: 28 20 70 42 74 20 29 7b 0a 20 20 20 20 20 20 69  ( pBt ){.      i
4480: 6e 74 20 6e 45 6e 74 72 79 3b 0a 20 20 20 20 20  nt nEntry;.     
4490: 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
44a0: 65 72 28 70 42 74 29 3b 0a 20 20 20 20 20 20 6e  er(pBt);.      n
44b0: 45 6e 74 72 79 20 3d 20 73 71 6c 69 74 65 33 50  Entry = sqlite3P
44c0: 61 67 65 72 57 61 6c 43 61 6c 6c 62 61 63 6b 28  agerWalCallback(
44d0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
44e0: 72 28 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73  r(pBt));.      s
44f0: 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
4500: 28 70 42 74 29 3b 0a 20 20 20 20 20 20 69 66 28  (pBt);.      if(
4510: 20 6e 45 6e 74 72 79 3e 30 20 26 26 20 64 62 2d   nEntry>0 && db-
4520: 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 20 26 26  >xWalCallback &&
4530: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
4540: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 64  {.        rc = d
4550: 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 28  b->xWalCallback(
4560: 64 62 2d 3e 70 57 61 6c 41 72 67 2c 20 64 62 2c  db->pWalArg, db,
4570: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53   db->aDb[i].zDbS
4580: 4e 61 6d 65 2c 20 6e 45 6e 74 72 79 29 3b 0a 20  Name, nEntry);. 
4590: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
45a0: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
45b0: 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45   rc;.}.../*.** E
45c0: 78 65 63 75 74 65 20 74 68 65 20 73 74 61 74 65  xecute the state
45d0: 6d 65 6e 74 20 70 53 74 6d 74 2c 20 65 69 74 68  ment pStmt, eith
45e0: 65 72 20 75 6e 74 69 6c 20 61 20 72 6f 77 20 6f  er until a row o
45f0: 66 20 64 61 74 61 20 69 73 20 72 65 61 64 79 2c  f data is ready,
4600: 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
4610: 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  t is completely 
4620: 65 78 65 63 75 74 65 64 20 6f 72 20 61 6e 20 65  executed or an e
4630: 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a  rror occurs..**.
4640: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
4650: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62  implements the b
4660: 75 6c 6b 20 6f 66 20 74 68 65 20 6c 6f 67 69 63  ulk of the logic
4670: 20 62 65 68 69 6e 64 20 74 68 65 20 73 71 6c 69   behind the sqli
4680: 74 65 5f 73 74 65 70 28 29 0a 2a 2a 20 41 50 49  te_step().** API
4690: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 74 68 69 6e  .  The only thin
46a0: 67 20 6f 6d 69 74 74 65 64 20 69 73 20 74 68 65  g omitted is the
46b0: 20 61 75 74 6f 6d 61 74 69 63 20 72 65 63 6f 6d   automatic recom
46c0: 70 69 6c 65 20 69 66 20 61 20 0a 2a 2a 20 73 63  pile if a .** sc
46d0: 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61 73 20  hema change has 
46e0: 6f 63 63 75 72 72 65 64 2e 20 20 54 68 61 74 20  occurred.  That 
46f0: 64 65 74 61 69 6c 20 69 73 20 68 61 6e 64 6c 65  detail is handle
4700: 64 20 62 79 20 74 68 65 0a 2a 2a 20 6f 75 74 65  d by the.** oute
4710: 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
4720: 20 77 72 61 70 70 65 72 20 70 72 6f 63 65 64 75   wrapper procedu
4730: 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  re..*/.static in
4740: 74 20 73 71 6c 69 74 65 33 53 74 65 70 28 56 64  t sqlite3Step(Vd
4750: 62 65 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65  be *p){.  sqlite
4760: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
4770: 0a 0a 20 20 61 73 73 65 72 74 28 70 29 3b 0a 20  ..  assert(p);. 
4780: 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56   if( p->magic!=V
4790: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 7b  DBE_MAGIC_RUN ){
47a0: 0a 20 20 20 20 2f 2a 20 57 65 20 75 73 65 64 20  .    /* We used 
47b0: 74 6f 20 72 65 71 75 69 72 65 20 74 68 61 74 20  to require that 
47c0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20  sqlite3_reset() 
47d0: 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65  be called before
47e0: 20 72 65 74 72 79 69 6e 67 0a 20 20 20 20 2a 2a   retrying.    **
47f0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4800: 61 66 74 65 72 20 61 6e 79 20 65 72 72 6f 72 20  after any error 
4810: 6f 72 20 61 66 74 65 72 20 53 51 4c 49 54 45 5f  or after SQLITE_
4820: 44 4f 4e 45 2e 20 20 42 75 74 20 62 65 67 69 6e  DONE.  But begin
4830: 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 77 69 74 68  ning.    ** with
4840: 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 2c 20   version 3.7.0, 
4850: 77 65 20 63 68 61 6e 67 65 64 20 74 68 69 73 20  we changed this 
4860: 73 6f 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f  so that sqlite3_
4870: 72 65 73 65 74 28 29 20 77 6f 75 6c 64 0a 20 20  reset() would.  
4880: 20 20 2a 2a 20 62 65 20 63 61 6c 6c 65 64 20 61    ** be called a
4890: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 73  utomatically ins
48a0: 74 65 61 64 20 6f 66 20 74 68 72 6f 77 69 6e 67  tead of throwing
48b0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
48c0: 53 45 20 65 72 72 6f 72 2e 0a 20 20 20 20 2a 2a  SE error..    **
48d0: 20 54 68 69 73 20 22 61 75 74 6f 6d 61 74 69 63   This "automatic
48e0: 2d 72 65 73 65 74 22 20 63 68 61 6e 67 65 20 69  -reset" change i
48f0: 73 20 6e 6f 74 20 74 65 63 68 6e 69 63 61 6c 6c  s not technicall
4900: 79 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69  y an incompatibi
4910: 6c 69 74 79 2c 20 0a 20 20 20 20 2a 2a 20 73 69  lity, .    ** si
4920: 6e 63 65 20 61 6e 79 20 61 70 70 6c 69 63 61 74  nce any applicat
4930: 69 6f 6e 20 74 68 61 74 20 72 65 63 65 69 76 65  ion that receive
4940: 73 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  s an SQLITE_MISU
4950: 53 45 20 69 73 20 62 72 6f 6b 65 6e 20 62 79 0a  SE is broken by.
4960: 20 20 20 20 2a 2a 20 64 65 66 69 6e 69 74 69 6f      ** definitio
4970: 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
4980: 20 4e 65 76 65 72 74 68 65 6c 65 73 73 2c 20 73   Nevertheless, s
4990: 6f 6d 65 20 70 75 62 6c 69 73 68 65 64 20 61 70  ome published ap
49a0: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
49b0: 77 65 72 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20  were originally 
49c0: 77 72 69 74 74 65 6e 0a 20 20 20 20 2a 2a 20 66  written.    ** f
49d0: 6f 72 20 76 65 72 73 69 6f 6e 20 33 2e 36 2e 32  or version 3.6.2
49e0: 33 20 6f 72 20 65 61 72 6c 69 65 72 20 64 6f 20  3 or earlier do 
49f0: 69 6e 20 66 61 63 74 20 64 65 70 65 6e 64 20 6f  in fact depend o
4a00: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
4a10: 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 73 2c  .    ** returns,
4a20: 20 61 6e 64 20 74 68 6f 73 65 20 77 65 72 65 20   and those were 
4a30: 62 72 6f 6b 65 6e 20 62 79 20 74 68 65 20 61 75  broken by the au
4a40: 74 6f 6d 61 74 69 63 2d 72 65 73 65 74 20 63 68  tomatic-reset ch
4a50: 61 6e 67 65 2e 20 20 41 73 20 61 0a 20 20 20 20  ange.  As a.    
4a60: 2a 2a 20 61 20 77 6f 72 6b 2d 61 72 6f 75 6e 64  ** a work-around
4a70: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49  , the SQLITE_OMI
4a80: 54 5f 41 55 54 4f 52 45 53 45 54 20 63 6f 6d 70  T_AUTORESET comp
4a90: 69 6c 65 2d 74 69 6d 65 20 72 65 73 74 6f 72 65  ile-time restore
4aa0: 73 20 74 68 65 0a 20 20 20 20 2a 2a 20 6c 65 67  s the.    ** leg
4ab0: 61 63 79 20 62 65 68 61 76 69 6f 72 20 6f 66 20  acy behavior of 
4ac0: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
4ad0: 5f 4d 49 53 55 53 45 20 66 6f 72 20 63 61 73 65  _MISUSE for case
4ae0: 73 20 77 68 65 72 65 20 74 68 65 20 0a 20 20 20  s where the .   
4af0: 20 2a 2a 20 70 72 65 76 69 6f 75 73 20 73 71 6c   ** previous sql
4b00: 69 74 65 33 5f 73 74 65 70 28 29 20 72 65 74 75  ite3_step() retu
4b10: 72 6e 65 64 20 73 6f 6d 65 74 68 69 6e 67 20 6f  rned something o
4b20: 74 68 65 72 20 74 68 61 6e 20 61 20 53 51 4c 49  ther than a SQLI
4b30: 54 45 5f 4c 4f 43 4b 45 44 0a 20 20 20 20 2a 2a  TE_LOCKED.    **
4b40: 20 6f 72 20 53 51 4c 49 54 45 5f 42 55 53 59 20   or SQLITE_BUSY 
4b50: 65 72 72 6f 72 2e 0a 20 20 20 20 2a 2f 0a 23 69  error..    */.#i
4b60: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
4b70: 5f 41 55 54 4f 52 45 53 45 54 0a 20 20 20 20 69  _AUTORESET.    i
4b80: 66 28 20 28 72 63 20 3d 20 70 2d 3e 72 63 26 30  f( (rc = p->rc&0
4b90: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
4ba0: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
4bb0: 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20  LOCKED ){.      
4bc0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 28 73  sqlite3_reset((s
4bd0: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 70 29 3b  qlite3_stmt*)p);
4be0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4bf0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4c00: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
4c10: 20 7d 0a 23 65 6c 73 65 0a 20 20 20 20 73 71 6c   }.#else.    sql
4c20: 69 74 65 33 5f 72 65 73 65 74 28 28 73 71 6c 69  ite3_reset((sqli
4c30: 74 65 33 5f 73 74 6d 74 2a 29 70 29 3b 0a 23 65  te3_stmt*)p);.#e
4c40: 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ndif.  }..  /* C
4c50: 68 65 63 6b 20 74 68 61 74 20 6d 61 6c 6c 6f 63  heck that malloc
4c60: 28 29 20 68 61 73 20 6e 6f 74 20 66 61 69 6c 65  () has not faile
4c70: 64 2e 20 49 66 20 69 74 20 68 61 73 2c 20 72 65  d. If it has, re
4c80: 74 75 72 6e 20 65 61 72 6c 79 2e 20 2a 2f 0a 20  turn early. */. 
4c90: 20 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 69   db = p->db;.  i
4ca0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4cb0: 6c 65 64 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  led ){.    p->rc
4cc0: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
4cd0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4ce0: 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
4cf0: 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c   }..  if( p->pc<
4d00: 30 20 26 26 20 70 2d 3e 65 78 70 69 72 65 64 20  0 && p->expired 
4d10: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53  ){.    p->rc = S
4d20: 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
4d30: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
4d40: 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e  ROR;.    goto en
4d50: 64 5f 6f 66 5f 73 74 65 70 3b 0a 20 20 7d 0a 20  d_of_step;.  }. 
4d60: 20 69 66 28 20 70 2d 3e 70 63 3c 30 20 29 7b 0a   if( p->pc<0 ){.
4d70: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
4d80: 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 73 74 61  are no other sta
4d90: 74 65 6d 65 6e 74 73 20 63 75 72 72 65 6e 74 6c  tements currentl
4da0: 79 20 72 75 6e 6e 69 6e 67 2c 20 74 68 65 6e 0a  y running, then.
4db0: 20 20 20 20 2a 2a 20 72 65 73 65 74 20 74 68 65      ** reset the
4dc0: 20 69 6e 74 65 72 72 75 70 74 20 66 6c 61 67 2e   interrupt flag.
4dd0: 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20    This prevents 
4de0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4df0: 33 5f 69 6e 74 65 72 72 75 70 74 0a 20 20 20 20  3_interrupt.    
4e00: 2a 2a 20 66 72 6f 6d 20 69 6e 74 65 72 72 75 70  ** from interrup
4e10: 74 69 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74  ting a statement
4e20: 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20 79 65   that has not ye
4e30: 74 20 73 74 61 72 74 65 64 2e 0a 20 20 20 20 2a  t started..    *
4e40: 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  /.    if( db->nV
4e50: 64 62 65 41 63 74 69 76 65 3d 3d 30 20 29 7b 0a  dbeActive==0 ){.
4e60: 20 20 20 20 20 20 64 62 2d 3e 75 31 2e 69 73 49        db->u1.isI
4e70: 6e 74 65 72 72 75 70 74 65 64 20 3d 20 30 3b 0a  nterrupted = 0;.
4e80: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
4e90: 74 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  t( db->nVdbeWrit
4ea0: 65 3e 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  e>0 || db->autoC
4eb0: 6f 6d 6d 69 74 3d 3d 30 20 0a 20 20 20 20 20 20  ommit==0 .      
4ec0: 20 20 7c 7c 20 28 64 62 2d 3e 6e 44 65 66 65 72    || (db->nDefer
4ed0: 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
4ee0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
4ef0: 6e 73 3d 3d 30 29 0a 20 20 20 20 29 3b 0a 0a 23  ns==0).    );..#
4f00: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4f10: 49 54 5f 54 52 41 43 45 0a 20 20 20 20 69 66 28  IT_TRACE.    if(
4f20: 20 28 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 28   (db->mTrace & (
4f30: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 50 52 4f  SQLITE_TRACE_PRO
4f40: 46 49 4c 45 7c 53 51 4c 49 54 45 5f 54 52 41 43  FILE|SQLITE_TRAC
4f50: 45 5f 58 50 52 4f 46 49 4c 45 29 29 21 3d 30 0a  E_XPROFILE))!=0.
4f60: 20 20 20 20 20 20 20 20 26 26 20 21 64 62 2d 3e          && !db->
4f70: 69 6e 69 74 2e 62 75 73 79 20 26 26 20 70 2d 3e  init.busy && p->
4f80: 7a 53 71 6c 20 29 7b 0a 20 20 20 20 20 20 73 71  zSql ){.      sq
4f90: 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69  lite3OsCurrentTi
4fa0: 6d 65 49 6e 74 36 34 28 64 62 2d 3e 70 56 66 73  meInt64(db->pVfs
4fb0: 2c 20 26 70 2d 3e 73 74 61 72 74 54 69 6d 65 29  , &p->startTime)
4fc0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4fd0: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 73 74     assert( p->st
4fe0: 61 72 74 54 69 6d 65 3d 3d 30 20 29 3b 0a 20 20  artTime==0 );.  
4ff0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
5000: 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 2b  db->nVdbeActive+
5010: 2b 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 65  +;.    if( p->re
5020: 61 64 4f 6e 6c 79 3d 3d 30 20 29 20 64 62 2d 3e  adOnly==0 ) db->
5030: 6e 56 64 62 65 57 72 69 74 65 2b 2b 3b 0a 20 20  nVdbeWrite++;.  
5040: 20 20 69 66 28 20 70 2d 3e 62 49 73 52 65 61 64    if( p->bIsRead
5050: 65 72 20 29 20 64 62 2d 3e 6e 56 64 62 65 52 65  er ) db->nVdbeRe
5060: 61 64 2b 2b 3b 0a 20 20 20 20 70 2d 3e 70 63 20  ad++;.    p->pc 
5070: 3d 20 30 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20  = 0;.  }.#ifdef 
5080: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
5090: 2d 3e 72 63 41 70 70 20 3d 20 53 51 4c 49 54 45  ->rcApp = SQLITE
50a0: 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  _OK;.#endif.#ifn
50b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50c0: 45 58 50 4c 41 49 4e 0a 20 20 69 66 28 20 70 2d  EXPLAIN.  if( p-
50d0: 3e 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20  >explain ){.    
50e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
50f0: 4c 69 73 74 28 70 29 3b 0a 20 20 7d 65 6c 73 65  List(p);.  }else
5100: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
5110: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 20 2a  E_OMIT_EXPLAIN *
5120: 2f 0a 20 20 7b 0a 20 20 20 20 64 62 2d 3e 6e 56  /.  {.    db->nV
5130: 64 62 65 45 78 65 63 2b 2b 3b 0a 20 20 20 20 72  dbeExec++;.    r
5140: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  c = sqlite3VdbeE
5150: 78 65 63 28 70 29 3b 0a 20 20 20 20 64 62 2d 3e  xec(p);.    db->
5160: 6e 56 64 62 65 45 78 65 63 2d 2d 3b 0a 20 20 7d  nVdbeExec--;.  }
5170: 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ..  if( rc!=SQLI
5180: 54 45 5f 52 4f 57 20 29 7b 0a 23 69 66 6e 64 65  TE_ROW ){.#ifnde
5190: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
51a0: 41 43 45 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ACE.    /* If th
51b0: 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
51c0: 6c 65 74 65 64 20 73 75 63 63 65 73 73 66 75 6c  leted successful
51d0: 6c 79 2c 20 69 6e 76 6f 6b 65 20 74 68 65 20 70  ly, invoke the p
51e0: 72 6f 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b 20  rofile callback 
51f0: 2a 2f 0a 20 20 20 20 63 68 65 63 6b 50 72 6f 66  */.    checkProf
5200: 69 6c 65 43 61 6c 6c 62 61 63 6b 28 64 62 2c 20  ileCallback(db, 
5210: 70 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  p);.#endif..    
5220: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
5230: 4f 4e 45 20 26 26 20 64 62 2d 3e 61 75 74 6f 43  ONE && db->autoC
5240: 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 61  ommit ){.      a
5250: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
5260: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 20  LITE_OK );.     
5270: 20 70 2d 3e 72 63 20 3d 20 64 6f 57 61 6c 43 61   p->rc = doWalCa
5280: 6c 6c 62 61 63 6b 73 28 64 62 29 3b 0a 20 20 20  llbacks(db);.   
5290: 20 20 20 69 66 28 20 70 2d 3e 72 63 21 3d 53 51     if( p->rc!=SQ
52a0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
52b0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
52c0: 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20  RROR;.      }.  
52d0: 20 20 7d 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e 65    }.  }..  db->e
52e0: 72 72 43 6f 64 65 20 3d 20 72 63 3b 0a 20 20 69  rrCode = rc;.  i
52f0: 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d  f( SQLITE_NOMEM=
5300: 3d 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28  =sqlite3ApiExit(
5310: 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 29 20 29 7b  p->db, p->rc) ){
5320: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
5330: 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
5340: 20 20 7d 0a 65 6e 64 5f 6f 66 5f 73 74 65 70 3a    }.end_of_step:
5350: 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f  .  /* At this po
5360: 69 6e 74 20 6c 6f 63 61 6c 20 76 61 72 69 61 62  int local variab
5370: 6c 65 20 72 63 20 68 6f 6c 64 73 20 74 68 65 20  le rc holds the 
5380: 76 61 6c 75 65 20 74 68 61 74 20 73 68 6f 75 6c  value that shoul
5390: 64 20 62 65 20 0a 20 20 2a 2a 20 72 65 74 75 72  d be .  ** retur
53a0: 6e 65 64 20 69 66 20 74 68 69 73 20 73 74 61 74  ned if this stat
53b0: 65 6d 65 6e 74 20 77 61 73 20 63 6f 6d 70 69 6c  ement was compil
53c0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 6c 65 67  ed using the leg
53d0: 61 63 79 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  acy .  ** sqlite
53e0: 33 5f 70 72 65 70 61 72 65 28 29 20 69 6e 74 65  3_prepare() inte
53f0: 72 66 61 63 65 2e 20 41 63 63 6f 72 64 69 6e 67  rface. According
5400: 20 74 6f 20 74 68 65 20 64 6f 63 73 2c 20 74 68   to the docs, th
5410: 69 73 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  is can only.  **
5420: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 76   be one of the v
5430: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69 72  alues in the fir
5440: 73 74 20 61 73 73 65 72 74 28 29 20 62 65 6c 6f  st assert() belo
5450: 77 2e 20 56 61 72 69 61 62 6c 65 20 70 2d 3e 72  w. Variable p->r
5460: 63 20 0a 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 73  c .  ** contains
5470: 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
5480: 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65  would be returne
5490: 64 20 69 66 20 73 71 6c 69 74 65 33 5f 66 69 6e  d if sqlite3_fin
54a0: 61 6c 69 7a 65 28 29 20 0a 20 20 2a 2a 20 77 65  alize() .  ** we
54b0: 72 65 20 63 61 6c 6c 65 64 20 6f 6e 20 73 74 61  re called on sta
54c0: 74 65 6d 65 6e 74 20 70 2e 0a 20 20 2a 2f 0a 20  tement p..  */. 
54d0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
54e0: 49 54 45 5f 52 4f 57 20 20 7c 7c 20 72 63 3d 3d  ITE_ROW  || rc==
54f0: 53 51 4c 49 54 45 5f 44 4f 4e 45 20 20 20 7c 7c  SQLITE_DONE   ||
5500: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
5510: 52 20 0a 20 20 20 20 20 20 20 7c 7c 20 28 72 63  R .       || (rc
5520: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
5530: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
5540: 45 5f 4d 49 53 55 53 45 0a 20 20 29 3b 0a 20 20  E_MISUSE.  );.  
5550: 61 73 73 65 72 74 28 20 28 70 2d 3e 72 63 21 3d  assert( (p->rc!=
5560: 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 70 2d  SQLITE_ROW && p-
5570: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  >rc!=SQLITE_DONE
5580: 29 20 7c 7c 20 70 2d 3e 72 63 3d 3d 70 2d 3e 72  ) || p->rc==p->r
5590: 63 41 70 70 20 29 3b 0a 20 20 69 66 28 20 72 63  cApp );.  if( rc
55a0: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 0a 20 20  !=SQLITE_ROW .  
55b0: 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44   && rc!=SQLITE_D
55c0: 4f 4e 45 0a 20 20 20 26 26 20 28 70 2d 3e 70 72  ONE.   && (p->pr
55d0: 65 70 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  epFlags & SQLITE
55e0: 5f 50 52 45 50 41 52 45 5f 53 41 56 45 53 51 4c  _PREPARE_SAVESQL
55f0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )!=0.  ){.    /*
5600: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
5610: 6e 74 20 77 61 73 20 70 72 65 70 61 72 65 64 20  nt was prepared 
5620: 75 73 69 6e 67 20 73 61 76 65 64 20 53 51 4c 20  using saved SQL 
5630: 61 6e 64 20 61 6e 20 0a 20 20 20 20 2a 2a 20 65  and an .    ** e
5640: 72 72 6f 72 20 68 61 73 20 6f 63 63 75 72 72 65  rror has occurre
5650: 64 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  d, then return t
5660: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 6e  he error code in
5670: 20 70 2d 3e 72 63 20 74 6f 20 74 68 65 0a 20 20   p->rc to the.  
5680: 20 20 2a 2a 20 63 61 6c 6c 65 72 2e 20 53 65 74    ** caller. Set
5690: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
56a0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
56b0: 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 73 61  handle to the sa
56c0: 6d 65 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  me value..    */
56d0: 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
56e0: 65 33 56 64 62 65 54 72 61 6e 73 66 65 72 45 72  e3VdbeTransferEr
56f0: 72 6f 72 28 70 29 3b 0a 20 20 7d 0a 20 20 72 65  ror(p);.  }.  re
5700: 74 75 72 6e 20 28 72 63 26 64 62 2d 3e 65 72 72  turn (rc&db->err
5710: 4d 61 73 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Mask);.}../*.** 
5720: 54 68 69 73 20 69 73 20 74 68 65 20 74 6f 70 2d  This is the top-
5730: 6c 65 76 65 6c 20 69 6d 70 6c 65 6d 65 6e 74 61  level implementa
5740: 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65 33 5f  tion of sqlite3_
5750: 73 74 65 70 28 29 2e 20 20 43 61 6c 6c 0a 2a 2a  step().  Call.**
5760: 20 73 71 6c 69 74 65 33 53 74 65 70 28 29 20 74   sqlite3Step() t
5770: 6f 20 64 6f 20 6d 6f 73 74 20 6f 66 20 74 68 65  o do most of the
5780: 20 77 6f 72 6b 2e 20 20 49 66 20 61 20 73 63 68   work.  If a sch
5790: 65 6d 61 20 65 72 72 6f 72 20 6f 63 63 75 72 73  ema error occurs
57a0: 2c 0a 2a 2a 20 63 61 6c 6c 20 73 71 6c 69 74 65  ,.** call sqlite
57b0: 33 52 65 70 72 65 70 61 72 65 28 29 20 61 6e 64  3Reprepare() and
57c0: 20 74 72 79 20 61 67 61 69 6e 2e 0a 2a 2f 0a 69   try again..*/.i
57d0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  nt sqlite3_step(
57e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
57f0: 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  tmt){.  int rc =
5800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
5810: 20 2f 2a 20 52 65 73 75 6c 74 20 66 72 6f 6d 20   /* Result from 
5820: 73 71 6c 69 74 65 33 53 74 65 70 28 29 20 2a 2f  sqlite3Step() */
5830: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64  .  Vdbe *v = (Vd
5840: 62 65 2a 29 70 53 74 6d 74 3b 20 20 2f 2a 20 74  be*)pStmt;  /* t
5850: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
5860: 65 6d 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 63  ement */.  int c
5870: 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  nt = 0;         
5880: 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
5890: 6f 20 70 72 65 76 65 6e 74 20 69 6e 66 69 6e 69  o prevent infini
58a0: 74 65 20 6c 6f 6f 70 20 6f 66 20 72 65 70 72 65  te loop of repre
58b0: 70 61 72 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  pares */.  sqlit
58c0: 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
58d0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
58e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
58f0: 2f 0a 0a 20 20 69 66 28 20 76 64 62 65 53 61 66  /..  if( vdbeSaf
5900: 65 74 79 4e 6f 74 4e 75 6c 6c 28 76 29 20 29 7b  etyNotNull(v) ){
5910: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5920: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
5930: 20 20 7d 0a 20 20 64 62 20 3d 20 76 2d 3e 64 62    }.  db = v->db
5940: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
5950: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
5960: 78 29 3b 0a 20 20 76 2d 3e 64 6f 69 6e 67 52 65  x);.  v->doingRe
5970: 72 75 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65  run = 0;.  while
5980: 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 53  ( (rc = sqlite3S
5990: 74 65 70 28 76 29 29 3d 3d 53 51 4c 49 54 45 5f  tep(v))==SQLITE_
59a0: 53 43 48 45 4d 41 0a 20 20 20 20 20 20 20 20 20  SCHEMA.         
59b0: 26 26 20 63 6e 74 2b 2b 20 3c 20 53 51 4c 49 54  && cnt++ < SQLIT
59c0: 45 5f 4d 41 58 5f 53 43 48 45 4d 41 5f 52 45 54  E_MAX_SCHEMA_RET
59d0: 52 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 73 61  RY ){.    int sa
59e0: 76 65 64 50 63 20 3d 20 76 2d 3e 70 63 3b 0a 20  vedPc = v->pc;. 
59f0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52     rc = sqlite3R
5a00: 65 70 72 65 70 61 72 65 28 76 29 3b 0a 20 20 20  eprepare(v);.   
5a10: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
5a20: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  OK ){.      /* T
5a30: 68 69 73 20 63 61 73 65 20 6f 63 63 75 72 73 20  his case occurs 
5a40: 61 66 74 65 72 20 66 61 69 6c 69 6e 67 20 74 6f  after failing to
5a50: 20 72 65 63 6f 6d 70 69 6c 65 20 61 6e 20 73 71   recompile an sq
5a60: 6c 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a 20 20  l statement. .  
5a70: 20 20 20 20 2a 2a 20 54 68 65 20 65 72 72 6f 72      ** The error
5a80: 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74 68   message from th
5a90: 65 20 53 51 4c 20 63 6f 6d 70 69 6c 65 72 20 68  e SQL compiler h
5aa0: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
5ab0: 6c 6f 61 64 65 64 20 0a 20 20 20 20 20 20 2a 2a  loaded .      **
5ac0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
5ad0: 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73 20  se handle. This 
5ae0: 62 6c 6f 63 6b 20 63 6f 70 69 65 73 20 74 68 65  block copies the
5af0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 0a   error message .
5b00: 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74 68        ** from th
5b10: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
5b20: 65 20 69 6e 74 6f 20 74 68 65 20 73 74 61 74 65  e into the state
5b30: 6d 65 6e 74 20 61 6e 64 20 73 65 74 73 20 74 68  ment and sets th
5b40: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20  e statement.    
5b50: 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 63 6f 75    ** program cou
5b60: 6e 74 65 72 20 74 6f 20 30 20 74 6f 20 65 6e 73  nter to 0 to ens
5b70: 75 72 65 20 74 68 61 74 20 77 68 65 6e 20 74 68  ure that when th
5b80: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 0a  e statement is .
5b90: 20 20 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69 7a        ** finaliz
5ba0: 65 64 20 6f 72 20 72 65 73 65 74 20 74 68 65 20  ed or reset the 
5bb0: 70 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65 73  parser error mes
5bc0: 73 61 67 65 20 69 73 20 61 76 61 69 6c 61 62 6c  sage is availabl
5bd0: 65 20 76 69 61 0a 20 20 20 20 20 20 2a 2a 20 73  e via.      ** s
5be0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
5bf0: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63  and sqlite3_errc
5c00: 6f 64 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  ode()..      */.
5c10: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
5c20: 20 2a 7a 45 72 72 20 3d 20 28 63 6f 6e 73 74 20   *zErr = (const 
5c30: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 76  char *)sqlite3_v
5c40: 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70 45  alue_text(db->pE
5c50: 72 72 29 3b 20 0a 20 20 20 20 20 20 73 71 6c 69  rr); .      sqli
5c60: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 76 2d  te3DbFree(db, v-
5c70: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20  >zErrMsg);.     
5c80: 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63   if( !db->malloc
5c90: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20  Failed ){.      
5ca0: 20 20 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    v->zErrMsg = s
5cb0: 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
5cc0: 62 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20  b, zErr);.      
5cd0: 20 20 76 2d 3e 72 63 20 3d 20 72 63 20 3d 20 73    v->rc = rc = s
5ce0: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62  qlite3ApiExit(db
5cf0: 2c 20 72 63 29 3b 0a 20 20 20 20 20 20 7d 20 65  , rc);.      } e
5d00: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 76 2d  lse {.        v-
5d10: 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
5d20: 20 20 20 20 20 20 76 2d 3e 72 63 20 3d 20 72 63        v->rc = rc
5d30: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f   = SQLITE_NOMEM_
5d40: 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20  BKPT;.      }.  
5d50: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
5d60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
5d70: 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 69  et(pStmt);.    i
5d80: 66 28 20 73 61 76 65 64 50 63 3e 3d 30 20 29 20  f( savedPc>=0 ) 
5d90: 76 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 20 3d 20  v->doingRerun = 
5da0: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 76  1;.    assert( v
5db0: 2d 3e 65 78 70 69 72 65 64 3d 3d 30 20 29 3b 0a  ->expired==0 );.
5dc0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
5dd0: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
5de0: 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
5df0: 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 74  c;.}.../*.** Ext
5e00: 72 61 63 74 20 74 68 65 20 75 73 65 72 20 64 61  ract the user da
5e10: 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69 74 65  ta from a sqlite
5e20: 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63 74  3_context struct
5e30: 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e 20 61  ure and return a
5e40: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  .** pointer to i
5e50: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  t..*/.void *sqli
5e60: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 73 71  te3_user_data(sq
5e70: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5e80: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26  ){.  assert( p &
5e90: 26 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20  & p->pFunc );.  
5ea0: 72 65 74 75 72 6e 20 70 2d 3e 70 46 75 6e 63 2d  return p->pFunc-
5eb0: 3e 70 55 73 65 72 44 61 74 61 3b 0a 7d 0a 0a 2f  >pUserData;.}../
5ec0: 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
5ed0: 20 75 73 65 72 20 64 61 74 61 20 66 72 6f 6d 20   user data from 
5ee0: 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  a sqlite3_contex
5ef0: 74 20 73 74 72 75 63 74 75 72 65 20 61 6e 64 20  t structure and 
5f00: 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e  return a.** poin
5f10: 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2a 0a 2a 2a  ter to it..**.**
5f20: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
5f30: 4f 46 3a 20 52 2d 34 36 37 39 38 2d 35 30 33 30  OF: R-46798-5030
5f40: 31 20 54 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  1 The sqlite3_co
5f50: 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28  ntext_db_handle(
5f60: 29 20 69 6e 74 65 72 66 61 63 65 0a 2a 2a 20 72  ) interface.** r
5f70: 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66  eturns a copy of
5f80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5f90: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5fa0: 6e 65 63 74 69 6f 6e 20 28 74 68 65 20 31 73 74  nection (the 1st
5fb0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 29 20 6f  .** parameter) o
5fc0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  f the sqlite3_cr
5fd0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 20  eate_function() 
5fe0: 61 6e 64 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  and.** sqlite3_c
5ff0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
6000: 28 29 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  () routines that
6010: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 72 65 67 69   originally regi
6020: 73 74 65 72 65 64 20 74 68 65 0a 2a 2a 20 61 70  stered the.** ap
6030: 70 6c 69 63 61 74 69 6f 6e 20 64 65 66 69 6e 65  plication define
6040: 64 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  d function..*/.s
6050: 71 6c 69 74 65 33 20 2a 73 71 6c 69 74 65 33 5f  qlite3 *sqlite3_
6060: 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61 6e 64 6c  context_db_handl
6070: 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
6080: 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28  t *p){.  assert(
6090: 20 70 20 26 26 20 70 2d 3e 70 4f 75 74 20 29 3b   p && p->pOut );
60a0: 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 70 4f 75  .  return p->pOu
60b0: 74 2d 3e 64 62 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t->db;.}../*.** 
60c0: 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  If this routine 
60d0: 69 73 20 69 6e 76 6f 6b 65 64 20 66 72 6f 6d 20  is invoked from 
60e0: 77 69 74 68 69 6e 20 61 6e 20 78 43 6f 6c 75 6d  within an xColum
60f0: 6e 20 6d 65 74 68 6f 64 20 6f 66 20 61 20 76 69  n method of a vi
6100: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
6110: 74 68 65 6e 20 69 74 20 72 65 74 75 72 6e 73 20  then it returns 
6120: 74 72 75 65 20 69 66 20 61 6e 64 20 6f 6e 6c 79  true if and only
6130: 20 69 66 20 74 68 65 20 74 68 65 20 63 61 6c 6c   if the the call
6140: 20 69 73 20 64 75 72 69 6e 67 20 61 6e 0a 2a 2a   is during an.**
6150: 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
6160: 6e 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  n and the value 
6170: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69  of the column wi
6180: 6c 6c 20 6e 6f 74 20 62 65 20 6d 6f 64 69 66 69  ll not be modifi
6190: 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 55 50 44  ed.** by the UPD
61a0: 41 54 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ATE..**.** If th
61b0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61  is routine is ca
61c0: 6c 6c 65 64 20 66 72 6f 6d 20 61 6e 79 20 63 6f  lled from any co
61d0: 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68 61 6e  ntext other than
61e0: 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 78   within the.** x
61f0: 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20 6f 66  Column method of
6200: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
6210: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 74 75 72  , then the retur
6220: 6e 20 76 61 6c 75 65 20 69 73 20 6d 65 61 6e 69  n value is meani
6230: 6e 67 6c 65 73 73 0a 2a 2a 20 61 6e 64 20 61 72  ngless.** and ar
6240: 62 69 74 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 56  bitrary..**.** V
6250: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
6260: 6c 65 6d 65 6e 74 73 20 6d 69 67 68 74 20 75 73  lements might us
6270: 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 74  e this routine t
6280: 6f 20 6f 70 74 69 6d 69 7a 65 20 74 68 65 69 72  o optimize their
6290: 0a 2a 2a 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  .** performance 
62a0: 62 79 20 73 75 62 73 74 69 74 75 74 69 6e 67 20  by substituting 
62b0: 61 20 4e 55 4c 4c 20 72 65 73 75 6c 74 2c 20 6f  a NULL result, o
62c0: 72 20 73 6f 6d 65 20 6f 74 68 65 72 20 6c 69 67  r some other lig
62d0: 68 74 2d 77 65 69 67 68 74 0a 2a 2a 20 76 61 6c  ht-weight.** val
62e0: 75 65 2c 20 61 73 20 61 20 73 69 67 6e 61 6c 20  ue, as a signal 
62f0: 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 72  to the xUpdate r
6300: 6f 75 74 69 6e 65 20 74 68 61 74 20 74 68 65 20  outine that the 
6310: 63 6f 6c 75 6d 6e 20 69 73 20 75 6e 63 68 61 6e  column is unchan
6320: 67 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ged..*/.int sqli
6330: 74 65 33 5f 76 74 61 62 5f 6e 6f 63 68 61 6e 67  te3_vtab_nochang
6340: 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
6350: 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74 28  t *p){.  assert(
6360: 20 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 73   p );.  return s
6370: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
6380: 68 61 6e 67 65 28 70 2d 3e 70 4f 75 74 29 3b 0a  hange(p->pOut);.
6390: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
63a0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65  the current time
63b0: 20 66 6f 72 20 61 20 73 74 61 74 65 6d 65 6e 74   for a statement
63c0: 2e 20 20 49 66 20 74 68 65 20 63 75 72 72 65 6e  .  If the curren
63d0: 74 20 74 69 6d 65 0a 2a 2a 20 69 73 20 72 65 71  t time.** is req
63e0: 75 65 73 74 65 64 20 6d 6f 72 65 20 74 68 61 6e  uested more than
63f0: 20 6f 6e 63 65 20 77 69 74 68 69 6e 20 74 68 65   once within the
6400: 20 73 61 6d 65 20 72 75 6e 20 6f 66 20 61 20 73   same run of a s
6410: 69 6e 67 6c 65 20 70 72 65 70 61 72 65 64 0a 2a  ingle prepared.*
6420: 2a 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  * statement, the
6430: 20 65 78 61 63 74 20 73 61 6d 65 20 74 69 6d 65   exact same time
6440: 20 69 73 20 72 65 74 75 72 6e 65 64 20 66 6f 72   is returned for
6450: 20 65 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e   each invocation
6460: 20 72 65 67 61 72 64 6c 65 73 73 0a 2a 2a 20 6f   regardless.** o
6470: 66 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  f the amount of 
6480: 74 69 6d 65 20 74 68 61 74 20 65 6c 61 70 73 65  time that elapse
6490: 73 20 62 65 74 77 65 65 6e 20 69 6e 76 6f 63 61  s between invoca
64a0: 74 69 6f 6e 73 2e 20 20 49 6e 20 6f 74 68 65 72  tions.  In other
64b0: 20 77 6f 72 64 73 2c 0a 2a 2a 20 74 68 65 20 74   words,.** the t
64c0: 69 6d 65 20 72 65 74 75 72 6e 65 64 20 69 73 20  ime returned is 
64d0: 61 6c 77 61 79 73 20 74 68 65 20 74 69 6d 65 20  always the time 
64e0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 63 61 6c  of the first cal
64f0: 6c 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f 69 6e  l..*/.sqlite3_in
6500: 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
6510: 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
6520: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a  e3_context *p){.
6530: 20 20 69 6e 74 20 72 63 3b 0a 23 69 66 6e 64 65    int rc;.#ifnde
6540: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6550: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
6560: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a   sqlite3_int64 *
6570: 70 69 54 69 6d 65 20 3d 20 26 70 2d 3e 70 56 64  piTime = &p->pVd
6580: 62 65 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65  be->iCurrentTime
6590: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 70  ;.  assert( p->p
65a0: 56 64 62 65 21 3d 30 20 29 3b 0a 23 65 6c 73 65  Vdbe!=0 );.#else
65b0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
65c0: 20 69 54 69 6d 65 20 3d 20 30 3b 0a 20 20 73 71   iTime = 0;.  sq
65d0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a 70 69 54  lite3_int64 *piT
65e0: 69 6d 65 20 3d 20 70 2d 3e 70 56 64 62 65 21 3d  ime = p->pVdbe!=
65f0: 30 20 3f 20 26 70 2d 3e 70 56 64 62 65 2d 3e 69  0 ? &p->pVdbe->i
6600: 43 75 72 72 65 6e 74 54 69 6d 65 20 3a 20 26 69  CurrentTime : &i
6610: 54 69 6d 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Time;.#endif.  i
6620: 66 28 20 2a 70 69 54 69 6d 65 3d 3d 30 20 29 7b  f( *piTime==0 ){
6630: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
6640: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 49 6e  3OsCurrentTimeIn
6650: 74 36 34 28 70 2d 3e 70 4f 75 74 2d 3e 64 62 2d  t64(p->pOut->db-
6660: 3e 70 56 66 73 2c 20 70 69 54 69 6d 65 29 3b 0a  >pVfs, piTime);.
6670: 20 20 20 20 69 66 28 20 72 63 20 29 20 2a 70 69      if( rc ) *pi
6680: 54 69 6d 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Time = 0;.  }.  
6690: 72 65 74 75 72 6e 20 2a 70 69 54 69 6d 65 3b 0a  return *piTime;.
66a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
66b0: 61 20 6e 65 77 20 61 67 67 72 65 67 61 74 65 20  a new aggregate 
66c0: 63 6f 6e 74 65 78 74 20 66 6f 72 20 70 20 61 6e  context for p an
66d0: 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  d return a point
66e0: 65 72 20 74 6f 0a 2a 2a 20 69 74 73 20 70 4d 65  er to.** its pMe
66f0: 6d 2d 3e 7a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  m->z element..*/
6700: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
6710: 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 2a 63 72  OINLINE void *cr
6720: 65 61 74 65 41 67 67 43 6f 6e 74 65 78 74 28 73  eateAggContext(s
6730: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
6740: 70 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20  p, int nByte){. 
6750: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 70 2d 3e   Mem *pMem = p->
6760: 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
6770: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
6780: 45 4d 5f 41 67 67 29 3d 3d 30 20 29 3b 0a 20 20  EM_Agg)==0 );.  
6790: 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b 0a  if( nByte<=0 ){.
67a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
67b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b  emSetNull(pMem);
67c0: 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 30  .    pMem->z = 0
67d0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
67e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
67f0: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
6800: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 4d  , nByte);.    pM
6810: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
6820: 41 67 67 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 75  Agg;.    pMem->u
6830: 2e 70 44 65 66 20 3d 20 70 2d 3e 70 46 75 6e 63  .pDef = p->pFunc
6840: 3b 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e  ;.    if( pMem->
6850: 7a 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  z ){.      memse
6860: 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42  t(pMem->z, 0, nB
6870: 79 74 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  yte);.    }.  }.
6880: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29    return (void*)
6890: 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  pMem->z;.}../*.*
68a0: 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72 65  * Allocate or re
68b0: 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67 61  turn the aggrega
68c0: 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 61  te context for a
68d0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20   user function. 
68e0: 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65 78   A new.** contex
68f0: 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f  t is allocated o
6900: 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  n the first call
6910: 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 61  .  Subsequent ca
6920: 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a 2a  lls return the.*
6930: 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20 74  * same context t
6940: 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65 64  hat was returned
6950: 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73 2e   on prior calls.
6960: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
6970: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
6980: 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ext(sqlite3_cont
6990: 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79 74  ext *p, int nByt
69a0: 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20  e){.  assert( p 
69b0: 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70  && p->pFunc && p
69c0: 2d 3e 70 46 75 6e 63 2d 3e 78 46 69 6e 61 6c 69  ->pFunc->xFinali
69d0: 7a 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ze );.  assert( 
69e0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
69f0: 6c 64 28 70 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e  ld(p->pOut->db->
6a00: 6d 75 74 65 78 29 20 29 3b 0a 20 20 74 65 73 74  mutex) );.  test
6a10: 63 61 73 65 28 20 6e 42 79 74 65 3c 30 20 29 3b  case( nByte<0 );
6a20: 0a 20 20 69 66 28 20 28 70 2d 3e 70 4d 65 6d 2d  .  if( (p->pMem-
6a30: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67  >flags & MEM_Agg
6a40: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
6a50: 72 6e 20 63 72 65 61 74 65 41 67 67 43 6f 6e 74  rn createAggCont
6a60: 65 78 74 28 70 2c 20 6e 42 79 74 65 29 3b 0a 20  ext(p, nByte);. 
6a70: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
6a80: 72 6e 20 28 76 6f 69 64 2a 29 70 2d 3e 70 4d 65  rn (void*)p->pMe
6a90: 6d 2d 3e 7a 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  m->z;.  }.}../*.
6aa0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61 75  ** Return the au
6ab0: 78 69 6c 69 61 72 79 20 64 61 74 61 20 70 6f 69  xiliary data poi
6ac0: 6e 74 65 72 2c 20 69 66 20 61 6e 79 2c 20 66 6f  nter, if any, fo
6ad0: 72 20 74 68 65 20 69 41 72 67 27 74 68 20 61 72  r the iArg'th ar
6ae0: 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  gument to.** the
6af0: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
6b00: 65 66 69 6e 65 64 20 62 79 20 70 43 74 78 2e 0a  efined by pCtx..
6b10: 2a 2a 0a 2a 2a 20 54 68 65 20 6c 65 66 74 2d 6d  **.** The left-m
6b20: 6f 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20  ost argument is 
6b30: 30 2e 0a 2a 2a 0a 2a 2a 20 55 6e 64 6f 63 75 6d  0..**.** Undocum
6b40: 65 6e 74 65 64 20 62 65 68 61 76 69 6f 72 3a 20  ented behavior: 
6b50: 20 49 66 20 69 41 72 67 20 69 73 20 6e 65 67 61   If iArg is nega
6b60: 74 69 76 65 20 74 68 65 6e 20 61 63 63 65 73 73  tive then access
6b70: 20 61 20 63 61 63 68 65 20 6f 66 0a 2a 2a 20 61   a cache of.** a
6b80: 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 70 6f  uxiliary data po
6b90: 69 6e 74 65 72 73 20 74 68 61 74 20 69 73 20 61  inters that is a
6ba0: 76 61 69 6c 61 62 6c 65 20 74 6f 20 61 6c 6c 20  vailable to all 
6bb0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 74 68 69 6e  functions within
6bc0: 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 70 72 65   a.** single pre
6bd0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
6be0: 20 20 54 68 65 20 69 41 72 67 20 76 61 6c 75 65    The iArg value
6bf0: 73 20 6d 75 73 74 20 6d 61 74 63 68 2e 0a 2a 2f  s must match..*/
6c00: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 67  .void *sqlite3_g
6c10: 65 74 5f 61 75 78 64 61 74 61 28 73 71 6c 69 74  et_auxdata(sqlit
6c20: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
6c30: 2c 20 69 6e 74 20 69 41 72 67 29 7b 0a 20 20 41  , int iArg){.  A
6c40: 75 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61  uxData *pAuxData
6c50: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ;..  assert( sql
6c60: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
6c70: 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e  pCtx->pOut->db->
6c80: 6d 75 74 65 78 29 20 29 3b 0a 23 69 66 20 53 51  mutex) );.#if SQ
6c90: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
6ca0: 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 66 28  3_OR_STAT4.  if(
6cb0: 20 70 43 74 78 2d 3e 70 56 64 62 65 3d 3d 30 20   pCtx->pVdbe==0 
6cc0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6c 73  ) return 0;.#els
6cd0: 65 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  e.  assert( pCtx
6ce0: 2d 3e 70 56 64 62 65 21 3d 30 20 29 3b 0a 23 65  ->pVdbe!=0 );.#e
6cf0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 41 75 78 44  ndif.  for(pAuxD
6d00: 61 74 61 3d 70 43 74 78 2d 3e 70 56 64 62 65 2d  ata=pCtx->pVdbe-
6d10: 3e 70 41 75 78 44 61 74 61 3b 20 70 41 75 78 44  >pAuxData; pAuxD
6d20: 61 74 61 3b 20 70 41 75 78 44 61 74 61 3d 70 41  ata; pAuxData=pA
6d30: 75 78 44 61 74 61 2d 3e 70 4e 65 78 74 41 75 78  uxData->pNextAux
6d40: 29 7b 0a 20 20 20 20 69 66 28 20 20 70 41 75 78  ){.    if(  pAux
6d50: 44 61 74 61 2d 3e 69 41 75 78 41 72 67 3d 3d 69  Data->iAuxArg==i
6d60: 41 72 67 20 26 26 20 28 70 41 75 78 44 61 74 61  Arg && (pAuxData
6d70: 2d 3e 69 41 75 78 4f 70 3d 3d 70 43 74 78 2d 3e  ->iAuxOp==pCtx->
6d80: 69 4f 70 20 7c 7c 20 69 41 72 67 3c 30 29 20 29  iOp || iArg<0) )
6d90: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 70  {.      return p
6da0: 41 75 78 44 61 74 61 2d 3e 70 41 75 78 3b 0a 20  AuxData->pAux;. 
6db0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
6dc0: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65  n 0;.}../*.** Se
6dd0: 74 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  t the auxiliary 
6de0: 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 6e 64  data pointer and
6df0: 20 64 65 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e   delete function
6e00: 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27 74  , for the iArg't
6e10: 68 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  h.** argument to
6e20: 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
6e30: 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70 43  on defined by pC
6e40: 74 78 2e 20 41 6e 79 20 70 72 65 76 69 6f 75 73  tx. Any previous
6e50: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 64 65 6c   value is.** del
6e60: 65 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  eted by calling 
6e70: 74 68 65 20 64 65 6c 65 74 65 20 66 75 6e 63 74  the delete funct
6e80: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 77 68  ion specified wh
6e90: 65 6e 20 69 74 20 77 61 73 20 73 65 74 2e 0a 2a  en it was set..*
6ea0: 2a 0a 2a 2a 20 54 68 65 20 6c 65 66 74 2d 6d 6f  *.** The left-mo
6eb0: 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 30  st argument is 0
6ec0: 2e 0a 2a 2a 0a 2a 2a 20 55 6e 64 6f 63 75 6d 65  ..**.** Undocume
6ed0: 6e 74 65 64 20 62 65 68 61 76 69 6f 72 3a 20 20  nted behavior:  
6ee0: 49 66 20 69 41 72 67 20 69 73 20 6e 65 67 61 74  If iArg is negat
6ef0: 69 76 65 20 74 68 65 6e 20 6d 61 6b 65 20 74 68  ive then make th
6f00: 65 20 64 61 74 61 20 61 76 61 69 6c 61 62 6c 65  e data available
6f10: 0a 2a 2a 20 74 6f 20 61 6c 6c 20 66 75 6e 63 74  .** to all funct
6f20: 69 6f 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20  ions within the 
6f30: 63 75 72 72 65 6e 74 20 70 72 65 70 61 72 65 64  current prepared
6f40: 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e 67   statement using
6f50: 20 69 41 72 67 20 61 73 20 61 6e 0a 2a 2a 20 61   iArg as an.** a
6f60: 63 63 65 73 73 20 63 6f 64 65 2e 0a 2a 2f 0a 76  ccess code..*/.v
6f70: 6f 69 64 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  oid sqlite3_set_
6f80: 61 75 78 64 61 74 61 28 0a 20 20 73 71 6c 69 74  auxdata(.  sqlit
6f90: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
6fa0: 2c 20 0a 20 20 69 6e 74 20 69 41 72 67 2c 20 0a  , .  int iArg, .
6fb0: 20 20 76 6f 69 64 20 2a 70 41 75 78 2c 20 0a 20    void *pAux, . 
6fc0: 20 76 6f 69 64 20 28 2a 78 44 65 6c 65 74 65 29   void (*xDelete)
6fd0: 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 41 75 78  (void*).){.  Aux
6fe0: 44 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b 0a  Data *pAuxData;.
6ff0: 20 20 56 64 62 65 20 2a 70 56 64 62 65 20 3d 20    Vdbe *pVdbe = 
7000: 70 43 74 78 2d 3e 70 56 64 62 65 3b 0a 0a 20 20  pCtx->pVdbe;..  
7010: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
7020: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
7030: 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78  >pOut->db->mutex
7040: 29 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ) );.#ifdef SQLI
7050: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
7060: 4f 52 5f 53 54 41 54 34 0a 20 20 69 66 28 20 70  OR_STAT4.  if( p
7070: 56 64 62 65 3d 3d 30 20 29 20 67 6f 74 6f 20 66  Vdbe==0 ) goto f
7080: 61 69 6c 65 64 3b 0a 23 65 6c 73 65 0a 20 20 61  ailed;.#else.  a
7090: 73 73 65 72 74 28 20 70 56 64 62 65 21 3d 30 20  ssert( pVdbe!=0 
70a0: 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72  );.#endif..  for
70b0: 28 70 41 75 78 44 61 74 61 3d 70 56 64 62 65 2d  (pAuxData=pVdbe-
70c0: 3e 70 41 75 78 44 61 74 61 3b 20 70 41 75 78 44  >pAuxData; pAuxD
70d0: 61 74 61 3b 20 70 41 75 78 44 61 74 61 3d 70 41  ata; pAuxData=pA
70e0: 75 78 44 61 74 61 2d 3e 70 4e 65 78 74 41 75 78  uxData->pNextAux
70f0: 29 7b 0a 20 20 20 20 69 66 28 20 70 41 75 78 44  ){.    if( pAuxD
7100: 61 74 61 2d 3e 69 41 75 78 41 72 67 3d 3d 69 41  ata->iAuxArg==iA
7110: 72 67 20 26 26 20 28 70 41 75 78 44 61 74 61 2d  rg && (pAuxData-
7120: 3e 69 41 75 78 4f 70 3d 3d 70 43 74 78 2d 3e 69  >iAuxOp==pCtx->i
7130: 4f 70 20 7c 7c 20 69 41 72 67 3c 30 29 20 29 7b  Op || iArg<0) ){
7140: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
7150: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 41    }.  }.  if( pA
7160: 75 78 44 61 74 61 3d 3d 30 20 29 7b 0a 20 20 20  uxData==0 ){.   
7170: 20 70 41 75 78 44 61 74 61 20 3d 20 73 71 6c 69   pAuxData = sqli
7180: 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
7190: 70 56 64 62 65 2d 3e 64 62 2c 20 73 69 7a 65 6f  pVdbe->db, sizeo
71a0: 66 28 41 75 78 44 61 74 61 29 29 3b 0a 20 20 20  f(AuxData));.   
71b0: 20 69 66 28 20 21 70 41 75 78 44 61 74 61 20 29   if( !pAuxData )
71c0: 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 20 20   goto failed;.  
71d0: 20 20 70 41 75 78 44 61 74 61 2d 3e 69 41 75 78    pAuxData->iAux
71e0: 4f 70 20 3d 20 70 43 74 78 2d 3e 69 4f 70 3b 0a  Op = pCtx->iOp;.
71f0: 20 20 20 20 70 41 75 78 44 61 74 61 2d 3e 69 41      pAuxData->iA
7200: 75 78 41 72 67 20 3d 20 69 41 72 67 3b 0a 20 20  uxArg = iArg;.  
7210: 20 20 70 41 75 78 44 61 74 61 2d 3e 70 4e 65 78    pAuxData->pNex
7220: 74 41 75 78 20 3d 20 70 56 64 62 65 2d 3e 70 41  tAux = pVdbe->pA
7230: 75 78 44 61 74 61 3b 0a 20 20 20 20 70 56 64 62  uxData;.    pVdb
7240: 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70 41  e->pAuxData = pA
7250: 75 78 44 61 74 61 3b 0a 20 20 20 20 69 66 28 20  uxData;.    if( 
7260: 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30  pCtx->isError==0
7270: 20 29 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   ) pCtx->isError
7280: 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 20 69   = -1;.  }else i
7290: 66 28 20 70 41 75 78 44 61 74 61 2d 3e 78 44 65  f( pAuxData->xDe
72a0: 6c 65 74 65 41 75 78 20 29 7b 0a 20 20 20 20 70  leteAux ){.    p
72b0: 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65  AuxData->xDelete
72c0: 41 75 78 28 70 41 75 78 44 61 74 61 2d 3e 70 41  Aux(pAuxData->pA
72d0: 75 78 29 3b 0a 20 20 7d 0a 0a 20 20 70 41 75 78  ux);.  }..  pAux
72e0: 44 61 74 61 2d 3e 70 41 75 78 20 3d 20 70 41 75  Data->pAux = pAu
72f0: 78 3b 0a 20 20 70 41 75 78 44 61 74 61 2d 3e 78  x;.  pAuxData->x
7300: 44 65 6c 65 74 65 41 75 78 20 3d 20 78 44 65 6c  DeleteAux = xDel
7310: 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a 0a  ete;.  return;..
7320: 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20 78 44  failed:.  if( xD
7330: 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78 44 65  elete ){.    xDe
7340: 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20 7d 0a  lete(pAux);.  }.
7350: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
7360: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
7370: 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  D./*.** Return t
7380: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
7390: 65 73 20 74 68 65 20 53 74 65 70 20 66 75 6e 63  es the Step func
73a0: 74 69 6f 6e 20 6f 66 20 61 6e 20 61 67 67 72 65  tion of an aggre
73b0: 67 61 74 65 20 68 61 73 20 62 65 65 6e 20 0a 2a  gate has been .*
73c0: 2a 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  * called..**.** 
73d0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
73e0: 20 64 65 70 72 65 63 61 74 65 64 2e 20 20 44 6f   deprecated.  Do
73f0: 20 6e 6f 74 20 75 73 65 20 69 74 20 66 6f 72 20   not use it for 
7400: 6e 65 77 20 63 6f 64 65 2e 20 20 49 74 20 69 73  new code.  It is
7410: 0a 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79  .** provide only
7420: 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b 69   to avoid breaki
7430: 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65 2e 20  ng legacy code. 
7440: 20 4e 65 77 20 61 67 67 72 65 67 61 74 65 20 66   New aggregate f
7450: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65  unction.** imple
7460: 6d 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c  mentations shoul
7470: 64 20 6b 65 65 70 20 74 68 65 69 72 20 6f 77 6e  d keep their own
7480: 20 63 6f 75 6e 74 73 20 77 69 74 68 69 6e 20 74   counts within t
7490: 68 65 69 72 20 61 67 67 72 65 67 61 74 65 0a 2a  heir aggregate.*
74a0: 2a 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e  * context..*/.in
74b0: 74 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  t sqlite3_aggreg
74c0: 61 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65  ate_count(sqlite
74d0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
74e0: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
74f0: 3e 70 4d 65 6d 20 26 26 20 70 2d 3e 70 46 75 6e  >pMem && p->pFun
7500: 63 20 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78  c && p->pFunc->x
7510: 46 69 6e 61 6c 69 7a 65 20 29 3b 0a 20 20 72 65  Finalize );.  re
7520: 74 75 72 6e 20 70 2d 3e 70 4d 65 6d 2d 3e 6e 3b  turn p->pMem->n;
7530: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
7540: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
7550: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
7560: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
7570: 66 6f 72 20 74 68 65 20 73 74 61 74 65 6d 65 6e  for the statemen
7580: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20  t pStmt..*/.int 
7590: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
75a0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  ount(sqlite3_stm
75b0: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
75c0: 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a  e *pVm = (Vdbe *
75d0: 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e  )pStmt;.  return
75e0: 20 70 56 6d 20 3f 20 70 56 6d 2d 3e 6e 52 65 73   pVm ? pVm->nRes
75f0: 43 6f 6c 75 6d 6e 20 3a 20 30 3b 0a 7d 0a 0a 2f  Column : 0;.}../
7600: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
7610: 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73  number of values
7620: 20 61 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d 20   available from 
7630: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
7640: 6f 66 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e  of the.** curren
7650: 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74  tly executing st
7660: 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a  atement pStmt..*
7670: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 61  /.int sqlite3_da
7680: 74 61 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33  ta_count(sqlite3
7690: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
76a0: 20 56 64 62 65 20 2a 70 56 6d 20 3d 20 28 56 64   Vdbe *pVm = (Vd
76b0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66  be *)pStmt;.  if
76c0: 28 20 70 56 6d 3d 3d 30 20 7c 7c 20 70 56 6d 2d  ( pVm==0 || pVm-
76d0: 3e 70 52 65 73 75 6c 74 53 65 74 3d 3d 30 20 29  >pResultSet==0 )
76e0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
76f0: 75 72 6e 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c  urn pVm->nResCol
7700: 75 6d 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  umn;.}../*.** Re
7710: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
7720: 6f 20 73 74 61 74 69 63 20 6d 65 6d 6f 72 79 20  o static memory 
7730: 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e 20 53 51  containing an SQ
7740: 4c 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 2a 2f  L NULL value..*/
7750: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 4d 65  .static const Me
7760: 6d 20 2a 63 6f 6c 75 6d 6e 4e 75 6c 6c 56 61 6c  m *columnNullVal
7770: 75 65 28 76 6f 69 64 29 7b 0a 20 20 2f 2a 20 45  ue(void){.  /* E
7780: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 20 4d  ven though the M
7790: 65 6d 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  em structure con
77a0: 74 61 69 6e 73 20 61 6e 20 65 6c 65 6d 65 6e 74  tains an element
77b0: 0a 20 20 2a 2a 20 6f 66 20 74 79 70 65 20 69 36  .  ** of type i6
77c0: 34 2c 20 6f 6e 20 63 65 72 74 61 69 6e 20 61 72  4, on certain ar
77d0: 63 68 69 74 65 63 74 75 72 65 73 20 28 78 38 36  chitectures (x86
77e0: 29 20 77 69 74 68 20 63 65 72 74 61 69 6e 20 63  ) with certain c
77f0: 6f 6d 70 69 6c 65 72 0a 20 20 2a 2a 20 73 77 69  ompiler.  ** swi
7800: 74 63 68 65 73 20 28 2d 4f 73 29 2c 20 67 63 63  tches (-Os), gcc
7810: 20 6d 61 79 20 61 6c 69 67 6e 20 74 68 69 73 20   may align this 
7820: 4d 65 6d 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20  Mem object on a 
7830: 34 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79 0a  4-byte boundary.
7840: 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20    ** instead of 
7850: 61 6e 20 38 2d 62 79 74 65 20 6f 6e 65 2e 20 54  an 8-byte one. T
7860: 68 69 73 20 61 6c 6c 20 77 6f 72 6b 73 20 66 69  his all works fi
7870: 6e 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  ne, except that 
7880: 77 68 65 6e 0a 20 20 2a 2a 20 72 75 6e 6e 69 6e  when.  ** runnin
7890: 67 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  g with SQLITE_DE
78a0: 42 55 47 20 64 65 66 69 6e 65 64 20 74 68 65 20  BUG defined the 
78b0: 53 51 4c 69 74 65 20 63 6f 64 65 20 73 6f 6d 65  SQLite code some
78c0: 74 69 6d 65 73 20 61 73 73 65 72 74 28 29 73 0a  times assert()s.
78d0: 20 20 2a 2a 20 74 68 61 74 20 61 20 4d 65 6d 20    ** that a Mem 
78e0: 73 74 72 75 63 74 75 72 65 20 69 73 20 6c 6f 63  structure is loc
78f0: 61 74 65 64 20 6f 6e 20 61 6e 20 38 2d 62 79 74  ated on an 8-byt
7900: 65 20 62 6f 75 6e 64 61 72 79 2e 20 54 6f 20 70  e boundary. To p
7910: 72 65 76 65 6e 74 0a 20 20 2a 2a 20 74 68 65 73  revent.  ** thes
7920: 65 20 61 73 73 65 72 74 28 29 73 20 66 72 6f 6d  e assert()s from
7930: 20 66 61 69 6c 69 6e 67 2c 20 77 68 65 6e 20 62   failing, when b
7940: 75 69 6c 64 69 6e 67 20 77 69 74 68 20 53 51 4c  uilding with SQL
7950: 49 54 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65  ITE_DEBUG define
7960: 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 67 63 63  d.  ** using gcc
7970: 2c 20 77 65 20 66 6f 72 63 65 20 6e 75 6c 6c 4d  , we force nullM
7980: 65 6d 20 74 6f 20 62 65 20 38 2d 62 79 74 65 20  em to be 8-byte 
7990: 61 6c 69 67 6e 65 64 20 75 73 69 6e 67 20 74 68  aligned using th
79a0: 65 20 6d 61 67 69 63 61 6c 0a 20 20 2a 2a 20 5f  e magical.  ** _
79b0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c  _attribute__((al
79c0: 69 67 6e 65 64 28 38 29 29 29 20 6d 61 63 72 6f  igned(8))) macro
79d0: 2e 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63  .  */.  static c
79e0: 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65 6d  onst Mem nullMem
79f0: 20 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51   .#if defined(SQ
7a00: 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
7a10: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
7a20: 0a 20 20 20 20 5f 5f 61 74 74 72 69 62 75 74 65  .    __attribute
7a30: 5f 5f 28 28 61 6c 69 67 6e 65 64 28 38 29 29 29  __((aligned(8)))
7a40: 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 3d 20 7b   .#endif.    = {
7a50: 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 75 20 20  .        /* .u  
7a60: 20 20 20 20 20 20 20 20 3d 20 2a 2f 20 7b 30 7d          = */ {0}
7a70: 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 66 6c  ,.        /* .fl
7a80: 61 67 73 20 20 20 20 20 20 3d 20 2a 2f 20 28 75  ags      = */ (u
7a90: 31 36 29 4d 45 4d 5f 4e 75 6c 6c 2c 0a 20 20 20  16)MEM_Null,.   
7aa0: 20 20 20 20 20 2f 2a 20 2e 65 6e 63 20 20 20 20       /* .enc    
7ab0: 20 20 20 20 3d 20 2a 2f 20 28 75 38 29 30 2c 0a      = */ (u8)0,.
7ac0: 20 20 20 20 20 20 20 20 2f 2a 20 2e 65 53 75 62          /* .eSub
7ad0: 74 79 70 65 20 20 20 3d 20 2a 2f 20 28 75 38 29  type   = */ (u8)
7ae0: 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 6e  0,.        /* .n
7af0: 20 20 20 20 20 20 20 20 20 20 3d 20 2a 2f 20 28            = */ (
7b00: 69 6e 74 29 30 2c 0a 20 20 20 20 20 20 20 20 2f  int)0,.        /
7b10: 2a 20 2e 7a 20 20 20 20 20 20 20 20 20 20 3d 20  * .z          = 
7b20: 2a 2f 20 28 63 68 61 72 2a 29 30 2c 0a 20 20 20  */ (char*)0,.   
7b30: 20 20 20 20 20 2f 2a 20 2e 7a 4d 61 6c 6c 6f 63       /* .zMalloc
7b40: 20 20 20 20 3d 20 2a 2f 20 28 63 68 61 72 2a 29      = */ (char*)
7b50: 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 73  0,.        /* .s
7b60: 7a 4d 61 6c 6c 6f 63 20 20 20 3d 20 2a 2f 20 28  zMalloc   = */ (
7b70: 69 6e 74 29 30 2c 0a 20 20 20 20 20 20 20 20 2f  int)0,.        /
7b80: 2a 20 2e 75 54 65 6d 70 20 20 20 20 20 20 3d 20  * .uTemp      = 
7b90: 2a 2f 20 28 75 33 32 29 30 2c 0a 20 20 20 20 20  */ (u32)0,.     
7ba0: 20 20 20 2f 2a 20 2e 64 62 20 20 20 20 20 20 20     /* .db       
7bb0: 20 20 3d 20 2a 2f 20 28 73 71 6c 69 74 65 33 2a    = */ (sqlite3*
7bc0: 29 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e  )0,.        /* .
7bd0: 78 44 65 6c 20 20 20 20 20 20 20 3d 20 2a 2f 20  xDel       = */ 
7be0: 28 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29  (void(*)(void*))
7bf0: 30 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0,.#ifdef SQLITE
7c00: 5f 44 45 42 55 47 0a 20 20 20 20 20 20 20 20 2f  _DEBUG.        /
7c10: 2a 20 2e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  * .pScopyFrom = 
7c20: 2a 2f 20 28 4d 65 6d 2a 29 30 2c 0a 20 20 20 20  */ (Mem*)0,.    
7c30: 20 20 20 20 2f 2a 20 2e 6d 53 63 6f 70 79 46 6c      /* .mScopyFl
7c40: 61 67 73 3d 20 2a 2f 20 30 2c 0a 23 65 6e 64 69  ags= */ 0,.#endi
7c50: 66 0a 20 20 20 20 20 20 7d 3b 0a 20 20 72 65 74  f.      };.  ret
7c60: 75 72 6e 20 26 6e 75 6c 6c 4d 65 6d 3b 0a 7d 0a  urn &nullMem;.}.
7c70: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
7c80: 73 65 65 20 69 66 20 63 6f 6c 75 6d 6e 20 69 43  see if column iC
7c90: 6f 6c 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20  ol of the given 
7ca0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 76 61 6c  statement is val
7cb0: 69 64 2e 20 20 49 66 0a 2a 2a 20 69 74 20 69 73  id.  If.** it is
7cc0: 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  , return a point
7cd0: 65 72 20 74 6f 20 74 68 65 20 4d 65 6d 20 66 6f  er to the Mem fo
7ce0: 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  r the value of t
7cf0: 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 49  hat column..** I
7d00: 66 20 69 43 6f 6c 20 69 73 20 6e 6f 74 20 76 61  f iCol is not va
7d10: 6c 69 64 2c 20 72 65 74 75 72 6e 20 61 20 70 6f  lid, return a po
7d20: 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 77  inter to a Mem w
7d30: 68 69 63 68 20 68 61 73 20 61 20 76 61 6c 75 65  hich has a value
7d40: 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a 2a 2f 0a  .** of NULL..*/.
7d50: 73 74 61 74 69 63 20 4d 65 6d 20 2a 63 6f 6c 75  static Mem *colu
7d60: 6d 6e 4d 65 6d 28 73 71 6c 69 74 65 33 5f 73 74  mnMem(sqlite3_st
7d70: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
7d80: 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 3b 0a  ){.  Vdbe *pVm;.
7d90: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20    Mem *pOut;..  
7da0: 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53  pVm = (Vdbe *)pS
7db0: 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 3d 3d  tmt;.  if( pVm==
7dc0: 30 20 29 20 72 65 74 75 72 6e 20 28 4d 65 6d 2a  0 ) return (Mem*
7dd0: 29 63 6f 6c 75 6d 6e 4e 75 6c 6c 56 61 6c 75 65  )columnNullValue
7de0: 28 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  ();.  assert( pV
7df0: 6d 2d 3e 64 62 20 29 3b 0a 20 20 73 71 6c 69 74  m->db );.  sqlit
7e00: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
7e10: 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  Vm->db->mutex);.
7e20: 20 20 69 66 28 20 70 56 6d 2d 3e 70 52 65 73 75    if( pVm->pResu
7e30: 6c 74 53 65 74 21 3d 30 20 26 26 20 69 3c 70 56  ltSet!=0 && i<pV
7e40: 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 20 26 26  m->nResColumn &&
7e50: 20 69 3e 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75   i>=0 ){.    pOu
7e60: 74 20 3d 20 26 70 56 6d 2d 3e 70 52 65 73 75 6c  t = &pVm->pResul
7e70: 74 53 65 74 5b 69 5d 3b 0a 20 20 7d 65 6c 73 65  tSet[i];.  }else
7e80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
7e90: 6f 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49  or(pVm->db, SQLI
7ea0: 54 45 5f 52 41 4e 47 45 29 3b 0a 20 20 20 20 70  TE_RANGE);.    p
7eb0: 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 63 6f 6c 75  Out = (Mem*)colu
7ec0: 6d 6e 4e 75 6c 6c 56 61 6c 75 65 28 29 3b 0a 20  mnNullValue();. 
7ed0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74   }.  return pOut
7ee0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
7ef0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
7f00: 65 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e  ed after invokin
7f10: 67 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  g an sqlite3_val
7f20: 75 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  ue_XXX function 
7f30: 6f 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  on a .** column 
7f40: 76 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61  value (i.e. a va
7f50: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
7f60: 65 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51  evaluating an SQ
7f70: 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  L expression in 
7f80: 74 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69  the.** select li
7f90: 73 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  st of a SELECT s
7fa0: 74 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d  tatement) that m
7fb0: 61 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f  ay cause a mallo
7fc0: 63 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20  c() failure. If 
7fd0: 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  .** malloc() has
7fe0: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72   failed, the thr
7ff0: 65 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65  eads mallocFaile
8000: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
8010: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
8020: 0a 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74  .** code of stat
8030: 65 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20  ement pStmt set 
8040: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  to SQLITE_NOMEM.
8050: 0a 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61  .**.** Specifica
8060: 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c  lly, this is cal
8070: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a  led from within:
8080: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  .**.**     sqlit
8090: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a  e3_column_int().
80a0: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
80b0: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a  olumn_int64().**
80c0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
80d0: 75 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20  umn_text().**   
80e0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
80f0: 5f 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20  _text16().**    
8100: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8110: 72 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71  real().**     sq
8120: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
8130: 65 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  es().**     sqli
8140: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
8150: 31 36 28 29 0a 2a 2a 20 20 20 20 20 73 71 69 69  16().**     sqii
8160: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
8170: 29 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ).*/.static void
8180: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
8190: 6c 75 72 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  lure(sqlite3_stm
81a0: 74 20 2a 70 53 74 6d 74 29 0a 7b 0a 20 20 2f 2a  t *pStmt).{.  /*
81b0: 20 49 66 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69   If malloc() fai
81c0: 6c 65 64 20 64 75 72 69 6e 67 20 61 6e 20 65 6e  led during an en
81d0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  coding conversio
81e0: 6e 20 77 69 74 68 69 6e 20 61 6e 0a 20 20 2a 2a  n within an.  **
81f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8200: 58 58 58 20 41 50 49 2c 20 74 68 65 6e 20 73 65  XXX API, then se
8210: 74 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64  t the return cod
8220: 65 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  e of the stateme
8230: 6e 74 20 74 6f 0a 20 20 2a 2a 20 53 51 4c 49 54  nt to.  ** SQLIT
8240: 45 5f 4e 4f 4d 45 4d 2e 20 54 68 65 20 6e 65 78  E_NOMEM. The nex
8250: 74 20 63 61 6c 6c 20 74 6f 20 5f 73 74 65 70 28  t call to _step(
8260: 29 20 28 69 66 20 61 6e 79 29 20 77 69 6c 6c 20  ) (if any) will 
8270: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
8280: 52 4f 52 0a 20 20 2a 2a 20 61 6e 64 20 5f 66 69  ROR.  ** and _fi
8290: 6e 61 6c 69 7a 65 28 29 20 77 69 6c 6c 20 72 65  nalize() will re
82a0: 74 75 72 6e 20 4e 4f 4d 45 4d 2e 0a 20 20 2a 2f  turn NOMEM..  */
82b0: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
82c0: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66  be *)pStmt;.  if
82d0: 28 20 70 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ( p ){.    asser
82e0: 74 28 20 70 2d 3e 64 62 21 3d 30 20 29 3b 0a 20  t( p->db!=0 );. 
82f0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
8300: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d  e3_mutex_held(p-
8310: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
8320: 20 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74     p->rc = sqlit
8330: 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c  e3ApiExit(p->db,
8340: 20 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c   p->rc);.    sql
8350: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
8360: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
8370: 20 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a    }.}../********
8380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8390: 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  **** sqlite3_col
83a0: 75 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  umn_  **********
83b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
83c0: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
83d0: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
83e0: 61 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  are used to acce
83f0: 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74  ss elements of t
8400: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a  he current row.*
8410: 2a 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  * in the result 
8420: 73 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f  set..*/.const vo
8430: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
8440: 6d 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f  mn_blob(sqlite3_
8450: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
8460: 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i){.  const voi
8470: 64 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20  d *val;.  val = 
8480: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
8490: 6f 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  ob( columnMem(pS
84a0: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45  tmt,i) );.  /* E
84b0: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65  ven though there
84c0: 20 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20   is no encoding 
84d0: 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75  conversion, valu
84e0: 65 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20  e_blob() might. 
84f0: 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c   ** need to call
8500: 20 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70   malloc() to exp
8510: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f  and the result o
8520: 66 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a  f a zeroblob() .
8530: 20 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e    ** expression.
8540: 20 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d   .  */.  columnM
8550: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
8560: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
8570: 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  l;.}.int sqlite3
8580: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71  _column_bytes(sq
8590: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
85a0: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
85b0: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
85c0: 61 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75  alue_bytes( colu
85d0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
85e0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
85f0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
8600: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
8610: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  int sqlite3_colu
8620: 6d 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74  mn_bytes16(sqlit
8630: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
8640: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61  int i){.  int va
8650: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
8660: 65 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d  e_bytes16( colum
8670: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
8680: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
8690: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
86a0: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64   return val;.}.d
86b0: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f  ouble sqlite3_co
86c0: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69  lumn_double(sqli
86d0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
86e0: 20 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c   int i){.  doubl
86f0: 65 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  e val = sqlite3_
8700: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f  value_double( co
8710: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
8720: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
8730: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
8740: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
8750: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  }.int sqlite3_co
8760: 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33  lumn_int(sqlite3
8770: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
8780: 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20  t i){.  int val 
8790: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
87a0: 69 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  int( columnMem(p
87b0: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
87c0: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
87d0: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
87e0: 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f  n val;.}.sqlite_
87f0: 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f  int64 sqlite3_co
8800: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74  lumn_int64(sqlit
8810: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
8820: 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65  int i){.  sqlite
8830: 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c  _int64 val = sql
8840: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
8850: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
8860: 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e  t,i) );.  column
8870: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
8880: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
8890: 61 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69  al;.}.const unsi
88a0: 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74  gned char *sqlit
88b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
88c0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
88d0: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f  mt, int i){.  co
88e0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
88f0: 72 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  r *val = sqlite3
8900: 5f 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c  _value_text( col
8910: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
8920: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
8930: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
8940: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
8950: 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
8960: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76  sqlite3_column_v
8970: 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  alue(sqlite3_stm
8980: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
8990: 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  {.  Mem *pOut = 
89a0: 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c  columnMem(pStmt,
89b0: 20 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d   i);.  if( pOut-
89c0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69  >flags&MEM_Stati
89d0: 63 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  c ){.    pOut->f
89e0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61  lags &= ~MEM_Sta
89f0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
8a00: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65  lags |= MEM_Ephe
8a10: 6d 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d  m;.  }.  columnM
8a20: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
8a30: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73  mt);.  return (s
8a40: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70  qlite3_value *)p
8a50: 4f 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  Out;.}.#ifndef S
8a60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
8a70: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
8a80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
8a90: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
8aa0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
8ab0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61    const void *va
8ac0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
8ad0: 65 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e  e_text16( column
8ae0: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
8af0: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
8b00: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
8b10: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65  return val;.}.#e
8b20: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
8b30: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74  MIT_UTF16 */.int
8b40: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
8b50: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  type(sqlite3_stm
8b60: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
8b70: 7b 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20  {.  int iType = 
8b80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
8b90: 70 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  pe( columnMem(pS
8ba0: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
8bb0: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
8bc0: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
8bd0: 20 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   iType;.}../*.**
8be0: 20 43 6f 6e 76 65 72 74 20 74 68 65 20 4e 2d 74   Convert the N-t
8bf0: 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 70 53 74  h element of pSt
8c00: 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65 5b 5d 20 69  mt->pColName[] i
8c10: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69  nto a string usi
8c20: 6e 67 0a 2a 2a 20 78 46 75 6e 63 28 29 20 74 68  ng.** xFunc() th
8c30: 65 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20 73  en return that s
8c40: 74 72 69 6e 67 2e 20 20 49 66 20 4e 20 69 73 20  tring.  If N is 
8c50: 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72 65  out of range, re
8c60: 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  turn 0..**.** Th
8c70: 65 72 65 20 61 72 65 20 75 70 20 74 6f 20 35 20  ere are up to 5 
8c80: 6e 61 6d 65 73 20 66 6f 72 20 65 61 63 68 20 63  names for each c
8c90: 6f 6c 75 6d 6e 2e 20 20 75 73 65 54 79 70 65 20  olumn.  useType 
8ca0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 69 63 68  determines which
8cb0: 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 72 65 74 75  .** name is retu
8cc0: 72 6e 65 64 2e 20 20 48 65 72 65 20 61 72 65 20  rned.  Here are 
8cd0: 74 68 65 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  the names:.**.**
8ce0: 20 20 20 20 30 20 20 20 20 20 20 54 68 65 20 63      0      The c
8cf0: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 73 20 69 74  olumn name as it
8d00: 20 73 68 6f 75 6c 64 20 62 65 20 64 69 73 70 6c   should be displ
8d10: 61 79 65 64 20 66 6f 72 20 6f 75 74 70 75 74 0a  ayed for output.
8d20: 2a 2a 20 20 20 20 31 20 20 20 20 20 20 54 68 65  **    1      The
8d30: 20 64 61 74 61 74 79 70 65 20 6e 61 6d 65 20 66   datatype name f
8d40: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 2a 2a  or the column.**
8d50: 20 20 20 20 32 20 20 20 20 20 20 54 68 65 20 6e      2      The n
8d60: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
8d70: 61 73 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c  ase that the col
8d80: 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d  umn derives from
8d90: 0a 2a 2a 20 20 20 20 33 20 20 20 20 20 20 54 68  .**    3      Th
8da0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
8db0: 62 6c 65 20 74 68 61 74 20 74 68 65 20 63 6f 6c  ble that the col
8dc0: 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d  umn derives from
8dd0: 0a 2a 2a 20 20 20 20 34 20 20 20 20 20 20 54 68  .**    4      Th
8de0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
8df0: 62 6c 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  ble column that 
8e00: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
8e10: 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a 2a  n derives from.*
8e20: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75  *.** If the resu
8e30: 6c 74 20 69 73 20 6e 6f 74 20 61 20 73 69 6d 70  lt is not a simp
8e40: 6c 65 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  le column refere
8e50: 6e 63 65 20 28 69 66 20 69 74 20 69 73 20 61 6e  nce (if it is an
8e60: 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 6f   expression.** o
8e70: 72 20 61 20 63 6f 6e 73 74 61 6e 74 29 20 74 68  r a constant) th
8e80: 65 6e 20 75 73 65 54 79 70 65 73 20 32 2c 20 33  en useTypes 2, 3
8e90: 2c 20 61 6e 64 20 34 20 72 65 74 75 72 6e 20 4e  , and 4 return N
8ea0: 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ULL..*/.static c
8eb0: 6f 6e 73 74 20 76 6f 69 64 20 2a 63 6f 6c 75 6d  onst void *colum
8ec0: 6e 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74 65 33  nName(.  sqlite3
8ed0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20  _stmt *pStmt,   
8ee0: 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 6d 65    /* The stateme
8ef0: 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 4e 2c 20 20  nt */.  int N,  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f10: 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
8f20: 20 74 6f 20 67 65 74 20 74 68 65 20 6e 61 6d 65   to get the name
8f30: 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 75 73   for */.  int us
8f40: 65 55 74 66 31 36 2c 20 20 20 20 20 20 20 20 20  eUtf16,         
8f50: 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 72 65     /* True to re
8f60: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 61 73  turn the name as
8f70: 20 55 54 46 31 36 20 2a 2f 0a 20 20 69 6e 74 20   UTF16 */.  int 
8f80: 75 73 65 54 79 70 65 20 20 20 20 20 20 20 20 20  useType         
8f90: 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 79 70       /* What typ
8fa0: 65 20 6f 66 20 6e 61 6d 65 20 2a 2f 0a 29 7b 0a  e of name */.){.
8fb0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 72 65    const void *re
8fc0: 74 3b 0a 20 20 56 64 62 65 20 2a 70 3b 0a 20 20  t;.  Vdbe *p;.  
8fd0: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
8fe0: 20 2a 64 62 3b 0a 23 69 66 64 65 66 20 53 51 4c   *db;.#ifdef SQL
8ff0: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
9000: 52 4d 4f 52 0a 20 20 69 66 28 20 70 53 74 6d 74  RMOR.  if( pStmt
9010: 3d 3d 30 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  ==0 ){.    (void
9020: 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42  )SQLITE_MISUSE_B
9030: 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  KPT;.    return 
9040: 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  0;.  }.#endif.  
9050: 72 65 74 20 3d 20 30 3b 0a 20 20 70 20 3d 20 28  ret = 0;.  p = (
9060: 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20  Vdbe *)pStmt;.  
9070: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 61 73  db = p->db;.  as
9080: 73 65 72 74 28 20 64 62 21 3d 30 20 29 3b 0a 20  sert( db!=0 );. 
9090: 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c   n = sqlite3_col
90a0: 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  umn_count(pStmt)
90b0: 3b 0a 20 20 69 66 28 20 4e 3c 6e 20 26 26 20 4e  ;.  if( N<n && N
90c0: 3e 3d 30 20 29 7b 0a 20 20 20 20 4e 20 2b 3d 20  >=0 ){.    N += 
90d0: 75 73 65 54 79 70 65 2a 6e 3b 0a 20 20 20 20 73  useType*n;.    s
90e0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
90f0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
9100: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
9110: 61 6c 6c 6f 63 46 61 69 6c 65 64 3d 3d 30 20 29  allocFailed==0 )
9120: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
9130: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
9140: 69 66 28 20 75 73 65 55 74 66 31 36 20 29 7b 0a  if( useUtf16 ){.
9150: 20 20 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69        ret = sqli
9160: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
9170: 28 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  ((sqlite3_value*
9180: 29 26 70 2d 3e 61 43 6f 6c 4e 61 6d 65 5b 4e 5d  )&p->aColName[N]
9190: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 23 65 6e  );.    }else.#en
91a0: 64 69 66 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  dif.    {.      
91b0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  ret = sqlite3_va
91c0: 6c 75 65 5f 74 65 78 74 28 28 73 71 6c 69 74 65  lue_text((sqlite
91d0: 33 5f 76 61 6c 75 65 2a 29 26 70 2d 3e 61 43 6f  3_value*)&p->aCo
91e0: 6c 4e 61 6d 65 5b 4e 5d 29 3b 0a 20 20 20 20 7d  lName[N]);.    }
91f0: 0a 20 20 20 20 2f 2a 20 41 20 6d 61 6c 6c 6f 63  .    /* A malloc
9200: 20 6d 61 79 20 68 61 76 65 20 66 61 69 6c 65 64   may have failed
9210: 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 5f   inside of the _
9220: 74 65 78 74 28 29 20 63 61 6c 6c 2e 20 49 66 20  text() call. If 
9230: 74 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 74  this.    ** is t
9240: 68 65 20 63 61 73 65 2c 20 63 6c 65 61 72 20 74  he case, clear t
9250: 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  he mallocFailed 
9260: 66 6c 61 67 20 61 6e 64 20 72 65 74 75 72 6e 20  flag and return 
9270: 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
9280: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
9290: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 73  ailed ){.      s
92a0: 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 64  qlite3OomClear(d
92b0: 62 29 3b 0a 20 20 20 20 20 20 72 65 74 20 3d 20  b);.      ret = 
92c0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  0;.    }.    sql
92d0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
92e0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  (db->mutex);.  }
92f0: 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d  .  return ret;.}
9300: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
9310: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e  he name of the N
9320: 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  th column of the
9330: 20 72 65 73 75 6c 74 20 73 65 74 20 72 65 74 75   result set retu
9340: 72 6e 65 64 20 62 79 20 53 51 4c 0a 2a 2a 20 73  rned by SQL.** s
9350: 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a  tatement pStmt..
9360: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
9370: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
9380: 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  me(sqlite3_stmt 
9390: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
93a0: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
93b0: 61 6d 65 28 70 53 74 6d 74 2c 20 4e 2c 20 30 2c  ame(pStmt, N, 0,
93c0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a   COLNAME_NAME);.
93d0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
93e0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73  _OMIT_UTF16.cons
93f0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
9400: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 71  column_name16(sq
9410: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
9420: 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74  t, int N){.  ret
9430: 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 70  urn columnName(p
9440: 53 74 6d 74 2c 20 4e 2c 20 31 2c 20 43 4f 4c 4e  Stmt, N, 1, COLN
9450: 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 65 6e  AME_NAME);.}.#en
9460: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
9470: 72 61 69 6e 74 3a 20 20 49 66 20 79 6f 75 20 68  raint:  If you h
9480: 61 76 65 20 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ave ENABLE_COLUM
9490: 4e 5f 4d 45 54 41 44 41 54 41 20 74 68 65 6e 20  N_METADATA then 
94a0: 79 6f 75 20 6d 75 73 74 0a 2a 2a 20 6e 6f 74 20  you must.** not 
94b0: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 44 45 43 4c  define OMIT_DECL
94c0: 54 59 50 45 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  TYPE..*/.#if def
94d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
94e0: 5f 44 45 43 4c 54 59 50 45 29 20 26 26 20 64 65  _DECLTYPE) && de
94f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
9500: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
9510: 41 54 41 29 0a 23 20 65 72 72 6f 72 20 22 4d 75  ATA).# error "Mu
9520: 73 74 20 6e 6f 74 20 64 65 66 69 6e 65 20 62 6f  st not define bo
9530: 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  th SQLITE_OMIT_D
9540: 45 43 4c 54 59 50 45 20 5c 0a 20 20 20 20 20 20  ECLTYPE \.      
9550: 20 20 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e     and SQLITE_EN
9560: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
9570: 44 41 54 41 22 0a 23 65 6e 64 69 66 0a 0a 23 69  DATA".#endif..#i
9580: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9590: 54 5f 44 45 43 4c 54 59 50 45 0a 2f 2a 0a 2a 2a  T_DECLTYPE./*.**
95a0: 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6c 75   Return the colu
95b0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
95c0: 79 70 65 20 28 69 66 20 61 70 70 6c 69 63 61 62  ype (if applicab
95d0: 6c 65 29 20 6f 66 20 74 68 65 20 27 69 27 74 68  le) of the 'i'th
95e0: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6f 66 20 74 68   column.** of th
95f0: 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
9600: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 70 53  SQL statement pS
9610: 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  tmt..*/.const ch
9620: 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar *sqlite3_colu
9630: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 71 6c 69  mn_decltype(sqli
9640: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
9650: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
9660: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 70 53 74  n columnName(pSt
9670: 6d 74 2c 20 4e 2c 20 30 2c 20 43 4f 4c 4e 41 4d  mt, N, 0, COLNAM
9680: 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a 23  E_DECLTYPE);.}.#
9690: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
96a0: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
96b0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
96c0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 28 73  umn_decltype16(s
96d0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
96e0: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
96f0: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
9700: 70 53 74 6d 74 2c 20 4e 2c 20 31 2c 20 43 4f 4c  pStmt, N, 1, COL
9710: 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a  NAME_DECLTYPE);.
9720: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
9730: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
9740: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
9750: 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20  E_OMIT_DECLTYPE 
9760: 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  */..#ifdef SQLIT
9770: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
9780: 4d 45 54 41 44 41 54 41 0a 2f 2a 0a 2a 2a 20 52  METADATA./*.** R
9790: 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f  eturn the name o
97a0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
97b0: 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73 75  rom which a resu
97c0: 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65  lt column derive
97d0: 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65  s..** NULL is re
97e0: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 72 65  turned if the re
97f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61  sult column is a
9800: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  n expression or 
9810: 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61  constant or.** a
9820: 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69  nything else whi
9830: 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61  ch is not an una
9840: 6d 62 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e  mbiguous referen
9850: 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  ce to a database
9860: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73   column..*/.cons
9870: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
9880: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
9890: 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  name(sqlite3_stm
98a0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
98b0: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
98c0: 6e 4e 61 6d 65 28 70 53 74 6d 74 2c 20 4e 2c 20  nName(pStmt, N, 
98d0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42  0, COLNAME_DATAB
98e0: 41 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20  ASE);.}.#ifndef 
98f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
9900: 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  6.const void *sq
9910: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
9920: 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73 71 6c  abase_name16(sql
9930: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
9940: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
9950: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 70 53  rn columnName(pS
9960: 74 6d 74 2c 20 4e 2c 20 31 2c 20 43 4f 4c 4e 41  tmt, N, 1, COLNA
9970: 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a  ME_DATABASE);.}.
9980: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
9990: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
99a0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
99b0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
99c0: 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20  le from which a 
99d0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65  result column de
99e0: 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69  rives..** NULL i
99f0: 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
9a00: 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
9a10: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
9a20: 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a   or constant or.
9a30: 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65  ** anything else
9a40: 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e   which is not an
9a50: 20 75 6e 61 6d 62 69 67 75 6f 75 73 20 72 65 66   unambiguous ref
9a60: 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61  erence to a data
9a70: 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  base column..*/.
9a80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
9a90: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
9aa0: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
9ab0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
9ac0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
9ad0: 6d 6e 4e 61 6d 65 28 70 53 74 6d 74 2c 20 4e 2c  mnName(pStmt, N,
9ae0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c   0, COLNAME_TABL
9af0: 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  E);.}.#ifndef SQ
9b00: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
9b10: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
9b20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
9b30: 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f  _name16(sqlite3_
9b40: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
9b50: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f   N){.  return co
9b60: 6c 75 6d 6e 4e 61 6d 65 28 70 53 74 6d 74 2c 20  lumnName(pStmt, 
9b70: 4e 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41  N, 1, COLNAME_TA
9b80: 42 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  BLE);.}.#endif /
9b90: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
9ba0: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65  F16 */../*.** Re
9bb0: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
9bc0: 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d   the table colum
9bd0: 6e 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72  n from which a r
9be0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72  esult column der
9bf0: 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73  ives..** NULL is
9c00: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
9c10: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
9c20: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
9c30: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a  or constant or.*
9c40: 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20  * anything else 
9c50: 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20  which is not an 
9c60: 75 6e 61 6d 62 69 67 75 6f 75 73 20 72 65 66 65  unambiguous refe
9c70: 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62  rence to a datab
9c80: 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63  ase column..*/.c
9c90: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
9ca0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
9cb0: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
9cc0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
9cd0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
9ce0: 6d 6e 4e 61 6d 65 28 70 53 74 6d 74 2c 20 4e 2c  mnName(pStmt, N,
9cf0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55   0, COLNAME_COLU
9d00: 4d 4e 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  MN);.}.#ifndef S
9d10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
9d20: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
9d30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
9d40: 69 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65  in_name16(sqlite
9d50: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
9d60: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
9d70: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 70 53 74 6d 74  columnName(pStmt
9d80: 2c 20 4e 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  , N, 1, COLNAME_
9d90: 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 65 6e 64 69  COLUMN);.}.#endi
9da0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
9db0: 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64 69 66  _UTF16 */.#endif
9dc0: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
9dd0: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
9de0: 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  A */.../********
9df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
9e00: 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f  ******* sqlite3_
9e10: 62 69 6e 64 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  bind_  *********
9e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
9e30: 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52 6f 75 74 69 6e  **.** .** Routin
9e40: 65 73 20 75 73 65 64 20 74 6f 20 61 74 74 61 63  es used to attac
9e50: 68 20 76 61 6c 75 65 73 20 74 6f 20 77 69 6c 64  h values to wild
9e60: 63 61 72 64 73 20 69 6e 20 61 20 63 6f 6d 70 69  cards in a compi
9e70: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
9e80: 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 55 6e 62 69  t..*/./*.** Unbi
9e90: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 62 6f 75  nd the value bou
9ea0: 6e 64 20 74 6f 20 76 61 72 69 61 62 6c 65 20 69  nd to variable i
9eb0: 20 69 6e 20 76 69 72 74 75 61 6c 20 6d 61 63 68   in virtual mach
9ec0: 69 6e 65 20 70 2e 20 54 68 69 73 20 69 73 20 74  ine p. This is t
9ed0: 68 65 20 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  he .** the same 
9ee0: 61 73 20 62 69 6e 64 69 6e 67 20 61 20 4e 55 4c  as binding a NUL
9ef0: 4c 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 63  L value to the c
9f00: 6f 6c 75 6d 6e 2e 20 49 66 20 74 68 65 20 22 69  olumn. If the "i
9f10: 22 20 70 61 72 61 6d 65 74 65 72 20 69 73 0a 2a  " parameter is.*
9f20: 2a 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20  * out of range, 
9f30: 74 68 65 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47  then SQLITE_RANG
9f40: 45 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f  E is returned. O
9f50: 74 68 65 77 69 73 65 20 53 51 4c 49 54 45 5f 4f  thewise SQLITE_O
9f60: 4b 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 75 63 63 65  K..**.** A succe
9f70: 73 73 66 75 6c 20 65 76 61 6c 75 61 74 69 6f 6e  ssful evaluation
9f80: 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   of this routine
9f90: 20 61 63 71 75 69 72 65 73 20 74 68 65 20 6d 75   acquires the mu
9fa0: 74 65 78 20 6f 6e 20 70 2e 0a 2a 2a 20 74 68 65  tex on p..** the
9fb0: 20 6d 75 74 65 78 20 69 73 20 72 65 6c 65 61 73   mutex is releas
9fc0: 65 64 20 69 66 20 61 6e 79 20 6b 69 6e 64 20 6f  ed if any kind o
9fd0: 66 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2e 0a  f error occurs..
9fe0: 2a 2a 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20  **.** The error 
9ff0: 63 6f 64 65 20 73 74 6f 72 65 64 20 69 6e 20 64  code stored in d
a000: 61 74 61 62 61 73 65 20 70 2d 3e 64 62 20 69 73  atabase p->db is
a010: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74   overwritten wit
a020: 68 20 74 68 65 20 72 65 74 75 72 6e 0a 2a 2a 20  h the return.** 
a030: 76 61 6c 75 65 20 69 6e 20 61 6e 79 20 63 61 73  value in any cas
a040: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
a050: 20 76 64 62 65 55 6e 62 69 6e 64 28 56 64 62 65   vdbeUnbind(Vdbe
a060: 20 2a 70 2c 20 69 6e 74 20 69 29 7b 0a 20 20 4d   *p, int i){.  M
a070: 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20  em *pVar;.  if( 
a080: 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e 75 6c  vdbeSafetyNotNul
a090: 6c 28 70 29 20 29 7b 0a 20 20 20 20 72 65 74 75  l(p) ){.    retu
a0a0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
a0b0: 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73 71 6c  _BKPT;.  }.  sql
a0c0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
a0d0: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
a0e0: 20 20 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d    if( p->magic!=
a0f0: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 7c  VDBE_MAGIC_RUN |
a100: 7c 20 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20  | p->pc>=0 ){.  
a110: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70    sqlite3Error(p
a120: 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4d 49 53  ->db, SQLITE_MIS
a130: 55 53 45 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  USE);.    sqlite
a140: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
a150: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
a160: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 53 51 4c   sqlite3_log(SQL
a170: 49 54 45 5f 4d 49 53 55 53 45 2c 20 0a 20 20 20  ITE_MISUSE, .   
a180: 20 20 20 20 20 22 62 69 6e 64 20 6f 6e 20 61 20       "bind on a 
a190: 62 75 73 79 20 70 72 65 70 61 72 65 64 20 73 74  busy prepared st
a1a0: 61 74 65 6d 65 6e 74 3a 20 5b 25 73 5d 22 2c 20  atement: [%s]", 
a1b0: 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 20 20 72 65  p->zSql);.    re
a1c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
a1d0: 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69  SE_BKPT;.  }.  i
a1e0: 66 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e  f( i<1 || i>p->n
a1f0: 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Var ){.    sqlit
a200: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53  e3Error(p->db, S
a210: 51 4c 49 54 45 5f 52 41 4e 47 45 29 3b 0a 20 20  QLITE_RANGE);.  
a220: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
a230: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
a240: 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ex);.    return 
a250: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a 20 20  SQLITE_RANGE;.  
a260: 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61 72 20  }.  i--;.  pVar 
a270: 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b 0a 20  = &p->aVar[i];. 
a280: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
a290: 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a 20 20  elease(pVar);.  
a2a0: 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pVar->flags = ME
a2b0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 2d 3e 64 62 2d  M_Null;.  p->db-
a2c0: 3e 65 72 72 43 6f 64 65 20 3d 20 53 51 4c 49 54  >errCode = SQLIT
a2d0: 45 5f 4f 4b 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  E_OK;..  /* If t
a2e0: 68 65 20 62 69 74 20 63 6f 72 72 65 73 70 6f 6e  he bit correspon
a2f0: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 76 61 72  ding to this var
a300: 69 61 62 6c 65 20 69 6e 20 56 64 62 65 2e 65 78  iable in Vdbe.ex
a310: 70 6d 61 73 6b 20 69 73 20 73 65 74 2c 20 74 68  pmask is set, th
a320: 65 6e 20 0a 20 20 2a 2a 20 62 69 6e 64 69 6e 67  en .  ** binding
a330: 20 61 20 6e 65 77 20 76 61 6c 75 65 20 74 6f 20   a new value to 
a340: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 6e  this variable in
a350: 76 61 6c 69 64 61 74 65 73 20 74 68 65 20 63 75  validates the cu
a360: 72 72 65 6e 74 20 71 75 65 72 79 20 70 6c 61 6e  rrent query plan
a370: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c  ..  **.  ** IMPL
a380: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
a390: 2d 34 38 34 34 30 2d 33 37 35 39 35 20 49 66 20  -48440-37595 If 
a3a0: 74 68 65 20 73 70 65 63 69 66 69 63 20 76 61 6c  the specific val
a3b0: 75 65 20 62 6f 75 6e 64 20 74 6f 20 68 6f 73 74  ue bound to host
a3c0: 0a 20 20 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  .  ** parameter 
a3d0: 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
a3e0: 75 73 65 20 6d 69 67 68 74 20 69 6e 66 6c 75 65  use might influe
a3f0: 6e 63 65 20 74 68 65 20 63 68 6f 69 63 65 20 6f  nce the choice o
a400: 66 20 71 75 65 72 79 20 70 6c 61 6e 0a 20 20 2a  f query plan.  *
a410: 2a 20 66 6f 72 20 61 20 73 74 61 74 65 6d 65 6e  * for a statemen
a420: 74 2c 20 74 68 65 6e 20 74 68 65 20 73 74 61 74  t, then the stat
a430: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 61 75  ement will be au
a440: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 63 6f  tomatically reco
a450: 6d 70 69 6c 65 64 2c 0a 20 20 2a 2a 20 61 73 20  mpiled,.  ** as 
a460: 69 66 20 74 68 65 72 65 20 68 61 64 20 62 65 65  if there had bee
a470: 6e 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  n a schema chang
a480: 65 2c 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  e, on the first 
a490: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
a4a0: 61 6c 6c 0a 20 20 2a 2a 20 66 6f 6c 6c 6f 77 69  all.  ** followi
a4b0: 6e 67 20 61 6e 79 20 63 68 61 6e 67 65 20 74 6f  ng any change to
a4c0: 20 74 68 65 20 62 69 6e 64 69 6e 67 73 20 6f 66   the bindings of
a4d0: 20 74 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e   that parameter.
a4e0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a4f0: 28 70 2d 3e 70 72 65 70 46 6c 61 67 73 20 26 20  (p->prepFlags & 
a500: 53 51 4c 49 54 45 5f 50 52 45 50 41 52 45 5f 53  SQLITE_PREPARE_S
a510: 41 56 45 53 51 4c 29 21 3d 30 20 7c 7c 20 70 2d  AVESQL)!=0 || p-
a520: 3e 65 78 70 6d 61 73 6b 3d 3d 30 20 29 3b 0a 20  >expmask==0 );. 
a530: 20 69 66 28 20 70 2d 3e 65 78 70 6d 61 73 6b 21   if( p->expmask!
a540: 3d 30 20 26 26 20 28 70 2d 3e 65 78 70 6d 61 73  =0 && (p->expmas
a550: 6b 20 26 20 28 69 3e 3d 33 31 20 3f 20 30 78 38  k & (i>=31 ? 0x8
a560: 30 30 30 30 30 30 30 20 3a 20 28 75 33 32 29 31  0000000 : (u32)1
a570: 3c 3c 69 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  <<i))!=0 ){.    
a580: 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
a590: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
a5a0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
a5b0: 20 42 69 6e 64 20 61 20 74 65 78 74 20 6f 72 20   Bind a text or 
a5c0: 42 4c 4f 42 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  BLOB value..*/.s
a5d0: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 64 54 65  tatic int bindTe
a5e0: 78 74 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  xt(.  sqlite3_st
a5f0: 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20 2f 2a 20  mt *pStmt,   /* 
a600: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  The statement to
a610: 20 62 69 6e 64 20 61 67 61 69 6e 73 74 20 2a 2f   bind against */
a620: 0a 20 20 69 6e 74 20 69 2c 20 20 20 20 20 20 20  .  int i,       
a630: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
a640: 65 78 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65  ex of the parame
a650: 74 65 72 20 74 6f 20 62 69 6e 64 20 2a 2f 0a 20  ter to bind */. 
a660: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61   const void *zDa
a670: 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
a680: 65 72 20 74 6f 20 74 68 65 20 64 61 74 61 20 74  er to the data t
a690: 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f 0a 20 20  o be bound */.  
a6a0: 69 6e 74 20 6e 44 61 74 61 2c 20 20 20 20 20 20  int nData,      
a6b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a6c0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
a6d0: 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f  a to be bound */
a6e0: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
a6f0: 76 6f 69 64 2a 29 2c 20 20 20 2f 2a 20 44 65 73  void*),   /* Des
a700: 74 72 75 63 74 6f 72 20 66 6f 72 20 74 68 65 20  tructor for the 
a710: 64 61 74 61 20 2a 2f 0a 20 20 75 38 20 65 6e 63  data */.  u8 enc
a720: 6f 64 69 6e 67 20 20 20 20 20 20 20 20 20 20 20  oding           
a730: 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 66 6f 72   /* Encoding for
a740: 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 29 7b 0a   the data */.){.
a750: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
a760: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 4d 65 6d  e *)pStmt;.  Mem
a770: 20 2a 70 56 61 72 3b 0a 20 20 69 6e 74 20 72 63   *pVar;.  int rc
a780: 3b 0a 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e  ;..  rc = vdbeUn
a790: 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66  bind(p, i);.  if
a7a0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
a7b0: 29 7b 0a 20 20 20 20 69 66 28 20 7a 44 61 74 61  ){.    if( zData
a7c0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 56 61  !=0 ){.      pVa
a7d0: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 2d 31  r = &p->aVar[i-1
a7e0: 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ];.      rc = sq
a7f0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
a800: 74 72 28 70 56 61 72 2c 20 7a 44 61 74 61 2c 20  tr(pVar, zData, 
a810: 6e 44 61 74 61 2c 20 65 6e 63 6f 64 69 6e 67 2c  nData, encoding,
a820: 20 78 44 65 6c 29 3b 0a 20 20 20 20 20 20 69 66   xDel);.      if
a830: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
a840: 26 26 20 65 6e 63 6f 64 69 6e 67 21 3d 30 20 29  && encoding!=0 )
a850: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
a860: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
a870: 45 6e 63 6f 64 69 6e 67 28 70 56 61 72 2c 20 45  Encoding(pVar, E
a880: 4e 43 28 70 2d 3e 64 62 29 29 3b 0a 20 20 20 20  NC(p->db));.    
a890: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
a8a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
a8b0: 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20  te3Error(p->db, 
a8c0: 72 63 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  rc);.        rc 
a8d0: 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  = sqlite3ApiExit
a8e0: 28 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20  (p->db, rc);.   
a8f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
a900: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
a910: 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  ve(p->db->mutex)
a920: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 78 44  ;.  }else if( xD
a930: 65 6c 21 3d 53 51 4c 49 54 45 5f 53 54 41 54 49  el!=SQLITE_STATI
a940: 43 20 26 26 20 78 44 65 6c 21 3d 53 51 4c 49 54  C && xDel!=SQLIT
a950: 45 5f 54 52 41 4e 53 49 45 4e 54 20 29 7b 0a 20  E_TRANSIENT ){. 
a960: 20 20 20 78 44 65 6c 28 28 76 6f 69 64 2a 29 7a     xDel((void*)z
a970: 44 61 74 61 29 3b 0a 20 20 7d 0a 20 20 72 65 74  Data);.  }.  ret
a980: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn rc;.}.../*.*
a990: 2a 20 42 69 6e 64 20 61 20 62 6c 6f 62 20 76 61  * Bind a blob va
a9a0: 6c 75 65 20 74 6f 20 61 6e 20 53 51 4c 20 73 74  lue to an SQL st
a9b0: 61 74 65 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  atement variable
a9c0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
a9d0: 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 73 71  _bind_blob(.  sq
a9e0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
a9f0: 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20  t, .  int i, .  
aa00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74  const void *zDat
aa10: 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c  a, .  int nData,
aa20: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
aa30: 28 76 6f 69 64 2a 29 0a 29 7b 0a 23 69 66 64 65  (void*).){.#ifde
aa40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
aa50: 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
aa60: 6e 44 61 74 61 3c 30 20 29 20 72 65 74 75 72 6e  nData<0 ) return
aa70: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
aa80: 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  KPT;.#endif.  re
aa90: 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53  turn bindText(pS
aaa0: 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e  tmt, i, zData, n
aab0: 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a  Data, xDel, 0);.
aac0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
aad0: 6e 64 5f 62 6c 6f 62 36 34 28 0a 20 20 73 71 6c  nd_blob64(.  sql
aae0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
aaf0: 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63  , .  int i, .  c
ab00: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61  onst void *zData
ab10: 2c 20 0a 20 20 73 71 6c 69 74 65 33 5f 75 69 6e  , .  sqlite3_uin
ab20: 74 36 34 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f  t64 nData, .  vo
ab30: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
ab40: 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 78  ).){.  assert( x
ab50: 44 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41  Del!=SQLITE_DYNA
ab60: 4d 49 43 20 29 3b 0a 20 20 69 66 28 20 6e 44 61  MIC );.  if( nDa
ab70: 74 61 3e 30 78 37 66 66 66 66 66 66 66 20 29 7b  ta>0x7fffffff ){
ab80: 0a 20 20 20 20 72 65 74 75 72 6e 20 69 6e 76 6f  .    return invo
ab90: 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63 74 6f  keValueDestructo
aba0: 72 28 7a 44 61 74 61 2c 20 78 44 65 6c 2c 20 30  r(zData, xDel, 0
abb0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
abc0: 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74 28  return bindText(
abd0: 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c  pStmt, i, zData,
abe0: 20 28 69 6e 74 29 6e 44 61 74 61 2c 20 78 44 65   (int)nData, xDe
abf0: 6c 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 69 6e 74  l, 0);.  }.}.int
ac00: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
ac10: 75 62 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  uble(sqlite3_stm
ac20: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c  t *pStmt, int i,
ac30: 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 29 7b   double rValue){
ac40: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62  .  int rc;.  Vdb
ac50: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
ac60: 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62  Stmt;.  rc = vdb
ac70: 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20  eUnbind(p, i);. 
ac80: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
ac90: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
aca0: 33 56 64 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c  3VdbeMemSetDoubl
acb0: 65 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c  e(&p->aVar[i-1],
acc0: 20 72 56 61 6c 75 65 29 3b 0a 20 20 20 20 73 71   rValue);.    sq
acd0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
ace0: 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  e(p->db->mutex);
acf0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
ad00: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
ad10: 62 69 6e 64 5f 69 6e 74 28 73 71 6c 69 74 65 33  bind_int(sqlite3
ad20: 5f 73 74 6d 74 20 2a 70 2c 20 69 6e 74 20 69 2c  _stmt *p, int i,
ad30: 20 69 6e 74 20 69 56 61 6c 75 65 29 7b 0a 20 20   int iValue){.  
ad40: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62  return sqlite3_b
ad50: 69 6e 64 5f 69 6e 74 36 34 28 70 2c 20 69 2c 20  ind_int64(p, i, 
ad60: 28 69 36 34 29 69 56 61 6c 75 65 29 3b 0a 7d 0a  (i64)iValue);.}.
ad70: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
ad80: 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f 73  _int64(sqlite3_s
ad90: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
ada0: 69 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  i, sqlite_int64 
adb0: 69 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72  iValue){.  int r
adc0: 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  c;.  Vdbe *p = (
add0: 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20  Vdbe *)pStmt;.  
ade0: 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28  rc = vdbeUnbind(
adf0: 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d  p, i);.  if( rc=
ae00: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
ae10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ae20: 53 65 74 49 6e 74 36 34 28 26 70 2d 3e 61 56 61  SetInt64(&p->aVa
ae30: 72 5b 69 2d 31 5d 2c 20 69 56 61 6c 75 65 29 3b  r[i-1], iValue);
ae40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
ae50: 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e  ex_leave(p->db->
ae60: 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65  mutex);.  }.  re
ae70: 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73  turn rc;.}.int s
ae80: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
ae90: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
aea0: 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20  Stmt, int i){.  
aeb0: 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a  int rc;.  Vdbe *
aec0: 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  p = (Vdbe*)pStmt
aed0: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
aee0: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
aef0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
af00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  {.    sqlite3_mu
af10: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
af20: 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72  >mutex);.  }.  r
af30: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20  eturn rc;.}.int 
af40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 6f 69  sqlite3_bind_poi
af50: 6e 74 65 72 28 0a 20 20 73 71 6c 69 74 65 33 5f  nter(.  sqlite3_
af60: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 0a 20 20 69  stmt *pStmt,.  i
af70: 6e 74 20 69 2c 0a 20 20 76 6f 69 64 20 2a 70 50  nt i,.  void *pP
af80: 74 72 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  tr,.  const char
af90: 20 2a 7a 50 54 74 79 70 65 2c 0a 20 20 76 6f 69   *zPTtype,.  voi
afa0: 64 20 28 2a 78 44 65 73 74 72 75 63 74 6f 72 29  d (*xDestructor)
afb0: 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 6e 74  (void*).){.  int
afc0: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
afd0: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
afe0: 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64   rc = vdbeUnbind
aff0: 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63  (p, i);.  if( rc
b000: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
b010: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b020: 6d 53 65 74 50 6f 69 6e 74 65 72 28 26 70 2d 3e  mSetPointer(&p->
b030: 61 56 61 72 5b 69 2d 31 5d 2c 20 70 50 74 72 2c  aVar[i-1], pPtr,
b040: 20 7a 50 54 74 79 70 65 2c 20 78 44 65 73 74 72   zPTtype, xDestr
b050: 75 63 74 6f 72 29 3b 0a 20 20 20 20 73 71 6c 69  uctor);.    sqli
b060: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
b070: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
b080: 20 7d 65 6c 73 65 20 69 66 28 20 78 44 65 73 74   }else if( xDest
b090: 72 75 63 74 6f 72 20 29 7b 0a 20 20 20 20 78 44  ructor ){.    xD
b0a0: 65 73 74 72 75 63 74 6f 72 28 70 50 74 72 29 3b  estructor(pPtr);
b0b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
b0c0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
b0d0: 62 69 6e 64 5f 74 65 78 74 28 20 0a 20 20 73 71  bind_text( .  sq
b0e0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
b0f0: 74 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20  t, .  int i, .  
b100: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74  const char *zDat
b110: 61 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c  a, .  int nData,
b120: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
b130: 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74  (void*).){.  ret
b140: 75 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74  urn bindText(pSt
b150: 6d 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44  mt, i, zData, nD
b160: 61 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54  ata, xDel, SQLIT
b170: 45 5f 55 54 46 38 29 3b 0a 7d 0a 69 6e 74 20 73  E_UTF8);.}.int s
b180: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
b190: 36 34 28 20 0a 20 20 73 71 6c 69 74 65 33 5f 73  64( .  sqlite3_s
b1a0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69  tmt *pStmt, .  i
b1b0: 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 63  nt i, .  const c
b1c0: 68 61 72 20 2a 7a 44 61 74 61 2c 20 0a 20 20 73  har *zData, .  s
b1d0: 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 6e 44  qlite3_uint64 nD
b1e0: 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  ata, .  void (*x
b1f0: 44 65 6c 29 28 76 6f 69 64 2a 29 2c 0a 20 20 75  Del)(void*),.  u
b200: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 65 6e 63  nsigned char enc
b210: 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 78 44  .){.  assert( xD
b220: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
b230: 49 43 20 29 3b 0a 20 20 69 66 28 20 6e 44 61 74  IC );.  if( nDat
b240: 61 3e 30 78 37 66 66 66 66 66 66 66 20 29 7b 0a  a>0x7fffffff ){.
b250: 20 20 20 20 72 65 74 75 72 6e 20 69 6e 76 6f 6b      return invok
b260: 65 56 61 6c 75 65 44 65 73 74 72 75 63 74 6f 72  eValueDestructor
b270: 28 7a 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29  (zData, xDel, 0)
b280: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
b290: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  f( enc==SQLITE_U
b2a0: 54 46 31 36 20 29 20 65 6e 63 20 3d 20 53 51 4c  TF16 ) enc = SQL
b2b0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
b2c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 62 69 6e 64  .    return bind
b2d0: 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a  Text(pStmt, i, z
b2e0: 44 61 74 61 2c 20 28 69 6e 74 29 6e 44 61 74 61  Data, (int)nData
b2f0: 2c 20 78 44 65 6c 2c 20 65 6e 63 29 3b 0a 20 20  , xDel, enc);.  
b300: 7d 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }.}.#ifndef SQLI
b310: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e  TE_OMIT_UTF16.in
b320: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  t sqlite3_bind_t
b330: 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65 33  ext16(.  sqlite3
b340: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20  _stmt *pStmt, . 
b350: 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74   int i, .  const
b360: 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20   void *zData, . 
b370: 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76   int nData, .  v
b380: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
b390: 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62  *).){.  return b
b3a0: 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69  indText(pStmt, i
b3b0: 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20  , zData, nData, 
b3c0: 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  xDel, SQLITE_UTF
b3d0: 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 23 65 6e  16NATIVE);.}.#en
b3e0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b3f0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
b400: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 76 61 6c  sqlite3_bind_val
b410: 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  ue(sqlite3_stmt 
b420: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 63  *pStmt, int i, c
b430: 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  onst sqlite3_val
b440: 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69  ue *pValue){.  i
b450: 6e 74 20 72 63 3b 0a 20 20 73 77 69 74 63 68 28  nt rc;.  switch(
b460: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
b470: 79 70 65 28 28 73 71 6c 69 74 65 33 5f 76 61 6c  ype((sqlite3_val
b480: 75 65 2a 29 70 56 61 6c 75 65 29 20 29 7b 0a 20  ue*)pValue) ){. 
b490: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
b4a0: 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20 20 20 20  NTEGER: {.      
b4b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
b4c0: 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69  d_int64(pStmt, i
b4d0: 2c 20 70 56 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a  , pValue->u.i);.
b4e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b4f0: 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49   }.    case SQLI
b500: 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20  TE_FLOAT: {.    
b510: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
b520: 69 6e 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74  ind_double(pStmt
b530: 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 75 2e 72  , i, pValue->u.r
b540: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
b550: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
b560: 51 4c 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20  QLITE_BLOB: {.  
b570: 20 20 20 20 69 66 28 20 70 56 61 6c 75 65 2d 3e      if( pValue->
b580: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
b590: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
b5a0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65   sqlite3_bind_ze
b5b0: 72 6f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 2c  roblob(pStmt, i,
b5c0: 20 70 56 61 6c 75 65 2d 3e 75 2e 6e 5a 65 72 6f   pValue->u.nZero
b5d0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
b5e0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
b5f0: 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70  ite3_bind_blob(p
b600: 53 74 6d 74 2c 20 69 2c 20 70 56 61 6c 75 65 2d  Stmt, i, pValue-
b610: 3e 7a 2c 20 70 56 61 6c 75 65 2d 3e 6e 2c 53 51  >z, pValue->n,SQ
b620: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
b630: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
b640: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
b650: 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54  case SQLITE_TEXT
b660: 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 62  : {.      rc = b
b670: 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 69 2c  indText(pStmt,i,
b680: 20 20 70 56 61 6c 75 65 2d 3e 7a 2c 20 70 56 61    pValue->z, pVa
b690: 6c 75 65 2d 3e 6e 2c 20 53 51 4c 49 54 45 5f 54  lue->n, SQLITE_T
b6a0: 52 41 4e 53 49 45 4e 54 2c 0a 20 20 20 20 20 20  RANSIENT,.      
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6c0: 20 20 20 20 20 20 20 20 70 56 61 6c 75 65 2d 3e          pValue->
b6d0: 65 6e 63 29 3b 0a 20 20 20 20 20 20 62 72 65 61  enc);.      brea
b6e0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66  k;.    }.    def
b6f0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 72 63  ault: {.      rc
b700: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
b710: 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 0a  null(pStmt, i);.
b720: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b730: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
b740: 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  rc;.}.int sqlite
b750: 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28  3_bind_zeroblob(
b760: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
b770: 74 6d 74 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20  tmt, int i, int 
b780: 6e 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  n){.  int rc;.  
b790: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
b7a0: 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20  *)pStmt;.  rc = 
b7b0: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
b7c0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
b7d0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
b7e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65  ite3VdbeMemSetZe
b7f0: 72 6f 42 6c 6f 62 28 26 70 2d 3e 61 56 61 72 5b  roBlob(&p->aVar[
b800: 69 2d 31 5d 2c 20 6e 29 3b 0a 20 20 20 20 73 71  i-1], n);.    sq
b810: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
b820: 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  e(p->db->mutex);
b830: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
b840: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
b850: 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 36 34 28  bind_zeroblob64(
b860: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
b870: 74 6d 74 2c 20 69 6e 74 20 69 2c 20 73 71 6c 69  tmt, int i, sqli
b880: 74 65 33 5f 75 69 6e 74 36 34 20 6e 29 7b 0a 20  te3_uint64 n){. 
b890: 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20   int rc;.  Vdbe 
b8a0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
b8b0: 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  mt;.  sqlite3_mu
b8c0: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
b8d0: 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 6e  >mutex);.  if( n
b8e0: 3e 28 75 36 34 29 70 2d 3e 64 62 2d 3e 61 4c 69  >(u64)p->db->aLi
b8f0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
b900: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
b910: 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42  rc = SQLITE_TOOB
b920: 49 47 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  IG;.  }else{.   
b930: 20 61 73 73 65 72 74 28 20 28 6e 20 26 20 30 78   assert( (n & 0x
b940: 37 46 46 46 46 46 46 46 29 3d 3d 6e 20 29 3b 0a  7FFFFFFF)==n );.
b950: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
b960: 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 70  _bind_zeroblob(p
b970: 53 74 6d 74 2c 20 69 2c 20 6e 29 3b 0a 20 20 7d  Stmt, i, n);.  }
b980: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
b990: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 72 63  piExit(p->db, rc
b9a0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
b9b0: 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e  ex_leave(p->db->
b9c0: 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e  mutex);.  return
b9d0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65   rc;.}../*.** Re
b9e0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
b9f0: 6f 66 20 77 69 6c 64 63 61 72 64 73 20 74 68 61  of wildcards tha
ba00: 74 20 63 61 6e 20 62 65 20 70 6f 74 65 6e 74 69  t can be potenti
ba10: 61 6c 6c 79 20 62 6f 75 6e 64 20 74 6f 2e 0a 2a  ally bound to..*
ba20: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
ba30: 73 20 61 64 64 65 64 20 74 6f 20 73 75 70 70 6f  s added to suppo
ba40: 72 74 20 44 42 44 3a 3a 53 51 4c 69 74 65 2e 20  rt DBD::SQLite. 
ba50: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
ba60: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
ba70: 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74  count(sqlite3_st
ba80: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64  mt *pStmt){.  Vd
ba90: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
baa0: 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70  Stmt;.  return p
bab0: 20 3f 20 70 2d 3e 6e 56 61 72 20 3a 20 30 3b 0a   ? p->nVar : 0;.
bac0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
bad0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77 69  the name of a wi
bae0: 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65 72  ldcard parameter
baf0: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69  .  Return NULL i
bb00: 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 69  f the index.** i
bb10: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 6f  s out of range o
bb20: 72 20 69 66 20 74 68 65 20 77 69 6c 64 63 61 72  r if the wildcar
bb30: 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a 2a  d is unnamed..**
bb40: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
bb50: 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38 2e 0a  s always UTF-8..
bb60: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
bb70: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
bb80: 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c 69 74  meter_name(sqlit
bb90: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
bba0: 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a  int i){.  Vdbe *
bbb0: 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  p = (Vdbe*)pStmt
bbc0: 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72  ;.  if( p==0 ) r
bbd0: 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72  eturn 0;.  retur
bbe0: 6e 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75  n sqlite3VListNu
bbf0: 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73  mToName(p->pVLis
bc00: 74 2c 20 69 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t, i);.}../*.** 
bc10: 47 69 76 65 6e 20 61 20 77 69 6c 64 63 61 72 64  Given a wildcard
bc20: 20 70 61 72 61 6d 65 74 65 72 20 6e 61 6d 65 2c   parameter name,
bc30: 20 72 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65   return the inde
bc40: 78 20 6f 66 20 74 68 65 20 76 61 72 69 61 62 6c  x of the variabl
bc50: 65 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6e  e.** with that n
bc60: 61 6d 65 2e 20 20 49 66 20 74 68 65 72 65 20 69  ame.  If there i
bc70: 73 20 6e 6f 20 76 61 72 69 61 62 6c 65 20 77 69  s no variable wi
bc80: 74 68 20 74 68 65 20 67 69 76 65 6e 20 6e 61 6d  th the given nam
bc90: 65 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 30 2e 0a  e,.** return 0..
bca0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
bcb0: 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
bcc0: 28 56 64 62 65 20 2a 70 2c 20 63 6f 6e 73 74 20  (Vdbe *p, const 
bcd0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74  char *zName, int
bce0: 20 6e 4e 61 6d 65 29 7b 0a 20 20 69 66 28 20 70   nName){.  if( p
bcf0: 3d 3d 30 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20  ==0 || zName==0 
bd00: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
bd10: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 4c 69 73  turn sqlite3VLis
bd20: 74 4e 61 6d 65 54 6f 4e 75 6d 28 70 2d 3e 70 56  tNameToNum(p->pV
bd30: 4c 69 73 74 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  List, zName, nNa
bd40: 6d 65 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  me);.}.int sqlit
bd50: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
bd60: 72 5f 69 6e 64 65 78 28 73 71 6c 69 74 65 33 5f  r_index(sqlite3_
bd70: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 63 6f 6e  stmt *pStmt, con
bd80: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b  st char *zName){
bd90: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
bda0: 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
bdb0: 64 65 78 28 28 56 64 62 65 2a 29 70 53 74 6d 74  dex((Vdbe*)pStmt
bdc0: 2c 20 7a 4e 61 6d 65 2c 20 73 71 6c 69 74 65 33  , zName, sqlite3
bdd0: 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 29  Strlen30(zName))
bde0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73  ;.}../*.** Trans
bdf0: 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73  fer all bindings
be00: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20   from the first 
be10: 73 74 61 74 65 6d 65 6e 74 20 6f 76 65 72 20 74  statement over t
be20: 6f 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 2a 2f  o the second..*/
be30: 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
be40: 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
be50: 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d  ite3_stmt *pFrom
be60: 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f 73 74  Stmt, sqlite3_st
be70: 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20  mt *pToStmt){.  
be80: 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56  Vdbe *pFrom = (V
be90: 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a  dbe*)pFromStmt;.
bea0: 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20 28 56    Vdbe *pTo = (V
beb0: 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20  dbe*)pToStmt;.  
bec0: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
bed0: 20 70 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f 6d 2d   pTo->db==pFrom-
bee0: 3e 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >db );.  assert(
bef0: 20 70 54 6f 2d 3e 6e 56 61 72 3d 3d 70 46 72 6f   pTo->nVar==pFro
bf00: 6d 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 73 71 6c  m->nVar );.  sql
bf10: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
bf20: 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  (pTo->db->mutex)
bf30: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
bf40: 46 72 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29  From->nVar; i++)
bf50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
bf60: 65 4d 65 6d 4d 6f 76 65 28 26 70 54 6f 2d 3e 61  eMemMove(&pTo->a
bf70: 56 61 72 5b 69 5d 2c 20 26 70 46 72 6f 6d 2d 3e  Var[i], &pFrom->
bf80: 61 56 61 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  aVar[i]);.  }.  
bf90: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
bfa0: 61 76 65 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74  ave(pTo->db->mut
bfb0: 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  ex);.  return SQ
bfc0: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
bfd0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
bfe0: 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a  DEPRECATED./*.**
bff0: 20 44 65 70 72 65 63 61 74 65 64 20 65 78 74 65   Deprecated exte
c000: 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 2e 20  rnal interface. 
c010: 20 49 6e 74 65 72 6e 61 6c 2f 63 6f 72 65 20 53   Internal/core S
c020: 51 4c 69 74 65 20 63 6f 64 65 0a 2a 2a 20 73 68  QLite code.** sh
c030: 6f 75 6c 64 20 63 61 6c 6c 20 73 71 6c 69 74 65  ould call sqlite
c040: 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
c050: 73 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 6d  s..**.** It is m
c060: 69 73 75 73 65 20 74 6f 20 63 61 6c 6c 20 74 68  isuse to call th
c070: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 74 68 20  is routine with 
c080: 73 74 61 74 65 6d 65 6e 74 73 20 66 72 6f 6d 20  statements from 
c090: 64 69 66 66 65 72 65 6e 74 0a 2a 2a 20 64 61 74  different.** dat
c0a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c0b0: 73 2e 20 20 42 75 74 20 61 73 20 74 68 69 73 20  s.  But as this 
c0c0: 69 73 20 61 20 64 65 70 72 65 63 61 74 65 64 20  is a deprecated 
c0d0: 69 6e 74 65 72 66 61 63 65 2c 20 77 65 0a 2a 2a  interface, we.**
c0e0: 20 77 69 6c 6c 20 6e 6f 74 20 62 6f 74 68 65 72   will not bother
c0f0: 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 74 68   to check for th
c100: 61 74 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a 2a  at condition..**
c110: 0a 2a 2a 20 49 66 20 74 68 65 20 74 77 6f 20 73  .** If the two s
c120: 74 61 74 65 6d 65 6e 74 73 20 63 6f 6e 74 61 69  tatements contai
c130: 6e 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75  n a different nu
c140: 6d 62 65 72 20 6f 66 20 62 69 6e 64 69 6e 67 73  mber of bindings
c150: 2c 20 74 68 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c  , then.** an SQL
c160: 49 54 45 5f 45 52 52 4f 52 20 69 73 20 72 65 74  ITE_ERROR is ret
c170: 75 72 6e 65 64 2e 20 20 4e 6f 74 68 69 6e 67 20  urned.  Nothing 
c180: 65 6c 73 65 20 63 61 6e 20 67 6f 20 77 72 6f 6e  else can go wron
c190: 67 2c 20 73 6f 20 6f 74 68 65 72 77 69 73 65 0a  g, so otherwise.
c1a0: 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20  ** SQLITE_OK is 
c1b0: 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74  returned..*/.int
c1c0: 20 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65   sqlite3_transfe
c1d0: 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  r_bindings(sqlit
c1e0: 65 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d 53 74  e3_stmt *pFromSt
c1f0: 6d 74 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  mt, sqlite3_stmt
c200: 20 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20 56 64   *pToStmt){.  Vd
c210: 62 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56 64 62  be *pFrom = (Vdb
c220: 65 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a 20 20  e*)pFromStmt;.  
c230: 56 64 62 65 20 2a 70 54 6f 20 3d 20 28 56 64 62  Vdbe *pTo = (Vdb
c240: 65 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20 69 66  e*)pToStmt;.  if
c250: 28 20 70 46 72 6f 6d 2d 3e 6e 56 61 72 21 3d 70  ( pFrom->nVar!=p
c260: 54 6f 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20  To->nVar ){.    
c270: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
c280: 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  ROR;.  }.  asser
c290: 74 28 20 28 70 54 6f 2d 3e 70 72 65 70 46 6c 61  t( (pTo->prepFla
c2a0: 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 45 50  gs & SQLITE_PREP
c2b0: 41 52 45 5f 53 41 56 45 53 51 4c 29 21 3d 30 20  ARE_SAVESQL)!=0 
c2c0: 7c 7c 20 70 54 6f 2d 3e 65 78 70 6d 61 73 6b 3d  || pTo->expmask=
c2d0: 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 54 6f 2d  =0 );.  if( pTo-
c2e0: 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20  >expmask ){.    
c2f0: 70 54 6f 2d 3e 65 78 70 69 72 65 64 20 3d 20 31  pTo->expired = 1
c300: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
c310: 28 70 46 72 6f 6d 2d 3e 70 72 65 70 46 6c 61 67  (pFrom->prepFlag
c320: 73 20 26 20 53 51 4c 49 54 45 5f 50 52 45 50 41  s & SQLITE_PREPA
c330: 52 45 5f 53 41 56 45 53 51 4c 29 21 3d 30 20 7c  RE_SAVESQL)!=0 |
c340: 7c 20 70 46 72 6f 6d 2d 3e 65 78 70 6d 61 73 6b  | pFrom->expmask
c350: 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 46 72  ==0 );.  if( pFr
c360: 6f 6d 2d 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20  om->expmask ){. 
c370: 20 20 20 70 46 72 6f 6d 2d 3e 65 78 70 69 72 65     pFrom->expire
c380: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  d = 1;.  }.  ret
c390: 75 72 6e 20 73 71 6c 69 74 65 33 54 72 61 6e 73  urn sqlite3Trans
c3a0: 66 65 72 42 69 6e 64 69 6e 67 73 28 70 46 72 6f  ferBindings(pFro
c3b0: 6d 53 74 6d 74 2c 20 70 54 6f 53 74 6d 74 29 3b  mStmt, pToStmt);
c3c0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
c3d0: 20 52 65 74 75 72 6e 20 74 68 65 20 73 71 6c 69   Return the sqli
c3e0: 74 65 33 2a 20 64 61 74 61 62 61 73 65 20 68 61  te3* database ha
c3f0: 6e 64 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  ndle to which th
c400: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
c410: 6d 65 6e 74 20 67 69 76 65 6e 0a 2a 2a 20 69 6e  ment given.** in
c420: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 62 65   the argument be
c430: 6c 6f 6e 67 73 2e 20 20 54 68 69 73 20 69 73 20  longs.  This is 
c440: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
c450: 65 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 61  e handle that wa
c460: 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
c470: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
c480: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
c490: 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74   that was used t
c4a0: 6f 20 63 72 65 61 74 65 0a 2a 2a 20 74 68 65 20  o create.** the 
c4b0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
c4c0: 20 66 69 72 73 74 20 70 6c 61 63 65 2e 0a 2a 2f   first place..*/
c4d0: 0a 73 71 6c 69 74 65 33 20 2a 73 71 6c 69 74 65  .sqlite3 *sqlite
c4e0: 33 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69  3_db_handle(sqli
c4f0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
c500: 7b 0a 20 20 72 65 74 75 72 6e 20 70 53 74 6d 74  {.  return pStmt
c510: 20 3f 20 28 28 56 64 62 65 2a 29 70 53 74 6d 74   ? ((Vdbe*)pStmt
c520: 29 2d 3e 64 62 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a  )->db : 0;.}../*
c530: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
c540: 69 66 20 74 68 65 20 70 72 65 70 61 72 65 64 20  if the prepared 
c550: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 67 75 61  statement is gua
c560: 72 61 6e 74 65 65 64 20 74 6f 20 6e 6f 74 20 6d  ranteed to not m
c570: 6f 64 69 66 79 20 74 68 65 0a 2a 2a 20 64 61 74  odify the.** dat
c580: 61 62 61 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  abase..*/.int sq
c590: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
c5a0: 6e 6c 79 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  nly(sqlite3_stmt
c5b0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72 65 74 75   *pStmt){.  retu
c5c0: 72 6e 20 70 53 74 6d 74 20 3f 20 28 28 56 64 62  rn pStmt ? ((Vdb
c5d0: 65 2a 29 70 53 74 6d 74 29 2d 3e 72 65 61 64 4f  e*)pStmt)->readO
c5e0: 6e 6c 79 20 3a 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  nly : 1;.}../*.*
c5f0: 2a 20 52 65 74 75 72 6e 20 31 20 69 66 20 74 68  * Return 1 if th
c600: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e statement is a
c610: 6e 20 45 58 50 4c 41 49 4e 20 61 6e 64 20 72 65  n EXPLAIN and re
c620: 74 75 72 6e 20 32 20 69 66 20 74 68 65 0a 2a 2a  turn 2 if the.**
c630: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6e   statement is an
c640: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
c650: 4c 41 4e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  LAN.*/.int sqlit
c660: 65 33 5f 73 74 6d 74 5f 69 73 65 78 70 6c 61 69  e3_stmt_isexplai
c670: 6e 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  n(sqlite3_stmt *
c680: 70 53 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e  pStmt){.  return
c690: 20 70 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a   pStmt ? ((Vdbe*
c6a0: 29 70 53 74 6d 74 29 2d 3e 65 78 70 6c 61 69 6e  )pStmt)->explain
c6b0: 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52   : 0;.}../*.** R
c6c0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68  eturn true if th
c6d0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
c6e0: 6d 65 6e 74 20 69 73 20 69 6e 20 6e 65 65 64 20  ment is in need 
c6f0: 6f 66 20 62 65 69 6e 67 20 72 65 73 65 74 2e 0a  of being reset..
c700: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  */.int sqlite3_s
c710: 74 6d 74 5f 62 75 73 79 28 73 71 6c 69 74 65 33  tmt_busy(sqlite3
c720: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
c730: 20 56 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65   Vdbe *v = (Vdbe
c740: 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72  *)pStmt;.  retur
c750: 6e 20 76 21 3d 30 20 26 26 20 76 2d 3e 6d 61 67  n v!=0 && v->mag
c760: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
c770: 55 4e 20 26 26 20 76 2d 3e 70 63 3e 3d 30 3b 0a  UN && v->pc>=0;.
c780: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
c790: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
c7a0: 20 6e 65 78 74 20 70 72 65 70 61 72 65 64 20 73   next prepared s
c7b0: 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70  tatement after p
c7c0: 53 74 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a  Stmt associated.
c7d0: 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61 73 65  ** with database
c7e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e   connection pDb.
c7f0: 20 20 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55    If pStmt is NU
c800: 4c 4c 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66  LL, return the f
c810: 69 72 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64  irst.** prepared
c820: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74   statement for t
c830: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
c840: 65 63 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20  ection.  Return 
c850: 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a  NULL if there.**
c860: 20 61 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f   are no more..*/
c870: 0a 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  .sqlite3_stmt *s
c880: 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74  qlite3_next_stmt
c890: 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73  (sqlite3 *pDb, s
c8a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
c8b0: 6d 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  mt){.  sqlite3_s
c8c0: 74 6d 74 20 2a 70 4e 65 78 74 3b 0a 23 69 66 64  tmt *pNext;.#ifd
c8d0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
c8e0: 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28  _API_ARMOR.  if(
c8f0: 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
c900: 68 65 63 6b 4f 6b 28 70 44 62 29 20 29 7b 0a 20  heckOk(pDb) ){. 
c910: 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f     (void)SQLITE_
c920: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
c930: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23   return 0;.  }.#
c940: 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f  endif.  sqlite3_
c950: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 44 62 2d  mutex_enter(pDb-
c960: 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70  >mutex);.  if( p
c970: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 70  Stmt==0 ){.    p
c980: 4e 65 78 74 20 3d 20 28 73 71 6c 69 74 65 33 5f  Next = (sqlite3_
c990: 73 74 6d 74 2a 29 70 44 62 2d 3e 70 56 64 62 65  stmt*)pDb->pVdbe
c9a0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
c9b0: 4e 65 78 74 20 3d 20 28 73 71 6c 69 74 65 33 5f  Next = (sqlite3_
c9c0: 73 74 6d 74 2a 29 28 28 56 64 62 65 2a 29 70 53  stmt*)((Vdbe*)pS
c9d0: 74 6d 74 29 2d 3e 70 4e 65 78 74 3b 0a 20 20 7d  tmt)->pNext;.  }
c9e0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
c9f0: 5f 6c 65 61 76 65 28 70 44 62 2d 3e 6d 75 74 65  _leave(pDb->mute
ca00: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4e 65  x);.  return pNe
ca10: 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  xt;.}../*.** Ret
ca20: 75 72 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  urn the value of
ca30: 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74 65   a status counte
ca40: 72 20 66 6f 72 20 61 20 70 72 65 70 61 72 65 64  r for a prepared
ca50: 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f 0a 69 6e   statement.*/.in
ca60: 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  t sqlite3_stmt_s
ca70: 74 61 74 75 73 28 73 71 6c 69 74 65 33 5f 73 74  tatus(sqlite3_st
ca80: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 6f  mt *pStmt, int o
ca90: 70 2c 20 69 6e 74 20 72 65 73 65 74 46 6c 61 67  p, int resetFlag
caa0: 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  ){.  Vdbe *pVdbe
cab0: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
cac0: 0a 20 20 75 33 32 20 76 3b 0a 23 69 66 64 65 66  .  u32 v;.#ifdef
cad0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
cae0: 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
caf0: 70 53 74 6d 74 20 0a 20 20 20 7c 7c 20 28 6f 70  pStmt .   || (op
cb00: 21 3d 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  !=SQLITE_STMTSTA
cb10: 54 55 53 5f 4d 45 4d 55 53 45 44 20 26 26 20 28  TUS_MEMUSED && (
cb20: 6f 70 3c 30 7c 7c 6f 70 3e 3d 41 72 72 61 79 53  op<0||op>=ArrayS
cb30: 69 7a 65 28 70 56 64 62 65 2d 3e 61 43 6f 75 6e  ize(pVdbe->aCoun
cb40: 74 65 72 29 29 29 0a 20 20 29 7b 0a 20 20 20 20  ter))).  ){.    
cb50: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
cb60: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
cb70: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
cb80: 69 66 0a 20 20 69 66 28 20 6f 70 3d 3d 53 51 4c  if.  if( op==SQL
cb90: 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 4d  ITE_STMTSTATUS_M
cba0: 45 4d 55 53 45 44 20 29 7b 0a 20 20 20 20 73 71  EMUSED ){.    sq
cbb0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 56 64 62  lite3 *db = pVdb
cbc0: 65 2d 3e 64 62 3b 0a 20 20 20 20 73 71 6c 69 74  e->db;.    sqlit
cbd0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
cbe0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 76  b->mutex);.    v
cbf0: 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 70 6e   = 0;.    db->pn
cc00: 42 79 74 65 73 46 72 65 65 64 20 3d 20 28 69 6e  BytesFreed = (in
cc10: 74 2a 29 26 76 3b 0a 20 20 20 20 73 71 6c 69 74  t*)&v;.    sqlit
cc20: 65 33 56 64 62 65 43 6c 65 61 72 4f 62 6a 65 63  e3VdbeClearObjec
cc30: 74 28 64 62 2c 20 70 56 64 62 65 29 3b 0a 20 20  t(db, pVdbe);.  
cc40: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
cc50: 64 62 2c 20 70 56 64 62 65 29 3b 0a 20 20 20 20  db, pVdbe);.    
cc60: 64 62 2d 3e 70 6e 42 79 74 65 73 46 72 65 65 64  db->pnBytesFreed
cc70: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
cc80: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
cc90: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 65 6c 73  ->mutex);.  }els
cca0: 65 7b 0a 20 20 20 20 76 20 3d 20 70 56 64 62 65  e{.    v = pVdbe
ccb0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 5d 3b 0a  ->aCounter[op];.
ccc0: 20 20 20 20 69 66 28 20 72 65 73 65 74 46 6c 61      if( resetFla
ccd0: 67 20 29 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e  g ) pVdbe->aCoun
cce0: 74 65 72 5b 6f 70 5d 20 3d 20 30 3b 0a 20 20 7d  ter[op] = 0;.  }
ccf0: 0a 20 20 72 65 74 75 72 6e 20 28 69 6e 74 29 76  .  return (int)v
cd00: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
cd10: 6e 20 74 68 65 20 53 51 4c 20 61 73 73 6f 63 69  n the SQL associ
cd20: 61 74 65 64 20 77 69 74 68 20 61 20 70 72 65 70  ated with a prep
cd30: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ared statement.*
cd40: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
cd50: 6c 69 74 65 33 5f 73 71 6c 28 73 71 6c 69 74 65  lite3_sql(sqlite
cd60: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a  3_stmt *pStmt){.
cd70: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
cd80: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65 74  e *)pStmt;.  ret
cd90: 75 72 6e 20 70 20 3f 20 70 2d 3e 7a 53 71 6c 20  urn p ? p->zSql 
cda0: 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  : 0;.}../*.** Re
cdb0: 74 75 72 6e 20 74 68 65 20 53 51 4c 20 61 73 73  turn the SQL ass
cdc0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
cdd0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
cde0: 74 20 77 69 74 68 0a 2a 2a 20 62 6f 75 6e 64 20  t with.** bound 
cdf0: 70 61 72 61 6d 65 74 65 72 73 20 65 78 70 61 6e  parameters expan
ce00: 64 65 64 2e 20 20 53 70 61 63 65 20 74 6f 20 68  ded.  Space to h
ce10: 6f 6c 64 20 74 68 65 20 72 65 74 75 72 6e 65 64  old the returned
ce20: 20 73 74 72 69 6e 67 20 69 73 0a 2a 2a 20 6f 62   string is.** ob
ce30: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
ce40: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 20 20 54  te3_malloc().  T
ce50: 68 65 20 63 61 6c 6c 65 72 20 69 73 20 72 65 73  he caller is res
ce60: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0a 2a 2a 20  ponsible for.** 
ce70: 66 72 65 65 69 6e 67 20 74 68 65 20 72 65 74 75  freeing the retu
ce80: 72 6e 65 64 20 73 74 72 69 6e 67 20 62 79 20 70  rned string by p
ce90: 61 73 73 69 6e 67 20 69 74 20 74 6f 20 73 71 6c  assing it to sql
cea0: 69 74 65 33 5f 66 72 65 65 28 29 2e 0a 2a 2a 0a  ite3_free()..**.
ceb0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 52  ** The SQLITE_TR
cec0: 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 70  ACE_SIZE_LIMIT p
ced0: 75 74 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75  uts an upper bou
cee0: 6e 64 20 6f 6e 20 74 68 65 20 73 69 7a 65 20 6f  nd on the size o
cef0: 66 0a 2a 2a 20 65 78 70 61 6e 64 65 64 20 62 6f  f.** expanded bo
cf00: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 2e 0a  und parameters..
cf10: 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  */.char *sqlite3
cf20: 5f 65 78 70 61 6e 64 65 64 5f 73 71 6c 28 73 71  _expanded_sql(sq
cf30: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
cf40: 74 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t){.#ifdef SQLIT
cf50: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 72  E_OMIT_TRACE.  r
cf60: 65 74 75 72 6e 20 30 3b 0a 23 65 6c 73 65 0a 20  eturn 0;.#else. 
cf70: 20 63 68 61 72 20 2a 7a 20 3d 20 30 3b 0a 20 20   char *z = 0;.  
cf80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
cf90: 20 3d 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 70   = sqlite3_sql(p
cfa0: 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 7a 53 71  Stmt);.  if( zSq
cfb0: 6c 20 29 7b 0a 20 20 20 20 56 64 62 65 20 2a 70  l ){.    Vdbe *p
cfc0: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
cfd0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  ;.    sqlite3_mu
cfe0: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
cff0: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 7a 20 3d  >mutex);.    z =
d000: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
d010: 6e 64 53 71 6c 28 70 2c 20 7a 53 71 6c 29 3b 0a  ndSql(p, zSql);.
d020: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
d030: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
d040: 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74  utex);.  }.  ret
d050: 75 72 6e 20 7a 3b 0a 23 65 6e 64 69 66 0a 7d 0a  urn z;.#endif.}.
d060: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
d070: 4e 41 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 0a  NABLE_NORMALIZE.
d080: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
d090: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 53 51 4c 20   normalized SQL 
d0a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
d0b0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
d0c0: 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  ment..*/.const c
d0d0: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 6e 6f 72  har *sqlite3_nor
d0e0: 6d 61 6c 69 7a 65 64 5f 73 71 6c 28 73 71 6c 69  malized_sql(sqli
d0f0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
d100: 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  {.  Vdbe *p = (V
d110: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69  dbe *)pStmt;.  i
d120: 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e  f( p==0 ) return
d130: 20 30 3b 0a 20 20 69 66 28 20 70 2d 3e 7a 4e 6f   0;.  if( p->zNo
d140: 72 6d 53 71 6c 3d 3d 30 20 26 26 20 41 4c 57 41  rmSql==0 && ALWA
d150: 59 53 28 70 2d 3e 7a 53 71 6c 21 3d 30 29 20 29  YS(p->zSql!=0) )
d160: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  {.    sqlite3_mu
d170: 74 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d  tex_enter(p->db-
d180: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 70 2d 3e  >mutex);.    p->
d190: 7a 4e 6f 72 6d 53 71 6c 20 3d 20 73 71 6c 69 74  zNormSql = sqlit
d1a0: 65 33 4e 6f 72 6d 61 6c 69 7a 65 28 70 2c 20 70  e3Normalize(p, p
d1b0: 2d 3e 7a 53 71 6c 29 3b 0a 20 20 20 20 73 71 6c  ->zSql);.    sql
d1c0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
d1d0: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
d1e0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e    }.  return p->
d1f0: 7a 4e 6f 72 6d 53 71 6c 3b 0a 7d 0a 23 65 6e 64  zNormSql;.}.#end
d200: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
d210: 42 4c 45 5f 4e 4f 52 4d 41 4c 49 5a 45 20 2a 2f  BLE_NORMALIZE */
d220: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
d230: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
d240: 5f 48 4f 4f 4b 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  _HOOK./*.** Allo
d250: 63 61 74 65 20 61 6e 64 20 70 6f 70 75 6c 61 74  cate and populat
d260: 65 20 61 6e 20 55 6e 70 61 63 6b 65 64 52 65 63  e an UnpackedRec
d270: 6f 72 64 20 73 74 72 75 63 74 75 72 65 20 62 61  ord structure ba
d280: 73 65 64 20 6f 6e 20 74 68 65 20 73 65 72 69 61  sed on the seria
d290: 6c 69 7a 65 64 0a 2a 2a 20 72 65 63 6f 72 64 20  lized.** record 
d2a0: 69 6e 20 6e 4b 65 79 2f 70 4b 65 79 2e 20 52 65  in nKey/pKey. Re
d2b0: 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  turn a pointer t
d2c0: 6f 20 74 68 65 20 6e 65 77 20 55 6e 70 61 63 6b  o the new Unpack
d2d0: 65 64 52 65 63 6f 72 64 20 73 74 72 75 63 74 75  edRecord structu
d2e0: 72 65 0a 2a 2a 20 69 66 20 73 75 63 63 65 73 73  re.** if success
d2f0: 66 75 6c 2c 20 6f 72 20 61 20 4e 55 4c 4c 20 70  ful, or a NULL p
d300: 6f 69 6e 74 65 72 20 69 66 20 61 6e 20 4f 4f 4d  ointer if an OOM
d310: 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
d320: 74 65 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  tered..*/.static
d330: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
d340: 2a 76 64 62 65 55 6e 70 61 63 6b 52 65 63 6f 72  *vdbeUnpackRecor
d350: 64 28 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d(.  KeyInfo *pK
d360: 65 79 49 6e 66 6f 2c 20 0a 20 20 69 6e 74 20 6e  eyInfo, .  int n
d370: 4b 65 79 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Key, .  const vo
d380: 69 64 20 2a 70 4b 65 79 0a 29 7b 0a 20 20 55 6e  id *pKey.){.  Un
d390: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 52  packedRecord *pR
d3a0: 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  et;           /*
d3b0: 20 52 65 74 75 72 6e 20 76 61 6c 75 65 20 2a 2f   Return value */
d3c0: 0a 0a 20 20 70 52 65 74 20 3d 20 73 71 6c 69 74  ..  pRet = sqlit
d3d0: 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
d3e0: 6b 65 64 52 65 63 6f 72 64 28 70 4b 65 79 49 6e  kedRecord(pKeyIn
d3f0: 66 6f 29 3b 0a 20 20 69 66 28 20 70 52 65 74 20  fo);.  if( pRet 
d400: 29 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 52  ){.    memset(pR
d410: 65 74 2d 3e 61 4d 65 6d 2c 20 30 2c 20 73 69 7a  et->aMem, 0, siz
d420: 65 6f 66 28 4d 65 6d 29 2a 28 70 4b 65 79 49 6e  eof(Mem)*(pKeyIn
d430: 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 2b 31 29  fo->nKeyField+1)
d440: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
d450: 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
d460: 4b 65 79 49 6e 66 6f 2c 20 6e 4b 65 79 2c 20 70  KeyInfo, nKey, p
d470: 4b 65 79 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a  Key, pRet);.  }.
d480: 20 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a 7d    return pRet;.}
d490: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
d4a0: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
d4b0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 70 72  from within a pr
d4c0: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
d4d0: 6b 20 74 6f 20 72 65 74 72 69 65 76 65 0a 2a 2a  k to retrieve.**
d4e0: 20 61 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20   a field of the 
d4f0: 72 6f 77 20 63 75 72 72 65 6e 74 6c 79 20 62 65  row currently be
d500: 69 6e 67 20 75 70 64 61 74 65 64 20 6f 72 20 64  ing updated or d
d510: 65 6c 65 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  eleted..*/.int s
d520: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
d530: 5f 6f 6c 64 28 73 71 6c 69 74 65 33 20 2a 64 62  _old(sqlite3 *db
d540: 2c 20 69 6e 74 20 69 49 64 78 2c 20 73 71 6c 69  , int iIdx, sqli
d550: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 70 70 56 61  te3_value **ppVa
d560: 6c 75 65 29 7b 0a 20 20 50 72 65 55 70 64 61 74  lue){.  PreUpdat
d570: 65 20 2a 70 20 3d 20 64 62 2d 3e 70 50 72 65 55  e *p = db->pPreU
d580: 70 64 61 74 65 3b 0a 20 20 4d 65 6d 20 2a 70 4d  pdate;.  Mem *pM
d590: 65 6d 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53  em;.  int rc = S
d5a0: 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 2f 2a 20  QLITE_OK;..  /* 
d5b0: 54 65 73 74 20 74 68 61 74 20 74 68 69 73 20 63  Test that this c
d5c0: 61 6c 6c 20 69 73 20 62 65 69 6e 67 20 6d 61 64  all is being mad
d5d0: 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  e from within an
d5e0: 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 20 6f   SQLITE_DELETE o
d5f0: 72 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 50  r.  ** SQLITE_UP
d600: 44 41 54 45 20 70 72 65 2d 75 70 64 61 74 65 20  DATE pre-update 
d610: 63 61 6c 6c 62 61 63 6b 2c 20 61 6e 64 20 74 68  callback, and th
d620: 61 74 20 69 49 64 78 20 69 73 20 77 69 74 68 69  at iIdx is withi
d630: 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 69 66  n range. */.  if
d640: 28 20 21 70 20 7c 7c 20 70 2d 3e 6f 70 3d 3d 53  ( !p || p->op==S
d650: 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 29 7b 0a  QLITE_INSERT ){.
d660: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d670: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
d680: 20 67 6f 74 6f 20 70 72 65 75 70 64 61 74 65 5f   goto preupdate_
d690: 6f 6c 64 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69  old_out;.  }.  i
d6a0: 66 28 20 70 2d 3e 70 50 6b 20 29 7b 0a 20 20 20  f( p->pPk ){.   
d6b0: 20 69 49 64 78 20 3d 20 73 71 6c 69 74 65 33 43   iIdx = sqlite3C
d6c0: 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 70 2d 3e  olumnOfIndex(p->
d6d0: 70 50 6b 2c 20 69 49 64 78 29 3b 0a 20 20 7d 0a  pPk, iIdx);.  }.
d6e0: 20 20 69 66 28 20 69 49 64 78 3e 3d 70 2d 3e 70    if( iIdx>=p->p
d6f0: 43 73 72 2d 3e 6e 46 69 65 6c 64 20 7c 7c 20 69  Csr->nField || i
d700: 49 64 78 3c 30 20 29 7b 0a 20 20 20 20 72 63 20  Idx<0 ){.    rc 
d710: 3d 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a  = SQLITE_RANGE;.
d720: 20 20 20 20 67 6f 74 6f 20 70 72 65 75 70 64 61      goto preupda
d730: 74 65 5f 6f 6c 64 5f 6f 75 74 3b 0a 20 20 7d 0a  te_old_out;.  }.
d740: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 6f 6c 64  .  /* If the old
d750: 2e 2a 20 72 65 63 6f 72 64 20 68 61 73 20 6e 6f  .* record has no
d760: 74 20 79 65 74 20 62 65 65 6e 20 6c 6f 61 64 65  t yet been loade
d770: 64 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2c 20 64  d into memory, d
d780: 6f 20 73 6f 20 6e 6f 77 2e 20 2a 2f 0a 20 20 69  o so now. */.  i
d790: 66 28 20 70 2d 3e 70 55 6e 70 61 63 6b 65 64 3d  f( p->pUnpacked=
d7a0: 3d 30 20 29 7b 0a 20 20 20 20 75 33 32 20 6e 52  =0 ){.    u32 nR
d7b0: 65 63 3b 0a 20 20 20 20 75 38 20 2a 61 52 65 63  ec;.    u8 *aRec
d7c0: 3b 0a 0a 20 20 20 20 6e 52 65 63 20 3d 20 73 71  ;..    nRec = sq
d7d0: 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
d7e0: 64 53 69 7a 65 28 70 2d 3e 70 43 73 72 2d 3e 75  dSize(p->pCsr->u
d7f0: 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
d800: 61 52 65 63 20 3d 20 73 71 6c 69 74 65 33 44 62  aRec = sqlite3Db
d810: 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 6e 52  MallocRaw(db, nR
d820: 65 63 29 3b 0a 20 20 20 20 69 66 28 20 21 61 52  ec);.    if( !aR
d830: 65 63 20 29 20 67 6f 74 6f 20 70 72 65 75 70 64  ec ) goto preupd
d840: 61 74 65 5f 6f 6c 64 5f 6f 75 74 3b 0a 20 20 20  ate_old_out;.   
d850: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
d860: 65 65 50 61 79 6c 6f 61 64 28 70 2d 3e 70 43 73  eePayload(p->pCs
d870: 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  r->uc.pCursor, 0
d880: 2c 20 6e 52 65 63 2c 20 61 52 65 63 29 3b 0a 20  , nRec, aRec);. 
d890: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
d8a0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 70 2d  E_OK ){.      p-
d8b0: 3e 70 55 6e 70 61 63 6b 65 64 20 3d 20 76 64 62  >pUnpacked = vdb
d8c0: 65 55 6e 70 61 63 6b 52 65 63 6f 72 64 28 26 70  eUnpackRecord(&p
d8d0: 2d 3e 6b 65 79 69 6e 66 6f 2c 20 6e 52 65 63 2c  ->keyinfo, nRec,
d8e0: 20 61 52 65 63 29 3b 0a 20 20 20 20 20 20 69 66   aRec);.      if
d8f0: 28 20 21 70 2d 3e 70 55 6e 70 61 63 6b 65 64 20  ( !p->pUnpacked 
d900: 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
d910: 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  MEM;.    }.    i
d920: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
d930: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
d940: 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 65 63  3DbFree(db, aRec
d950: 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 70 72  );.      goto pr
d960: 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75 74 3b  eupdate_old_out;
d970: 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 61 52  .    }.    p->aR
d980: 65 63 6f 72 64 20 3d 20 61 52 65 63 3b 0a 20 20  ecord = aRec;.  
d990: 7d 0a 0a 20 20 70 4d 65 6d 20 3d 20 2a 70 70 56  }..  pMem = *ppV
d9a0: 61 6c 75 65 20 3d 20 26 70 2d 3e 70 55 6e 70 61  alue = &p->pUnpa
d9b0: 63 6b 65 64 2d 3e 61 4d 65 6d 5b 69 49 64 78 5d  cked->aMem[iIdx]
d9c0: 3b 0a 20 20 69 66 28 20 69 49 64 78 3d 3d 70 2d  ;.  if( iIdx==p-
d9d0: 3e 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  >pTab->iPKey ){.
d9e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d9f0: 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
da00: 20 70 2d 3e 69 4b 65 79 31 29 3b 0a 20 20 7d 65   p->iKey1);.  }e
da10: 6c 73 65 20 69 66 28 20 69 49 64 78 3e 3d 70 2d  lse if( iIdx>=p-
da20: 3e 70 55 6e 70 61 63 6b 65 64 2d 3e 6e 46 69 65  >pUnpacked->nFie
da30: 6c 64 20 29 7b 0a 20 20 20 20 2a 70 70 56 61 6c  ld ){.    *ppVal
da40: 75 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 76 61  ue = (sqlite3_va
da50: 6c 75 65 20 2a 29 63 6f 6c 75 6d 6e 4e 75 6c 6c  lue *)columnNull
da60: 56 61 6c 75 65 28 29 3b 0a 20 20 7d 65 6c 73 65  Value();.  }else
da70: 20 69 66 28 20 70 2d 3e 70 54 61 62 2d 3e 61 43   if( p->pTab->aC
da80: 6f 6c 5b 69 49 64 78 5d 2e 61 66 66 69 6e 69 74  ol[iIdx].affinit
da90: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
daa0: 41 4c 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4d  AL ){.    if( pM
dab0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
dac0: 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  _Int|MEM_IntReal
dad0: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
dae0: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
daf0: 28 70 4d 65 6d 29 3b 0a 20 20 20 20 7d 0a 20 20  (pMem);.    }.  
db00: 7d 0a 0a 20 70 72 65 75 70 64 61 74 65 5f 6f 6c  }.. preupdate_ol
db10: 64 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33  d_out:.  sqlite3
db20: 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 20  Error(db, rc);. 
db30: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 41   return sqlite3A
db40: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
db50: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
db60: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
db70: 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 0a 23 69 66  ATE_HOOK */..#if
db80: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
db90: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
dba0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  ./*.** This func
dbb0: 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 66  tion is called f
dbc0: 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 70 72 65  rom within a pre
dbd0: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
dbe0: 20 74 6f 20 72 65 74 72 69 65 76 65 0a 2a 2a 20   to retrieve.** 
dbf0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
dc00: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f 77  lumns in the row
dc10: 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2c 20   being updated, 
dc20: 64 65 6c 65 74 65 64 20 6f 72 20 69 6e 73 65 72  deleted or inser
dc30: 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ted..*/.int sqli
dc40: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 63 6f  te3_preupdate_co
dc50: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
dc60: 7b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70  {.  PreUpdate *p
dc70: 20 3d 20 64 62 2d 3e 70 50 72 65 55 70 64 61 74   = db->pPreUpdat
dc80: 65 3b 0a 20 20 72 65 74 75 72 6e 20 28 70 20 3f  e;.  return (p ?
dc90: 20 70 2d 3e 6b 65 79 69 6e 66 6f 2e 6e 4b 65 79   p->keyinfo.nKey
dca0: 46 69 65 6c 64 20 3a 20 30 29 3b 0a 7d 0a 23 65  Field : 0);.}.#e
dcb0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
dcc0: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
dcd0: 48 4f 4f 4b 20 2a 2f 0a 0a 23 69 66 64 65 66 20  HOOK */..#ifdef 
dce0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
dcf0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a  EUPDATE_HOOK./*.
dd00: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
dd10: 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
dd20: 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
dd30: 69 74 68 69 6e 20 61 20 70 72 65 2d 75 70 64 61  ithin a pre-upda
dd40: 74 65 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 6f  te callback.** o
dd50: 6e 6c 79 2e 20 49 74 20 72 65 74 75 72 6e 73 20  nly. It returns 
dd60: 7a 65 72 6f 20 69 66 20 74 68 65 20 63 68 61 6e  zero if the chan
dd70: 67 65 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ge that caused t
dd80: 68 65 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  he callback was 
dd90: 6d 61 64 65 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  made.** immediat
dda0: 65 6c 79 20 62 79 20 61 20 75 73 65 72 20 53 51  ely by a user SQ
ddb0: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 72 2c  L statement. Or,
ddc0: 20 69 66 20 74 68 65 20 63 68 61 6e 67 65 20 77   if the change w
ddd0: 61 73 20 6d 61 64 65 20 62 79 20 61 0a 2a 2a 20  as made by a.** 
dde0: 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c  trigger program,
ddf0: 20 69 74 20 72 65 74 75 72 6e 73 20 74 68 65 20   it returns the 
de00: 6e 75 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65  number of trigge
de10: 72 20 70 72 6f 67 72 61 6d 73 20 63 75 72 72 65  r programs curre
de20: 6e 74 6c 79 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  ntly.** on the s
de30: 74 61 63 6b 20 28 31 20 66 6f 72 20 61 20 74 6f  tack (1 for a to
de40: 70 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 2c  p-level trigger,
de50: 20 32 20 66 6f 72 20 61 20 74 72 69 67 67 65 72   2 for a trigger
de60: 20 66 69 72 65 64 20 62 79 20 61 20 0a 2a 2a 20   fired by a .** 
de70: 74 6f 70 2d 6c 65 76 65 6c 20 74 72 69 67 67 65  top-level trigge
de80: 72 20 65 74 63 2e 29 2e 0a 2a 2a 0a 2a 2a 20 46  r etc.)..**.** F
de90: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
dea0: 6f 66 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  of the previous 
deb0: 70 61 72 61 67 72 61 70 68 2c 20 61 20 66 6f 72  paragraph, a for
dec0: 65 69 67 6e 20 6b 65 79 20 43 41 53 43 41 44 45  eign key CASCADE
ded0: 2c 20 53 45 54 20 4e 55 4c 4c 0a 2a 2a 20 6f 72  , SET NULL.** or
dee0: 20 53 45 54 20 44 45 46 41 55 4c 54 20 61 63 74   SET DEFAULT act
def0: 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ion is considere
df00: 64 20 61 20 74 72 69 67 67 65 72 2e 0a 2a 2f 0a  d a trigger..*/.
df10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 75  int sqlite3_preu
df20: 70 64 61 74 65 5f 64 65 70 74 68 28 73 71 6c 69  pdate_depth(sqli
df30: 74 65 33 20 2a 64 62 29 7b 0a 20 20 50 72 65 55  te3 *db){.  PreU
df40: 70 64 61 74 65 20 2a 70 20 3d 20 64 62 2d 3e 70  pdate *p = db->p
df50: 50 72 65 55 70 64 61 74 65 3b 0a 20 20 72 65 74  PreUpdate;.  ret
df60: 75 72 6e 20 28 70 20 3f 20 70 2d 3e 76 2d 3e 6e  urn (p ? p->v->n
df70: 46 72 61 6d 65 20 3a 20 30 29 3b 0a 7d 0a 23 65  Frame : 0);.}.#e
df80: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
df90: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
dfa0: 48 4f 4f 4b 20 2a 2f 0a 0a 23 69 66 64 65 66 20  HOOK */..#ifdef 
dfb0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
dfc0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a  EUPDATE_HOOK./*.
dfd0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
dfe0: 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
dff0: 77 69 74 68 69 6e 20 61 20 70 72 65 2d 75 70 64  within a pre-upd
e000: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  ate callback to 
e010: 72 65 74 72 69 65 76 65 0a 2a 2a 20 61 20 66 69  retrieve.** a fi
e020: 65 6c 64 20 6f 66 20 74 68 65 20 72 6f 77 20 63  eld of the row c
e030: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 75  urrently being u
e040: 70 64 61 74 65 64 20 6f 72 20 69 6e 73 65 72 74  pdated or insert
e050: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
e060: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 6e 65 77  e3_preupdate_new
e070: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
e080: 74 20 69 49 64 78 2c 20 73 71 6c 69 74 65 33 5f  t iIdx, sqlite3_
e090: 76 61 6c 75 65 20 2a 2a 70 70 56 61 6c 75 65 29  value **ppValue)
e0a0: 7b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70  {.  PreUpdate *p
e0b0: 20 3d 20 64 62 2d 3e 70 50 72 65 55 70 64 61 74   = db->pPreUpdat
e0c0: 65 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  e;.  int rc = SQ
e0d0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 4d 65 6d 20 2a  LITE_OK;.  Mem *
e0e0: 70 4d 65 6d 3b 0a 0a 20 20 69 66 28 20 21 70 20  pMem;..  if( !p 
e0f0: 7c 7c 20 70 2d 3e 6f 70 3d 3d 53 51 4c 49 54 45  || p->op==SQLITE
e100: 5f 44 45 4c 45 54 45 20 29 7b 0a 20 20 20 20 72  _DELETE ){.    r
e110: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
e120: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f  E_BKPT;.    goto
e130: 20 70 72 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f   preupdate_new_o
e140: 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d  ut;.  }.  if( p-
e150: 3e 70 50 6b 20 26 26 20 70 2d 3e 6f 70 21 3d 53  >pPk && p->op!=S
e160: 51 4c 49 54 45 5f 55 50 44 41 54 45 20 29 7b 0a  QLITE_UPDATE ){.
e170: 20 20 20 20 69 49 64 78 20 3d 20 73 71 6c 69 74      iIdx = sqlit
e180: 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
e190: 70 2d 3e 70 50 6b 2c 20 69 49 64 78 29 3b 0a 20  p->pPk, iIdx);. 
e1a0: 20 7d 0a 20 20 69 66 28 20 69 49 64 78 3e 3d 70   }.  if( iIdx>=p
e1b0: 2d 3e 70 43 73 72 2d 3e 6e 46 69 65 6c 64 20 7c  ->pCsr->nField |
e1c0: 7c 20 69 49 64 78 3c 30 20 29 7b 0a 20 20 20 20  | iIdx<0 ){.    
e1d0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 41 4e 47  rc = SQLITE_RANG
e1e0: 45 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 65 75  E;.    goto preu
e1f0: 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74 3b 0a 20  pdate_new_out;. 
e200: 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6f 70 3d   }..  if( p->op=
e210: 3d 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 29  =SQLITE_INSERT )
e220: 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e 20  {.    /* For an 
e230: 49 4e 53 45 52 54 2c 20 6d 65 6d 6f 72 79 20 63  INSERT, memory c
e240: 65 6c 6c 20 70 2d 3e 69 4e 65 77 52 65 67 20 63  ell p->iNewReg c
e250: 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 65 72 69  ontains the seri
e260: 61 6c 69 7a 65 64 20 72 65 63 6f 72 64 0a 20 20  alized record.  
e270: 20 20 2a 2a 20 74 68 61 74 20 69 73 20 62 65 69    ** that is bei
e280: 6e 67 20 69 6e 73 65 72 74 65 64 2e 20 44 65 73  ng inserted. Des
e290: 65 72 69 61 6c 69 7a 65 20 69 74 2e 20 2a 2f 0a  erialize it. */.
e2a0: 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
e2b0: 72 64 20 2a 70 55 6e 70 61 63 6b 20 3d 20 70 2d  rd *pUnpack = p-
e2c0: 3e 70 4e 65 77 55 6e 70 61 63 6b 65 64 3b 0a 20  >pNewUnpacked;. 
e2d0: 20 20 20 69 66 28 20 21 70 55 6e 70 61 63 6b 20     if( !pUnpack 
e2e0: 29 7b 0a 20 20 20 20 20 20 4d 65 6d 20 2a 70 44  ){.      Mem *pD
e2f0: 61 74 61 20 3d 20 26 70 2d 3e 76 2d 3e 61 4d 65  ata = &p->v->aMe
e300: 6d 5b 70 2d 3e 69 4e 65 77 52 65 67 5d 3b 0a 20  m[p->iNewReg];. 
e310: 20 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64       rc = Expand
e320: 42 6c 6f 62 28 70 44 61 74 61 29 3b 0a 20 20 20  Blob(pData);.   
e330: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
e340: 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 70 72 65 75  E_OK ) goto preu
e350: 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74 3b 0a 20  pdate_new_out;. 
e360: 20 20 20 20 20 70 55 6e 70 61 63 6b 20 3d 20 76       pUnpack = v
e370: 64 62 65 55 6e 70 61 63 6b 52 65 63 6f 72 64 28  dbeUnpackRecord(
e380: 26 70 2d 3e 6b 65 79 69 6e 66 6f 2c 20 70 44 61  &p->keyinfo, pDa
e390: 74 61 2d 3e 6e 2c 20 70 44 61 74 61 2d 3e 7a 29  ta->n, pData->z)
e3a0: 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 55 6e  ;.      if( !pUn
e3b0: 70 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 20 20  pack ){.        
e3c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
e3d0: 4d 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  M;.        goto 
e3e0: 70 72 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f 75  preupdate_new_ou
e3f0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
e400: 20 70 2d 3e 70 4e 65 77 55 6e 70 61 63 6b 65 64   p->pNewUnpacked
e410: 20 3d 20 70 55 6e 70 61 63 6b 3b 0a 20 20 20 20   = pUnpack;.    
e420: 7d 0a 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 55  }.    pMem = &pU
e430: 6e 70 61 63 6b 2d 3e 61 4d 65 6d 5b 69 49 64 78  npack->aMem[iIdx
e440: 5d 3b 0a 20 20 20 20 69 66 28 20 69 49 64 78 3d  ];.    if( iIdx=
e450: 3d 70 2d 3e 70 54 61 62 2d 3e 69 50 4b 65 79 20  =p->pTab->iPKey 
e460: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
e470: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
e480: 70 4d 65 6d 2c 20 70 2d 3e 69 4b 65 79 32 29 3b  pMem, p->iKey2);
e490: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69  .    }else if( i
e4a0: 49 64 78 3e 3d 70 55 6e 70 61 63 6b 2d 3e 6e 46  Idx>=pUnpack->nF
e4b0: 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 4d  ield ){.      pM
e4c0: 65 6d 20 3d 20 28 73 71 6c 69 74 65 33 5f 76 61  em = (sqlite3_va
e4d0: 6c 75 65 20 2a 29 63 6f 6c 75 6d 6e 4e 75 6c 6c  lue *)columnNull
e4e0: 56 61 6c 75 65 28 29 3b 0a 20 20 20 20 7d 0a 20  Value();.    }. 
e4f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46   }else{.    /* F
e500: 6f 72 20 61 6e 20 55 50 44 41 54 45 2c 20 6d 65  or an UPDATE, me
e510: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 69 4e  mory cell (p->iN
e520: 65 77 52 65 67 2b 31 2b 69 49 64 78 29 20 63 6f  ewReg+1+iIdx) co
e530: 6e 74 61 69 6e 73 20 74 68 65 20 72 65 71 75 69  ntains the requi
e540: 72 65 64 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65  red.    ** value
e550: 2e 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  . Make a copy of
e560: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
e570: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20  ts and return a 
e580: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 20  pointer to it.. 
e590: 20 20 20 2a 2a 20 49 74 20 69 73 20 6e 6f 74 20     ** It is not 
e5a0: 73 61 66 65 20 74 6f 20 72 65 74 75 72 6e 20 61  safe to return a
e5b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
e5c0: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 74 73 65  memory cell itse
e5d0: 6c 66 20 61 73 20 74 68 65 0a 20 20 20 20 2a 2a  lf as the.    **
e5e0: 20 63 61 6c 6c 65 72 20 6d 61 79 20 6d 6f 64 69   caller may modi
e5f0: 66 79 20 74 68 65 20 76 61 6c 75 65 20 74 65 78  fy the value tex
e600: 74 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 20 20  t encoding..    
e610: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
e620: 2d 3e 6f 70 3d 3d 53 51 4c 49 54 45 5f 55 50 44  ->op==SQLITE_UPD
e630: 41 54 45 20 29 3b 0a 20 20 20 20 69 66 28 20 21  ATE );.    if( !
e640: 70 2d 3e 61 4e 65 77 20 29 7b 0a 20 20 20 20 20  p->aNew ){.     
e650: 20 70 2d 3e 61 4e 65 77 20 3d 20 28 4d 65 6d 20   p->aNew = (Mem 
e660: 2a 29 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  *)sqlite3DbMallo
e670: 63 5a 65 72 6f 28 64 62 2c 20 73 69 7a 65 6f 66  cZero(db, sizeof
e680: 28 4d 65 6d 29 20 2a 20 70 2d 3e 70 43 73 72 2d  (Mem) * p->pCsr-
e690: 3e 6e 46 69 65 6c 64 29 3b 0a 20 20 20 20 20 20  >nField);.      
e6a0: 69 66 28 20 21 70 2d 3e 61 4e 65 77 20 29 7b 0a  if( !p->aNew ){.
e6b0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
e6c0: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20  ITE_NOMEM;.     
e6d0: 20 20 20 67 6f 74 6f 20 70 72 65 75 70 64 61 74     goto preupdat
e6e0: 65 5f 6e 65 77 5f 6f 75 74 3b 0a 20 20 20 20 20  e_new_out;.     
e6f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
e700: 65 72 74 28 20 69 49 64 78 3e 3d 30 20 26 26 20  ert( iIdx>=0 && 
e710: 69 49 64 78 3c 70 2d 3e 70 43 73 72 2d 3e 6e 46  iIdx<p->pCsr->nF
e720: 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 4d 65 6d  ield );.    pMem
e730: 20 3d 20 26 70 2d 3e 61 4e 65 77 5b 69 49 64 78   = &p->aNew[iIdx
e740: 5d 3b 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  ];.    if( pMem-
e750: 3e 66 6c 61 67 73 3d 3d 30 20 29 7b 0a 20 20 20  >flags==0 ){.   
e760: 20 20 20 69 66 28 20 69 49 64 78 3d 3d 70 2d 3e     if( iIdx==p->
e770: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  pTab->iPKey ){. 
e780: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e790: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
e7a0: 65 6d 2c 20 70 2d 3e 69 4b 65 79 32 29 3b 0a 20  em, p->iKey2);. 
e7b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
e7c0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
e7d0: 56 64 62 65 4d 65 6d 43 6f 70 79 28 70 4d 65 6d  VdbeMemCopy(pMem
e7e0: 2c 20 26 70 2d 3e 76 2d 3e 61 4d 65 6d 5b 70 2d  , &p->v->aMem[p-
e7f0: 3e 69 4e 65 77 52 65 67 2b 31 2b 69 49 64 78 5d  >iNewReg+1+iIdx]
e800: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
e810: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
e820: 6f 74 6f 20 70 72 65 75 70 64 61 74 65 5f 6e 65  oto preupdate_ne
e830: 77 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  w_out;.      }. 
e840: 20 20 20 7d 0a 20 20 7d 0a 20 20 2a 70 70 56 61     }.  }.  *ppVa
e850: 6c 75 65 20 3d 20 70 4d 65 6d 3b 0a 0a 20 70 72  lue = pMem;.. pr
e860: 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74 3a  eupdate_new_out:
e870: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
e880: 64 62 2c 20 72 63 29 3b 0a 20 20 72 65 74 75 72  db, rc);.  retur
e890: 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  n sqlite3ApiExit
e8a0: 28 64 62 2c 20 72 63 29 3b 0a 7d 0a 23 65 6e 64  (db, rc);.}.#end
e8b0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
e8c0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
e8d0: 4f 4b 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51  OK */..#ifdef SQ
e8e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
e8f0: 5f 53 43 41 4e 53 54 41 54 55 53 0a 2f 2a 0a 2a  _SCANSTATUS./*.*
e900: 2a 20 52 65 74 75 72 6e 20 73 74 61 74 75 73 20  * Return status 
e910: 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
e920: 65 20 6c 6f 6f 70 20 77 69 74 68 69 6e 20 71 75  e loop within qu
e930: 65 72 79 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e  ery pStmt..*/.in
e940: 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  t sqlite3_stmt_s
e950: 63 61 6e 73 74 61 74 75 73 28 0a 20 20 73 71 6c  canstatus(.  sql
e960: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
e970: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ,            /* 
e980: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
e990: 6e 74 20 62 65 69 6e 67 20 71 75 65 72 69 65 64  nt being queried
e9a0: 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 2c 20 20   */.  int idx,  
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
e9d0: 66 20 6c 6f 6f 70 20 74 6f 20 72 65 70 6f 72 74  f loop to report
e9e0: 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 63   on */.  int iSc
e9f0: 61 6e 53 74 61 74 75 73 4f 70 2c 20 20 20 20 20  anStatusOp,     
ea00: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
ea10: 68 20 6d 65 74 72 69 63 20 74 6f 20 72 65 74 75  h metric to retu
ea20: 72 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4f  rn */.  void *pO
ea30: 75 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ut              
ea40: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
ea50: 57 72 69 74 65 20 74 68 65 20 61 6e 73 77 65 72  Write the answer
ea60: 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 56 64   here */.){.  Vd
ea70: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
ea80: 53 74 6d 74 3b 0a 20 20 53 63 61 6e 53 74 61 74  Stmt;.  ScanStat
ea90: 75 73 20 2a 70 53 63 61 6e 3b 0a 20 20 69 66 28  us *pScan;.  if(
eaa0: 20 69 64 78 3c 30 20 7c 7c 20 69 64 78 3e 3d 70   idx<0 || idx>=p
eab0: 2d 3e 6e 53 63 61 6e 20 29 20 72 65 74 75 72 6e  ->nScan ) return
eac0: 20 31 3b 0a 20 20 70 53 63 61 6e 20 3d 20 26 70   1;.  pScan = &p
ead0: 2d 3e 61 53 63 61 6e 5b 69 64 78 5d 3b 0a 20 20  ->aScan[idx];.  
eae0: 73 77 69 74 63 68 28 20 69 53 63 61 6e 53 74 61  switch( iScanSta
eaf0: 74 75 73 4f 70 20 29 7b 0a 20 20 20 20 63 61 73  tusOp ){.    cas
eb00: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
eb10: 54 5f 4e 4c 4f 4f 50 3a 20 7b 0a 20 20 20 20 20  T_NLOOP: {.     
eb20: 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34   *(sqlite3_int64
eb30: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45 78  *)pOut = p->anEx
eb40: 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 4c 6f  ec[pScan->addrLo
eb50: 6f 70 5d 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  op];.      break
eb60: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
eb70: 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54   SQLITE_SCANSTAT
eb80: 5f 4e 56 49 53 49 54 3a 20 7b 0a 20 20 20 20 20  _NVISIT: {.     
eb90: 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34   *(sqlite3_int64
eba0: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45 78  *)pOut = p->anEx
ebb0: 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 56 69  ec[pScan->addrVi
ebc0: 73 69 74 5d 3b 0a 20 20 20 20 20 20 62 72 65 61  sit];.      brea
ebd0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
ebe0: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
ebf0: 54 5f 45 53 54 3a 20 7b 0a 20 20 20 20 20 20 64  T_EST: {.      d
ec00: 6f 75 62 6c 65 20 72 20 3d 20 31 2e 30 3b 0a 20  ouble r = 1.0;. 
ec10: 20 20 20 20 20 4c 6f 67 45 73 74 20 78 20 3d 20       LogEst x = 
ec20: 70 53 63 61 6e 2d 3e 6e 45 73 74 3b 0a 20 20 20  pScan->nEst;.   
ec30: 20 20 20 77 68 69 6c 65 28 20 78 3c 31 30 30 20     while( x<100 
ec40: 29 7b 0a 20 20 20 20 20 20 20 20 78 20 2b 3d 20  ){.        x += 
ec50: 31 30 3b 0a 20 20 20 20 20 20 20 20 72 20 2a 3d  10;.        r *=
ec60: 20 30 2e 35 3b 0a 20 20 20 20 20 20 7d 0a 20 20   0.5;.      }.  
ec70: 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 70 4f      *(double*)pO
ec80: 75 74 20 3d 20 72 2a 73 71 6c 69 74 65 33 4c 6f  ut = r*sqlite3Lo
ec90: 67 45 73 74 54 6f 49 6e 74 28 78 29 3b 0a 20 20  gEstToInt(x);.  
eca0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
ecb0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
ecc0: 5f 53 43 41 4e 53 54 41 54 5f 4e 41 4d 45 3a 20  _SCANSTAT_NAME: 
ecd0: 7b 0a 20 20 20 20 20 20 2a 28 63 6f 6e 73 74 20  {.      *(const 
ece0: 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20 70 53  char**)pOut = pS
ecf0: 63 61 6e 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 20 20  can->zName;.    
ed00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
ed10: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53     case SQLITE_S
ed20: 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e 3a  CANSTAT_EXPLAIN:
ed30: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53 63   {.      if( pSc
ed40: 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e 20  an->addrExplain 
ed50: 29 7b 0a 20 20 20 20 20 20 20 20 2a 28 63 6f 6e  ){.        *(con
ed60: 73 74 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d  st char**)pOut =
ed70: 20 70 2d 3e 61 4f 70 5b 20 70 53 63 61 6e 2d 3e   p->aOp[ pScan->
ed80: 61 64 64 72 45 78 70 6c 61 69 6e 20 5d 2e 70 34  addrExplain ].p4
ed90: 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  .z;.      }else{
eda0: 0a 20 20 20 20 20 20 20 20 2a 28 63 6f 6e 73 74  .        *(const
edb0: 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20 30   char**)pOut = 0
edc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
edd0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
ede0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 41   case SQLITE_SCA
edf0: 4e 53 54 41 54 5f 53 45 4c 45 43 54 49 44 3a 20  NSTAT_SELECTID: 
ee00: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53 63 61  {.      if( pSca
ee10: 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e 20 29  n->addrExplain )
ee20: 7b 0a 20 20 20 20 20 20 20 20 2a 28 69 6e 74 2a  {.        *(int*
ee30: 29 70 4f 75 74 20 3d 20 70 2d 3e 61 4f 70 5b 20  )pOut = p->aOp[ 
ee40: 70 53 63 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61  pScan->addrExpla
ee50: 69 6e 20 5d 2e 70 31 3b 0a 20 20 20 20 20 20 7d  in ].p1;.      }
ee60: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 28  else{.        *(
ee70: 69 6e 74 2a 29 70 4f 75 74 20 3d 20 2d 31 3b 0a  int*)pOut = -1;.
ee80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
ee90: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  eak;.    }.    d
eea0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
eeb0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
eec0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
eed0: 7d 0a 0a 2f 2a 0a 2a 2a 20 5a 65 72 6f 20 61 6c  }../*.** Zero al
eee0: 6c 20 63 6f 75 6e 74 65 72 73 20 61 73 73 6f 63  l counters assoc
eef0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
ef00: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
ef10: 73 74 61 74 75 73 28 29 20 64 61 74 61 2e 0a 2a  status() data..*
ef20: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
ef30: 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 5f 72  tmt_scanstatus_r
ef40: 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  eset(sqlite3_stm
ef50: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
ef60: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
ef70: 74 6d 74 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d  tmt;.  memset(p-
ef80: 3e 61 6e 45 78 65 63 2c 20 30 2c 20 70 2d 3e 6e  >anExec, 0, p->n
ef90: 4f 70 20 2a 20 73 69 7a 65 6f 66 28 69 36 34 29  Op * sizeof(i64)
efa0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
efb0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
efc0: 54 5f 53 43 41 4e 53 54 41 54 55 53 20 2a 2f 0a  T_SCANSTATUS */.