/ Hex Artifact Content
Login

Artifact 4a2806064657aedd3f3d078e8228e02a8f47cf5e44e884803420eef501fac09d:


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 76 6f  Mem*)pVal);.}.vo
1180: 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  id *sqlite3_valu
1190: 65 5f 70 6f 69 6e 74 65 72 28 73 71 6c 69 74 65  e_pointer(sqlite
11a0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
11b0: 20 20 4d 65 6d 20 2a 70 20 3d 20 28 4d 65 6d 2a    Mem *p = (Mem*
11c0: 29 70 56 61 6c 3b 0a 20 20 69 66 28 20 28 70 2d  )pVal;.  if( (p-
11d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 54 79 70 65  >flags&(MEM_Type
11e0: 4d 61 73 6b 7c 4d 45 4d 5f 50 74 72 29 29 3d 3d  Mask|MEM_Ptr))==
11f0: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 50 74  (MEM_Null|MEM_Pt
1200: 72 29 20 29 20 72 65 74 75 72 6e 20 70 2d 3e 75  r) ) return p->u
1210: 2e 70 50 74 72 3b 0a 20 20 72 65 74 75 72 6e 20  .pPtr;.  return 
1220: 30 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  0;.}.const unsig
1230: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
1240: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 73 71 6c  3_value_text(sql
1250: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
1260: 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 63 6f 6e  ){.  return (con
1270: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
1280: 20 2a 29 73 71 6c 69 74 65 33 56 61 6c 75 65 54   *)sqlite3ValueT
1290: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
12a0: 5f 55 54 46 38 29 3b 0a 7d 0a 23 69 66 6e 64 65  _UTF8);.}.#ifnde
12b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
12c0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
12d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12e0: 78 74 31 36 28 73 71 6c 69 74 65 33 5f 76 61 6c  xt16(sqlite3_val
12f0: 75 65 2a 20 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue* pVal){.  ret
1300: 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65  urn sqlite3Value
1310: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
1320: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a  E_UTF16NATIVE);.
1330: 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  }.const void *sq
1340: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1350: 31 36 62 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  16be(sqlite3_val
1360: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
1370: 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65  urn sqlite3Value
1380: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
1390: 45 5f 55 54 46 31 36 42 45 29 3b 0a 7d 0a 63 6f  E_UTF16BE);.}.co
13a0: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
13b0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65  3_value_text16le
13c0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
13d0: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
13e0: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
13f0: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
1400: 46 31 36 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66  F16LE);.}.#endif
1410: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
1420: 55 54 46 31 36 20 2a 2f 0a 2f 2a 20 45 56 49 44  UTF16 */./* EVID
1430: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 37 39 33  ENCE-OF: R-12793
1440: 2d 34 33 32 38 33 20 45 76 65 72 79 20 76 61 6c  -43283 Every val
1450: 75 65 20 69 6e 20 53 51 4c 69 74 65 20 68 61 73  ue in SQLite has
1460: 20 6f 6e 65 20 6f 66 20 66 69 76 65 0a 2a 2a 20   one of five.** 
1470: 66 75 6e 64 61 6d 65 6e 74 61 6c 20 64 61 74 61  fundamental data
1480: 74 79 70 65 73 3a 20 36 34 2d 62 69 74 20 73 69  types: 64-bit si
1490: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 36 34 2d  gned integer 64-
14a0: 62 69 74 20 49 45 45 45 20 66 6c 6f 61 74 69 6e  bit IEEE floatin
14b0: 67 0a 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65  g.** point numbe
14c0: 72 20 73 74 72 69 6e 67 20 42 4c 4f 42 20 4e 55  r string BLOB NU
14d0: 4c 4c 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  LL.*/.int sqlite
14e0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 73 71 6c  3_value_type(sql
14f0: 69 74 65 33 5f 76 61 6c 75 65 2a 20 70 56 61 6c  ite3_value* pVal
1500: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ){.  static cons
1510: 74 20 75 38 20 61 54 79 70 65 5b 5d 20 3d 20 7b  t u8 aType[] = {
1520: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 42 4c 4f  .     SQLITE_BLO
1530: 42 2c 20 20 20 20 20 2f 2a 20 30 78 30 30 20 2a  B,     /* 0x00 *
1540: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1550: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30 31 20  LL,     /* 0x01 
1560: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 54  */.     SQLITE_T
1570: 45 58 54 2c 20 20 20 20 20 2f 2a 20 30 78 30 32  EXT,     /* 0x02
1580: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
1590: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 30  NULL,     /* 0x0
15a0: 33 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  3 */.     SQLITE
15b0: 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30 78  _INTEGER,  /* 0x
15c0: 30 34 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  04 */.     SQLIT
15d0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
15e0: 78 30 35 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x05 */.     SQLI
15f0: 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20  TE_INTEGER,  /* 
1600: 30 78 30 36 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x06 */.     SQL
1610: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1620: 20 30 78 30 37 20 2a 2f 0a 20 20 20 20 20 53 51   0x07 */.     SQ
1630: 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20 20 2f  LITE_FLOAT,    /
1640: 2a 20 30 78 30 38 20 2a 2f 0a 20 20 20 20 20 53  * 0x08 */.     S
1650: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
1660: 2f 2a 20 30 78 30 39 20 2a 2f 0a 20 20 20 20 20  /* 0x09 */.     
1670: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
1680: 20 2f 2a 20 30 78 30 61 20 2a 2f 0a 20 20 20 20   /* 0x0a */.    
1690: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
16a0: 20 20 2f 2a 20 30 78 30 62 20 2a 2f 0a 20 20 20    /* 0x0b */.   
16b0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52    SQLITE_INTEGER
16c0: 2c 20 20 2f 2a 20 30 78 30 63 20 2a 2f 0a 20 20  ,  /* 0x0c */.  
16d0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
16e0: 20 20 20 20 2f 2a 20 30 78 30 64 20 2a 2f 0a 20      /* 0x0d */. 
16f0: 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47      SQLITE_INTEG
1700: 45 52 2c 20 20 2f 2a 20 30 78 30 65 20 2a 2f 0a  ER,  /* 0x0e */.
1710: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1720: 2c 20 20 20 20 20 2f 2a 20 30 78 30 66 20 2a 2f  ,     /* 0x0f */
1730: 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 42 4c 4f  .     SQLITE_BLO
1740: 42 2c 20 20 20 20 20 2f 2a 20 30 78 31 30 20 2a  B,     /* 0x10 *
1750: 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55  /.     SQLITE_NU
1760: 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31 31 20  LL,     /* 0x11 
1770: 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f 54  */.     SQLITE_T
1780: 45 58 54 2c 20 20 20 20 20 2f 2a 20 30 78 31 32  EXT,     /* 0x12
1790: 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45 5f   */.     SQLITE_
17a0: 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30 78 31  NULL,     /* 0x1
17b0: 33 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54 45  3 */.     SQLITE
17c0: 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20 30 78  _INTEGER,  /* 0x
17d0: 31 34 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49 54  14 */.     SQLIT
17e0: 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a 20 30  E_NULL,     /* 0
17f0: 78 31 35 20 2a 2f 0a 20 20 20 20 20 53 51 4c 49  x15 */.     SQLI
1800: 54 45 5f 49 4e 54 45 47 45 52 2c 20 20 2f 2a 20  TE_INTEGER,  /* 
1810: 30 78 31 36 20 2a 2f 0a 20 20 20 20 20 53 51 4c  0x16 */.     SQL
1820: 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20 2f 2a  ITE_NULL,     /*
1830: 20 30 78 31 37 20 2a 2f 0a 20 20 20 20 20 53 51   0x17 */.     SQ
1840: 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20 20 2f  LITE_FLOAT,    /
1850: 2a 20 30 78 31 38 20 2a 2f 0a 20 20 20 20 20 53  * 0x18 */.     S
1860: 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20 20 20  QLITE_NULL,     
1870: 2f 2a 20 30 78 31 39 20 2a 2f 0a 20 20 20 20 20  /* 0x19 */.     
1880: 53 51 4c 49 54 45 5f 46 4c 4f 41 54 2c 20 20 20  SQLITE_FLOAT,   
1890: 20 2f 2a 20 30 78 31 61 20 2a 2f 0a 20 20 20 20   /* 0x1a */.    
18a0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20 20 20   SQLITE_NULL,   
18b0: 20 20 2f 2a 20 30 78 31 62 20 2a 2f 0a 20 20 20    /* 0x1b */.   
18c0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52    SQLITE_INTEGER
18d0: 2c 20 20 2f 2a 20 30 78 31 63 20 2a 2f 0a 20 20  ,  /* 0x1c */.  
18e0: 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 2c 20     SQLITE_NULL, 
18f0: 20 20 20 20 2f 2a 20 30 78 31 64 20 2a 2f 0a 20      /* 0x1d */. 
1900: 20 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 45 47      SQLITE_INTEG
1910: 45 52 2c 20 20 2f 2a 20 30 78 31 65 20 2a 2f 0a  ER,  /* 0x1e */.
1920: 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 55 4c 4c       SQLITE_NULL
1930: 2c 20 20 20 20 20 2f 2a 20 30 78 31 66 20 2a 2f  ,     /* 0x1f */
1940: 0a 20 20 7d 3b 0a 20 20 72 65 74 75 72 6e 20 61  .  };.  return a
1950: 54 79 70 65 5b 70 56 61 6c 2d 3e 66 6c 61 67 73  Type[pVal->flags
1960: 26 4d 45 4d 5f 41 66 66 4d 61 73 6b 5d 3b 0a 7d  &MEM_AffMask];.}
1970: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
1980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20  *************** 
1990: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 20  sqlite3_result_ 
19a0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
19b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
19c0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
19d0: 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75  g routines are u
19e0: 73 65 64 20 62 79 20 75 73 65 72 2d 64 65 66 69  sed by user-defi
19f0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ned functions to
1a00: 20 73 70 65 63 69 66 79 0a 2a 2a 20 74 68 65 20   specify.** the 
1a10: 66 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74 2e  function result.
1a20: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 65 74 53 74  .**.** The setSt
1a30: 72 4f 72 45 72 72 6f 72 28 29 20 66 75 6e 63 74  rOrError() funct
1a40: 69 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ion calls sqlite
1a50: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 29  3VdbeMemSetStr()
1a60: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 0a 2a 2a   to store the.**
1a70: 20 72 65 73 75 6c 74 20 61 73 20 61 20 73 74 72   result as a str
1a80: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 62 75 74 20  ing or blob but 
1a90: 69 66 20 74 68 65 20 73 74 72 69 6e 67 20 6f 72  if the string or
1aa0: 20 62 6c 6f 62 20 69 73 20 74 6f 6f 20 6c 61 72   blob is too lar
1ab0: 67 65 2c 20 69 74 0a 2a 2a 20 74 68 65 6e 20 73  ge, it.** then s
1ac0: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
1ad0: 64 65 20 74 6f 20 53 51 4c 49 54 45 5f 54 4f 4f  de to SQLITE_TOO
1ae0: 42 49 47 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  BIG.**.** The in
1af0: 76 6f 6b 65 56 61 6c 75 65 44 65 73 74 72 75 63  vokeValueDestruc
1b00: 74 6f 72 28 50 2c 58 29 20 72 6f 75 74 69 6e 65  tor(P,X) routine
1b10: 20 69 6e 76 6f 6b 65 73 20 64 65 73 74 72 75 63   invokes destruc
1b20: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 58 28 29  tor function X()
1b30: 0a 2a 2a 20 6f 6e 20 76 61 6c 75 65 20 50 20 69  .** on value P i
1b40: 73 20 6e 6f 74 20 67 6f 69 6e 67 20 74 6f 20 62  s not going to b
1b50: 65 20 75 73 65 64 20 61 6e 64 20 6e 65 65 64 20  e used and need 
1b60: 74 6f 20 62 65 20 64 65 73 74 72 6f 79 65 64 2e  to be destroyed.
1b70: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
1b80: 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72  setResultStrOrEr
1b90: 72 6f 72 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  ror(.  sqlite3_c
1ba0: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 20 2f  ontext *pCtx,  /
1bb0: 2a 20 46 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65  * Function conte
1bc0: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
1bd0: 61 72 20 2a 7a 2c 20 20 20 20 20 20 20 20 20 20  ar *z,          
1be0: 2f 2a 20 53 74 72 69 6e 67 20 70 6f 69 6e 74 65  /* String pointe
1bf0: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c 20 20 20  r */.  int n,   
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c10: 2a 20 42 79 74 65 73 20 69 6e 20 73 74 72 69 6e  * Bytes in strin
1c20: 67 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 20 2a  g, or negative *
1c30: 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20 20 20 20  /.  u8 enc,     
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1c50: 6e 63 6f 64 69 6e 67 20 6f 66 20 7a 2e 20 20 30  ncoding of z.  0
1c60: 20 66 6f 72 20 42 4c 4f 42 73 20 2a 2f 0a 20 20   for BLOBs */.  
1c70: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
1c80: 64 2a 29 20 20 20 20 20 2f 2a 20 44 65 73 74 72  d*)     /* Destr
1c90: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
1ca0: 2f 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  /.){.  if( sqlit
1cb0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
1cc0: 70 43 74 78 2d 3e 70 4f 75 74 2c 20 7a 2c 20 6e  pCtx->pOut, z, n
1cd0: 2c 20 65 6e 63 2c 20 78 44 65 6c 29 3d 3d 53 51  , enc, xDel)==SQ
1ce0: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 7b 0a 20  LITE_TOOBIG ){. 
1cf0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
1d00: 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28 70  t_error_toobig(p
1d10: 43 74 78 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  Ctx);.  }.}.stat
1d20: 69 63 20 69 6e 74 20 69 6e 76 6f 6b 65 56 61 6c  ic int invokeVal
1d30: 75 65 44 65 73 74 72 75 63 74 6f 72 28 0a 20 20  ueDestructor(.  
1d40: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 2c 20 20  const void *p,  
1d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
1d60: 6c 75 65 20 74 6f 20 64 65 73 74 72 6f 79 20 2a  lue to destroy *
1d70: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  /.  void (*xDel)
1d80: 28 76 6f 69 64 2a 29 2c 20 20 20 20 20 20 20 2f  (void*),       /
1d90: 2a 20 54 68 65 20 64 65 73 74 72 75 63 74 6f 72  * The destructor
1da0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   */.  sqlite3_co
1db0: 6e 74 65 78 74 20 2a 70 43 74 78 20 20 20 20 20  ntext *pCtx     
1dc0: 20 2f 2a 20 53 65 74 20 61 20 53 51 4c 49 54 45   /* Set a SQLITE
1dd0: 5f 54 4f 4f 42 49 47 20 65 72 72 6f 72 20 69 66  _TOOBIG error if
1de0: 20 6e 6f 20 4e 55 4c 4c 20 2a 2f 0a 29 7b 0a 20   no NULL */.){. 
1df0: 20 61 73 73 65 72 74 28 20 78 44 65 6c 21 3d 53   assert( xDel!=S
1e00: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 29 3b  QLITE_DYNAMIC );
1e10: 0a 20 20 69 66 28 20 78 44 65 6c 3d 3d 30 20 29  .  if( xDel==0 )
1e20: 7b 0a 20 20 20 20 2f 2a 20 6e 6f 6f 70 20 2a 2f  {.    /* noop */
1e30: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 78 44 65  .  }else if( xDe
1e40: 6c 3d 3d 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  l==SQLITE_TRANSI
1e50: 45 4e 54 20 29 7b 0a 20 20 20 20 2f 2a 20 6e 6f  ENT ){.    /* no
1e60: 6f 70 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  op */.  }else{. 
1e70: 20 20 20 78 44 65 6c 28 28 76 6f 69 64 2a 29 70     xDel((void*)p
1e80: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74  );.  }.  if( pCt
1e90: 78 20 29 20 73 71 6c 69 74 65 33 5f 72 65 73 75  x ) sqlite3_resu
1ea0: 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28  lt_error_toobig(
1eb0: 70 43 74 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  pCtx);.  return 
1ec0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 7d  SQLITE_TOOBIG;.}
1ed0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
1ee0: 73 75 6c 74 5f 62 6c 6f 62 28 0a 20 20 73 71 6c  sult_blob(.  sql
1ef0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
1f00: 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69  tx, .  const voi
1f10: 64 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c 20  d *z, .  int n, 
1f20: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
1f30: 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73  void *).){.  ass
1f40: 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 61  ert( n>=0 );.  a
1f50: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
1f60: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
1f70: 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  pOut->db->mutex)
1f80: 20 29 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53   );.  setResultS
1f90: 74 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20  trOrError(pCtx, 
1fa0: 7a 2c 20 6e 2c 20 30 2c 20 78 44 65 6c 29 3b 0a  z, n, 0, xDel);.
1fb0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
1fc0: 65 73 75 6c 74 5f 62 6c 6f 62 36 34 28 0a 20 20  esult_blob64(.  
1fd0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
1fe0: 2a 70 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20  *pCtx, .  const 
1ff0: 76 6f 69 64 20 2a 7a 2c 20 0a 20 20 73 71 6c 69  void *z, .  sqli
2000: 74 65 33 5f 75 69 6e 74 36 34 20 6e 2c 0a 20 20  te3_uint64 n,.  
2010: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
2020: 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74  d *).){.  assert
2030: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
2040: 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d  held(pCtx->pOut-
2050: 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  >db->mutex) );. 
2060: 20 61 73 73 65 72 74 28 20 78 44 65 6c 21 3d 53   assert( xDel!=S
2070: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 29 3b  QLITE_DYNAMIC );
2080: 0a 20 20 69 66 28 20 6e 3e 30 78 37 66 66 66 66  .  if( n>0x7ffff
2090: 66 66 66 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  fff ){.    (void
20a0: 29 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73 74  )invokeValueDest
20b0: 72 75 63 74 6f 72 28 7a 2c 20 78 44 65 6c 2c 20  ructor(z, xDel, 
20c0: 70 43 74 78 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pCtx);.  }else{.
20d0: 20 20 20 20 73 65 74 52 65 73 75 6c 74 53 74 72      setResultStr
20e0: 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c  OrError(pCtx, z,
20f0: 20 28 69 6e 74 29 6e 2c 20 30 2c 20 78 44 65 6c   (int)n, 0, xDel
2100: 29 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64 20 73 71  );.  }.}.void sq
2110: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
2120: 62 6c 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ble(sqlite3_cont
2130: 65 78 74 20 2a 70 43 74 78 2c 20 64 6f 75 62 6c  ext *pCtx, doubl
2140: 65 20 72 56 61 6c 29 7b 0a 20 20 61 73 73 65 72  e rVal){.  asser
2150: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
2160: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74  _held(pCtx->pOut
2170: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
2180: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2190: 53 65 74 44 6f 75 62 6c 65 28 70 43 74 78 2d 3e  SetDouble(pCtx->
21a0: 70 4f 75 74 2c 20 72 56 61 6c 29 3b 0a 7d 0a 76  pOut, rVal);.}.v
21b0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
21c0: 6c 74 5f 65 72 72 6f 72 28 73 71 6c 69 74 65 33  lt_error(sqlite3
21d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
21e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
21f0: 6e 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28  nt n){.  assert(
2200: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
2210: 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e  eld(pCtx->pOut->
2220: 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20  db->mutex) );.  
2230: 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
2240: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
2250: 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
2260: 78 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33  x = 1;.  sqlite3
2270: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43  VdbeMemSetStr(pC
2280: 74 78 2d 3e 70 4f 75 74 2c 20 7a 2c 20 6e 2c 20  tx->pOut, z, n, 
2290: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
22a0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
22b0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
22c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64  _OMIT_UTF16.void
22d0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
22e0: 65 72 72 6f 72 31 36 28 73 71 6c 69 74 65 33 5f  error16(sqlite3_
22f0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 63  context *pCtx, c
2300: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 69 6e  onst void *z, in
2310: 74 20 6e 29 7b 0a 20 20 61 73 73 65 72 74 28 20  t n){.  assert( 
2320: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
2330: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
2340: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 70  b->mutex) );.  p
2350: 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 53  Ctx->isError = S
2360: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 70  QLITE_ERROR;.  p
2370: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
2380: 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 56   = 1;.  sqlite3V
2390: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 43 74  dbeMemSetStr(pCt
23a0: 78 2d 3e 70 4f 75 74 2c 20 7a 2c 20 6e 2c 20 53  x->pOut, z, n, S
23b0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
23c0: 45 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  E, SQLITE_TRANSI
23d0: 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 76  ENT);.}.#endif.v
23e0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75  oid sqlite3_resu
23f0: 6c 74 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 63  lt_int(sqlite3_c
2400: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 69 6e  ontext *pCtx, in
2410: 74 20 69 56 61 6c 29 7b 0a 20 20 61 73 73 65 72  t iVal){.  asser
2420: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
2430: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74  _held(pCtx->pOut
2440: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
2450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2460: 53 65 74 49 6e 74 36 34 28 70 43 74 78 2d 3e 70  SetInt64(pCtx->p
2470: 4f 75 74 2c 20 28 69 36 34 29 69 56 61 6c 29 3b  Out, (i64)iVal);
2480: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
2490: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 73 71 6c  result_int64(sql
24a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
24b0: 74 78 2c 20 69 36 34 20 69 56 61 6c 29 7b 0a 20  tx, i64 iVal){. 
24c0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
24d0: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
24e0: 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65  ->pOut->db->mute
24f0: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
2500: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
2510: 43 74 78 2d 3e 70 4f 75 74 2c 20 69 56 61 6c 29  Ctx->pOut, iVal)
2520: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
2530: 5f 72 65 73 75 6c 74 5f 70 6f 69 6e 74 65 72 28  _result_pointer(
2540: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2550: 2a 70 43 74 78 2c 20 76 6f 69 64 20 2a 70 50 74  *pCtx, void *pPt
2560: 72 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  r){.  assert( sq
2570: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
2580: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
2590: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
25a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
25b0: 6c 6c 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ll(pCtx->pOut);.
25c0: 20 20 61 73 73 65 72 74 28 20 28 70 43 74 78 2d    assert( (pCtx-
25d0: 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28  >pOut->flags & (
25e0: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 7c 4d 45 4d  MEM_TypeMask|MEM
25f0: 5f 50 74 72 29 29 3d 3d 4d 45 4d 5f 4e 75 6c 6c  _Ptr))==MEM_Null
2600: 20 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74   );.  pCtx->pOut
2610: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 50  ->flags |= MEM_P
2620: 74 72 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74  tr;.  pCtx->pOut
2630: 2d 3e 75 2e 70 50 74 72 20 3d 20 70 50 74 72 3b  ->u.pPtr = pPtr;
2640: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
2650: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c 69  result_null(sqli
2660: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
2670: 78 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71  x){.  assert( sq
2680: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64  lite3_mutex_held
2690: 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d  (pCtx->pOut->db-
26a0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71 6c  >mutex) );.  sql
26b0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
26c0: 6c 6c 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ll(pCtx->pOut);.
26d0: 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  }.void sqlite3_r
26e0: 65 73 75 6c 74 5f 74 65 78 74 28 0a 20 20 73 71  esult_text(.  sq
26f0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2700: 43 74 78 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68  Ctx, .  const ch
2710: 61 72 20 2a 7a 2c 20 0a 20 20 69 6e 74 20 6e 2c  ar *z, .  int n,
2720: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
2730: 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 61 73 73  void *).){.  ass
2740: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2750: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
2760: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
2770: 3b 0a 20 20 73 65 74 52 65 73 75 6c 74 53 74 72  ;.  setResultStr
2780: 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a 2c  OrError(pCtx, z,
2790: 20 6e 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   n, SQLITE_UTF8,
27a0: 20 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73   xDel);.}.void s
27b0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
27c0: 78 74 36 34 28 0a 20 20 73 71 6c 69 74 65 33 5f  xt64(.  sqlite3_
27d0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
27e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c    const char *z,
27f0: 20 0a 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74   .  sqlite3_uint
2800: 36 34 20 6e 2c 0a 20 20 76 6f 69 64 20 28 2a 78  64 n,.  void (*x
2810: 44 65 6c 29 28 76 6f 69 64 20 2a 29 2c 0a 20 20  Del)(void *),.  
2820: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 65 6e  unsigned char en
2830: 63 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  c.){.  assert( s
2840: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
2850: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
2860: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73  ->mutex) );.  as
2870: 73 65 72 74 28 20 78 44 65 6c 21 3d 53 51 4c 49  sert( xDel!=SQLI
2880: 54 45 5f 44 59 4e 41 4d 49 43 20 29 3b 0a 20 20  TE_DYNAMIC );.  
2890: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
28a0: 55 54 46 31 36 20 29 20 65 6e 63 20 3d 20 53 51  UTF16 ) enc = SQ
28b0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
28c0: 3b 0a 20 20 69 66 28 20 6e 3e 30 78 37 66 66 66  ;.  if( n>0x7fff
28d0: 66 66 66 66 20 29 7b 0a 20 20 20 20 28 76 6f 69  ffff ){.    (voi
28e0: 64 29 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73  d)invokeValueDes
28f0: 74 72 75 63 74 6f 72 28 7a 2c 20 78 44 65 6c 2c  tructor(z, xDel,
2900: 20 70 43 74 78 29 3b 0a 20 20 7d 65 6c 73 65 7b   pCtx);.  }else{
2910: 0a 20 20 20 20 73 65 74 52 65 73 75 6c 74 53 74  .    setResultSt
2920: 72 4f 72 45 72 72 6f 72 28 70 43 74 78 2c 20 7a  rOrError(pCtx, z
2930: 2c 20 28 69 6e 74 29 6e 2c 20 65 6e 63 2c 20 78  , (int)n, enc, x
2940: 44 65 6c 29 3b 0a 20 20 7d 0a 7d 0a 23 69 66 6e  Del);.  }.}.#ifn
2950: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2960: 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69 74  UTF16.void sqlit
2970: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
2980: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
2990: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63 6f  ext *pCtx, .  co
29a0: 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20 20  nst void *z, .  
29b0: 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20 28  int n, .  void (
29c0: 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a 29  *xDel)(void *).)
29d0: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
29e0: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
29f0: 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d  Ctx->pOut->db->m
2a00: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
2a10: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
2a20: 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  Ctx, z, n, SQLIT
2a30: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 78  E_UTF16NATIVE, x
2a40: 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Del);.}.void sql
2a50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
2a60: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
2a70: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
2a80: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
2a90: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
2aa0: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
2ab0: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
2ac0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
2ad0: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
2ae0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
2af0: 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72  etResultStrOrErr
2b00: 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53  or(pCtx, z, n, S
2b10: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 78  QLITE_UTF16BE, x
2b20: 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c  Del);.}.void sql
2b30: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
2b40: 31 36 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16le(.  sqlite3_
2b50: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
2b60: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
2b70: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
2b80: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
2b90: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
2ba0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
2bb0: 6c 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64  ld(pCtx->pOut->d
2bc0: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73  b->mutex) );.  s
2bd0: 65 74 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72  etResultStrOrErr
2be0: 6f 72 28 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53  or(pCtx, z, n, S
2bf0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 78  QLITE_UTF16LE, x
2c00: 44 65 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Del);.}.#endif /
2c10: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
2c20: 46 31 36 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  F16 */.void sqli
2c30: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
2c40: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2c50: 20 2a 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f   *pCtx, sqlite3_
2c60: 76 61 6c 75 65 20 2a 70 56 61 6c 75 65 29 7b 0a  value *pValue){.
2c70: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2c80: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74  3_mutex_held(pCt
2c90: 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74  x->pOut->db->mut
2ca0: 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  ex) );.  sqlite3
2cb0: 56 64 62 65 4d 65 6d 43 6f 70 79 28 70 43 74 78  VdbeMemCopy(pCtx
2cc0: 2d 3e 70 4f 75 74 2c 20 70 56 61 6c 75 65 29 3b  ->pOut, pValue);
2cd0: 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  .}.void sqlite3_
2ce0: 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62 28  result_zeroblob(
2cf0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
2d00: 2a 70 43 74 78 2c 20 69 6e 74 20 6e 29 7b 0a 20  *pCtx, int n){. 
2d10: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2d20: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78  _mutex_held(pCtx
2d30: 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 6d 75 74 65  ->pOut->db->mute
2d40: 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  x) );.  sqlite3V
2d50: 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f  dbeMemSetZeroBlo
2d60: 62 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 6e 29  b(pCtx->pOut, n)
2d70: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
2d80: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f  _result_error_co
2d90: 64 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  de(sqlite3_conte
2da0: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 65 72  xt *pCtx, int er
2db0: 72 43 6f 64 65 29 7b 0a 20 20 70 43 74 78 2d 3e  rCode){.  pCtx->
2dc0: 69 73 45 72 72 6f 72 20 3d 20 65 72 72 43 6f 64  isError = errCod
2dd0: 65 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  e;.  pCtx->fErro
2de0: 72 4f 72 41 75 78 20 3d 20 31 3b 0a 23 69 66 64  rOrAux = 1;.#ifd
2df0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e00: 20 20 69 66 28 20 70 43 74 78 2d 3e 70 56 64 62    if( pCtx->pVdb
2e10: 65 20 29 20 70 43 74 78 2d 3e 70 56 64 62 65 2d  e ) pCtx->pVdbe-
2e20: 3e 72 63 41 70 70 20 3d 20 65 72 72 43 6f 64 65  >rcApp = errCode
2e30: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
2e40: 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73  Ctx->pOut->flags
2e50: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
2e60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2e70: 6d 53 65 74 53 74 72 28 70 43 74 78 2d 3e 70 4f  mSetStr(pCtx->pO
2e80: 75 74 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  ut, sqlite3ErrSt
2e90: 72 28 65 72 72 43 6f 64 65 29 2c 20 2d 31 2c 20  r(errCode), -1, 
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2ec0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
2ed0: 41 54 49 43 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  ATIC);.  }.}../*
2ee0: 20 46 6f 72 63 65 20 61 6e 20 53 51 4c 49 54 45   Force an SQLITE
2ef0: 5f 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e 20 2a  _TOOBIG error. *
2f00: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
2f10: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f 62  esult_error_toob
2f20: 69 67 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ig(sqlite3_conte
2f30: 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73  xt *pCtx){.  ass
2f40: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
2f50: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
2f60: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
2f70: 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
2f80: 72 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  r = SQLITE_TOOBI
2f90: 47 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  G;.  pCtx->fErro
2fa0: 72 4f 72 41 75 78 20 3d 20 31 3b 0a 20 20 73 71  rOrAux = 1;.  sq
2fb0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2fc0: 74 72 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 22  tr(pCtx->pOut, "
2fd0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
2fe0: 6f 6f 20 62 69 67 22 2c 20 2d 31 2c 20 0a 20 20  oo big", -1, .  
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3000: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
3010: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
3020: 3b 0a 7d 0a 0a 2f 2a 20 41 6e 20 53 51 4c 49 54  ;.}../* An SQLIT
3030: 45 5f 4e 4f 4d 45 4d 20 65 72 72 6f 72 2e 20 2a  E_NOMEM error. *
3040: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72  /.void sqlite3_r
3050: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65  esult_error_nome
3060: 6d 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  m(sqlite3_contex
3070: 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73 73 65  t *pCtx){.  asse
3080: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
3090: 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f 75  x_held(pCtx->pOu
30a0: 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  t->db->mutex) );
30b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
30c0: 6d 53 65 74 4e 75 6c 6c 28 70 43 74 78 2d 3e 70  mSetNull(pCtx->p
30d0: 4f 75 74 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73  Out);.  pCtx->is
30e0: 45 72 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 4e  Error = SQLITE_N
30f0: 4f 4d 45 4d 3b 0a 20 20 70 43 74 78 2d 3e 66 45  OMEM;.  pCtx->fE
3100: 72 72 6f 72 4f 72 41 75 78 20 3d 20 31 3b 0a 20  rrorOrAux = 1;. 
3110: 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62 2d   pCtx->pOut->db-
3120: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
3130: 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  1;.}../*.** This
3140: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c   function is cal
3150: 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 61 6e  led after a tran
3160: 73 61 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  saction has been
3170: 20 63 6f 6d 6d 69 74 74 65 64 2e 20 49 74 20 0a   committed. It .
3180: 2a 2a 20 69 6e 76 6f 6b 65 73 20 63 61 6c 6c 62  ** invokes callb
3190: 61 63 6b 73 20 72 65 67 69 73 74 65 72 65 64 20  acks registered 
31a0: 77 69 74 68 20 73 71 6c 69 74 65 33 5f 77 61 6c  with sqlite3_wal
31b0: 5f 68 6f 6f 6b 28 29 20 61 73 20 72 65 71 75 69  _hook() as requi
31c0: 72 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  red..*/.static i
31d0: 6e 74 20 64 6f 57 61 6c 43 61 6c 6c 62 61 63 6b  nt doWalCallback
31e0: 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  s(sqlite3 *db){.
31f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
3200: 45 5f 4f 4b 3b 0a 23 69 66 6e 64 65 66 20 53 51  E_OK;.#ifndef SQ
3210: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
3220: 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
3230: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
3240: 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  ){.    Btree *pB
3250: 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
3260: 42 74 3b 0a 20 20 20 20 69 66 28 20 70 42 74 20  Bt;.    if( pBt 
3270: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 45 6e  ){.      int nEn
3280: 74 72 79 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  try;.      sqlit
3290: 65 33 42 74 72 65 65 45 6e 74 65 72 28 70 42 74  e3BtreeEnter(pBt
32a0: 29 3b 0a 20 20 20 20 20 20 6e 45 6e 74 72 79 20  );.      nEntry 
32b0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 57 61  = sqlite3PagerWa
32c0: 6c 43 61 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  lCallback(sqlite
32d0: 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
32e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
32f0: 42 74 72 65 65 4c 65 61 76 65 28 70 42 74 29 3b  BtreeLeave(pBt);
3300: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 78  .      if( db->x
3310: 57 61 6c 43 61 6c 6c 62 61 63 6b 20 26 26 20 6e  WalCallback && n
3320: 45 6e 74 72 79 3e 30 20 26 26 20 72 63 3d 3d 53  Entry>0 && rc==S
3330: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
3340: 20 20 20 20 72 63 20 3d 20 64 62 2d 3e 78 57 61      rc = db->xWa
3350: 6c 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 57  lCallback(db->pW
3360: 61 6c 41 72 67 2c 20 64 62 2c 20 64 62 2d 3e 61  alArg, db, db->a
3370: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 6e 45 6e  Db[i].zName, nEn
3380: 74 72 79 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  try);.      }.  
3390: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
33a0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
33b0: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
33c0: 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74   statement pStmt
33d0: 2c 20 65 69 74 68 65 72 20 75 6e 74 69 6c 20 61  , either until a
33e0: 20 72 6f 77 20 6f 66 20 64 61 74 61 20 69 73 20   row of data is 
33f0: 72 65 61 64 79 2c 20 74 68 65 0a 2a 2a 20 73 74  ready, the.** st
3400: 61 74 65 6d 65 6e 74 20 69 73 20 63 6f 6d 70 6c  atement is compl
3410: 65 74 65 6c 79 20 65 78 65 63 75 74 65 64 20 6f  etely executed o
3420: 72 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  r an error occur
3430: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  s..**.** This ro
3440: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73  utine implements
3450: 20 74 68 65 20 62 75 6c 6b 20 6f 66 20 74 68 65   the bulk of the
3460: 20 6c 6f 67 69 63 20 62 65 68 69 6e 64 20 74 68   logic behind th
3470: 65 20 73 71 6c 69 74 65 5f 73 74 65 70 28 29 0a  e sqlite_step().
3480: 2a 2a 20 41 50 49 2e 20 20 54 68 65 20 6f 6e 6c  ** API.  The onl
3490: 79 20 74 68 69 6e 67 20 6f 6d 69 74 74 65 64 20  y thing omitted 
34a0: 69 73 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63  is the automatic
34b0: 20 72 65 63 6f 6d 70 69 6c 65 20 69 66 20 61 20   recompile if a 
34c0: 0a 2a 2a 20 73 63 68 65 6d 61 20 63 68 61 6e 67  .** schema chang
34d0: 65 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 20  e has occurred. 
34e0: 20 54 68 61 74 20 64 65 74 61 69 6c 20 69 73 20   That detail is 
34f0: 68 61 6e 64 6c 65 64 20 62 79 20 74 68 65 0a 2a  handled by the.*
3500: 2a 20 6f 75 74 65 72 20 73 71 6c 69 74 65 33 5f  * outer sqlite3_
3510: 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20 70  step() wrapper p
3520: 72 6f 63 65 64 75 72 65 2e 0a 2a 2f 0a 73 74 61  rocedure..*/.sta
3530: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 53  tic int sqlite3S
3540: 74 65 70 28 56 64 62 65 20 2a 70 29 7b 0a 20 20  tep(Vdbe *p){.  
3550: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
3560: 6e 74 20 72 63 3b 0a 0a 20 20 61 73 73 65 72 74  nt rc;..  assert
3570: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6d 61  (p);.  if( p->ma
3580: 67 69 63 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic!=VDBE_MAGIC_
3590: 52 55 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 65  RUN ){.    /* We
35a0: 20 75 73 65 64 20 74 6f 20 72 65 71 75 69 72 65   used to require
35b0: 20 74 68 61 74 20 73 71 6c 69 74 65 33 5f 72 65   that sqlite3_re
35c0: 73 65 74 28 29 20 62 65 20 63 61 6c 6c 65 64 20  set() be called 
35d0: 62 65 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0a  before retrying.
35e0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 73      ** sqlite3_s
35f0: 74 65 70 28 29 20 61 66 74 65 72 20 61 6e 79 20  tep() after any 
3600: 65 72 72 6f 72 20 6f 72 20 61 66 74 65 72 20 53  error or after S
3610: 51 4c 49 54 45 5f 44 4f 4e 45 2e 20 20 42 75 74  QLITE_DONE.  But
3620: 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a   beginning.    *
3630: 2a 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20 33  * with version 3
3640: 2e 37 2e 30 2c 20 77 65 20 63 68 61 6e 67 65 64  .7.0, we changed
3650: 20 74 68 69 73 20 73 6f 20 74 68 61 74 20 73 71   this so that sq
3660: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 77 6f  lite3_reset() wo
3670: 75 6c 64 0a 20 20 20 20 2a 2a 20 62 65 20 63 61  uld.    ** be ca
3680: 6c 6c 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  lled automatical
3690: 6c 79 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  ly instead of th
36a0: 72 6f 77 69 6e 67 20 74 68 65 20 53 51 4c 49 54  rowing the SQLIT
36b0: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a  E_MISUSE error..
36c0: 20 20 20 20 2a 2a 20 54 68 69 73 20 22 61 75 74      ** This "aut
36d0: 6f 6d 61 74 69 63 2d 72 65 73 65 74 22 20 63 68  omatic-reset" ch
36e0: 61 6e 67 65 20 69 73 20 6e 6f 74 20 74 65 63 68  ange is not tech
36f0: 6e 69 63 61 6c 6c 79 20 61 6e 20 69 6e 63 6f 6d  nically an incom
3700: 70 61 74 69 62 69 6c 69 74 79 2c 20 0a 20 20 20  patibility, .   
3710: 20 2a 2a 20 73 69 6e 63 65 20 61 6e 79 20 61 70   ** since any ap
3720: 70 6c 69 63 61 74 69 6f 6e 20 74 68 61 74 20 72  plication that r
3730: 65 63 65 69 76 65 73 20 61 6e 20 53 51 4c 49 54  eceives an SQLIT
3740: 45 5f 4d 49 53 55 53 45 20 69 73 20 62 72 6f 6b  E_MISUSE is brok
3750: 65 6e 20 62 79 0a 20 20 20 20 2a 2a 20 64 65 66  en by.    ** def
3760: 69 6e 69 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  inition..    **.
3770: 20 20 20 20 2a 2a 20 4e 65 76 65 72 74 68 65 6c      ** Neverthel
3780: 65 73 73 2c 20 73 6f 6d 65 20 70 75 62 6c 69 73  ess, some publis
3790: 68 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  hed applications
37a0: 20 74 68 61 74 20 77 65 72 65 20 6f 72 69 67 69   that were origi
37b0: 6e 61 6c 6c 79 20 77 72 69 74 74 65 6e 0a 20 20  nally written.  
37c0: 20 20 2a 2a 20 66 6f 72 20 76 65 72 73 69 6f 6e    ** for version
37d0: 20 33 2e 36 2e 32 33 20 6f 72 20 65 61 72 6c 69   3.6.23 or earli
37e0: 65 72 20 64 6f 20 69 6e 20 66 61 63 74 20 64 65  er do in fact de
37f0: 70 65 6e 64 20 6f 6e 20 53 51 4c 49 54 45 5f 4d  pend on SQLITE_M
3800: 49 53 55 53 45 20 0a 20 20 20 20 2a 2a 20 72 65  ISUSE .    ** re
3810: 74 75 72 6e 73 2c 20 61 6e 64 20 74 68 6f 73 65  turns, and those
3820: 20 77 65 72 65 20 62 72 6f 6b 65 6e 20 62 79 20   were broken by 
3830: 74 68 65 20 61 75 74 6f 6d 61 74 69 63 2d 72 65  the automatic-re
3840: 73 65 74 20 63 68 61 6e 67 65 2e 20 20 41 73 20  set change.  As 
3850: 61 0a 20 20 20 20 2a 2a 20 61 20 77 6f 72 6b 2d  a.    ** a work-
3860: 61 72 6f 75 6e 64 2c 20 74 68 65 20 53 51 4c 49  around, the SQLI
3870: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45  TE_OMIT_AUTORESE
3880: 54 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 72  T compile-time r
3890: 65 73 74 6f 72 65 73 20 74 68 65 0a 20 20 20 20  estores the.    
38a0: 2a 2a 20 6c 65 67 61 63 79 20 62 65 68 61 76 69  ** legacy behavi
38b0: 6f 72 20 6f 66 20 72 65 74 75 72 6e 69 6e 67 20  or of returning 
38c0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6f  SQLITE_MISUSE fo
38d0: 72 20 63 61 73 65 73 20 77 68 65 72 65 20 74 68  r cases where th
38e0: 65 20 0a 20 20 20 20 2a 2a 20 70 72 65 76 69 6f  e .    ** previo
38f0: 75 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  us sqlite3_step(
3900: 29 20 72 65 74 75 72 6e 65 64 20 73 6f 6d 65 74  ) returned somet
3910: 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
3920: 61 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 0a  a SQLITE_LOCKED.
3930: 20 20 20 20 2a 2a 20 6f 72 20 53 51 4c 49 54 45      ** or SQLITE
3940: 5f 42 55 53 59 20 65 72 72 6f 72 2e 0a 20 20 20  _BUSY error..   
3950: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
3960: 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54  E_OMIT_AUTORESET
3970: 0a 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 70  .    if( (rc = p
3980: 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49  ->rc&0xff)==SQLI
3990: 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53  TE_BUSY || rc==S
39a0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
39b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
39c0: 73 65 74 28 28 73 71 6c 69 74 65 33 5f 73 74 6d  set((sqlite3_stm
39d0: 74 2a 29 70 29 3b 0a 20 20 20 20 7d 65 6c 73 65  t*)p);.    }else
39e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  {.      return S
39f0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
3a00: 54 3b 0a 20 20 20 20 7d 0a 23 65 6c 73 65 0a 20  T;.    }.#else. 
3a10: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74     sqlite3_reset
3a20: 28 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29  ((sqlite3_stmt*)
3a30: 70 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 0a  p);.#endif.  }..
3a40: 20 20 2f 2a 20 43 68 65 63 6b 20 74 68 61 74 20    /* Check that 
3a50: 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 6e 6f 74  malloc() has not
3a60: 20 66 61 69 6c 65 64 2e 20 49 66 20 69 74 20 68   failed. If it h
3a70: 61 73 2c 20 72 65 74 75 72 6e 20 65 61 72 6c 79  as, return early
3a80: 2e 20 2a 2f 0a 20 20 64 62 20 3d 20 70 2d 3e 64  . */.  db = p->d
3a90: 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  b;.  if( db->mal
3aa0: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
3ab0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
3ac0: 4e 4f 4d 45 4d 3b 0a 20 20 20 20 72 65 74 75 72  NOMEM;.    retur
3ad0: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
3ae0: 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 70 63    }..  if( p->pc
3af0: 3c 3d 30 20 26 26 20 70 2d 3e 65 78 70 69 72 65  <=0 && p->expire
3b00: 64 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  d ){.    p->rc =
3b10: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
3b20: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
3b30: 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20  ERROR;.    goto 
3b40: 65 6e 64 5f 6f 66 5f 73 74 65 70 3b 0a 20 20 7d  end_of_step;.  }
3b50: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 30 20 29  .  if( p->pc<0 )
3b60: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
3b70: 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 73  e are no other s
3b80: 74 61 74 65 6d 65 6e 74 73 20 63 75 72 72 65 6e  tatements curren
3b90: 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 74 68 65  tly running, the
3ba0: 6e 0a 20 20 20 20 2a 2a 20 72 65 73 65 74 20 74  n.    ** reset t
3bb0: 68 65 20 69 6e 74 65 72 72 75 70 74 20 66 6c 61  he interrupt fla
3bc0: 67 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e 74  g.  This prevent
3bd0: 73 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  s a call to sqli
3be0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 0a 20 20  te3_interrupt.  
3bf0: 20 20 2a 2a 20 66 72 6f 6d 20 69 6e 74 65 72 72    ** from interr
3c00: 75 70 74 69 6e 67 20 61 20 73 74 61 74 65 6d 65  upting a stateme
3c10: 6e 74 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20  nt that has not 
3c20: 79 65 74 20 73 74 61 72 74 65 64 2e 0a 20 20 20  yet started..   
3c30: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
3c40: 6e 56 64 62 65 41 63 74 69 76 65 3d 3d 30 20 29  nVdbeActive==0 )
3c50: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 75 31 2e 69  {.      db->u1.i
3c60: 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 30  sInterrupted = 0
3c70: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73  ;.    }..    ass
3c80: 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 57 72  ert( db->nVdbeWr
3c90: 69 74 65 3e 30 20 7c 7c 20 64 62 2d 3e 61 75 74  ite>0 || db->aut
3ca0: 6f 43 6f 6d 6d 69 74 3d 3d 30 20 0a 20 20 20 20  oCommit==0 .    
3cb0: 20 20 20 20 7c 7c 20 28 64 62 2d 3e 6e 44 65 66      || (db->nDef
3cc0: 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
3cd0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
3ce0: 43 6f 6e 73 3d 3d 30 29 0a 20 20 20 20 29 3b 0a  Cons==0).    );.
3cf0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3d00: 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 20 20 69  OMIT_TRACE.    i
3d10: 66 28 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20  f( db->xProfile 
3d20: 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  && !db->init.bus
3d30: 79 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  y ){.      sqlit
3d40: 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 49  e3OsCurrentTimeI
3d50: 6e 74 36 34 28 64 62 2d 3e 70 56 66 73 2c 20 26  nt64(db->pVfs, &
3d60: 70 2d 3e 73 74 61 72 74 54 69 6d 65 29 3b 0a 20  p->startTime);. 
3d70: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
3d80: 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
3d90: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  ++;.    if( p->r
3da0: 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 20 64 62 2d  eadOnly==0 ) db-
3db0: 3e 6e 56 64 62 65 57 72 69 74 65 2b 2b 3b 0a 20  >nVdbeWrite++;. 
3dc0: 20 20 20 69 66 28 20 70 2d 3e 62 49 73 52 65 61     if( p->bIsRea
3dd0: 64 65 72 20 29 20 64 62 2d 3e 6e 56 64 62 65 52  der ) db->nVdbeR
3de0: 65 61 64 2b 2b 3b 0a 20 20 20 20 70 2d 3e 70 63  ead++;.    p->pc
3df0: 20 3d 20 30 3b 0a 20 20 7d 0a 23 69 66 64 65 66   = 0;.  }.#ifdef
3e00: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
3e10: 70 2d 3e 72 63 41 70 70 20 3d 20 53 51 4c 49 54  p->rcApp = SQLIT
3e20: 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 23 69 66  E_OK;.#endif.#if
3e30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3e40: 5f 45 58 50 4c 41 49 4e 0a 20 20 69 66 28 20 70  _EXPLAIN.  if( p
3e50: 2d 3e 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  ->explain ){.   
3e60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
3e70: 65 4c 69 73 74 28 70 29 3b 0a 20 20 7d 65 6c 73  eList(p);.  }els
3e80: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  e.#endif /* SQLI
3e90: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 20  TE_OMIT_EXPLAIN 
3ea0: 2a 2f 0a 20 20 7b 0a 20 20 20 20 64 62 2d 3e 6e  */.  {.    db->n
3eb0: 56 64 62 65 45 78 65 63 2b 2b 3b 0a 20 20 20 20  VdbeExec++;.    
3ec0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
3ed0: 45 78 65 63 28 70 29 3b 0a 20 20 20 20 64 62 2d  Exec(p);.    db-
3ee0: 3e 6e 56 64 62 65 45 78 65 63 2d 2d 3b 0a 20 20  >nVdbeExec--;.  
3ef0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
3f00: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 2f  E_OMIT_TRACE.  /
3f10: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 6f  * Invoke the pro
3f20: 66 69 6c 65 20 63 61 6c 6c 62 61 63 6b 20 69 66  file callback if
3f30: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 20 20   there is one.  
3f40: 2a 2f 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  */.  if( rc!=SQL
3f50: 49 54 45 5f 52 4f 57 20 26 26 20 64 62 2d 3e 78  ITE_ROW && db->x
3f60: 50 72 6f 66 69 6c 65 20 26 26 20 21 64 62 2d 3e  Profile && !db->
3f70: 69 6e 69 74 2e 62 75 73 79 20 26 26 20 70 2d 3e  init.busy && p->
3f80: 7a 53 71 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  zSql ){.    sqli
3f90: 74 65 33 5f 69 6e 74 36 34 20 69 4e 6f 77 3b 0a  te3_int64 iNow;.
3fa0: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 43 75 72      sqlite3OsCur
3fb0: 72 65 6e 74 54 69 6d 65 49 6e 74 36 34 28 64 62  rentTimeInt64(db
3fc0: 2d 3e 70 56 66 73 2c 20 26 69 4e 6f 77 29 3b 0a  ->pVfs, &iNow);.
3fd0: 20 20 20 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65      db->xProfile
3fe0: 28 64 62 2d 3e 70 50 72 6f 66 69 6c 65 41 72 67  (db->pProfileArg
3ff0: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 28 69 4e 6f 77  , p->zSql, (iNow
4000: 20 2d 20 70 2d 3e 73 74 61 72 74 54 69 6d 65 29   - p->startTime)
4010: 2a 31 30 30 30 30 30 30 29 3b 0a 20 20 7d 0a 23  *1000000);.  }.#
4020: 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 72 63 3d  endif..  if( rc=
4030: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
4040: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72      assert( p->r
4050: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
4060: 20 20 20 20 70 2d 3e 72 63 20 3d 20 64 6f 57 61      p->rc = doWa
4070: 6c 43 61 6c 6c 62 61 63 6b 73 28 64 62 29 3b 0a  lCallbacks(db);.
4080: 20 20 20 20 69 66 28 20 70 2d 3e 72 63 21 3d 53      if( p->rc!=S
4090: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
40a0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
40b0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ROR;.    }.  }..
40c0: 20 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20    db->errCode = 
40d0: 72 63 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  rc;.  if( SQLITE
40e0: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 41  _NOMEM==sqlite3A
40f0: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 70 2d  piExit(p->db, p-
4100: 3e 72 63 29 20 29 7b 0a 20 20 20 20 70 2d 3e 72  >rc) ){.    p->r
4110: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
4120: 3b 0a 20 20 7d 0a 65 6e 64 5f 6f 66 5f 73 74 65  ;.  }.end_of_ste
4130: 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69 73 20  p:.  /* At this 
4140: 70 6f 69 6e 74 20 6c 6f 63 61 6c 20 76 61 72 69  point local vari
4150: 61 62 6c 65 20 72 63 20 68 6f 6c 64 73 20 74 68  able rc holds th
4160: 65 20 76 61 6c 75 65 20 74 68 61 74 20 73 68 6f  e value that sho
4170: 75 6c 64 20 62 65 20 0a 20 20 2a 2a 20 72 65 74  uld be .  ** ret
4180: 75 72 6e 65 64 20 69 66 20 74 68 69 73 20 73 74  urned if this st
4190: 61 74 65 6d 65 6e 74 20 77 61 73 20 63 6f 6d 70  atement was comp
41a0: 69 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 6c  iled using the l
41b0: 65 67 61 63 79 20 0a 20 20 2a 2a 20 73 71 6c 69  egacy .  ** sqli
41c0: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 69 6e  te3_prepare() in
41d0: 74 65 72 66 61 63 65 2e 20 41 63 63 6f 72 64 69  terface. Accordi
41e0: 6e 67 20 74 6f 20 74 68 65 20 64 6f 63 73 2c 20  ng to the docs, 
41f0: 74 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  this can only.  
4200: 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
4210: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
4220: 69 72 73 74 20 61 73 73 65 72 74 28 29 20 62 65  irst assert() be
4230: 6c 6f 77 2e 20 56 61 72 69 61 62 6c 65 20 70 2d  low. Variable p-
4240: 3e 72 63 20 0a 20 20 2a 2a 20 63 6f 6e 74 61 69  >rc .  ** contai
4250: 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
4260: 74 20 77 6f 75 6c 64 20 62 65 20 72 65 74 75 72  t would be retur
4270: 6e 65 64 20 69 66 20 73 71 6c 69 74 65 33 5f 66  ned if sqlite3_f
4280: 69 6e 61 6c 69 7a 65 28 29 20 0a 20 20 2a 2a 20  inalize() .  ** 
4290: 77 65 72 65 20 63 61 6c 6c 65 64 20 6f 6e 20 73  were called on s
42a0: 74 61 74 65 6d 65 6e 74 20 70 2e 0a 20 20 2a 2f  tatement p..  */
42b0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
42c0: 51 4c 49 54 45 5f 52 4f 57 20 20 7c 7c 20 72 63  QLITE_ROW  || rc
42d0: 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 20 20  ==SQLITE_DONE   
42e0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
42f0: 52 4f 52 20 0a 20 20 20 20 20 20 20 7c 7c 20 72  ROR .       || r
4300: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
4310: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4d 49 53  | rc==SQLITE_MIS
4320: 55 53 45 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  USE.  );.  asser
4330: 74 28 20 28 70 2d 3e 72 63 21 3d 53 51 4c 49 54  t( (p->rc!=SQLIT
4340: 45 5f 52 4f 57 20 26 26 20 70 2d 3e 72 63 21 3d  E_ROW && p->rc!=
4350: 53 51 4c 49 54 45 5f 44 4f 4e 45 29 20 7c 7c 20  SQLITE_DONE) || 
4360: 70 2d 3e 72 63 3d 3d 70 2d 3e 72 63 41 70 70 20  p->rc==p->rcApp 
4370: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 69 73 50 72  );.  if( p->isPr
4380: 65 70 61 72 65 56 32 20 26 26 20 72 63 21 3d 53  epareV2 && rc!=S
4390: 51 4c 49 54 45 5f 52 4f 57 20 26 26 20 72 63 21  QLITE_ROW && rc!
43a0: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
43b0: 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73      /* If this s
43c0: 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
43d0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  pared using sqli
43e0: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
43f0: 2c 20 61 6e 64 20 61 6e 0a 20 20 20 20 2a 2a 20  , and an.    ** 
4400: 65 72 72 6f 72 20 68 61 73 20 6f 63 63 75 72 72  error has occurr
4410: 65 64 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20  ed, then return 
4420: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69  the error code i
4430: 6e 20 70 2d 3e 72 63 20 74 6f 20 74 68 65 0a 20  n p->rc to the. 
4440: 20 20 20 2a 2a 20 63 61 6c 6c 65 72 2e 20 53 65     ** caller. Se
4450: 74 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  t the error code
4460: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4470: 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 73   handle to the s
4480: 61 6d 65 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  ame value..    *
4490: 2f 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  / .    rc = sqli
44a0: 74 65 33 56 64 62 65 54 72 61 6e 73 66 65 72 45  te3VdbeTransferE
44b0: 72 72 6f 72 28 70 29 3b 0a 20 20 7d 0a 20 20 72  rror(p);.  }.  r
44c0: 65 74 75 72 6e 20 28 72 63 26 64 62 2d 3e 65 72  eturn (rc&db->er
44d0: 72 4d 61 73 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rMask);.}../*.**
44e0: 20 54 68 69 73 20 69 73 20 74 68 65 20 74 6f 70   This is the top
44f0: 2d 6c 65 76 65 6c 20 69 6d 70 6c 65 6d 65 6e 74  -level implement
4500: 61 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65 33  ation of sqlite3
4510: 5f 73 74 65 70 28 29 2e 20 20 43 61 6c 6c 0a 2a  _step().  Call.*
4520: 2a 20 73 71 6c 69 74 65 33 53 74 65 70 28 29 20  * sqlite3Step() 
4530: 74 6f 20 64 6f 20 6d 6f 73 74 20 6f 66 20 74 68  to do most of th
4540: 65 20 77 6f 72 6b 2e 20 20 49 66 20 61 20 73 63  e work.  If a sc
4550: 68 65 6d 61 20 65 72 72 6f 72 20 6f 63 63 75 72  hema error occur
4560: 73 2c 0a 2a 2a 20 63 61 6c 6c 20 73 71 6c 69 74  s,.** call sqlit
4570: 65 33 52 65 70 72 65 70 61 72 65 28 29 20 61 6e  e3Reprepare() an
4580: 64 20 74 72 79 20 61 67 61 69 6e 2e 0a 2a 2f 0a  d try again..*/.
4590: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 65 70  int sqlite3_step
45a0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
45b0: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 20  Stmt){.  int rc 
45c0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
45d0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 66 72 6f 6d    /* Result from
45e0: 20 73 71 6c 69 74 65 33 53 74 65 70 28 29 20 2a   sqlite3Step() *
45f0: 2f 0a 20 20 69 6e 74 20 72 63 32 20 3d 20 53 51  /.  int rc2 = SQ
4600: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 2f 2a 20  LITE_OK;     /* 
4610: 52 65 73 75 6c 74 20 66 72 6f 6d 20 73 71 6c 69  Result from sqli
4620: 74 65 33 52 65 70 72 65 70 61 72 65 28 29 20 2a  te3Reprepare() *
4630: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 28 56  /.  Vdbe *v = (V
4640: 64 62 65 2a 29 70 53 74 6d 74 3b 20 20 2f 2a 20  dbe*)pStmt;  /* 
4650: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
4660: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  tement */.  int 
4670: 63 6e 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  cnt = 0;        
4680: 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
4690: 74 6f 20 70 72 65 76 65 6e 74 20 69 6e 66 69 6e  to prevent infin
46a0: 69 74 65 20 6c 6f 6f 70 20 6f 66 20 72 65 70 72  ite loop of repr
46b0: 65 70 61 72 65 73 20 2a 2f 0a 20 20 73 71 6c 69  epares */.  sqli
46c0: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
46d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
46e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
46f0: 2a 2f 0a 0a 20 20 69 66 28 20 76 64 62 65 53 61  */..  if( vdbeSa
4700: 66 65 74 79 4e 6f 74 4e 75 6c 6c 28 76 29 20 29  fetyNotNull(v) )
4710: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
4720: 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
4730: 0a 20 20 7d 0a 20 20 64 62 20 3d 20 76 2d 3e 64  .  }.  db = v->d
4740: 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  b;.  sqlite3_mut
4750: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
4760: 65 78 29 3b 0a 20 20 76 2d 3e 64 6f 69 6e 67 52  ex);.  v->doingR
4770: 65 72 75 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c  erun = 0;.  whil
4780: 65 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  e( (rc = sqlite3
4790: 53 74 65 70 28 76 29 29 3d 3d 53 51 4c 49 54 45  Step(v))==SQLITE
47a0: 5f 53 43 48 45 4d 41 0a 20 20 20 20 20 20 20 20  _SCHEMA.        
47b0: 20 26 26 20 63 6e 74 2b 2b 20 3c 20 53 51 4c 49   && cnt++ < SQLI
47c0: 54 45 5f 4d 41 58 5f 53 43 48 45 4d 41 5f 52 45  TE_MAX_SCHEMA_RE
47d0: 54 52 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 73  TRY ){.    int s
47e0: 61 76 65 64 50 63 20 3d 20 76 2d 3e 70 63 3b 0a  avedPc = v->pc;.
47f0: 20 20 20 20 72 63 32 20 3d 20 72 63 20 3d 20 73      rc2 = rc = s
4800: 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
4810: 76 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  v);.    if( rc!=
4820: 53 51 4c 49 54 45 5f 4f 4b 29 20 62 72 65 61 6b  SQLITE_OK) break
4830: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ;.    sqlite3_re
4840: 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  set(pStmt);.    
4850: 69 66 28 20 73 61 76 65 64 50 63 3e 3d 30 20 29  if( savedPc>=0 )
4860: 20 76 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 20 3d   v->doingRerun =
4870: 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
4880: 76 2d 3e 65 78 70 69 72 65 64 3d 3d 30 20 29 3b  v->expired==0 );
4890: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 32 21 3d  .  }.  if( rc2!=
48a0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
48b0: 20 2f 2a 20 54 68 69 73 20 63 61 73 65 20 6f 63   /* This case oc
48c0: 63 75 72 73 20 61 66 74 65 72 20 66 61 69 6c 69  curs after faili
48d0: 6e 67 20 74 6f 20 72 65 63 6f 6d 70 69 6c 65 20  ng to recompile 
48e0: 61 6e 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74  an sql statement
48f0: 2e 20 0a 20 20 20 20 2a 2a 20 54 68 65 20 65 72  . .    ** The er
4900: 72 6f 72 20 6d 65 73 73 61 67 65 20 66 72 6f 6d  ror message from
4910: 20 74 68 65 20 53 51 4c 20 63 6f 6d 70 69 6c 65   the SQL compile
4920: 72 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  r has already be
4930: 65 6e 20 6c 6f 61 64 65 64 20 0a 20 20 20 20 2a  en loaded .    *
4940: 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  * into the datab
4950: 61 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73  ase handle. This
4960: 20 62 6c 6f 63 6b 20 63 6f 70 69 65 73 20 74 68   block copies th
4970: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4980: 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20 74 68 65  .    ** from the
4990: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
49a0: 20 69 6e 74 6f 20 74 68 65 20 73 74 61 74 65 6d   into the statem
49b0: 65 6e 74 20 61 6e 64 20 73 65 74 73 20 74 68 65  ent and sets the
49c0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 20 20 2a   statement.    *
49d0: 2a 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * program counte
49e0: 72 20 74 6f 20 30 20 74 6f 20 65 6e 73 75 72 65  r to 0 to ensure
49f0: 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20 73   that when the s
4a00: 74 61 74 65 6d 65 6e 74 20 69 73 20 0a 20 20 20  tatement is .   
4a10: 20 2a 2a 20 66 69 6e 61 6c 69 7a 65 64 20 6f 72   ** finalized or
4a20: 20 72 65 73 65 74 20 74 68 65 20 70 61 72 73 65   reset the parse
4a30: 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  r error message 
4a40: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 76 69 61  is available via
4a50: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4a60: 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c  errmsg() and sql
4a70: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2e 0a  ite3_errcode()..
4a80: 20 20 20 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74      */.    const
4a90: 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 28 63   char *zErr = (c
4aa0: 6f 6e 73 74 20 63 68 61 72 20 2a 29 73 71 6c 69  onst char *)sqli
4ab0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 64  te3_value_text(d
4ac0: 62 2d 3e 70 45 72 72 29 3b 20 0a 20 20 20 20 73  b->pErr); .    s
4ad0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
4ae0: 20 76 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   v->zErrMsg);.  
4af0: 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f    if( !db->mallo
4b00: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20  cFailed ){.     
4b10: 20 76 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   v->zErrMsg = sq
4b20: 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62  lite3DbStrDup(db
4b30: 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20 76  , zErr);.      v
4b40: 2d 3e 72 63 20 3d 20 72 63 32 3b 0a 20 20 20 20  ->rc = rc2;.    
4b50: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 76  } else {.      v
4b60: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
4b70: 20 20 20 20 20 76 2d 3e 72 63 20 3d 20 72 63 20       v->rc = rc 
4b80: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
4b90: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
4ba0: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
4bb0: 64 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74  db, rc);.  sqlit
4bc0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
4bd0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
4be0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn rc;.}.../*.*
4bf0: 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 75 73  * Extract the us
4c00: 65 72 20 64 61 74 61 20 66 72 6f 6d 20 61 20 73  er data from a s
4c10: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
4c20: 74 72 75 63 74 75 72 65 20 61 6e 64 20 72 65 74  tructure and ret
4c30: 75 72 6e 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72  urn a.** pointer
4c40: 20 74 6f 20 69 74 2e 0a 2a 2f 0a 76 6f 69 64 20   to it..*/.void 
4c50: 2a 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  *sqlite3_user_da
4c60: 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ta(sqlite3_conte
4c70: 78 74 20 2a 70 29 7b 0a 20 20 61 73 73 65 72 74  xt *p){.  assert
4c80: 28 20 70 20 26 26 20 70 2d 3e 70 46 75 6e 63 20  ( p && p->pFunc 
4c90: 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 70  );.  return p->p
4ca0: 46 75 6e 63 2d 3e 70 55 73 65 72 44 61 74 61 3b  Func->pUserData;
4cb0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63  .}../*.** Extrac
4cc0: 74 20 74 68 65 20 75 73 65 72 20 64 61 74 61 20  t the user data 
4cd0: 66 72 6f 6d 20 61 20 73 71 6c 69 74 65 33 5f 63  from a sqlite3_c
4ce0: 6f 6e 74 65 78 74 20 73 74 72 75 63 74 75 72 65  ontext structure
4cf0: 20 61 6e 64 20 72 65 74 75 72 6e 20 61 0a 2a 2a   and return a.**
4d00: 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a   pointer to it..
4d10: 2a 2a 0a 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41  **.** IMPLEMENTA
4d20: 54 49 4f 4e 2d 4f 46 3a 20 52 2d 34 36 37 39 38  TION-OF: R-46798
4d30: 2d 35 30 33 30 31 20 54 68 65 20 73 71 6c 69 74  -50301 The sqlit
4d40: 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62 5f 68 61  e3_context_db_ha
4d50: 6e 64 6c 65 28 29 20 69 6e 74 65 72 66 61 63 65  ndle() interface
4d60: 0a 2a 2a 20 72 65 74 75 72 6e 73 20 61 20 63 6f  .** returns a co
4d70: 70 79 20 6f 66 20 74 68 65 20 70 6f 69 6e 74 65  py of the pointe
4d80: 72 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  r to the databas
4d90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 74 68  e connection (th
4da0: 65 20 31 73 74 0a 2a 2a 20 70 61 72 61 6d 65 74  e 1st.** paramet
4db0: 65 72 29 20 6f 66 20 74 68 65 20 73 71 6c 69 74  er) of the sqlit
4dc0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
4dd0: 6f 6e 28 29 20 61 6e 64 0a 2a 2a 20 73 71 6c 69  on() and.** sqli
4de0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
4df0: 69 6f 6e 31 36 28 29 20 72 6f 75 74 69 6e 65 73  ion16() routines
4e00: 20 74 68 61 74 20 6f 72 69 67 69 6e 61 6c 6c 79   that originally
4e10: 20 72 65 67 69 73 74 65 72 65 64 20 74 68 65 0a   registered the.
4e20: 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ** application d
4e30: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 2e  efined function.
4e40: 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73 71 6c  .*/.sqlite3 *sql
4e50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 64 62 5f  ite3_context_db_
4e60: 68 61 6e 64 6c 65 28 73 71 6c 69 74 65 33 5f 63  handle(sqlite3_c
4e70: 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61 73  ontext *p){.  as
4e80: 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70 46  sert( p && p->pF
4e90: 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  unc );.  return 
4ea0: 70 2d 3e 70 4f 75 74 2d 3e 64 62 3b 0a 7d 0a 0a  p->pOut->db;.}..
4eb0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4ec0: 20 63 75 72 72 65 6e 74 20 74 69 6d 65 20 66 6f   current time fo
4ed0: 72 20 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  r a statement.  
4ee0: 49 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  If the current t
4ef0: 69 6d 65 0a 2a 2a 20 69 73 20 72 65 71 75 65 73  ime.** is reques
4f00: 74 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ted more than on
4f10: 63 65 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ce within the sa
4f20: 6d 65 20 72 75 6e 20 6f 66 20 61 20 73 69 6e 67  me run of a sing
4f30: 6c 65 20 70 72 65 70 61 72 65 64 0a 2a 2a 20 73  le prepared.** s
4f40: 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 20 65 78  tatement, the ex
4f50: 61 63 74 20 73 61 6d 65 20 74 69 6d 65 20 69 73  act same time is
4f60: 20 72 65 74 75 72 6e 65 64 20 66 6f 72 20 65 61   returned for ea
4f70: 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 72 65  ch invocation re
4f80: 67 61 72 64 6c 65 73 73 0a 2a 2a 20 6f 66 20 74  gardless.** of t
4f90: 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  he amount of tim
4fa0: 65 20 74 68 61 74 20 65 6c 61 70 73 65 73 20 62  e that elapses b
4fb0: 65 74 77 65 65 6e 20 69 6e 76 6f 63 61 74 69 6f  etween invocatio
4fc0: 6e 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ns.  In other wo
4fd0: 72 64 73 2c 0a 2a 2a 20 74 68 65 20 74 69 6d 65  rds,.** the time
4fe0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6c 77   returned is alw
4ff0: 61 79 73 20 74 68 65 20 74 69 6d 65 20 6f 66 20  ays the time of 
5000: 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c 2e 0a  the first call..
5010: 2a 2f 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  */.sqlite3_int64
5020: 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
5030: 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
5040: 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 69  context *p){.  i
5050: 6e 74 20 72 63 3b 0a 23 69 66 6e 64 65 66 20 53  nt rc;.#ifndef S
5060: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5070: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 73 71  T3_OR_STAT4.  sq
5080: 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a 70 69 54  lite3_int64 *piT
5090: 69 6d 65 20 3d 20 26 70 2d 3e 70 56 64 62 65 2d  ime = &p->pVdbe-
50a0: 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 3b 0a 20  >iCurrentTime;. 
50b0: 20 61 73 73 65 72 74 28 20 70 2d 3e 70 56 64 62   assert( p->pVdb
50c0: 65 21 3d 30 20 29 3b 0a 23 65 6c 73 65 0a 20 20  e!=0 );.#else.  
50d0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 54  sqlite3_int64 iT
50e0: 69 6d 65 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ime = 0;.  sqlit
50f0: 65 33 5f 69 6e 74 36 34 20 2a 70 69 54 69 6d 65  e3_int64 *piTime
5100: 20 3d 20 70 2d 3e 70 56 64 62 65 21 3d 30 20 3f   = p->pVdbe!=0 ?
5110: 20 26 70 2d 3e 70 56 64 62 65 2d 3e 69 43 75 72   &p->pVdbe->iCur
5120: 72 65 6e 74 54 69 6d 65 20 3a 20 26 69 54 69 6d  rentTime : &iTim
5130: 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  e;.#endif.  if( 
5140: 2a 70 69 54 69 6d 65 3d 3d 30 20 29 7b 0a 20 20  *piTime==0 ){.  
5150: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
5160: 43 75 72 72 65 6e 74 54 69 6d 65 49 6e 74 36 34  CurrentTimeInt64
5170: 28 70 2d 3e 70 4f 75 74 2d 3e 64 62 2d 3e 70 56  (p->pOut->db->pV
5180: 66 73 2c 20 70 69 54 69 6d 65 29 3b 0a 20 20 20  fs, piTime);.   
5190: 20 69 66 28 20 72 63 20 29 20 2a 70 69 54 69 6d   if( rc ) *piTim
51a0: 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74  e = 0;.  }.  ret
51b0: 75 72 6e 20 2a 70 69 54 69 6d 65 3b 0a 7d 0a 0a  urn *piTime;.}..
51c0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
51d0: 69 6e 67 20 69 73 20 74 68 65 20 69 6d 70 6c 65  ing is the imple
51e0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20  mentation of an 
51f0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  SQL function tha
5200: 74 20 61 6c 77 61 79 73 0a 2a 2a 20 66 61 69 6c  t always.** fail
5210: 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
5220: 6d 65 73 73 61 67 65 20 73 74 61 74 69 6e 67 20  message stating 
5230: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
5240: 6e 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  n is used in the
5250: 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f 6e 74 65 78  .** wrong contex
5260: 74 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  t.  The sqlite3_
5270: 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
5280: 6e 28 29 20 41 50 49 20 6d 69 67 68 74 20 63 6f  n() API might co
5290: 6e 73 74 72 75 63 74 0a 2a 2a 20 53 51 4c 20 66  nstruct.** SQL f
52a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73 65  unction that use
52b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 73 6f   this routine so
52c0: 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69   that the functi
52d0: 6f 6e 73 20 77 69 6c 6c 20 65 78 69 73 74 0a 2a  ons will exist.*
52e0: 2a 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  * for name resol
52f0: 75 74 69 6f 6e 20 62 75 74 20 61 72 65 20 61 63  ution but are ac
5300: 74 75 61 6c 6c 79 20 6f 76 65 72 6c 6f 61 64 65  tually overloade
5310: 64 20 62 79 20 74 68 65 20 78 46 69 6e 64 46 75  d by the xFindFu
5320: 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f 64  nction.** method
5330: 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
5340: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
5350: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
5360: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  on(.  sqlite3_co
5370: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
5380: 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e   /* The function
5390: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74   calling context
53a0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65   */.  int NotUse
53b0: 64 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d,              
53c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
53d0: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
53e0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  unction */.  sql
53f0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 4e 6f 74  ite3_value **Not
5400: 55 73 65 64 32 20 20 20 2f 2a 20 56 61 6c 75 65  Used2   /* Value
5410: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
5420: 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  t */.){.  const 
5430: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 63 6f  char *zName = co
5440: 6e 74 65 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a 4e  ntext->pFunc->zN
5450: 61 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  ame;.  char *zEr
5460: 72 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  r;.  UNUSED_PARA
5470: 4d 45 54 45 52 32 28 4e 6f 74 55 73 65 64 2c 20  METER2(NotUsed, 
5480: 4e 6f 74 55 73 65 64 32 29 3b 0a 20 20 7a 45 72  NotUsed2);.  zEr
5490: 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
54a0: 6e 74 66 28 0a 20 20 20 20 20 20 22 75 6e 61 62  ntf(.      "unab
54b0: 6c 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69  le to use functi
54c0: 6f 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71  on %s in the req
54d0: 75 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c  uested context",
54e0: 20 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74   zName);.  sqlit
54f0: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
5500: 63 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d  context, zErr, -
5510: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  1);.  sqlite3_fr
5520: 65 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  ee(zErr);.}../*.
5530: 2a 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  ** Create a new 
5540: 61 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65 78  aggregate contex
5550: 74 20 66 6f 72 20 70 20 61 6e 64 20 72 65 74 75  t for p and retu
5560: 72 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  rn a pointer to.
5570: 2a 2a 20 69 74 73 20 70 4d 65 6d 2d 3e 7a 20 65  ** its pMem->z e
5580: 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  lement..*/.stati
5590: 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  c SQLITE_NOINLIN
55a0: 45 20 76 6f 69 64 20 2a 63 72 65 61 74 65 41 67  E void *createAg
55b0: 67 43 6f 6e 74 65 78 74 28 73 71 6c 69 74 65 33  gContext(sqlite3
55c0: 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74  _context *p, int
55d0: 20 6e 42 79 74 65 29 7b 0a 20 20 4d 65 6d 20 2a   nByte){.  Mem *
55e0: 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d 3b 0a  pMem = p->pMem;.
55f0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
5600: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 41 67 67  >flags & MEM_Agg
5610: 29 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 6e 42  )==0 );.  if( nB
5620: 79 74 65 3c 3d 30 20 29 7b 0a 20 20 20 20 73 71  yte<=0 ){.    sq
5630: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
5640: 75 6c 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20 70  ull(pMem);.    p
5650: 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 7d 65  Mem->z = 0;.  }e
5660: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
5670: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
5680: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
5690: 65 29 3b 0a 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  e);.    pMem->fl
56a0: 61 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20  ags = MEM_Agg;. 
56b0: 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65 66 20     pMem->u.pDef 
56c0: 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20 20 20  = p->pFunc;.    
56d0: 69 66 28 20 70 4d 65 6d 2d 3e 7a 20 29 7b 0a 20  if( pMem->z ){. 
56e0: 20 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d       memset(pMem
56f0: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
5700: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
5710: 72 6e 20 28 76 6f 69 64 2a 29 70 4d 65 6d 2d 3e  rn (void*)pMem->
5720: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  z;.}../*.** Allo
5730: 63 61 74 65 20 6f 72 20 72 65 74 75 72 6e 20 74  cate or return t
5740: 68 65 20 61 67 67 72 65 67 61 74 65 20 63 6f 6e  he aggregate con
5750: 74 65 78 74 20 66 6f 72 20 61 20 75 73 65 72 20  text for a user 
5760: 66 75 6e 63 74 69 6f 6e 2e 20 20 41 20 6e 65 77  function.  A new
5770: 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 61  .** context is a
5780: 6c 6c 6f 63 61 74 65 64 20 6f 6e 20 74 68 65 20  llocated on the 
5790: 66 69 72 73 74 20 63 61 6c 6c 2e 20 20 53 75 62  first call.  Sub
57a0: 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 72 65  sequent calls re
57b0: 74 75 72 6e 20 74 68 65 0a 2a 2a 20 73 61 6d 65  turn the.** same
57c0: 20 63 6f 6e 74 65 78 74 20 74 68 61 74 20 77 61   context that wa
57d0: 73 20 72 65 74 75 72 6e 65 64 20 6f 6e 20 70 72  s returned on pr
57e0: 69 6f 72 20 63 61 6c 6c 73 2e 0a 2a 2f 0a 76 6f  ior calls..*/.vo
57f0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 61 67 67 72  id *sqlite3_aggr
5800: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 73 71  egate_context(sq
5810: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5820: 2c 20 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20 20  , int nByte){.  
5830: 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e  assert( p && p->
5840: 70 46 75 6e 63 20 26 26 20 70 2d 3e 70 46 75 6e  pFunc && p->pFun
5850: 63 2d 3e 78 53 74 65 70 20 29 3b 0a 20 20 61 73  c->xStep );.  as
5860: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
5870: 74 65 78 5f 68 65 6c 64 28 70 2d 3e 70 4f 75 74  tex_held(p->pOut
5880: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  ->db->mutex) );.
5890: 20 20 74 65 73 74 63 61 73 65 28 20 6e 42 79 74    testcase( nByt
58a0: 65 3c 30 20 29 3b 0a 20 20 69 66 28 20 28 70 2d  e<0 );.  if( (p-
58b0: 3e 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  >pMem->flags & M
58c0: 45 4d 5f 41 67 67 29 3d 3d 30 20 29 7b 0a 20 20  EM_Agg)==0 ){.  
58d0: 20 20 72 65 74 75 72 6e 20 63 72 65 61 74 65 41    return createA
58e0: 67 67 43 6f 6e 74 65 78 74 28 70 2c 20 6e 42 79  ggContext(p, nBy
58f0: 74 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  te);.  }else{.  
5900: 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a 29    return (void*)
5910: 70 2d 3e 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 7d 0a  p->pMem->z;.  }.
5920: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
5930: 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
5940: 74 61 20 70 6f 69 6e 74 65 72 2c 20 69 66 20 61  ta pointer, if a
5950: 6e 79 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67  ny, for the iArg
5960: 27 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  'th argument to.
5970: 2a 2a 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  ** the user-func
5980: 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20  tion defined by 
5990: 70 43 74 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  pCtx..*/.void *s
59a0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 78 64 61  qlite3_get_auxda
59b0: 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ta(sqlite3_conte
59c0: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 41  xt *pCtx, int iA
59d0: 72 67 29 7b 0a 20 20 41 75 78 44 61 74 61 20 2a  rg){.  AuxData *
59e0: 70 41 75 78 44 61 74 61 3b 0a 0a 20 20 61 73 73  pAuxData;..  ass
59f0: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
5a00: 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 70 4f  ex_held(pCtx->pO
5a10: 75 74 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 20 29  ut->db->mutex) )
5a20: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
5a30: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
5a40: 54 34 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  T4.  if( pCtx->p
5a50: 56 64 62 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Vdbe==0 ) return
5a60: 20 30 3b 0a 23 65 6c 73 65 0a 20 20 61 73 73 65   0;.#else.  asse
5a70: 72 74 28 20 70 43 74 78 2d 3e 70 56 64 62 65 21  rt( pCtx->pVdbe!
5a80: 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  =0 );.#endif.  f
5a90: 6f 72 28 70 41 75 78 44 61 74 61 3d 70 43 74 78  or(pAuxData=pCtx
5aa0: 2d 3e 70 56 64 62 65 2d 3e 70 41 75 78 44 61 74  ->pVdbe->pAuxDat
5ab0: 61 3b 20 70 41 75 78 44 61 74 61 3b 20 70 41 75  a; pAuxData; pAu
5ac0: 78 44 61 74 61 3d 70 41 75 78 44 61 74 61 2d 3e  xData=pAuxData->
5ad0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
5ae0: 70 41 75 78 44 61 74 61 2d 3e 69 4f 70 3d 3d 70  pAuxData->iOp==p
5af0: 43 74 78 2d 3e 69 4f 70 20 26 26 20 70 41 75 78  Ctx->iOp && pAux
5b00: 44 61 74 61 2d 3e 69 41 72 67 3d 3d 69 41 72 67  Data->iArg==iArg
5b10: 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
5b20: 20 72 65 74 75 72 6e 20 28 70 41 75 78 44 61 74   return (pAuxDat
5b30: 61 20 3f 20 70 41 75 78 44 61 74 61 2d 3e 70 41  a ? pAuxData->pA
5b40: 75 78 20 3a 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ux : 0);.}../*.*
5b50: 2a 20 53 65 74 20 74 68 65 20 61 75 78 69 6c 69  * Set the auxili
5b60: 61 72 79 20 64 61 74 61 20 70 6f 69 6e 74 65 72  ary data pointer
5b70: 20 61 6e 64 20 64 65 6c 65 74 65 20 66 75 6e 63   and delete func
5b80: 74 69 6f 6e 2c 20 66 6f 72 20 74 68 65 20 69 41  tion, for the iA
5b90: 72 67 27 74 68 0a 2a 2a 20 61 72 67 75 6d 65 6e  rg'th.** argumen
5ba0: 74 20 74 6f 20 74 68 65 20 75 73 65 72 2d 66 75  t to the user-fu
5bb0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 62  nction defined b
5bc0: 79 20 70 43 74 78 2e 20 41 6e 79 20 70 72 65 76  y pCtx. Any prev
5bd0: 69 6f 75 73 20 76 61 6c 75 65 20 69 73 0a 2a 2a  ious value is.**
5be0: 20 64 65 6c 65 74 65 64 20 62 79 20 63 61 6c 6c   deleted by call
5bf0: 69 6e 67 20 74 68 65 20 64 65 6c 65 74 65 20 66  ing the delete f
5c00: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
5c10: 64 20 77 68 65 6e 20 69 74 20 77 61 73 20 73 65  d when it was se
5c20: 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  t..*/.void sqlit
5c30: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 0a  e3_set_auxdata(.
5c40: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
5c50: 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20  t *pCtx, .  int 
5c60: 69 41 72 67 2c 20 0a 20 20 76 6f 69 64 20 2a 70  iArg, .  void *p
5c70: 41 75 78 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  Aux, .  void (*x
5c80: 44 65 6c 65 74 65 29 28 76 6f 69 64 2a 29 0a 29  Delete)(void*).)
5c90: 7b 0a 20 20 41 75 78 44 61 74 61 20 2a 70 41 75  {.  AuxData *pAu
5ca0: 78 44 61 74 61 3b 0a 20 20 56 64 62 65 20 2a 70  xData;.  Vdbe *p
5cb0: 56 64 62 65 20 3d 20 70 43 74 78 2d 3e 70 56 64  Vdbe = pCtx->pVd
5cc0: 62 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73  be;..  assert( s
5cd0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
5ce0: 64 28 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 64 62  d(pCtx->pOut->db
5cf0: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 69 66  ->mutex) );.  if
5d00: 28 20 69 41 72 67 3c 30 20 29 20 67 6f 74 6f 20  ( iArg<0 ) goto 
5d10: 66 61 69 6c 65 64 3b 0a 23 69 66 64 65 66 20 53  failed;.#ifdef S
5d20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5d30: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 66  T3_OR_STAT4.  if
5d40: 28 20 70 56 64 62 65 3d 3d 30 20 29 20 67 6f 74  ( pVdbe==0 ) got
5d50: 6f 20 66 61 69 6c 65 64 3b 0a 23 65 6c 73 65 0a  o failed;.#else.
5d60: 20 20 61 73 73 65 72 74 28 20 70 56 64 62 65 21    assert( pVdbe!
5d70: 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  =0 );.#endif..  
5d80: 66 6f 72 28 70 41 75 78 44 61 74 61 3d 70 56 64  for(pAuxData=pVd
5d90: 62 65 2d 3e 70 41 75 78 44 61 74 61 3b 20 70 41  be->pAuxData; pA
5da0: 75 78 44 61 74 61 3b 20 70 41 75 78 44 61 74 61  uxData; pAuxData
5db0: 3d 70 41 75 78 44 61 74 61 2d 3e 70 4e 65 78 74  =pAuxData->pNext
5dc0: 29 7b 0a 20 20 20 20 69 66 28 20 70 41 75 78 44  ){.    if( pAuxD
5dd0: 61 74 61 2d 3e 69 4f 70 3d 3d 70 43 74 78 2d 3e  ata->iOp==pCtx->
5de0: 69 4f 70 20 26 26 20 70 41 75 78 44 61 74 61 2d  iOp && pAuxData-
5df0: 3e 69 41 72 67 3d 3d 69 41 72 67 20 29 20 62 72  >iArg==iArg ) br
5e00: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  eak;.  }.  if( p
5e10: 41 75 78 44 61 74 61 3d 3d 30 20 29 7b 0a 20 20  AuxData==0 ){.  
5e20: 20 20 70 41 75 78 44 61 74 61 20 3d 20 73 71 6c    pAuxData = sql
5e30: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
5e40: 28 70 56 64 62 65 2d 3e 64 62 2c 20 73 69 7a 65  (pVdbe->db, size
5e50: 6f 66 28 41 75 78 44 61 74 61 29 29 3b 0a 20 20  of(AuxData));.  
5e60: 20 20 69 66 28 20 21 70 41 75 78 44 61 74 61 20    if( !pAuxData 
5e70: 29 20 67 6f 74 6f 20 66 61 69 6c 65 64 3b 0a 20  ) goto failed;. 
5e80: 20 20 20 70 41 75 78 44 61 74 61 2d 3e 69 4f 70     pAuxData->iOp
5e90: 20 3d 20 70 43 74 78 2d 3e 69 4f 70 3b 0a 20 20   = pCtx->iOp;.  
5ea0: 20 20 70 41 75 78 44 61 74 61 2d 3e 69 41 72 67    pAuxData->iArg
5eb0: 20 3d 20 69 41 72 67 3b 0a 20 20 20 20 70 41 75   = iArg;.    pAu
5ec0: 78 44 61 74 61 2d 3e 70 4e 65 78 74 20 3d 20 70  xData->pNext = p
5ed0: 56 64 62 65 2d 3e 70 41 75 78 44 61 74 61 3b 0a  Vdbe->pAuxData;.
5ee0: 20 20 20 20 70 56 64 62 65 2d 3e 70 41 75 78 44      pVdbe->pAuxD
5ef0: 61 74 61 20 3d 20 70 41 75 78 44 61 74 61 3b 0a  ata = pAuxData;.
5f00: 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45      if( pCtx->fE
5f10: 72 72 6f 72 4f 72 41 75 78 3d 3d 30 20 29 7b 0a  rrorOrAux==0 ){.
5f20: 20 20 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72        pCtx->isEr
5f30: 72 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  ror = 0;.      p
5f40: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
5f50: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   = 1;.    }.  }e
5f60: 6c 73 65 20 69 66 28 20 70 41 75 78 44 61 74 61  lse if( pAuxData
5f70: 2d 3e 78 44 65 6c 65 74 65 20 29 7b 0a 20 20 20  ->xDelete ){.   
5f80: 20 70 41 75 78 44 61 74 61 2d 3e 78 44 65 6c 65   pAuxData->xDele
5f90: 74 65 28 70 41 75 78 44 61 74 61 2d 3e 70 41 75  te(pAuxData->pAu
5fa0: 78 29 3b 0a 20 20 7d 0a 0a 20 20 70 41 75 78 44  x);.  }..  pAuxD
5fb0: 61 74 61 2d 3e 70 41 75 78 20 3d 20 70 41 75 78  ata->pAux = pAux
5fc0: 3b 0a 20 20 70 41 75 78 44 61 74 61 2d 3e 78 44  ;.  pAuxData->xD
5fd0: 65 6c 65 74 65 20 3d 20 78 44 65 6c 65 74 65 3b  elete = xDelete;
5fe0: 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 66 61 69 6c  .  return;..fail
5ff0: 65 64 3a 0a 20 20 69 66 28 20 78 44 65 6c 65 74  ed:.  if( xDelet
6000: 65 20 29 7b 0a 20 20 20 20 78 44 65 6c 65 74 65  e ){.    xDelete
6010: 28 70 41 75 78 29 3b 0a 20 20 7d 0a 7d 0a 0a 23  (pAux);.  }.}..#
6020: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6030: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a  IT_DEPRECATED./*
6040: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
6050: 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74  umber of times t
6060: 68 65 20 53 74 65 70 20 66 75 6e 63 74 69 6f 6e  he Step function
6070: 20 6f 66 20 61 6e 20 61 67 67 72 65 67 61 74 65   of an aggregate
6080: 20 68 61 73 20 62 65 65 6e 20 0a 2a 2a 20 63 61   has been .** ca
6090: 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  lled..**.** This
60a0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 70   function is dep
60b0: 72 65 63 61 74 65 64 2e 20 20 44 6f 20 6e 6f 74  recated.  Do not
60c0: 20 75 73 65 20 69 74 20 66 6f 72 20 6e 65 77 20   use it for new 
60d0: 63 6f 64 65 2e 20 20 49 74 20 69 73 0a 2a 2a 20  code.  It is.** 
60e0: 70 72 6f 76 69 64 65 20 6f 6e 6c 79 20 74 6f 20  provide only to 
60f0: 61 76 6f 69 64 20 62 72 65 61 6b 69 6e 67 20 6c  avoid breaking l
6100: 65 67 61 63 79 20 63 6f 64 65 2e 20 20 4e 65 77  egacy code.  New
6110: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
6120: 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ion.** implement
6130: 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64 20 6b 65  ations should ke
6140: 65 70 20 74 68 65 69 72 20 6f 77 6e 20 63 6f 75  ep their own cou
6150: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 69 72  nts within their
6160: 20 61 67 67 72 65 67 61 74 65 0a 2a 2a 20 63 6f   aggregate.** co
6170: 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ntext..*/.int sq
6180: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
6190: 63 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 63 6f  count(sqlite3_co
61a0: 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61 73 73  ntext *p){.  ass
61b0: 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70 4d 65  ert( p && p->pMe
61c0: 6d 20 26 26 20 70 2d 3e 70 46 75 6e 63 20 26 26  m && p->pFunc &&
61d0: 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53 74 65 70   p->pFunc->xStep
61e0: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e   );.  return p->
61f0: 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23 65 6e 64 69  pMem->n;.}.#endi
6200: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
6210: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
6220: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73  lumns in the res
6230: 75 6c 74 20 73 65 74 20 66 6f 72 20 74 68 65 20  ult set for the 
6240: 73 74 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e  statement pStmt.
6250: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6260: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 71 6c  column_count(sql
6270: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
6280: 29 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 20 3d  ){.  Vdbe *pVm =
6290: 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a   (Vdbe *)pStmt;.
62a0: 20 20 72 65 74 75 72 6e 20 70 56 6d 20 3f 20 70    return pVm ? p
62b0: 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 20 3a  Vm->nResColumn :
62c0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   0;.}../*.** Ret
62d0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
62e0: 66 20 76 61 6c 75 65 73 20 61 76 61 69 6c 61 62  f values availab
62f0: 6c 65 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  le from the curr
6300: 65 6e 74 20 72 6f 77 20 6f 66 20 74 68 65 0a 2a  ent row of the.*
6310: 2a 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  * currently exec
6320: 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting 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 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
6350: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
6360: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
6370: 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  Vm = (Vdbe *)pSt
6380: 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 3d 3d 30  mt;.  if( pVm==0
6390: 20 7c 7c 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74   || pVm->pResult
63a0: 53 65 74 3d 3d 30 20 29 20 72 65 74 75 72 6e 20  Set==0 ) return 
63b0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 2d  0;.  return pVm-
63c0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b 0a 7d 0a 0a  >nResColumn;.}..
63d0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70  /*.** Return a p
63e0: 6f 69 6e 74 65 72 20 74 6f 20 73 74 61 74 69 63  ointer to static
63f0: 20 6d 65 6d 6f 72 79 20 63 6f 6e 74 61 69 6e 69   memory containi
6400: 6e 67 20 61 6e 20 53 51 4c 20 4e 55 4c 4c 20 76  ng an SQL NULL v
6410: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
6420: 63 6f 6e 73 74 20 4d 65 6d 20 2a 63 6f 6c 75 6d  const Mem *colum
6430: 6e 4e 75 6c 6c 56 61 6c 75 65 28 76 6f 69 64 29  nNullValue(void)
6440: 7b 0a 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75  {.  /* Even thou
6450: 67 68 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63  gh the Mem struc
6460: 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ture contains an
6470: 20 65 6c 65 6d 65 6e 74 0a 20 20 2a 2a 20 6f 66   element.  ** of
6480: 20 74 79 70 65 20 69 36 34 2c 20 6f 6e 20 63 65   type i64, on ce
6490: 72 74 61 69 6e 20 61 72 63 68 69 74 65 63 74 75  rtain architectu
64a0: 72 65 73 20 28 78 38 36 29 20 77 69 74 68 20 63  res (x86) with c
64b0: 65 72 74 61 69 6e 20 63 6f 6d 70 69 6c 65 72 0a  ertain compiler.
64c0: 20 20 2a 2a 20 73 77 69 74 63 68 65 73 20 28 2d    ** switches (-
64d0: 4f 73 29 2c 20 67 63 63 20 6d 61 79 20 61 6c 69  Os), gcc may ali
64e0: 67 6e 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a 65  gn this Mem obje
64f0: 63 74 20 6f 6e 20 61 20 34 2d 62 79 74 65 20 62  ct on a 4-byte b
6500: 6f 75 6e 64 61 72 79 0a 20 20 2a 2a 20 69 6e 73  oundary.  ** ins
6510: 74 65 61 64 20 6f 66 20 61 6e 20 38 2d 62 79 74  tead of an 8-byt
6520: 65 20 6f 6e 65 2e 20 54 68 69 73 20 61 6c 6c 20  e one. This all 
6530: 77 6f 72 6b 73 20 66 69 6e 65 2c 20 65 78 63 65  works fine, exce
6540: 70 74 20 74 68 61 74 20 77 68 65 6e 0a 20 20 2a  pt that when.  *
6550: 2a 20 72 75 6e 6e 69 6e 67 20 77 69 74 68 20 53  * running with S
6560: 51 4c 49 54 45 5f 44 45 42 55 47 20 64 65 66 69  QLITE_DEBUG defi
6570: 6e 65 64 20 74 68 65 20 53 51 4c 69 74 65 20 63  ned the SQLite c
6580: 6f 64 65 20 73 6f 6d 65 74 69 6d 65 73 20 61 73  ode sometimes as
6590: 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 74 68 61  sert()s.  ** tha
65a0: 74 20 61 20 4d 65 6d 20 73 74 72 75 63 74 75 72  t a Mem structur
65b0: 65 20 69 73 20 6c 6f 63 61 74 65 64 20 6f 6e 20  e is located on 
65c0: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
65d0: 72 79 2e 20 54 6f 20 70 72 65 76 65 6e 74 0a 20  ry. To prevent. 
65e0: 20 2a 2a 20 74 68 65 73 65 20 61 73 73 65 72 74   ** these assert
65f0: 28 29 73 20 66 72 6f 6d 20 66 61 69 6c 69 6e 67  ()s from failing
6600: 2c 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20  , when building 
6610: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55  with SQLITE_DEBU
6620: 47 20 64 65 66 69 6e 65 64 0a 20 20 2a 2a 20 75  G defined.  ** u
6630: 73 69 6e 67 20 67 63 63 2c 20 77 65 20 66 6f 72  sing gcc, we for
6640: 63 65 20 6e 75 6c 6c 4d 65 6d 20 74 6f 20 62 65  ce nullMem to be
6650: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20   8-byte aligned 
6660: 75 73 69 6e 67 20 74 68 65 20 6d 61 67 69 63 61  using the magica
6670: 6c 0a 20 20 2a 2a 20 5f 5f 61 74 74 72 69 62 75  l.  ** __attribu
6680: 74 65 5f 5f 28 28 61 6c 69 67 6e 65 64 28 38 29  te__((aligned(8)
6690: 29 29 20 6d 61 63 72 6f 2e 20 20 2a 2f 0a 20 20  )) macro.  */.  
66a0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 4d 65 6d  static const Mem
66b0: 20 6e 75 6c 6c 4d 65 6d 20 0a 23 69 66 20 64 65   nullMem .#if de
66c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
66d0: 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  UG) && defined(_
66e0: 5f 47 4e 55 43 5f 5f 29 0a 20 20 20 20 5f 5f 61  _GNUC__).    __a
66f0: 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c 69 67  ttribute__((alig
6700: 6e 65 64 28 38 29 29 29 20 0a 23 65 6e 64 69 66  ned(8))) .#endif
6710: 0a 20 20 20 20 3d 20 7b 0a 20 20 20 20 20 20 20  .    = {.       
6720: 20 2f 2a 20 2e 75 20 20 20 20 20 20 20 20 20 20   /* .u          
6730: 3d 20 2a 2f 20 7b 30 7d 2c 0a 20 20 20 20 20 20  = */ {0},.      
6740: 20 20 2f 2a 20 2e 66 6c 61 67 73 20 20 20 20 20    /* .flags     
6750: 20 3d 20 2a 2f 20 4d 45 4d 5f 4e 75 6c 6c 2c 0a   = */ MEM_Null,.
6760: 20 20 20 20 20 20 20 20 2f 2a 20 2e 65 6e 63 20          /* .enc 
6770: 20 20 20 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 20         = */ 0,. 
6780: 20 20 20 20 20 20 20 2f 2a 20 2e 6e 20 20 20 20         /* .n    
6790: 20 20 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 20 20        = */ 0,.  
67a0: 20 20 20 20 20 20 2f 2a 20 2e 7a 20 20 20 20 20        /* .z     
67b0: 20 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 20 20 20       = */ 0,.   
67c0: 20 20 20 20 20 2f 2a 20 2e 7a 4d 61 6c 6c 6f 63       /* .zMalloc
67d0: 20 20 20 20 3d 20 2a 2f 20 30 2c 0a 20 20 20 20      = */ 0,.    
67e0: 20 20 20 20 2f 2a 20 2e 73 7a 4d 61 6c 6c 6f 63      /* .szMalloc
67f0: 20 20 20 3d 20 2a 2f 20 30 2c 0a 20 20 20 20 20     = */ 0,.     
6800: 20 20 20 2f 2a 20 2e 69 50 61 64 64 69 6e 67 31     /* .iPadding1
6810: 20 20 3d 20 2a 2f 20 30 2c 0a 20 20 20 20 20 20    = */ 0,.      
6820: 20 20 2f 2a 20 2e 64 62 20 20 20 20 20 20 20 20    /* .db        
6830: 20 3d 20 2a 2f 20 30 2c 0a 20 20 20 20 20 20 20   = */ 0,.       
6840: 20 2f 2a 20 2e 78 44 65 6c 20 20 20 20 20 20 20   /* .xDel       
6850: 3d 20 2a 2f 20 30 2c 0a 23 69 66 64 65 66 20 53  = */ 0,.#ifdef S
6860: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
6870: 20 20 20 20 2f 2a 20 2e 70 53 63 6f 70 79 46 72      /* .pScopyFr
6880: 6f 6d 20 3d 20 2a 2f 20 30 2c 0a 20 20 20 20 20  om = */ 0,.     
6890: 20 20 20 2f 2a 20 2e 70 46 69 6c 6c 65 72 20 20     /* .pFiller  
68a0: 20 20 3d 20 2a 2f 20 30 2c 0a 23 65 6e 64 69 66    = */ 0,.#endif
68b0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 72 65 74 75  .      };.  retu
68c0: 72 6e 20 26 6e 75 6c 6c 4d 65 6d 3b 0a 7d 0a 0a  rn &nullMem;.}..
68d0: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73  /*.** Check to s
68e0: 65 65 20 69 66 20 63 6f 6c 75 6d 6e 20 69 43 6f  ee if column iCo
68f0: 6c 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 73  l of the given s
6900: 74 61 74 65 6d 65 6e 74 20 69 73 20 76 61 6c 69  tatement is vali
6910: 64 2e 20 20 49 66 0a 2a 2a 20 69 74 20 69 73 2c  d.  If.** it is,
6920: 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
6930: 72 20 74 6f 20 74 68 65 20 4d 65 6d 20 66 6f 72  r to the Mem for
6940: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
6950: 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 49 66  at column..** If
6960: 20 69 43 6f 6c 20 69 73 20 6e 6f 74 20 76 61 6c   iCol is not val
6970: 69 64 2c 20 72 65 74 75 72 6e 20 61 20 70 6f 69  id, return a poi
6980: 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 77 68  nter to a Mem wh
6990: 69 63 68 20 68 61 73 20 61 20 76 61 6c 75 65 0a  ich has a value.
69a0: 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73  ** of NULL..*/.s
69b0: 74 61 74 69 63 20 4d 65 6d 20 2a 63 6f 6c 75 6d  tatic Mem *colum
69c0: 6e 4d 65 6d 28 73 71 6c 69 74 65 33 5f 73 74 6d  nMem(sqlite3_stm
69d0: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
69e0: 7b 0a 20 20 56 64 62 65 20 2a 70 56 6d 3b 0a 20  {.  Vdbe *pVm;. 
69f0: 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70   Mem *pOut;..  p
6a00: 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  Vm = (Vdbe *)pSt
6a10: 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26  mt;.  if( pVm &&
6a20: 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74   pVm->pResultSet
6a30: 21 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52  !=0 && i<pVm->nR
6a40: 65 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30  esColumn && i>=0
6a50: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
6a60: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d  mutex_enter(pVm-
6a70: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
6a80: 20 70 4f 75 74 20 3d 20 26 70 56 6d 2d 3e 70 52   pOut = &pVm->pR
6a90: 65 73 75 6c 74 53 65 74 5b 69 5d 3b 0a 20 20 7d  esultSet[i];.  }
6aa0: 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 56  else{.    if( pV
6ab0: 6d 20 26 26 20 41 4c 57 41 59 53 28 70 56 6d 2d  m && ALWAYS(pVm-
6ac0: 3e 64 62 29 20 29 7b 0a 20 20 20 20 20 20 73 71  >db) ){.      sq
6ad0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
6ae0: 72 28 70 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78  r(pVm->db->mutex
6af0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6b00: 45 72 72 6f 72 28 70 56 6d 2d 3e 64 62 2c 20 53  Error(pVm->db, S
6b10: 51 4c 49 54 45 5f 52 41 4e 47 45 29 3b 0a 20 20  QLITE_RANGE);.  
6b20: 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28    }.    pOut = (
6b30: 4d 65 6d 2a 29 63 6f 6c 75 6d 6e 4e 75 6c 6c 56  Mem*)columnNullV
6b40: 61 6c 75 65 28 29 3b 0a 20 20 7d 0a 20 20 72 65  alue();.  }.  re
6b50: 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 2f 2a  turn pOut;.}../*
6b60: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
6b70: 6e 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  n is called afte
6b80: 72 20 69 6e 76 6f 6b 69 6e 67 20 61 6e 20 73 71  r invoking an sq
6b90: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 58 58 58 20  lite3_value_XXX 
6ba0: 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 61 20 0a 2a  function on a .*
6bb0: 2a 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 28  * column value (
6bc0: 69 2e 65 2e 20 61 20 76 61 6c 75 65 20 72 65 74  i.e. a value ret
6bd0: 75 72 6e 65 64 20 62 79 20 65 76 61 6c 75 61 74  urned by evaluat
6be0: 69 6e 67 20 61 6e 20 53 51 4c 20 65 78 70 72 65  ing an SQL expre
6bf0: 73 73 69 6f 6e 20 69 6e 20 74 68 65 0a 2a 2a 20  ssion in the.** 
6c00: 73 65 6c 65 63 74 20 6c 69 73 74 20 6f 66 20 61  select list of a
6c10: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
6c20: 74 29 20 74 68 61 74 20 6d 61 79 20 63 61 75 73  t) that may caus
6c30: 65 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  e a malloc() fai
6c40: 6c 75 72 65 2e 20 49 66 20 0a 2a 2a 20 6d 61 6c  lure. If .** mal
6c50: 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64  loc() has failed
6c60: 2c 20 74 68 65 20 74 68 72 65 61 64 73 20 6d 61  , the threads ma
6c70: 6c 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20  llocFailed flag 
6c80: 69 73 20 63 6c 65 61 72 65 64 20 61 6e 64 20 74  is cleared and t
6c90: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 63 6f 64  he result.** cod
6ca0: 65 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 20 70  e of statement p
6cb0: 53 74 6d 74 20 73 65 74 20 74 6f 20 53 51 4c 49  Stmt set to SQLI
6cc0: 54 45 5f 4e 4f 4d 45 4d 2e 0a 2a 2a 0a 2a 2a 20  TE_NOMEM..**.** 
6cd0: 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68  Specifically, th
6ce0: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  is is called fro
6cf0: 6d 20 77 69 74 68 69 6e 3a 0a 2a 2a 0a 2a 2a 20  m within:.**.** 
6d00: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
6d10: 6d 6e 5f 69 6e 74 28 29 0a 2a 2a 20 20 20 20 20  mn_int().**     
6d20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
6d30: 6e 74 36 34 28 29 0a 2a 2a 20 20 20 20 20 73 71  nt64().**     sq
6d40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6d50: 74 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  t().**     sqlit
6d60: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
6d70: 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  ().**     sqlite
6d80: 33 5f 63 6f 6c 75 6d 6e 5f 72 65 61 6c 28 29 0a  3_column_real().
6d90: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
6da0: 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 29 0a 2a 2a  olumn_bytes().**
6db0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
6dc0: 75 6d 6e 5f 62 79 74 65 73 31 36 28 29 0a 2a 2a  umn_bytes16().**
6dd0: 20 20 20 20 20 73 71 69 69 74 65 33 5f 63 6f 6c       sqiite3_col
6de0: 75 6d 6e 5f 62 6c 6f 62 28 29 0a 2a 2f 0a 73 74  umn_blob().*/.st
6df0: 61 74 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e  atic void column
6e00: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71  MallocFailure(sq
6e10: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6e20: 74 29 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c  t).{.  /* If mal
6e30: 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72  loc() failed dur
6e40: 69 6e 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20  ing an encoding 
6e50: 63 6f 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69  conversion withi
6e60: 6e 20 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n an.  ** sqlite
6e70: 33 5f 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49  3_column_XXX API
6e80: 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 72  , then set the r
6e90: 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68  eturn code of th
6ea0: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20  e statement to. 
6eb0: 20 2a 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   ** SQLITE_NOMEM
6ec0: 2e 20 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  . The next call 
6ed0: 74 6f 20 5f 73 74 65 70 28 29 20 28 69 66 20 61  to _step() (if a
6ee0: 6e 79 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ny) will return 
6ef0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a  SQLITE_ERROR.  *
6f00: 2a 20 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28  * and _finalize(
6f10: 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f  ) will return NO
6f20: 4d 45 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65  MEM..  */.  Vdbe
6f30: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
6f40: 74 6d 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a  tmt;.  if( p ){.
6f50: 20 20 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69      p->rc = sqli
6f60: 74 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62  te3ApiExit(p->db
6f70: 2c 20 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71  , p->rc);.    sq
6f80: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
6f90: 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b  e(p->db->mutex);
6fa0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  .  }.}../*******
6fb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6fc0: 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f  ***** sqlite3_co
6fd0: 6c 75 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  lumn_  *********
6fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ff0: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ******.** The fo
7000: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73  llowing routines
7010: 20 61 72 65 20 75 73 65 64 20 74 6f 20 61 63 63   are used to acc
7020: 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20  ess elements of 
7030: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a  the current row.
7040: 2a 2a 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ** in the result
7050: 20 73 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76   set..*/.const v
7060: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c  oid *sqlite3_col
7070: 75 6d 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33  umn_blob(sqlite3
7080: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
7090: 74 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f  t i){.  const vo
70a0: 69 64 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d  id *val;.  val =
70b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
70c0: 6c 6f 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  lob( columnMem(p
70d0: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20  Stmt,i) );.  /* 
70e0: 45 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72  Even though ther
70f0: 65 20 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67  e is no encoding
7100: 20 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c   conversion, val
7110: 75 65 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a  ue_blob() might.
7120: 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c    ** need to cal
7130: 6c 20 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78  l malloc() to ex
7140: 70 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  pand the result 
7150: 6f 66 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20  of a zeroblob() 
7160: 0a 20 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  .  ** expression
7170: 2e 20 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e  . .  */.  column
7180: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
7190: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
71a0: 61 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  al;.}.int sqlite
71b0: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73  3_column_bytes(s
71c0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
71d0: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e  mt, int i){.  in
71e0: 74 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  t val = sqlite3_
71f0: 76 61 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c  value_bytes( col
7200: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
7210: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
7220: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
7230: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
7240: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
7250: 75 6d 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69  umn_bytes16(sqli
7260: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7270: 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76   int i){.  int v
7280: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
7290: 75 65 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75  ue_bytes16( colu
72a0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
72b0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
72c0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
72d0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
72e0: 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63  double sqlite3_c
72f0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c  olumn_double(sql
7300: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7310: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62  , int i){.  doub
7320: 6c 65 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  le val = sqlite3
7330: 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63  _value_double( c
7340: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69  olumnMem(pStmt,i
7350: 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c  ) );.  columnMal
7360: 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74  locFailure(pStmt
7370: 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b  );.  return val;
7380: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  .}.int sqlite3_c
7390: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65  olumn_int(sqlite
73a0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
73b0: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c  nt i){.  int val
73c0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
73d0: 5f 69 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28  _int( columnMem(
73e0: 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f  pStmt,i) );.  co
73f0: 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72  lumnMallocFailur
7400: 65 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75  e(pStmt);.  retu
7410: 72 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65  rn val;.}.sqlite
7420: 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63  _int64 sqlite3_c
7430: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69  olumn_int64(sqli
7440: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7450: 20 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74   int i){.  sqlit
7460: 65 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71  e_int64 val = sq
7470: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
7480: 34 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  4( columnMem(pSt
7490: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
74a0: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
74b0: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
74c0: 76 61 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73  val;.}.const uns
74d0: 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69  igned char *sqli
74e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
74f0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7500: 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63  tmt, int i){.  c
7510: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
7520: 61 72 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65  ar *val = sqlite
7530: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f  3_value_text( co
7540: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
7550: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
7560: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
7570: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
7580: 7d 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  }.sqlite3_value 
7590: 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  *sqlite3_column_
75a0: 76 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74  value(sqlite3_st
75b0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
75c0: 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d  ){.  Mem *pOut =
75d0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
75e0: 2c 20 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  , i);.  if( pOut
75f0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74  ->flags&MEM_Stat
7600: 69 63 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ic ){.    pOut->
7610: 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74  flags &= ~MEM_St
7620: 61 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  atic;.    pOut->
7630: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68  flags |= MEM_Eph
7640: 65 6d 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e  em;.  }.  column
7650: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
7660: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  tmt);.  return (
7670: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29  sqlite3_value *)
7680: 70 4f 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20  pOut;.}.#ifndef 
7690: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
76a0: 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  6.const void *sq
76b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
76c0: 74 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  t16(sqlite3_stmt
76d0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
76e0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76  .  const void *v
76f0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
7700: 75 65 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d  ue_text16( colum
7710: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
7720: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
7730: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
7740: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23   return val;.}.#
7750: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7760: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e  OMIT_UTF16 */.in
7770: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  t sqlite3_column
7780: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74  _type(sqlite3_st
7790: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
77a0: 29 7b 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d  ){.  int iType =
77b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
77c0: 79 70 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  ype( columnMem(p
77d0: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
77e0: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
77f0: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
7800: 6e 20 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n iType;.}../*.*
7810: 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 4e 2d  * Convert the N-
7820: 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 70 53  th element of pS
7830: 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65 5b 5d 20  tmt->pColName[] 
7840: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73  into a string us
7850: 69 6e 67 0a 2a 2a 20 78 46 75 6e 63 28 29 20 74  ing.** xFunc() t
7860: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20  hen return that 
7870: 73 74 72 69 6e 67 2e 20 20 49 66 20 4e 20 69 73  string.  If N is
7880: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72   out of range, r
7890: 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a 20 54  eturn 0..**.** T
78a0: 68 65 72 65 20 61 72 65 20 75 70 20 74 6f 20 35  here are up to 5
78b0: 20 6e 61 6d 65 73 20 66 6f 72 20 65 61 63 68 20   names for each 
78c0: 63 6f 6c 75 6d 6e 2e 20 20 75 73 65 54 79 70 65  column.  useType
78d0: 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 69 63   determines whic
78e0: 68 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 72 65 74  h.** name is ret
78f0: 75 72 6e 65 64 2e 20 20 48 65 72 65 20 61 72 65  urned.  Here are
7900: 20 74 68 65 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a   the names:.**.*
7910: 2a 20 20 20 20 30 20 20 20 20 20 20 54 68 65 20  *    0      The 
7920: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 73 20 69  column name as i
7930: 74 20 73 68 6f 75 6c 64 20 62 65 20 64 69 73 70  t should be disp
7940: 6c 61 79 65 64 20 66 6f 72 20 6f 75 74 70 75 74  layed for output
7950: 0a 2a 2a 20 20 20 20 31 20 20 20 20 20 20 54 68  .**    1      Th
7960: 65 20 64 61 74 61 74 79 70 65 20 6e 61 6d 65 20  e datatype name 
7970: 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 2a  for the column.*
7980: 2a 20 20 20 20 32 20 20 20 20 20 20 54 68 65 20  *    2      The 
7990: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
79a0: 62 61 73 65 20 74 68 61 74 20 74 68 65 20 63 6f  base that the co
79b0: 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f  lumn derives fro
79c0: 6d 0a 2a 2a 20 20 20 20 33 20 20 20 20 20 20 54  m.**    3      T
79d0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
79e0: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 63 6f  able that the co
79f0: 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f  lumn derives fro
7a00: 6d 0a 2a 2a 20 20 20 20 34 20 20 20 20 20 20 54  m.**    4      T
7a10: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
7a20: 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74  able column that
7a30: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
7a40: 6d 6e 20 64 65 72 69 76 65 73 20 66 72 6f 6d 0a  mn derives from.
7a50: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73  **.** If the res
7a60: 75 6c 74 20 69 73 20 6e 6f 74 20 61 20 73 69 6d  ult is not a sim
7a70: 70 6c 65 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ple column refer
7a80: 65 6e 63 65 20 28 69 66 20 69 74 20 69 73 20 61  ence (if it is a
7a90: 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  n expression.** 
7aa0: 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74 29 20 74  or a constant) t
7ab0: 68 65 6e 20 75 73 65 54 79 70 65 73 20 32 2c 20  hen useTypes 2, 
7ac0: 33 2c 20 61 6e 64 20 34 20 72 65 74 75 72 6e 20  3, and 4 return 
7ad0: 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  NULL..*/.static 
7ae0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 63 6f 6c 75  const void *colu
7af0: 6d 6e 4e 61 6d 65 28 0a 20 20 73 71 6c 69 74 65  mnName(.  sqlite
7b00: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 0a 20  3_stmt *pStmt,. 
7b10: 20 69 6e 74 20 4e 2c 0a 20 20 63 6f 6e 73 74 20   int N,.  const 
7b20: 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 4d  void *(*xFunc)(M
7b30: 65 6d 2a 29 2c 0a 20 20 69 6e 74 20 75 73 65 54  em*),.  int useT
7b40: 79 70 65 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 76  ype.){.  const v
7b50: 6f 69 64 20 2a 72 65 74 3b 0a 20 20 56 64 62 65  oid *ret;.  Vdbe
7b60: 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20   *p;.  int n;.  
7b70: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 23 69 66  sqlite3 *db;.#if
7b80: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7b90: 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
7ba0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20  ( pStmt==0 ){.  
7bb0: 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d    (void)SQLITE_M
7bc0: 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20  ISUSE_BKPT;.    
7bd0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65  return 0;.  }.#e
7be0: 6e 64 69 66 0a 20 20 72 65 74 20 3d 20 30 3b 0a  ndif.  ret = 0;.
7bf0: 20 20 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53    p = (Vdbe *)pS
7c00: 74 6d 74 3b 0a 20 20 64 62 20 3d 20 70 2d 3e 64  tmt;.  db = p->d
7c10: 62 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21  b;.  assert( db!
7c20: 3d 30 20 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69  =0 );.  n = sqli
7c30: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
7c40: 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 4e  (pStmt);.  if( N
7c50: 3c 6e 20 26 26 20 4e 3e 3d 30 20 29 7b 0a 20 20  <n && N>=0 ){.  
7c60: 20 20 4e 20 2b 3d 20 75 73 65 54 79 70 65 2a 6e    N += useType*n
7c70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  ;.    sqlite3_mu
7c80: 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
7c90: 74 65 78 29 3b 0a 20 20 20 20 61 73 73 65 72 74  tex);.    assert
7ca0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
7cb0: 65 64 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 74  ed==0 );.    ret
7cc0: 20 3d 20 78 46 75 6e 63 28 26 70 2d 3e 61 43 6f   = xFunc(&p->aCo
7cd0: 6c 4e 61 6d 65 5b 4e 5d 29 3b 0a 20 20 20 20 20  lName[N]);.     
7ce0: 2f 2a 20 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20  /* A malloc may 
7cf0: 68 61 76 65 20 66 61 69 6c 65 64 20 69 6e 73 69  have failed insi
7d00: 64 65 20 6f 66 20 74 68 65 20 78 46 75 6e 63 28  de of the xFunc(
7d10: 29 20 63 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a  ) call. If this.
7d20: 20 20 20 20 2a 2a 20 69 73 20 74 68 65 20 63 61      ** is the ca
7d30: 73 65 2c 20 63 6c 65 61 72 20 74 68 65 20 6d 61  se, clear the ma
7d40: 6c 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67 20  llocFailed flag 
7d50: 61 6e 64 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e  and return NULL.
7d60: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
7d70: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
7d80: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61   ){.      db->ma
7d90: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a  llocFailed = 0;.
7da0: 20 20 20 20 20 20 72 65 74 20 3d 20 30 3b 0a 20        ret = 0;. 
7db0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
7dc0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7dd0: 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72  >mutex);.  }.  r
7de0: 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a  eturn ret;.}../*
7df0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
7e00: 61 6d 65 20 6f 66 20 74 68 65 20 4e 74 68 20 63  ame of the Nth c
7e10: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
7e20: 75 6c 74 20 73 65 74 20 72 65 74 75 72 6e 65 64  ult set returned
7e30: 20 62 79 20 53 51 4c 0a 2a 2a 20 73 74 61 74 65   by SQL.** state
7e40: 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63  ment pStmt..*/.c
7e50: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
7e60: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73  e3_column_name(s
7e70: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7e80: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
7e90: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
7ea0: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
7eb0: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
7ec0: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
7ed0: 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41  alue_text, COLNA
7ee0: 4d 45 5f 4e 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e  ME_NAME);.}.#ifn
7ef0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7f00: 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64  UTF16.const void
7f10: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
7f20: 5f 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f  _name16(sqlite3_
7f30: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
7f40: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f   N){.  return co
7f50: 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20  lumnName(.      
7f60: 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74  pStmt, N, (const
7f70: 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29   void*(*)(Mem*))
7f80: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
7f90: 78 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  xt16, COLNAME_NA
7fa0: 4d 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  ME);.}.#endif../
7fb0: 2a 0a 2a 2a 20 43 6f 6e 73 74 72 61 69 6e 74 3a  *.** Constraint:
7fc0: 20 20 49 66 20 79 6f 75 20 68 61 76 65 20 45 4e    If you have EN
7fd0: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
7fe0: 44 41 54 41 20 74 68 65 6e 20 79 6f 75 20 6d 75  DATA then you mu
7ff0: 73 74 0a 2a 2a 20 6e 6f 74 20 64 65 66 69 6e 65  st.** not define
8000: 20 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 2e 0a   OMIT_DECLTYPE..
8010: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
8020: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54  QLITE_OMIT_DECLT
8030: 59 50 45 29 20 26 26 20 64 65 66 69 6e 65 64 28  YPE) && defined(
8040: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
8050: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 29 0a 23  LUMN_METADATA).#
8060: 20 65 72 72 6f 72 20 22 4d 75 73 74 20 6e 6f 74   error "Must not
8070: 20 64 65 66 69 6e 65 20 62 6f 74 68 20 53 51 4c   define both SQL
8080: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
8090: 45 20 5c 0a 20 20 20 20 20 20 20 20 20 61 6e 64  E \.         and
80a0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
80b0: 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 22 0a  OLUMN_METADATA".
80c0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
80d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
80e0: 54 59 50 45 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  TYPE./*.** Retur
80f0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 63  n the column dec
8100: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 20 28 69  laration type (i
8110: 66 20 61 70 70 6c 69 63 61 62 6c 65 29 20 6f 66  f applicable) of
8120: 20 74 68 65 20 27 69 27 74 68 20 63 6f 6c 75 6d   the 'i'th colum
8130: 6e 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  n.** of the resu
8140: 6c 74 20 73 65 74 20 6f 66 20 53 51 4c 20 73 74  lt set of SQL st
8150: 61 74 65 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a  atement pStmt..*
8160: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
8170: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
8180: 6c 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74  ltype(sqlite3_st
8190: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
81a0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
81b0: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
81c0: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
81d0: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
81e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
81f0: 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59  , COLNAME_DECLTY
8200: 50 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  PE);.}.#ifndef S
8210: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
8220: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
8230: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
8240: 74 79 70 65 31 36 28 73 71 6c 69 74 65 33 5f 73  type16(sqlite3_s
8250: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
8260: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
8270: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
8280: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
8290: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
82a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
82b0: 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43  t16, COLNAME_DEC
82c0: 4c 54 59 50 45 29 3b 0a 7d 0a 23 65 6e 64 69 66  LTYPE);.}.#endif
82d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
82e0: 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20  UTF16 */.#endif 
82f0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  /* SQLITE_OMIT_D
8300: 45 43 4c 54 59 50 45 20 2a 2f 0a 0a 23 69 66 64  ECLTYPE */..#ifd
8310: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8320: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
8330: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
8340: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61  e name of the da
8350: 74 61 62 61 73 65 20 66 72 6f 6d 20 77 68 69 63  tabase from whic
8360: 68 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  h a result colum
8370: 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55  n derives..** NU
8380: 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  LL is returned i
8390: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
83a0: 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
83b0: 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74  sion or constant
83c0: 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20   or.** anything 
83d0: 65 6c 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f  else which is no
83e0: 74 20 61 6e 20 75 6e 61 6d 62 69 67 75 6f 75 73  t an unambiguous
83f0: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20   reference to a 
8400: 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e  database column.
8410: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
8420: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
8430: 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 71 6c  atabase_name(sql
8440: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8450: 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75  , int N){.  retu
8460: 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20  rn columnName(. 
8470: 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28       pStmt, N, (
8480: 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d  const void*(*)(M
8490: 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c  em*))sqlite3_val
84a0: 75 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45  ue_text, COLNAME
84b0: 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d 0a 23 69  _DATABASE);.}.#i
84c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
84d0: 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f  T_UTF16.const vo
84e0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
84f0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
8500: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
8510: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
8520: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
8530: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
8540: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
8550: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
8560: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c  e3_value_text16,
8570: 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41 42 41 53   COLNAME_DATABAS
8580: 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  E);.}.#endif /* 
8590: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
85a0: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  6 */../*.** Retu
85b0: 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  rn the name of t
85c0: 68 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 77 68  he table from wh
85d0: 69 63 68 20 61 20 72 65 73 75 6c 74 20 63 6f 6c  ich a result col
85e0: 75 6d 6e 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20  umn derives..** 
85f0: 4e 55 4c 4c 20 69 73 20 72 65 74 75 72 6e 65 64  NULL is returned
8600: 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   if the result c
8610: 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
8620: 65 73 73 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61  ession or consta
8630: 6e 74 20 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e  nt or.** anythin
8640: 67 20 65 6c 73 65 20 77 68 69 63 68 20 69 73 20  g else which is 
8650: 6e 6f 74 20 61 6e 20 75 6e 61 6d 62 69 67 75 6f  not an unambiguo
8660: 75 73 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  us reference to 
8670: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6c 75 6d  a database colum
8680: 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
8690: 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   *sqlite3_column
86a0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 71 6c 69  _table_name(sqli
86b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
86c0: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
86d0: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
86e0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
86f0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
8700: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
8710: 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f  e_text, COLNAME_
8720: 54 41 42 4c 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  TABLE);.}.#ifnde
8730: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
8740: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
8750: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
8760: 61 62 6c 65 5f 6e 61 6d 65 31 36 28 73 71 6c 69  able_name16(sqli
8770: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
8780: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
8790: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
87a0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
87b0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
87c0: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
87d0: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
87e0: 45 5f 54 41 42 4c 45 29 3b 0a 7d 0a 23 65 6e 64  E_TABLE);.}.#end
87f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8800: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a  T_UTF16 */../*.*
8810: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
8820: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63  e of the table c
8830: 6f 6c 75 6d 6e 20 66 72 6f 6d 20 77 68 69 63 68  olumn from which
8840: 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
8850: 20 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c   derives..** NUL
8860: 4c 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  L is returned if
8870: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
8880: 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
8890: 69 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20  ion or constant 
88a0: 6f 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65  or.** anything e
88b0: 6c 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74  lse which is not
88c0: 20 61 6e 20 75 6e 61 6d 62 69 67 75 6f 75 73 20   an unambiguous 
88d0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64  reference to a d
88e0: 61 74 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a  atabase column..
88f0: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
8900: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
8910: 69 67 69 6e 5f 6e 61 6d 65 28 73 71 6c 69 74 65  igin_name(sqlite
8920: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
8930: 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20  nt N){.  return 
8940: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20  columnName(.    
8950: 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e    pStmt, N, (con
8960: 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a  st void*(*)(Mem*
8970: 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  ))sqlite3_value_
8980: 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f  text, COLNAME_CO
8990: 4c 55 4d 4e 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  LUMN);.}.#ifndef
89a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
89b0: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
89c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
89d0: 69 67 69 6e 5f 6e 61 6d 65 31 36 28 73 71 6c 69  igin_name16(sqli
89e0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
89f0: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
8a00: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
8a10: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
8a20: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
8a30: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
8a40: 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e 41 4d  e_text16, COLNAM
8a50: 45 5f 43 4f 4c 55 4d 4e 29 3b 0a 7d 0a 23 65 6e  E_COLUMN);.}.#en
8a60: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
8a70: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 23 65 6e 64  IT_UTF16 */.#end
8a80: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
8a90: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
8aa0: 41 54 41 20 2a 2f 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a  ATA */.../******
8ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74 65  ********* sqlite
8ad0: 33 5f 62 69 6e 64 5f 20 20 2a 2a 2a 2a 2a 2a 2a  3_bind_  *******
8ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8af0: 2a 2a 2a 2a 0a 2a 2a 20 0a 2a 2a 20 52 6f 75 74  ****.** .** Rout
8b00: 69 6e 65 73 20 75 73 65 64 20 74 6f 20 61 74 74  ines used to att
8b10: 61 63 68 20 76 61 6c 75 65 73 20 74 6f 20 77 69  ach values to wi
8b20: 6c 64 63 61 72 64 73 20 69 6e 20 61 20 63 6f 6d  ldcards in a com
8b30: 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d  piled SQL statem
8b40: 65 6e 74 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 55 6e  ent..*/./*.** Un
8b50: 62 69 6e 64 20 74 68 65 20 76 61 6c 75 65 20 62  bind the value b
8b60: 6f 75 6e 64 20 74 6f 20 76 61 72 69 61 62 6c 65  ound to variable
8b70: 20 69 20 69 6e 20 76 69 72 74 75 61 6c 20 6d 61   i in virtual ma
8b80: 63 68 69 6e 65 20 70 2e 20 54 68 69 73 20 69 73  chine p. This is
8b90: 20 74 68 65 20 0a 2a 2a 20 74 68 65 20 73 61 6d   the .** the sam
8ba0: 65 20 61 73 20 62 69 6e 64 69 6e 67 20 61 20 4e  e as binding a N
8bb0: 55 4c 4c 20 76 61 6c 75 65 20 74 6f 20 74 68 65  ULL value to the
8bc0: 20 63 6f 6c 75 6d 6e 2e 20 49 66 20 74 68 65 20   column. If the 
8bd0: 22 69 22 20 70 61 72 61 6d 65 74 65 72 20 69 73  "i" parameter is
8be0: 0a 2a 2a 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  .** out of range
8bf0: 2c 20 74 68 65 6e 20 53 51 4c 49 54 45 5f 52 41  , then SQLITE_RA
8c00: 4e 47 45 20 69 73 20 72 65 74 75 72 6e 65 64 2e  NGE is returned.
8c10: 20 4f 74 68 65 77 69 73 65 20 53 51 4c 49 54 45   Othewise SQLITE
8c20: 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a 20 41 20 73 75 63  _OK..**.** A suc
8c30: 63 65 73 73 66 75 6c 20 65 76 61 6c 75 61 74 69  cessful evaluati
8c40: 6f 6e 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69  on of this routi
8c50: 6e 65 20 61 63 71 75 69 72 65 73 20 74 68 65 20  ne acquires the 
8c60: 6d 75 74 65 78 20 6f 6e 20 70 2e 0a 2a 2a 20 74  mutex on p..** t
8c70: 68 65 20 6d 75 74 65 78 20 69 73 20 72 65 6c 65  he mutex is rele
8c80: 61 73 65 64 20 69 66 20 61 6e 79 20 6b 69 6e 64  ased if any kind
8c90: 20 6f 66 20 65 72 72 6f 72 20 6f 63 63 75 72 73   of error occurs
8ca0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 65 72 72 6f  ..**.** The erro
8cb0: 72 20 63 6f 64 65 20 73 74 6f 72 65 64 20 69 6e  r code stored in
8cc0: 20 64 61 74 61 62 61 73 65 20 70 2d 3e 64 62 20   database p->db 
8cd0: 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  is overwritten w
8ce0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 0a 2a  ith the return.*
8cf0: 2a 20 76 61 6c 75 65 20 69 6e 20 61 6e 79 20 63  * value in any c
8d00: 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ase..*/.static i
8d10: 6e 74 20 76 64 62 65 55 6e 62 69 6e 64 28 56 64  nt vdbeUnbind(Vd
8d20: 62 65 20 2a 70 2c 20 69 6e 74 20 69 29 7b 0a 20  be *p, int i){. 
8d30: 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 66   Mem *pVar;.  if
8d40: 28 20 76 64 62 65 53 61 66 65 74 79 4e 6f 74 4e  ( vdbeSafetyNotN
8d50: 75 6c 6c 28 70 29 20 29 7b 0a 20 20 20 20 72 65  ull(p) ){.    re
8d60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
8d70: 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73  SE_BKPT;.  }.  s
8d80: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
8d90: 65 72 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29  er(p->db->mutex)
8da0: 3b 0a 20 20 69 66 28 20 70 2d 3e 6d 61 67 69 63  ;.  if( p->magic
8db0: 21 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  !=VDBE_MAGIC_RUN
8dc0: 20 7c 7c 20 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a   || p->pc>=0 ){.
8dd0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
8de0: 28 70 2d 3e 64 62 2c 20 53 51 4c 49 54 45 5f 4d  (p->db, SQLITE_M
8df0: 49 53 55 53 45 29 3b 0a 20 20 20 20 73 71 6c 69  ISUSE);.    sqli
8e00: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
8e10: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
8e20: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 53     sqlite3_log(S
8e30: 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20 0a 20  QLITE_MISUSE, . 
8e40: 20 20 20 20 20 20 20 22 62 69 6e 64 20 6f 6e 20         "bind on 
8e50: 61 20 62 75 73 79 20 70 72 65 70 61 72 65 64 20  a busy prepared 
8e60: 73 74 61 74 65 6d 65 6e 74 3a 20 5b 25 73 5d 22  statement: [%s]"
8e70: 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 20 20  , p->zSql);.    
8e80: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
8e90: 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20  SUSE_BKPT;.  }. 
8ea0: 20 69 66 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d   if( i<1 || i>p-
8eb0: 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 73 71 6c  >nVar ){.    sql
8ec0: 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c  ite3Error(p->db,
8ed0: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 29 3b 0a   SQLITE_RANGE);.
8ee0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
8ef0: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
8f00: 75 74 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72  utex);.    retur
8f10: 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a  n SQLITE_RANGE;.
8f20: 20 20 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61    }.  i--;.  pVa
8f30: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b  r = &p->aVar[i];
8f40: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
8f50: 6d 52 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a  mRelease(pVar);.
8f60: 20 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20    pVar->flags = 
8f70: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69  MEM_Null;.  sqli
8f80: 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20  te3Error(p->db, 
8f90: 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 0a 20 20 2f  SQLITE_OK);..  /
8fa0: 2a 20 49 66 20 74 68 65 20 62 69 74 20 63 6f 72  * If the bit cor
8fb0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
8fc0: 69 73 20 76 61 72 69 61 62 6c 65 20 69 6e 20 56  is variable in V
8fd0: 64 62 65 2e 65 78 70 6d 61 73 6b 20 69 73 20 73  dbe.expmask is s
8fe0: 65 74 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 62  et, then .  ** b
8ff0: 69 6e 64 69 6e 67 20 61 20 6e 65 77 20 76 61 6c  inding a new val
9000: 75 65 20 74 6f 20 74 68 69 73 20 76 61 72 69 61  ue to this varia
9010: 62 6c 65 20 69 6e 76 61 6c 69 64 61 74 65 73 20  ble invalidates 
9020: 74 68 65 20 63 75 72 72 65 6e 74 20 71 75 65 72  the current quer
9030: 79 20 70 6c 61 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  y plan..  **.  *
9040: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
9050: 2d 4f 46 3a 20 52 2d 34 38 34 34 30 2d 33 37 35  -OF: R-48440-375
9060: 39 35 20 49 66 20 74 68 65 20 73 70 65 63 69 66  95 If the specif
9070: 69 63 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74  ic value bound t
9080: 6f 20 68 6f 73 74 0a 20 20 2a 2a 20 70 61 72 61  o host.  ** para
9090: 6d 65 74 65 72 20 69 6e 20 74 68 65 20 57 48 45  meter in the WHE
90a0: 52 45 20 63 6c 61 75 73 65 20 6d 69 67 68 74 20  RE clause might 
90b0: 69 6e 66 6c 75 65 6e 63 65 20 74 68 65 20 63 68  influence the ch
90c0: 6f 69 63 65 20 6f 66 20 71 75 65 72 79 20 70 6c  oice of query pl
90d0: 61 6e 0a 20 20 2a 2a 20 66 6f 72 20 61 20 73 74  an.  ** for a st
90e0: 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
90f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  e statement will
9100: 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
9110: 79 20 72 65 63 6f 6d 70 69 6c 65 64 2c 0a 20 20  y recompiled,.  
9120: 2a 2a 20 61 73 20 69 66 20 74 68 65 72 65 20 68  ** as if there h
9130: 61 64 20 62 65 65 6e 20 61 20 73 63 68 65 6d 61  ad been a schema
9140: 20 63 68 61 6e 67 65 2c 20 6f 6e 20 74 68 65 20   change, on the 
9150: 66 69 72 73 74 20 73 71 6c 69 74 65 33 5f 73 74  first sqlite3_st
9160: 65 70 28 29 20 63 61 6c 6c 0a 20 20 2a 2a 20 66  ep() call.  ** f
9170: 6f 6c 6c 6f 77 69 6e 67 20 61 6e 79 20 63 68 61  ollowing any cha
9180: 6e 67 65 20 74 6f 20 74 68 65 20 62 69 6e 64 69  nge to the bindi
9190: 6e 67 73 20 6f 66 20 74 68 61 74 20 70 61 72 61  ngs of that para
91a0: 6d 65 74 65 72 2e 0a 20 20 2a 2f 0a 20 20 69 66  meter..  */.  if
91b0: 28 20 70 2d 3e 69 73 50 72 65 70 61 72 65 56 32  ( p->isPrepareV2
91c0: 20 26 26 0a 20 20 20 20 20 28 28 69 3c 33 32 20   &&.     ((i<32 
91d0: 26 26 20 70 2d 3e 65 78 70 6d 61 73 6b 20 26 20  && p->expmask & 
91e0: 28 28 75 33 32 29 31 20 3c 3c 20 69 29 29 20 7c  ((u32)1 << i)) |
91f0: 7c 20 70 2d 3e 65 78 70 6d 61 73 6b 3d 3d 30 78  | p->expmask==0x
9200: 66 66 66 66 66 66 66 66 29 0a 20 20 29 7b 0a 20  ffffffff).  ){. 
9210: 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
9220: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
9230: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
9240: 0a 2a 2a 20 42 69 6e 64 20 61 20 74 65 78 74 20  .** Bind a text 
9250: 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 2e 0a 2a  or BLOB value..*
9260: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e  /.static int bin
9270: 64 54 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33  dText(.  sqlite3
9280: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 20 20  _stmt *pStmt,   
9290: 2f 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  /* The statement
92a0: 20 74 6f 20 62 69 6e 64 20 61 67 61 69 6e 73 74   to bind against
92b0: 20 2a 2f 0a 20 20 69 6e 74 20 69 2c 20 20 20 20   */.  int i,    
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
92d0: 49 6e 64 65 78 20 6f 66 20 74 68 65 20 70 61 72  Index of the par
92e0: 61 6d 65 74 65 72 20 74 6f 20 62 69 6e 64 20 2a  ameter to bind *
92f0: 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  /.  const void *
9300: 7a 44 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f  zData,     /* Po
9310: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 64 61 74  inter to the dat
9320: 61 20 74 6f 20 62 65 20 62 6f 75 6e 64 20 2a 2f  a to be bound */
9330: 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 20 20  .  int nData,   
9340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9350: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
9360: 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64  data to be bound
9370: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
9380: 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20 2f 2a 20  l)(void*),   /* 
9390: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 74  Destructor for t
93a0: 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 38 20  he data */.  u8 
93b0: 65 6e 63 6f 64 69 6e 67 20 20 20 20 20 20 20 20  encoding        
93c0: 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69 6e 67 20      /* Encoding 
93d0: 66 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  for the data */.
93e0: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
93f0: 56 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20  Vdbe *)pStmt;.  
9400: 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 69 6e 74  Mem *pVar;.  int
9410: 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 76 64 62   rc;..  rc = vdb
9420: 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20  eUnbind(p, i);. 
9430: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
9440: 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 44  OK ){.    if( zD
9450: 61 74 61 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ata!=0 ){.      
9460: 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b  pVar = &p->aVar[
9470: 69 2d 31 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d  i-1];.      rc =
9480: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9490: 65 74 53 74 72 28 70 56 61 72 2c 20 7a 44 61 74  etStr(pVar, zDat
94a0: 61 2c 20 6e 44 61 74 61 2c 20 65 6e 63 6f 64 69  a, nData, encodi
94b0: 6e 67 2c 20 78 44 65 6c 29 3b 0a 20 20 20 20 20  ng, xDel);.     
94c0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
94d0: 4f 4b 20 26 26 20 65 6e 63 6f 64 69 6e 67 21 3d  OK && encoding!=
94e0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
94f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  = sqlite3VdbeCha
9500: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 56 61 72  ngeEncoding(pVar
9510: 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29 3b 0a 20  , ENC(p->db));. 
9520: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
9530: 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c  ite3Error(p->db,
9540: 20 72 63 29 3b 0a 20 20 20 20 20 20 72 63 20 3d   rc);.      rc =
9550: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
9560: 70 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20 20  p->db, rc);.    
9570: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  }.    sqlite3_mu
9580: 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d  tex_leave(p->db-
9590: 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 65 6c 73 65  >mutex);.  }else
95a0: 20 69 66 28 20 78 44 65 6c 21 3d 53 51 4c 49 54   if( xDel!=SQLIT
95b0: 45 5f 53 54 41 54 49 43 20 26 26 20 78 44 65 6c  E_STATIC && xDel
95c0: 21 3d 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  !=SQLITE_TRANSIE
95d0: 4e 54 20 29 7b 0a 20 20 20 20 78 44 65 6c 28 28  NT ){.    xDel((
95e0: 76 6f 69 64 2a 29 7a 44 61 74 61 29 3b 0a 20 20  void*)zData);.  
95f0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
9600: 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20  .../*.** Bind a 
9610: 62 6c 6f 62 20 76 61 6c 75 65 20 74 6f 20 61 6e  blob value to an
9620: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 76   SQL statement v
9630: 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ariable..*/.int 
9640: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
9650: 62 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  b(.  sqlite3_stm
9660: 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74  t *pStmt, .  int
9670: 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i, .  const voi
9680: 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74  d *zData, .  int
9690: 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20   nData, .  void 
96a0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29  (*xDel)(void*).)
96b0: 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54  {.  return bindT
96c0: 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44  ext(pStmt, i, zD
96d0: 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c  ata, nData, xDel
96e0: 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  , 0);.}.int sqli
96f0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 36 34 28  te3_bind_blob64(
9700: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
9710: 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69  *pStmt, .  int i
9720: 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  , .  const void 
9730: 2a 7a 44 61 74 61 2c 20 0a 20 20 73 71 6c 69 74  *zData, .  sqlit
9740: 65 33 5f 75 69 6e 74 36 34 20 6e 44 61 74 61 2c  e3_uint64 nData,
9750: 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29   .  void (*xDel)
9760: 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 61 73 73  (void*).){.  ass
9770: 65 72 74 28 20 78 44 65 6c 21 3d 53 51 4c 49 54  ert( xDel!=SQLIT
9780: 45 5f 44 59 4e 41 4d 49 43 20 29 3b 0a 20 20 69  E_DYNAMIC );.  i
9790: 66 28 20 6e 44 61 74 61 3e 30 78 37 66 66 66 66  f( nData>0x7ffff
97a0: 66 66 66 20 29 7b 0a 20 20 20 20 72 65 74 75 72  fff ){.    retur
97b0: 6e 20 69 6e 76 6f 6b 65 56 61 6c 75 65 44 65 73  n invokeValueDes
97c0: 74 72 75 63 74 6f 72 28 7a 44 61 74 61 2c 20 78  tructor(zData, x
97d0: 44 65 6c 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65  Del, 0);.  }else
97e0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 62 69 6e  {.    return bin
97f0: 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20  dText(pStmt, i, 
9800: 7a 44 61 74 61 2c 20 28 69 6e 74 29 6e 44 61 74  zData, (int)nDat
9810: 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a 20 20 7d  a, xDel, 0);.  }
9820: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62  .}.int sqlite3_b
9830: 69 6e 64 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  ind_double(sqlit
9840: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
9850: 69 6e 74 20 69 2c 20 64 6f 75 62 6c 65 20 72 56  int i, double rV
9860: 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b  alue){.  int rc;
9870: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
9880: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63  be *)pStmt;.  rc
9890: 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c   = vdbeUnbind(p,
98a0: 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   i);.  if( rc==S
98b0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
98c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
98d0: 74 44 6f 75 62 6c 65 28 26 70 2d 3e 61 56 61 72  tDouble(&p->aVar
98e0: 5b 69 2d 31 5d 2c 20 72 56 61 6c 75 65 29 3b 0a  [i-1], rValue);.
98f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
9900: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
9910: 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74  utex);.  }.  ret
9920: 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71  urn rc;.}.int sq
9930: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 73  lite3_bind_int(s
9940: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 2c 20  qlite3_stmt *p, 
9950: 69 6e 74 20 69 2c 20 69 6e 74 20 69 56 61 6c 75  int i, int iValu
9960: 65 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  e){.  return sql
9970: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
9980: 70 2c 20 69 2c 20 28 69 36 34 29 69 56 61 6c 75  p, i, (i64)iValu
9990: 65 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  e);.}.int sqlite
99a0: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 71 6c  3_bind_int64(sql
99b0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
99c0: 2c 20 69 6e 74 20 69 2c 20 73 71 6c 69 74 65 5f  , int i, sqlite_
99d0: 69 6e 74 36 34 20 69 56 61 6c 75 65 29 7b 0a 20  int64 iValue){. 
99e0: 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20   int rc;.  Vdbe 
99f0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
9a00: 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55  mt;.  rc = vdbeU
9a10: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69  nbind(p, i);.  i
9a20: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
9a30: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9a40: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
9a50: 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 69 56  p->aVar[i-1], iV
9a60: 61 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  alue);.    sqlit
9a70: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
9a80: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
9a90: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
9aa0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
9ab0: 64 5f 6e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 73  d_null(sqlite3_s
9ac0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
9ad0: 69 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  i){.  int rc;.  
9ae0: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
9af0: 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76  )pStmt;.  rc = v
9b00: 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b  dbeUnbind(p, i);
9b10: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
9b20: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
9b30: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
9b40: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
9b50: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
9b60: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
9b70: 6e 64 5f 74 65 78 74 28 20 0a 20 20 73 71 6c 69  nd_text( .  sqli
9b80: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
9b90: 20 0a 20 20 69 6e 74 20 69 2c 20 0a 20 20 63 6f   .  int i, .  co
9ba0: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 2c  nst char *zData,
9bb0: 20 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c 20 0a   .  int nData, .
9bc0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
9bd0: 6f 69 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72  oid*).){.  retur
9be0: 6e 20 62 69 6e 64 54 65 78 74 28 70 53 74 6d 74  n bindText(pStmt
9bf0: 2c 20 69 2c 20 7a 44 61 74 61 2c 20 6e 44 61 74  , i, zData, nDat
9c00: 61 2c 20 78 44 65 6c 2c 20 53 51 4c 49 54 45 5f  a, xDel, SQLITE_
9c10: 55 54 46 38 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c  UTF8);.}.int sql
9c20: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 36 34  ite3_bind_text64
9c30: 28 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ( .  sqlite3_stm
9c40: 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74  t *pStmt, .  int
9c50: 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61   i, .  const cha
9c60: 72 20 2a 7a 44 61 74 61 2c 20 0a 20 20 73 71 6c  r *zData, .  sql
9c70: 69 74 65 33 5f 75 69 6e 74 36 34 20 6e 44 61 74  ite3_uint64 nDat
9c80: 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  a, .  void (*xDe
9c90: 6c 29 28 76 6f 69 64 2a 29 2c 0a 20 20 75 6e 73  l)(void*),.  uns
9ca0: 69 67 6e 65 64 20 63 68 61 72 20 65 6e 63 0a 29  igned char enc.)
9cb0: 7b 0a 20 20 61 73 73 65 72 74 28 20 78 44 65 6c  {.  assert( xDel
9cc0: 21 3d 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43  !=SQLITE_DYNAMIC
9cd0: 20 29 3b 0a 20 20 69 66 28 20 6e 44 61 74 61 3e   );.  if( nData>
9ce0: 30 78 37 66 66 66 66 66 66 66 20 29 7b 0a 20 20  0x7fffffff ){.  
9cf0: 20 20 72 65 74 75 72 6e 20 69 6e 76 6f 6b 65 56    return invokeV
9d00: 61 6c 75 65 44 65 73 74 72 75 63 74 6f 72 28 7a  alueDestructor(z
9d10: 44 61 74 61 2c 20 78 44 65 6c 2c 20 30 29 3b 0a  Data, xDel, 0);.
9d20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
9d30: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46   enc==SQLITE_UTF
9d40: 31 36 20 29 20 65 6e 63 20 3d 20 53 51 4c 49 54  16 ) enc = SQLIT
9d50: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
9d60: 20 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65     return bindTe
9d70: 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61  xt(pStmt, i, zDa
9d80: 74 61 2c 20 28 69 6e 74 29 6e 44 61 74 61 2c 20  ta, (int)nData, 
9d90: 78 44 65 6c 2c 20 65 6e 63 29 3b 0a 20 20 7d 0a  xDel, enc);.  }.
9da0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
9db0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20  _OMIT_UTF16.int 
9dc0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
9dd0: 74 31 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  t16(.  sqlite3_s
9de0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69  tmt *pStmt, .  i
9df0: 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76  nt i, .  const v
9e00: 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69  oid *zData, .  i
9e10: 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69  nt nData, .  voi
9e20: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
9e30: 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e  .){.  return bin
9e40: 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20  dText(pStmt, i, 
9e50: 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44  zData, nData, xD
9e60: 65 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  el, SQLITE_UTF16
9e70: 4e 41 54 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69  NATIVE);.}.#endi
9e80: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
9e90: 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71  _UTF16 */.int sq
9ea0: 6c 69 74 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65  lite3_bind_value
9eb0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
9ec0: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e  Stmt, int i, con
9ed0: 73 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  st sqlite3_value
9ee0: 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74   *pValue){.  int
9ef0: 20 72 63 3b 0a 20 20 73 77 69 74 63 68 28 20 73   rc;.  switch( s
9f00: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
9f10: 65 28 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  e((sqlite3_value
9f20: 2a 29 70 56 61 6c 75 65 29 20 29 7b 0a 20 20 20  *)pValue) ){.   
9f30: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
9f40: 45 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63  EGER: {.      rc
9f50: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
9f60: 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 2c 20  int64(pStmt, i, 
9f70: 70 56 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20  pValue->u.i);.  
9f80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
9f90: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
9fa0: 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20  _FLOAT: {.      
9fb0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
9fc0: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
9fd0: 69 2c 20 70 56 61 6c 75 65 2d 3e 75 2e 72 29 3b  i, pValue->u.r);
9fe0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
9ff0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c    }.    case SQL
a000: 49 54 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20  ITE_BLOB: {.    
a010: 20 20 69 66 28 20 70 56 61 6c 75 65 2d 3e 66 6c    if( pValue->fl
a020: 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
a030: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
a040: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f  qlite3_bind_zero
a050: 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 2c 20 70  blob(pStmt, i, p
a060: 56 61 6c 75 65 2d 3e 75 2e 6e 5a 65 72 6f 29 3b  Value->u.nZero);
a070: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a080: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
a090: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74  e3_bind_blob(pSt
a0a0: 6d 74 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 7a  mt, i, pValue->z
a0b0: 2c 20 70 56 61 6c 75 65 2d 3e 6e 2c 53 51 4c 49  , pValue->n,SQLI
a0c0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
a0d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
a0e0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
a0f0: 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20  se SQLITE_TEXT: 
a100: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 62 69 6e  {.      rc = bin
a110: 64 54 65 78 74 28 70 53 74 6d 74 2c 69 2c 20 20  dText(pStmt,i,  
a120: 70 56 61 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75  pValue->z, pValu
a130: 65 2d 3e 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41  e->n, SQLITE_TRA
a140: 4e 53 49 45 4e 54 2c 0a 20 20 20 20 20 20 20 20  NSIENT,.        
a150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a160: 20 20 20 20 20 20 70 56 61 6c 75 65 2d 3e 65 6e        pValue->en
a170: 63 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  c);.      break;
a180: 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
a190: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  lt: {.      rc =
a1a0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
a1b0: 6c 6c 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20  ll(pStmt, i);.  
a1c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
a1d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
a1e0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
a1f0: 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 73 71  bind_zeroblob(sq
a200: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
a210: 74 2c 20 69 6e 74 20 69 2c 20 69 6e 74 20 6e 29  t, int i, int n)
a220: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64  {.  int rc;.  Vd
a230: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29  be *p = (Vdbe *)
a240: 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64  pStmt;.  rc = vd
a250: 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a  beUnbind(p, i);.
a260: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
a270: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
a280: 65 33 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f  e3VdbeMemSetZero
a290: 42 6c 6f 62 28 26 70 2d 3e 61 56 61 72 5b 69 2d  Blob(&p->aVar[i-
a2a0: 31 5d 2c 20 6e 29 3b 0a 20 20 20 20 73 71 6c 69  1], n);.    sqli
a2b0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
a2c0: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
a2d0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
a2e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
a2f0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 77 69  the number of wi
a300: 6c 64 63 61 72 64 73 20 74 68 61 74 20 63 61 6e  ldcards that can
a310: 20 62 65 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20   be potentially 
a320: 62 6f 75 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68 69  bound to..** Thi
a330: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 64 64  s routine is add
a340: 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 44 42  ed to support DB
a350: 44 3a 3a 53 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a  D::SQLite.  .*/.
a360: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
a370: 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
a380: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
a390: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
a3a0: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
a3b0: 0a 20 20 72 65 74 75 72 6e 20 70 20 3f 20 70 2d  .  return p ? p-
a3c0: 3e 6e 56 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a  >nVar : 0;.}../*
a3d0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
a3e0: 61 6d 65 20 6f 66 20 61 20 77 69 6c 64 63 61 72  ame of a wildcar
a3f0: 64 20 70 61 72 61 6d 65 74 65 72 2e 20 20 52 65  d parameter.  Re
a400: 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65  turn NULL if the
a410: 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 6f 75 74   index.** is out
a420: 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69 66 20   of range or if 
a430: 74 68 65 20 77 69 6c 64 63 61 72 64 20 69 73 20  the wildcard is 
a440: 75 6e 6e 61 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  unnamed..**.** T
a450: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
a460: 61 79 73 20 55 54 46 2d 38 2e 0a 2a 2f 0a 63 6f  ays UTF-8..*/.co
a470: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
a480: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
a490: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
a4a0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69  mt *pStmt, int i
a4b0: 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  ){.  Vdbe *p = (
a4c0: 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20 69  Vdbe*)pStmt;.  i
a4d0: 66 28 20 70 3d 3d 30 20 7c 7c 20 69 3c 31 20 7c  f( p==0 || i<1 |
a4e0: 7c 20 69 3e 70 2d 3e 6e 7a 56 61 72 20 29 7b 0a  | i>p->nzVar ){.
a4f0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
a500: 7d 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 61 7a  }.  return p->az
a510: 56 61 72 5b 69 2d 31 5d 3b 0a 7d 0a 0a 2f 2a 0a  Var[i-1];.}../*.
a520: 2a 2a 20 47 69 76 65 6e 20 61 20 77 69 6c 64 63  ** Given a wildc
a530: 61 72 64 20 70 61 72 61 6d 65 74 65 72 20 6e 61  ard parameter na
a540: 6d 65 2c 20 72 65 74 75 72 6e 20 74 68 65 20 69  me, return the i
a550: 6e 64 65 78 20 6f 66 20 74 68 65 20 76 61 72 69  ndex of the vari
a560: 61 62 6c 65 0a 2a 2a 20 77 69 74 68 20 74 68 61  able.** with tha
a570: 74 20 6e 61 6d 65 2e 20 20 49 66 20 74 68 65 72  t name.  If ther
a580: 65 20 69 73 20 6e 6f 20 76 61 72 69 61 62 6c 65  e is no variable
a590: 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20   with the given 
a5a0: 6e 61 6d 65 2c 0a 2a 2a 20 72 65 74 75 72 6e 20  name,.** return 
a5b0: 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  0..*/.int sqlite
a5c0: 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
a5d0: 64 65 78 28 56 64 62 65 20 2a 70 2c 20 63 6f 6e  dex(Vdbe *p, con
a5e0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20  st char *zName, 
a5f0: 69 6e 74 20 6e 4e 61 6d 65 29 7b 0a 20 20 69 6e  int nName){.  in
a600: 74 20 69 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20  t i;.  if( p==0 
a610: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
a620: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65  .  }.  if( zName
a630: 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   ){.    for(i=0;
a640: 20 69 3c 70 2d 3e 6e 7a 56 61 72 3b 20 69 2b 2b   i<p->nzVar; i++
a650: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
a660: 68 61 72 20 2a 7a 20 3d 20 70 2d 3e 61 7a 56 61  har *z = p->azVa
a670: 72 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  r[i];.      if( 
a680: 7a 20 26 26 20 73 74 72 6e 63 6d 70 28 7a 2c 7a  z && strncmp(z,z
a690: 4e 61 6d 65 2c 6e 4e 61 6d 65 29 3d 3d 30 20 26  Name,nName)==0 &
a6a0: 26 20 7a 5b 6e 4e 61 6d 65 5d 3d 3d 30 20 29 7b  & z[nName]==0 ){
a6b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
a6c0: 69 2b 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i+1;.      }.   
a6d0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
a6e0: 30 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  0;.}.int sqlite3
a6f0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
a700: 69 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 73 74  index(sqlite3_st
a710: 6d 74 20 2a 70 53 74 6d 74 2c 20 63 6f 6e 73 74  mt *pStmt, const
a720: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29 7b 0a 20   char *zName){. 
a730: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
a740: 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
a750: 78 28 28 56 64 62 65 2a 29 70 53 74 6d 74 2c 20  x((Vdbe*)pStmt, 
a760: 7a 4e 61 6d 65 2c 20 73 71 6c 69 74 65 33 53 74  zName, sqlite3St
a770: 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 29 3b 0a  rlen30(zName));.
a780: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  }../*.** Transfe
a790: 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66  r all bindings f
a7a0: 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 73 74  rom the first st
a7b0: 61 74 65 6d 65 6e 74 20 6f 76 65 72 20 74 6f 20  atement over to 
a7c0: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 2a 2f 0a 69  the second..*/.i
a7d0: 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
a7e0: 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
a7f0: 65 33 5f 73 74 6d 74 20 2a 70 46 72 6f 6d 53 74  e3_stmt *pFromSt
a800: 6d 74 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  mt, sqlite3_stmt
a810: 20 2a 70 54 6f 53 74 6d 74 29 7b 0a 20 20 56 64   *pToStmt){.  Vd
a820: 62 65 20 2a 70 46 72 6f 6d 20 3d 20 28 56 64 62  be *pFrom = (Vdb
a830: 65 2a 29 70 46 72 6f 6d 53 74 6d 74 3b 0a 20 20  e*)pFromStmt;.  
a840: 56 64 62 65 20 2a 70 54 6f 20 3d 20 28 56 64 62  Vdbe *pTo = (Vdb
a850: 65 2a 29 70 54 6f 53 74 6d 74 3b 0a 20 20 69 6e  e*)pToStmt;.  in
a860: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
a870: 54 6f 2d 3e 64 62 3d 3d 70 46 72 6f 6d 2d 3e 64  To->db==pFrom->d
a880: 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
a890: 54 6f 2d 3e 6e 56 61 72 3d 3d 70 46 72 6f 6d 2d  To->nVar==pFrom-
a8a0: 3e 6e 56 61 72 20 29 3b 0a 20 20 73 71 6c 69 74  >nVar );.  sqlit
a8b0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
a8c0: 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  To->db->mutex);.
a8d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 46 72    for(i=0; i<pFr
a8e0: 6f 6d 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a  om->nVar; i++){.
a8f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a900: 65 6d 4d 6f 76 65 28 26 70 54 6f 2d 3e 61 56 61  emMove(&pTo->aVa
a910: 72 5b 69 5d 2c 20 26 70 46 72 6f 6d 2d 3e 61 56  r[i], &pFrom->aV
a920: 61 72 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 73 71  ar[i]);.  }.  sq
a930: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
a940: 65 28 70 54 6f 2d 3e 64 62 2d 3e 6d 75 74 65 78  e(pTo->db->mutex
a950: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
a960: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  TE_OK;.}..#ifnde
a970: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
a980: 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20 44  PRECATED./*.** D
a990: 65 70 72 65 63 61 74 65 64 20 65 78 74 65 72 6e  eprecated extern
a9a0: 61 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 49  al interface.  I
a9b0: 6e 74 65 72 6e 61 6c 2f 63 6f 72 65 20 53 51 4c  nternal/core SQL
a9c0: 69 74 65 20 63 6f 64 65 0a 2a 2a 20 73 68 6f 75  ite code.** shou
a9d0: 6c 64 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 54  ld call sqlite3T
a9e0: 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 2e  ransferBindings.
a9f0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 6d 69 73  .**.** It is mis
aa00: 75 73 65 20 74 6f 20 63 61 6c 6c 20 74 68 69 73  use to call this
aa10: 20 72 6f 75 74 69 6e 65 20 77 69 74 68 20 73 74   routine with st
aa20: 61 74 65 6d 65 6e 74 73 20 66 72 6f 6d 20 64 69  atements from di
aa30: 66 66 65 72 65 6e 74 0a 2a 2a 20 64 61 74 61 62  fferent.** datab
aa40: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
aa50: 20 20 42 75 74 20 61 73 20 74 68 69 73 20 69 73    But as this is
aa60: 20 61 20 64 65 70 72 65 63 61 74 65 64 20 69 6e   a deprecated in
aa70: 74 65 72 66 61 63 65 2c 20 77 65 0a 2a 2a 20 77  terface, we.** w
aa80: 69 6c 6c 20 6e 6f 74 20 62 6f 74 68 65 72 20 74  ill not bother t
aa90: 6f 20 63 68 65 63 6b 20 66 6f 72 20 74 68 61 74  o check for that
aaa0: 20 63 6f 6e 64 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a   condition..**.*
aab0: 2a 20 49 66 20 74 68 65 20 74 77 6f 20 73 74 61  * If the two sta
aac0: 74 65 6d 65 6e 74 73 20 63 6f 6e 74 61 69 6e 20  tements contain 
aad0: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75 6d 62  a different numb
aae0: 65 72 20 6f 66 20 62 69 6e 64 69 6e 67 73 2c 20  er of bindings, 
aaf0: 74 68 65 6e 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  then.** an SQLIT
ab00: 45 5f 45 52 52 4f 52 20 69 73 20 72 65 74 75 72  E_ERROR is retur
ab10: 6e 65 64 2e 20 20 4e 6f 74 68 69 6e 67 20 65 6c  ned.  Nothing el
ab20: 73 65 20 63 61 6e 20 67 6f 20 77 72 6f 6e 67 2c  se can go wrong,
ab30: 20 73 6f 20 6f 74 68 65 72 77 69 73 65 0a 2a 2a   so otherwise.**
ab40: 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72 65   SQLITE_OK is re
ab50: 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  turned..*/.int s
ab60: 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f  qlite3_transfer_
ab70: 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  bindings(sqlite3
ab80: 5f 73 74 6d 74 20 2a 70 46 72 6f 6d 53 74 6d 74  _stmt *pFromStmt
ab90: 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
aba0: 70 54 6f 53 74 6d 74 29 7b 0a 20 20 56 64 62 65  pToStmt){.  Vdbe
abb0: 20 2a 70 46 72 6f 6d 20 3d 20 28 56 64 62 65 2a   *pFrom = (Vdbe*
abc0: 29 70 46 72 6f 6d 53 74 6d 74 3b 0a 20 20 56 64  )pFromStmt;.  Vd
abd0: 62 65 20 2a 70 54 6f 20 3d 20 28 56 64 62 65 2a  be *pTo = (Vdbe*
abe0: 29 70 54 6f 53 74 6d 74 3b 0a 20 20 69 66 28 20  )pToStmt;.  if( 
abf0: 70 46 72 6f 6d 2d 3e 6e 56 61 72 21 3d 70 54 6f  pFrom->nVar!=pTo
ac00: 2d 3e 6e 56 61 72 20 29 7b 0a 20 20 20 20 72 65  ->nVar ){.    re
ac10: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
ac20: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 54 6f  R;.  }.  if( pTo
ac30: 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26 26  ->isPrepareV2 &&
ac40: 20 70 54 6f 2d 3e 65 78 70 6d 61 73 6b 20 29 7b   pTo->expmask ){
ac50: 0a 20 20 20 20 70 54 6f 2d 3e 65 78 70 69 72 65  .    pTo->expire
ac60: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 1;.  }.  if(
ac70: 20 70 46 72 6f 6d 2d 3e 69 73 50 72 65 70 61 72   pFrom->isPrepar
ac80: 65 56 32 20 26 26 20 70 46 72 6f 6d 2d 3e 65 78  eV2 && pFrom->ex
ac90: 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20 70 46 72  pmask ){.    pFr
aca0: 6f 6d 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b  om->expired = 1;
acb0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71  .  }.  return sq
acc0: 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
acd0: 64 69 6e 67 73 28 70 46 72 6f 6d 53 74 6d 74 2c  dings(pFromStmt,
ace0: 20 70 54 6f 53 74 6d 74 29 3b 0a 7d 0a 23 65 6e   pToStmt);.}.#en
acf0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
ad00: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 64  n the sqlite3* d
ad10: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74  atabase handle t
ad20: 6f 20 77 68 69 63 68 20 74 68 65 20 70 72 65 70  o which the prep
ad30: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 67  ared statement g
ad40: 69 76 65 6e 0a 2a 2a 20 69 6e 20 74 68 65 20 61  iven.** in the a
ad50: 72 67 75 6d 65 6e 74 20 62 65 6c 6f 6e 67 73 2e  rgument belongs.
ad60: 20 20 54 68 69 73 20 69 73 20 74 68 65 20 73 61    This is the sa
ad70: 6d 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  me database hand
ad80: 6c 65 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 74  le that was.** t
ad90: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
ada0: 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  t to the sqlite3
adb0: 5f 70 72 65 70 61 72 65 28 29 20 74 68 61 74 20  _prepare() that 
adc0: 77 61 73 20 75 73 65 64 20 74 6f 20 63 72 65 61  was used to crea
add0: 74 65 0a 2a 2a 20 74 68 65 20 73 74 61 74 65 6d  te.** the statem
ade0: 65 6e 74 20 69 6e 20 74 68 65 20 66 69 72 73 74  ent in the first
adf0: 20 70 6c 61 63 65 2e 0a 2a 2f 0a 73 71 6c 69 74   place..*/.sqlit
ae00: 65 33 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f 68  e3 *sqlite3_db_h
ae10: 61 6e 64 6c 65 28 73 71 6c 69 74 65 33 5f 73 74  andle(sqlite3_st
ae20: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 72 65  mt *pStmt){.  re
ae30: 74 75 72 6e 20 70 53 74 6d 74 20 3f 20 28 28 56  turn pStmt ? ((V
ae40: 64 62 65 2a 29 70 53 74 6d 74 29 2d 3e 64 62 20  dbe*)pStmt)->db 
ae50: 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  : 0;.}../*.** Re
ae60: 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65  turn true if the
ae70: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
ae80: 65 6e 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ent is guarantee
ae90: 64 20 74 6f 20 6e 6f 74 20 6d 6f 64 69 66 79 20  d to not modify 
aea0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
aeb0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
aec0: 73 74 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 73 71  stmt_readonly(sq
aed0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
aee0: 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 70 53 74  t){.  return pSt
aef0: 6d 74 20 3f 20 28 28 56 64 62 65 2a 29 70 53 74  mt ? ((Vdbe*)pSt
af00: 6d 74 29 2d 3e 72 65 61 64 4f 6e 6c 79 20 3a 20  mt)->readOnly : 
af10: 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  1;.}../*.** Retu
af20: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 70  rn true if the p
af30: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
af40: 74 20 69 73 20 69 6e 20 6e 65 65 64 20 6f 66 20  t is in need of 
af50: 62 65 69 6e 67 20 72 65 73 65 74 2e 0a 2a 2f 0a  being reset..*/.
af60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  int sqlite3_stmt
af70: 5f 62 75 73 79 28 73 71 6c 69 74 65 33 5f 73 74  _busy(sqlite3_st
af80: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64  mt *pStmt){.  Vd
af90: 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29 70  be *v = (Vdbe*)p
afa0: 53 74 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 76  Stmt;.  return v
afb0: 21 3d 30 20 26 26 20 76 2d 3e 70 63 3e 3d 30 20  !=0 && v->pc>=0 
afc0: 26 26 20 76 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  && v->magic==VDB
afd0: 45 5f 4d 41 47 49 43 5f 52 55 4e 3b 0a 7d 0a 0a  E_MAGIC_RUN;.}..
afe0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 70  /*.** Return a p
aff0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 65  ointer to the ne
b000: 78 74 20 70 72 65 70 61 72 65 64 20 73 74 61 74  xt prepared stat
b010: 65 6d 65 6e 74 20 61 66 74 65 72 20 70 53 74 6d  ement after pStm
b020: 74 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  t associated.** 
b030: 77 69 74 68 20 64 61 74 61 62 61 73 65 20 63 6f  with database co
b040: 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e 20 20 49  nnection pDb.  I
b050: 66 20 70 53 74 6d 74 20 69 73 20 4e 55 4c 4c 2c  f pStmt is NULL,
b060: 20 72 65 74 75 72 6e 20 74 68 65 20 66 69 72 73   return the firs
b070: 74 0a 2a 2a 20 70 72 65 70 61 72 65 64 20 73 74  t.** prepared st
b080: 61 74 65 6d 65 6e 74 20 66 6f 72 20 74 68 65 20  atement for the 
b090: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
b0a0: 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c  ion.  Return NUL
b0b0: 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a 20 61 72  L if there.** ar
b0c0: 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f 0a 73 71  e no more..*/.sq
b0d0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 71 6c 69  lite3_stmt *sqli
b0e0: 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28 73 71  te3_next_stmt(sq
b0f0: 6c 69 74 65 33 20 2a 70 44 62 2c 20 73 71 6c 69  lite3 *pDb, sqli
b100: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
b110: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
b120: 20 2a 70 4e 65 78 74 3b 0a 23 69 66 64 65 66 20   *pNext;.#ifdef 
b130: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
b140: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
b150: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
b160: 6b 4f 6b 28 70 44 62 29 20 29 7b 0a 20 20 20 20  kOk(pDb) ){.    
b170: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
b180: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
b190: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
b1a0: 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
b1b0: 65 78 5f 65 6e 74 65 72 28 70 44 62 2d 3e 6d 75  ex_enter(pDb->mu
b1c0: 74 65 78 29 3b 0a 20 20 69 66 28 20 70 53 74 6d  tex);.  if( pStm
b1d0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4e 65 78  t==0 ){.    pNex
b1e0: 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d  t = (sqlite3_stm
b1f0: 74 2a 29 70 44 62 2d 3e 70 56 64 62 65 3b 0a 20  t*)pDb->pVdbe;. 
b200: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4e 65 78   }else{.    pNex
b210: 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d  t = (sqlite3_stm
b220: 74 2a 29 28 28 56 64 62 65 2a 29 70 53 74 6d 74  t*)((Vdbe*)pStmt
b230: 29 2d 3e 70 4e 65 78 74 3b 0a 20 20 7d 0a 20 20  )->pNext;.  }.  
b240: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
b250: 61 76 65 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b  ave(pDb->mutex);
b260: 0a 20 20 72 65 74 75 72 6e 20 70 4e 65 78 74 3b  .  return pNext;
b270: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
b280: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
b290: 73 74 61 74 75 73 20 63 6f 75 6e 74 65 72 20 66  status counter f
b2a0: 6f 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74  or a prepared st
b2b0: 61 74 65 6d 65 6e 74 0a 2a 2f 0a 69 6e 74 20 73  atement.*/.int s
b2c0: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
b2d0: 75 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  us(sqlite3_stmt 
b2e0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 6f 70 2c 20  *pStmt, int op, 
b2f0: 69 6e 74 20 72 65 73 65 74 46 6c 61 67 29 7b 0a  int resetFlag){.
b300: 20 20 56 64 62 65 20 2a 70 56 64 62 65 20 3d 20    Vdbe *pVdbe = 
b310: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
b320: 75 33 32 20 76 3b 0a 23 69 66 64 65 66 20 53 51  u32 v;.#ifdef SQ
b330: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
b340: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 70 53 74  ARMOR.  if( !pSt
b350: 6d 74 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29  mt ){.    (void)
b360: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
b370: 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  PT;.    return 0
b380: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 76  ;.  }.#endif.  v
b390: 20 3d 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74   = pVdbe->aCount
b3a0: 65 72 5b 6f 70 5d 3b 0a 20 20 69 66 28 20 72 65  er[op];.  if( re
b3b0: 73 65 74 46 6c 61 67 20 29 20 70 56 64 62 65 2d  setFlag ) pVdbe-
b3c0: 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 5d 20 3d 20  >aCounter[op] = 
b3d0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 28 69 6e 74  0;.  return (int
b3e0: 29 76 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  )v;.}..#ifdef SQ
b3f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
b400: 5f 53 43 41 4e 53 54 41 54 55 53 0a 2f 2a 0a 2a  _SCANSTATUS./*.*
b410: 2a 20 52 65 74 75 72 6e 20 73 74 61 74 75 73 20  * Return status 
b420: 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e 67 6c  data for a singl
b430: 65 20 6c 6f 6f 70 20 77 69 74 68 69 6e 20 71 75  e loop within qu
b440: 65 72 79 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e  ery pStmt..*/.in
b450: 74 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73  t sqlite3_stmt_s
b460: 63 61 6e 73 74 61 74 75 73 28 0a 20 20 73 71 6c  canstatus(.  sql
b470: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
b480: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ,            /* 
b490: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
b4a0: 6e 74 20 62 65 69 6e 67 20 71 75 65 72 69 65 64  nt being queried
b4b0: 20 2a 2f 0a 20 20 69 6e 74 20 69 64 78 2c 20 20   */.  int idx,  
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
b4e0: 66 20 6c 6f 6f 70 20 74 6f 20 72 65 70 6f 72 74  f loop to report
b4f0: 20 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 53 63   on */.  int iSc
b500: 61 6e 53 74 61 74 75 73 4f 70 2c 20 20 20 20 20  anStatusOp,     
b510: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
b520: 68 20 6d 65 74 72 69 63 20 74 6f 20 72 65 74 75  h metric to retu
b530: 72 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4f  rn */.  void *pO
b540: 75 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ut              
b550: 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
b560: 57 72 69 74 65 20 74 68 65 20 61 6e 73 77 65 72  Write the answer
b570: 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20 56 64   here */.){.  Vd
b580: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70  be *p = (Vdbe*)p
b590: 53 74 6d 74 3b 0a 20 20 53 63 61 6e 53 74 61 74  Stmt;.  ScanStat
b5a0: 75 73 20 2a 70 53 63 61 6e 3b 0a 20 20 69 66 28  us *pScan;.  if(
b5b0: 20 69 64 78 3c 30 20 7c 7c 20 69 64 78 3e 3d 70   idx<0 || idx>=p
b5c0: 2d 3e 6e 53 63 61 6e 20 29 20 72 65 74 75 72 6e  ->nScan ) return
b5d0: 20 31 3b 0a 20 20 70 53 63 61 6e 20 3d 20 26 70   1;.  pScan = &p
b5e0: 2d 3e 61 53 63 61 6e 5b 69 64 78 5d 3b 0a 20 20  ->aScan[idx];.  
b5f0: 73 77 69 74 63 68 28 20 69 53 63 61 6e 53 74 61  switch( iScanSta
b600: 74 75 73 4f 70 20 29 7b 0a 20 20 20 20 63 61 73  tusOp ){.    cas
b610: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
b620: 54 5f 4e 4c 4f 4f 50 3a 20 7b 0a 20 20 20 20 20  T_NLOOP: {.     
b630: 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34   *(sqlite3_int64
b640: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45 78  *)pOut = p->anEx
b650: 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 4c 6f  ec[pScan->addrLo
b660: 6f 70 5d 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  op];.      break
b670: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
b680: 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41 54   SQLITE_SCANSTAT
b690: 5f 4e 56 49 53 49 54 3a 20 7b 0a 20 20 20 20 20  _NVISIT: {.     
b6a0: 20 2a 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34   *(sqlite3_int64
b6b0: 2a 29 70 4f 75 74 20 3d 20 70 2d 3e 61 6e 45 78  *)pOut = p->anEx
b6c0: 65 63 5b 70 53 63 61 6e 2d 3e 61 64 64 72 56 69  ec[pScan->addrVi
b6d0: 73 69 74 5d 3b 0a 20 20 20 20 20 20 62 72 65 61  sit];.      brea
b6e0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
b6f0: 65 20 53 51 4c 49 54 45 5f 53 43 41 4e 53 54 41  e SQLITE_SCANSTA
b700: 54 5f 45 53 54 3a 20 7b 0a 20 20 20 20 20 20 64  T_EST: {.      d
b710: 6f 75 62 6c 65 20 72 20 3d 20 31 2e 30 3b 0a 20  ouble r = 1.0;. 
b720: 20 20 20 20 20 4c 6f 67 45 73 74 20 78 20 3d 20       LogEst x = 
b730: 70 53 63 61 6e 2d 3e 6e 45 73 74 3b 0a 20 20 20  pScan->nEst;.   
b740: 20 20 20 77 68 69 6c 65 28 20 78 3c 31 30 30 20     while( x<100 
b750: 29 7b 0a 20 20 20 20 20 20 20 20 78 20 2b 3d 20  ){.        x += 
b760: 31 30 3b 0a 20 20 20 20 20 20 20 20 72 20 2a 3d  10;.        r *=
b770: 20 30 2e 35 3b 0a 20 20 20 20 20 20 7d 0a 20 20   0.5;.      }.  
b780: 20 20 20 20 2a 28 64 6f 75 62 6c 65 2a 29 70 4f      *(double*)pO
b790: 75 74 20 3d 20 72 2a 73 71 6c 69 74 65 33 4c 6f  ut = r*sqlite3Lo
b7a0: 67 45 73 74 54 6f 49 6e 74 28 78 29 3b 0a 20 20  gEstToInt(x);.  
b7b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
b7c0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
b7d0: 5f 53 43 41 4e 53 54 41 54 5f 4e 41 4d 45 3a 20  _SCANSTAT_NAME: 
b7e0: 7b 0a 20 20 20 20 20 20 2a 28 63 6f 6e 73 74 20  {.      *(const 
b7f0: 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20 70 53  char**)pOut = pS
b800: 63 61 6e 2d 3e 7a 4e 61 6d 65 3b 0a 20 20 20 20  can->zName;.    
b810: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
b820: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53     case SQLITE_S
b830: 43 41 4e 53 54 41 54 5f 45 58 50 4c 41 49 4e 3a  CANSTAT_EXPLAIN:
b840: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53 63   {.      if( pSc
b850: 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e 20  an->addrExplain 
b860: 29 7b 0a 20 20 20 20 20 20 20 20 2a 28 63 6f 6e  ){.        *(con
b870: 73 74 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d  st char**)pOut =
b880: 20 70 2d 3e 61 4f 70 5b 20 70 53 63 61 6e 2d 3e   p->aOp[ pScan->
b890: 61 64 64 72 45 78 70 6c 61 69 6e 20 5d 2e 70 34  addrExplain ].p4
b8a0: 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  .z;.      }else{
b8b0: 0a 20 20 20 20 20 20 20 20 2a 28 63 6f 6e 73 74  .        *(const
b8c0: 20 63 68 61 72 2a 2a 29 70 4f 75 74 20 3d 20 30   char**)pOut = 0
b8d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b8e0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
b8f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 41   case SQLITE_SCA
b900: 4e 53 54 41 54 5f 53 45 4c 45 43 54 49 44 3a 20  NSTAT_SELECTID: 
b910: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 53 63 61  {.      if( pSca
b920: 6e 2d 3e 61 64 64 72 45 78 70 6c 61 69 6e 20 29  n->addrExplain )
b930: 7b 0a 20 20 20 20 20 20 20 20 2a 28 69 6e 74 2a  {.        *(int*
b940: 29 70 4f 75 74 20 3d 20 70 2d 3e 61 4f 70 5b 20  )pOut = p->aOp[ 
b950: 70 53 63 61 6e 2d 3e 61 64 64 72 45 78 70 6c 61  pScan->addrExpla
b960: 69 6e 20 5d 2e 70 31 3b 0a 20 20 20 20 20 20 7d  in ].p1;.      }
b970: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2a 28  else{.        *(
b980: 69 6e 74 2a 29 70 4f 75 74 20 3d 20 2d 31 3b 0a  int*)pOut = -1;.
b990: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
b9a0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  eak;.    }.    d
b9b0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
b9c0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a  return 1;.    }.
b9d0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
b9e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 5a 65 72 6f 20 61 6c  }../*.** Zero al
b9f0: 6c 20 63 6f 75 6e 74 65 72 73 20 61 73 73 6f 63  l counters assoc
ba00: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73  iated with the s
ba10: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e  qlite3_stmt_scan
ba20: 73 74 61 74 75 73 28 29 20 64 61 74 61 2e 0a 2a  status() data..*
ba30: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
ba40: 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 5f 72  tmt_scanstatus_r
ba50: 65 73 65 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  eset(sqlite3_stm
ba60: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
ba70: 65 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53  e *p = (Vdbe*)pS
ba80: 74 6d 74 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d  tmt;.  memset(p-
ba90: 3e 61 6e 45 78 65 63 2c 20 30 2c 20 70 2d 3e 6e  >anExec, 0, p->n
baa0: 4f 70 20 2a 20 73 69 7a 65 6f 66 28 69 36 34 29  Op * sizeof(i64)
bab0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
bac0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
bad0: 54 5f 53 43 41 4e 53 54 41 54 55 53 20 2a 2f 0a  T_SCANSTATUS */.