/ Hex Artifact Content
Login

Artifact 87c9a5517aeeb0f8d53168201dd2275e0e926f6e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 34 20 4d 61 79 20 32  /*.** 2004 May 2
0010: 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  6.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0180: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0190: 73 65 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  se to implement 
01a0: 41 50 49 73 20 74 68 61 74 20 61 72 65 20 70 61  APIs that are pa
01b0: 72 74 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  rt of the.** VDB
01c0: 45 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  E..*/.#include "
01d0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e  sqliteInt.h".#in
01e0: 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68  clude "vdbeInt.h
01f0: 22 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  "..#ifndef SQLIT
0200: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
0210: 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54  D./*.** Return T
0220: 52 55 45 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 6f  RUE (non-zero) o
0230: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
0240: 73 75 70 70 6c 69 65 64 20 61 73 20 61 6e 20 61  supplied as an a
0250: 72 67 75 6d 65 6e 74 20 6e 65 65 64 73 0a 2a 2a  rgument needs.**
0260: 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65   to be recompile
0270: 64 2e 20 20 41 20 73 74 61 74 65 6d 65 6e 74 20  d.  A statement 
0280: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 63 6f  needs to be reco
0290: 6d 70 69 6c 65 64 20 77 68 65 6e 65 76 65 72 20  mpiled whenever 
02a0: 74 68 65 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e  the.** execution
02b0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 63 68 61   environment cha
02c0: 6e 67 65 73 20 69 6e 20 61 20 77 61 79 20 74 68  nges in a way th
02d0: 61 74 20 77 6f 75 6c 64 20 61 6c 74 65 72 20 74  at would alter t
02e0: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 74 68  he program.** th
02f0: 61 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  at sqlite3_prepa
0300: 72 65 28 29 20 67 65 6e 65 72 61 74 65 73 2e 20  re() generates. 
0310: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66   For example, if
0320: 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 20 6f   new functions o
0330: 72 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  r.** collating s
0340: 65 71 75 65 6e 63 65 73 20 61 72 65 20 72 65 67  equences are reg
0350: 69 73 74 65 72 65 64 20 6f 72 20 69 66 20 61 6e  istered or if an
0360: 20 61 75 74 68 6f 72 69 7a 65 72 20 66 75 6e 63   authorizer func
0370: 74 69 6f 6e 20 69 73 0a 2a 2a 20 61 64 64 65 64  tion is.** added
0380: 20 6f 72 20 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a   or changed..*/.
0390: 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 70 69  int sqlite3_expi
03a0: 72 65 64 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  red(sqlite3_stmt
03b0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65   *pStmt){.  Vdbe
03c0: 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *p = (Vdbe*)pSt
03d0: 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 3d 3d  mt;.  return p==
03e0: 30 20 7c 7c 20 70 2d 3e 65 78 70 69 72 65 64 3b  0 || p->expired;
03f0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
0400: 20 43 68 65 63 6b 20 6f 6e 20 61 20 56 64 62 65   Check on a Vdbe
0410: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 74   to make sure it
0420: 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 66 69   has not been fi
0430: 6e 61 6c 69 7a 65 64 2e 20 20 4c 6f 67 0a 2a 2a  nalized.  Log.**
0440: 20 61 6e 20 65 72 72 6f 72 20 61 6e 64 20 72 65   an error and re
0450: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
0460: 68 61 73 20 62 65 65 6e 20 66 69 6e 61 6c 69 7a  has been finaliz
0470: 65 64 20 28 6f 72 20 69 73 20 6f 74 68 65 72 77  ed (or is otherw
0480: 69 73 65 0a 2a 2a 20 69 6e 76 61 6c 69 64 29 2e  ise.** invalid).
0490: 20 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69    Return false i
04a0: 66 20 69 74 20 69 73 20 6f 6b 2e 0a 2a 2f 0a 73  f it is ok..*/.s
04b0: 74 61 74 69 63 20 69 6e 74 20 76 64 62 65 53 61  tatic int vdbeSa
04c0: 66 65 74 79 28 56 64 62 65 20 2a 70 29 7b 0a 20  fety(Vdbe *p){. 
04d0: 20 69 66 28 20 70 2d 3e 64 62 3d 3d 30 20 29 7b   if( p->db==0 ){
04e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
04f0: 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20  (SQLITE_MISUSE, 
0500: 22 41 50 49 20 63 61 6c 6c 65 64 20 77 69 74 68  "API called with
0510: 20 66 69 6e 61 6c 69 7a 65 64 20 70 72 65 70 61   finalized prepa
0520: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 22 29 3b  red statement");
0530: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
0540: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
0550: 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  rn 0;.  }.}.stat
0560: 69 63 20 69 6e 74 20 76 64 62 65 53 61 66 65 74  ic int vdbeSafet
0570: 79 4e 6f 74 4e 75 6c 6c 28 56 64 62 65 20 2a 70  yNotNull(Vdbe *p
0580: 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 7b  ){.  if( p==0 ){
0590: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
05a0: 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20  (SQLITE_MISUSE, 
05b0: 22 41 50 49 20 63 61 6c 6c 65 64 20 77 69 74 68  "API called with
05c0: 20 4e 55 4c 4c 20 70 72 65 70 61 72 65 64 20 73   NULL prepared s
05d0: 74 61 74 65 6d 65 6e 74 22 29 3b 0a 20 20 20 20  tatement");.    
05e0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
05f0: 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 76 64  e{.    return vd
0600: 62 65 53 61 66 65 74 79 28 70 29 3b 0a 20 20 7d  beSafety(p);.  }
0610: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
0620: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
0630: 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74 75  destroys a virtu
0640: 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74 20  al machine that 
0650: 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
0660: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6d   the sqlite3_com
0670: 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e 20  pile() routine. 
0680: 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74 75  The integer retu
0690: 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49 54  rned is an SQLIT
06a0: 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66 61  E_.** success/fa
06b0: 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74 20  ilure code that 
06c0: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72 65  describes the re
06d0: 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69 6e  sult of executin
06e0: 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  g the virtual.**
06f0: 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20   machine..**.** 
0700: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
0710: 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  s the error code
0720: 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75   and string retu
0730: 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  rned by.** sqlit
0740: 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71  e3_errcode(), sq
0750: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
0760: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  nd sqlite3_errms
0770: 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  g16()..*/.int sq
0780: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73  lite3_finalize(s
0790: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
07a0: 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  mt){.  int rc;. 
07b0: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
07c0: 0a 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e  .    /* IMPLEMEN
07d0: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 35 37 32  TATION-OF: R-572
07e0: 32 38 2d 31 32 39 30 34 20 49 6e 76 6f 6b 69 6e  28-12904 Invokin
07f0: 67 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  g sqlite3_finali
0800: 7a 65 28 29 20 6f 6e 20 61 20 4e 55 4c 4c 0a 20  ze() on a NULL. 
0810: 20 20 20 2a 2a 20 70 6f 69 6e 74 65 72 20 69 73     ** pointer is
0820: 20 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f   a harmless no-o
0830: 70 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53  p. */.    rc = S
0840: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
0850: 65 7b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d  e{.    Vdbe *v =
0860: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
0870: 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d     sqlite3 *db =
0880: 20 76 2d 3e 64 62 3b 0a 20 20 20 20 69 66 28 20   v->db;.    if( 
0890: 76 64 62 65 53 61 66 65 74 79 28 76 29 20 29 20  vdbeSafety(v) ) 
08a0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
08b0: 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 73  SUSE_BKPT;.    s
08c0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
08d0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
08e0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
08f0: 64 62 65 46 69 6e 61 6c 69 7a 65 28 76 29 3b 0a  dbeFinalize(v);.
0900: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
0910: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
0920: 0a 20 20 20 20 73 71 6c 69 74 65 33 4c 65 61 76  .    sqlite3Leav
0930: 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
0940: 6d 62 69 65 28 64 62 29 3b 0a 20 20 7d 0a 20 20  mbie(db);.  }.  
0950: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
0960: 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20 74 68  .** Terminate th
0970: 65 20 63 75 72 72 65 6e 74 20 65 78 65 63 75 74  e current execut
0980: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 73 74  ion of an SQL st
0990: 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 73 65  atement and rese
09a0: 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74 6f 20  t it.** back to 
09b0: 69 74 73 20 73 74 61 72 74 69 6e 67 20 73 74 61  its starting sta
09c0: 74 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  te so that it ca
09d0: 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41 20 73  n be reused. A s
09e0: 75 63 63 65 73 73 20 63 6f 64 65 20 66 72 6f 6d  uccess code from
09f0: 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20 65 78  .** the prior ex
0a00: 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74 75 72  ecution is retur
0a10: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ned..**.** This 
0a20: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
0a30: 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20   error code and 
0a40: 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20  string returned 
0a50: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72  by.** sqlite3_er
0a60: 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33  rcode(), sqlite3
0a70: 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71  _errmsg() and sq
0a80: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29  lite3_errmsg16()
0a90: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
0aa0: 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73  _reset(sqlite3_s
0ab0: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
0ac0: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74  nt rc;.  if( pSt
0ad0: 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  mt==0 ){.    rc 
0ae0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
0af0: 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 20 2a  else{.    Vdbe *
0b00: 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  v = (Vdbe*)pStmt
0b10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  ;.    sqlite3_mu
0b20: 74 65 78 5f 65 6e 74 65 72 28 76 2d 3e 64 62 2d  tex_enter(v->db-
0b30: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 72 63 20  >mutex);.    rc 
0b40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73  = sqlite3VdbeRes
0b50: 65 74 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  et(v);.    sqlit
0b60: 65 33 56 64 62 65 52 65 77 69 6e 64 28 76 29 3b  e3VdbeRewind(v);
0b70: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 72 63  .    assert( (rc
0b80: 20 26 20 28 76 2d 3e 64 62 2d 3e 65 72 72 4d 61   & (v->db->errMa
0b90: 73 6b 29 29 3d 3d 72 63 20 29 3b 0a 20 20 20 20  sk))==rc );.    
0ba0: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45  rc = sqlite3ApiE
0bb0: 78 69 74 28 76 2d 3e 64 62 2c 20 72 63 29 3b 0a  xit(v->db, rc);.
0bc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
0bd0: 78 5f 6c 65 61 76 65 28 76 2d 3e 64 62 2d 3e 6d  x_leave(v->db->m
0be0: 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74  utex);.  }.  ret
0bf0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
0c00: 20 53 65 74 20 61 6c 6c 20 74 68 65 20 70 61 72   Set all the par
0c10: 61 6d 65 74 65 72 73 20 69 6e 20 74 68 65 20 63  ameters in the c
0c20: 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74  ompiled SQL stat
0c30: 65 6d 65 6e 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a  ement to NULL..*
0c40: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6c  /.int sqlite3_cl
0c50: 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 73 71 6c  ear_bindings(sql
0c60: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
0c70: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  ){.  int i;.  in
0c80: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
0c90: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
0ca0: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 23 69 66 20  dbe*)pStmt;.#if 
0cb0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
0cc0: 45 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  E.  sqlite3_mute
0cd0: 78 20 2a 6d 75 74 65 78 20 3d 20 28 28 56 64 62  x *mutex = ((Vdb
0ce0: 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62 2d 3e 6d  e*)pStmt)->db->m
0cf0: 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20 73  utex;.#endif.  s
0d00: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
0d10: 65 72 28 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72  er(mutex);.  for
0d20: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b  (i=0; i<p->nVar;
0d30: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
0d40: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
0d50: 28 26 70 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20  (&p->aVar[i]);. 
0d60: 20 20 20 70 2d 3e 61 56 61 72 5b 69 5d 2e 66 6c     p->aVar[i].fl
0d70: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
0d80: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 69 73 50    }.  if( p->isP
0d90: 72 65 70 61 72 65 56 32 20 26 26 20 70 2d 3e 65  repareV2 && p->e
0da0: 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20 70 2d  xpmask ){.    p-
0db0: 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
0dc0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
0dd0: 78 5f 6c 65 61 76 65 28 6d 75 74 65 78 29 3b 0a  x_leave(mutex);.
0de0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
0df0: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
0e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73  ************** s
0e10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 20 20 2a  qlite3_value_  *
0e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
0e40: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0e50: 72 6f 75 74 69 6e 65 73 20 65 78 74 72 61 63 74  routines extract
0e60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
0e70: 6d 20 61 20 4d 65 6d 20 6f 72 20 73 71 6c 69 74  m a Mem or sqlit
0e80: 65 33 5f 76 61 6c 75 65 0a 2a 2a 20 73 74 72 75  e3_value.** stru
0e90: 63 74 75 72 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  cture..*/.const 
0ea0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61  void *sqlite3_va
0eb0: 6c 75 65 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33  lue_blob(sqlite3
0ec0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
0ed0: 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d 2a 29   Mem *p = (Mem*)
0ee0: 70 56 61 6c 3b 0a 20 20 69 66 28 20 70 2d 3e 66  pVal;.  if( p->f
0ef0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
0f00: 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20  |MEM_Str) ){.   
0f10: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
0f20: 78 70 61 6e 64 42 6c 6f 62 28 70 29 3b 0a 20 20  xpandBlob(p);.  
0f30: 20 20 70 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45    p->flags |= ME
0f40: 4d 5f 42 6c 6f 62 3b 0a 20 20 20 20 72 65 74 75  M_Blob;.    retu
0f50: 72 6e 20 70 2d 3e 6e 20 3f 20 70 2d 3e 7a 20 3a  rn p->n ? p->z :
0f60: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
0f70: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
0f80: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
0f90: 3b 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c 69  ;.  }.}.int sqli
0fa0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
0fb0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
0fc0: 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  Val){.  return s
0fd0: 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73  qlite3ValueBytes
0fe0: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
0ff0: 46 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  F8);.}.int sqlit
1000: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36  e3_value_bytes16
1010: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
1020: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
1030: 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
1040: 73 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  s(pVal, SQLITE_U
1050: 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d 0a 64  TF16NATIVE);.}.d
1060: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 76 61  ouble sqlite3_va
1070: 6c 75 65 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  lue_double(sqlit
1080: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
1090: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
10a0: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 28  3VdbeRealValue((
10b0: 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 69 6e  Mem*)pVal);.}.in
10c0: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  t sqlite3_value_
10d0: 69 6e 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  int(sqlite3_valu
10e0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74 75  e *pVal){.  retu
10f0: 72 6e 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56  rn (int)sqlite3V
1100: 64 62 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d  dbeIntValue((Mem
1110: 2a 29 70 56 61 6c 29 3b 0a 7d 0a 73 71 6c 69 74  *)pVal);.}.sqlit
1120: 65 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f  e_int64 sqlite3_
1130: 76 61 6c 75 65 5f 69 6e 74 36 34 28 73 71 6c 69  value_int64(sqli
1140: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
1150: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
1160: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 28  e3VdbeIntValue((
1170: 4d 65 6d 2a 29 70 56 61 6c 29 3b 0a 7d 0a 63 6f  Mem*)pVal);.}.co
1180: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1190: 72 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r *sqlite3_value
11a0: 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61  _text(sqlite3_va
11b0: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
11c0: 74 75 72 6e 20 28 63 6f 6e 73 74 20 75 6e 73 69  turn (const unsi
11d0: 67 6e 65 64 20 63 68 61 72 20 2a 29 73 71 6c 69  gned char *)sqli
11e0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
11f0: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  l, SQLITE_UTF8);
1200: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
1210: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
1220: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
1230: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 73 71  _value_text16(sq
1240: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56 61  lite3_value* pVa
1250: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
1260: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
1270: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
1280: 4e 41 54 49 56 45 29 3b 0a 7d 0a 63 6f 6e 73 74  NATIVE);.}.const
1290: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 76   void *sqlite3_v
12a0: 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 73 71  alue_text16be(sq
12b0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
12c0: 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  l){.  return sql
12d0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
12e0: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
12f0: 42 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69  BE);.}.const voi
1300: 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d *sqlite3_value
1310: 5f 74 65 78 74 31 36 6c 65 28 73 71 6c 69 74 65  _text16le(sqlite
1320: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
1330: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
1340: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
1350: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 3b  SQLITE_UTF16LE);
1360: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
1370: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
1380: 2f 0a 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  /./* EVIDENCE-OF
1390: 3a 20 52 2d 31 32 37 39 33 2d 34 33 32 38 33 20  : R-12793-43283 
13a0: 45 76 65 72 79 20 76 61 6c 75 65 20 69 6e 20 53  Every value in S
13b0: 51 4c 69 74 65 20 68 61 73 20 6f 6e 65 20 6f 66  QLite has one of
13c0: 20 66 69 76 65 0a 2a 2a 20 66 75 6e 64 61 6d 65   five.** fundame
13d0: 6e 74 61 6c 20 64 61 74 61 74 79 70 65 73 3a 20  ntal datatypes: 
13e0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
13f0: 74 65 67 65 72 20 36 34 2d 62 69 74 20 49 45 45  teger 64-bit IEE
1400: 45 20 66 6c 6f 61 74 69 6e 67 0a 2a 2a 20 70 6f  E floating.** po
1410: 69 6e 74 20 6e 75 6d 62 65 72 20 73 74 72 69 6e  int number strin
1420: 67 20 42 4c 4f 42 20 4e 55 4c 4c 0a 2a 2f 0a 69  g BLOB NULL.*/.i
1430: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
1440: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
1450: 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20 73 74  lue* pVal){.  st
1460: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 61 54  atic const u8 aT
1470: 79 70 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 53  ype[] = {.     S
1480: 51 4c 49 54 45 5f 42 4c 4f 42 2c 20 20 20 20 20  QLITE_BLOB,     
1490: 2f 2a 20 30 78 30 30 20 2a 2f 0a 20 20 20 20 20  /* 0x00 */.     
14a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20  SQLITE_NULL,    
14b0: 20 2f 2a 20 30 78 30 31 20 2a 2f 0a 20 20 20 20   /* 0x01 */.    
14c0: 20 53 51 4c 49 54 45 5f 54 45 58 54 2c 20 20 20   SQLITE_TEXT,   
14d0: 20 20 2f 2a 20 30 78 30 32 20 2a 2f 0a 20 20 20    /* 0x02 */.   
14e0: 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20    SQLITE_NULL,  
14f0: 20 20 20 2f 2a 20 30 78 30 33 20 2a 2f 0a 20 20     /* 0x03 */.  
1500: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45     SQLITE_INTEGE
1510: 52 2c 20 20 2f 2a 20 30 78 30 34 20 2a 2f 0a 20  R,  /* 0x04 */. 
1520: 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c      SQLITE_NULL,
1530: 20 20 20 20 20 2f 2a 20 30 78 30 35 20 2a 2f 0a       /* 0x05 */.
1540: 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45       SQLITE_INTE
1550: 47 45 52 2c 20 20 2f 2a 20 30 78 30 36 20 2a 2f  GER,  /* 0x06 */
1560: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c  .     SQLITE_NUL
1570: 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30 37 20 2a  L,     /* 0x07 *
1580: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 4c  /.     SQLITE_FL
1590: 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 30 38 20  OAT,    /* 0x08 
15a0: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e  */.     SQLITE_N
15b0: 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30 39  ULL,     /* 0x09
15c0: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
15d0: 46 4c 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 30  FLOAT,    /* 0x0
15e0: 61 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  a */.     SQLITE
15f0: 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78  _NULL,     /* 0x
1600: 30 62 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  0b */.     SQLIT
1610: 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30  E_INTEGER,  /* 0
1620: 78 30 63 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x0c */.     SQLI
1630: 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20  TE_NULL,     /* 
1640: 30 78 30 64 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x0d */.     SQL
1650: 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a  ITE_INTEGER,  /*
1660: 20 30 78 30 65 20 2a 2f 0a 20 20 20 20 20 53 51   0x0e */.     SQ
1670: 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f  LITE_NULL,     /
1680: 2a 20 30 78 30 66 20 2a 2f 0a 20 20 20 20 20 53  * 0x0f */.     S
1690: 51 4c 49 54 45 5f 42 4c 4f 42 2c 20 20 20 20 20  QLITE_BLOB,     
16a0: 2f 2a 20 30 78 31 30 20 2a 2f 0a 20 20 20 20 20  /* 0x10 */.     
16b0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20  SQLITE_NULL,    
16c0: 20 2f 2a 20 30 78 31 31 20 2a 2f 0a 20 20 20 20   /* 0x11 */.    
16d0: 20 53 51 4c 49 54 45 5f 54 45 58 54 2c 20 20 20   SQLITE_TEXT,   
16e0: 20 20 2f 2a 20 30 78 31 32 20 2a 2f 0a 20 20 20    /* 0x12 */.   
16f0: 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20    SQLITE_NULL,  
1700: 20 20 20 2f 2a 20 30 78 31 33 20 2a 2f 0a 20 20     /* 0x13 */.  
1710: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45     SQLITE_INTEGE
1720: 52 2c 20 20 2f 2a 20 30 78 31 34 20 2a 2f 0a 20  R,  /* 0x14 */. 
1730: 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c      SQLITE_NULL,
1740: 20 20 20 20 20 2f 2a 20 30 78 31 35 20 2a 2f 0a       /* 0x15 */.
1750: 20 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45       SQLITE_INTE
1760: 47 45 52 2c 20 20 2f 2a 20 30 78 31 36 20 2a 2f  GER,  /* 0x16 */
1770: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c  .     SQLITE_NUL
1780: 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31 37 20 2a  L,     /* 0x17 *
1790: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 4c  /.     SQLITE_FL
17a0: 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 31 38 20  OAT,    /* 0x18 
17b0: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e  */.     SQLITE_N
17c0: 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31 39  ULL,     /* 0x19
17d0: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
17e0: 46 4c 4f 41 54 2c 20 20 20 20 2f 2a 20 30 78 31  FLOAT,    /* 0x1
17f0: 61 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  a */.     SQLITE
1800: 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78  _NULL,     /* 0x
1810: 31 62 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  1b */.     SQLIT
1820: 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30  E_INTEGER,  /* 0
1830: 78 31 63 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x1c */.     SQLI
1840: 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20  TE_NULL,     /* 
1850: 30 78 31 64 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x1d */.     SQL
1860: 49 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a  ITE_INTEGER,  /*
1870: 20 30 78 31 65 20 2a 2f 0a 20 20 20 20 20 53 51   0x1e */.     SQ
1880: 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f  LITE_NULL,     /
1890: 2a 20 30 78 31 66 20 2a 2f 0a 20 20 7d 3b 0a 20  * 0x1f */.  };. 
18a0: 20 72 65 74 75 72 6e 20 61 54 79 70 65 5b 70 56   return aType[pV
18b0: 61 6c 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 41 66  al->flags&MEM_Af
18c0: 66 4d 61 73 6b 5d 3b 0a 7d 0a 0a 2f 2a 20 4d 61  fMask];.}../* Ma
18d0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 61 6e 20  ke a copy of an 
18e0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62  sqlite3_value ob
18f0: 6a 65 63 74 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f  ject.*/.sqlite3_
1900: 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 5f 76  value *sqlite3_v
1910: 61 6c 75 65 5f 64 75 70 28 63 6f 6e 73 74 20 73  alue_dup(const s
1920: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 4f  qlite3_value *pO
1930: 72 69 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  rig){.  sqlite3_
1940: 76 61 6c 75 65 20 2a 70 4e 65 77 3b 0a 20 20 69  value *pNew;.  i
1950: 66 28 20 70 4f 72 69 67 3d 3d 30 20 29 20 72 65  f( pOrig==0 ) re
1960: 74 75 72 6e 20 30 3b 0a 20 20 70 4e 65 77 20 3d  turn 0;.  pNew =
1970: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
1980: 20 73 69 7a 65 6f 66 28 2a 70 4e 65 77 29 20 29   sizeof(*pNew) )
1990: 3b 0a 20 20 69 66 28 20 70 4e 65 77 3d 3d 30 20  ;.  if( pNew==0 
19a0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6d 65  ) return 0;.  me
19b0: 6d 73 65 74 28 70 4e 65 77 2c 20 30 2c 20 73 69  mset(pNew, 0, si
19c0: 7a 65 6f 66 28 2a 70 4e 65 77 29 29 3b 0a 20 20  zeof(*pNew));.  
19d0: 6d 65 6d 63 70 79 28 70 4e 65 77 2c 20 70 4f 72  memcpy(pNew, pOr
19e0: 69 67 2c 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29  ig, MEMCELLSIZE)
19f0: 3b 0a 20 20 70 4e 65 77 2d 3e 66 6c 61 67 73 20  ;.  pNew->flags 
1a00: 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70  &= ~MEM_Dyn;.  p
1a10: 4e 65 77 2d 3e 64 62 20 3d 20 30 3b 0a 20 20 69  New->db = 0;.  i
1a20: 66 28 20 70 4e 65 77 2d 3e 66 6c 61 67 73 26 28  f( pNew->flags&(
1a30: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
1a40: 29 20 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d  ) ){.    if( 0==
1a50: 28 70 4f 72 69 67 2d 3e 66 6c 61 67 73 26 4d 45  (pOrig->flags&ME
1a60: 4d 5f 53 74 61 74 69 63 29 20 29 7b 0a 20 20 20  M_Static) ){.   
1a70: 20 20 20 70 4e 65 77 2d 3e 66 6c 61 67 73 20 7c     pNew->flags |
1a80: 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  = MEM_Ephem;.   
1a90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1aa0: 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
1ab0: 4e 65 77 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  New);.    }.  }.
1ac0: 20 20 72 65 74 75 72 6e 20 70 4e 65 77 3b 0a 7d    return pNew;.}
1ad0: 0a 0a 2f 2a 20 44 65 73 74 72 6f 79 20 61 6e 20  ../* Destroy an 
1ae0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 6f 62  sqlite3_value ob
1af0: 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c 79 20  ject previously 
1b00: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a 2a 2a  obtained from.**
1b10: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
1b20: 75 70 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  up()..*/.void sq
1b30: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 66 72 65 65  lite3_value_free
1b40: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
1b50: 70 4f 6c 64 29 7b 0a 20 20 73 71 6c 69 74 65 33  pOld){.  sqlite3
1b60: 56 61 6c 75 65 46 72 65 65 28 70 4f 6c 64 29 3b  ValueFree(pOld);
1b70: 0a 7d 0a 20 20 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  .}.  ../********
1b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1b90: 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 72 65 73  **** sqlite3_res
1ba0: 75 6c 74 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ult_  **********
1bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bc0: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
1bd0: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
1be0: 61 72 65 20 75 73 65 64 20 62 79 20 75 73 65 72  are used by user
1bf0: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
1c00: 6e 73 20 74 6f 20 73 70 65 63 69 66 79 0a 2a 2a  ns to specify.**
1c10: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
1c20: 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sult..**.** The 
1c30: 73 65 74 53 74 72 4f 72 45 72 72 6f 72 28 29 20  setStrOrError() 
1c40: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 73 20 73  function calls s
1c50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
1c60: 53 74 72 28 29 20 74 6f 20 73 74 6f 72 65 20 74  Str() to store t
1c70: 68 65 0a 2a 2a 20 72 65 73 75 6c 74 20 61 73 20  he.** result as 
1c80: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
1c90: 20 62 75 74 20 69 66 20 74 68 65 20 73 74 72 69   but if the stri
1ca0: 6e 67 20 6f 72 20 62 6c 6f 62 20 69 73 20 74 6f  ng or blob is to
1cb0: 6f 20 6c 61 72 67 65 2c 20 69 74 0a 2a 2a 20 74  o large, it.** t
1cc0: 68 65 6e 20 73 65 74 73 20 74 68 65 20 65 72 72  hen sets the err
1cd0: 6f 72 20 63 6f 64 65 20 74 6f 20 53 51 4c 49 54  or code to SQLIT
1ce0: 45 5f 54 4f 4f 42 49 47 0a 2a 2a 0a 2a 2a 20 54  E_TOOBIG.**.** T
1cf0: 68 65 20 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65  he invokeValueDe
1d00: 73 74 72 75 63 74 6f 72 28 50 2c 58 29 20 72 6f  structor(P,X) ro
1d10: 75 74 69 6e 65 20 69 6e 76 6f 6b 65 73 20 64 65  utine invokes de
1d20: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
1d30: 6e 20 58 28 29 0a 2a 2a 20 6f 6e 20 76 61 6c 75  n X().** on valu
1d40: 65 20 50 20 69 73 20 6e 6f 74 20 67 6f 69 6e 67  e P is not going
1d50: 20 74 6f 20 62 65 20 75 73 65 64 20 61 6e 64 20   to be used and 
1d60: 6e 65 65 64 20 74 6f 20 62 65 20 64 65 73 74 72  need to be destr
1d70: 6f 79 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  oyed..*/.static 
1d80: 76 6f 69 64 20 73 65 74 52 65 73 75 6c 74 53 74  void setResultSt
1d90: 72 4f 72 45 72 72 6f 72 28 0a 20 20 73 71 6c 69  rOrError(.  sqli
1da0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
1db0: 78 2c 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  x,  /* Function 
1dc0: 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  context */.  con
1dd0: 73 74 20 63 68 61 72 20 2a 7a 2c 20 20 20 20 20  st char *z,     
1de0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 70       /* String p
1df0: 6f 69 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ointer */.  int 
1e00: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
1e10: 20 20 20 20 2f 2a 20 42 79 74 65 73 20 69 6e 20      /* Bytes in 
1e20: 73 74 72 69 6e 67 2c 20 6f 72 20 6e 65 67 61 74  string, or negat
1e30: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c  ive */.  u8 enc,
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20 6f 66 20   /* Encoding of 
1e60: 7a 2e 20 20 30 20 66 6f 72 20 42 4c 4f 42 73 20  z.  0 for BLOBs 
1e70: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  */.  void (*xDel
1e80: 29 28 76 6f 69 64 2a 29 20 20 20 20 20 2f 2a 20  )(void*)     /* 
1e90: 44 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  Destructor funct
1ea0: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ion */.){.  if( 
1eb0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
1ec0: 74 53 74 72 28 70 43 74 78 2d 3e 70 4f 75 74 2c  tStr(pCtx->pOut,
1ed0: 20 7a 2c 20 6e 2c 20 65 6e 63 2c 20 78 44 65 6c   z, n, enc, xDel
1ee0: 29 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  )==SQLITE_TOOBIG
1ef0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
1f00: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f  result_error_too
1f10: 62 69 67 28 70 43 74 78 29 3b 0a 20 20 7d 0a 7d  big(pCtx);.  }.}
1f20: 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76 6f  .static int invo
1f30: 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63 74 6f  keValueDestructo
1f40: 72 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  r(.  const void 
1f50: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1f60: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 64 65 73 74  /* Value to dest
1f70: 72 6f 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  roy */.  void (*
1f80: 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20  xDel)(void*),   
1f90: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 73 74 72      /* The destr
1fa0: 75 63 74 6f 72 20 2a 2f 0a 20 20 73 71 6c 69 74  uctor */.  sqlit
1fb0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
1fc0: 20 20 20 20 20 20 2f 2a 20 53 65 74 20 61 20 53        /* Set a S
1fd0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65 72 72  QLITE_TOOBIG err
1fe0: 6f 72 20 69 66 20 6e 6f 20 4e 55 4c 4c 20 2a 2f  or if no NULL */
1ff0: 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 78 44  .){.  assert( xD
2000: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
2010: 49 43 20 29 3b 0a 20 20 69 66 28 20 78 44 65 6c  IC );.  if( xDel
2020: 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 6e 6f  ==0 ){.    /* no
2030: 6f 70 20 2a 2f 0a 20 20 7d 65 6c 73 65 20 69 66  op */.  }else if
2040: 28 20 78 44 65 6c 3d 3d 53 51 4c 49 54 45 5f 54  ( xDel==SQLITE_T
2050: 52 41 4e 53 49 45 4e 54 20 29 7b 0a 20 20 20 20  RANSIENT ){.    
2060: 2f 2a 20 6e 6f 6f 70 20 2a 2f 0a 20 20 7d 65 6c  /* noop */.  }el
2070: 73 65 7b 0a 20 20 20 20 78 44 65 6c 28 28 76 6f  se{.    xDel((vo
2080: 69 64 2a 29 70 29 3b 0a 20 20 7d 0a 20 20 69 66  id*)p);.  }.  if
2090: 28 20 70 43 74 78 20 29 20 73 71 6c 69 74 65 33  ( pCtx ) sqlite3
20a0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f  _result_error_to
20b0: 6f 62 69 67 28 70 43 74 78 29 3b 0a 20 20 72 65  obig(pCtx);.  re
20c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 4f 4f 42  turn SQLITE_TOOB
20d0: 49 47 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  IG;.}.void sqlit
20e0: 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0a  e3_result_blob(.
20f0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2100: 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73  t *pCtx, .  cons
2110: 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 69 6e  t void *z, .  in
2120: 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  t n, .  void (*x
2130: 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a  Del)(void *).){.
2140: 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2150: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
2160: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
2170: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
2180: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
2190: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
21a0: 43 74 78 2c 20 7a 2c 20 6e 2c 20 30 2c 20 78 44  Ctx, z, n, 0, xD
21b0: 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69  el);.}.void sqli
21c0: 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 36  te3_result_blob6
21d0: 34 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  4(.  sqlite3_con
21e0: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63  text *pCtx, .  c
21f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20  onst void *z, . 
2200: 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
2210: 6e 2c 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  n,.  void (*xDel
2220: 29 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61  )(void *).){.  a
2230: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
2240: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
2250: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pOut->db->mutex)
2260: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 78 44   );.  assert( xD
2270: 65 6c 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d  el!=SQLITE_DYNAM
2280: 49 43 20 29 3b 0a 20 20 69 66 28 20 6e 3e 30 78  IC );.  if( n>0x
2290: 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20 20 20  7fffffff ){.    
22a0: 28 76 6f 69 64 29 69 6e 76 6f 6b 65 56 61 6c 75  (void)invokeValu
22b0: 65 44 65 73 74 72 75 63 74 6f 72 28 7a 2c 20 78  eDestructor(z, x
22c0: 44 65 6c 2c 20 70 43 74 78 29 3b 0a 20 20 7d 65  Del, pCtx);.  }e
22d0: 6c 73 65 7b 0a 20 20 20 20 73 65 74 52 65 73 75  lse{.    setResu
22e0: 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43 74  ltStrOrError(pCt
22f0: 78 2c 20 7a 2c 20 28 69 6e 74 29 6e 2c 20 30 2c  x, z, (int)n, 0,
2300: 20 78 44 65 6c 29 3b 0a 20 20 7d 0a 7d 0a 76 6f   xDel);.  }.}.vo
2310: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2320: 74 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74 65 33  t_double(sqlite3
2330: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2340: 64 6f 75 62 6c 65 20 72 56 61 6c 29 7b 0a 20 20  double rVal){.  
2350: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
2360: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
2370: 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78  >pOut->db->mutex
2380: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2390: 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 70  beMemSetDouble(p
23a0: 43 74 78 2d 3e 70 4f 75 74 2c 20 72 56 61 6c 29  Ctx->pOut, rVal)
23b0: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
23c0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 73 71  _result_error(sq
23d0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
23e0: 43 74 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  Ctx, const char 
23f0: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61 73  *z, int n){.  as
2400: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2410: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
2420: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
2430: 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72  );.  pCtx->isErr
2440: 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  or = SQLITE_ERRO
2450: 52 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  R;.  pCtx->fErro
2460: 72 4f 72 41 75 78 20 3d 20 31 3b 0a 20 20 73 71  rOrAux = 1;.  sq
2470: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2480: 74 72 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 7a  tr(pCtx->pOut, z
2490: 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , n, SQLITE_UTF8
24a0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
24b0: 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  NT);.}.#ifndef S
24c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
24d0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
24e0: 73 75 6c 74 5f 65 72 72 6f 72 31 36 28 73 71 6c  sult_error16(sql
24f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
2500: 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tx, const void *
2510: 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 61 73 73  z, int n){.  ass
2520: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2530: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
2540: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
2550: 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
2560: 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  r = SQLITE_ERROR
2570: 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  ;.  pCtx->fError
2580: 4f 72 41 75 78 20 3d 20 31 3b 0a 20 20 73 71 6c  OrAux = 1;.  sql
2590: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
25a0: 72 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 7a 2c  r(pCtx->pOut, z,
25b0: 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   n, SQLITE_UTF16
25c0: 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 54  NATIVE, SQLITE_T
25d0: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e  RANSIENT);.}.#en
25e0: 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
25f0: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 73 71 6c 69  _result_int(sqli
2600: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
2610: 78 2c 20 69 6e 74 20 69 56 61 6c 29 7b 0a 20 20  x, int iVal){.  
2620: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
2630: 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d  mutex_held(pCtx-
2640: 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78  >pOut->db->mutex
2650: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2660: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 43  beMemSetInt64(pC
2670: 74 78 2d 3e 70 4f 75 74 2c 20 28 69 36 34 29 69  tx->pOut, (i64)i
2680: 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Val);.}.void sql
2690: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
26a0: 34 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  4(sqlite3_contex
26b0: 74 20 2a 70 43 74 78 2c 20 69 36 34 20 69 56 61  t *pCtx, i64 iVa
26c0: 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  l){.  assert( sq
26d0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
26e0: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
26f0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
2700: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2710: 74 36 34 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20  t64(pCtx->pOut, 
2720: 69 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  iVal);.}.void sq
2730: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
2740: 6c 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  l(sqlite3_contex
2750: 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73 65  t *pCtx){.  asse
2760: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
2770: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75  x_held(pCtx->pOu
2780: 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  t->db->mutex) );
2790: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
27a0: 6d 53 65 74 4e 75 6c 6c 28 70 43 74 78 2d 3e 70  mSetNull(pCtx->p
27b0: 4f 75 74 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Out);.}.void sql
27c0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
27d0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
27e0: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f  ext *pCtx, .  co
27f0: 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 0a 20 20  nst char *z, .  
2800: 69 6e 74 20 6e 2c 0a 20 20 76 6f 69 64 20 28 2a  int n,.  void (*
2810: 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29 7b  xDel)(void *).){
2820: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
2830: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
2840: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
2850: 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73  tex) );.  setRes
2860: 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43  ultStrOrError(pC
2870: 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45  tx, z, n, SQLITE
2880: 5f 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d 0a  _UTF8, xDel);.}.
2890: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
28a0: 75 6c 74 5f 74 65 78 74 36 34 28 0a 20 20 73 71  ult_text64(.  sq
28b0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
28c0: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68  Ctx, .  const ch
28d0: 61 72 20 2a 7a 2c 20 0a 20 20 73 71 6c 69 74 65  ar *z, .  sqlite
28e0: 33 5f 75 69 6e 74 36 34 20 6e 2c 0a 20 20 76 6f  3_uint64 n,.  vo
28f0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
2900: 2a 29 2c 0a 20 20 75 6e 73 69 67 6e 65 64 20 63  *),.  unsigned c
2910: 68 61 72 20 65 6e 63 0a 29 7b 0a 20 20 61 73 73  har enc.){.  ass
2920: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2930: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
2940: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
2950: 3b 0a 20 20 61 73 73 65 72 74 28 20 78 44 65 6c  ;.  assert( xDel
2960: 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43  !=SQLITE_DYNAMIC
2970: 20 29 3b 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53   );.  if( enc==S
2980: 51 4c 49 54 45 5f 55 54 46 31 36 20 29 20 65 6e  QLITE_UTF16 ) en
2990: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c = SQLITE_UTF16
29a0: 4e 41 54 49 56 45 3b 0a 20 20 69 66 28 20 6e 3e  NATIVE;.  if( n>
29b0: 30 78 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20  0x7fffffff ){.  
29c0: 20 20 28 76 6f 69 64 29 69 6e 76 6f 6b 65 56 61    (void)invokeVa
29d0: 6c 75 65 44 65 73 74 72 75 63 74 6f 72 28 7a 2c  lueDestructor(z,
29e0: 20 78 44 65 6c 2c 20 70 43 74 78 29 3b 0a 20 20   xDel, pCtx);.  
29f0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 65 74 52 65  }else{.    setRe
2a00: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
2a10: 43 74 78 2c 20 7a 2c 20 28 69 6e 74 29 6e 2c 20  Ctx, z, (int)n, 
2a20: 65 6e 63 2c 20 78 44 65 6c 29 3b 0a 20 20 7d 0a  enc, xDel);.  }.
2a30: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
2a40: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64  _OMIT_UTF16.void
2a50: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2a60: 74 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65  text16(.  sqlite
2a70: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
2a80: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
2a90: 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20  z, .  int n, .  
2aa0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
2ab0: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
2ac0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
2ad0: 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d  held(pCtx->pOut-
2ae0: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
2af0: 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45   setResultStrOrE
2b00: 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c  rror(pCtx, z, n,
2b10: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
2b20: 49 56 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f  IVE, xDel);.}.vo
2b30: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2b40: 74 5f 74 65 78 74 31 36 62 65 28 0a 20 20 73 71  t_text16be(.  sq
2b50: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2b60: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Ctx, .  const vo
2b70: 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  id *z, .  int n,
2b80: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
2b90: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
2ba0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2bb0: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
2bc0: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
2bd0: 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74  );.  setResultSt
2be0: 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a  rOrError(pCtx, z
2bf0: 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , n, SQLITE_UTF1
2c00: 36 42 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f  6BE, xDel);.}.vo
2c10: 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  id sqlite3_resul
2c20: 74 5f 74 65 78 74 31 36 6c 65 28 0a 20 20 73 71  t_text16le(.  sq
2c30: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2c40: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  Ctx, .  const vo
2c50: 69 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  id *z, .  int n,
2c60: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
2c70: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73  (void *).){.  as
2c80: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2c90: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70  tex_held(pCtx->p
2ca0: 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20  Out->db->mutex) 
2cb0: 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74  );.  setResultSt
2cc0: 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a  rOrError(pCtx, z
2cd0: 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , n, SQLITE_UTF1
2ce0: 36 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d 0a 23 65  6LE, xDel);.}.#e
2cf0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2d00: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 76 6f 69  MIT_UTF16 */.voi
2d10: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
2d20: 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 63  _value(sqlite3_c
2d30: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 73 71  ontext *pCtx, sq
2d40: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2d50: 6c 75 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20  lue){.  assert( 
2d60: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
2d70: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
2d80: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
2d90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
2da0: 79 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 70 56  y(pCtx->pOut, pV
2db0: 61 6c 75 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  alue);.}.void sq
2dc0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
2dd0: 6f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f  oblob(sqlite3_co
2de0: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69 6e 74  ntext *pCtx, int
2df0: 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73   n){.  assert( s
2e00: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
2e10: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
2e20: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
2e30: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 5a  lite3VdbeMemSetZ
2e40: 65 72 6f 42 6c 6f 62 28 70 43 74 78 2d 3e 70 4f  eroBlob(pCtx->pO
2e50: 75 74 2c 20 6e 29 3b 0a 7d 0a 76 6f 69 64 20 73  ut, n);.}.void s
2e60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
2e70: 72 6f 72 5f 63 6f 64 65 28 73 71 6c 69 74 65 33  ror_code(sqlite3
2e80: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
2e90: 69 6e 74 20 65 72 72 43 6f 64 65 29 7b 0a 20 20  int errCode){.  
2ea0: 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
2eb0: 65 72 72 43 6f 64 65 3b 0a 20 20 70 43 74 78 2d  errCode;.  pCtx-
2ec0: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 31  >fErrorOrAux = 1
2ed0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2ee0: 44 45 42 55 47 0a 20 20 69 66 28 20 70 43 74 78  DEBUG.  if( pCtx
2ef0: 2d 3e 70 56 64 62 65 20 29 20 70 43 74 78 2d 3e  ->pVdbe ) pCtx->
2f00: 70 56 64 62 65 2d 3e 72 63 41 70 70 20 3d 20 65  pVdbe->rcApp = e
2f10: 72 72 43 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20  rrCode;.#endif. 
2f20: 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d   if( pCtx->pOut-
2f30: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
2f40: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
2f50: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43  VdbeMemSetStr(pC
2f60: 74 78 2d 3e 70 4f 75 74 2c 20 73 71 6c 69 74 65  tx->pOut, sqlite
2f70: 33 45 72 72 53 74 72 28 65 72 72 43 6f 64 65 29  3ErrStr(errCode)
2f80: 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20 20  , -1, .         
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
2fb0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d  ITE_STATIC);.  }
2fc0: 0a 7d 0a 0a 2f 2a 20 46 6f 72 63 65 20 61 6e 20  .}../* Force an 
2fd0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 65 72  SQLITE_TOOBIG er
2fe0: 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  ror. */.void sql
2ff0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
3000: 72 5f 74 6f 6f 62 69 67 28 73 71 6c 69 74 65 33  r_toobig(sqlite3
3010: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b  _context *pCtx){
3020: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
3030: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
3040: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
3050: 74 65 78 29 20 29 3b 0a 20 20 70 43 74 78 2d 3e  tex) );.  pCtx->
3060: 69 73 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45  isError = SQLITE
3070: 5f 54 4f 4f 42 49 47 3b 0a 20 20 70 43 74 78 2d  _TOOBIG;.  pCtx-
3080: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 31  >fErrorOrAux = 1
3090: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
30a0: 65 6d 53 65 74 53 74 72 28 70 43 74 78 2d 3e 70  emSetStr(pCtx->p
30b0: 4f 75 74 2c 20 22 73 74 72 69 6e 67 20 6f 72 20  Out, "string or 
30c0: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 2c 20 2d  blob too big", -
30d0: 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  1, .            
30e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
30f0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
3100: 54 41 54 49 43 29 3b 0a 7d 0a 0a 2f 2a 20 41 6e  TATIC);.}../* An
3110: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 65 72   SQLITE_NOMEM er
3120: 72 6f 72 2e 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  ror. */.void sql
3130: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
3140: 72 5f 6e 6f 6d 65 6d 28 73 71 6c 69 74 65 33 5f  r_nomem(sqlite3_
3150: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 29 7b 0a  context *pCtx){.
3160: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3170: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
3180: 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74  x->pOut->db->mut
3190: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
31a0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
31b0: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 70 43  Ctx->pOut);.  pC
31c0: 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53 51  tx->isError = SQ
31d0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 43  LITE_NOMEM;.  pC
31e0: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
31f0: 3d 20 31 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  = 1;.  pCtx->pOu
3200: 74 2d 3e 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  t->db->mallocFai
3210: 6c 65 64 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  led = 1;.}../*.*
3220: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3230: 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
3240: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61  a transaction ha
3250: 73 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64  s been committed
3260: 2e 20 49 74 20 0a 2a 2a 20 69 6e 76 6f 6b 65 73  . It .** invokes
3270: 20 63 61 6c 6c 62 61 63 6b 73 20 72 65 67 69 73   callbacks regis
3280: 74 65 72 65 64 20 77 69 74 68 20 73 71 6c 69 74  tered with sqlit
3290: 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28 29 20 61 73  e3_wal_hook() as
32a0: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
32b0: 61 74 69 63 20 69 6e 74 20 64 6f 57 61 6c 43 61  atic int doWalCa
32c0: 6c 6c 62 61 63 6b 73 28 73 71 6c 69 74 65 33 20  llbacks(sqlite3 
32d0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  *db){.  int rc =
32e0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 6e   SQLITE_OK;.#ifn
32f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3300: 57 41 4c 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  WAL.  int i;.  f
3310: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
3320: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 42 74 72  b; i++){.    Btr
3330: 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44  ee *pBt = db->aD
3340: 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66  b[i].pBt;.    if
3350: 28 20 70 42 74 20 29 7b 0a 20 20 20 20 20 20 69  ( pBt ){.      i
3360: 6e 74 20 6e 45 6e 74 72 79 3b 0a 20 20 20 20 20  nt nEntry;.     
3370: 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
3380: 65 72 28 70 42 74 29 3b 0a 20 20 20 20 20 20 6e  er(pBt);.      n
3390: 45 6e 74 72 79 20 3d 20 73 71 6c 69 74 65 33 50  Entry = sqlite3P
33a0: 61 67 65 72 57 61 6c 43 61 6c 6c 62 61 63 6b 28  agerWalCallback(
33b0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
33c0: 72 28 70 42 74 29 29 3b 0a 20 20 20 20 20 20 73  r(pBt));.      s
33d0: 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
33e0: 28 70 42 74 29 3b 0a 20 20 20 20 20 20 69 66 28  (pBt);.      if(
33f0: 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63   db->xWalCallbac
3400: 6b 20 26 26 20 6e 45 6e 74 72 79 3e 30 20 26 26  k && nEntry>0 &&
3410: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
3420: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 64  {.        rc = d
3430: 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 28  b->xWalCallback(
3440: 64 62 2d 3e 70 57 61 6c 41 72 67 2c 20 64 62 2c  db->pWalArg, db,
3450: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
3460: 65 2c 20 6e 45 6e 74 72 79 29 3b 0a 20 20 20 20  e, nEntry);.    
3470: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
3480: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 72 63  ndif.  return rc
3490: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  ;.}../*.** Execu
34a0: 74 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  te the statement
34b0: 20 70 53 74 6d 74 2c 20 65 69 74 68 65 72 20 75   pStmt, either u
34c0: 6e 74 69 6c 20 61 20 72 6f 77 20 6f 66 20 64 61  ntil a row of da
34d0: 74 61 20 69 73 20 72 65 61 64 79 2c 20 74 68 65  ta is ready, the
34e0: 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73  .** statement is
34f0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 65 78 65 63   completely exec
3500: 75 74 65 64 20 6f 72 20 61 6e 20 65 72 72 6f 72  uted or an error
3510: 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54   occurs..**.** T
3520: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c  his routine impl
3530: 65 6d 65 6e 74 73 20 74 68 65 20 62 75 6c 6b 20  ements the bulk 
3540: 6f 66 20 74 68 65 20 6c 6f 67 69 63 20 62 65 68  of the logic beh
3550: 69 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ind the sqlite_s
3560: 74 65 70 28 29 0a 2a 2a 20 41 50 49 2e 20 20 54  tep().** API.  T
3570: 68 65 20 6f 6e 6c 79 20 74 68 69 6e 67 20 6f 6d  he only thing om
3580: 69 74 74 65 64 20 69 73 20 74 68 65 20 61 75 74  itted is the aut
3590: 6f 6d 61 74 69 63 20 72 65 63 6f 6d 70 69 6c 65  omatic recompile
35a0: 20 69 66 20 61 20 0a 2a 2a 20 73 63 68 65 6d 61   if a .** schema
35b0: 20 63 68 61 6e 67 65 20 68 61 73 20 6f 63 63 75   change has occu
35c0: 72 72 65 64 2e 20 20 54 68 61 74 20 64 65 74 61  rred.  That deta
35d0: 69 6c 20 69 73 20 68 61 6e 64 6c 65 64 20 62 79  il is handled by
35e0: 20 74 68 65 0a 2a 2a 20 6f 75 74 65 72 20 73 71   the.** outer sq
35f0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61  lite3_step() wra
3600: 70 70 65 72 20 70 72 6f 63 65 64 75 72 65 2e 0a  pper procedure..
3610: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
3620: 6c 69 74 65 33 53 74 65 70 28 56 64 62 65 20 2a  lite3Step(Vdbe *
3630: 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  p){.  sqlite3 *d
3640: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  b;.  int rc;..  
3650: 61 73 73 65 72 74 28 70 29 3b 0a 20 20 69 66 28  assert(p);.  if(
3660: 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f   p->magic!=VDBE_
3670: 4d 41 47 49 43 5f 52 55 4e 20 29 7b 0a 20 20 20  MAGIC_RUN ){.   
3680: 20 2f 2a 20 57 65 20 75 73 65 64 20 74 6f 20 72   /* We used to r
3690: 65 71 75 69 72 65 20 74 68 61 74 20 73 71 6c 69  equire that sqli
36a0: 74 65 33 5f 72 65 73 65 74 28 29 20 62 65 20 63  te3_reset() be c
36b0: 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 72 65 74  alled before ret
36c0: 72 79 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  rying.    ** sql
36d0: 69 74 65 33 5f 73 74 65 70 28 29 20 61 66 74 65  ite3_step() afte
36e0: 72 20 61 6e 79 20 65 72 72 6f 72 20 6f 72 20 61  r any error or a
36f0: 66 74 65 72 20 53 51 4c 49 54 45 5f 44 4f 4e 45  fter SQLITE_DONE
3700: 2e 20 20 42 75 74 20 62 65 67 69 6e 6e 69 6e 67  .  But beginning
3710: 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 76 65 72  .    ** with ver
3720: 73 69 6f 6e 20 33 2e 37 2e 30 2c 20 77 65 20 63  sion 3.7.0, we c
3730: 68 61 6e 67 65 64 20 74 68 69 73 20 73 6f 20 74  hanged this so t
3740: 68 61 74 20 73 71 6c 69 74 65 33 5f 72 65 73 65  hat sqlite3_rese
3750: 74 28 29 20 77 6f 75 6c 64 0a 20 20 20 20 2a 2a  t() would.    **
3760: 20 62 65 20 63 61 6c 6c 65 64 20 61 75 74 6f 6d   be called autom
3770: 61 74 69 63 61 6c 6c 79 20 69 6e 73 74 65 61 64  atically instead
3780: 20 6f 66 20 74 68 72 6f 77 69 6e 67 20 74 68 65   of throwing the
3790: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
37a0: 72 72 6f 72 2e 0a 20 20 20 20 2a 2a 20 54 68 69  rror..    ** Thi
37b0: 73 20 22 61 75 74 6f 6d 61 74 69 63 2d 72 65 73  s "automatic-res
37c0: 65 74 22 20 63 68 61 6e 67 65 20 69 73 20 6e 6f  et" change is no
37d0: 74 20 74 65 63 68 6e 69 63 61 6c 6c 79 20 61 6e  t technically an
37e0: 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79   incompatibility
37f0: 2c 20 0a 20 20 20 20 2a 2a 20 73 69 6e 63 65 20  , .    ** since 
3800: 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  any application 
3810: 74 68 61 74 20 72 65 63 65 69 76 65 73 20 61 6e  that receives an
3820: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 69   SQLITE_MISUSE i
3830: 73 20 62 72 6f 6b 65 6e 20 62 79 0a 20 20 20 20  s broken by.    
3840: 2a 2a 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 20  ** definition.. 
3850: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e 65 76     **.    ** Nev
3860: 65 72 74 68 65 6c 65 73 73 2c 20 73 6f 6d 65 20  ertheless, some 
3870: 70 75 62 6c 69 73 68 65 64 20 61 70 70 6c 69 63  published applic
3880: 61 74 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65  ations that were
3890: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74   originally writ
38a0: 74 65 6e 0a 20 20 20 20 2a 2a 20 66 6f 72 20 76  ten.    ** for v
38b0: 65 72 73 69 6f 6e 20 33 2e 36 2e 32 33 20 6f 72  ersion 3.6.23 or
38c0: 20 65 61 72 6c 69 65 72 20 64 6f 20 69 6e 20 66   earlier do in f
38d0: 61 63 74 20 64 65 70 65 6e 64 20 6f 6e 20 53 51  act depend on SQ
38e0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 0a 20 20 20  LITE_MISUSE .   
38f0: 20 2a 2a 20 72 65 74 75 72 6e 73 2c 20 61 6e 64   ** returns, and
3900: 20 74 68 6f 73 65 20 77 65 72 65 20 62 72 6f 6b   those were brok
3910: 65 6e 20 62 79 20 74 68 65 20 61 75 74 6f 6d 61  en by the automa
3920: 74 69 63 2d 72 65 73 65 74 20 63 68 61 6e 67 65  tic-reset change
3930: 2e 20 20 41 73 20 61 0a 20 20 20 20 2a 2a 20 61  .  As a.    ** a
3940: 20 77 6f 72 6b 2d 61 72 6f 75 6e 64 2c 20 74 68   work-around, th
3950: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
3960: 54 4f 52 45 53 45 54 20 63 6f 6d 70 69 6c 65 2d  TORESET compile-
3970: 74 69 6d 65 20 72 65 73 74 6f 72 65 73 20 74 68  time restores th
3980: 65 0a 20 20 20 20 2a 2a 20 6c 65 67 61 63 79 20  e.    ** legacy 
3990: 62 65 68 61 76 69 6f 72 20 6f 66 20 72 65 74 75  behavior of retu
39a0: 72 6e 69 6e 67 20 53 51 4c 49 54 45 5f 4d 49 53  rning SQLITE_MIS
39b0: 55 53 45 20 66 6f 72 20 63 61 73 65 73 20 77 68  USE for cases wh
39c0: 65 72 65 20 74 68 65 20 0a 20 20 20 20 2a 2a 20  ere the .    ** 
39d0: 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
39e0: 5f 73 74 65 70 28 29 20 72 65 74 75 72 6e 65 64  _step() returned
39f0: 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72   something other
3a00: 20 74 68 61 6e 20 61 20 53 51 4c 49 54 45 5f 4c   than a SQLITE_L
3a10: 4f 43 4b 45 44 0a 20 20 20 20 2a 2a 20 6f 72 20  OCKED.    ** or 
3a20: 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
3a30: 72 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  r..    */.#ifdef
3a40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
3a50: 4f 52 45 53 45 54 0a 20 20 20 20 69 66 28 20 28  ORESET.    if( (
3a60: 72 63 20 3d 20 70 2d 3e 72 63 26 30 78 66 66 29  rc = p->rc&0xff)
3a70: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
3a80: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b   rc==SQLITE_LOCK
3a90: 45 44 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ED ){.      sqli
3aa0: 74 65 33 5f 72 65 73 65 74 28 28 73 71 6c 69 74  te3_reset((sqlit
3ab0: 65 33 5f 73 74 6d 74 2a 29 70 29 3b 0a 20 20 20  e3_stmt*)p);.   
3ac0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
3ad0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
3ae0: 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 0a 23  SE_BKPT;.    }.#
3af0: 65 6c 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  else.    sqlite3
3b00: 5f 72 65 73 65 74 28 28 73 71 6c 69 74 65 33 5f  _reset((sqlite3_
3b10: 73 74 6d 74 2a 29 70 29 3b 0a 23 65 6e 64 69 66  stmt*)p);.#endif
3b20: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b  .  }..  /* Check
3b30: 20 74 68 61 74 20 6d 61 6c 6c 6f 63 28 29 20 68   that malloc() h
3b40: 61 73 20 6e 6f 74 20 66 61 69 6c 65 64 2e 20 49  as not failed. I
3b50: 66 20 69 74 20 68 61 73 2c 20 72 65 74 75 72 6e  f it has, return
3b60: 20 65 61 72 6c 79 2e 20 2a 2f 0a 20 20 64 62 20   early. */.  db 
3b70: 3d 20 70 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  = p->db;.  if( d
3b80: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
3b90: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53  ){.    p->rc = S
3ba0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
3bb0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
3bc0: 4f 4d 45 4d 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  OMEM;.  }..  if(
3bd0: 20 70 2d 3e 70 63 3c 3d 30 20 26 26 20 70 2d 3e   p->pc<=0 && p->
3be0: 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 70  expired ){.    p
3bf0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43  ->rc = SQLITE_SC
3c00: 48 45 4d 41 3b 0a 20 20 20 20 72 63 20 3d 20 53  HEMA;.    rc = S
3c10: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
3c20: 20 67 6f 74 6f 20 65 6e 64 5f 6f 66 5f 73 74 65   goto end_of_ste
3c30: 70 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  p;.  }.  if( p->
3c40: 70 63 3c 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  pc<0 ){.    /* I
3c50: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f  f there are no o
3c60: 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 20  ther statements 
3c70: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
3c80: 67 2c 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 72  g, then.    ** r
3c90: 65 73 65 74 20 74 68 65 20 69 6e 74 65 72 72 75  eset the interru
3ca0: 70 74 20 66 6c 61 67 2e 20 20 54 68 69 73 20 70  pt flag.  This p
3cb0: 72 65 76 65 6e 74 73 20 61 20 63 61 6c 6c 20 74  revents a call t
3cc0: 6f 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  o sqlite3_interr
3cd0: 75 70 74 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20  upt.    ** from 
3ce0: 69 6e 74 65 72 72 75 70 74 69 6e 67 20 61 20 73  interrupting a s
3cf0: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 68 61  tatement that ha
3d00: 73 20 6e 6f 74 20 79 65 74 20 73 74 61 72 74 65  s not yet starte
3d10: 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
3d20: 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
3d30: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62  e==0 ){.      db
3d40: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
3d50: 65 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20  ed = 0;.    }.. 
3d60: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
3d70: 56 64 62 65 57 72 69 74 65 3e 30 20 7c 7c 20 64  VdbeWrite>0 || d
3d80: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
3d90: 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 64 62   .        || (db
3da0: 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
3db0: 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
3dc0: 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 29 0a 20  redImmCons==0). 
3dd0: 20 20 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53     );..#ifndef S
3de0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
3df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
3e00: 6f 66 69 6c 65 20 26 26 20 21 64 62 2d 3e 69 6e  ofile && !db->in
3e10: 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 20  it.busy ){.     
3e20: 20 73 71 6c 69 74 65 33 4f 73 43 75 72 72 65 6e   sqlite3OsCurren
3e30: 74 54 69 6d 65 49 6e 74 36 34 28 64 62 2d 3e 70  tTimeInt64(db->p
3e40: 56 66 73 2c 20 26 70 2d 3e 73 74 61 72 74 54 69  Vfs, &p->startTi
3e50: 6d 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  me);.    }.#endi
3e60: 66 0a 0a 20 20 20 20 64 62 2d 3e 6e 56 64 62 65  f..    db->nVdbe
3e70: 41 63 74 69 76 65 2b 2b 3b 0a 20 20 20 20 69 66  Active++;.    if
3e80: 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
3e90: 20 29 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74   ) db->nVdbeWrit
3ea0: 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  e++;.    if( p->
3eb0: 62 49 73 52 65 61 64 65 72 20 29 20 64 62 2d 3e  bIsReader ) db->
3ec0: 6e 56 64 62 65 52 65 61 64 2b 2b 3b 0a 20 20 20  nVdbeRead++;.   
3ed0: 20 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 7d 0a   p->pc = 0;.  }.
3ee0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ef0: 42 55 47 0a 20 20 70 2d 3e 72 63 41 70 70 20 3d  BUG.  p->rcApp =
3f00: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64   SQLITE_OK;.#end
3f10: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3f20: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
3f30: 20 69 66 28 20 70 2d 3e 65 78 70 6c 61 69 6e 20   if( p->explain 
3f40: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
3f50: 74 65 33 56 64 62 65 4c 69 73 74 28 70 29 3b 0a  te3VdbeList(p);.
3f60: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
3f70: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  * SQLITE_OMIT_EX
3f80: 50 4c 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20  PLAIN */.  {.   
3f90: 20 64 62 2d 3e 6e 56 64 62 65 45 78 65 63 2b 2b   db->nVdbeExec++
3fa0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
3fb0: 65 33 56 64 62 65 45 78 65 63 28 70 29 3b 0a 20  e3VdbeExec(p);. 
3fc0: 20 20 20 64 62 2d 3e 6e 56 64 62 65 45 78 65 63     db->nVdbeExec
3fd0: 2d 2d 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66  --;.  }..#ifndef
3fe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
3ff0: 43 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  CE.  /* Invoke t
4000: 68 65 20 70 72 6f 66 69 6c 65 20 63 61 6c 6c 62  he profile callb
4010: 61 63 6b 20 69 66 20 74 68 65 72 65 20 69 73 20  ack if there is 
4020: 6f 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72  one.  */.  if( r
4030: 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26  c!=SQLITE_ROW &&
4040: 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20 26 26   db->xProfile &&
4050: 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20   !db->init.busy 
4060: 26 26 20 70 2d 3e 7a 53 71 6c 20 29 7b 0a 20 20  && p->zSql ){.  
4070: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
4080: 69 4e 6f 77 3b 0a 20 20 20 20 73 71 6c 69 74 65  iNow;.    sqlite
4090: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 49 6e  3OsCurrentTimeIn
40a0: 74 36 34 28 64 62 2d 3e 70 56 66 73 2c 20 26 69  t64(db->pVfs, &i
40b0: 4e 6f 77 29 3b 0a 20 20 20 20 64 62 2d 3e 78 50  Now);.    db->xP
40c0: 72 6f 66 69 6c 65 28 64 62 2d 3e 70 50 72 6f 66  rofile(db->pProf
40d0: 69 6c 65 41 72 67 2c 20 70 2d 3e 7a 53 71 6c 2c  ileArg, p->zSql,
40e0: 20 28 69 4e 6f 77 20 2d 20 70 2d 3e 73 74 61 72   (iNow - p->star
40f0: 74 54 69 6d 65 29 2a 31 30 30 30 30 30 30 29 3b  tTime)*1000000);
4100: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
4110: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
4120: 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  NE ){.    assert
4130: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4140: 4f 4b 20 29 3b 0a 20 20 20 20 70 2d 3e 72 63 20  OK );.    p->rc 
4150: 3d 20 64 6f 57 61 6c 43 61 6c 6c 62 61 63 6b 73  = doWalCallbacks
4160: 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
4170: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc!=SQLITE_OK )
4180: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
4190: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
41a0: 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e 65 72 72 43  .  }..  db->errC
41b0: 6f 64 65 20 3d 20 72 63 3b 0a 20 20 69 66 28 20  ode = rc;.  if( 
41c0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71  SQLITE_NOMEM==sq
41d0: 6c 69 74 65 33 41 70 69 45 78 69 74 28 70 2d 3e  lite3ApiExit(p->
41e0: 64 62 2c 20 70 2d 3e 72 63 29 20 29 7b 0a 20 20  db, p->rc) ){.  
41f0: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4200: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 65 6e 64 5f  _NOMEM;.  }.end_
4210: 6f 66 5f 73 74 65 70 3a 0a 20 20 2f 2a 20 41 74  of_step:.  /* At
4220: 20 74 68 69 73 20 70 6f 69 6e 74 20 6c 6f 63 61   this point loca
4230: 6c 20 76 61 72 69 61 62 6c 65 20 72 63 20 68 6f  l variable rc ho
4240: 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  lds the value th
4250: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 0a 20 20  at should be .  
4260: 2a 2a 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  ** returned if t
4270: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 61  his statement wa
4280: 73 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67  s compiled using
4290: 20 74 68 65 20 6c 65 67 61 63 79 20 0a 20 20 2a   the legacy .  *
42a0: 2a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  * sqlite3_prepar
42b0: 65 28 29 20 69 6e 74 65 72 66 61 63 65 2e 20 41  e() interface. A
42c0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
42d0: 64 6f 63 73 2c 20 74 68 69 73 20 63 61 6e 20 6f  docs, this can o
42e0: 6e 6c 79 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20  nly.  ** be one 
42f0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
4300: 20 74 68 65 20 66 69 72 73 74 20 61 73 73 65 72   the first asser
4310: 74 28 29 20 62 65 6c 6f 77 2e 20 56 61 72 69 61  t() below. Varia
4320: 62 6c 65 20 70 2d 3e 72 63 20 0a 20 20 2a 2a 20  ble p->rc .  ** 
4330: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c  contains the val
4340: 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  ue that would be
4350: 20 72 65 74 75 72 6e 65 64 20 69 66 20 73 71 6c   returned if sql
4360: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20  ite3_finalize() 
4370: 0a 20 20 2a 2a 20 77 65 72 65 20 63 61 6c 6c 65  .  ** were calle
4380: 64 20 6f 6e 20 73 74 61 74 65 6d 65 6e 74 20 70  d on statement p
4390: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
43a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 52 4f 57 20   rc==SQLITE_ROW 
43b0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44   || rc==SQLITE_D
43c0: 4f 4e 45 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c  ONE   || rc==SQL
43d0: 49 54 45 5f 45 52 52 4f 52 20 0a 20 20 20 20 20  ITE_ERROR .     
43e0: 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f    || rc==SQLITE_
43f0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
4400: 54 45 5f 4d 49 53 55 53 45 0a 20 20 29 3b 0a 20  TE_MISUSE.  );. 
4410: 20 61 73 73 65 72 74 28 20 28 70 2d 3e 72 63 21   assert( (p->rc!
4420: 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 70  =SQLITE_ROW && p
4430: 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ->rc!=SQLITE_DON
4440: 45 29 20 7c 7c 20 70 2d 3e 72 63 3d 3d 70 2d 3e  E) || p->rc==p->
4450: 72 63 41 70 70 20 29 3b 0a 20 20 69 66 28 20 70  rcApp );.  if( p
4460: 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26 26  ->isPrepareV2 &&
4470: 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20   rc!=SQLITE_ROW 
4480: 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  && rc!=SQLITE_DO
4490: 4e 45 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  NE ){.    /* If 
44a0: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  this statement w
44b0: 61 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  as prepared usin
44c0: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
44d0: 65 5f 76 32 28 29 2c 20 61 6e 64 20 61 6e 0a 20  e_v2(), and an. 
44e0: 20 20 20 2a 2a 20 65 72 72 6f 72 20 68 61 73 20     ** error has 
44f0: 6f 63 63 75 72 72 65 64 2c 20 74 68 65 6e 20 72  occurred, then r
4500: 65 74 75 72 6e 20 74 68 65 20 65 72 72 6f 72 20  eturn the error 
4510: 63 6f 64 65 20 69 6e 20 70 2d 3e 72 63 20 74 6f  code in p->rc to
4520: 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 61 6c 6c   the.    ** call
4530: 65 72 2e 20 53 65 74 20 74 68 65 20 65 72 72 6f  er. Set the erro
4540: 72 20 63 6f 64 65 20 69 6e 20 74 68 65 20 64 61  r code in the da
4550: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 6f  tabase handle to
4560: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 2e   the same value.
4570: 0a 20 20 20 20 2a 2f 20 0a 20 20 20 20 72 63 20  .    */ .    rc 
4580: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 54 72 61  = sqlite3VdbeTra
4590: 6e 73 66 65 72 45 72 72 6f 72 28 70 29 3b 0a 20  nsferError(p);. 
45a0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 28 72 63 26   }.  return (rc&
45b0: 64 62 2d 3e 65 72 72 4d 61 73 6b 29 3b 0a 7d 0a  db->errMask);.}.
45c0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
45d0: 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 69 6d 70  he top-level imp
45e0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 73  lementation of s
45f0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4600: 43 61 6c 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 53  Call.** sqlite3S
4610: 74 65 70 28 29 20 74 6f 20 64 6f 20 6d 6f 73 74  tep() to do most
4620: 20 6f 66 20 74 68 65 20 77 6f 72 6b 2e 20 20 49   of the work.  I
4630: 66 20 61 20 73 63 68 65 6d 61 20 65 72 72 6f 72  f a schema error
4640: 20 6f 63 63 75 72 73 2c 0a 2a 2a 20 63 61 6c 6c   occurs,.** call
4650: 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
4660: 65 28 29 20 61 6e 64 20 74 72 79 20 61 67 61 69  e() and try agai
4670: 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  n..*/.int sqlite
4680: 33 5f 73 74 65 70 28 73 71 6c 69 74 65 33 5f 73  3_step(sqlite3_s
4690: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69  tmt *pStmt){.  i
46a0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
46b0: 4b 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c  K;      /* Resul
46c0: 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 53 74  t from sqlite3St
46d0: 65 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 72 63  ep() */.  int rc
46e0: 32 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  2 = SQLITE_OK;  
46f0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 66 72 6f     /* Result fro
4700: 6d 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  m sqlite3Reprepa
4710: 72 65 28 29 20 2a 2f 0a 20 20 56 64 62 65 20 2a  re() */.  Vdbe *
4720: 76 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74  v = (Vdbe*)pStmt
4730: 3b 20 20 2f 2a 20 74 68 65 20 70 72 65 70 61 72  ;  /* the prepar
4740: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
4750: 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 20 20    int cnt = 0;  
4760: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
4770: 75 6e 74 65 72 20 74 6f 20 70 72 65 76 65 6e 74  unter to prevent
4780: 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 20 6f   infinite loop o
4790: 66 20 72 65 70 72 65 70 61 72 65 73 20 2a 2f 0a  f reprepares */.
47a0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
47b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
47c0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
47d0: 63 74 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28 20  ction */..  if( 
47e0: 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e 75 6c  vdbeSafetyNotNul
47f0: 6c 28 76 29 20 29 7b 0a 20 20 20 20 72 65 74 75  l(v) ){.    retu
4800: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
4810: 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 64 62 20  _BKPT;.  }.  db 
4820: 3d 20 76 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74  = v->db;.  sqlit
4830: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
4840: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 76 2d 3e  b->mutex);.  v->
4850: 64 6f 69 6e 67 52 65 72 75 6e 20 3d 20 30 3b 0a  doingRerun = 0;.
4860: 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
4870: 71 6c 69 74 65 33 53 74 65 70 28 76 29 29 3d 3d  qlite3Step(v))==
4880: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20 20  SQLITE_SCHEMA.  
4890: 20 20 20 20 20 20 20 26 26 20 63 6e 74 2b 2b 20         && cnt++ 
48a0: 3c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 43 48  < SQLITE_MAX_SCH
48b0: 45 4d 41 5f 52 45 54 52 59 20 29 7b 0a 20 20 20  EMA_RETRY ){.   
48c0: 20 69 6e 74 20 73 61 76 65 64 50 63 20 3d 20 76   int savedPc = v
48d0: 2d 3e 70 63 3b 0a 20 20 20 20 72 63 32 20 3d 20  ->pc;.    rc2 = 
48e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 52 65 70 72  rc = sqlite3Repr
48f0: 65 70 61 72 65 28 76 29 3b 0a 20 20 20 20 69 66  epare(v);.    if
4900: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  ( rc!=SQLITE_OK)
4910: 20 62 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c 69   break;.    sqli
4920: 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29  te3_reset(pStmt)
4930: 3b 0a 20 20 20 20 69 66 28 20 73 61 76 65 64 50  ;.    if( savedP
4940: 63 3e 3d 30 20 29 20 76 2d 3e 64 6f 69 6e 67 52  c>=0 ) v->doingR
4950: 65 72 75 6e 20 3d 20 31 3b 0a 20 20 20 20 61 73  erun = 1;.    as
4960: 73 65 72 74 28 20 76 2d 3e 65 78 70 69 72 65 64  sert( v->expired
4970: 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ==0 );.  }.  if(
4980: 20 72 63 32 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   rc2!=SQLITE_OK 
4990: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 63  ){.    /* This c
49a0: 61 73 65 20 6f 63 63 75 72 73 20 61 66 74 65 72  ase occurs after
49b0: 20 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63 6f   failing to reco
49c0: 6d 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74 61  mpile an sql sta
49d0: 74 65 6d 65 6e 74 2e 20 0a 20 20 20 20 2a 2a 20  tement. .    ** 
49e0: 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
49f0: 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 20 63  e from the SQL c
4a00: 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c 72 65  ompiler has alre
4a10: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  ady been loaded 
4a20: 0a 20 20 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  .    ** into the
4a30: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4a40: 2e 20 54 68 69 73 20 62 6c 6f 63 6b 20 63 6f 70  . This block cop
4a50: 69 65 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65  ies the error me
4a60: 73 73 61 67 65 20 0a 20 20 20 20 2a 2a 20 66 72  ssage .    ** fr
4a70: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
4a80: 68 61 6e 64 6c 65 20 69 6e 74 6f 20 74 68 65 20  handle into the 
4a90: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 73 65  statement and se
4aa0: 74 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ts the statement
4ab0: 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20  .    ** program 
4ac0: 63 6f 75 6e 74 65 72 20 74 6f 20 30 20 74 6f 20  counter to 0 to 
4ad0: 65 6e 73 75 72 65 20 74 68 61 74 20 77 68 65 6e  ensure that when
4ae0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
4af0: 73 20 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c 69  s .    ** finali
4b00: 7a 65 64 20 6f 72 20 72 65 73 65 74 20 74 68 65  zed or reset the
4b10: 20 70 61 72 73 65 72 20 65 72 72 6f 72 20 6d 65   parser error me
4b20: 73 73 61 67 65 20 69 73 20 61 76 61 69 6c 61 62  ssage is availab
4b30: 6c 65 20 76 69 61 0a 20 20 20 20 2a 2a 20 73 71  le via.    ** sq
4b40: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61  lite3_errmsg() a
4b50: 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nd sqlite3_errco
4b60: 64 65 28 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  de()..    */.   
4b70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
4b80: 72 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20  r = (const char 
4b90: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
4ba0: 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 20  text(db->pErr); 
4bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
4bc0: 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72 4d 73  ee(db, v->zErrMs
4bd0: 67 29 3b 0a 20 20 20 20 69 66 28 20 21 64 62 2d  g);.    if( !db-
4be0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
4bf0: 0a 20 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d 73  .      v->zErrMs
4c00: 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
4c10: 44 75 70 28 64 62 2c 20 7a 45 72 72 29 3b 0a 20  Dup(db, zErr);. 
4c20: 20 20 20 20 20 76 2d 3e 72 63 20 3d 20 72 63 32       v->rc = rc2
4c30: 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ;.    } else {. 
4c40: 20 20 20 20 20 76 2d 3e 7a 45 72 72 4d 73 67 20       v->zErrMsg 
4c50: 3d 20 30 3b 0a 20 20 20 20 20 20 76 2d 3e 72 63  = 0;.      v->rc
4c60: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   = rc = SQLITE_N
4c70: 4f 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  OMEM;.    }.  }.
4c80: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
4c90: 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20  iExit(db, rc);. 
4ca0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
4cb0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
4cc0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
4cd0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ../*.** Extract 
4ce0: 74 68 65 20 75 73 65 72 20 64 61 74 61 20 66 72  the user data fr
4cf0: 6f 6d 20 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e  om a sqlite3_con
4d00: 74 65 78 74 20 73 74 72 75 63 74 75 72 65 20 61  text structure a
4d10: 6e 64 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70  nd return a.** p
4d20: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f  ointer to it..*/
4d30: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75  .void *sqlite3_u
4d40: 73 65 72 5f 64 61 74 61 28 73 71 6c 69 74 65 33  ser_data(sqlite3
4d50: 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20  _context *p){.  
4d60: 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e  assert( p && p->
4d70: 70 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72  pFunc );.  retur
4d80: 6e 20 70 2d 3e 70 46 75 6e 63 2d 3e 70 55 73 65  n p->pFunc->pUse
4d90: 72 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rData;.}../*.** 
4da0: 45 78 74 72 61 63 74 20 74 68 65 20 75 73 65 72  Extract the user
4db0: 20 64 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c   data from a sql
4dc0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72  ite3_context str
4dd0: 75 63 74 75 72 65 20 61 6e 64 20 72 65 74 75 72  ucture and retur
4de0: 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  n a.** pointer t
4df0: 6f 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 49 4d 50 4c  o it..**.** IMPL
4e00: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
4e10: 2d 34 36 37 39 38 2d 35 30 33 30 31 20 54 68 65  -46798-50301 The
4e20: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
4e30: 5f 64 62 5f 68 61 6e 64 6c 65 28 29 20 69 6e 74  _db_handle() int
4e40: 65 72 66 61 63 65 0a 2a 2a 20 72 65 74 75 72 6e  erface.** return
4e50: 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
4e60: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 64  pointer to the d
4e70: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4e80: 6f 6e 20 28 74 68 65 20 31 73 74 0a 2a 2a 20 70  on (the 1st.** p
4e90: 61 72 61 6d 65 74 65 72 29 20 6f 66 20 74 68 65  arameter) of the
4ea0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
4eb0: 66 75 6e 63 74 69 6f 6e 28 29 20 61 6e 64 0a 2a  function() and.*
4ec0: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
4ed0: 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 72 6f  _function16() ro
4ee0: 75 74 69 6e 65 73 20 74 68 61 74 20 6f 72 69 67  utines that orig
4ef0: 69 6e 61 6c 6c 79 20 72 65 67 69 73 74 65 72 65  inally registere
4f00: 64 20 74 68 65 0a 2a 2a 20 61 70 70 6c 69 63 61  d the.** applica
4f10: 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 66 75 6e  tion defined fun
4f20: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 71 6c 69 74 65  ction..*/.sqlite
4f30: 33 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  3 *sqlite3_conte
4f40: 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c  xt_db_handle(sql
4f50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29  ite3_context *p)
4f60: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26  {.  assert( p &&
4f70: 20 70 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72   p->pFunc );.  r
4f80: 65 74 75 72 6e 20 70 2d 3e 70 4f 75 74 2d 3e 64  eturn p->pOut->d
4f90: 62 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  b;.}../*.** Retu
4fa0: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
4fb0: 69 6d 65 20 66 6f 72 20 61 20 73 74 61 74 65 6d  ime for a statem
4fc0: 65 6e 74 2e 20 20 49 66 20 74 68 65 20 63 75 72  ent.  If the cur
4fd0: 72 65 6e 74 20 74 69 6d 65 0a 2a 2a 20 69 73 20  rent time.** is 
4fe0: 72 65 71 75 65 73 74 65 64 20 6d 6f 72 65 20 74  requested more t
4ff0: 68 61 6e 20 6f 6e 63 65 20 77 69 74 68 69 6e 20  han once within 
5000: 74 68 65 20 73 61 6d 65 20 72 75 6e 20 6f 66 20  the same run of 
5010: 61 20 73 69 6e 67 6c 65 20 70 72 65 70 61 72 65  a single prepare
5020: 64 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2c 20  d.** statement, 
5030: 74 68 65 20 65 78 61 63 74 20 73 61 6d 65 20 74  the exact same t
5040: 69 6d 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  ime is returned 
5050: 66 6f 72 20 65 61 63 68 20 69 6e 76 6f 63 61 74  for each invocat
5060: 69 6f 6e 20 72 65 67 61 72 64 6c 65 73 73 0a 2a  ion regardless.*
5070: 2a 20 6f 66 20 74 68 65 20 61 6d 6f 75 6e 74 20  * of the amount 
5080: 6f 66 20 74 69 6d 65 20 74 68 61 74 20 65 6c 61  of time that ela
5090: 70 73 65 73 20 62 65 74 77 65 65 6e 20 69 6e 76  pses between inv
50a0: 6f 63 61 74 69 6f 6e 73 2e 20 20 49 6e 20 6f 74  ocations.  In ot
50b0: 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 74 68  her words,.** th
50c0: 65 20 74 69 6d 65 20 72 65 74 75 72 6e 65 64 20  e time returned 
50d0: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 74 69  is always the ti
50e0: 6d 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  me of the first 
50f0: 63 61 6c 6c 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33  call..*/.sqlite3
5100: 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
5110: 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
5120: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5130: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 23 69 66  ){.  int rc;.#if
5140: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
5150: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5160: 34 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  4.  sqlite3_int6
5170: 34 20 2a 70 69 54 69 6d 65 20 3d 20 26 70 2d 3e  4 *piTime = &p->
5180: 70 56 64 62 65 2d 3e 69 43 75 72 72 65 6e 74 54  pVdbe->iCurrentT
5190: 69 6d 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ime;.  assert( p
51a0: 2d 3e 70 56 64 62 65 21 3d 30 20 29 3b 0a 23 65  ->pVdbe!=0 );.#e
51b0: 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  lse.  sqlite3_in
51c0: 74 36 34 20 69 54 69 6d 65 20 3d 20 30 3b 0a 20  t64 iTime = 0;. 
51d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a   sqlite3_int64 *
51e0: 70 69 54 69 6d 65 20 3d 20 70 2d 3e 70 56 64 62  piTime = p->pVdb
51f0: 65 21 3d 30 20 3f 20 26 70 2d 3e 70 56 64 62 65  e!=0 ? &p->pVdbe
5200: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3a  ->iCurrentTime :
5210: 20 26 69 54 69 6d 65 3b 0a 23 65 6e 64 69 66 0a   &iTime;.#endif.
5220: 20 20 69 66 28 20 2a 70 69 54 69 6d 65 3d 3d 30    if( *piTime==0
5230: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
5240: 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d  ite3OsCurrentTim
5250: 65 49 6e 74 36 34 28 70 2d 3e 70 4f 75 74 2d 3e  eInt64(p->pOut->
5260: 64 62 2d 3e 70 56 66 73 2c 20 70 69 54 69 6d 65  db->pVfs, piTime
5270: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
5280: 2a 70 69 54 69 6d 65 20 3d 20 30 3b 0a 20 20 7d  *piTime = 0;.  }
5290: 0a 20 20 72 65 74 75 72 6e 20 2a 70 69 54 69 6d  .  return *piTim
52a0: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  e;.}../*.** The 
52b0: 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 74 68 65  following is the
52c0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
52d0: 6f 66 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  of an SQL functi
52e0: 6f 6e 20 74 68 61 74 20 61 6c 77 61 79 73 0a 2a  on that always.*
52f0: 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
5300: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
5310: 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 66  ating that the f
5320: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
5330: 69 6e 20 74 68 65 0a 2a 2a 20 77 72 6f 6e 67 20  in the.** wrong 
5340: 63 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 73 71  context.  The sq
5350: 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
5360: 75 6e 63 74 69 6f 6e 28 29 20 41 50 49 20 6d 69  unction() API mi
5370: 67 68 74 20 63 6f 6e 73 74 72 75 63 74 0a 2a 2a  ght construct.**
5380: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68   SQL function th
5390: 61 74 20 75 73 65 20 74 68 69 73 20 72 6f 75 74  at use this rout
53a0: 69 6e 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  ine so that the 
53b0: 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 65  functions will e
53c0: 78 69 73 74 0a 2a 2a 20 66 6f 72 20 6e 61 6d 65  xist.** for name
53d0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 62 75 74 20   resolution but 
53e0: 61 72 65 20 61 63 74 75 61 6c 6c 79 20 6f 76 65  are actually ove
53f0: 72 6c 6f 61 64 65 64 20 62 79 20 74 68 65 20 78  rloaded by the x
5400: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 0a 2a 2a 20  FindFunction.** 
5410: 6d 65 74 68 6f 64 20 6f 66 20 76 69 72 74 75 61  method of virtua
5420: 6c 20 74 61 62 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  l tables..*/.voi
5430: 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64  d sqlite3Invalid
5440: 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  Function(.  sqli
5450: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
5460: 74 65 78 74 2c 20 20 2f 2a 20 54 68 65 20 66 75  text,  /* The fu
5470: 6e 63 74 69 6f 6e 20 63 61 6c 6c 69 6e 67 20 63  nction calling c
5480: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20  ontext */.  int 
5490: 4e 6f 74 55 73 65 64 2c 20 20 20 20 20 20 20 20  NotUsed,        
54a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
54b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
54c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
54d0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
54e0: 20 2a 2a 4e 6f 74 55 73 65 64 32 20 20 20 2f 2a   **NotUsed2   /*
54f0: 20 56 61 6c 75 65 20 6f 66 20 65 61 63 68 20 61   Value of each a
5500: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5510: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
5520: 65 20 3d 20 63 6f 6e 74 65 78 74 2d 3e 70 46 75  e = context->pFu
5530: 6e 63 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 63 68 61  nc->zName;.  cha
5540: 72 20 2a 7a 45 72 72 3b 0a 20 20 55 4e 55 53 45  r *zErr;.  UNUSE
5550: 44 5f 50 41 52 41 4d 45 54 45 52 32 28 4e 6f 74  D_PARAMETER2(Not
5560: 55 73 65 64 2c 20 4e 6f 74 55 73 65 64 32 29 3b  Used, NotUsed2);
5570: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
5580: 33 5f 6d 70 72 69 6e 74 66 28 0a 20 20 20 20 20  3_mprintf(.     
5590: 20 22 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20   "unable to use 
55a0: 66 75 6e 63 74 69 6f 6e 20 25 73 20 69 6e 20 74  function %s in t
55b0: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6e  he requested con
55c0: 74 65 78 74 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  text", zName);. 
55d0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
55e0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 7a  error(context, z
55f0: 45 72 72 2c 20 2d 31 29 3b 0a 20 20 73 71 6c 69  Err, -1);.  sqli
5600: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
5610: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
5620: 61 20 6e 65 77 20 61 67 67 72 65 67 61 74 65 20  a new aggregate 
5630: 63 6f 6e 74 65 78 74 20 66 6f 72 20 70 20 61 6e  context for p an
5640: 64 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74  d return a point
5650: 65 72 20 74 6f 0a 2a 2a 20 69 74 73 20 70 4d 65  er to.** its pMe
5660: 6d 2d 3e 7a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  m->z element..*/
5670: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
5680: 4f 49 4e 4c 49 4e 45 20 76 6f 69 64 20 2a 63 72  OINLINE void *cr
5690: 65 61 74 65 41 67 67 43 6f 6e 74 65 78 74 28 73  eateAggContext(s
56a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
56b0: 70 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20  p, int nByte){. 
56c0: 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 70 2d 3e   Mem *pMem = p->
56d0: 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
56e0: 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
56f0: 45 4d 5f 41 67 67 29 3d 3d 30 20 29 3b 0a 20 20  EM_Agg)==0 );.  
5700: 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b 0a  if( nByte<=0 ){.
5710: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
5720: 65 6d 53 65 74 4e 75 6c 6c 28 70 4d 65 6d 29 3b  emSetNull(pMem);
5730: 0a 20 20 20 20 70 4d 65 6d 2d 3e 7a 20 3d 20 30  .    pMem->z = 0
5740: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
5750: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
5760: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
5770: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 4d  , nByte);.    pM
5780: 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
5790: 41 67 67 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 75  Agg;.    pMem->u
57a0: 2e 70 44 65 66 20 3d 20 70 2d 3e 70 46 75 6e 63  .pDef = p->pFunc
57b0: 3b 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e  ;.    if( pMem->
57c0: 7a 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  z ){.      memse
57d0: 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42  t(pMem->z, 0, nB
57e0: 79 74 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  yte);.    }.  }.
57f0: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29    return (void*)
5800: 70 4d 65 6d 2d 3e 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a  pMem->z;.}../*.*
5810: 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72 65  * Allocate or re
5820: 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67 61  turn the aggrega
5830: 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 61  te context for a
5840: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20   user function. 
5850: 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65 78   A new.** contex
5860: 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f  t is allocated o
5870: 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  n the first call
5880: 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 61  .  Subsequent ca
5890: 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a 2a  lls return the.*
58a0: 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20 74  * same context t
58b0: 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65 64  hat was returned
58c0: 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73 2e   on prior calls.
58d0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
58e0: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
58f0: 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ext(sqlite3_cont
5900: 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79 74  ext *p, int nByt
5910: 65 29 7b 0a 20 20 61 73 73 65 72 74 28 20 70 20  e){.  assert( p 
5920: 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70  && p->pFunc && p
5930: 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70 20 29  ->pFunc->xStep )
5940: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
5950: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
5960: 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65  ->pOut->db->mute
5970: 78 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  x) );.  testcase
5980: 28 20 6e 42 79 74 65 3c 30 20 29 3b 0a 20 20 69  ( nByte<0 );.  i
5990: 66 28 20 28 70 2d 3e 70 4d 65 6d 2d 3e 66 6c 61  f( (p->pMem->fla
59a0: 67 73 20 26 20 4d 45 4d 5f 41 67 67 29 3d 3d 30  gs & MEM_Agg)==0
59b0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
59c0: 72 65 61 74 65 41 67 67 43 6f 6e 74 65 78 74 28  reateAggContext(
59d0: 70 2c 20 6e 42 79 74 65 29 3b 0a 20 20 7d 65 6c  p, nByte);.  }el
59e0: 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28  se{.    return (
59f0: 76 6f 69 64 2a 29 70 2d 3e 70 4d 65 6d 2d 3e 7a  void*)p->pMem->z
5a00: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ;.  }.}../*.** R
5a10: 65 74 75 72 6e 20 74 68 65 20 61 75 78 69 6c 69  eturn the auxili
5a20: 61 72 79 20 64 61 74 61 20 70 6f 69 6e 74 65 72  ary data pointer
5a30: 2c 20 69 66 20 61 6e 79 2c 20 66 6f 72 20 74 68  , if any, for th
5a40: 65 20 69 41 72 67 27 74 68 20 61 72 67 75 6d 65  e iArg'th argume
5a50: 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 73 65  nt to.** the use
5a60: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r-function defin
5a70: 65 64 20 62 79 20 70 43 74 78 2e 0a 2a 2f 0a 76  ed by pCtx..*/.v
5a80: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 67 65 74  oid *sqlite3_get
5a90: 5f 61 75 78 64 61 74 61 28 73 71 6c 69 74 65 33  _auxdata(sqlite3
5aa0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
5ab0: 69 6e 74 20 69 41 72 67 29 7b 0a 20 20 41 75 78  int iArg){.  Aux
5ac0: 44 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b 0a  Data *pAuxData;.
5ad0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
5ae0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
5af0: 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75  tx->pOut->db->mu
5b00: 74 65 78 29 20 29 3b 0a 23 69 66 20 53 51 4c 49  tex) );.#if SQLI
5b10: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5b20: 4f 52 5f 53 54 41 54 34 0a 20 20 69 66 28 20 70  OR_STAT4.  if( p
5b30: 43 74 78 2d 3e 70 56 64 62 65 3d 3d 30 20 29 20  Ctx->pVdbe==0 ) 
5b40: 72 65 74 75 72 6e 20 30 3b 0a 23 65 6c 73 65 0a  return 0;.#else.
5b50: 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
5b60: 70 56 64 62 65 21 3d 30 20 29 3b 0a 23 65 6e 64  pVdbe!=0 );.#end
5b70: 69 66 0a 20 20 66 6f 72 28 70 41 75 78 44 61 74  if.  for(pAuxDat
5b80: 61 3d 70 43 74 78 2d 3e 70 56 64 62 65 2d 3e 70  a=pCtx->pVdbe->p
5b90: 41 75 78 44 61 74 61 3b 20 70 41 75 78 44 61 74  AuxData; pAuxDat
5ba0: 61 3b 20 70 41 75 78 44 61 74 61 3d 70 41 75 78  a; pAuxData=pAux
5bb0: 44 61 74 61 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  Data->pNext){.  
5bc0: 20 20 69 66 28 20 70 41 75 78 44 61 74 61 2d 3e    if( pAuxData->
5bd0: 69 4f 70 3d 3d 70 43 74 78 2d 3e 69 4f 70 20 26  iOp==pCtx->iOp &
5be0: 26 20 70 41 75 78 44 61 74 61 2d 3e 69 41 72 67  & pAuxData->iArg
5bf0: 3d 3d 69 41 72 67 20 29 20 62 72 65 61 6b 3b 0a  ==iArg ) break;.
5c00: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28 70    }..  return (p
5c10: 41 75 78 44 61 74 61 20 3f 20 70 41 75 78 44 61  AuxData ? pAuxDa
5c20: 74 61 2d 3e 70 41 75 78 20 3a 20 30 29 3b 0a 7d  ta->pAux : 0);.}
5c30: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
5c40: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 70  auxiliary data p
5c50: 6f 69 6e 74 65 72 20 61 6e 64 20 64 65 6c 65 74  ointer and delet
5c60: 65 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6f 72 20  e function, for 
5c70: 74 68 65 20 69 41 72 67 27 74 68 0a 2a 2a 20 61  the iArg'th.** a
5c80: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 75  rgument to the u
5c90: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66  ser-function def
5ca0: 69 6e 65 64 20 62 79 20 70 43 74 78 2e 20 41 6e  ined by pCtx. An
5cb0: 79 20 70 72 65 76 69 6f 75 73 20 76 61 6c 75 65  y previous value
5cc0: 20 69 73 0a 2a 2a 20 64 65 6c 65 74 65 64 20 62   is.** deleted b
5cd0: 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 64 65  y calling the de
5ce0: 6c 65 74 65 20 66 75 6e 63 74 69 6f 6e 20 73 70  lete function sp
5cf0: 65 63 69 66 69 65 64 20 77 68 65 6e 20 69 74 20  ecified when it 
5d00: 77 61 73 20 73 65 74 2e 0a 2a 2f 0a 76 6f 69 64  was set..*/.void
5d10: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
5d20: 64 61 74 61 28 0a 20 20 73 71 6c 69 74 65 33 5f  data(.  sqlite3_
5d30: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
5d40: 20 20 69 6e 74 20 69 41 72 67 2c 20 0a 20 20 76    int iArg, .  v
5d50: 6f 69 64 20 2a 70 41 75 78 2c 20 0a 20 20 76 6f  oid *pAux, .  vo
5d60: 69 64 20 28 2a 78 44 65 6c 65 74 65 29 28 76 6f  id (*xDelete)(vo
5d70: 69 64 2a 29 0a 29 7b 0a 20 20 41 75 78 44 61 74  id*).){.  AuxDat
5d80: 61 20 2a 70 41 75 78 44 61 74 61 3b 0a 20 20 56  a *pAuxData;.  V
5d90: 64 62 65 20 2a 70 56 64 62 65 20 3d 20 70 43 74  dbe *pVdbe = pCt
5da0: 78 2d 3e 70 56 64 62 65 3b 0a 0a 20 20 61 73 73  x->pVdbe;..  ass
5db0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
5dc0: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
5dd0: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
5de0: 3b 0a 20 20 69 66 28 20 69 41 72 67 3c 30 20 29  ;.  if( iArg<0 )
5df0: 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 23 69   goto failed;.#i
5e00: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
5e10: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
5e20: 34 0a 20 20 69 66 28 20 70 56 64 62 65 3d 3d 30  4.  if( pVdbe==0
5e30: 20 29 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a   ) goto failed;.
5e40: 23 65 6c 73 65 0a 20 20 61 73 73 65 72 74 28 20  #else.  assert( 
5e50: 70 56 64 62 65 21 3d 30 20 29 3b 0a 23 65 6e 64  pVdbe!=0 );.#end
5e60: 69 66 0a 0a 20 20 66 6f 72 28 70 41 75 78 44 61  if..  for(pAuxDa
5e70: 74 61 3d 70 56 64 62 65 2d 3e 70 41 75 78 44 61  ta=pVdbe->pAuxDa
5e80: 74 61 3b 20 70 41 75 78 44 61 74 61 3b 20 70 41  ta; pAuxData; pA
5e90: 75 78 44 61 74 61 3d 70 41 75 78 44 61 74 61 2d  uxData=pAuxData-
5ea0: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
5eb0: 20 70 41 75 78 44 61 74 61 2d 3e 69 4f 70 3d 3d   pAuxData->iOp==
5ec0: 70 43 74 78 2d 3e 69 4f 70 20 26 26 20 70 41 75  pCtx->iOp && pAu
5ed0: 78 44 61 74 61 2d 3e 69 41 72 67 3d 3d 69 41 72  xData->iArg==iAr
5ee0: 67 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  g ) break;.  }. 
5ef0: 20 69 66 28 20 70 41 75 78 44 61 74 61 3d 3d 30   if( pAuxData==0
5f00: 20 29 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61   ){.    pAuxData
5f10: 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
5f20: 6f 63 5a 65 72 6f 28 70 56 64 62 65 2d 3e 64 62  ocZero(pVdbe->db
5f30: 2c 20 73 69 7a 65 6f 66 28 41 75 78 44 61 74 61  , sizeof(AuxData
5f40: 29 29 3b 0a 20 20 20 20 69 66 28 20 21 70 41 75  ));.    if( !pAu
5f50: 78 44 61 74 61 20 29 20 67 6f 74 6f 20 66 61 69  xData ) goto fai
5f60: 6c 65 64 3b 0a 20 20 20 20 70 41 75 78 44 61 74  led;.    pAuxDat
5f70: 61 2d 3e 69 4f 70 20 3d 20 70 43 74 78 2d 3e 69  a->iOp = pCtx->i
5f80: 4f 70 3b 0a 20 20 20 20 70 41 75 78 44 61 74 61  Op;.    pAuxData
5f90: 2d 3e 69 41 72 67 20 3d 20 69 41 72 67 3b 0a 20  ->iArg = iArg;. 
5fa0: 20 20 20 70 41 75 78 44 61 74 61 2d 3e 70 4e 65     pAuxData->pNe
5fb0: 78 74 20 3d 20 70 56 64 62 65 2d 3e 70 41 75 78  xt = pVdbe->pAux
5fc0: 44 61 74 61 3b 0a 20 20 20 20 70 56 64 62 65 2d  Data;.    pVdbe-
5fd0: 3e 70 41 75 78 44 61 74 61 20 3d 20 70 41 75 78  >pAuxData = pAux
5fe0: 44 61 74 61 3b 0a 20 20 20 20 69 66 28 20 70 43  Data;.    if( pC
5ff0: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 3d  tx->fErrorOrAux=
6000: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 43 74 78  =0 ){.      pCtx
6010: 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  ->isError = 0;. 
6020: 20 20 20 20 20 70 43 74 78 2d 3e 66 45 72 72 6f       pCtx->fErro
6030: 72 4f 72 41 75 78 20 3d 20 31 3b 0a 20 20 20 20  rOrAux = 1;.    
6040: 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 41  }.  }else if( pA
6050: 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20  uxData->xDelete 
6060: 29 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d  ){.    pAuxData-
6070: 3e 78 44 65 6c 65 74 65 28 70 41 75 78 44 61 74  >xDelete(pAuxDat
6080: 61 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 0a 20  a->pAux);.  }.. 
6090: 20 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20   pAuxData->pAux 
60a0: 3d 20 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61  = pAux;.  pAuxDa
60b0: 74 61 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44  ta->xDelete = xD
60c0: 65 6c 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b  elete;.  return;
60d0: 0a 0a 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20  ..failed:.  if( 
60e0: 78 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78  xDelete ){.    x
60f0: 44 65 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20  Delete(pAux);.  
6100: 7d 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  }.}..#ifndef SQL
6110: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
6120: 54 45 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  TED./*.** Return
6130: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
6140: 69 6d 65 73 20 74 68 65 20 53 74 65 70 20 66 75  imes the Step fu
6150: 6e 63 74 69 6f 6e 20 6f 66 20 61 6e 20 61 67 67  nction of an agg
6160: 72 65 67 61 74 65 20 68 61 73 20 62 65 65 6e 20  regate has been 
6170: 0a 2a 2a 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a  .** called..**.*
6180: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
6190: 69 73 20 64 65 70 72 65 63 61 74 65 64 2e 20 20  is deprecated.  
61a0: 44 6f 20 6e 6f 74 20 75 73 65 20 69 74 20 66 6f  Do not use it fo
61b0: 72 20 6e 65 77 20 63 6f 64 65 2e 20 20 49 74 20  r new code.  It 
61c0: 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e  is.** provide on
61d0: 6c 79 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61  ly to avoid brea
61e0: 6b 69 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65  king legacy code
61f0: 2e 20 20 4e 65 77 20 61 67 67 72 65 67 61 74 65  .  New aggregate
6200: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70   function.** imp
6210: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f  lementations sho
6220: 75 6c 64 20 6b 65 65 70 20 74 68 65 69 72 20 6f  uld keep their o
6230: 77 6e 20 63 6f 75 6e 74 73 20 77 69 74 68 69 6e  wn counts within
6240: 20 74 68 65 69 72 20 61 67 67 72 65 67 61 74 65   their aggregate
6250: 0a 2a 2a 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a  .** context..*/.
6260: 69 6e 74 20 73 71 6c 69 74 65 33 5f 61 67 67 72  int sqlite3_aggr
6270: 65 67 61 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69  egate_count(sqli
6280: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b  te3_context *p){
6290: 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20  .  assert( p && 
62a0: 70 2d 3e 70 4d 65 6d 20 26 26 20 70 2d 3e 70 46  p->pMem && p->pF
62b0: 75 6e 63 20 26 26 20 70 2d 3e 70 46 75 6e 63 2d  unc && p->pFunc-
62c0: 3e 78 53 74 65 70 20 29 3b 0a 20 20 72 65 74 75  >xStep );.  retu
62d0: 72 6e 20 70 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d  rn p->pMem->n;.}
62e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
62f0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
6300: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
6310: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 66 6f  he result set fo
6320: 72 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  r the statement 
6330: 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  pStmt..*/.int sq
6340: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
6350: 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  nt(sqlite3_stmt 
6360: 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20  *pStmt){.  Vdbe 
6370: 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70  *pVm = (Vdbe *)p
6380: 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70  Stmt;.  return p
6390: 56 6d 20 3f 20 70 56 6d 2d 3e 6e 52 65 73 43 6f  Vm ? pVm->nResCo
63a0: 6c 75 6d 6e 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a  lumn : 0;.}../*.
63b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
63c0: 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 61  mber of values a
63d0: 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d 20 74 68  vailable from th
63e0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66  e current row of
63f0: 20 74 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   the.** currentl
6400: 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
6410: 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a  ement pStmt..*/.
6420: 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 61 74 61  int sqlite3_data
6430: 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73  _count(sqlite3_s
6440: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56  tmt *pStmt){.  V
6450: 64 62 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65  dbe *pVm = (Vdbe
6460: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20   *)pStmt;.  if( 
6470: 70 56 6d 3d 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70  pVm==0 || pVm->p
6480: 52 65 73 75 6c 74 53 65 74 3d 3d 30 20 29 20 72  ResultSet==0 ) r
6490: 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72  eturn 0;.  retur
64a0: 6e 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d  n pVm->nResColum
64b0: 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  n;.}../*.** Retu
64c0: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
64d0: 73 74 61 74 69 63 20 6d 65 6d 6f 72 79 20 63 6f  static memory co
64e0: 6e 74 61 69 6e 69 6e 67 20 61 6e 20 53 51 4c 20  ntaining an SQL 
64f0: 4e 55 4c 4c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  NULL value..*/.s
6500: 74 61 74 69 63 20 63 6f 6e 73 74 20 4d 65 6d 20  tatic const Mem 
6510: 2a 63 6f 6c 75 6d 6e 4e 75 6c 6c 56 61 6c 75 65  *columnNullValue
6520: 28 76 6f 69 64 29 7b 0a 20 20 2f 2a 20 45 76 65  (void){.  /* Eve
6530: 6e 20 74 68 6f 75 67 68 20 74 68 65 20 4d 65 6d  n though the Mem
6540: 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
6550: 69 6e 73 20 61 6e 20 65 6c 65 6d 65 6e 74 0a 20  ins an element. 
6560: 20 2a 2a 20 6f 66 20 74 79 70 65 20 69 36 34 2c   ** of type i64,
6570: 20 6f 6e 20 63 65 72 74 61 69 6e 20 61 72 63 68   on certain arch
6580: 69 74 65 63 74 75 72 65 73 20 28 78 38 36 29 20  itectures (x86) 
6590: 77 69 74 68 20 63 65 72 74 61 69 6e 20 63 6f 6d  with certain com
65a0: 70 69 6c 65 72 0a 20 20 2a 2a 20 73 77 69 74 63  piler.  ** switc
65b0: 68 65 73 20 28 2d 4f 73 29 2c 20 67 63 63 20 6d  hes (-Os), gcc m
65c0: 61 79 20 61 6c 69 67 6e 20 74 68 69 73 20 4d 65  ay align this Me
65d0: 6d 20 6f 62 6a 65 63 74 20 6f 6e 20 61 20 34 2d  m object on a 4-
65e0: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 0a 20 20  byte boundary.  
65f0: 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6e  ** instead of an
6600: 20 38 2d 62 79 74 65 20 6f 6e 65 2e 20 54 68 69   8-byte one. Thi
6610: 73 20 61 6c 6c 20 77 6f 72 6b 73 20 66 69 6e 65  s all works fine
6620: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 77 68  , except that wh
6630: 65 6e 0a 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20  en.  ** running 
6640: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55  with SQLITE_DEBU
6650: 47 20 64 65 66 69 6e 65 64 20 74 68 65 20 53 51  G defined the SQ
6660: 4c 69 74 65 20 63 6f 64 65 20 73 6f 6d 65 74 69  Lite code someti
6670: 6d 65 73 20 61 73 73 65 72 74 28 29 73 0a 20 20  mes assert()s.  
6680: 2a 2a 20 74 68 61 74 20 61 20 4d 65 6d 20 73 74  ** that a Mem st
6690: 72 75 63 74 75 72 65 20 69 73 20 6c 6f 63 61 74  ructure is locat
66a0: 65 64 20 6f 6e 20 61 6e 20 38 2d 62 79 74 65 20  ed on an 8-byte 
66b0: 62 6f 75 6e 64 61 72 79 2e 20 54 6f 20 70 72 65  boundary. To pre
66c0: 76 65 6e 74 0a 20 20 2a 2a 20 74 68 65 73 65 20  vent.  ** these 
66d0: 61 73 73 65 72 74 28 29 73 20 66 72 6f 6d 20 66  assert()s from f
66e0: 61 69 6c 69 6e 67 2c 20 77 68 65 6e 20 62 75 69  ailing, when bui
66f0: 6c 64 69 6e 67 20 77 69 74 68 20 53 51 4c 49 54  lding with SQLIT
6700: 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65 64 0a  E_DEBUG defined.
6710: 20 20 2a 2a 20 75 73 69 6e 67 20 67 63 63 2c 20    ** using gcc, 
6720: 77 65 20 66 6f 72 63 65 20 6e 75 6c 6c 4d 65 6d  we force nullMem
6730: 20 74 6f 20 62 65 20 38 2d 62 79 74 65 20 61 6c   to be 8-byte al
6740: 69 67 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  igned using the 
6750: 6d 61 67 69 63 61 6c 0a 20 20 2a 2a 20 5f 5f 61  magical.  ** __a
6760: 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c 69 67  ttribute__((alig
6770: 6e 65 64 28 38 29 29 29 20 6d 61 63 72 6f 2e 20  ned(8))) macro. 
6780: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e   */.  static con
6790: 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65 6d 20 0a  st Mem nullMem .
67a0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
67b0: 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65 66  TE_DEBUG) && def
67c0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20  ined(__GNUC__). 
67d0: 20 20 20 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f     __attribute__
67e0: 28 28 61 6c 69 67 6e 65 64 28 38 29 29 29 20 0a  ((aligned(8))) .
67f0: 23 65 6e 64 69 66 0a 20 20 20 20 3d 20 7b 0a 20  #endif.    = {. 
6800: 20 20 20 20 20 20 20 2f 2a 20 2e 75 20 20 20 20         /* .u    
6810: 20 20 20 20 20 20 3d 20 2a 2f 20 7b 30 7d 2c 0a        = */ {0},.
6820: 20 20 20 20 20 20 20 20 2f 2a 20 2e 66 6c 61 67          /* .flag
6830: 73 20 20 20 20 20 20 3d 20 2a 2f 20 4d 45 4d 5f  s      = */ MEM_
6840: 4e 75 6c 6c 2c 0a 20 20 20 20 20 20 20 20 2f 2a  Null,.        /*
6850: 20 2e 65 6e 63 20 20 20 20 20 20 20 20 3d 20 2a   .enc        = *
6860: 2f 20 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20  / 0,.        /* 
6870: 2e 6e 20 20 20 20 20 20 20 20 20 20 3d 20 2a 2f  .n          = */
6880: 20 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e   0,.        /* .
6890: 7a 20 20 20 20 20 20 20 20 20 20 3d 20 2a 2f 20  z          = */ 
68a0: 30 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 7a  0,.        /* .z
68b0: 4d 61 6c 6c 6f 63 20 20 20 20 3d 20 2a 2f 20 30  Malloc    = */ 0
68c0: 2c 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 73 7a  ,.        /* .sz
68d0: 4d 61 6c 6c 6f 63 20 20 20 3d 20 2a 2f 20 30 2c  Malloc   = */ 0,
68e0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 69 50 61  .        /* .iPa
68f0: 64 64 69 6e 67 31 20 20 3d 20 2a 2f 20 30 2c 0a  dding1  = */ 0,.
6900: 20 20 20 20 20 20 20 20 2f 2a 20 2e 64 62 20 20          /* .db  
6910: 20 20 20 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 20         = */ 0,. 
6920: 20 20 20 20 20 20 20 2f 2a 20 2e 78 44 65 6c 20         /* .xDel 
6930: 20 20 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 23 69        = */ 0,.#i
6940: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
6950: 47 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 70 53  G.        /* .pS
6960: 63 6f 70 79 46 72 6f 6d 20 3d 20 2a 2f 20 30 2c  copyFrom = */ 0,
6970: 0a 20 20 20 20 20 20 20 20 2f 2a 20 2e 70 46 69  .        /* .pFi
6980: 6c 6c 65 72 20 20 20 20 3d 20 2a 2f 20 30 2c 0a  ller    = */ 0,.
6990: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7d 3b 0a  #endif.      };.
69a0: 20 20 72 65 74 75 72 6e 20 26 6e 75 6c 6c 4d 65    return &nullMe
69b0: 6d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  m;.}../*.** Chec
69c0: 6b 20 74 6f 20 73 65 65 20 69 66 20 63 6f 6c 75  k to see if colu
69d0: 6d 6e 20 69 43 6f 6c 20 6f 66 20 74 68 65 20 67  mn iCol of the g
69e0: 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74 20 69  iven statement i
69f0: 73 20 76 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20  s valid.  If.** 
6a00: 69 74 20 69 73 2c 20 72 65 74 75 72 6e 20 61 20  it is, return a 
6a10: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 4d  pointer to the M
6a20: 65 6d 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65  em for the value
6a30: 20 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e   of that column.
6a40: 0a 2a 2a 20 49 66 20 69 43 6f 6c 20 69 73 20 6e  .** If iCol is n
6a50: 6f 74 20 76 61 6c 69 64 2c 20 72 65 74 75 72 6e  ot valid, return
6a60: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
6a70: 4d 65 6d 20 77 68 69 63 68 20 68 61 73 20 61 20  Mem which has a 
6a80: 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c  value.** of NULL
6a90: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20  ..*/.static Mem 
6aa0: 2a 63 6f 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74  *columnMem(sqlit
6ab0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6ac0: 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a  int i){.  Vdbe *
6ad0: 70 56 6d 3b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  pVm;.  Mem *pOut
6ae0: 3b 0a 0a 20 20 70 56 6d 20 3d 20 28 56 64 62 65  ;..  pVm = (Vdbe
6af0: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20   *)pStmt;.  if( 
6b00: 70 56 6d 20 26 26 20 70 56 6d 2d 3e 70 52 65 73  pVm && pVm->pRes
6b10: 75 6c 74 53 65 74 21 3d 30 20 26 26 20 69 3c 70  ultSet!=0 && i<p
6b20: 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 20 26  Vm->nResColumn &
6b30: 26 20 69 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  & i>=0 ){.    sq
6b40: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
6b50: 72 28 70 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  r(pVm->db->mutex
6b60: 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70  );.    pOut = &p
6b70: 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b 69  Vm->pResultSet[i
6b80: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
6b90: 69 66 28 20 70 56 6d 20 26 26 20 41 4c 57 41 59  if( pVm && ALWAY
6ba0: 53 28 70 56 6d 2d 3e 64 62 29 20 29 7b 0a 20 20  S(pVm->db) ){.  
6bb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
6bc0: 78 5f 65 6e 74 65 72 28 70 56 6d 2d 3e 64 62 2d  x_enter(pVm->db-
6bd0: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 73  >mutex);.      s
6be0: 71 6c 69 74 65 33 45 72 72 6f 72 28 70 56 6d 2d  qlite3Error(pVm-
6bf0: 3e 64 62 2c 20 53 51 4c 49 54 45 5f 52 41 4e 47  >db, SQLITE_RANG
6c00: 45 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  E);.    }.    pO
6c10: 75 74 20 3d 20 28 4d 65 6d 2a 29 63 6f 6c 75 6d  ut = (Mem*)colum
6c20: 6e 4e 75 6c 6c 56 61 6c 75 65 28 29 3b 0a 20 20  nNullValue();.  
6c30: 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  }.  return pOut;
6c40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
6c50: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
6c60: 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e 67  d after invoking
6c70: 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   an sqlite3_valu
6c80: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 6f  e_XXX function o
6c90: 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76  n a .** column v
6ca0: 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61 6c  alue (i.e. a val
6cb0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ue returned by e
6cc0: 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51 4c  valuating an SQL
6cd0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
6ce0: 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69 73  he.** select lis
6cf0: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  t of a SELECT st
6d00: 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d 61  atement) that ma
6d10: 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f 63  y cause a malloc
6d20: 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20 0a  () failure. If .
6d30: 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20  ** malloc() has 
6d40: 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72 65  failed, the thre
6d50: 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ads mallocFailed
6d60: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
6d70: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 0a   and the result.
6d80: 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74 65  ** code of state
6d90: 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20 74  ment pStmt set t
6da0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a  o SQLITE_NOMEM..
6db0: 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61 6c  **.** Specifical
6dc0: 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c 6c  ly, this is call
6dd0: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a 0a  ed from within:.
6de0: 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  **.**     sqlite
6df0: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a 2a  3_column_int().*
6e00: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
6e10: 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a 20  lumn_int64().** 
6e20: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
6e30: 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20 20  mn_text().**    
6e40: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6e50: 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20 20  text16().**     
6e60: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 72  sqlite3_column_r
6e70: 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  eal().**     sql
6e80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
6e90: 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  s().**     sqlit
6ea0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
6eb0: 36 28 29 0a 2a 2a 20 20 20 20 20 73 71 69 69 74  6().**     sqiit
6ec0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 29  e3_column_blob()
6ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
6ee0: 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c  columnMallocFail
6ef0: 75 72 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ure(sqlite3_stmt
6f00: 20 2a 70 53 74 6d 74 29 0a 7b 0a 20 20 2f 2a 20   *pStmt).{.  /* 
6f10: 49 66 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c  If malloc() fail
6f20: 65 64 20 64 75 72 69 6e 67 20 61 6e 20 65 6e 63  ed during an enc
6f30: 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f 6e  oding conversion
6f40: 20 77 69 74 68 69 6e 20 61 6e 0a 20 20 2a 2a 20   within an.  ** 
6f50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 58  sqlite3_column_X
6f60: 58 58 20 41 50 49 2c 20 74 68 65 6e 20 73 65 74  XX API, then set
6f70: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
6f80: 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   of the statemen
6f90: 74 20 74 6f 0a 20 20 2a 2a 20 53 51 4c 49 54 45  t to.  ** SQLITE
6fa0: 5f 4e 4f 4d 45 4d 2e 20 54 68 65 20 6e 65 78 74  _NOMEM. The next
6fb0: 20 63 61 6c 6c 20 74 6f 20 5f 73 74 65 70 28 29   call to _step()
6fc0: 20 28 69 66 20 61 6e 79 29 20 77 69 6c 6c 20 72   (if any) will r
6fd0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
6fe0: 4f 52 0a 20 20 2a 2a 20 61 6e 64 20 5f 66 69 6e  OR.  ** and _fin
6ff0: 61 6c 69 7a 65 28 29 20 77 69 6c 6c 20 72 65 74  alize() will ret
7000: 75 72 6e 20 4e 4f 4d 45 4d 2e 0a 20 20 2a 2f 0a  urn NOMEM..  */.
7010: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
7020: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 66 28  e *)pStmt;.  if(
7030: 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20   p ){.    p->rc 
7040: 3d 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  = sqlite3ApiExit
7050: 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 29 3b 0a  (p->db, p->rc);.
7060: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
7070: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
7080: 75 74 65 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  utex);.  }.}../*
7090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
70a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69  *********** sqli
70b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 20 20 2a 2a 2a  te3_column_  ***
70c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
70d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
70e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f  The following ro
70f0: 75 74 69 6e 65 73 20 61 72 65 20 75 73 65 64 20  utines are used 
7100: 74 6f 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e  to access elemen
7110: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
7120: 74 20 72 6f 77 0a 2a 2a 20 69 6e 20 74 68 65 20  t row.** in the 
7130: 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2f 0a 63  result set..*/.c
7140: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
7150: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73  e3_column_blob(s
7160: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7170: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f  mt, int i){.  co
7180: 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 3b 0a 20  nst void *val;. 
7190: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
71a0: 61 6c 75 65 5f 62 6c 6f 62 28 20 63 6f 6c 75 6d  alue_blob( colum
71b0: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
71c0: 0a 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67  .  /* Even thoug
71d0: 68 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 6e  h there is no en
71e0: 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  coding conversio
71f0: 6e 2c 20 76 61 6c 75 65 5f 62 6c 6f 62 28 29 20  n, value_blob() 
7200: 6d 69 67 68 74 0a 20 20 2a 2a 20 6e 65 65 64 20  might.  ** need 
7210: 74 6f 20 63 61 6c 6c 20 6d 61 6c 6c 6f 63 28 29  to call malloc()
7220: 20 74 6f 20 65 78 70 61 6e 64 20 74 68 65 20 72   to expand the r
7230: 65 73 75 6c 74 20 6f 66 20 61 20 7a 65 72 6f 62  esult of a zerob
7240: 6c 6f 62 28 29 20 0a 20 20 2a 2a 20 65 78 70 72  lob() .  ** expr
7250: 65 73 73 69 6f 6e 2e 20 0a 20 20 2a 2f 0a 20 20  ession. .  */.  
7260: 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c  columnMallocFail
7270: 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65  ure(pStmt);.  re
7280: 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20  turn val;.}.int 
7290: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
72a0: 79 74 65 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ytes(sqlite3_stm
72b0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
72c0: 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d 20 73 71  {.  int val = sq
72d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
72e0: 73 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  s( columnMem(pSt
72f0: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
7300: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
7310: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
7320: 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74  val;.}.int sqlit
7330: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
7340: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
7350: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
7360: 20 69 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69 74   int val = sqlit
7370: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36  e3_value_bytes16
7380: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
7390: 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e  t,i) );.  column
73a0: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
73b0: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
73c0: 61 6c 3b 0a 7d 0a 64 6f 75 62 6c 65 20 73 71 6c  al;.}.double sql
73d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
73e0: 6c 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  le(sqlite3_stmt 
73f0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
7400: 20 20 64 6f 75 62 6c 65 20 76 61 6c 20 3d 20 73    double val = s
7410: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
7420: 62 6c 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  ble( columnMem(p
7430: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
7440: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
7450: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
7460: 6e 20 76 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c  n val;.}.int sql
7470: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28  ite3_column_int(
7480: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7490: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69  tmt, int i){.  i
74a0: 6e 74 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  nt val = sqlite3
74b0: 5f 76 61 6c 75 65 5f 69 6e 74 28 20 63 6f 6c 75  _value_int( colu
74c0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
74d0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
74e0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
74f0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
7500: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c  sqlite_int64 sql
7510: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
7520: 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  4(sqlite3_stmt *
7530: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
7540: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 76 61   sqlite_int64 va
7550: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
7560: 65 5f 69 6e 74 36 34 28 20 63 6f 6c 75 6d 6e 4d  e_int64( columnM
7570: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
7580: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
7590: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
75a0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 63 6f 6e  eturn val;.}.con
75b0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
75c0: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
75d0: 5f 74 65 78 74 28 73 71 6c 69 74 65 33 5f 73 74  _text(sqlite3_st
75e0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
75f0: 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  ){.  const unsig
7600: 6e 65 64 20 63 68 61 72 20 2a 76 61 6c 20 3d 20  ned char *val = 
7610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
7620: 78 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  xt( columnMem(pS
7630: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
7640: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
7650: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
7660: 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 33 5f   val;.}.sqlite3_
7670: 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 5f 63  value *sqlite3_c
7680: 6f 6c 75 6d 6e 5f 76 61 6c 75 65 28 73 71 6c 69  olumn_value(sqli
7690: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
76a0: 20 69 6e 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a   int i){.  Mem *
76b0: 70 4f 75 74 20 3d 20 63 6f 6c 75 6d 6e 4d 65 6d  pOut = columnMem
76c0: 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 69 66  (pStmt, i);.  if
76d0: 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 26 4d 45  ( pOut->flags&ME
76e0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
76f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pOut->flags &= ~
7700: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
7710: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
7720: 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 7d 0a 20 20  EM_Ephem;.  }.  
7730: 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c  columnMallocFail
7740: 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65  ure(pStmt);.  re
7750: 74 75 72 6e 20 28 73 71 6c 69 74 65 33 5f 76 61  turn (sqlite3_va
7760: 6c 75 65 20 2a 29 70 4f 75 74 3b 0a 7d 0a 23 69  lue *)pOut;.}.#i
7770: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7780: 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f  T_UTF16.const vo
7790: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
77a0: 6d 6e 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65  mn_text16(sqlite
77b0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
77c0: 6e 74 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76  nt i){.  const v
77d0: 6f 69 64 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  oid *val = sqlit
77e0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
77f0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
7800: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
7810: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
7820: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
7830: 6c 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  l;.}.#endif /* S
7840: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
7850: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f   */.int sqlite3_
7860: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 71 6c 69  column_type(sqli
7870: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7880: 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 69   int i){.  int i
7890: 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76  Type = sqlite3_v
78a0: 61 6c 75 65 5f 74 79 70 65 28 20 63 6f 6c 75 6d  alue_type( colum
78b0: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
78c0: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
78d0: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
78e0: 20 72 65 74 75 72 6e 20 69 54 79 70 65 3b 0a 7d   return iType;.}
78f0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
7900: 74 68 65 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74  the N-th element
7910: 20 6f 66 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e   of pStmt->pColN
7920: 61 6d 65 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72  ame[] into a str
7930: 69 6e 67 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75  ing using.** xFu
7940: 6e 63 28 29 20 74 68 65 6e 20 72 65 74 75 72 6e  nc() then return
7950: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 49   that string.  I
7960: 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61  f N is out of ra
7970: 6e 67 65 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a  nge, return 0..*
7980: 2a 0a 2a 2a 20 54 68 65 72 65 20 61 72 65 20 75  *.** There are u
7990: 70 20 74 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72  p to 5 names for
79a0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75   each column.  u
79b0: 73 65 54 79 70 65 20 64 65 74 65 72 6d 69 6e 65  seType determine
79c0: 73 20 77 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20  s which.** name 
79d0: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 48 65  is returned.  He
79e0: 72 65 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73  re are the names
79f0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20  :.**.**    0    
7a00: 20 20 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d    The column nam
7a10: 65 20 61 73 20 69 74 20 73 68 6f 75 6c 64 20 62  e as it should b
7a20: 65 20 64 69 73 70 6c 61 79 65 64 20 66 6f 72 20  e displayed for 
7a30: 6f 75 74 70 75 74 0a 2a 2a 20 20 20 20 31 20 20  output.**    1  
7a40: 20 20 20 20 54 68 65 20 64 61 74 61 74 79 70 65      The datatype
7a50: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
7a60: 6c 75 6d 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20  lumn.**    2    
7a70: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
7a80: 65 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  e database that 
7a90: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76  the column deriv
7aa0: 65 73 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20  es from.**    3 
7ab0: 20 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66       The name of
7ac0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
7ad0: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76  the column deriv
7ae0: 65 73 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20  es from.**    4 
7af0: 20 20 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66       The name of
7b00: 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d   the table colum
7b10: 6e 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  n that the resul
7b20: 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  t column derives
7b30: 20 66 72 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74   from.**.** If t
7b40: 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
7b50: 20 61 20 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e   a simple column
7b60: 20 72 65 66 65 72 65 6e 63 65 20 28 69 66 20 69   reference (if i
7b70: 74 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  t is an expressi
7b80: 6f 6e 0a 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74  on.** or a const
7b90: 61 6e 74 29 20 74 68 65 6e 20 75 73 65 54 79 70  ant) then useTyp
7ba0: 65 73 20 32 2c 20 33 2c 20 61 6e 64 20 34 20 72  es 2, 3, and 4 r
7bb0: 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73  eturn NULL..*/.s
7bc0: 74 61 74 69 63 20 63 6f 6e 73 74 20 76 6f 69 64  tatic const void
7bd0: 20 2a 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20   *columnName(.  
7be0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7bf0: 74 6d 74 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20  tmt,.  int N,.  
7c00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46  const void *(*xF
7c10: 75 6e 63 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e  unc)(Mem*),.  in
7c20: 74 20 75 73 65 54 79 70 65 0a 29 7b 0a 20 20 63  t useType.){.  c
7c30: 6f 6e 73 74 20 76 6f 69 64 20 2a 72 65 74 3b 0a  onst void *ret;.
7c40: 20 20 56 64 62 65 20 2a 70 3b 0a 20 20 69 6e 74    Vdbe *p;.  int
7c50: 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   n;.  sqlite3 *d
7c60: 62 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  b;.#ifdef SQLITE
7c70: 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
7c80: 52 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d 30  R.  if( pStmt==0
7c90: 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51   ){.    (void)SQ
7ca0: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
7cb0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
7cc0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74    }.#endif.  ret
7cd0: 20 3d 20 30 3b 0a 20 20 70 20 3d 20 28 56 64 62   = 0;.  p = (Vdb
7ce0: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 64 62 20  e *)pStmt;.  db 
7cf0: 3d 20 70 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72  = p->db;.  asser
7d00: 74 28 20 64 62 21 3d 30 20 29 3b 0a 20 20 6e 20  t( db!=0 );.  n 
7d10: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
7d20: 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b 0a 20  _count(pStmt);. 
7d30: 20 69 66 28 20 4e 3c 6e 20 26 26 20 4e 3e 3d 30   if( N<n && N>=0
7d40: 20 29 7b 0a 20 20 20 20 4e 20 2b 3d 20 75 73 65   ){.    N += use
7d50: 54 79 70 65 2a 6e 3b 0a 20 20 20 20 73 71 6c 69  Type*n;.    sqli
7d60: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
7d70: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20  db->mutex);.    
7d80: 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c  assert( db->mall
7d90: 6f 63 46 61 69 6c 65 64 3d 3d 30 20 29 3b 0a 20  ocFailed==0 );. 
7da0: 20 20 20 72 65 74 20 3d 20 78 46 75 6e 63 28 26     ret = xFunc(&
7db0: 70 2d 3e 61 43 6f 6c 4e 61 6d 65 5b 4e 5d 29 3b  p->aColName[N]);
7dc0: 0a 20 20 20 20 20 2f 2a 20 41 20 6d 61 6c 6c 6f  .     /* A mallo
7dd0: 63 20 6d 61 79 20 68 61 76 65 20 66 61 69 6c 65  c may have faile
7de0: 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
7df0: 78 46 75 6e 63 28 29 20 63 61 6c 6c 2e 20 49 66  xFunc() call. If
7e00: 20 74 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20   this.    ** is 
7e10: 74 68 65 20 63 61 73 65 2c 20 63 6c 65 61 72 20  the case, clear 
7e20: 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  the mallocFailed
7e30: 20 66 6c 61 67 20 61 6e 64 20 72 65 74 75 72 6e   flag and return
7e40: 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
7e50: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
7e60: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20  Failed ){.      
7e70: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
7e80: 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 65 74 20   = 0;.      ret 
7e90: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 0;.    }.    s
7ea0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
7eb0: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
7ec0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b   }.  return ret;
7ed0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
7ee0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
7ef0: 20 4e 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   Nth column of t
7f00: 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72 65  he result set re
7f10: 74 75 72 6e 65 64 20 62 79 20 53 51 4c 0a 2a 2a  turned by SQL.**
7f20: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
7f30: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
7f40: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
7f50: 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  name(sqlite3_stm
7f60: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
7f70: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
7f80: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
7f90: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
7fa0: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
7fb0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c  ite3_value_text,
7fc0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b 0a   COLNAME_NAME);.
7fd0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
7fe0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73  _OMIT_UTF16.cons
7ff0: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
8000: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 71  column_name16(sq
8010: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8020: 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74  t, int N){.  ret
8030: 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a  urn columnName(.
8040: 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20        pStmt, N, 
8050: 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28  (const void*(*)(
8060: 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61  Mem*))sqlite3_va
8070: 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e  lue_text16, COLN
8080: 41 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 65 6e  AME_NAME);.}.#en
8090: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
80a0: 72 61 69 6e 74 3a 20 20 49 66 20 79 6f 75 20 68  raint:  If you h
80b0: 61 76 65 20 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ave ENABLE_COLUM
80c0: 4e 5f 4d 45 54 41 44 41 54 41 20 74 68 65 6e 20  N_METADATA then 
80d0: 79 6f 75 20 6d 75 73 74 0a 2a 2a 20 6e 6f 74 20  you must.** not 
80e0: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 44 45 43 4c  define OMIT_DECL
80f0: 54 59 50 45 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  TYPE..*/.#if def
8100: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
8110: 5f 44 45 43 4c 54 59 50 45 29 20 26 26 20 64 65  _DECLTYPE) && de
8120: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
8130: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
8140: 41 54 41 29 0a 23 20 65 72 72 6f 72 20 22 4d 75  ATA).# error "Mu
8150: 73 74 20 6e 6f 74 20 64 65 66 69 6e 65 20 62 6f  st not define bo
8160: 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  th SQLITE_OMIT_D
8170: 45 43 4c 54 59 50 45 20 5c 0a 20 20 20 20 20 20  ECLTYPE \.      
8180: 20 20 20 61 6e 64 20 53 51 4c 49 54 45 5f 45 4e     and SQLITE_EN
8190: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
81a0: 44 41 54 41 22 0a 23 65 6e 64 69 66 0a 0a 23 69  DATA".#endif..#i
81b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
81c0: 54 5f 44 45 43 4c 54 59 50 45 0a 2f 2a 0a 2a 2a  T_DECLTYPE./*.**
81d0: 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6c 75   Return the colu
81e0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74  mn declaration t
81f0: 79 70 65 20 28 69 66 20 61 70 70 6c 69 63 61 62  ype (if applicab
8200: 6c 65 29 20 6f 66 20 74 68 65 20 27 69 27 74 68  le) of the 'i'th
8210: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6f 66 20 74 68   column.** of th
8220: 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
8230: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 70 53  SQL statement pS
8240: 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  tmt..*/.const ch
8250: 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ar *sqlite3_colu
8260: 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 71 6c 69  mn_decltype(sqli
8270: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
8280: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
8290: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
82a0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
82b0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
82c0: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
82d0: 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f  e_text, COLNAME_
82e0: 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a 23 69 66  DECLTYPE);.}.#if
82f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8300: 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69  _UTF16.const voi
8310: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
8320: 6e 5f 64 65 63 6c 74 79 70 65 31 36 28 73 71 6c  n_decltype16(sql
8330: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8340: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
8350: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
8360: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
8370: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
8380: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
8390: 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41  ue_text16, COLNA
83a0: 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b 0a 7d 0a  ME_DECLTYPE);.}.
83b0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
83c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23  _OMIT_UTF16 */.#
83d0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
83e0: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20 2a 2f  OMIT_DECLTYPE */
83f0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
8400: 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
8410: 54 41 44 41 54 41 0a 2f 2a 0a 2a 2a 20 52 65 74  TADATA./*.** Ret
8420: 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
8430: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72 6f  the database fro
8440: 6d 20 77 68 69 63 68 20 61 20 72 65 73 75 6c 74  m which a result
8450: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e   column derives.
8460: 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75  .** NULL is retu
8470: 72 6e 65 64 20 69 66 20 74 68 65 20 72 65 73 75  rned if the resu
8480: 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  lt column is an 
8490: 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f  expression or co
84a0: 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79  nstant or.** any
84b0: 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63 68  thing else which
84c0: 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 6d 62   is not an unamb
84d0: 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65  iguous reference
84e0: 20 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63   to a database c
84f0: 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  olumn..*/.const 
8500: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f  char *sqlite3_co
8510: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
8520: 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  me(sqlite3_stmt 
8530: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
8540: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
8550: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
8560: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
8570: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
8580: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43  e3_value_text, C
8590: 4f 4c 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29  OLNAME_DATABASE)
85a0: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
85b0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
85c0: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
85d0: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
85e0: 65 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33  e_name16(sqlite3
85f0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
8600: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
8610: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
8620: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
8630: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
8640: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
8650: 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44  ext16, COLNAME_D
8660: 41 54 41 42 41 53 45 29 3b 0a 7d 0a 23 65 6e 64  ATABASE);.}.#end
8670: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8680: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a  T_UTF16 */../*.*
8690: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
86a0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 66  e of the table f
86b0: 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73 75  rom which a resu
86c0: 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65  lt column derive
86d0: 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65  s..** NULL is re
86e0: 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 72 65  turned if the re
86f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61  sult column is a
8700: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20  n expression or 
8710: 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61  constant or.** a
8720: 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68 69  nything else whi
8730: 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61  ch is not an una
8740: 6d 62 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e  mbiguous referen
8750: 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  ce to a database
8760: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73   column..*/.cons
8770: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
8780: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
8790: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
87a0: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
87b0: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
87c0: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
87d0: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
87e0: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
87f0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f  3_value_text, CO
8800: 4c 4e 41 4d 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a  LNAME_TABLE);.}.
8810: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8820: 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20  MIT_UTF16.const 
8830: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
8840: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
8850: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
8860: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
8870: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
8880: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
8890: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
88a0: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
88b0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20  3_value_text16, 
88c0: 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29 3b 0a  COLNAME_TABLE);.
88d0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
88e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
88f0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
8900: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
8910: 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 66 72 6f 6d  able column from
8920: 20 77 68 69 63 68 20 61 20 72 65 73 75 6c 74 20   which a result 
8930: 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a  column derives..
8940: 2a 2a 20 4e 55 4c 4c 20 69 73 20 72 65 74 75 72  ** NULL is retur
8950: 6e 65 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  ned if the resul
8960: 74 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  t column is an e
8970: 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e  xpression or con
8980: 73 74 61 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74  stant or.** anyt
8990: 68 69 6e 67 20 65 6c 73 65 20 77 68 69 63 68 20  hing else which 
89a0: 69 73 20 6e 6f 74 20 61 6e 20 75 6e 61 6d 62 69  is not an unambi
89b0: 67 75 6f 75 73 20 72 65 66 65 72 65 6e 63 65 20  guous reference 
89c0: 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  to a database co
89d0: 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63  lumn..*/.const c
89e0: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  har *sqlite3_col
89f0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
8a00: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
8a10: 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72  tmt, int N){.  r
8a20: 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65  eturn columnName
8a30: 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e  (.      pStmt, N
8a40: 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a  , (const void*(*
8a50: 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f  )(Mem*))sqlite3_
8a60: 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e  value_text, COLN
8a70: 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23  AME_COLUMN);.}.#
8a80: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8a90: 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76  IT_UTF16.const v
8aa0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
8ab0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
8ac0: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
8ad0: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
8ae0: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
8af0: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
8b00: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
8b10: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
8b20: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c 20  3_value_text16, 
8b30: 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b  COLNAME_COLUMN);
8b40: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
8b50: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
8b60: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  /.#endif /* SQLI
8b70: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
8b80: 5f 4d 45 54 41 44 41 54 41 20 2a 2f 0a 0a 0a 2f  _METADATA */.../
8b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20  *************** 
8bb0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 20 20 2a  sqlite3_bind_  *
8bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 0a 2a  **********.** .*
8be0: 2a 20 52 6f 75 74 69 6e 65 73 20 75 73 65 64 20  * Routines used 
8bf0: 74 6f 20 61 74 74 61 63 68 20 76 61 6c 75 65 73  to attach values
8c00: 20 74 6f 20 77 69 6c 64 63 61 72 64 73 20 69 6e   to wildcards in
8c10: 20 61 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20   a compiled SQL 
8c20: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 2f 2a  statement..*/./*
8c30: 0a 2a 2a 20 55 6e 62 69 6e 64 20 74 68 65 20 76  .** Unbind the v
8c40: 61 6c 75 65 20 62 6f 75 6e 64 20 74 6f 20 76 61  alue bound to va
8c50: 72 69 61 62 6c 65 20 69 20 69 6e 20 76 69 72 74  riable i in virt
8c60: 75 61 6c 20 6d 61 63 68 69 6e 65 20 70 2e 20 54  ual machine p. T
8c70: 68 69 73 20 69 73 20 74 68 65 20 0a 2a 2a 20 74  his is the .** t
8c80: 68 65 20 73 61 6d 65 20 61 73 20 62 69 6e 64 69  he same as bindi
8c90: 6e 67 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ng a NULL value 
8ca0: 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 49  to the column. I
8cb0: 66 20 74 68 65 20 22 69 22 20 70 61 72 61 6d 65  f the "i" parame
8cc0: 74 65 72 20 69 73 0a 2a 2a 20 6f 75 74 20 6f 66  ter is.** out of
8cd0: 20 72 61 6e 67 65 2c 20 74 68 65 6e 20 53 51 4c   range, then SQL
8ce0: 49 54 45 5f 52 41 4e 47 45 20 69 73 20 72 65 74  ITE_RANGE is ret
8cf0: 75 72 6e 65 64 2e 20 4f 74 68 65 77 69 73 65 20  urned. Othewise 
8d00: 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a  SQLITE_OK..**.**
8d10: 20 41 20 73 75 63 63 65 73 73 66 75 6c 20 65 76   A successful ev
8d20: 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  aluation of this
8d30: 20 72 6f 75 74 69 6e 65 20 61 63 71 75 69 72 65   routine acquire
8d40: 73 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 70  s the mutex on p
8d50: 2e 0a 2a 2a 20 74 68 65 20 6d 75 74 65 78 20 69  ..** the mutex i
8d60: 73 20 72 65 6c 65 61 73 65 64 20 69 66 20 61 6e  s released if an
8d70: 79 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20  y kind of error 
8d80: 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  occurs..**.** Th
8d90: 65 20 65 72 72 6f 72 20 63 6f 64 65 20 73 74 6f  e error code sto
8da0: 72 65 64 20 69 6e 20 64 61 74 61 62 61 73 65 20  red in database 
8db0: 70 2d 3e 64 62 20 69 73 20 6f 76 65 72 77 72 69  p->db is overwri
8dc0: 74 74 65 6e 20 77 69 74 68 20 74 68 65 20 72 65  tten with the re
8dd0: 74 75 72 6e 0a 2a 2a 20 76 61 6c 75 65 20 69 6e  turn.** value in
8de0: 20 61 6e 79 20 63 61 73 65 2e 0a 2a 2f 0a 73 74   any case..*/.st
8df0: 61 74 69 63 20 69 6e 74 20 76 64 62 65 55 6e 62  atic int vdbeUnb
8e00: 69 6e 64 28 56 64 62 65 20 2a 70 2c 20 69 6e 74  ind(Vdbe *p, int
8e10: 20 69 29 7b 0a 20 20 4d 65 6d 20 2a 70 56 61 72   i){.  Mem *pVar
8e20: 3b 0a 20 20 69 66 28 20 76 64 62 65 53 61 66 65  ;.  if( vdbeSafe
8e30: 74 79 4e 6f 74 4e 75 6c 6c 28 70 29 20 29 7b 0a  tyNotNull(p) ){.
8e40: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8e50: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
8e60: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74   }.  sqlite3_mut
8e70: 65 78 5f 65 6e 74 65 72 28 70 2d 3e 64 62 2d 3e  ex_enter(p->db->
8e80: 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 2d  mutex);.  if( p-
8e90: 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f 4d 41 47  >magic!=VDBE_MAG
8ea0: 49 43 5f 52 55 4e 20 7c 7c 20 70 2d 3e 70 63 3e  IC_RUN || p->pc>
8eb0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
8ec0: 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51  3Error(p->db, SQ
8ed0: 4c 49 54 45 5f 4d 49 53 55 53 45 29 3b 0a 20 20  LITE_MISUSE);.  
8ee0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
8ef0: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
8f00: 65 78 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ex);.    sqlite3
8f10: 5f 6c 6f 67 28 53 51 4c 49 54 45 5f 4d 49 53 55  _log(SQLITE_MISU
8f20: 53 45 2c 20 0a 20 20 20 20 20 20 20 20 22 62 69  SE, .        "bi
8f30: 6e 64 20 6f 6e 20 61 20 62 75 73 79 20 70 72 65  nd on a busy pre
8f40: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 3a  pared statement:
8f50: 20 5b 25 73 5d 22 2c 20 70 2d 3e 7a 53 71 6c 29   [%s]", p->zSql)
8f60: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  ;.    return SQL
8f70: 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
8f80: 0a 20 20 7d 0a 20 20 69 66 28 20 69 3c 31 20 7c  .  }.  if( i<1 |
8f90: 7c 20 69 3e 70 2d 3e 6e 56 61 72 20 29 7b 0a 20  | i>p->nVar ){. 
8fa0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
8fb0: 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 52 41  p->db, SQLITE_RA
8fc0: 4e 47 45 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  NGE);.    sqlite
8fd0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
8fe0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
8ff0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   return SQLITE_R
9000: 41 4e 47 45 3b 0a 20 20 7d 0a 20 20 69 2d 2d 3b  ANGE;.  }.  i--;
9010: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
9020: 61 72 5b 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ar[i];.  sqlite3
9030: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
9040: 56 61 72 29 3b 0a 20 20 70 56 61 72 2d 3e 66 6c  Var);.  pVar->fl
9050: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
9060: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70    sqlite3Error(p
9070: 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 29  ->db, SQLITE_OK)
9080: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 62  ;..  /* If the b
9090: 69 74 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  it corresponding
90a0: 20 74 6f 20 74 68 69 73 20 76 61 72 69 61 62 6c   to this variabl
90b0: 65 20 69 6e 20 56 64 62 65 2e 65 78 70 6d 61 73  e in Vdbe.expmas
90c0: 6b 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 0a  k is set, then .
90d0: 20 20 2a 2a 20 62 69 6e 64 69 6e 67 20 61 20 6e    ** binding a n
90e0: 65 77 20 76 61 6c 75 65 20 74 6f 20 74 68 69 73  ew value to this
90f0: 20 76 61 72 69 61 62 6c 65 20 69 6e 76 61 6c 69   variable invali
9100: 64 61 74 65 73 20 74 68 65 20 63 75 72 72 65 6e  dates the curren
9110: 74 20 71 75 65 72 79 20 70 6c 61 6e 2e 0a 20 20  t query plan..  
9120: 2a 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e  **.  ** IMPLEMEN
9130: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 34 38 34  TATION-OF: R-484
9140: 34 30 2d 33 37 35 39 35 20 49 66 20 74 68 65 20  40-37595 If the 
9150: 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 20 62  specific value b
9160: 6f 75 6e 64 20 74 6f 20 68 6f 73 74 0a 20 20 2a  ound to host.  *
9170: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 20 74  * parameter in t
9180: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
9190: 6d 69 67 68 74 20 69 6e 66 6c 75 65 6e 63 65 20  might influence 
91a0: 74 68 65 20 63 68 6f 69 63 65 20 6f 66 20 71 75  the choice of qu
91b0: 65 72 79 20 70 6c 61 6e 0a 20 20 2a 2a 20 66 6f  ery plan.  ** fo
91c0: 72 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  r a statement, t
91d0: 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hen the statemen
91e0: 74 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61  t will be automa
91f0: 74 69 63 61 6c 6c 79 20 72 65 63 6f 6d 70 69 6c  tically recompil
9200: 65 64 2c 0a 20 20 2a 2a 20 61 73 20 69 66 20 74  ed,.  ** as if t
9210: 68 65 72 65 20 68 61 64 20 62 65 65 6e 20 61 20  here had been a 
9220: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 6f  schema change, o
9230: 6e 20 74 68 65 20 66 69 72 73 74 20 73 71 6c 69  n the first sqli
9240: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 0a  te3_step() call.
9250: 20 20 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61    ** following a
9260: 6e 79 20 63 68 61 6e 67 65 20 74 6f 20 74 68 65  ny change to the
9270: 20 62 69 6e 64 69 6e 67 73 20 6f 66 20 74 68 61   bindings of tha
9280: 74 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a  t parameter..  *
9290: 2f 0a 20 20 69 66 28 20 70 2d 3e 69 73 50 72 65  /.  if( p->isPre
92a0: 70 61 72 65 56 32 20 26 26 0a 20 20 20 20 20 28  pareV2 &&.     (
92b0: 28 69 3c 33 32 20 26 26 20 70 2d 3e 65 78 70 6d  (i<32 && p->expm
92c0: 61 73 6b 20 26 20 28 28 75 33 32 29 31 20 3c 3c  ask & ((u32)1 <<
92d0: 20 69 29 29 20 7c 7c 20 70 2d 3e 65 78 70 6d 61   i)) || p->expma
92e0: 73 6b 3d 3d 30 78 66 66 66 66 66 66 66 66 29 0a  sk==0xffffffff).
92f0: 20 20 29 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69    ){.    p->expi
9300: 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72  red = 1;.  }.  r
9310: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
9320: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61  .}../*.** Bind a
9330: 20 74 65 78 74 20 6f 72 20 42 4c 4f 42 20 76 61   text or BLOB va
9340: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lue..*/.static i
9350: 6e 74 20 62 69 6e 64 54 65 78 74 28 0a 20 20 73  nt bindText(.  s
9360: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9370: 6d 74 2c 20 20 20 2f 2a 20 54 68 65 20 73 74 61  mt,   /* The sta
9380: 74 65 6d 65 6e 74 20 74 6f 20 62 69 6e 64 20 61  tement to bind a
9390: 67 61 69 6e 73 74 20 2a 2f 0a 20 20 69 6e 74 20  gainst */.  int 
93a0: 69 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i,              
93b0: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
93c0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  he parameter to 
93d0: 62 69 6e 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  bind */.  const 
93e0: 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20 20 20 20  void *zData,    
93f0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74   /* Pointer to t
9400: 68 65 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f  he data to be bo
9410: 75 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61  und */.  int nDa
9420: 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ta,             
9430: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
9440: 65 73 20 6f 66 20 64 61 74 61 20 74 6f 20 62 65  es of data to be
9450: 20 62 6f 75 6e 64 20 2a 2f 0a 20 20 76 6f 69 64   bound */.  void
9460: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c   (*xDel)(void*),
9470: 20 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72     /* Destructor
9480: 20 66 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f   for the data */
9490: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 20  .  u8 encoding  
94a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63            /* Enc
94b0: 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61  oding for the da
94c0: 74 61 20 2a 2f 0a 29 7b 0a 20 20 56 64 62 65 20  ta */.){.  Vdbe 
94d0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
94e0: 6d 74 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b  mt;.  Mem *pVar;
94f0: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63  .  int rc;..  rc
9500: 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c   = vdbeUnbind(p,
9510: 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   i);.  if( rc==S
9520: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
9530: 69 66 28 20 7a 44 61 74 61 21 3d 30 20 29 7b 0a  if( zData!=0 ){.
9540: 20 20 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d        pVar = &p-
9550: 3e 61 56 61 72 5b 69 2d 31 5d 3b 0a 20 20 20 20  >aVar[i-1];.    
9560: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
9570: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 56 61 72  beMemSetStr(pVar
9580: 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20  , zData, nData, 
9590: 65 6e 63 6f 64 69 6e 67 2c 20 78 44 65 6c 29 3b  encoding, xDel);
95a0: 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
95b0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f  QLITE_OK && enco
95c0: 64 69 6e 67 21 3d 30 20 29 7b 0a 20 20 20 20 20  ding!=0 ){.     
95d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
95e0: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
95f0: 67 28 70 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64  g(pVar, ENC(p->d
9600: 62 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  b));.      }.   
9610: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
9620: 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20 20  p->db, rc);.    
9630: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
9640: 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 72 63 29  iExit(p->db, rc)
9650: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
9660: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
9670: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
9680: 20 7d 65 6c 73 65 20 69 66 28 20 78 44 65 6c 21   }else if( xDel!
9690: 3d 53 51 4c 49 54 45 5f 53 54 41 54 49 43 20 26  =SQLITE_STATIC &
96a0: 26 20 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f 54  & xDel!=SQLITE_T
96b0: 52 41 4e 53 49 45 4e 54 20 29 7b 0a 20 20 20 20  RANSIENT ){.    
96c0: 78 44 65 6c 28 28 76 6f 69 64 2a 29 7a 44 61 74  xDel((void*)zDat
96d0: 61 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  a);.  }.  return
96e0: 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42   rc;.}.../*.** B
96f0: 69 6e 64 20 61 20 62 6c 6f 62 20 76 61 6c 75 65  ind a blob value
9700: 20 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65   to an SQL state
9710: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  ment variable..*
9720: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  /.int sqlite3_bi
9730: 6e 64 5f 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74  nd_blob(.  sqlit
9740: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
9750: 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e  .  int i, .  con
9760: 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20  st void *zData, 
9770: 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a 20  .  int nData, . 
9780: 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
9790: 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e  id*).){.  return
97a0: 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c   bindText(pStmt,
97b0: 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74 61   i, zData, nData
97c0: 2c 20 78 44 65 6c 2c 20 30 29 3b 0a 7d 0a 69 6e  , xDel, 0);.}.in
97d0: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  t sqlite3_bind_b
97e0: 6c 6f 62 36 34 28 0a 20 20 73 71 6c 69 74 65 33  lob64(.  sqlite3
97f0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20  _stmt *pStmt, . 
9800: 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74   int i, .  const
9810: 20 76 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20   void *zData, . 
9820: 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20   sqlite3_uint64 
9830: 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28  nData, .  void (
9840: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b  *xDel)(void*).){
9850: 0a 20 20 61 73 73 65 72 74 28 20 78 44 65 6c 21  .  assert( xDel!
9860: 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20  =SQLITE_DYNAMIC 
9870: 29 3b 0a 20 20 69 66 28 20 6e 44 61 74 61 3e 30  );.  if( nData>0
9880: 78 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20 20  x7fffffff ){.   
9890: 20 72 65 74 75 72 6e 20 69 6e 76 6f 6b 65 56 61   return invokeVa
98a0: 6c 75 65 44 65 73 74 72 75 63 74 6f 72 28 7a 44  lueDestructor(zD
98b0: 61 74 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a 20  ata, xDel, 0);. 
98c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
98d0: 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d  rn bindText(pStm
98e0: 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 28 69 6e  t, i, zData, (in
98f0: 74 29 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 30  t)nData, xDel, 0
9900: 29 3b 0a 20 20 7d 0a 7d 0a 69 6e 74 20 73 71 6c  );.  }.}.int sql
9910: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
9920: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
9930: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 64 6f 75  Stmt, int i, dou
9940: 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a 20 20 69  ble rValue){.  i
9950: 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70  nt rc;.  Vdbe *p
9960: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
9970: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
9980: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
9990: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
99a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
99b0: 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70  eMemSetDouble(&p
99c0: 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56 61  ->aVar[i-1], rVa
99d0: 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  lue);.    sqlite
99e0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
99f0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
9a00: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
9a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
9a20: 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  _int(sqlite3_stm
9a30: 74 20 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e 74  t *p, int i, int
9a40: 20 69 56 61 6c 75 65 29 7b 0a 20 20 72 65 74 75   iValue){.  retu
9a50: 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  rn sqlite3_bind_
9a60: 69 6e 74 36 34 28 70 2c 20 69 2c 20 28 69 36 34  int64(p, i, (i64
9a70: 29 69 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20  )iValue);.}.int 
9a80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
9a90: 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  64(sqlite3_stmt 
9aa0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 73  *pStmt, int i, s
9ab0: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 56 61 6c  qlite_int64 iVal
9ac0: 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ue){.  int rc;. 
9ad0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
9ae0: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d   *)pStmt;.  rc =
9af0: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
9b00: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
9b10: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
9b20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
9b30: 6e 74 36 34 28 26 70 2d 3e 61 56 61 72 5b 69 2d  nt64(&p->aVar[i-
9b40: 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20 20  1], iValue);.   
9b50: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
9b60: 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  eave(p->db->mute
9b70: 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  x);.  }.  return
9b80: 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   rc;.}.int sqlit
9b90: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71 6c  e3_bind_null(sql
9ba0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
9bb0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
9bc0: 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  rc;.  Vdbe *p = 
9bd0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
9be0: 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28  rc = vdbeUnbind(
9bf0: 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d  p, i);.  if( rc=
9c00: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
9c10: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
9c20: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
9c30: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
9c40: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
9c50: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 20 0a  te3_bind_text( .
9c60: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
9c70: 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c  pStmt, .  int i,
9c80: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   .  const char *
9c90: 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44  zData, .  int nD
9ca0: 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  ata, .  void (*x
9cb0: 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  Del)(void*).){. 
9cc0: 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74   return bindText
9cd0: 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61  (pStmt, i, zData
9ce0: 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 53  , nData, xDel, S
9cf0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 69  QLITE_UTF8);.}.i
9d00: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
9d10: 74 65 78 74 36 34 28 20 0a 20 20 73 71 6c 69 74  text64( .  sqlit
9d20: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
9d30: 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f 6e  .  int i, .  con
9d40: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 2c 20  st char *zData, 
9d50: 0a 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36  .  sqlite3_uint6
9d60: 34 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64  4 nData, .  void
9d70: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c   (*xDel)(void*),
9d80: 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  .  unsigned char
9d90: 20 65 6e 63 0a 29 7b 0a 20 20 61 73 73 65 72 74   enc.){.  assert
9da0: 28 20 78 44 65 6c 21 3d 53 51 4c 49 54 45 5f 44  ( xDel!=SQLITE_D
9db0: 59 4e 41 4d 49 43 20 29 3b 0a 20 20 69 66 28 20  YNAMIC );.  if( 
9dc0: 6e 44 61 74 61 3e 30 78 37 66 66 66 66 66 66 66  nData>0x7fffffff
9dd0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 69   ){.    return i
9de0: 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73 74 72 75  nvokeValueDestru
9df0: 63 74 6f 72 28 7a 44 61 74 61 2c 20 78 44 65 6c  ctor(zData, xDel
9e00: 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  , 0);.  }else{. 
9e10: 20 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49     if( enc==SQLI
9e20: 54 45 5f 55 54 46 31 36 20 29 20 65 6e 63 20 3d  TE_UTF16 ) enc =
9e30: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
9e40: 49 56 45 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IVE;.    return 
9e50: 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74 2c 20  bindText(pStmt, 
9e60: 69 2c 20 7a 44 61 74 61 2c 20 28 69 6e 74 29 6e  i, zData, (int)n
9e70: 44 61 74 61 2c 20 78 44 65 6c 2c 20 65 6e 63 29  Data, xDel, enc)
9e80: 3b 0a 20 20 7d 0a 7d 0a 23 69 66 6e 64 65 66 20  ;.  }.}.#ifndef 
9e90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
9ea0: 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  6.int sqlite3_bi
9eb0: 6e 64 5f 74 65 78 74 31 36 28 0a 20 20 73 71 6c  nd_text16(.  sql
9ec0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
9ed0: 2c 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63  , .  int i, .  c
9ee0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 44 61 74 61  onst void *zData
9ef0: 2c 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20  , .  int nData, 
9f00: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
9f10: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75  void*).){.  retu
9f20: 72 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d  rn bindText(pStm
9f30: 74 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61  t, i, zData, nDa
9f40: 74 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45  ta, xDel, SQLITE
9f50: 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 7d  _UTF16NATIVE);.}
9f60: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
9f70: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
9f80: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
9f90: 5f 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73  _value(sqlite3_s
9fa0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
9fb0: 69 2c 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  i, const sqlite3
9fc0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b  _value *pValue){
9fd0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 77 69  .  int rc;.  swi
9fe0: 74 63 68 28 20 73 71 6c 69 74 65 33 5f 76 61 6c  tch( sqlite3_val
9ff0: 75 65 5f 74 79 70 65 28 28 73 71 6c 69 74 65 33  ue_type((sqlite3
a000: 5f 76 61 6c 75 65 2a 29 70 56 61 6c 75 65 29 20  _value*)pValue) 
a010: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
a020: 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20  TE_INTEGER: {.  
a030: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a040: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d  _bind_int64(pStm
a050: 74 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 75 2e  t, i, pValue->u.
a060: 69 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  i);.      break;
a070: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
a080: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a 20 7b 0a  SQLITE_FLOAT: {.
a090: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
a0a0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70  e3_bind_double(p
a0b0: 53 74 6d 74 2c 20 69 2c 20 70 56 61 6c 75 65 2d  Stmt, i, pValue-
a0c0: 3e 75 2e 72 29 3b 0a 20 20 20 20 20 20 62 72 65  >u.r);.      bre
a0d0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
a0e0: 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 20  se SQLITE_BLOB: 
a0f0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 56 61 6c  {.      if( pVal
a100: 75 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ue->flags & MEM_
a110: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 20 20  Zero ){.        
a120: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
a130: 64 5f 7a 65 72 6f 62 6c 6f 62 28 70 53 74 6d 74  d_zeroblob(pStmt
a140: 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 75 2e 6e  , i, pValue->u.n
a150: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7d 65 6c  Zero);.      }el
a160: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
a170: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
a180: 6f 62 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61  ob(pStmt, i, pVa
a190: 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d 3e  lue->z, pValue->
a1a0: 6e 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  n,SQLITE_TRANSIE
a1b0: 4e 54 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  NT);.      }.   
a1c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
a1d0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
a1e0: 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 72 63  TEXT: {.      rc
a1f0: 20 3d 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d   = bindText(pStm
a200: 74 2c 69 2c 20 20 70 56 61 6c 75 65 2d 3e 7a 2c  t,i,  pValue->z,
a210: 20 70 56 61 6c 75 65 2d 3e 6e 2c 20 53 51 4c 49   pValue->n, SQLI
a220: 54 45 5f 54 52 41 4e 53 49 45 4e 54 2c 0a 20 20  TE_TRANSIENT,.  
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a240: 20 20 20 20 20 20 20 20 20 20 20 20 70 56 61 6c              pVal
a250: 75 65 2d 3e 65 6e 63 29 3b 0a 20 20 20 20 20 20  ue->enc);.      
a260: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
a270: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
a280: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
a290: 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20  ind_null(pStmt, 
a2a0: 69 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  i);.      break;
a2b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
a2c0: 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71  urn rc;.}.int sq
a2d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62  lite3_bind_zerob
a2e0: 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  lob(sqlite3_stmt
a2f0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20   *pStmt, int i, 
a300: 69 6e 74 20 6e 29 7b 0a 20 20 69 6e 74 20 72 63  int n){.  int rc
a310: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
a320: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72  dbe *)pStmt;.  r
a330: 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70  c = vdbeUnbind(p
a340: 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , i);.  if( rc==
a350: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
a360: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
a370: 65 74 5a 65 72 6f 42 6c 6f 62 28 26 70 2d 3e 61  etZeroBlob(&p->a
a380: 56 61 72 5b 69 2d 31 5d 2c 20 6e 29 3b 0a 20 20  Var[i-1], n);.  
a390: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
a3a0: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
a3b0: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
a3c0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  n rc;.}../*.** R
a3d0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a3e0: 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 74 68   of wildcards th
a3f0: 61 74 20 63 61 6e 20 62 65 20 70 6f 74 65 6e 74  at can be potent
a400: 69 61 6c 6c 79 20 62 6f 75 6e 64 20 74 6f 2e 0a  ially bound to..
a410: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
a420: 69 73 20 61 64 64 65 64 20 74 6f 20 73 75 70 70  is added to supp
a430: 6f 72 74 20 44 42 44 3a 3a 53 51 4c 69 74 65 2e  ort DBD::SQLite.
a440: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
a450: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
a460: 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73  _count(sqlite3_s
a470: 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56  tmt *pStmt){.  V
a480: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29  dbe *p = (Vdbe*)
a490: 70 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20  pStmt;.  return 
a4a0: 70 20 3f 20 70 2d 3e 6e 56 61 72 20 3a 20 30 3b  p ? p->nVar : 0;
a4b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
a4c0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77   the name of a w
a4d0: 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65  ildcard paramete
a4e0: 72 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20  r.  Return NULL 
a4f0: 69 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  if the index.** 
a500: 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20  is out of range 
a510: 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63 61  or if the wildca
a520: 72 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a  rd is unnamed..*
a530: 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  *.** The result 
a540: 69 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38 2e  is always UTF-8.
a550: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
a560: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
a570: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c 69  ameter_name(sqli
a580: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
a590: 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20   int i){.  Vdbe 
a5a0: 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *p = (Vdbe*)pStm
a5b0: 74 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c  t;.  if( p==0 ||
a5c0: 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 7a 56   i<1 || i>p->nzV
a5d0: 61 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ar ){.    return
a5e0: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
a5f0: 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31 5d 3b 0a   p->azVar[i-1];.
a600: 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e 20 61  }../*.** Given a
a610: 20 77 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65   wildcard parame
a620: 74 65 72 20 6e 61 6d 65 2c 20 72 65 74 75 72 6e  ter name, return
a630: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
a640: 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 77 69  e variable.** wi
a650: 74 68 20 74 68 61 74 20 6e 61 6d 65 2e 20 20 49  th that name.  I
a660: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 76 61  f there is no va
a670: 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20  riable with the 
a680: 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a 2a 20 72  given name,.** r
a690: 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e 74 20  eturn 0..*/.int 
a6a0: 73 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d  sqlite3VdbeParam
a6b0: 65 74 65 72 49 6e 64 65 78 28 56 64 62 65 20 2a  eterIndex(Vdbe *
a6c0: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
a6d0: 4e 61 6d 65 2c 20 69 6e 74 20 6e 4e 61 6d 65 29  Name, int nName)
a6e0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  {.  int i;.  if(
a6f0: 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74   p==0 ){.    ret
a700: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  urn 0;.  }.  if(
a710: 20 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f   zName ){.    fo
a720: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 7a 56 61  r(i=0; i<p->nzVa
a730: 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63  r; i++){.      c
a740: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
a750: 2d 3e 61 7a 56 61 72 5b 69 5d 3b 0a 20 20 20 20  ->azVar[i];.    
a760: 20 20 69 66 28 20 7a 20 26 26 20 73 74 72 6e 63    if( z && strnc
a770: 6d 70 28 7a 2c 7a 4e 61 6d 65 2c 6e 4e 61 6d 65  mp(z,zName,nName
a780: 29 3d 3d 30 20 26 26 20 7a 5b 6e 4e 61 6d 65 5d  )==0 && z[nName]
a790: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
a7a0: 65 74 75 72 6e 20 69 2b 31 3b 0a 20 20 20 20 20  eturn i+1;.     
a7b0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
a7c0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 69 6e 74 20 73  eturn 0;.}.int s
a7d0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
a7e0: 6d 65 74 65 72 5f 69 6e 64 65 78 28 73 71 6c 69  meter_index(sqli
a7f0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
a800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
a810: 6d 65 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  me){.  return sq
a820: 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
a830: 65 72 49 6e 64 65 78 28 28 56 64 62 65 2a 29 70  erIndex((Vdbe*)p
a840: 53 74 6d 74 2c 20 7a 4e 61 6d 65 2c 20 73 71 6c  Stmt, zName, sql
a850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
a860: 6d 65 29 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  me));.}../*.** T
a870: 72 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64  ransfer all bind
a880: 69 6e 67 73 20 66 72 6f 6d 20 74 68 65 20 66 69  ings from the fi
a890: 72 73 74 20 73 74 61 74 65 6d 65 6e 74 20 6f 76  rst statement ov
a8a0: 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  er to the second
a8b0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
a8c0: 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
a8d0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
a8e0: 46 72 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65  FromStmt, sqlite
a8f0: 33 5f 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29  3_stmt *pToStmt)
a900: 7b 0a 20 20 56 64 62 65 20 2a 70 46 72 6f 6d 20  {.  Vdbe *pFrom 
a910: 3d 20 28 56 64 62 65 2a 29 70 46 72 6f 6d 53 74  = (Vdbe*)pFromSt
a920: 6d 74 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f 20  mt;.  Vdbe *pTo 
a930: 3d 20 28 56 64 62 65 2a 29 70 54 6f 53 74 6d 74  = (Vdbe*)pToStmt
a940: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
a950: 65 72 74 28 20 70 54 6f 2d 3e 64 62 3d 3d 70 46  ert( pTo->db==pF
a960: 72 6f 6d 2d 3e 64 62 20 29 3b 0a 20 20 61 73 73  rom->db );.  ass
a970: 65 72 74 28 20 70 54 6f 2d 3e 6e 56 61 72 3d 3d  ert( pTo->nVar==
a980: 70 46 72 6f 6d 2d 3e 6e 56 61 72 20 29 3b 0a 20  pFrom->nVar );. 
a990: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
a9a0: 6e 74 65 72 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75  nter(pTo->db->mu
a9b0: 74 65 78 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  tex);.  for(i=0;
a9c0: 20 69 3c 70 46 72 6f 6d 2d 3e 6e 56 61 72 3b 20   i<pFrom->nVar; 
a9d0: 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i++){.    sqlite
a9e0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 70 54  3VdbeMemMove(&pT
a9f0: 6f 2d 3e 61 56 61 72 5b 69 5d 2c 20 26 70 46 72  o->aVar[i], &pFr
aa00: 6f 6d 2d 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20  om->aVar[i]);.  
aa10: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
aa20: 78 5f 6c 65 61 76 65 28 70 54 6f 2d 3e 64 62 2d  x_leave(pTo->db-
aa30: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
aa40: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
aa50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
aa60: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f  MIT_DEPRECATED./
aa70: 2a 0a 2a 2a 20 44 65 70 72 65 63 61 74 65 64 20  *.** Deprecated 
aa80: 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61  external interfa
aa90: 63 65 2e 20 20 49 6e 74 65 72 6e 61 6c 2f 63 6f  ce.  Internal/co
aaa0: 72 65 20 53 51 4c 69 74 65 20 63 6f 64 65 0a 2a  re SQLite code.*
aab0: 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 73 71  * should call sq
aac0: 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
aad0: 64 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 74 20  dings..**.** It 
aae0: 69 73 20 6d 69 73 75 73 65 20 74 6f 20 63 61 6c  is misuse to cal
aaf0: 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  l this routine w
ab00: 69 74 68 20 73 74 61 74 65 6d 65 6e 74 73 20 66  ith statements f
ab10: 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 2a 2a  rom different.**
ab20: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ab30: 74 69 6f 6e 73 2e 20 20 42 75 74 20 61 73 20 74  tions.  But as t
ab40: 68 69 73 20 69 73 20 61 20 64 65 70 72 65 63 61  his is a depreca
ab50: 74 65 64 20 69 6e 74 65 72 66 61 63 65 2c 20 77  ted interface, w
ab60: 65 0a 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 62 6f  e.** will not bo
ab70: 74 68 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f  ther to check fo
ab80: 72 20 74 68 61 74 20 63 6f 6e 64 69 74 69 6f 6e  r that condition
ab90: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
aba0: 77 6f 20 73 74 61 74 65 6d 65 6e 74 73 20 63 6f  wo statements co
abb0: 6e 74 61 69 6e 20 61 20 64 69 66 66 65 72 65 6e  ntain a differen
abc0: 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 6e 64  t number of bind
abd0: 69 6e 67 73 2c 20 74 68 65 6e 0a 2a 2a 20 61 6e  ings, then.** an
abe0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 73   SQLITE_ERROR is
abf0: 20 72 65 74 75 72 6e 65 64 2e 20 20 4e 6f 74 68   returned.  Noth
ac00: 69 6e 67 20 65 6c 73 65 20 63 61 6e 20 67 6f 20  ing else can go 
ac10: 77 72 6f 6e 67 2c 20 73 6f 20 6f 74 68 65 72 77  wrong, so otherw
ac20: 69 73 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 4f 4b  ise.** SQLITE_OK
ac30: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
ac40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61  .int sqlite3_tra
ac50: 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 73  nsfer_bindings(s
ac60: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 46 72  qlite3_stmt *pFr
ac70: 6f 6d 53 74 6d 74 2c 20 73 71 6c 69 74 65 33 5f  omStmt, sqlite3_
ac80: 73 74 6d 74 20 2a 70 54 6f 53 74 6d 74 29 7b 0a  stmt *pToStmt){.
ac90: 20 20 56 64 62 65 20 2a 70 46 72 6f 6d 20 3d 20    Vdbe *pFrom = 
aca0: 28 56 64 62 65 2a 29 70 46 72 6f 6d 53 74 6d 74  (Vdbe*)pFromStmt
acb0: 3b 0a 20 20 56 64 62 65 20 2a 70 54 6f 20 3d 20  ;.  Vdbe *pTo = 
acc0: 28 56 64 62 65 2a 29 70 54 6f 53 74 6d 74 3b 0a  (Vdbe*)pToStmt;.
acd0: 20 20 69 66 28 20 70 46 72 6f 6d 2d 3e 6e 56 61    if( pFrom->nVa
ace0: 72 21 3d 70 54 6f 2d 3e 6e 56 61 72 20 29 7b 0a  r!=pTo->nVar ){.
acf0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
ad00: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  E_ERROR;.  }.  i
ad10: 66 28 20 70 54 6f 2d 3e 69 73 50 72 65 70 61 72  f( pTo->isPrepar
ad20: 65 56 32 20 26 26 20 70 54 6f 2d 3e 65 78 70 6d  eV2 && pTo->expm
ad30: 61 73 6b 20 29 7b 0a 20 20 20 20 70 54 6f 2d 3e  ask ){.    pTo->
ad40: 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
ad50: 0a 20 20 69 66 28 20 70 46 72 6f 6d 2d 3e 69 73  .  if( pFrom->is
ad60: 50 72 65 70 61 72 65 56 32 20 26 26 20 70 46 72  PrepareV2 && pFr
ad70: 6f 6d 2d 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20  om->expmask ){. 
ad80: 20 20 20 70 46 72 6f 6d 2d 3e 65 78 70 69 72 65     pFrom->expire
ad90: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  d = 1;.  }.  ret
ada0: 75 72 6e 20 73 71 6c 69 74 65 33 54 72 61 6e 73  urn sqlite3Trans
adb0: 66 65 72 42 69 6e 64 69 6e 67 73 28 70 46 72 6f  ferBindings(pFro
adc0: 6d 53 74 6d 74 2c 20 70 54 6f 53 74 6d 74 29 3b  mStmt, pToStmt);
add0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
ade0: 20 52 65 74 75 72 6e 20 74 68 65 20 73 71 6c 69   Return the sqli
adf0: 74 65 33 2a 20 64 61 74 61 62 61 73 65 20 68 61  te3* database ha
ae00: 6e 64 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  ndle to which th
ae10: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
ae20: 6d 65 6e 74 20 67 69 76 65 6e 0a 2a 2a 20 69 6e  ment given.** in
ae30: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 62 65   the argument be
ae40: 6c 6f 6e 67 73 2e 20 20 54 68 69 73 20 69 73 20  longs.  This is 
ae50: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
ae60: 65 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 61  e handle that wa
ae70: 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
ae80: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
ae90: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
aea0: 20 74 68 61 74 20 77 61 73 20 75 73 65 64 20 74   that was used t
aeb0: 6f 20 63 72 65 61 74 65 0a 2a 2a 20 74 68 65 20  o create.** the 
aec0: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68 65  statement in the
aed0: 20 66 69 72 73 74 20 70 6c 61 63 65 2e 0a 2a 2f   first place..*/
aee0: 0a 73 71 6c 69 74 65 33 20 2a 73 71 6c 69 74 65  .sqlite3 *sqlite
aef0: 33 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69  3_db_handle(sqli
af00: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
af10: 7b 0a 20 20 72 65 74 75 72 6e 20 70 53 74 6d 74  {.  return pStmt
af20: 20 3f 20 28 28 56 64 62 65 2a 29 70 53 74 6d 74   ? ((Vdbe*)pStmt
af30: 29 2d 3e 64 62 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a  )->db : 0;.}../*
af40: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
af50: 69 66 20 74 68 65 20 70 72 65 70 61 72 65 64 20  if the prepared 
af60: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 67 75 61  statement is gua
af70: 72 61 6e 74 65 65 64 20 74 6f 20 6e 6f 74 20 6d  ranteed to not m
af80: 6f 64 69 66 79 20 74 68 65 0a 2a 2a 20 64 61 74  odify the.** dat
af90: 61 62 61 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  abase..*/.int sq
afa0: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
afb0: 6e 6c 79 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  nly(sqlite3_stmt
afc0: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72 65 74 75   *pStmt){.  retu
afd0: 72 6e 20 70 53 74 6d 74 20 3f 20 28 28 56 64 62  rn pStmt ? ((Vdb
afe0: 65 2a 29 70 53 74 6d 74 29 2d 3e 72 65 61 64 4f  e*)pStmt)->readO
aff0: 6e 6c 79 20 3a 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a  nly : 1;.}../*.*
b000: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
b010: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
b020: 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 20 6e 65  atement is in ne
b030: 65 64 20 6f 66 20 62 65 69 6e 67 20 72 65 73 65  ed of being rese
b040: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
b050: 33 5f 73 74 6d 74 5f 62 75 73 79 28 73 71 6c 69  3_stmt_busy(sqli
b060: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
b070: 7b 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56  {.  Vdbe *v = (V
b080: 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 72 65  dbe*)pStmt;.  re
b090: 74 75 72 6e 20 76 21 3d 30 20 26 26 20 76 2d 3e  turn v!=0 && v->
b0a0: 70 63 3e 3d 30 20 26 26 20 76 2d 3e 6d 61 67 69  pc>=0 && v->magi
b0b0: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
b0c0: 4e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  N;.}../*.** Retu
b0d0: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rn a pointer to 
b0e0: 74 68 65 20 6e 65 78 74 20 70 72 65 70 61 72 65  the next prepare
b0f0: 64 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74 65  d statement afte
b100: 72 20 70 53 74 6d 74 20 61 73 73 6f 63 69 61 74  r pStmt associat
b110: 65 64 0a 2a 2a 20 77 69 74 68 20 64 61 74 61 62  ed.** with datab
b120: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
b130: 44 62 2e 20 20 49 66 20 70 53 74 6d 74 20 69 73  Db.  If pStmt is
b140: 20 4e 55 4c 4c 2c 20 72 65 74 75 72 6e 20 74 68   NULL, return th
b150: 65 20 66 69 72 73 74 0a 2a 2a 20 70 72 65 70 61  e first.** prepa
b160: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  red statement fo
b170: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
b180: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 52 65 74 75  onnection.  Retu
b190: 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65  rn NULL if there
b1a0: 0a 2a 2a 20 61 72 65 20 6e 6f 20 6d 6f 72 65 2e  .** are no more.
b1b0: 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f 73 74 6d 74  .*/.sqlite3_stmt
b1c0: 20 2a 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73   *sqlite3_next_s
b1d0: 74 6d 74 28 73 71 6c 69 74 65 33 20 2a 70 44 62  tmt(sqlite3 *pDb
b1e0: 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
b1f0: 70 53 74 6d 74 29 7b 0a 20 20 73 71 6c 69 74 65  pStmt){.  sqlite
b200: 33 5f 73 74 6d 74 20 2a 70 4e 65 78 74 3b 0a 23  3_stmt *pNext;.#
b210: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
b220: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
b230: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
b240: 74 79 43 68 65 63 6b 4f 6b 28 70 44 62 29 20 29  tyCheckOk(pDb) )
b250: 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49  {.    (void)SQLI
b260: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
b270: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
b280: 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  }.#endif.  sqlit
b290: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
b2a0: 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66  Db->mutex);.  if
b2b0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
b2c0: 20 20 70 4e 65 78 74 20 3d 20 28 73 71 6c 69 74    pNext = (sqlit
b2d0: 65 33 5f 73 74 6d 74 2a 29 70 44 62 2d 3e 70 56  e3_stmt*)pDb->pV
b2e0: 64 62 65 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  dbe;.  }else{.  
b2f0: 20 20 70 4e 65 78 74 20 3d 20 28 73 71 6c 69 74    pNext = (sqlit
b300: 65 33 5f 73 74 6d 74 2a 29 28 28 56 64 62 65 2a  e3_stmt*)((Vdbe*
b310: 29 70 53 74 6d 74 29 2d 3e 70 4e 65 78 74 3b 0a  )pStmt)->pNext;.
b320: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
b330: 74 65 78 5f 6c 65 61 76 65 28 70 44 62 2d 3e 6d  tex_leave(pDb->m
b340: 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
b350: 70 4e 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  pNext;.}../*.** 
b360: 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c 75 65  Return the value
b370: 20 6f 66 20 61 20 73 74 61 74 75 73 20 63 6f 75   of a status cou
b380: 6e 74 65 72 20 66 6f 72 20 61 20 70 72 65 70 61  nter for a prepa
b390: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2f  red statement.*/
b3a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 6d  .int sqlite3_stm
b3b0: 74 5f 73 74 61 74 75 73 28 73 71 6c 69 74 65 33  t_status(sqlite3
b3c0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
b3d0: 74 20 6f 70 2c 20 69 6e 74 20 72 65 73 65 74 46  t op, int resetF
b3e0: 6c 61 67 29 7b 0a 20 20 56 64 62 65 20 2a 70 56  lag){.  Vdbe *pV
b3f0: 64 62 65 20 3d 20 28 56 64 62 65 2a 29 70 53 74  dbe = (Vdbe*)pSt
b400: 6d 74 3b 0a 20 20 75 33 32 20 76 3b 0a 23 69 66  mt;.  u32 v;.#if
b410: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
b420: 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
b430: 28 20 21 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  ( !pStmt ){.    
b440: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
b450: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
b460: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
b470: 69 66 0a 20 20 76 20 3d 20 70 56 64 62 65 2d 3e  if.  v = pVdbe->
b480: 61 43 6f 75 6e 74 65 72 5b 6f 70 5d 3b 0a 20 20  aCounter[op];.  
b490: 69 66 28 20 72 65 73 65 74 46 6c 61 67 20 29 20  if( resetFlag ) 
b4a0: 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74 65 72 5b  pVdbe->aCounter[
b4b0: 6f 70 5d 20 3d 20 30 3b 0a 20 20 72 65 74 75 72  op] = 0;.  retur
b4c0: 6e 20 28 69 6e 74 29 76 3b 0a 7d 0a 0a 23 69 66  n (int)v;.}..#if
b4d0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
b4e0: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
b4f0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
b500: 61 6e 64 20 70 6f 70 75 6c 61 74 65 20 61 6e 20  and populate an 
b510: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 73  UnpackedRecord s
b520: 74 72 75 63 74 75 72 65 20 62 61 73 65 64 20 6f  tructure based o
b530: 6e 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  n the serialized
b540: 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 6e 4b  .** record in nK
b550: 65 79 2f 70 4b 65 79 2e 20 52 65 74 75 72 6e 20  ey/pKey. Return 
b560: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
b570: 20 6e 65 77 20 55 6e 70 61 63 6b 65 64 52 65 63   new UnpackedRec
b580: 6f 72 64 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ord structure.**
b590: 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   if successful, 
b5a0: 6f 72 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65  or a NULL pointe
b5b0: 72 20 69 66 20 61 6e 20 4f 4f 4d 20 65 72 72 6f  r if an OOM erro
b5c0: 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
b5d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 55 6e 70 61  ..*/.static Unpa
b5e0: 63 6b 65 64 52 65 63 6f 72 64 20 2a 76 64 62 65  ckedRecord *vdbe
b5f0: 55 6e 70 61 63 6b 52 65 63 6f 72 64 28 0a 20 20  UnpackRecord(.  
b600: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
b610: 6f 2c 20 0a 20 20 69 6e 74 20 6e 4b 65 79 2c 20  o, .  int nKey, 
b620: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
b630: 4b 65 79 0a 29 7b 0a 20 20 63 68 61 72 20 2a 64  Key.){.  char *d
b640: 75 6d 6d 79 3b 20 20 20 20 20 20 20 20 20 20 20  ummy;           
b650: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 75 6d 6d           /* Dumm
b660: 79 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 41  y argument for A
b670: 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
b680: 72 64 28 29 20 2a 2f 0a 20 20 55 6e 70 61 63 6b  rd() */.  Unpack
b690: 65 64 52 65 63 6f 72 64 20 2a 70 52 65 74 3b 20  edRecord *pRet; 
b6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
b6b0: 75 72 6e 20 76 61 6c 75 65 20 2a 2f 0a 0a 20 20  urn value */..  
b6c0: 70 52 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64  pRet = sqlite3Vd
b6d0: 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
b6e0: 65 63 6f 72 64 28 70 4b 65 79 49 6e 66 6f 2c 20  ecord(pKeyInfo, 
b6f0: 30 2c 20 30 2c 20 26 64 75 6d 6d 79 29 3b 0a 20  0, 0, &dummy);. 
b700: 20 69 66 28 20 70 52 65 74 20 29 7b 0a 20 20 20   if( pRet ){.   
b710: 20 6d 65 6d 73 65 74 28 70 52 65 74 2d 3e 61 4d   memset(pRet->aM
b720: 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 4d 65  em, 0, sizeof(Me
b730: 6d 29 2a 28 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  m)*(pKeyInfo->nF
b740: 69 65 6c 64 2b 31 29 29 3b 0a 20 20 20 20 73 71  ield+1));.    sq
b750: 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
b760: 6e 70 61 63 6b 28 70 4b 65 79 49 6e 66 6f 2c 20  npack(pKeyInfo, 
b770: 6e 4b 65 79 2c 20 70 4b 65 79 2c 20 70 52 65 74  nKey, pKey, pRet
b780: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
b790: 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  pRet;.}../*.** T
b7a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
b7b0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
b7c0: 69 6e 20 61 20 70 72 65 2d 75 70 64 61 74 65 20  in a pre-update 
b7d0: 63 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 72  callback to retr
b7e0: 69 65 76 65 0a 2a 2a 20 61 20 66 69 65 6c 64 20  ieve.** a field 
b7f0: 6f 66 20 74 68 65 20 72 6f 77 20 63 75 72 72 65  of the row curre
b800: 6e 74 6c 79 20 62 65 69 6e 67 20 75 70 64 61 74  ntly being updat
b810: 65 64 20 6f 72 20 64 65 6c 65 74 65 64 2e 0a 2a  ed or deleted..*
b820: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72  /.int sqlite3_pr
b830: 65 75 70 64 61 74 65 5f 6f 6c 64 28 73 71 6c 69  eupdate_old(sqli
b840: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 69 49 64  te3 *db, int iId
b850: 78 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  x, sqlite3_value
b860: 20 2a 2a 70 70 56 61 6c 75 65 29 7b 0a 20 20 50   **ppValue){.  P
b870: 72 65 55 70 64 61 74 65 20 2a 70 20 3d 20 64 62  reUpdate *p = db
b880: 2d 3e 70 50 72 65 55 70 64 61 74 65 3b 0a 20 20  ->pPreUpdate;.  
b890: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
b8a0: 4f 4b 3b 0a 0a 20 20 2f 2a 20 54 65 73 74 20 74  OK;..  /* Test t
b8b0: 68 61 74 20 74 68 69 73 20 63 61 6c 6c 20 69 73  hat this call is
b8c0: 20 62 65 69 6e 67 20 6d 61 64 65 20 66 72 6f 6d   being made from
b8d0: 20 77 69 74 68 69 6e 20 61 6e 20 53 51 4c 49 54   within an SQLIT
b8e0: 45 5f 44 45 4c 45 54 45 20 6f 72 0a 20 20 2a 2a  E_DELETE or.  **
b8f0: 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 70   SQLITE_UPDATE p
b900: 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61  re-update callba
b910: 63 6b 2c 20 61 6e 64 20 74 68 61 74 20 69 49 64  ck, and that iId
b920: 78 20 69 73 20 77 69 74 68 69 6e 20 72 61 6e 67  x is within rang
b930: 65 2e 20 2a 2f 0a 20 20 69 66 28 20 21 70 20 7c  e. */.  if( !p |
b940: 7c 20 70 2d 3e 6f 70 3d 3d 53 51 4c 49 54 45 5f  | p->op==SQLITE_
b950: 49 4e 53 45 52 54 20 29 7b 0a 20 20 20 20 72 63  INSERT ){.    rc
b960: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
b970: 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
b980: 70 72 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75  preupdate_old_ou
b990: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 49 64  t;.  }.  if( iId
b9a0: 78 3e 3d 70 2d 3e 70 43 73 72 2d 3e 6e 46 69 65  x>=p->pCsr->nFie
b9b0: 6c 64 20 7c 7c 20 69 49 64 78 3c 30 20 29 7b 0a  ld || iIdx<0 ){.
b9c0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
b9d0: 52 41 4e 47 45 3b 0a 20 20 20 20 67 6f 74 6f 20  RANGE;.    goto 
b9e0: 70 72 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75  preupdate_old_ou
b9f0: 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  t;.  }..  /* If 
ba00: 74 68 65 20 6f 6c 64 2e 2a 20 72 65 63 6f 72 64  the old.* record
ba10: 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65   has not yet bee
ba20: 6e 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 6d 65  n loaded into me
ba30: 6d 6f 72 79 2c 20 64 6f 20 73 6f 20 6e 6f 77 2e  mory, do so now.
ba40: 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 70 55 6e   */.  if( p->pUn
ba50: 70 61 63 6b 65 64 3d 3d 30 20 29 7b 0a 20 20 20  packed==0 ){.   
ba60: 20 75 33 32 20 6e 52 65 63 3b 0a 20 20 20 20 75   u32 nRec;.    u
ba70: 38 20 2a 61 52 65 63 3b 0a 0a 20 20 20 20 72 63  8 *aRec;..    rc
ba80: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
ba90: 61 74 61 53 69 7a 65 28 70 2d 3e 70 43 73 72 2d  ataSize(p->pCsr-
baa0: 3e 70 43 75 72 73 6f 72 2c 20 26 6e 52 65 63 29  >pCursor, &nRec)
bab0: 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
bac0: 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 70  LITE_OK ) goto p
bad0: 72 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75 74  reupdate_old_out
bae0: 3b 0a 20 20 20 20 61 52 65 63 20 3d 20 73 71 6c  ;.    aRec = sql
baf0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
bb00: 64 62 2c 20 6e 52 65 63 29 3b 0a 20 20 20 20 69  db, nRec);.    i
bb10: 66 28 20 21 61 52 65 63 20 29 20 67 6f 74 6f 20  f( !aRec ) goto 
bb20: 70 72 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75  preupdate_old_ou
bb30: 74 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  t;.    rc = sqli
bb40: 74 65 33 42 74 72 65 65 44 61 74 61 28 70 2d 3e  te3BtreeData(p->
bb50: 70 43 73 72 2d 3e 70 43 75 72 73 6f 72 2c 20 30  pCsr->pCursor, 0
bb60: 2c 20 6e 52 65 63 2c 20 61 52 65 63 29 3b 0a 20  , nRec, aRec);. 
bb70: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
bb80: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 70 2d  E_OK ){.      p-
bb90: 3e 70 55 6e 70 61 63 6b 65 64 20 3d 20 76 64 62  >pUnpacked = vdb
bba0: 65 55 6e 70 61 63 6b 52 65 63 6f 72 64 28 26 70  eUnpackRecord(&p
bbb0: 2d 3e 6b 65 79 69 6e 66 6f 2c 20 6e 52 65 63 2c  ->keyinfo, nRec,
bbc0: 20 61 52 65 63 29 3b 0a 20 20 20 20 20 20 69 66   aRec);.      if
bbd0: 28 20 21 70 2d 3e 70 55 6e 70 61 63 6b 65 64 20  ( !p->pUnpacked 
bbe0: 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f  ) rc = SQLITE_NO
bbf0: 4d 45 4d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  MEM;.    }.    i
bc00: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
bc10: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
bc20: 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 65 63  3DbFree(db, aRec
bc30: 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 70 72  );.      goto pr
bc40: 65 75 70 64 61 74 65 5f 6f 6c 64 5f 6f 75 74 3b  eupdate_old_out;
bc50: 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 61 52  .    }.    p->aR
bc60: 65 63 6f 72 64 20 3d 20 61 52 65 63 3b 0a 20 20  ecord = aRec;.  
bc70: 7d 0a 0a 20 20 69 66 28 20 69 49 64 78 3e 3d 70  }..  if( iIdx>=p
bc80: 2d 3e 70 55 6e 70 61 63 6b 65 64 2d 3e 6e 46 69  ->pUnpacked->nFi
bc90: 65 6c 64 20 29 7b 0a 20 20 20 20 2a 70 70 56 61  eld ){.    *ppVa
bca0: 6c 75 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 76  lue = (sqlite3_v
bcb0: 61 6c 75 65 20 2a 29 63 6f 6c 75 6d 6e 4e 75 6c  alue *)columnNul
bcc0: 6c 56 61 6c 75 65 28 29 3b 0a 20 20 7d 65 6c 73  lValue();.  }els
bcd0: 65 7b 0a 20 20 20 20 2a 70 70 56 61 6c 75 65 20  e{.    *ppValue 
bce0: 3d 20 26 70 2d 3e 70 55 6e 70 61 63 6b 65 64 2d  = &p->pUnpacked-
bcf0: 3e 61 4d 65 6d 5b 69 49 64 78 5d 3b 0a 20 20 20  >aMem[iIdx];.   
bd00: 20 69 66 28 20 69 49 64 78 3d 3d 70 2d 3e 69 50   if( iIdx==p->iP
bd10: 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Key ){.      sql
bd20: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
bd30: 74 36 34 28 2a 70 70 56 61 6c 75 65 2c 20 70 2d  t64(*ppValue, p-
bd40: 3e 69 4b 65 79 31 29 3b 0a 20 20 20 20 7d 0a 20  >iKey1);.    }. 
bd50: 20 7d 0a 0a 20 70 72 65 75 70 64 61 74 65 5f 6f   }.. preupdate_o
bd60: 6c 64 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ld_out:.  sqlite
bd70: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a  3Error(db, rc);.
bd80: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
bd90: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
bda0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
bdb0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
bdc0: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 0a 23 69  DATE_HOOK */..#i
bdd0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
bde0: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
bdf0: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  K./*.** This fun
be00: 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20  ction is called 
be10: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 70 72  from within a pr
be20: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
be30: 6b 20 74 6f 20 72 65 74 72 69 65 76 65 0a 2a 2a  k to retrieve.**
be40: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
be50: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f  olumns in the ro
be60: 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2c  w being updated,
be70: 20 64 65 6c 65 74 65 64 20 6f 72 20 69 6e 73 65   deleted or inse
be80: 72 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  rted..*/.int sql
be90: 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 63  ite3_preupdate_c
bea0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
beb0: 29 7b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  ){.  PreUpdate *
bec0: 70 20 3d 20 64 62 2d 3e 70 50 72 65 55 70 64 61  p = db->pPreUpda
bed0: 74 65 3b 0a 20 20 72 65 74 75 72 6e 20 28 70 20  te;.  return (p 
bee0: 3f 20 70 2d 3e 6b 65 79 69 6e 66 6f 2e 6e 46 69  ? p->keyinfo.nFi
bef0: 65 6c 64 20 3a 20 30 29 3b 0a 7d 0a 23 65 6e 64  eld : 0);.}.#end
bf00: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
bf10: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
bf20: 4f 4b 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51  OK */..#ifdef SQ
bf30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
bf40: 50 44 41 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a 2a 2a  PDATE_HOOK./*.**
bf50: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
bf60: 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65  s designed to be
bf70: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
bf80: 68 69 6e 20 61 20 70 72 65 2d 75 70 64 61 74 65  hin a pre-update
bf90: 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 6e 6c   callback.** onl
bfa0: 79 2e 20 49 74 20 72 65 74 75 72 6e 73 20 7a 65  y. It returns ze
bfb0: 72 6f 20 69 66 20 74 68 65 20 63 68 61 6e 67 65  ro if the change
bfc0: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
bfd0: 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 6d 61   callback was ma
bfe0: 64 65 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  de.** immediatel
bff0: 79 20 62 79 20 61 20 75 73 65 72 20 53 51 4c 20  y by a user SQL 
c000: 73 74 61 74 65 6d 65 6e 74 2e 20 4f 72 2c 20 69  statement. Or, i
c010: 66 20 74 68 65 20 63 68 61 6e 67 65 20 77 61 73  f the change was
c020: 20 6d 61 64 65 20 62 79 20 61 0a 2a 2a 20 74 72   made by a.** tr
c030: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 69  igger program, i
c040: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  t returns the nu
c050: 6d 62 65 72 20 6f 66 20 74 72 69 67 67 65 72 20  mber of trigger 
c060: 70 72 6f 67 72 61 6d 73 20 63 75 72 72 65 6e 74  programs current
c070: 6c 79 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 74 61  ly.** on the sta
c080: 63 6b 20 28 31 20 66 6f 72 20 61 20 74 6f 70 2d  ck (1 for a top-
c090: 6c 65 76 65 6c 20 74 72 69 67 67 65 72 2c 20 32  level trigger, 2
c0a0: 20 66 6f 72 20 61 20 74 72 69 67 67 65 72 20 66   for a trigger f
c0b0: 69 72 65 64 20 62 79 20 61 20 0a 2a 2a 20 74 6f  ired by a .** to
c0c0: 70 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 20  p-level trigger 
c0d0: 65 74 63 2e 29 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72  etc.)..**.** For
c0e0: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
c0f0: 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61   the previous pa
c100: 72 61 67 72 61 70 68 2c 20 61 20 66 6f 72 65 69  ragraph, a forei
c110: 67 6e 20 6b 65 79 20 43 41 53 43 41 44 45 2c 20  gn key CASCADE, 
c120: 53 45 54 20 4e 55 4c 4c 0a 2a 2a 20 6f 72 20 53  SET NULL.** or S
c130: 45 54 20 44 45 46 41 55 4c 54 20 61 63 74 69 6f  ET DEFAULT actio
c140: 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  n is considered 
c150: 61 20 74 72 69 67 67 65 72 2e 0a 2a 2f 0a 69 6e  a trigger..*/.in
c160: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64  t sqlite3_preupd
c170: 61 74 65 5f 64 65 70 74 68 28 73 71 6c 69 74 65  ate_depth(sqlite
c180: 33 20 2a 64 62 29 7b 0a 20 20 50 72 65 55 70 64  3 *db){.  PreUpd
c190: 61 74 65 20 2a 70 20 3d 20 64 62 2d 3e 70 50 72  ate *p = db->pPr
c1a0: 65 55 70 64 61 74 65 3b 0a 20 20 72 65 74 75 72  eUpdate;.  retur
c1b0: 6e 20 28 70 20 3f 20 70 2d 3e 76 2d 3e 6e 46 72  n (p ? p->v->nFr
c1c0: 61 6d 65 20 3a 20 30 29 3b 0a 7d 0a 23 65 6e 64  ame : 0);.}.#end
c1d0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
c1e0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
c1f0: 4f 4b 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51  OK */..#ifdef SQ
c200: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
c210: 50 44 41 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a 2a 2a  PDATE_HOOK./*.**
c220: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
c230: 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
c240: 74 68 69 6e 20 61 20 70 72 65 2d 75 70 64 61 74  thin a pre-updat
c250: 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65  e callback to re
c260: 74 72 69 65 76 65 0a 2a 2a 20 61 20 66 69 65 6c  trieve.** a fiel
c270: 64 20 6f 66 20 74 68 65 20 72 6f 77 20 63 75 72  d of the row cur
c280: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 75 70 64  rently being upd
c290: 61 74 65 64 20 6f 72 20 69 6e 73 65 72 74 65 64  ated or inserted
c2a0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
c2b0: 5f 70 72 65 75 70 64 61 74 65 5f 6e 65 77 28 73  _preupdate_new(s
c2c0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
c2d0: 69 49 64 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  iIdx, sqlite3_va
c2e0: 6c 75 65 20 2a 2a 70 70 56 61 6c 75 65 29 7b 0a  lue **ppValue){.
c2f0: 20 20 50 72 65 55 70 64 61 74 65 20 2a 70 20 3d    PreUpdate *p =
c300: 20 64 62 2d 3e 70 50 72 65 55 70 64 61 74 65 3b   db->pPreUpdate;
c310: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
c320: 54 45 5f 4f 4b 3b 0a 20 20 4d 65 6d 20 2a 70 4d  TE_OK;.  Mem *pM
c330: 65 6d 3b 0a 0a 20 20 69 66 28 20 21 70 20 7c 7c  em;..  if( !p ||
c340: 20 70 2d 3e 6f 70 3d 3d 53 51 4c 49 54 45 5f 44   p->op==SQLITE_D
c350: 45 4c 45 54 45 20 29 7b 0a 20 20 20 20 72 63 20  ELETE ){.    rc 
c360: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  = SQLITE_MISUSE_
c370: 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 70  BKPT;.    goto p
c380: 72 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74  reupdate_new_out
c390: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 49 64 78  ;.  }.  if( iIdx
c3a0: 3e 3d 70 2d 3e 70 43 73 72 2d 3e 6e 46 69 65 6c  >=p->pCsr->nFiel
c3b0: 64 20 7c 7c 20 69 49 64 78 3c 30 20 29 7b 0a 20  d || iIdx<0 ){. 
c3c0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
c3d0: 41 4e 47 45 3b 0a 20 20 20 20 67 6f 74 6f 20 70  ANGE;.    goto p
c3e0: 72 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74  reupdate_new_out
c3f0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
c400: 6f 70 3d 3d 53 51 4c 49 54 45 5f 49 4e 53 45 52  op==SQLITE_INSER
c410: 54 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  T ){.    /* For 
c420: 61 6e 20 49 4e 53 45 52 54 2c 20 6d 65 6d 6f 72  an INSERT, memor
c430: 79 20 63 65 6c 6c 20 70 2d 3e 69 4e 65 77 52 65  y cell p->iNewRe
c440: 67 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73  g contains the s
c450: 65 72 69 61 6c 69 7a 65 64 20 72 65 63 6f 72 64  erialized record
c460: 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 69 73 20  .    ** that is 
c470: 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 2e 20  being inserted. 
c480: 44 65 73 65 72 69 61 6c 69 7a 65 20 69 74 2e 20  Deserialize it. 
c490: 2a 2f 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  */.    UnpackedR
c4a0: 65 63 6f 72 64 20 2a 70 55 6e 70 61 63 6b 20 3d  ecord *pUnpack =
c4b0: 20 70 2d 3e 70 4e 65 77 55 6e 70 61 63 6b 65 64   p->pNewUnpacked
c4c0: 3b 0a 20 20 20 20 69 66 28 20 21 70 55 6e 70 61  ;.    if( !pUnpa
c4d0: 63 6b 20 29 7b 0a 20 20 20 20 20 20 4d 65 6d 20  ck ){.      Mem 
c4e0: 2a 70 44 61 74 61 20 3d 20 26 70 2d 3e 76 2d 3e  *pData = &p->v->
c4f0: 61 4d 65 6d 5b 70 2d 3e 69 4e 65 77 52 65 67 5d  aMem[p->iNewReg]
c500: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
c510: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
c520: 64 42 6c 6f 62 28 70 44 61 74 61 29 3b 0a 20 20  dBlob(pData);.  
c530: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
c540: 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 70 72 65  TE_OK ) goto pre
c550: 75 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74 3b 0a  update_new_out;.
c560: 20 20 20 20 20 20 70 55 6e 70 61 63 6b 20 3d 20        pUnpack = 
c570: 76 64 62 65 55 6e 70 61 63 6b 52 65 63 6f 72 64  vdbeUnpackRecord
c580: 28 26 70 2d 3e 6b 65 79 69 6e 66 6f 2c 20 70 44  (&p->keyinfo, pD
c590: 61 74 61 2d 3e 6e 2c 20 70 44 61 74 61 2d 3e 7a  ata->n, pData->z
c5a0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 55  );.      if( !pU
c5b0: 6e 70 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 20  npack ){.       
c5c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
c5d0: 45 4d 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  EM;.        goto
c5e0: 20 70 72 65 75 70 64 61 74 65 5f 6e 65 77 5f 6f   preupdate_new_o
c5f0: 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
c600: 20 20 70 2d 3e 70 4e 65 77 55 6e 70 61 63 6b 65    p->pNewUnpacke
c610: 64 20 3d 20 70 55 6e 70 61 63 6b 3b 0a 20 20 20  d = pUnpack;.   
c620: 20 7d 0a 20 20 20 20 69 66 28 20 69 49 64 78 3e   }.    if( iIdx>
c630: 3d 70 55 6e 70 61 63 6b 2d 3e 6e 46 69 65 6c 64  =pUnpack->nField
c640: 20 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 20 3d   ){.      pMem =
c650: 20 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20   (sqlite3_value 
c660: 2a 29 63 6f 6c 75 6d 6e 4e 75 6c 6c 56 61 6c 75  *)columnNullValu
c670: 65 28 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  e();.    }else{.
c680: 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 55        pMem = &pU
c690: 6e 70 61 63 6b 2d 3e 61 4d 65 6d 5b 69 49 64 78  npack->aMem[iIdx
c6a0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 69 49 64  ];.      if( iId
c6b0: 78 3d 3d 70 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  x==p->iPKey ){. 
c6c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c6d0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
c6e0: 65 6d 2c 20 70 2d 3e 69 4b 65 79 32 29 3b 0a 20  em, p->iKey2);. 
c6f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
c700: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  else{.    /* For
c710: 20 61 6e 20 55 50 44 41 54 45 2c 20 6d 65 6d 6f   an UPDATE, memo
c720: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 69 4e 65 77  ry cell (p->iNew
c730: 52 65 67 2b 31 2b 69 49 64 78 29 20 63 6f 6e 74  Reg+1+iIdx) cont
c740: 61 69 6e 73 20 74 68 65 20 72 65 71 75 69 72 65  ains the require
c750: 64 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 2e 20  d.    ** value. 
c760: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74  Make a copy of t
c770: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73  he cell contents
c780: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 70 6f   and return a po
c790: 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 20 20 20  inter to it..   
c7a0: 20 2a 2a 20 49 74 20 69 73 20 6e 6f 74 20 73 61   ** It is not sa
c7b0: 66 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 70  fe to return a p
c7c0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65  ointer to the me
c7d0: 6d 6f 72 79 20 63 65 6c 6c 20 69 74 73 65 6c 66  mory cell itself
c7e0: 20 61 73 20 74 68 65 0a 20 20 20 20 2a 2a 20 63   as the.    ** c
c7f0: 61 6c 6c 65 72 20 6d 61 79 20 6d 6f 64 69 66 79  aller may modify
c800: 20 74 68 65 20 76 61 6c 75 65 20 74 65 78 74 20   the value text 
c810: 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 20 20 2a 2f  encoding..    */
c820: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
c830: 6f 70 3d 3d 53 51 4c 49 54 45 5f 55 50 44 41 54  op==SQLITE_UPDAT
c840: 45 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 2d  E );.    if( !p-
c850: 3e 61 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 70  >aNew ){.      p
c860: 2d 3e 61 4e 65 77 20 3d 20 28 4d 65 6d 20 2a 29  ->aNew = (Mem *)
c870: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
c880: 65 72 6f 28 64 62 2c 20 73 69 7a 65 6f 66 28 4d  ero(db, sizeof(M
c890: 65 6d 29 20 2a 20 70 2d 3e 70 43 73 72 2d 3e 6e  em) * p->pCsr->n
c8a0: 46 69 65 6c 64 29 3b 0a 20 20 20 20 20 20 69 66  Field);.      if
c8b0: 28 20 21 70 2d 3e 61 4e 65 77 20 29 7b 0a 20 20  ( !p->aNew ){.  
c8c0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
c8d0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 20  E_NOMEM;.       
c8e0: 20 67 6f 74 6f 20 70 72 65 75 70 64 61 74 65 5f   goto preupdate_
c8f0: 6e 65 77 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  new_out;.      }
c900: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
c910: 74 28 20 69 49 64 78 3e 3d 30 20 26 26 20 69 49  t( iIdx>=0 && iI
c920: 64 78 3c 70 2d 3e 70 43 73 72 2d 3e 6e 46 69 65  dx<p->pCsr->nFie
c930: 6c 64 20 29 3b 0a 20 20 20 20 70 4d 65 6d 20 3d  ld );.    pMem =
c940: 20 26 70 2d 3e 61 4e 65 77 5b 69 49 64 78 5d 3b   &p->aNew[iIdx];
c950: 0a 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  .    if( pMem->f
c960: 6c 61 67 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20  lags==0 ){.     
c970: 20 69 66 28 20 69 49 64 78 3d 3d 70 2d 3e 69 50   if( iIdx==p->iP
c980: 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73  Key ){.        s
c990: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c9a0: 49 6e 74 36 34 28 70 4d 65 6d 2c 20 70 2d 3e 69  Int64(pMem, p->i
c9b0: 4b 65 79 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c  Key2);.      }el
c9c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  se{.        rc =
c9d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
c9e0: 6f 70 79 28 70 4d 65 6d 2c 20 26 70 2d 3e 76 2d  opy(pMem, &p->v-
c9f0: 3e 61 4d 65 6d 5b 70 2d 3e 69 4e 65 77 52 65 67  >aMem[p->iNewReg
ca00: 2b 31 2b 69 49 64 78 5d 29 3b 0a 20 20 20 20 20  +1+iIdx]);.     
ca10: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
ca20: 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 70 72 65 75  E_OK ) goto preu
ca30: 70 64 61 74 65 5f 6e 65 77 5f 6f 75 74 3b 0a 20  pdate_new_out;. 
ca40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
ca50: 0a 20 20 2a 70 70 56 61 6c 75 65 20 3d 20 70 4d  .  *ppValue = pM
ca60: 65 6d 3b 0a 0a 20 70 72 65 75 70 64 61 74 65 5f  em;.. preupdate_
ca70: 6e 65 77 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  new_out:.  sqlit
ca80: 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b  e3Error(db, rc);
ca90: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
caa0: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
cab0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
cac0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
cad0: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 0a 23  PDATE_HOOK */..#
cae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
caf0: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
cb00: 54 55 53 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  TUS./*.** Return
cb10: 20 73 74 61 74 75 73 20 64 61 74 61 20 66 6f 72   status data for
cb20: 20 61 20 73 69 6e 67 6c 65 20 6c 6f 6f 70 20 77   a single loop w
cb30: 69 74 68 69 6e 20 71 75 65 72 79 20 70 53 74 6d  ithin query pStm
cb40: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
cb50: 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75  3_stmt_scanstatu
cb60: 73 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  s(.  sqlite3_stm
cb70: 74 20 2a 70 53 74 6d 74 2c 20 20 20 20 20 20 20  t *pStmt,       
cb80: 20 20 20 20 20 2f 2a 20 50 72 65 70 61 72 65 64       /* Prepared
cb90: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
cba0: 20 71 75 65 72 69 65 64 20 2a 2f 0a 20 20 69 6e   queried */.  in
cbb0: 74 20 69 64 78 2c 20 20 20 20 20 20 20 20 20 20  t idx,          
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cbd0: 20 49 6e 64 65 78 20 6f 66 20 6c 6f 6f 70 20 74   Index of loop t
cbe0: 6f 20 72 65 70 6f 72 74 20 6f 6e 20 2a 2f 0a 20  o report on */. 
cbf0: 20 69 6e 74 20 69 53 63 61 6e 53 74 61 74 75 73   int iScanStatus
cc00: 4f 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  Op,             
cc10: 20 2f 2a 20 57 68 69 63 68 20 6d 65 74 72 69 63   /* Which metric
cc20: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
cc30: 76 6f 69 64 20 2a 70 4f 75 74 20 20 20 20 20 20  void *pOut      
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 2f 2a 20 4f 55 54 3a 20 57 72 69 74 65 20 74 68  /* OUT: Write th
cc60: 65 20 61 6e 73 77 65 72 20 68 65 72 65 20 2a 2f  e answer here */
cc70: 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  .){.  Vdbe *p = 
cc80: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
cc90: 53 63 61 6e 53 74 61 74 75 73 20 2a 70 53 63 61  ScanStatus *pSca
cca0: 6e 3b 0a 20 20 69 66 28 20 69 64 78 3c 30 20 7c  n;.  if( idx<0 |
ccb0: 7c 20 69 64 78 3e 3d 70 2d 3e 6e 53 63 61 6e 20  | idx>=p->nScan 
ccc0: 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 70 53  ) return 1;.  pS
ccd0: 63 61 6e 20 3d 20 26 70 2d 3e 61 53 63 61 6e 5b  can = &p->aScan[
cce0: 69 64 78 5d 3b 0a 20 20 73 77 69 74 63 68 28 20  idx];.  switch( 
ccf0: 69 53 63 61 6e 53 74 61 74 75 73 4f 70 20 29 7b  iScanStatusOp ){
cd00: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
cd10: 5f 53 43 41 4e 53 54 41 54 5f 4e 4c 4f 4f 50 3a  _SCANSTAT_NLOOP:
cd20: 20 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74   {.      *(sqlit
cd30: 65 33 5f 69 6e 74 36 34 2a 29 70 4f 75 74 20 3d  e3_int64*)pOut =
cd40: 20 70 2d 3e 61 6e 45 78 65 63 5b 70 53 63 61 6e   p->anExec[pScan
cd50: 2d 3e 61 64 64 72 4c 6f 6f 70 5d 3b 0a 20 20 20  ->addrLoop];.   
cd60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
cd70: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
cd80: 53 43 41 4e 53 54 41 54 5f 4e 56 49 53 49 54 3a  SCANSTAT_NVISIT:
cd90: 20 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74   {.      *(sqlit
cda0: 65 33 5f 69 6e 74 36 34 2a 29 70 4f 75 74 20 3d  e3_int64*)pOut =
cdb0: 20 70 2d 3e 61 6e 45 78 65 63 5b 70 53 63 61 6e   p->anExec[pScan
cdc0: 2d 3e 61 64 64 72 56 69 73 69 74 5d 3b 0a 20 20  ->addrVisit];.  
cdd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
cde0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
cdf0: 5f 53 43 41 4e 53 54 41 54 5f 45 53 54 3a 20 7b  _SCANSTAT_EST: {
ce00: 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20  .      double r 
ce10: 3d 20 31 2e 30 3b 0a 20 20 20 20 20 20 4c 6f 67  = 1.0;.      Log
ce20: 45 73 74 20 78 20 3d 20 70 53 63 61 6e 2d 3e 6e  Est x = pScan->n
ce30: 45 73 74 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  Est;.      while
ce40: 28 20 78 3c 31 30 30 20 29 7b 0a 20 20 20 20 20  ( x<100 ){.     
ce50: 20 20 20 78 20 2b 3d 20 31 30 3b 0a 20 20 20 20     x += 10;.    
ce60: 20 20 20 20 72 20 2a 3d 20 30 2e 35 3b 0a 20 20      r *= 0.5;.  
ce70: 20 20 20 20 7d 0a 20 20 20 20 20 20 2a 28 64 6f      }.      *(do
ce80: 75 62 6c 65 2a 29 70 4f 75 74 20 3d 20 72 2a 73  uble*)pOut = r*s
ce90: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
cea0: 74 28 78 29 3b 0a 20 20 20 20 20 20 62 72 65 61  t(x);.      brea
ceb0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
cec0: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
ced0: 54 5f 4e 41 4d 45 3a 20 7b 0a 20 20 20 20 20 20  T_NAME: {.      
cee0: 2a 28 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29 70  *(const char**)p
cef0: 4f 75 74 20 3d 20 70 53 63 61 6e 2d 3e 7a 4e 61  Out = pScan->zNa
cf00: 6d 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  me;.      break;
cf10: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
cf20: 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f  SQLITE_SCANSTAT_
cf30: 45 58 50 4c 41 49 4e 3a 20 7b 0a 20 20 20 20 20  EXPLAIN: {.     
cf40: 20 69 66 28 20 70 53 63 61 6e 2d 3e 61 64 64 72   if( pScan->addr
cf50: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
cf60: 20 20 20 2a 28 63 6f 6e 73 74 20 63 68 61 72 2a     *(const char*
cf70: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 4f 70 5b  *)pOut = p->aOp[
cf80: 20 70 53 63 61 6e 2d 3e 61 64 64 72 45 78 70 6c   pScan->addrExpl
cf90: 61 69 6e 20 5d 2e 70 34 2e 7a 3b 0a 20 20 20 20  ain ].p4.z;.    
cfa0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
cfb0: 20 2a 28 63 6f 6e 73 74 20 63 68 61 72 2a 2a 29   *(const char**)
cfc0: 70 4f 75 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  pOut = 0;.      
cfd0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
cfe0: 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51     }.    case SQ
cff0: 4c 49 54 45 5f 53 43 41 4e 53 54 41 54 5f 53 45  LITE_SCANSTAT_SE
d000: 4c 45 43 54 49 44 3a 20 7b 0a 20 20 20 20 20 20  LECTID: {.      
d010: 69 66 28 20 70 53 63 61 6e 2d 3e 61 64 64 72 45  if( pScan->addrE
d020: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
d030: 20 20 2a 28 69 6e 74 2a 29 70 4f 75 74 20 3d 20    *(int*)pOut = 
d040: 70 2d 3e 61 4f 70 5b 20 70 53 63 61 6e 2d 3e 61  p->aOp[ pScan->a
d050: 64 64 72 45 78 70 6c 61 69 6e 20 5d 2e 70 31 3b  ddrExplain ].p1;
d060: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d070: 20 20 20 20 20 20 2a 28 69 6e 74 2a 29 70 4f 75        *(int*)pOu
d080: 74 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 7d 0a  t = -1;.      }.
d090: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d0a0: 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20   }.    default: 
d0b0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  {.      return 1
d0c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
d0d0: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
d0e0: 20 5a 65 72 6f 20 61 6c 6c 20 63 6f 75 6e 74 65   Zero all counte
d0f0: 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
d100: 74 68 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  th the sqlite3_s
d110: 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 29  tmt_scanstatus()
d120: 20 64 61 74 61 2e 0a 2a 2f 0a 76 6f 69 64 20 73   data..*/.void s
d130: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
d140: 73 74 61 74 75 73 5f 72 65 73 65 74 28 73 71 6c  status_reset(sql
d150: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
d160: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
d170: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 6d  Vdbe*)pStmt;.  m
d180: 65 6d 73 65 74 28 70 2d 3e 61 6e 45 78 65 63 2c  emset(p->anExec,
d190: 20 30 2c 20 70 2d 3e 6e 4f 70 20 2a 20 73 69 7a   0, p->nOp * siz
d1a0: 65 6f 66 28 69 36 34 29 29 3b 0a 7d 0a 23 65 6e  eof(i64));.}.#en
d1b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
d1c0: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
d1d0: 41 54 55 53 20 2a 2f 0a                          ATUS */.