/ Hex Artifact Content
Login

Artifact c1432e2aaa97e918901a55186199e23aa9047805:


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 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
0410: 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20  outine destroys 
0420: 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  a virtual machin
0430: 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  e that is create
0440: 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69  d by.** the sqli
0450: 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f  te3_compile() ro
0460: 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67  utine. The integ
0470: 65 72 20 72 65 74 75 72 6e 65 64 20 69 73 20 61  er returned is a
0480: 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63  n SQLITE_.** suc
0490: 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64  cess/failure cod
04a0: 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
04b0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
04c0: 78 65 63 75 74 69 6e 67 20 74 68 65 20 76 69 72  xecuting the vir
04d0: 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e  tual.** machine.
04e0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
04f0: 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72 72  ine sets the err
0500: 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69  or code and stri
0510: 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a  ng returned by.*
0520: 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  * sqlite3_errcod
0530: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  e(), sqlite3_err
0540: 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65  msg() and sqlite
0550: 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f  3_errmsg16()..*/
0560: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e  .int sqlite3_fin
0570: 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74  alize(sqlite3_st
0580: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e  mt *pStmt){.  in
0590: 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d  t rc;.  if( pStm
05a0: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  t==0 ){.    rc =
05b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65   SQLITE_OK;.  }e
05c0: 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 20 2a 76  lse{.    Vdbe *v
05d0: 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b   = (Vdbe*)pStmt;
05e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62  .    sqlite3 *db
05f0: 20 3d 20 76 2d 3e 64 62 3b 0a 23 69 66 20 53 51   = v->db;.#if SQ
0600: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a  LITE_THREADSAFE.
0610: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
0620: 78 20 2a 6d 75 74 65 78 3b 0a 23 65 6e 64 69 66  x *mutex;.#endif
0630: 0a 20 20 20 20 69 66 28 20 64 62 3d 3d 30 20 29  .    if( db==0 )
0640: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
0650: 49 53 55 53 45 3b 0a 23 69 66 20 53 51 4c 49 54  ISUSE;.#if SQLIT
0660: 45 5f 54 48 52 45 41 44 53 41 46 45 0a 20 20 20  E_THREADSAFE.   
0670: 20 6d 75 74 65 78 20 3d 20 76 2d 3e 64 62 2d 3e   mutex = v->db->
0680: 6d 75 74 65 78 3b 0a 23 65 6e 64 69 66 0a 20 20  mutex;.#endif.  
0690: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
06a0: 65 6e 74 65 72 28 6d 75 74 65 78 29 3b 0a 20 20  enter(mutex);.  
06b0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
06c0: 62 65 46 69 6e 61 6c 69 7a 65 28 76 29 3b 0a 20  beFinalize(v);. 
06d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41     rc = sqlite3A
06e0: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
06f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
0700: 78 5f 6c 65 61 76 65 28 6d 75 74 65 78 29 3b 0a  x_leave(mutex);.
0710: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
0720: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e  .}../*.** Termin
0730: 61 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ate the current 
0740: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20  execution of an 
0750: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  SQL statement an
0760: 64 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61  d reset it.** ba
0770: 63 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69  ck to its starti
0780: 6e 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74  ng state so that
0790: 20 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65   it can be reuse
07a0: 64 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64  d. A success cod
07b0: 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72  e from.** the pr
07c0: 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73  ior execution is
07d0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a   returned..**.**
07e0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
07f0: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
0800: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
0810: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
0820: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
0830: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
0840: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
0850: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
0860: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c  qlite3_reset(sql
0870: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
0880: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ){.  int rc;.  i
0890: 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20  f( pStmt==0 ){. 
08a0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
08b0: 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  K;.  }else{.    
08c0: 56 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a  Vdbe *v = (Vdbe*
08d0: 29 70 53 74 6d 74 3b 0a 20 20 20 20 73 71 6c 69  )pStmt;.    sqli
08e0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
08f0: 76 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  v->db->mutex);. 
0900: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
0910: 64 62 65 52 65 73 65 74 28 76 29 3b 0a 20 20 20  dbeReset(v);.   
0920: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
0930: 52 65 61 64 79 28 76 2c 20 2d 31 2c 20 30 2c 20  Ready(v, -1, 0, 
0940: 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20  0, 0, 0, 0);.   
0950: 20 61 73 73 65 72 74 28 20 28 72 63 20 26 20 28   assert( (rc & (
0960: 76 2d 3e 64 62 2d 3e 65 72 72 4d 61 73 6b 29 29  v->db->errMask))
0970: 3d 3d 72 63 20 29 3b 0a 20 20 20 20 72 63 20 3d  ==rc );.    rc =
0980: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
0990: 76 2d 3e 64 62 2c 20 72 63 29 3b 0a 20 20 20 20  v->db, rc);.    
09a0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
09b0: 61 76 65 28 76 2d 3e 64 62 2d 3e 6d 75 74 65 78  ave(v->db->mutex
09c0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
09d0: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  rc;.}../*.** Set
09e0: 20 61 6c 6c 20 74 68 65 20 70 61 72 61 6d 65 74   all the paramet
09f0: 65 72 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  ers in the compi
0a00: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
0a10: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2f 0a 69 6e  t to NULL..*/.in
0a20: 74 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  t sqlite3_clear_
0a30: 62 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  bindings(sqlite3
0a40: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
0a50: 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72 63   int i;.  int rc
0a60: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
0a70: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 2a  Vdbe *p = (Vdbe*
0a80: 29 70 53 74 6d 74 3b 0a 23 69 66 20 53 51 4c 49  )pStmt;.#if SQLI
0a90: 54 45 5f 54 48 52 45 41 44 53 41 46 45 0a 20 20  TE_THREADSAFE.  
0aa0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
0ab0: 75 74 65 78 20 3d 20 28 28 56 64 62 65 2a 29 70  utex = ((Vdbe*)p
0ac0: 53 74 6d 74 29 2d 3e 64 62 2d 3e 6d 75 74 65 78  Stmt)->db->mutex
0ad0: 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
0ae0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d  e3_mutex_enter(m
0af0: 75 74 65 78 29 3b 0a 20 20 66 6f 72 28 69 3d 30  utex);.  for(i=0
0b00: 3b 20 69 3c 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b  ; i<p->nVar; i++
0b10: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
0b20: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 70 2d  beMemRelease(&p-
0b30: 3e 61 56 61 72 5b 69 5d 29 3b 0a 20 20 20 20 70  >aVar[i]);.    p
0b40: 2d 3e 61 56 61 72 5b 69 5d 2e 66 6c 61 67 73 20  ->aVar[i].flags 
0b50: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 7d 0a  = MEM_Null;.  }.
0b60: 20 20 69 66 28 20 70 2d 3e 69 73 50 72 65 70 61    if( p->isPrepa
0b70: 72 65 56 32 20 26 26 20 70 2d 3e 65 78 70 6d 61  reV2 && p->expma
0b80: 73 6b 20 29 7b 0a 20 20 20 20 70 2d 3e 65 78 70  sk ){.    p->exp
0b90: 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
0ba0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
0bb0: 61 76 65 28 6d 75 74 65 78 29 3b 0a 20 20 72 65  ave(mutex);.  re
0bc0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 2a  turn rc;.}.../**
0bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 73 71 6c 69 74  ********** sqlit
0bf0: 65 33 5f 76 61 6c 75 65 5f 20 20 2a 2a 2a 2a 2a  e3_value_  *****
0c00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0c10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
0c20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
0c30: 69 6e 65 73 20 65 78 74 72 61 63 74 20 69 6e 66  ines extract inf
0c40: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
0c50: 4d 65 6d 20 6f 72 20 73 71 6c 69 74 65 33 5f 76  Mem or sqlite3_v
0c60: 61 6c 75 65 0a 2a 2a 20 73 74 72 75 63 74 75 72  alue.** structur
0c70: 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64  e..*/.const void
0c80: 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f   *sqlite3_value_
0c90: 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 76 61 6c  blob(sqlite3_val
0ca0: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
0cb0: 20 2a 70 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c   *p = (Mem*)pVal
0cc0: 3b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  ;.  if( p->flags
0cd0: 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
0ce0: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 73 71 6c  _Str) ){.    sql
0cf0: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
0d00: 64 42 6c 6f 62 28 70 29 3b 0a 20 20 20 20 70 2d  dBlob(p);.    p-
0d10: 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53  >flags &= ~MEM_S
0d20: 74 72 3b 0a 20 20 20 20 70 2d 3e 66 6c 61 67 73  tr;.    p->flags
0d30: 20 7c 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20   |= MEM_Blob;.  
0d40: 20 20 72 65 74 75 72 6e 20 70 2d 3e 7a 3b 0a 20    return p->z;. 
0d50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
0d60: 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  rn sqlite3_value
0d70: 5f 74 65 78 74 28 70 56 61 6c 29 3b 0a 20 20 7d  _text(pVal);.  }
0d80: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  .}.int sqlite3_v
0d90: 61 6c 75 65 5f 62 79 74 65 73 28 73 71 6c 69 74  alue_bytes(sqlit
0da0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
0db0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
0dc0: 33 56 61 6c 75 65 42 79 74 65 73 28 70 56 61 6c  3ValueBytes(pVal
0dd0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
0de0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  }.int sqlite3_va
0df0: 6c 75 65 5f 62 79 74 65 73 31 36 28 73 71 6c 69  lue_bytes16(sqli
0e00: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29  te3_value *pVal)
0e10: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
0e20: 65 33 56 61 6c 75 65 42 79 74 65 73 28 70 56 61  e3ValueBytes(pVa
0e30: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  l, SQLITE_UTF16N
0e40: 41 54 49 56 45 29 3b 0a 7d 0a 64 6f 75 62 6c 65  ATIVE);.}.double
0e50: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
0e60: 6f 75 62 6c 65 28 73 71 6c 69 74 65 33 5f 76 61  ouble(sqlite3_va
0e70: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65  lue *pVal){.  re
0e80: 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65  turn sqlite3Vdbe
0e90: 52 65 61 6c 56 61 6c 75 65 28 28 4d 65 6d 2a 29  RealValue((Mem*)
0ea0: 70 56 61 6c 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c  pVal);.}.int sql
0eb0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 73  ite3_value_int(s
0ec0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
0ed0: 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20 28 69  al){.  return (i
0ee0: 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
0ef0: 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29 70 56 61  tValue((Mem*)pVa
0f00: 6c 29 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69 6e 74  l);.}.sqlite_int
0f10: 36 34 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  64 sqlite3_value
0f20: 5f 69 6e 74 36 34 28 73 71 6c 69 74 65 33 5f 76  _int64(sqlite3_v
0f30: 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72  alue *pVal){.  r
0f40: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64 62  eturn sqlite3Vdb
0f50: 65 49 6e 74 56 61 6c 75 65 28 28 4d 65 6d 2a 29  eIntValue((Mem*)
0f60: 70 56 61 6c 29 3b 0a 7d 0a 63 6f 6e 73 74 20 75  pVal);.}.const u
0f70: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 73 71  nsigned char *sq
0f80: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
0f90: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
0fa0: 70 56 61 6c 29 7b 0a 20 20 72 65 74 75 72 6e 20  pVal){.  return 
0fb0: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
0fc0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 56 61  char *)sqlite3Va
0fd0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
0fe0: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23 69  LITE_UTF8);.}.#i
0ff0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1000: 54 5f 55 54 46 31 36 0a 63 6f 6e 73 74 20 76 6f  T_UTF16.const vo
1010: 69 64 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75  id *sqlite3_valu
1020: 65 5f 74 65 78 74 31 36 28 73 71 6c 69 74 65 33  e_text16(sqlite3
1030: 5f 76 61 6c 75 65 2a 20 70 56 61 6c 29 7b 0a 20  _value* pVal){. 
1040: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
1050: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
1060: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
1070: 45 29 3b 0a 7d 0a 63 6f 6e 73 74 20 76 6f 69 64  E);.}.const void
1080: 20 2a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f   *sqlite3_value_
1090: 74 65 78 74 31 36 62 65 28 73 71 6c 69 74 65 33  text16be(sqlite3
10a0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
10b0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56   return sqlite3V
10c0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
10d0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 29 3b 0a  QLITE_UTF16BE);.
10e0: 7d 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  }.const void *sq
10f0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
1100: 31 36 6c 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  16le(sqlite3_val
1110: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 72 65 74  ue *pVal){.  ret
1120: 75 72 6e 20 73 71 6c 69 74 65 33 56 61 6c 75 65  urn sqlite3Value
1130: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
1140: 45 5f 55 54 46 31 36 4c 45 29 3b 0a 7d 0a 23 65  E_UTF16LE);.}.#e
1150: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
1160: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74  MIT_UTF16 */.int
1170: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
1180: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
1190: 65 2a 20 70 56 61 6c 29 7b 0a 20 20 72 65 74 75  e* pVal){.  retu
11a0: 72 6e 20 70 56 61 6c 2d 3e 74 79 70 65 3b 0a 7d  rn pVal->type;.}
11b0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
11c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20  *************** 
11d0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 20  sqlite3_result_ 
11e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
11f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1200: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1210: 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 75  g routines are u
1220: 73 65 64 20 62 79 20 75 73 65 72 2d 64 65 66 69  sed by user-defi
1230: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ned functions to
1240: 20 73 70 65 63 69 66 79 0a 2a 2a 20 74 68 65 20   specify.** the 
1250: 66 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74 2e  function result.
1260: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 65 74 53 74  .**.** The setSt
1270: 72 4f 72 45 72 72 6f 72 28 29 20 66 75 6e 74 69  rOrError() funti
1280: 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  on calls sqlite3
1290: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 29 20  VdbeMemSetStr() 
12a0: 74 6f 20 73 74 6f 72 65 20 74 68 65 0a 2a 2a 20  to store the.** 
12b0: 72 65 73 75 6c 74 20 61 73 20 61 20 73 74 72 69  result as a stri
12c0: 6e 67 20 6f 72 20 62 6c 6f 62 20 62 75 74 20 69  ng or blob but i
12d0: 66 20 74 68 65 20 73 74 72 69 6e 67 20 6f 72 20  f the string or 
12e0: 62 6c 6f 62 20 69 73 20 74 6f 6f 20 6c 61 72 67  blob is too larg
12f0: 65 2c 20 69 74 0a 2a 2a 20 74 68 65 6e 20 73 65  e, it.** then se
1300: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
1310: 65 20 74 6f 20 53 51 4c 49 54 45 5f 54 4f 4f 42  e to SQLITE_TOOB
1320: 49 47 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  IG.*/.static voi
1330: 64 20 73 65 74 52 65 73 75 6c 74 53 74 72 4f 72  d setResultStrOr
1340: 45 72 72 6f 72 28 0a 20 20 73 71 6c 69 74 65 33  Error(.  sqlite3
1350: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1360: 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 63 6f 6e   /* Function con
1370: 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
1380: 63 68 61 72 20 2a 7a 2c 20 20 20 20 20 20 20 20  char *z,        
1390: 20 20 2f 2a 20 53 74 72 69 6e 67 20 70 6f 69 6e    /* String poin
13a0: 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 2c 20  ter */.  int n, 
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c0: 20 2f 2a 20 42 79 74 65 73 20 69 6e 20 73 74 72   /* Bytes in str
13d0: 69 6e 67 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  ing, or negative
13e0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 2c 20 20 20   */.  u8 enc,   
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1400: 20 45 6e 63 6f 64 69 6e 67 20 6f 66 20 7a 2e 20   Encoding of z. 
1410: 20 30 20 66 6f 72 20 42 4c 4f 42 73 20 2a 2f 0a   0 for BLOBs */.
1420: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
1430: 6f 69 64 2a 29 20 20 20 20 20 2f 2a 20 44 65 73  oid*)     /* Des
1440: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
1450: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c   */.){.  if( sql
1460: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
1470: 72 28 26 70 43 74 78 2d 3e 73 2c 20 7a 2c 20 6e  r(&pCtx->s, z, n
1480: 2c 20 65 6e 63 2c 20 78 44 65 6c 29 3d 3d 53 51  , enc, xDel)==SQ
1490: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 7b 0a 20  LITE_TOOBIG ){. 
14a0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
14b0: 74 5f 65 72 72 6f 72 5f 74 6f 6f 62 69 67 28 70  t_error_toobig(p
14c0: 43 74 78 29 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64  Ctx);.  }.}.void
14d0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
14e0: 62 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f  blob(.  sqlite3_
14f0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
1500: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c    const void *z,
1510: 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f   .  int n, .  vo
1520: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
1530: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
1540: 6e 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  n>=0 );.  assert
1550: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
1560: 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d  held(pCtx->s.db-
1570: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74  >mutex) );.  set
1580: 52 65 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72  ResultStrOrError
1590: 28 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 30 2c 20  (pCtx, z, n, 0, 
15a0: 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  xDel);.}.void sq
15b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
15c0: 62 6c 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ble(sqlite3_cont
15d0: 65 78 74 20 2a 70 43 74 78 2c 20 64 6f 75 62 6c  ext *pCtx, doubl
15e0: 65 20 72 56 61 6c 29 7b 0a 20 20 61 73 73 65 72  e rVal){.  asser
15f0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
1600: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62  _held(pCtx->s.db
1610: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 44  lite3VdbeMemSetD
1630: 6f 75 62 6c 65 28 26 70 43 74 78 2d 3e 73 2c 20  ouble(&pCtx->s, 
1640: 72 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  rVal);.}.void sq
1650: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
1660: 6f 72 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  or(sqlite3_conte
1670: 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20  xt *pCtx, const 
1680: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b  char *z, int n){
1690: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
16a0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
16b0: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
16c0: 20 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72   );.  pCtx->isEr
16d0: 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52  ror = SQLITE_ERR
16e0: 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  OR;.  sqlite3Vdb
16f0: 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78  eMemSetStr(&pCtx
1700: 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  ->s, z, n, SQLIT
1710: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 54  E_UTF8, SQLITE_T
1720: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66  RANSIENT);.}.#if
1730: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1740: 5f 55 54 46 31 36 0a 76 6f 69 64 20 73 71 6c 69  _UTF16.void sqli
1750: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
1760: 31 36 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  16(sqlite3_conte
1770: 78 74 20 2a 70 43 74 78 2c 20 63 6f 6e 73 74 20  xt *pCtx, const 
1780: 76 6f 69 64 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b  void *z, int n){
1790: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
17a0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 43  e3_mutex_held(pC
17b0: 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78 29  tx->s.db->mutex)
17c0: 20 29 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72   );.  pCtx->isEr
17d0: 72 6f 72 20 3d 20 53 51 4c 49 54 45 5f 45 52 52  ror = SQLITE_ERR
17e0: 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  OR;.  sqlite3Vdb
17f0: 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78  eMemSetStr(&pCtx
1800: 2d 3e 73 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  ->s, z, n, SQLIT
1810: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53  E_UTF16NATIVE, S
1820: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
1830: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ;.}.#endif.void 
1840: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
1850: 6e 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nt(sqlite3_conte
1860: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 56  xt *pCtx, int iV
1870: 61 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  al){.  assert( s
1880: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
1890: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
18a0: 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  tex) );.  sqlite
18b0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
18c0: 28 26 70 43 74 78 2d 3e 73 2c 20 28 69 36 34 29  (&pCtx->s, (i64)
18d0: 69 56 61 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  iVal);.}.void sq
18e0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
18f0: 36 34 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  64(sqlite3_conte
1900: 78 74 20 2a 70 43 74 78 2c 20 69 36 34 20 69 56  xt *pCtx, i64 iV
1910: 61 6c 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  al){.  assert( s
1920: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
1930: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
1940: 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  tex) );.  sqlite
1950: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
1960: 28 26 70 43 74 78 2d 3e 73 2c 20 69 56 61 6c 29  (&pCtx->s, iVal)
1970: 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.}.void sqlite3
1980: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 73 71 6c  _result_null(sql
1990: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
19a0: 74 78 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73  tx){.  assert( s
19b0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
19c0: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
19d0: 74 65 78 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  tex) );.  sqlite
19e0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
19f0: 26 70 43 74 78 2d 3e 73 29 3b 0a 7d 0a 76 6f 69  &pCtx->s);.}.voi
1a00: 64 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  d sqlite3_result
1a10: 5f 74 65 78 74 28 0a 20 20 73 71 6c 69 74 65 33  _text(.  sqlite3
1a20: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1a30: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1a40: 2c 20 0a 20 20 69 6e 74 20 6e 2c 0a 20 20 76 6f  , .  int n,.  vo
1a50: 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 20  id (*xDel)(void 
1a60: 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  *).){.  assert( 
1a70: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
1a80: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
1a90: 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52 65  utex) );.  setRe
1aa0: 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28 70  sultStrOrError(p
1ab0: 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54  Ctx, z, n, SQLIT
1ac0: 45 5f 55 54 46 38 2c 20 78 44 65 6c 29 3b 0a 7d  E_UTF8, xDel);.}
1ad0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ae0: 4f 4d 49 54 5f 55 54 46 31 36 0a 76 6f 69 64 20  OMIT_UTF16.void 
1af0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
1b00: 65 78 74 31 36 28 0a 20 20 73 71 6c 69 74 65 33  ext16(.  sqlite3
1b10: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1b20: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
1b30: 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76  , .  int n, .  v
1b40: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
1b50: 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   *).){.  assert(
1b60: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
1b70: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
1b80: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52  mutex) );.  setR
1b90: 65 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28  esultStrOrError(
1ba0: 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  pCtx, z, n, SQLI
1bb0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20  TE_UTF16NATIVE, 
1bc0: 78 44 65 6c 29 3b 0a 7d 0a 76 6f 69 64 20 73 71  xDel);.}.void sq
1bd0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
1be0: 74 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33  t16be(.  sqlite3
1bf0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
1c00: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
1c10: 2c 20 0a 20 20 69 6e 74 20 6e 2c 20 0a 20 20 76  , .  int n, .  v
1c20: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
1c30: 20 2a 29 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   *).){.  assert(
1c40: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
1c50: 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  eld(pCtx->s.db->
1c60: 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 65 74 52  mutex) );.  setR
1c70: 65 73 75 6c 74 53 74 72 4f 72 45 72 72 6f 72 28  esultStrOrError(
1c80: 70 43 74 78 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49  pCtx, z, n, SQLI
1c90: 54 45 5f 55 54 46 31 36 42 45 2c 20 78 44 65 6c  TE_UTF16BE, xDel
1ca0: 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74 65  );.}.void sqlite
1cb0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c  3_result_text16l
1cc0: 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e(.  sqlite3_con
1cd0: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 63  text *pCtx, .  c
1ce0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 2c 20 0a 20  onst void *z, . 
1cf0: 20 69 6e 74 20 6e 2c 20 0a 20 20 76 6f 69 64 20   int n, .  void 
1d00: 28 2a 78 44 65 6c 29 28 76 6f 69 64 20 2a 29 0a  (*xDel)(void *).
1d10: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  ){.  assert( sql
1d20: 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28  ite3_mutex_held(
1d30: 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65  pCtx->s.db->mute
1d40: 78 29 20 29 3b 0a 20 20 73 65 74 52 65 73 75 6c  x) );.  setResul
1d50: 74 53 74 72 4f 72 45 72 72 6f 72 28 70 43 74 78  tStrOrError(pCtx
1d60: 2c 20 7a 2c 20 6e 2c 20 53 51 4c 49 54 45 5f 55  , z, n, SQLITE_U
1d70: 54 46 31 36 4c 45 2c 20 78 44 65 6c 29 3b 0a 7d  TF16LE, xDel);.}
1d80: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
1d90: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
1da0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65 73  void sqlite3_res
1db0: 75 6c 74 5f 76 61 6c 75 65 28 73 71 6c 69 74 65  ult_value(sqlite
1dc0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
1dd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
1de0: 70 56 61 6c 75 65 29 7b 0a 20 20 61 73 73 65 72  pValue){.  asser
1df0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
1e00: 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62  _held(pCtx->s.db
1e10: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 73 71  ->mutex) );.  sq
1e20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
1e30: 28 26 70 43 74 78 2d 3e 73 2c 20 70 56 61 6c 75  (&pCtx->s, pValu
1e40: 65 29 3b 0a 7d 0a 76 6f 69 64 20 73 71 6c 69 74  e);.}.void sqlit
1e50: 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c  e3_result_zerobl
1e60: 6f 62 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ob(sqlite3_conte
1e70: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 6e 29  xt *pCtx, int n)
1e80: 7b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  {.  assert( sqli
1e90: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70  te3_mutex_held(p
1ea0: 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75 74 65 78  Ctx->s.db->mutex
1eb0: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
1ec0: 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f 62  beMemSetZeroBlob
1ed0: 28 26 70 43 74 78 2d 3e 73 2c 20 6e 29 3b 0a 7d  (&pCtx->s, n);.}
1ee0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 65  .void sqlite3_re
1ef0: 73 75 6c 74 5f 65 72 72 6f 72 5f 63 6f 64 65 28  sult_error_code(
1f00: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
1f10: 2a 70 43 74 78 2c 20 69 6e 74 20 65 72 72 43 6f  *pCtx, int errCo
1f20: 64 65 29 7b 0a 20 20 70 43 74 78 2d 3e 69 73 45  de){.  pCtx->isE
1f30: 72 72 6f 72 20 3d 20 65 72 72 43 6f 64 65 3b 0a  rror = errCode;.
1f40: 20 20 69 66 28 20 70 43 74 78 2d 3e 73 2e 66 6c    if( pCtx->s.fl
1f50: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
1f60: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
1f70: 65 4d 65 6d 53 65 74 53 74 72 28 26 70 43 74 78  eMemSetStr(&pCtx
1f80: 2d 3e 73 2c 20 73 71 6c 69 74 65 33 45 72 72 53  ->s, sqlite3ErrS
1f90: 74 72 28 65 72 72 43 6f 64 65 29 2c 20 2d 31 2c  tr(errCode), -1,
1fa0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1fb0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
1fc0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
1fd0: 54 41 54 49 43 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  TATIC);.  }.}../
1fe0: 2a 20 46 6f 72 63 65 20 61 6e 20 53 51 4c 49 54  * Force an SQLIT
1ff0: 45 5f 54 4f 4f 42 49 47 20 65 72 72 6f 72 2e 20  E_TOOBIG error. 
2000: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
2010: 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 74 6f 6f  result_error_too
2020: 62 69 67 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  big(sqlite3_cont
2030: 65 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73  ext *pCtx){.  as
2040: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2050: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
2060: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
2070: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d   pCtx->isError =
2080: 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
2090: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
20a0: 53 65 74 53 74 72 28 26 70 43 74 78 2d 3e 73 2c  SetStr(&pCtx->s,
20b0: 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   "string or blob
20c0: 20 74 6f 6f 20 62 69 67 22 2c 20 2d 31 2c 20 0a   too big", -1, .
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e0: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54         SQLITE_UT
20f0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
2100: 43 29 3b 0a 7d 0a 0a 2f 2a 20 41 6e 20 53 51 4c  C);.}../* An SQL
2110: 49 54 45 5f 4e 4f 4d 45 4d 20 65 72 72 6f 72 2e  ITE_NOMEM error.
2120: 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
2130: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f  _result_error_no
2140: 6d 65 6d 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  mem(sqlite3_cont
2150: 65 78 74 20 2a 70 43 74 78 29 7b 0a 20 20 61 73  ext *pCtx){.  as
2160: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
2170: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
2180: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
2190: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
21a0: 65 74 4e 75 6c 6c 28 26 70 43 74 78 2d 3e 73 29  etNull(&pCtx->s)
21b0: 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  ;.  pCtx->isErro
21c0: 72 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  r = SQLITE_NOMEM
21d0: 3b 0a 20 20 70 43 74 78 2d 3e 73 2e 64 62 2d 3e  ;.  pCtx->s.db->
21e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
21f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  ;.}../*.** Execu
2200: 74 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  te the statement
2210: 20 70 53 74 6d 74 2c 20 65 69 74 68 65 72 20 75   pStmt, either u
2220: 6e 74 69 6c 20 61 20 72 6f 77 20 6f 66 20 64 61  ntil a row of da
2230: 74 61 20 69 73 20 72 65 61 64 79 2c 20 74 68 65  ta is ready, the
2240: 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 69 73  .** statement is
2250: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 65 78 65 63   completely exec
2260: 75 74 65 64 20 6f 72 20 61 6e 20 65 72 72 6f 72  uted or an error
2270: 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 54   occurs..**.** T
2280: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c  his routine impl
2290: 65 6d 65 6e 74 73 20 74 68 65 20 62 75 6c 6b 20  ements the bulk 
22a0: 6f 66 20 74 68 65 20 6c 6f 67 69 63 20 62 65 68  of the logic beh
22b0: 69 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ind the sqlite_s
22c0: 74 65 70 28 29 0a 2a 2a 20 41 50 49 2e 20 20 54  tep().** API.  T
22d0: 68 65 20 6f 6e 6c 79 20 74 68 69 6e 67 20 6f 6d  he only thing om
22e0: 69 74 74 65 64 20 69 73 20 74 68 65 20 61 75 74  itted is the aut
22f0: 6f 6d 61 74 69 63 20 72 65 63 6f 6d 70 69 6c 65  omatic recompile
2300: 20 69 66 20 61 20 0a 2a 2a 20 73 63 68 65 6d 61   if a .** schema
2310: 20 63 68 61 6e 67 65 20 68 61 73 20 6f 63 63 75   change has occu
2320: 72 72 65 64 2e 20 20 54 68 61 74 20 64 65 74 61  rred.  That deta
2330: 69 6c 20 69 73 20 68 61 6e 64 6c 65 64 20 62 79  il is handled by
2340: 20 74 68 65 0a 2a 2a 20 6f 75 74 65 72 20 73 71   the.** outer sq
2350: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61  lite3_step() wra
2360: 70 70 65 72 20 70 72 6f 63 65 64 75 72 65 2e 0a  pper procedure..
2370: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
2380: 6c 69 74 65 33 53 74 65 70 28 56 64 62 65 20 2a  lite3Step(Vdbe *
2390: 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  p){.  sqlite3 *d
23a0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  b;.  int rc;..  
23b0: 61 73 73 65 72 74 28 70 29 3b 0a 20 20 69 66 28  assert(p);.  if(
23c0: 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42 45 5f   p->magic!=VDBE_
23d0: 4d 41 47 49 43 5f 52 55 4e 20 29 7b 0a 20 20 20  MAGIC_RUN ){.   
23e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
23f0: 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ISUSE;.  }..  /*
2400: 20 43 68 65 63 6b 20 74 68 61 74 20 6d 61 6c 6c   Check that mall
2410: 6f 63 28 29 20 68 61 73 20 6e 6f 74 20 66 61 69  oc() has not fai
2420: 6c 65 64 2e 20 49 66 20 69 74 20 68 61 73 2c 20  led. If it has, 
2430: 72 65 74 75 72 6e 20 65 61 72 6c 79 2e 20 2a 2f  return early. */
2440: 0a 20 20 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20  .  db = p->db;. 
2450: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
2460: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 70 2d 3e  ailed ){.    p->
2470: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2480: 4d 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  M;.    return SQ
2490: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
24a0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 3d 30 20  .  if( p->pc<=0 
24b0: 26 26 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  && p->expired ){
24c0: 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28  .    if( ALWAYS(
24d0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
24e0: 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54   || p->rc==SQLIT
24f0: 45 5f 53 43 48 45 4d 41 29 20 29 7b 0a 20 20 20  E_SCHEMA) ){.   
2500: 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54     p->rc = SQLIT
2510: 45 5f 53 43 48 45 4d 41 3b 0a 20 20 20 20 7d 0a  E_SCHEMA;.    }.
2520: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2530: 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20  ERROR;.    goto 
2540: 65 6e 64 5f 6f 66 5f 73 74 65 70 3b 0a 20 20 7d  end_of_step;.  }
2550: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3c 30 20 29  .  if( p->pc<0 )
2560: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
2570: 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 73  e are no other s
2580: 74 61 74 65 6d 65 6e 74 73 20 63 75 72 72 65 6e  tatements curren
2590: 74 6c 79 20 72 75 6e 6e 69 6e 67 2c 20 74 68 65  tly running, the
25a0: 6e 0a 20 20 20 20 2a 2a 20 72 65 73 65 74 20 74  n.    ** reset t
25b0: 68 65 20 69 6e 74 65 72 72 75 70 74 20 66 6c 61  he interrupt fla
25c0: 67 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e 74  g.  This prevent
25d0: 73 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  s a call to sqli
25e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 0a 20 20  te3_interrupt.  
25f0: 20 20 2a 2a 20 66 72 6f 6d 20 69 6e 74 65 72 72    ** from interr
2600: 75 70 74 69 6e 67 20 61 20 73 74 61 74 65 6d 65  upting a stateme
2610: 6e 74 20 74 68 61 74 20 68 61 73 20 6e 6f 74 20  nt that has not 
2620: 79 65 74 20 73 74 61 72 74 65 64 2e 0a 20 20 20  yet started..   
2630: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
2640: 61 63 74 69 76 65 56 64 62 65 43 6e 74 3d 3d 30  activeVdbeCnt==0
2650: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 75 31   ){.      db->u1
2660: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d  .isInterrupted =
2670: 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61   0;.    }..    a
2680: 73 73 65 72 74 28 20 64 62 2d 3e 77 72 69 74 65  ssert( db->write
2690: 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 64 62 2d  VdbeCnt>0 || db-
26a0: 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
26b0: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
26c0: 6f 6e 73 3d 3d 30 20 29 3b 0a 0a 23 69 66 6e 64  ons==0 );..#ifnd
26d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
26e0: 52 41 43 45 0a 20 20 20 20 69 66 28 20 64 62 2d  RACE.    if( db-
26f0: 3e 78 50 72 6f 66 69 6c 65 20 26 26 20 21 64 62  >xProfile && !db
2700: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b 0a 20  ->init.busy ){. 
2710: 20 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77       double rNow
2720: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
2730: 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64 62 2d  sCurrentTime(db-
2740: 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b 0a 20  >pVfs, &rNow);. 
2750: 20 20 20 20 20 70 2d 3e 73 74 61 72 74 54 69 6d       p->startTim
2760: 65 20 3d 20 28 75 36 34 29 28 28 72 4e 6f 77 20  e = (u64)((rNow 
2770: 2d 20 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36 30  - (int)rNow)*360
2780: 30 2e 30 2a 32 34 2e 30 2a 31 30 30 30 30 30 30  0.0*24.0*1000000
2790: 30 30 30 2e 30 29 3b 0a 20 20 20 20 7d 0a 23 65  000.0);.    }.#e
27a0: 6e 64 69 66 0a 0a 20 20 20 20 64 62 2d 3e 61 63  ndif..    db->ac
27b0: 74 69 76 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20  tiveVdbeCnt++;. 
27c0: 20 20 20 69 66 28 20 70 2d 3e 72 65 61 64 4f 6e     if( p->readOn
27d0: 6c 79 3d 3d 30 20 29 20 64 62 2d 3e 77 72 69 74  ly==0 ) db->writ
27e0: 65 56 64 62 65 43 6e 74 2b 2b 3b 0a 20 20 20 20  eVdbeCnt++;.    
27f0: 70 2d 3e 70 63 20 3d 20 30 3b 0a 20 20 7d 0a 23  p->pc = 0;.  }.#
2800: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2810: 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 66 28  IT_EXPLAIN.  if(
2820: 20 70 2d 3e 65 78 70 6c 61 69 6e 20 29 7b 0a 20   p->explain ){. 
2830: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2840: 64 62 65 4c 69 73 74 28 70 29 3b 0a 20 20 7d 65  dbeList(p);.  }e
2850: 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  lse.#endif /* SQ
2860: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
2870: 4e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 63 20  N */.  {.    rc 
2880: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  = sqlite3VdbeExe
2890: 63 28 70 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64  c(p);.  }..#ifnd
28a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
28b0: 52 41 43 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  RACE.  /* Invoke
28c0: 20 74 68 65 20 70 72 6f 66 69 6c 65 20 63 61 6c   the profile cal
28d0: 6c 62 61 63 6b 20 69 66 20 74 68 65 72 65 20 69  lback if there i
28e0: 73 20 6f 6e 65 0a 20 20 2a 2f 0a 20 20 69 66 28  s one.  */.  if(
28f0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20   rc!=SQLITE_ROW 
2900: 26 26 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20  && db->xProfile 
2910: 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  && !db->init.bus
2920: 79 20 26 26 20 70 2d 3e 7a 53 71 6c 20 29 7b 0a  y && p->zSql ){.
2930: 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77 3b      double rNow;
2940: 0a 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 54  .    u64 elapseT
2950: 69 6d 65 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  ime;..    sqlite
2960: 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 28 64  3OsCurrentTime(d
2970: 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29 3b  b->pVfs, &rNow);
2980: 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d 65 20  .    elapseTime 
2990: 3d 20 28 75 36 34 29 28 28 72 4e 6f 77 20 2d 20  = (u64)((rNow - 
29a0: 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36 30 30 2e  (int)rNow)*3600.
29b0: 30 2a 32 34 2e 30 2a 31 30 30 30 30 30 30 30 30  0*24.0*100000000
29c0: 30 2e 30 29 3b 0a 20 20 20 20 65 6c 61 70 73 65  0.0);.    elapse
29d0: 54 69 6d 65 20 2d 3d 20 70 2d 3e 73 74 61 72 74  Time -= p->start
29e0: 54 69 6d 65 3b 0a 20 20 20 20 64 62 2d 3e 78 50  Time;.    db->xP
29f0: 72 6f 66 69 6c 65 28 64 62 2d 3e 70 50 72 6f 66  rofile(db->pProf
2a00: 69 6c 65 41 72 67 2c 20 70 2d 3e 7a 53 71 6c 2c  ileArg, p->zSql,
2a10: 20 65 6c 61 70 73 65 54 69 6d 65 29 3b 0a 20 20   elapseTime);.  
2a20: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e  }.#endif..  db->
2a30: 65 72 72 43 6f 64 65 20 3d 20 72 63 3b 0a 20 20  errCode = rc;.  
2a40: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
2a50: 3d 3d 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  ==sqlite3ApiExit
2a60: 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 29 20 29  (p->db, p->rc) )
2a70: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
2a80: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
2a90: 65 6e 64 5f 6f 66 5f 73 74 65 70 3a 0a 20 20 2f  end_of_step:.  /
2aa0: 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20  * At this point 
2ab0: 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20 72  local variable r
2ac0: 63 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75  c holds the valu
2ad0: 65 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  e that should be
2ae0: 20 0a 20 20 2a 2a 20 72 65 74 75 72 6e 65 64 20   .  ** returned 
2af0: 69 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  if this statemen
2b00: 74 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 75  t was compiled u
2b10: 73 69 6e 67 20 74 68 65 20 6c 65 67 61 63 79 20  sing the legacy 
2b20: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 70 72  .  ** sqlite3_pr
2b30: 65 70 61 72 65 28 29 20 69 6e 74 65 72 66 61 63  epare() interfac
2b40: 65 2e 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20  e. According to 
2b50: 74 68 65 20 64 6f 63 73 2c 20 74 68 69 73 20 63  the docs, this c
2b60: 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 62 65 20  an only.  ** be 
2b70: 6f 6e 65 20 6f 66 20 74 68 65 20 76 61 6c 75 65  one of the value
2b80: 73 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 61  s in the first a
2b90: 73 73 65 72 74 28 29 20 62 65 6c 6f 77 2e 20 56  ssert() below. V
2ba0: 61 72 69 61 62 6c 65 20 70 2d 3e 72 63 20 0a 20  ariable p->rc . 
2bb0: 20 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   ** contains the
2bc0: 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c   value that woul
2bd0: 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 69 66  d be returned if
2be0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
2bf0: 65 28 29 20 0a 20 20 2a 2a 20 77 65 72 65 20 63  e() .  ** were c
2c00: 61 6c 6c 65 64 20 6f 6e 20 73 74 61 74 65 6d 65  alled on stateme
2c10: 6e 74 20 70 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  nt p..  */.  ass
2c20: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
2c30: 52 4f 57 20 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  ROW  || rc==SQLI
2c40: 54 45 5f 44 4f 4e 45 20 20 20 7c 7c 20 72 63 3d  TE_DONE   || rc=
2c50: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 0a 20  =SQLITE_ERROR . 
2c60: 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51 4c        || rc==SQL
2c70: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
2c80: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 0a 20 20  SQLITE_MISUSE.  
2c90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2ca0: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26  rc!=SQLITE_ROW &
2cb0: 26 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45 5f  & p->rc!=SQLITE_
2cc0: 44 4f 4e 45 20 29 3b 0a 20 20 69 66 28 20 70 2d  DONE );.  if( p-
2cd0: 3e 69 73 50 72 65 70 61 72 65 56 32 20 26 26 20  >isPrepareV2 && 
2ce0: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 26  rc!=SQLITE_ROW &
2cf0: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  & rc!=SQLITE_DON
2d00: 45 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  E ){.    /* If t
2d10: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 61  his statement wa
2d20: 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
2d30: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
2d40: 5f 76 32 28 29 2c 20 61 6e 64 20 61 6e 0a 20 20  _v2(), and an.  
2d50: 20 20 2a 2a 20 65 72 72 6f 72 20 68 61 73 20 6f    ** error has o
2d60: 63 63 75 72 65 64 2c 20 74 68 65 6e 20 72 65 74  ccured, then ret
2d70: 75 72 6e 20 74 68 65 20 65 72 72 6f 72 20 63 6f  urn the error co
2d80: 64 65 20 69 6e 20 70 2d 3e 72 63 20 74 6f 20 74  de in p->rc to t
2d90: 68 65 0a 20 20 20 20 2a 2a 20 63 61 6c 6c 65 72  he.    ** caller
2da0: 2e 20 53 65 74 20 74 68 65 20 65 72 72 6f 72 20  . Set the error 
2db0: 63 6f 64 65 20 69 6e 20 74 68 65 20 64 61 74 61  code in the data
2dc0: 62 61 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 74  base handle to t
2dd0: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 20  he same value.. 
2de0: 20 20 20 2a 2f 20 0a 20 20 20 20 72 63 20 3d 20     */ .    rc = 
2df0: 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 70 2d  db->errCode = p-
2e00: 3e 72 63 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  >rc;.  }.  retur
2e10: 6e 20 28 72 63 26 64 62 2d 3e 65 72 72 4d 61 73  n (rc&db->errMas
2e20: 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  k);.}../*.** Thi
2e30: 73 20 69 73 20 74 68 65 20 74 6f 70 2d 6c 65 76  s is the top-lev
2e40: 65 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  el implementatio
2e50: 6e 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  n of sqlite3_ste
2e60: 70 28 29 2e 20 20 43 61 6c 6c 0a 2a 2a 20 73 71  p().  Call.** sq
2e70: 6c 69 74 65 33 53 74 65 70 28 29 20 74 6f 20 64  lite3Step() to d
2e80: 6f 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 77 6f  o most of the wo
2e90: 72 6b 2e 20 20 49 66 20 61 20 73 63 68 65 6d 61  rk.  If a schema
2ea0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 0a 2a   error occurs,.*
2eb0: 2a 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 52 65  * call sqlite3Re
2ec0: 70 72 65 70 61 72 65 28 29 20 61 6e 64 20 74 72  prepare() and tr
2ed0: 79 20 61 67 61 69 6e 2e 0a 2a 2f 0a 69 6e 74 20  y again..*/.int 
2ee0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 71 6c  sqlite3_step(sql
2ef0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
2f00: 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  ){.  int rc = SQ
2f10: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 56  LITE_MISUSE;.  V
2f20: 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a 29  dbe *v = (Vdbe*)
2f30: 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 76 20 26  pStmt;.  if( v &
2f40: 26 20 28 76 2d 3e 64 62 29 21 3d 30 20 29 7b 0a  & (v->db)!=0 ){.
2f50: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
2f60: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62  .    sqlite3 *db
2f70: 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 20 20 73 71   = v->db;.    sq
2f80: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
2f90: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
2fa0: 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20 73    while( (rc = s
2fb0: 71 6c 69 74 65 33 53 74 65 70 28 76 29 29 3d 3d  qlite3Step(v))==
2fc0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20 20  SQLITE_SCHEMA.  
2fd0: 20 20 20 20 20 20 20 20 20 26 26 20 63 6e 74 2b           && cnt+
2fe0: 2b 20 3c 20 35 0a 20 20 20 20 20 20 20 20 20 20  + < 5.          
2ff0: 20 26 26 20 28 72 63 20 3d 20 73 71 6c 69 74 65   && (rc = sqlite
3000: 33 52 65 70 72 65 70 61 72 65 28 76 29 29 3d 3d  3Reprepare(v))==
3010: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3020: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74     sqlite3_reset
3030: 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20 76  (pStmt);.      v
3040: 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
3050: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d     }.    if( rc=
3060: 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 26  =SQLITE_SCHEMA &
3070: 26 20 41 4c 57 41 59 53 28 76 2d 3e 69 73 50 72  & ALWAYS(v->isPr
3080: 65 70 61 72 65 56 32 29 20 26 26 20 41 4c 57 41  epareV2) && ALWA
3090: 59 53 28 64 62 2d 3e 70 45 72 72 29 20 29 7b 0a  YS(db->pErr) ){.
30a0: 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
30b0: 73 65 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  se occurs after 
30c0: 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63 6f 6d  failing to recom
30d0: 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74 61 74  pile an sql stat
30e0: 65 6d 65 6e 74 2e 20 0a 20 20 20 20 20 20 2a 2a  ement. .      **
30f0: 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   The error messa
3100: 67 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 20  ge from the SQL 
3110: 63 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c 72  compiler has alr
3120: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
3130: 20 0a 20 20 20 20 20 20 2a 2a 20 69 6e 74 6f 20   .      ** into 
3140: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
3150: 64 6c 65 2e 20 54 68 69 73 20 62 6c 6f 63 6b 20  dle. This block 
3160: 63 6f 70 69 65 73 20 74 68 65 20 65 72 72 6f 72  copies the error
3170: 20 6d 65 73 73 61 67 65 20 0a 20 20 20 20 20 20   message .      
3180: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ** from the data
3190: 62 61 73 65 20 68 61 6e 64 6c 65 20 69 6e 74 6f  base handle into
31a0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61   the statement a
31b0: 6e 64 20 73 65 74 73 20 74 68 65 20 73 74 61 74  nd sets the stat
31c0: 65 6d 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 70  ement.      ** p
31d0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 74  rogram counter t
31e0: 6f 20 30 20 74 6f 20 65 6e 73 75 72 65 20 74 68  o 0 to ensure th
31f0: 61 74 20 77 68 65 6e 20 74 68 65 20 73 74 61 74  at when the stat
3200: 65 6d 65 6e 74 20 69 73 20 0a 20 20 20 20 20 20  ement is .      
3210: 2a 2a 20 66 69 6e 61 6c 69 7a 65 64 20 6f 72 20  ** finalized or 
3220: 72 65 73 65 74 20 74 68 65 20 70 61 72 73 65 72  reset the parser
3230: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
3240: 73 20 61 76 61 69 6c 61 62 6c 65 20 76 69 61 0a  s available via.
3250: 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33        ** sqlite3
3260: 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71  _errmsg() and sq
3270: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2e  lite3_errcode().
3280: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
3290: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
32a0: 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a   = (const char *
32b0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
32c0: 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 20 0a  ext(db->pErr); .
32d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
32e0: 72 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72 4d  ree(db, v->zErrM
32f0: 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21  sg);.      if( !
3300: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
3310: 20 29 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a   ){.        v->z
3320: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
3330: 44 62 53 74 72 44 75 70 28 64 62 2c 20 7a 45 72  DbStrDup(db, zEr
3340: 72 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  r);.      } else
3350: 20 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a 45   {.        v->zE
3360: 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 20  rrMsg = 0;.     
3370: 20 20 20 76 2d 3e 72 63 20 3d 20 53 51 4c 49 54     v->rc = SQLIT
3380: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20 7d  E_NOMEM;.      }
3390: 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
33a0: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
33b0: 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  b, rc);.    sqli
33c0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
33d0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
33e0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
33f0: 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  /*.** Extract th
3400: 65 20 75 73 65 72 20 64 61 74 61 20 66 72 6f 6d  e user data from
3410: 20 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65   a sqlite3_conte
3420: 78 74 20 73 74 72 75 63 74 75 72 65 20 61 6e 64  xt structure and
3430: 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f 69   return a.** poi
3440: 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a 76  nter to it..*/.v
3450: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 73 65  oid *sqlite3_use
3460: 72 5f 64 61 74 61 28 73 71 6c 69 74 65 33 5f 63  r_data(sqlite3_c
3470: 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61 73  ontext *p){.  as
3480: 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70 46  sert( p && p->pF
3490: 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  unc );.  return 
34a0: 70 2d 3e 70 46 75 6e 63 2d 3e 70 55 73 65 72 44  p->pFunc->pUserD
34b0: 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78  ata;.}../*.** Ex
34c0: 74 72 61 63 74 20 74 68 65 20 75 73 65 72 20 64  tract the user d
34d0: 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69 74  ata from a sqlit
34e0: 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75 63  e3_context struc
34f0: 74 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e 20  ture and return 
3500: 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
3510: 69 74 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a  it..*/.sqlite3 *
3520: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f  sqlite3_context_
3530: 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69 74 65  db_handle(sqlite
3540: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
3550: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
3560: 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75  >pFunc );.  retu
3570: 72 6e 20 70 2d 3e 73 2e 64 62 3b 0a 7d 0a 0a 2f  rn p->s.db;.}../
3580: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
3590: 6e 67 20 69 73 20 74 68 65 20 69 6d 70 6c 65 6d  ng is the implem
35a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
35b0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  QL function that
35c0: 20 61 6c 77 61 79 73 0a 2a 2a 20 66 61 69 6c 73   always.** fails
35d0: 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 6d   with an error m
35e0: 65 73 73 61 67 65 20 73 74 61 74 69 6e 67 20 74  essage stating t
35f0: 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  hat the function
3600: 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 0a   is used in the.
3610: 2a 2a 20 77 72 6f 6e 67 20 63 6f 6e 74 65 78 74  ** wrong context
3620: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6f  .  The sqlite3_o
3630: 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f 6e  verload_function
3640: 28 29 20 41 50 49 20 6d 69 67 68 74 20 63 6f 6e  () API might con
3650: 73 74 72 75 63 74 0a 2a 2a 20 53 51 4c 20 66 75  struct.** SQL fu
3660: 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73 65 20  nction that use 
3670: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 73 6f 20  this routine so 
3680: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
3690: 6e 73 20 77 69 6c 6c 20 65 78 69 73 74 0a 2a 2a  ns will exist.**
36a0: 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
36b0: 74 69 6f 6e 20 62 75 74 20 61 72 65 20 61 63 74  tion but are act
36c0: 75 61 6c 6c 79 20 6f 76 65 72 6c 6f 61 64 65 64  ually overloaded
36d0: 20 62 79 20 74 68 65 20 78 46 69 6e 64 46 75 6e   by the xFindFun
36e0: 63 74 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f 64 20  ction.** method 
36f0: 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  of virtual table
3700: 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  s..*/.void sqlit
3710: 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
3720: 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n(.  sqlite3_con
3730: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 20  text *context,  
3740: 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  /* The function 
3750: 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74 20  calling context 
3760: 2a 2f 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65 64  */.  int NotUsed
3770: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
3780: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
3790: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75  uments to the fu
37a0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  nction */.  sqli
37b0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 4e 6f 74 55  te3_value **NotU
37c0: 73 65 64 32 20 20 20 2f 2a 20 56 61 6c 75 65 20  sed2   /* Value 
37d0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
37e0: 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63   */.){.  const c
37f0: 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 63 6f 6e  har *zName = con
3800: 74 65 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a 4e 61  text->pFunc->zNa
3810: 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  me;.  char *zErr
3820: 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
3830: 45 54 45 52 32 28 4e 6f 74 55 73 65 64 2c 20 4e  ETER2(NotUsed, N
3840: 6f 74 55 73 65 64 32 29 3b 0a 20 20 7a 45 72 72  otUsed2);.  zErr
3850: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
3860: 74 66 28 0a 20 20 20 20 20 20 22 75 6e 61 62 6c  tf(.      "unabl
3870: 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f  e to use functio
3880: 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71 75  n %s in the requ
3890: 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c 20  ested context", 
38a0: 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74 65  zName);.  sqlite
38b0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
38c0: 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d 31  ontext, zErr, -1
38d0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
38e0: 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e(zErr);.}../*.*
38f0: 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72 65  * Allocate or re
3900: 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67 61  turn the aggrega
3910: 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 61  te context for a
3920: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 20   user function. 
3930: 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65 78   A new.** contex
3940: 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 6f  t is allocated o
3950: 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c 6c  n the first call
3960: 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 61  .  Subsequent ca
3970: 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a 2a  lls return the.*
3980: 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20 74  * same context t
3990: 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65 64  hat was returned
39a0: 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73 2e   on prior calls.
39b0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
39c0: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
39d0: 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ext(sqlite3_cont
39e0: 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79 74  ext *p, int nByt
39f0: 65 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  e){.  Mem *pMem;
3a00: 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20  .  assert( p && 
3a10: 70 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e 70  p->pFunc && p->p
3a20: 46 75 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a 20  Func->xStep );. 
3a30: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3a40: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d 3e 73  _mutex_held(p->s
3a50: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
3a60: 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d 3b   pMem = p->pMem;
3a70: 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 42 79  .  testcase( nBy
3a80: 74 65 3c 30 20 29 3b 0a 20 20 69 66 28 20 28 70  te<0 );.  if( (p
3a90: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
3aa0: 5f 41 67 67 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Agg)==0 ){.    
3ab0: 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b 0a  if( nByte<=0 ){.
3ac0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3ad0: 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72  eMemReleaseExter
3ae0: 6e 61 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  nal(pMem);.     
3af0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
3b00: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70  EM_Null;.      p
3b10: 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  Mem->z = 0;.    
3b20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
3b30: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
3b40: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 3b  pMem, nByte, 0);
3b50: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
3b60: 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20 20  gs = MEM_Agg;.  
3b70: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65 66      pMem->u.pDef
3b80: 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20 20   = p->pFunc;.   
3b90: 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 20 29     if( pMem->z )
3ba0: 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74  {.        memset
3bb0: 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79  (pMem->z, 0, nBy
3bc0: 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  te);.      }.   
3bd0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
3be0: 28 76 6f 69 64 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  (void*)pMem->z;.
3bf0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3c00: 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61 74  the auxilary dat
3c10: 61 20 70 6f 69 6e 74 65 72 2c 20 69 66 20 61 6e  a pointer, if an
3c20: 79 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67 27  y, for the iArg'
3c30: 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a  th argument to.*
3c40: 2a 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  * the user-funct
3c50: 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20 70  ion defined by p
3c60: 43 74 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  Ctx..*/.void *sq
3c70: 6c 69 74 65 33 5f 67 65 74 5f 61 75 78 64 61 74  lite3_get_auxdat
3c80: 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  a(sqlite3_contex
3c90: 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 41 72  t *pCtx, int iAr
3ca0: 67 29 7b 0a 20 20 56 64 62 65 46 75 6e 63 20 2a  g){.  VdbeFunc *
3cb0: 70 56 64 62 65 46 75 6e 63 3b 0a 0a 20 20 61 73  pVdbeFunc;..  as
3cc0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
3cd0: 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e 73  tex_held(pCtx->s
3ce0: 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20  .db->mutex) );. 
3cf0: 20 70 56 64 62 65 46 75 6e 63 20 3d 20 70 43 74   pVdbeFunc = pCt
3d00: 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20  x->pVdbeFunc;.  
3d10: 69 66 28 20 21 70 56 64 62 65 46 75 6e 63 20 7c  if( !pVdbeFunc |
3d20: 7c 20 69 41 72 67 3e 3d 70 56 64 62 65 46 75 6e  | iArg>=pVdbeFun
3d30: 63 2d 3e 6e 41 75 78 20 7c 7c 20 69 41 72 67 3c  c->nAux || iArg<
3d40: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
3d50: 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  0;.  }.  return 
3d60: 70 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78  pVdbeFunc->apAux
3d70: 5b 69 41 72 67 5d 2e 70 41 75 78 3b 0a 7d 0a 0a  [iArg].pAux;.}..
3d80: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 61 75  /*.** Set the au
3d90: 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69 6e  xilary data poin
3da0: 74 65 72 20 61 6e 64 20 64 65 6c 65 74 65 20 66  ter and delete f
3db0: 75 6e 63 74 69 6f 6e 2c 20 66 6f 72 20 74 68 65  unction, for the
3dc0: 20 69 41 72 67 27 74 68 0a 2a 2a 20 61 72 67 75   iArg'th.** argu
3dd0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 75 73 65 72  ment to the user
3de0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 65  -function define
3df0: 64 20 62 79 20 70 43 74 78 2e 20 41 6e 79 20 70  d by pCtx. Any p
3e00: 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 69 73  revious value is
3e10: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 62 79 20 63  .** deleted by c
3e20: 61 6c 6c 69 6e 67 20 74 68 65 20 64 65 6c 65 74  alling the delet
3e30: 65 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  e function speci
3e40: 66 69 65 64 20 77 68 65 6e 20 69 74 20 77 61 73  fied when it was
3e50: 20 73 65 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71   set..*/.void sq
3e60: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
3e70: 61 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  a(.  sqlite3_con
3e80: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69  text *pCtx, .  i
3e90: 6e 74 20 69 41 72 67 2c 20 0a 20 20 76 6f 69 64  nt iArg, .  void
3ea0: 20 2a 70 41 75 78 2c 20 0a 20 20 76 6f 69 64 20   *pAux, .  void 
3eb0: 28 2a 78 44 65 6c 65 74 65 29 28 76 6f 69 64 2a  (*xDelete)(void*
3ec0: 29 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 41 75  ).){.  struct Au
3ed0: 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61 3b  xData *pAuxData;
3ee0: 0a 20 20 56 64 62 65 46 75 6e 63 20 2a 70 56 64  .  VdbeFunc *pVd
3ef0: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 69 41  beFunc;.  if( iA
3f00: 72 67 3c 30 20 29 20 67 6f 74 6f 20 66 61 69 6c  rg<0 ) goto fail
3f10: 65 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73  ed;..  assert( s
3f20: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
3f30: 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d 75  d(pCtx->s.db->mu
3f40: 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65 46  tex) );.  pVdbeF
3f50: 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64 62  unc = pCtx->pVdb
3f60: 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70 56  eFunc;.  if( !pV
3f70: 64 62 65 46 75 6e 63 20 7c 7c 20 70 56 64 62 65  dbeFunc || pVdbe
3f80: 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72 67  Func->nAux<=iArg
3f90: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 75 78   ){.    int nAux
3fa0: 20 3d 20 28 70 56 64 62 65 46 75 6e 63 20 3f 20   = (pVdbeFunc ? 
3fb0: 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20  pVdbeFunc->nAux 
3fc0: 3a 20 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e 4d  : 0);.    int nM
3fd0: 61 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28 56  alloc = sizeof(V
3fe0: 64 62 65 46 75 6e 63 29 20 2b 20 73 69 7a 65 6f  dbeFunc) + sizeo
3ff0: 66 28 73 74 72 75 63 74 20 41 75 78 44 61 74 61  f(struct AuxData
4000: 29 2a 69 41 72 67 3b 0a 20 20 20 20 70 56 64 62  )*iArg;.    pVdb
4010: 65 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 44  eFunc = sqlite3D
4020: 62 52 65 61 6c 6c 6f 63 28 70 43 74 78 2d 3e 73  bRealloc(pCtx->s
4030: 2e 64 62 2c 20 70 56 64 62 65 46 75 6e 63 2c 20  .db, pVdbeFunc, 
4040: 6e 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66  nMalloc);.    if
4050: 28 20 21 70 56 64 62 65 46 75 6e 63 20 29 7b 0a  ( !pVdbeFunc ){.
4060: 20 20 20 20 20 20 67 6f 74 6f 20 66 61 69 6c 65        goto faile
4070: 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 74  d;.    }.    pCt
4080: 78 2d 3e 70 56 64 62 65 46 75 6e 63 20 3d 20 70  x->pVdbeFunc = p
4090: 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d 65  VdbeFunc;.    me
40a0: 6d 73 65 74 28 26 70 56 64 62 65 46 75 6e 63 2d  mset(&pVdbeFunc-
40b0: 3e 61 70 41 75 78 5b 6e 41 75 78 5d 2c 20 30 2c  >apAux[nAux], 0,
40c0: 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 41   sizeof(struct A
40d0: 75 78 44 61 74 61 29 2a 28 69 41 72 67 2b 31 2d  uxData)*(iArg+1-
40e0: 6e 41 75 78 29 29 3b 0a 20 20 20 20 70 56 64 62  nAux));.    pVdb
40f0: 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3d 20 69 41  eFunc->nAux = iA
4100: 72 67 2b 31 3b 0a 20 20 20 20 70 56 64 62 65 46  rg+1;.    pVdbeF
4110: 75 6e 63 2d 3e 70 46 75 6e 63 20 3d 20 70 43 74  unc->pFunc = pCt
4120: 78 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20  x->pFunc;.  }.. 
4130: 20 70 41 75 78 44 61 74 61 20 3d 20 26 70 56 64   pAuxData = &pVd
4140: 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69 41  beFunc->apAux[iA
4150: 72 67 5d 3b 0a 20 20 69 66 28 20 70 41 75 78 44  rg];.  if( pAuxD
4160: 61 74 61 2d 3e 70 41 75 78 20 26 26 20 70 41 75  ata->pAux && pAu
4170: 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20 29  xData->xDelete )
4180: 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d 3e  {.    pAuxData->
4190: 78 44 65 6c 65 74 65 28 70 41 75 78 44 61 74 61  xDelete(pAuxData
41a0: 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 20 20 70  ->pAux);.  }.  p
41b0: 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20 3d 20  AuxData->pAux = 
41c0: 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61 74 61  pAux;.  pAuxData
41d0: 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44 65 6c  ->xDelete = xDel
41e0: 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a 0a  ete;.  return;..
41f0: 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20 78 44  failed:.  if( xD
4200: 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78 44 65  elete ){.    xDe
4210: 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20 7d 0a  lete(pAux);.  }.
4220: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
4230: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
4240: 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  D./*.** Return t
4250: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d  he number of tim
4260: 65 73 20 74 68 65 20 53 74 65 70 20 66 75 6e 63  es the Step func
4270: 74 69 6f 6e 20 6f 66 20 61 20 61 67 67 72 65 67  tion of a aggreg
4280: 61 74 65 20 68 61 73 20 62 65 65 6e 20 0a 2a 2a  ate has been .**
4290: 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   called..**.** T
42a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
42b0: 64 65 70 72 65 63 61 74 65 64 2e 20 20 44 6f 20  deprecated.  Do 
42c0: 6e 6f 74 20 75 73 65 20 69 74 20 66 6f 72 20 6e  not use it for n
42d0: 65 77 20 63 6f 64 65 2e 20 20 49 74 20 69 73 0a  ew code.  It is.
42e0: 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79 20  ** provide only 
42f0: 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b 69 6e  to avoid breakin
4300: 67 20 6c 65 67 61 63 79 20 63 6f 64 65 2e 20 20  g legacy code.  
4310: 4e 65 77 20 61 67 67 72 65 67 61 74 65 20 66 75  New aggregate fu
4320: 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65 6d  nction.** implem
4330: 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  entations should
4340: 20 6b 65 65 70 20 74 68 65 69 72 20 6f 77 6e 20   keep their own 
4350: 63 6f 75 6e 74 73 20 77 69 74 68 69 6e 20 74 68  counts within th
4360: 65 69 72 20 61 67 67 72 65 67 61 74 65 0a 2a 2a  eir aggregate.**
4370: 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e 74   context..*/.int
4380: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
4390: 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65 33  te_count(sqlite3
43a0: 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20  _context *p){.  
43b0: 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e  assert( p && p->
43c0: 70 4d 65 6d 20 26 26 20 70 2d 3e 70 46 75 6e 63  pMem && p->pFunc
43d0: 20 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78 53   && p->pFunc->xS
43e0: 74 65 70 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  tep );.  return 
43f0: 70 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23 65  p->pMem->n;.}.#e
4400: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
4410: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
4420: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
4430: 72 65 73 75 6c 74 20 73 65 74 20 66 6f 72 20 74  result set for t
4440: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 70 53 74  he statement pSt
4450: 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  mt..*/.int sqlit
4460: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
4470: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
4480: 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 56  tmt){.  Vdbe *pV
4490: 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  m = (Vdbe *)pStm
44a0: 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d 20  t;.  return pVm 
44b0: 3f 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d  ? pVm->nResColum
44c0: 6e 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n : 0;.}../*.** 
44d0: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
44e0: 72 20 6f 66 20 76 61 6c 75 65 73 20 61 76 61 69  r of values avai
44f0: 6c 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 63  lable from the c
4500: 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74 68  urrent row of th
4510: 65 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 65  e.** currently e
4520: 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
4530: 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e 74  nt pStmt..*/.int
4540: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f   sqlite3_data_co
4550: 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  unt(sqlite3_stmt
4560: 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62 65   *pStmt){.  Vdbe
4570: 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29   *pVm = (Vdbe *)
4580: 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d  pStmt;.  if( pVm
4590: 3d 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65 73  ==0 || pVm->pRes
45a0: 75 6c 74 53 65 74 3d 3d 30 20 29 20 72 65 74 75  ultSet==0 ) retu
45b0: 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70  rn 0;.  return p
45c0: 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b 0a  Vm->nResColumn;.
45d0: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  }.../*.** Check 
45e0: 74 6f 20 73 65 65 20 69 66 20 63 6f 6c 75 6d 6e  to see if column
45f0: 20 69 43 6f 6c 20 6f 66 20 74 68 65 20 67 69 76   iCol of the giv
4600: 65 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  en statement is 
4610: 76 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69 74  valid.  If.** it
4620: 20 69 73 2c 20 72 65 74 75 72 6e 20 61 20 70 6f   is, return a po
4630: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 4d 65 6d  inter to the Mem
4640: 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20 6f   for the value o
4650: 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 2a  f that column..*
4660: 2a 20 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f 74  * If iCol is not
4670: 20 76 61 6c 69 64 2c 20 72 65 74 75 72 6e 20 61   valid, return a
4680: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65   pointer to a Me
4690: 6d 20 77 68 69 63 68 20 68 61 73 20 61 20 76 61  m which has a va
46a0: 6c 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e 0a  lue.** of NULL..
46b0: 2a 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 63  */.static Mem *c
46c0: 6f 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65 33  olumnMem(sqlite3
46d0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
46e0: 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70 56  t i){.  Vdbe *pV
46f0: 6d 3b 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a 20  m;.  int vals;. 
4700: 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20 70   Mem *pOut;..  p
4710: 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  Vm = (Vdbe *)pSt
4720: 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26 26  mt;.  if( pVm &&
4730: 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74   pVm->pResultSet
4740: 21 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e 52  !=0 && i<pVm->nR
4750: 65 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d 30  esColumn && i>=0
4760: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
4770: 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d 2d  mutex_enter(pVm-
4780: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
4790: 20 76 61 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f   vals = sqlite3_
47a0: 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74  data_count(pStmt
47b0: 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70  );.    pOut = &p
47c0: 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b 69  Vm->pResultSet[i
47d0: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
47e0: 2f 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  /* If the value 
47f0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 73 65  passed as the se
4800: 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73  cond argument is
4810: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20 72   out of range, r
4820: 65 74 75 72 6e 0a 20 20 20 20 2a 2a 20 61 20 70  eturn.    ** a p
4830: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 6f  ointer to the fo
4840: 6c 6c 6f 77 69 6e 67 20 73 74 61 74 69 63 20 4d  llowing static M
4850: 65 6d 20 6f 62 6a 65 63 74 20 77 68 69 63 68 20  em object which 
4860: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 20 20 20  contains the.   
4870: 20 2a 2a 20 76 61 6c 75 65 20 53 51 4c 20 4e 55   ** value SQL NU
4880: 4c 4c 2e 20 45 76 65 6e 20 74 68 6f 75 67 68 20  LL. Even though 
4890: 74 68 65 20 4d 65 6d 20 73 74 72 75 63 74 75 72  the Mem structur
48a0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6c  e contains an el
48b0: 65 6d 65 6e 74 0a 20 20 20 20 2a 2a 20 6f 66 20  ement.    ** of 
48c0: 74 79 70 65 20 69 36 34 2c 20 6f 6e 20 63 65 72  type i64, on cer
48d0: 74 61 69 6e 20 61 72 63 68 69 74 65 63 74 75 72  tain architectur
48e0: 65 20 28 78 38 36 29 20 77 69 74 68 20 63 65 72  e (x86) with cer
48f0: 74 61 69 6e 20 63 6f 6d 70 69 6c 65 72 0a 20 20  tain compiler.  
4900: 20 20 2a 2a 20 73 77 69 74 63 68 65 73 20 28 2d    ** switches (-
4910: 4f 73 29 2c 20 67 63 63 20 6d 61 79 20 61 6c 69  Os), gcc may ali
4920: 67 6e 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a 65  gn this Mem obje
4930: 63 74 20 6f 6e 20 61 20 34 2d 62 79 74 65 20 62  ct on a 4-byte b
4940: 6f 75 6e 64 61 72 79 0a 20 20 20 20 2a 2a 20 69  oundary.    ** i
4950: 6e 73 74 65 61 64 20 6f 66 20 61 6e 20 38 2d 62  nstead of an 8-b
4960: 79 74 65 20 6f 6e 65 2e 20 54 68 69 73 20 61 6c  yte one. This al
4970: 6c 20 77 6f 72 6b 73 20 66 69 6e 65 2c 20 65 78  l works fine, ex
4980: 63 65 70 74 20 74 68 61 74 20 77 68 65 6e 0a 20  cept that when. 
4990: 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 77 69     ** running wi
49a0: 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  th SQLITE_DEBUG 
49b0: 64 65 66 69 6e 65 64 20 74 68 65 20 53 51 4c 69  defined the SQLi
49c0: 74 65 20 63 6f 64 65 20 73 6f 6d 65 74 69 6d 65  te code sometime
49d0: 73 20 61 73 73 65 72 74 28 29 73 0a 20 20 20 20  s assert()s.    
49e0: 2a 2a 20 74 68 61 74 20 61 20 4d 65 6d 20 73 74  ** that a Mem st
49f0: 72 75 63 74 75 72 65 20 69 73 20 6c 6f 63 61 74  ructure is locat
4a00: 65 64 20 6f 6e 20 61 6e 20 38 2d 62 79 74 65 20  ed on an 8-byte 
4a10: 62 6f 75 6e 64 61 72 79 2e 20 54 6f 20 70 72 65  boundary. To pre
4a20: 76 65 6e 74 0a 20 20 20 20 2a 2a 20 74 68 69 73  vent.    ** this
4a30: 20 61 73 73 65 72 74 28 29 20 66 72 6f 6d 20 66   assert() from f
4a40: 61 69 6c 69 6e 67 2c 20 77 68 65 6e 20 62 75 69  ailing, when bui
4a50: 6c 64 69 6e 67 20 77 69 74 68 20 53 51 4c 49 54  lding with SQLIT
4a60: 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65 64 0a  E_DEBUG defined.
4a70: 20 20 20 20 2a 2a 20 75 73 69 6e 67 20 67 63 63      ** using gcc
4a80: 2c 20 66 6f 72 63 65 20 6e 75 6c 6c 4d 65 6d 20  , force nullMem 
4a90: 74 6f 20 62 65 20 38 2d 62 79 74 65 20 61 6c 69  to be 8-byte ali
4aa0: 67 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 6d  gned using the m
4ab0: 61 67 69 63 61 6c 0a 20 20 20 20 2a 2a 20 5f 5f  agical.    ** __
4ac0: 61 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c 69  attribute__((ali
4ad0: 67 6e 65 64 28 38 29 29 29 20 6d 61 63 72 6f 2e  gned(8))) macro.
4ae0: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
4af0: 63 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d 65  const Mem nullMe
4b00: 6d 20 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  m .#if defined(S
4b10: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
4b20: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
4b30: 29 0a 20 20 20 20 20 20 5f 5f 61 74 74 72 69 62  ).      __attrib
4b40: 75 74 65 5f 5f 28 28 61 6c 69 67 6e 65 64 28 38  ute__((aligned(8
4b50: 29 29 29 20 0a 23 65 6e 64 69 66 0a 20 20 20 20  ))) .#endif.    
4b60: 20 20 3d 20 7b 7b 30 7d 2c 20 28 64 6f 75 62 6c    = {{0}, (doubl
4b70: 65 29 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20 4d  e)0, 0, "", 0, M
4b80: 45 4d 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45 5f  EM_Null, SQLITE_
4b90: 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d 3b  NULL, 0, 0, 0 };
4ba0: 0a 0a 20 20 20 20 69 66 28 20 70 56 6d 20 26 26  ..    if( pVm &&
4bb0: 20 41 4c 57 41 59 53 28 70 56 6d 2d 3e 64 62 29   ALWAYS(pVm->db)
4bc0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4bd0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56  3_mutex_enter(pV
4be0: 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  m->db->mutex);. 
4bf0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
4c00: 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49 54  r(pVm->db, SQLIT
4c10: 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20 20  E_RANGE, 0);.   
4c20: 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28 4d   }.    pOut = (M
4c30: 65 6d 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20 20  em*)&nullMem;.  
4c40: 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  }.  return pOut;
4c50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
4c60: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
4c70: 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e 67  d after invoking
4c80: 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   an sqlite3_valu
4c90: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 6f  e_XXX function o
4ca0: 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 76  n a .** column v
4cb0: 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61 6c  alue (i.e. a val
4cc0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ue returned by e
4cd0: 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51 4c  valuating an SQL
4ce0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
4cf0: 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69 73  he.** select lis
4d00: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  t of a SELECT st
4d10: 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d 61  atement) that ma
4d20: 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f 63  y cause a malloc
4d30: 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20 0a  () failure. If .
4d40: 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20  ** malloc() has 
4d50: 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72 65  failed, the thre
4d60: 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ads mallocFailed
4d70: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
4d80: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 0a   and the result.
4d90: 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74 65  ** code of state
4da0: 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20 74  ment pStmt set t
4db0: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 0a  o SQLITE_NOMEM..
4dc0: 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61 6c  **.** Specifical
4dd0: 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c 6c  ly, this is call
4de0: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a 0a  ed from within:.
4df0: 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74 65  **.**     sqlite
4e00: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a 2a  3_column_int().*
4e10: 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  *     sqlite3_co
4e20: 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a 20  lumn_int64().** 
4e30: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75      sqlite3_colu
4e40: 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20 20  mn_text().**    
4e50: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4e60: 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20 20  text16().**     
4e70: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 72  sqlite3_column_r
4e80: 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c  eal().**     sql
4e90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
4ea0: 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  s().**     sqlit
4eb0: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
4ec0: 36 28 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e 6f  6().**.** But no
4ed0: 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 6f  t for sqlite3_co
4ee0: 6c 75 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68 69  lumn_blob(), whi
4ef0: 63 68 20 6e 65 76 65 72 20 63 61 6c 6c 73 20 6d  ch never calls m
4f00: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61 74  alloc()..*/.stat
4f10: 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d 61  ic void columnMa
4f20: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c 69  llocFailure(sqli
4f30: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29  te3_stmt *pStmt)
4f40: 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c 6f  .{.  /* If mallo
4f50: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
4f60: 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63 6f  g an encoding co
4f70: 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e 20  nversion within 
4f80: 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  an.  ** sqlite3_
4f90: 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c 20  column_XXX API, 
4fa0: 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65 74  then set the ret
4fb0: 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65 20  urn code of the 
4fc0: 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 2a  statement to.  *
4fd0: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e 20  * SQLITE_NOMEM. 
4fe0: 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  The next call to
4ff0: 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e 79   _step() (if any
5000: 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51  ) will return SQ
5010: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a 20  LITE_ERROR.  ** 
5020: 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29 20  and _finalize() 
5030: 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d 45  will return NOME
5040: 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20 2a  M..  */.  Vdbe *
5050: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
5060: 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  t;.  if( p ){.  
5070: 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74 65    p->rc = sqlite
5080: 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20  3ApiExit(p->db, 
5090: 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c 69  p->rc);.    sqli
50a0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
50b0: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
50c0: 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a   }.}../*********
50d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
50e0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  *** sqlite3_colu
50f0: 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  mn_  ***********
5100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5110: 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ****.** The foll
5120: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61  owing routines a
5130: 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  re used to acces
5140: 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74 68  s elements of th
5150: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a 2a  e current row.**
5160: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
5170: 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69  et..*/.const voi
5180: 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d *sqlite3_colum
5190: 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f 73  n_blob(sqlite3_s
51a0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
51b0: 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i){.  const void
51c0: 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20 73   *val;.  val = s
51d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
51e0: 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  b( columnMem(pSt
51f0: 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45 76  mt,i) );.  /* Ev
5200: 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20  en though there 
5210: 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20 63  is no encoding c
5220: 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75 65  onversion, value
5230: 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20 20  _blob() might.  
5240: 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20  ** need to call 
5250: 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70 61  malloc() to expa
5260: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  nd the result of
5270: 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a 20   a zeroblob() . 
5280: 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 20   ** expression. 
5290: 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d 61  .  */.  columnMa
52a0: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
52b0: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c  t);.  return val
52c0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
52d0: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71 6c  column_bytes(sql
52e0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
52f0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
5300: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
5310: 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75 6d  lue_bytes( colum
5320: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5330: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5340: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5350: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 69   return val;.}.i
5360: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  nt sqlite3_colum
5370: 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74 65  n_bytes16(sqlite
5380: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
5390: 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c  nt i){.  int val
53a0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
53b0: 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d 6e  _bytes16( column
53c0: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
53d0: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
53e0: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
53f0: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64 6f  return val;.}.do
5400: 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f 6c  uble sqlite3_col
5410: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69 74  umn_double(sqlit
5420: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5430: 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c 65  int i){.  double
5440: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
5450: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f 6c  alue_double( col
5460: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
5470: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
5480: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
5490: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
54a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
54b0: 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f  umn_int(sqlite3_
54c0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
54d0: 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20 3d   i){.  int val =
54e0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
54f0: 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  nt( columnMem(pS
5500: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
5510: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
5520: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
5530: 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f 69   val;.}.sqlite_i
5540: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f 6c  nt64 sqlite3_col
5550: 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74 65  umn_int64(sqlite
5560: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
5570: 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65 5f  nt i){.  sqlite_
5580: 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c 69  int64 val = sqli
5590: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
55a0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
55b0: 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d  ,i) );.  columnM
55c0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
55d0: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
55e0: 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69 67  l;.}.const unsig
55f0: 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74 65  ned char *sqlite
5600: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 71  3_column_text(sq
5610: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5620: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f 6e  t, int i){.  con
5630: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
5640: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
5650: 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c 75  value_text( colu
5660: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
5670: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
5680: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
5690: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
56a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
56b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76 61  qlite3_column_va
56c0: 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  lue(sqlite3_stmt
56d0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
56e0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 63  .  Mem *pOut = c
56f0: 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 20  olumnMem(pStmt, 
5700: 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  i);.  if( pOut->
5710: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69 63  flags&MEM_Static
5720: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
5730: 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61 74  ags &= ~MEM_Stat
5740: 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ic;.    pOut->fl
5750: 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d  ags |= MEM_Ephem
5760: 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d 61  ;.  }.  columnMa
5770: 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d  llocFailure(pStm
5780: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73 71  t);.  return (sq
5790: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70 4f  lite3_value *)pO
57a0: 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  ut;.}.#ifndef SQ
57b0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
57c0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
57d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
57e0: 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  6(sqlite3_stmt *
57f0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20  pStmt, int i){. 
5800: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c   const void *val
5810: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5820: 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e 4d  _text16( columnM
5830: 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a 20  em(pStmt,i) );. 
5840: 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69   columnMallocFai
5850: 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20 72  lure(pStmt);.  r
5860: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65 6e  eturn val;.}.#en
5870: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
5880: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74 20  IT_UTF16 */.int 
5890: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
58a0: 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ype(sqlite3_stmt
58b0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b   *pStmt, int i){
58c0: 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20 73  .  int iType = s
58d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
58e0: 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74  e( columnMem(pSt
58f0: 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d  mt,i) );.  colum
5900: 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70  nMallocFailure(p
5910: 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  Stmt);.  return 
5920: 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68 65  iType;.}../* The
5930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74   following funct
5940: 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e  ion is experimen
5950: 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63 74 20  tal and subject 
5960: 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a 20  to change or.** 
5970: 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e 74  removal */./*int
5980: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5990: 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c  numeric_type(sql
59a0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
59b0: 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72 65  , int i){.**  re
59c0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
59d0: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
59e0: 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74   columnMem(pStmt
59f0: 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a 2f  ,i) );.**}.*/../
5a00: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
5a10: 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   N-th element of
5a20: 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d 65   pStmt->pColName
5a30: 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  [] into a string
5a40: 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63 28   using.** xFunc(
5a50: 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68  ) then return th
5a60: 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e  at string.  If N
5a70: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
5a80: 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a  , return 0..**.*
5a90: 2a 20 54 68 65 72 65 20 61 72 65 20 75 70 20 74  * There are up t
5aa0: 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20 65 61  o 5 names for ea
5ab0: 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65 54  ch column.  useT
5ac0: 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73 20 77  ype determines w
5ad0: 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73 20  hich.** name is 
5ae0: 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72 65 20  returned.  Here 
5af0: 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a 2a  are the names:.*
5b00: 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20 20 54  *.**    0      T
5b10: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61  he column name a
5b20: 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 64  s it should be d
5b30: 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f 75 74  isplayed for out
5b40: 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20 20 20  put.**    1     
5b50: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 6e 61   The datatype na
5b60: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  me for the colum
5b70: 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20 20 54  n.**    2      T
5b80: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
5b90: 61 74 61 62 61 73 65 20 74 68 61 74 20 74 68 65  atabase that the
5ba0: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
5bb0: 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20 20  from.**    3    
5bc0: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
5bd0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
5be0: 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20   column derives 
5bf0: 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20 20  from.**    4    
5c00: 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68    The name of th
5c10: 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 74  e table column t
5c20: 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20 63  hat the result c
5c30: 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66 72  olumn derives fr
5c40: 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  om.**.** If the 
5c50: 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 61 20  result is not a 
5c60: 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72 65  simple column re
5c70: 66 65 72 65 6e 63 65 20 28 69 66 20 69 74 20 69  ference (if it i
5c80: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a  s an expression.
5c90: 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e 74  ** or a constant
5ca0: 29 20 74 68 65 6e 20 75 73 65 54 79 70 65 73 20  ) then useTypes 
5cb0: 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65 74 75  2, 3, and 4 retu
5cc0: 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74  rn NULL..*/.stat
5cd0: 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 63  ic const void *c
5ce0: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71 6c  olumnName(.  sql
5cf0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
5d00: 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f 6e  ,.  int N,.  con
5d10: 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
5d20: 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20 75  )(Mem*),.  int u
5d30: 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e 73  seType.){.  cons
5d40: 74 20 76 6f 69 64 20 2a 72 65 74 20 3d 20 30 3b  t void *ret = 0;
5d50: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
5d60: 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69 6e  be *)pStmt;.  in
5d70: 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  t n;.  sqlite3 *
5d80: 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 0a 20  db = p->db;.  . 
5d90: 20 61 73 73 65 72 74 28 20 64 62 21 3d 30 20 29   assert( db!=0 )
5da0: 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  n = sqlite3_
5db0: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74  column_count(pSt
5dc0: 6d 74 29 3b 0a 20 20 69 66 28 20 4e 3c 6e 20 26  mt);.  if( N<n &
5dd0: 26 20 4e 3e 3d 30 20 29 7b 0a 20 20 20 20 4e 20  & N>=0 ){.    N 
5de0: 2b 3d 20 75 73 65 54 79 70 65 2a 6e 3b 0a 20 20  += useType*n;.  
5df0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
5e00: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
5e10: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  ;.    assert( db
5e20: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d 3d  ->mallocFailed==
5e30: 30 20 29 3b 0a 20 20 20 20 72 65 74 20 3d 20 78  0 );.    ret = x
5e40: 46 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61 6d  Func(&p->aColNam
5e50: 65 5b 4e 5d 29 3b 0a 20 20 20 20 20 2f 2a 20 41  e[N]);.     /* A
5e60: 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76 65   malloc may have
5e70: 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65 20 6f   failed inside o
5e80: 66 20 74 68 65 20 78 46 75 6e 63 28 29 20 63 61  f the xFunc() ca
5e90: 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20 20 20  ll. If this.    
5ea0: 2a 2a 20 69 73 20 74 68 65 20 63 61 73 65 2c 20  ** is the case, 
5eb0: 63 6c 65 61 72 20 74 68 65 20 6d 61 6c 6c 6f 63  clear the malloc
5ec0: 46 61 69 6c 65 64 20 66 6c 61 67 20 61 6e 64 20  Failed flag and 
5ed0: 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20 20 20  return NULL..   
5ee0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
5ef0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
5f00: 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
5f10: 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20  Failed = 0;.    
5f20: 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20 20 7d    ret = 0;.    }
5f30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
5f40: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
5f50: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
5f60: 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n ret;.}../*.** 
5f70: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
5f80: 6f 66 20 74 68 65 20 4e 74 68 20 63 6f 6c 75 6d  of the Nth colum
5f90: 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
5fa0: 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20  set returned by 
5fb0: 53 51 4c 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  SQL.** statement
5fc0: 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73 74   pStmt..*/.const
5fd0: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 63   char *sqlite3_c
5fe0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c 69 74  olumn_name(sqlit
5ff0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
6000: 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e  int N){.  return
6010: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20   columnName(.   
6020: 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f     pStmt, N, (co
6030: 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d  nst void*(*)(Mem
6040: 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  *))sqlite3_value
6050: 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  _text, COLNAME_N
6060: 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20  AME);.}.#ifndef 
6070: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6080: 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  6.const void *sq
6090: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
60a0: 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  e16(sqlite3_stmt
60b0: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
60c0: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
60d0: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
60e0: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
60f0: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6100: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
6110: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29 3b  , COLNAME_NAME);
6120: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
6130: 20 43 6f 6e 73 74 72 61 69 6e 74 3a 20 20 49 66   Constraint:  If
6140: 20 79 6f 75 20 68 61 76 65 20 45 4e 41 42 4c 45   you have ENABLE
6150: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
6160: 20 74 68 65 6e 20 79 6f 75 20 6d 75 73 74 0a 2a   then you must.*
6170: 2a 20 6e 6f 74 20 64 65 66 69 6e 65 20 4f 4d 49  * not define OMI
6180: 54 5f 44 45 43 4c 54 59 50 45 2e 0a 2a 2f 0a 23  T_DECLTYPE..*/.#
6190: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
61a0: 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 29  E_OMIT_DECLTYPE)
61b0: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
61c0: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
61d0: 5f 4d 45 54 41 44 41 54 41 29 0a 23 20 65 72 72  _METADATA).# err
61e0: 6f 72 20 22 4d 75 73 74 20 6e 6f 74 20 64 65 66  or "Must not def
61f0: 69 6e 65 20 62 6f 74 68 20 53 51 4c 49 54 45 5f  ine both SQLITE_
6200: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20 5c 0a  OMIT_DECLTYPE \.
6210: 20 20 20 20 20 20 20 20 20 61 6e 64 20 53 51 4c           and SQL
6220: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6230: 4e 5f 4d 45 54 41 44 41 54 41 22 0a 23 65 6e 64  N_METADATA".#end
6240: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
6250: 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45  TE_OMIT_DECLTYPE
6260: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6270: 65 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  e column declara
6280: 74 69 6f 6e 20 74 79 70 65 20 28 69 66 20 61 70  tion type (if ap
6290: 70 6c 69 63 61 62 6c 65 29 20 6f 66 20 74 68 65  plicable) of the
62a0: 20 27 69 27 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   'i'th column.**
62b0: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
62c0: 65 74 20 6f 66 20 53 51 4c 20 73 74 61 74 65 6d  et of SQL statem
62d0: 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f  ent pStmt..*/.co
62e0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
62f0: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
6300: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
6310: 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20  pStmt, int N){. 
6320: 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61   return columnNa
6330: 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74 2c  me(.      pStmt,
6340: 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a   N, (const void*
6350: 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65  (*)(Mem*))sqlite
6360: 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43 4f  3_value_text, CO
6370: 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29 3b  LNAME_DECLTYPE);
6380: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
6390: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
63a0: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
63b0: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
63c0: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
63d0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
63e0: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
63f0: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
6400: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
6410: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
6420: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 2c  e3_value_text16,
6430: 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50   COLNAME_DECLTYP
6440: 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  E);.}.#endif /* 
6450: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6460: 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  6 */.#endif /* S
6470: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54  QLITE_OMIT_DECLT
6480: 59 50 45 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53  YPE */..#ifdef S
6490: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
64a0: 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a 0a  UMN_METADATA./*.
64b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
64c0: 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  me of the databa
64d0: 73 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20  se from which a 
64e0: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65  result column de
64f0: 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69  rives..** NULL i
6500: 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
6510: 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
6520: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
6530: 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a   or constant or.
6540: 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65  ** anything else
6550: 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e   which is not an
6560: 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65   unabiguous refe
6570: 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62  rence to a datab
6580: 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63  ase column..*/.c
6590: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
65a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
65b0: 73 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f  se_name(sqlite3_
65c0: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
65d0: 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f   N){.  return co
65e0: 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20  lumnName(.      
65f0: 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74  pStmt, N, (const
6600: 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29   void*(*)(Mem*))
6610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6620: 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54 41  xt, COLNAME_DATA
6630: 42 41 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  BASE);.}.#ifndef
6640: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6650: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
6660: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
6670: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73 71  tabase_name16(sq
6680: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
6690: 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74  t, int N){.  ret
66a0: 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a  urn columnName(.
66b0: 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20        pStmt, N, 
66c0: 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28  (const void*(*)(
66d0: 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61  Mem*))sqlite3_va
66e0: 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c 4e  lue_text16, COLN
66f0: 41 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a 7d  AME_DATABASE);.}
6700: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
6710: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
6720: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6730: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
6740: 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61  ble from which a
6750: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64   result column d
6760: 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20  erives..** NULL 
6770: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
6780: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
6790: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
67a0: 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72  n or constant or
67b0: 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  .** anything els
67c0: 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61  e which is not a
67d0: 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66  n unabiguous ref
67e0: 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61  erence to a data
67f0: 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  base column..*/.
6800: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
6810: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
6820: 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74  _name(sqlite3_st
6830: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
6840: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
6850: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
6860: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
6870: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
6880: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6890: 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45 29  , COLNAME_TABLE)
68a0: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
68b0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
68c0: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
68d0: 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
68e0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
68f0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
6900: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
6910: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
6920: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
6930: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
6940: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6950: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c  16, COLNAME_TABL
6960: 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  E);.}.#endif /* 
6970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6980: 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  6 */../*.** Retu
6990: 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  rn the name of t
69a0: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  he table column 
69b0: 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65 73  from which a res
69c0: 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76  ult column deriv
69d0: 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20 72  es..** NULL is r
69e0: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 72  eturned if the r
69f0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73 20  esult column is 
6a00: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  an expression or
6a10: 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a 20   constant or.** 
6a20: 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77 68  anything else wh
6a30: 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75 6e  ich is not an un
6a40: 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65 6e  abiguous referen
6a50: 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73 65  ce to a database
6a60: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e 73   column..*/.cons
6a70: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6a80: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
6a90: 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  me(sqlite3_stmt 
6aa0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
6ab0: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
6ac0: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
6ad0: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
6ae0: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
6af0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43  e3_value_text, C
6b00: 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b 0a  OLNAME_COLUMN);.
6b10: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
6b20: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e 73  _OMIT_UTF16.cons
6b30: 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  t void *sqlite3_
6b40: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
6b50: 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  me16(sqlite3_stm
6b60: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
6b70: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
6b80: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
6b90: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
6ba0: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
6bb0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
6bc0: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d  6, COLNAME_COLUM
6bd0: 4e 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  N);.}.#endif /* 
6be0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
6bf0: 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  6 */.#endif /* S
6c00: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
6c10: 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f 0a  UMN_METADATA */.
6c20: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
6c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6c40: 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ** sqlite3_bind_
6c50: 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
6c60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
6c70: 20 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75 73   .** Routines us
6c80: 65 64 20 74 6f 20 61 74 74 61 63 68 20 76 61 6c  ed to attach val
6c90: 75 65 73 20 74 6f 20 77 69 6c 64 63 61 72 64 73  ues to wildcards
6ca0: 20 69 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20 53   in a compiled S
6cb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f  QL statement..*/
6cc0: 0a 2f 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74 68  ./*.** Unbind th
6cd0: 65 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74 6f  e value bound to
6ce0: 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 76   variable i in v
6cf0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 70  irtual machine p
6d00: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 0a 2a  . This is the .*
6d10: 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 62 69  * the same as bi
6d20: 6e 64 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61 6c  nding a NULL val
6d30: 75 65 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d 6e  ue to the column
6d40: 2e 20 49 66 20 74 68 65 20 22 69 22 20 70 61 72  . If the "i" par
6d50: 61 6d 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75 74  ameter is.** out
6d60: 20 6f 66 20 72 61 6e 67 65 2c 20 74 68 65 6e 20   of range, then 
6d70: 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 69 73 20  SQLITE_RANGE is 
6d80: 72 65 74 75 72 6e 65 64 2e 20 4f 74 68 65 77 69  returned. Othewi
6d90: 73 65 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a  se SQLITE_OK..**
6da0: 0a 2a 2a 20 41 20 73 75 63 63 65 73 73 66 75 6c  .** A successful
6db0: 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74   evaluation of t
6dc0: 68 69 73 20 72 6f 75 74 69 6e 65 20 61 63 71 75  his routine acqu
6dd0: 69 72 65 73 20 74 68 65 20 6d 75 74 65 78 20 6f  ires the mutex o
6de0: 6e 20 70 2e 0a 2a 2a 20 74 68 65 20 6d 75 74 65  n p..** the mute
6df0: 78 20 69 73 20 72 65 6c 65 61 73 65 64 20 69 66  x is released if
6e00: 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72 72   any kind of err
6e10: 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a  or occurs..**.**
6e20: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
6e30: 73 74 6f 72 65 64 20 69 6e 20 64 61 74 61 62 61  stored in databa
6e40: 73 65 20 70 2d 3e 64 62 20 69 73 20 6f 76 65 72  se p->db is over
6e50: 77 72 69 74 74 65 6e 20 77 69 74 68 20 74 68 65  written with the
6e60: 20 72 65 74 75 72 6e 0a 2a 2a 20 76 61 6c 75 65   return.** value
6e70: 20 69 6e 20 61 6e 79 20 63 61 73 65 2e 0a 2a 2f   in any case..*/
6e80: 0a 73 74 61 74 69 63 20 69 6e 74 20 76 64 62 65  .static int vdbe
6e90: 55 6e 62 69 6e 64 28 56 64 62 65 20 2a 70 2c 20  Unbind(Vdbe *p, 
6ea0: 69 6e 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a 70  int i){.  Mem *p
6eb0: 56 61 72 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20  Var;.  if( p==0 
6ec0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
6ed0: 4d 49 53 55 53 45 3b 0a 20 20 73 71 6c 69 74 65  MISUSE;.  sqlite
6ee0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d  3_mutex_enter(p-
6ef0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69  >db->mutex);.  i
6f00: 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44 42  f( p->magic!=VDB
6f10: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 7c 7c 20 70  E_MAGIC_RUN || p
6f20: 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 73  ->pc>=0 ){.    s
6f30: 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e 64  qlite3Error(p->d
6f40: 62 2c 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  b, SQLITE_MISUSE
6f50: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
6f60: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
6f70: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
6f80: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
6f90: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28  ISUSE;.  }.  if(
6fa0: 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61   i<1 || i>p->nVa
6fb0: 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
6fc0: 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51 4c  Error(p->db, SQL
6fd0: 49 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20  ITE_RANGE, 0);. 
6fe0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
6ff0: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
7000: 74 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  tex);.    return
7010: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a 20   SQLITE_RANGE;. 
7020: 20 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61 72   }.  i--;.  pVar
7030: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b 0a   = &p->aVar[i];.
7040: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7050: 52 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a 20  Release(pVar);. 
7060: 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20 4d   pVar->flags = M
7070: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69 74  EM_Null;.  sqlit
7080: 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53  e3Error(p->db, S
7090: 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 0a 20  QLITE_OK, 0);.. 
70a0: 20 2f 2a 20 49 66 20 74 68 65 20 62 69 74 20 63   /* If the bit c
70b0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
70c0: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 6e  this variable in
70d0: 20 56 64 62 65 2e 65 78 70 6d 61 73 6b 20 69 73   Vdbe.expmask is
70e0: 20 73 65 74 2c 20 74 68 65 6e 20 0a 20 20 2a 2a   set, then .  **
70f0: 20 62 69 6e 64 69 6e 67 20 61 20 6e 65 77 20 76   binding a new v
7100: 61 6c 75 65 20 74 6f 20 74 68 69 73 20 76 61 72  alue to this var
7110: 69 61 62 6c 65 20 69 6e 76 61 6c 69 64 61 74 65  iable invalidate
7120: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 71 75  s the current qu
7130: 65 72 79 20 70 6c 61 6e 2e 0a 20 20 2a 2f 0a 20  ery plan..  */. 
7140: 20 69 66 28 20 70 2d 3e 69 73 50 72 65 70 61 72   if( p->isPrepar
7150: 65 56 32 20 26 26 0a 20 20 20 20 20 28 28 69 3c  eV2 &&.     ((i<
7160: 33 32 20 26 26 20 70 2d 3e 65 78 70 6d 61 73 6b  32 && p->expmask
7170: 20 26 20 28 28 75 33 32 29 31 20 3c 3c 20 69 29   & ((u32)1 << i)
7180: 29 20 7c 7c 20 70 2d 3e 65 78 70 6d 61 73 6b 3d  ) || p->expmask=
7190: 3d 30 78 66 66 66 66 66 66 66 66 29 0a 20 20 29  =0xffffffff).  )
71a0: 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
71b0: 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 1;.  }.  retu
71c0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
71d0: 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 74 65  ./*.** Bind a te
71e0: 78 74 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65  xt or BLOB value
71f0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
7200: 62 69 6e 64 54 65 78 74 28 0a 20 20 73 71 6c 69  bindText(.  sqli
7210: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7220: 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65 6d     /* The statem
7230: 65 6e 74 20 74 6f 20 62 69 6e 64 20 61 67 61 69  ent to bind agai
7240: 6e 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 2c 20  nst */.  int i, 
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7260: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
7270: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 69 6e  parameter to bin
7280: 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69  d */.  const voi
7290: 64 20 2a 7a 44 61 74 61 2c 20 20 20 20 20 2f 2a  d *zData,     /*
72a0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   Pointer to the 
72b0: 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e 64  data to be bound
72c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74 61 2c   */.  int nData,
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
72e0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
72f0: 6f 66 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f  of data to be bo
7300: 75 6e 64 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  und */.  void (*
7310: 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20 20  xDel)(void*),   
7320: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
7330: 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  r the data */.  
7340: 75 38 20 65 6e 63 6f 64 69 6e 67 20 20 20 20 20  u8 encoding     
7350: 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64 69         /* Encodi
7360: 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61 20  ng for the data 
7370: 2a 2f 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70 20  */.){.  Vdbe *p 
7380: 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74 3b  = (Vdbe *)pStmt;
7390: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20  .  Mem *pVar;.  
73a0: 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20  int rc;..  rc = 
73b0: 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69 29  vdbeUnbind(p, i)
73c0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
73d0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28  TE_OK ){.    if(
73e0: 20 7a 44 61 74 61 21 3d 30 20 29 7b 0a 20 20 20   zData!=0 ){.   
73f0: 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56     pVar = &p->aV
7400: 61 72 5b 69 2d 31 5d 3b 0a 20 20 20 20 20 20 72  ar[i-1];.      r
7410: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
7420: 65 6d 53 65 74 53 74 72 28 70 56 61 72 2c 20 7a  emSetStr(pVar, z
7430: 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 65 6e 63  Data, nData, enc
7440: 6f 64 69 6e 67 2c 20 78 44 65 6c 29 3b 0a 20 20  oding, xDel);.  
7450: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
7460: 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f 64 69 6e  TE_OK && encodin
7470: 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  g!=0 ){.        
7480: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7490: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
74a0: 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29 29  Var, ENC(p->db))
74b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
74c0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e  sqlite3Error(p->
74d0: 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20 20  db, rc, 0);.    
74e0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70    rc = sqlite3Ap
74f0: 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 72 63 29  iExit(p->db, rc)
7500: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7510: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
7520: 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  p->db->mutex);. 
7530: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
7540: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61  }.../*.** Bind a
7550: 20 62 6c 6f 62 20 76 61 6c 75 65 20 74 6f 20 61   blob value to a
7560: 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  n SQL statement 
7570: 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e 74  variable..*/.int
7580: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
7590: 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ob(.  sqlite3_st
75a0: 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e  mt *pStmt, .  in
75b0: 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f  t i, .  const vo
75c0: 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e  id *zData, .  in
75d0: 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64  t nData, .  void
75e0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a   (*xDel)(void*).
75f0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64  ){.  return bind
7600: 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a  Text(pStmt, i, z
7610: 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65  Data, nData, xDe
7620: 6c 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c  l, 0);.}.int sql
7630: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
7640: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
7650: 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 64 6f 75  Stmt, int i, dou
7660: 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a 20 20 69  ble rValue){.  i
7670: 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70  nt rc;.  Vdbe *p
7680: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
7690: 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e 62  ;.  rc = vdbeUnb
76a0: 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66 28  ind(p, i);.  if(
76b0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
76c0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
76d0: 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26 70  eMemSetDouble(&p
76e0: 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56 61  ->aVar[i-1], rVa
76f0: 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  lue);.    sqlite
7700: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
7710: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
7720: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
7730: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
7740: 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  _int(sqlite3_stm
7750: 74 20 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e 74  t *p, int i, int
7760: 20 69 56 61 6c 75 65 29 7b 0a 20 20 72 65 74 75   iValue){.  retu
7770: 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  rn sqlite3_bind_
7780: 69 6e 74 36 34 28 70 2c 20 69 2c 20 28 69 36 34  int64(p, i, (i64
7790: 29 69 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74 20  )iValue);.}.int 
77a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
77b0: 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  64(sqlite3_stmt 
77c0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 73  *pStmt, int i, s
77d0: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 56 61 6c  qlite_int64 iVal
77e0: 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  ue){.  int rc;. 
77f0: 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65   Vdbe *p = (Vdbe
7800: 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20 3d   *)pStmt;.  rc =
7810: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
7820: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7830: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
7840: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
7850: 6e 74 36 34 28 26 70 2d 3e 61 56 61 72 5b 69 2d  nt64(&p->aVar[i-
7860: 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20 20  1], iValue);.   
7870: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
7880: 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74 65  eave(p->db->mute
7890: 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  x);.  }.  return
78a0: 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   rc;.}.int sqlit
78b0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71 6c  e3_bind_null(sql
78c0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
78d0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20  , int i){.  int 
78e0: 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  rc;.  Vdbe *p = 
78f0: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
7900: 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64 28  rc = vdbeUnbind(
7910: 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63 3d  p, i);.  if( rc=
7920: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7930: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
7940: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
7950: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
7960: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
7970: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 20 0a  te3_bind_text( .
7980: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
7990: 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69 2c  pStmt, .  int i,
79a0: 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   .  const char *
79b0: 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e 44  zData, .  int nD
79c0: 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a 78  ata, .  void (*x
79d0: 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20  Del)(void*).){. 
79e0: 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78 74   return bindText
79f0: 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74 61  (pStmt, i, zData
7a00: 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20 53  , nData, xDel, S
7a10: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a 23  QLITE_UTF8);.}.#
7a20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
7a30: 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
7a40: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
7a50: 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  (.  sqlite3_stmt
7a60: 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20   *pStmt, .  int 
7a70: 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  i, .  const void
7a80: 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20   *zData, .  int 
7a90: 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28  nData, .  void (
7aa0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b  *xDel)(void*).){
7ab0: 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65  .  return bindTe
7ac0: 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61  xt(pStmt, i, zDa
7ad0: 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c  ta, nData, xDel,
7ae0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7af0: 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  IVE);.}.#endif /
7b00: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
7b10: 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  F16 */.int sqlit
7b20: 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73 71  e3_bind_value(sq
7b30: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7b40: 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74 20  t, int i, const 
7b50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
7b60: 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63  Value){.  int rc
7b70: 3b 0a 20 20 73 77 69 74 63 68 28 20 70 56 61 6c  ;.  switch( pVal
7b80: 75 65 2d 3e 74 79 70 65 20 29 7b 0a 20 20 20 20  ue->type ){.    
7b90: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
7ba0: 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63 20  GER: {.      rc 
7bb0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
7bc0: 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 2c 20 70  nt64(pStmt, i, p
7bd0: 56 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20 20  Value->u.i);.   
7be0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
7bf0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
7c00: 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 72  FLOAT: {.      r
7c10: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
7c20: 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69  _double(pStmt, i
7c30: 2c 20 70 56 61 6c 75 65 2d 3e 72 29 3b 0a 20 20  , pValue->r);.  
7c40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
7c50: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
7c60: 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20 69  _BLOB: {.      i
7c70: 66 28 20 70 56 61 6c 75 65 2d 3e 66 6c 61 67 73  f( pValue->flags
7c80: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
7c90: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
7ca0: 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f  te3_bind_zeroblo
7cb0: 62 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61 6c  b(pStmt, i, pVal
7cc0: 75 65 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  ue->u.nZero);.  
7cd0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ce0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
7cf0: 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c  bind_blob(pStmt,
7d00: 20 69 2c 20 70 56 61 6c 75 65 2d 3e 7a 2c 20 70   i, pValue->z, p
7d10: 56 61 6c 75 65 2d 3e 6e 2c 53 51 4c 49 54 45 5f  Value->n,SQLITE_
7d20: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
7d30: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
7d40: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
7d50: 53 51 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a 20  SQLITE_TEXT: {. 
7d60: 20 20 20 20 20 72 63 20 3d 20 62 69 6e 64 54 65       rc = bindTe
7d70: 78 74 28 70 53 74 6d 74 2c 69 2c 20 20 70 56 61  xt(pStmt,i,  pVa
7d80: 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d 3e  lue->z, pValue->
7d90: 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  n, SQLITE_TRANSI
7da0: 45 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ENT,.           
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dc0: 20 20 20 70 56 61 6c 75 65 2d 3e 65 6e 63 29 3b     pValue->enc);
7dd0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
7de0: 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a    }.    default:
7df0: 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71   {.      rc = sq
7e00: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28  lite3_bind_null(
7e10: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
7e20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
7e30: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
7e40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
7e50: 64 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69 74  d_zeroblob(sqlit
7e60: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
7e70: 69 6e 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a 20  int i, int n){. 
7e80: 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20   int rc;.  Vdbe 
7e90: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
7ea0: 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55  mt;.  rc = vdbeU
7eb0: 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69  nbind(p, i);.  i
7ec0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7ed0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
7ee0: 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c 6f  dbeMemSetZeroBlo
7ef0: 62 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c  b(&p->aVar[i-1],
7f00: 20 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   n);.    sqlite3
7f10: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d 3e  _mutex_leave(p->
7f20: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a  db->mutex);.  }.
7f30: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
7f40: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
7f50: 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63   number of wildc
7f60: 61 72 64 73 20 74 68 61 74 20 63 61 6e 20 62 65  ards that can be
7f70: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 62 6f 75   potentially bou
7f80: 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68 69 73 20 72  nd to..** This r
7f90: 6f 75 74 69 6e 65 20 69 73 20 61 64 64 65 64 20  outine is added 
7fa0: 74 6f 20 73 75 70 70 6f 72 74 20 44 42 44 3a 3a  to support DBD::
7fb0: 53 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69 6e 74  SQLite.  .*/.int
7fc0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
7fd0: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73 71  rameter_count(sq
7fe0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7ff0: 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  t){.  Vdbe *p = 
8000: 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20 20  (Vdbe*)pStmt;.  
8010: 72 65 74 75 72 6e 20 70 20 3f 20 70 2d 3e 6e 56  return p ? p->nV
8020: 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ar : 0;.}../*.**
8030: 20 43 72 65 61 74 65 20 61 20 6d 61 70 70 69 6e   Create a mappin
8040: 67 20 66 72 6f 6d 20 76 61 72 69 61 62 6c 65 20  g from variable 
8050: 6e 75 6d 62 65 72 73 20 74 6f 20 76 61 72 69 61  numbers to varia
8060: 62 6c 65 20 6e 61 6d 65 73 0a 2a 2a 20 69 6e 20  ble names.** in 
8070: 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b 5d  the Vdbe.azVar[]
8080: 20 61 72 72 61 79 2c 20 69 66 20 73 75 63 68 20   array, if such 
8090: 61 20 6d 61 70 70 69 6e 67 20 64 6f 65 73 20 6e  a mapping does n
80a0: 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 65 78  ot already.** ex
80b0: 69 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ist..*/.static v
80c0: 6f 69 64 20 63 72 65 61 74 65 56 61 72 4d 61 70  oid createVarMap
80d0: 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69 66 28  (Vdbe *p){.  if(
80e0: 20 21 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20 20   !p->okVar ){.  
80f0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 4f 70 20    int j;.    Op 
8100: 2a 70 4f 70 3b 0a 20 20 20 20 73 71 6c 69 74 65  *pOp;.    sqlite
8110: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 2d  3_mutex_enter(p-
8120: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  >db->mutex);.   
8130: 20 2f 2a 20 54 68 65 20 72 61 63 65 20 63 6f 6e   /* The race con
8140: 64 69 74 69 6f 6e 20 68 65 72 65 20 69 73 20 68  dition here is h
8150: 61 72 6d 6c 65 73 73 2e 20 20 49 66 20 74 77 6f  armless.  If two
8160: 20 74 68 72 65 61 64 73 20 63 61 6c 6c 20 74 68   threads call th
8170: 69 73 0a 20 20 20 20 2a 2a 20 72 6f 75 74 69 6e  is.    ** routin
8180: 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 56 64  e on the same Vd
8190: 62 65 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  be at the same t
81a0: 69 6d 65 2c 20 74 68 65 79 20 62 6f 74 68 20 6d  ime, they both m
81b0: 69 67 68 74 20 65 6e 64 0a 20 20 20 20 2a 2a 20  ight end.    ** 
81c0: 75 70 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  up initializing 
81d0: 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b 5d  the Vdbe.azVar[]
81e0: 20 61 72 72 61 79 2e 20 20 54 68 61 74 20 69 73   array.  That is
81f0: 20 61 20 6c 69 74 74 6c 65 20 65 78 74 72 61 0a   a little extra.
8200: 20 20 20 20 2a 2a 20 77 6f 72 6b 20 62 75 74 20      ** work but 
8210: 69 74 20 72 65 73 75 6c 74 73 20 69 6e 20 74 68  it results in th
8220: 65 20 73 61 6d 65 20 61 6e 73 77 65 72 2e 0a 20  e same answer.. 
8230: 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a 3d     */.    for(j=
8240: 30 2c 20 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20 6a  0, pOp=p->aOp; j
8250: 3c 70 2d 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70 4f  <p->nOp; j++, pO
8260: 70 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p++){.      if( 
8270: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
8280: 56 61 72 69 61 62 6c 65 20 29 7b 0a 20 20 20 20  Variable ){.    
8290: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
82a0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
82b0: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 20  <=p->nVar );.   
82c0: 20 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70 4f       p->azVar[pO
82d0: 70 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d 3e  p->p1-1] = pOp->
82e0: 70 34 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p4.z;.      }.  
82f0: 20 20 7d 0a 20 20 20 20 70 2d 3e 6f 6b 56 61 72    }.    p->okVar
8300: 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
8310: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
8320: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
8330: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
8340: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 77   the name of a w
8350: 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74 65  ildcard paramete
8360: 72 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20  r.  Return NULL 
8370: 69 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  if the index.** 
8380: 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20  is out of range 
8390: 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63 61  or if the wildca
83a0: 72 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a 2a  rd is unnamed..*
83b0: 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  *.** The result 
83c0: 69 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38 2e  is always UTF-8.
83d0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
83e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
83f0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c 69  ameter_name(sqli
8400: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
8410: 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20   int i){.  Vdbe 
8420: 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74 6d  *p = (Vdbe*)pStm
8430: 74 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c 7c  t;.  if( p==0 ||
8440: 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56 61   i<1 || i>p->nVa
8450: 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  r ){.    return 
8460: 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 56  0;.  }.  createV
8470: 61 72 4d 61 70 28 70 29 3b 0a 20 20 72 65 74 75  arMap(p);.  retu
8480: 72 6e 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31 5d  rn p->azVar[i-1]
8490: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65 6e  ;.}../*.** Given
84a0: 20 61 20 77 69 6c 64 63 61 72 64 20 70 61 72 61   a wildcard para
84b0: 6d 65 74 65 72 20 6e 61 6d 65 2c 20 72 65 74 75  meter name, retu
84c0: 72 6e 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  rn the index of 
84d0: 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  the variable.** 
84e0: 77 69 74 68 20 74 68 61 74 20 6e 61 6d 65 2e 20  with that name. 
84f0: 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
8500: 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68  variable with th
8510: 65 20 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a 2a  e given name,.**
8520: 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69 6e   return 0..*/.in
8530: 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
8540: 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
8550: 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *p, const char 
8560: 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 6e 4e 61 6d  *zName, int nNam
8570: 65 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  e){.  int i;.  i
8580: 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20 72  f( p==0 ){.    r
8590: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 63  eturn 0;.  }.  c
85a0: 72 65 61 74 65 56 61 72 4d 61 70 28 70 29 3b 20  reateVarMap(p); 
85b0: 0a 20 20 69 66 28 20 7a 4e 61 6d 65 20 29 7b 0a  .  if( zName ){.
85c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
85d0: 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20  ->nVar; i++){.  
85e0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
85f0: 7a 20 3d 20 70 2d 3e 61 7a 56 61 72 5b 69 5d 3b  z = p->azVar[i];
8600: 0a 20 20 20 20 20 20 69 66 28 20 7a 20 26 26 20  .      if( z && 
8610: 6d 65 6d 63 6d 70 28 7a 2c 7a 4e 61 6d 65 2c 6e  memcmp(z,zName,n
8620: 4e 61 6d 65 29 3d 3d 30 20 26 26 20 7a 5b 6e 4e  Name)==0 && z[nN
8630: 61 6d 65 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ame]==0 ){.     
8640: 20 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a 20     return i+1;. 
8650: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
8660: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 69  .  return 0;.}.i
8670: 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  nt sqlite3_bind_
8680: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
8690: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
86a0: 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  tmt, const char 
86b0: 2a 7a 4e 61 6d 65 29 7b 0a 20 20 72 65 74 75 72  *zName){.  retur
86c0: 6e 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  n sqlite3VdbePar
86d0: 61 6d 65 74 65 72 49 6e 64 65 78 28 28 56 64 62  ameterIndex((Vdb
86e0: 65 2a 29 70 53 74 6d 74 2c 20 7a 4e 61 6d 65 2c  e*)pStmt, zName,
86f0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
8700: 28 7a 4e 61 6d 65 29 29 3b 0a 7d 0a 0a 2f 2a 0a  (zName));.}../*.
8710: 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c 6c 20  ** Transfer all 
8720: 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20 74 68  bindings from th
8730: 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65 6e  e first statemen
8740: 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20 73 65  t over to the se
8750: 63 6f 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  cond..*/.int sql
8760: 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
8770: 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
8780: 74 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71  t *pFromStmt, sq
8790: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53  lite3_stmt *pToS
87a0: 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 46  tmt){.  Vdbe *pF
87b0: 72 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46 72  rom = (Vdbe*)pFr
87c0: 6f 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a  omStmt;.  Vdbe *
87d0: 70 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54 6f  pTo = (Vdbe*)pTo
87e0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  Stmt;.  int i;. 
87f0: 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 64 62   assert( pTo->db
8800: 3d 3d 70 46 72 6f 6d 2d 3e 64 62 20 29 3b 0a 20  ==pFrom->db );. 
8810: 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 6e 56   assert( pTo->nV
8820: 61 72 3d 3d 70 46 72 6f 6d 2d 3e 6e 56 61 72 20  ar==pFrom->nVar 
8830: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
8840: 65 78 5f 65 6e 74 65 72 28 70 54 6f 2d 3e 64 62  ex_enter(pTo->db
8850: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72 28  ->mutex);.  for(
8860: 69 3d 30 3b 20 69 3c 70 46 72 6f 6d 2d 3e 6e 56  i=0; i<pFrom->nV
8870: 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  ar; i++){.    sq
8880: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
8890: 28 26 70 54 6f 2d 3e 61 56 61 72 5b 69 5d 2c 20  (&pTo->aVar[i], 
88a0: 26 70 46 72 6f 6d 2d 3e 61 56 61 72 5b 69 5d 29  &pFrom->aVar[i])
88b0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
88c0: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 54 6f 2d  mutex_leave(pTo-
88d0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  >db->mutex);.  r
88e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
88f0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8900: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
8910: 45 44 0a 2f 2a 0a 2a 2a 20 44 65 70 72 65 63 61  ED./*.** Depreca
8920: 74 65 64 20 65 78 74 65 72 6e 61 6c 20 69 6e 74  ted external int
8930: 65 72 66 61 63 65 2e 20 20 49 6e 74 65 72 6e 61  erface.  Interna
8940: 6c 2f 63 6f 72 65 20 53 51 4c 69 74 65 20 63 6f  l/core SQLite co
8950: 64 65 0a 2a 2a 20 73 68 6f 75 6c 64 20 63 61 6c  de.** should cal
8960: 6c 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  l sqlite3Transfe
8970: 72 42 69 6e 64 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  rBindings..**.**
8980: 20 49 73 20 69 73 20 6d 69 73 75 73 65 20 74 6f   Is is misuse to
8990: 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69   call this routi
89a0: 6e 65 20 77 69 74 68 20 73 74 61 74 65 6d 65 6e  ne with statemen
89b0: 74 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e  ts from differen
89c0: 74 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  t.** database co
89d0: 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 42 75 74 20  nnections.  But 
89e0: 61 73 20 74 68 69 73 20 69 73 20 61 20 64 65 70  as this is a dep
89f0: 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61 63  recated interfac
8a00: 65 2c 20 77 65 0a 2a 2a 20 77 69 6c 6c 20 6e 6f  e, we.** will no
8a10: 74 20 62 6f 74 68 65 72 20 74 6f 20 63 68 65 63  t bother to chec
8a20: 6b 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 64 69  k for that condi
8a30: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tion..**.** If t
8a40: 68 65 20 74 77 6f 20 73 74 61 74 65 6d 65 6e 74  he two statement
8a50: 73 20 63 6f 6e 74 61 69 6e 20 61 20 64 69 66 66  s contain a diff
8a60: 65 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  erent number of 
8a70: 62 69 6e 64 69 6e 67 73 2c 20 74 68 65 6e 0a 2a  bindings, then.*
8a80: 2a 20 61 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  * an SQLITE_ERRO
8a90: 52 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  R is returned.  
8aa0: 4e 6f 74 68 69 6e 67 20 65 6c 73 65 20 63 61 6e  Nothing else can
8ab0: 20 67 6f 20 77 72 6f 6e 67 2c 20 73 6f 20 6f 74   go wrong, so ot
8ac0: 68 65 72 77 69 73 65 0a 2a 2a 20 53 51 4c 49 54  herwise.** SQLIT
8ad0: 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65 64  E_OK is returned
8ae0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
8af0: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
8b00: 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
8b10: 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71 6c 69  *pFromStmt, sqli
8b20: 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53 74 6d  te3_stmt *pToStm
8b30: 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 46 72 6f  t){.  Vdbe *pFro
8b40: 6d 20 3d 20 28 56 64 62 65 2a 29 70 46 72 6f 6d  m = (Vdbe*)pFrom
8b50: 53 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a 70 54  Stmt;.  Vdbe *pT
8b60: 6f 20 3d 20 28 56 64 62 65 2a 29 70 54 6f 53 74  o = (Vdbe*)pToSt
8b70: 6d 74 3b 0a 20 20 69 66 28 20 70 46 72 6f 6d 2d  mt;.  if( pFrom-
8b80: 3e 6e 56 61 72 21 3d 70 54 6f 2d 3e 6e 56 61 72  >nVar!=pTo->nVar
8b90: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
8ba0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
8bb0: 0a 20 20 69 66 28 20 70 54 6f 2d 3e 69 73 50 72  .  if( pTo->isPr
8bc0: 65 70 61 72 65 56 32 20 26 26 20 70 54 6f 2d 3e  epareV2 && pTo->
8bd0: 65 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20 70  expmask ){.    p
8be0: 54 6f 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b  To->expired = 1;
8bf0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 46 72 6f 6d  .  }.  if( pFrom
8c00: 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26 26  ->isPrepareV2 &&
8c10: 20 70 46 72 6f 6d 2d 3e 65 78 70 6d 61 73 6b 20   pFrom->expmask 
8c20: 29 7b 0a 20 20 20 20 70 46 72 6f 6d 2d 3e 65 78  ){.    pFrom->ex
8c30: 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
8c40: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 54   return sqlite3T
8c50: 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
8c60: 70 46 72 6f 6d 53 74 6d 74 2c 20 70 54 6f 53 74  pFromStmt, pToSt
8c70: 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  mt);.}.#endif../
8c80: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
8c90: 73 71 6c 69 74 65 33 2a 20 64 61 74 61 62 61 73  sqlite3* databas
8ca0: 65 20 68 61 6e 64 6c 65 20 74 6f 20 77 68 69 63  e handle to whic
8cb0: 68 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  h the prepared s
8cc0: 74 61 74 65 6d 65 6e 74 20 67 69 76 65 6e 0a 2a  tatement given.*
8cd0: 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  * in the argumen
8ce0: 74 20 62 65 6c 6f 6e 67 73 2e 20 20 54 68 69 73  t belongs.  This
8cf0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 64 61 74   is the same dat
8d00: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 68 61  abase handle tha
8d10: 74 20 77 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  t was.** the fir
8d20: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
8d30: 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  he sqlite3_prepa
8d40: 72 65 28 29 20 74 68 61 74 20 77 61 73 20 75 73  re() that was us
8d50: 65 64 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  ed to create.** 
8d60: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  the statement in
8d70: 20 74 68 65 20 66 69 72 73 74 20 70 6c 61 63 65   the first place
8d80: 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73 71  ..*/.sqlite3 *sq
8d90: 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28  lite3_db_handle(
8da0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
8db0: 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 70  tmt){.  return p
8dc0: 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a 29 70  Stmt ? ((Vdbe*)p
8dd0: 53 74 6d 74 29 2d 3e 64 62 20 3a 20 30 3b 0a 7d  Stmt)->db : 0;.}
8de0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
8df0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
8e00: 6e 65 78 74 20 70 72 65 70 61 72 65 64 20 73 74  next prepared st
8e10: 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70 53  atement after pS
8e20: 74 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  tmt associated.*
8e30: 2a 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20  * with database 
8e40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e 20  connection pDb. 
8e50: 20 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55 4c   If pStmt is NUL
8e60: 4c 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66 69  L, return the fi
8e70: 72 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64 20  rst.** prepared 
8e80: 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74 68  statement for th
8e90: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
8ea0: 63 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20 4e  ction.  Return N
8eb0: 55 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a 20  ULL if there.** 
8ec0: 61 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f 0a  are no more..*/.
8ed0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 71  sqlite3_stmt *sq
8ee0: 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28  lite3_next_stmt(
8ef0: 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73 71  sqlite3 *pDb, sq
8f00: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8f10: 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  t){.  sqlite3_st
8f20: 6d 74 20 2a 70 4e 65 78 74 3b 0a 20 20 73 71 6c  mt *pNext;.  sql
8f30: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
8f40: 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  (pDb->mutex);.  
8f50: 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a  if( pStmt==0 ){.
8f60: 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71 6c      pNext = (sql
8f70: 69 74 65 33 5f 73 74 6d 74 2a 29 70 44 62 2d 3e  ite3_stmt*)pDb->
8f80: 70 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pVdbe;.  }else{.
8f90: 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71 6c      pNext = (sql
8fa0: 69 74 65 33 5f 73 74 6d 74 2a 29 28 28 56 64 62  ite3_stmt*)((Vdb
8fb0: 65 2a 29 70 53 74 6d 74 29 2d 3e 70 4e 65 78 74  e*)pStmt)->pNext
8fc0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
8fd0: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 44 62 2d  mutex_leave(pDb-
8fe0: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
8ff0: 6e 20 70 4e 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  n pNext;.}../*.*
9000: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c  * Return the val
9010: 75 65 20 6f 66 20 61 20 73 74 61 74 75 73 20 63  ue of a status c
9020: 6f 75 6e 74 65 72 20 66 6f 72 20 61 20 70 72 65  ounter for a pre
9030: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
9040: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  */.int sqlite3_s
9050: 74 6d 74 5f 73 74 61 74 75 73 28 73 71 6c 69 74  tmt_status(sqlit
9060: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
9070: 69 6e 74 20 6f 70 2c 20 69 6e 74 20 72 65 73 65  int op, int rese
9080: 74 46 6c 61 67 29 7b 0a 20 20 56 64 62 65 20 2a  tFlag){.  Vdbe *
9090: 70 56 64 62 65 20 3d 20 28 56 64 62 65 2a 29 70  pVdbe = (Vdbe*)p
90a0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 20 3d 20  Stmt;.  int v = 
90b0: 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74 65 72 5b  pVdbe->aCounter[
90c0: 6f 70 2d 31 5d 3b 0a 20 20 69 66 28 20 72 65 73  op-1];.  if( res
90d0: 65 74 46 6c 61 67 20 29 20 70 56 64 62 65 2d 3e  etFlag ) pVdbe->
90e0: 61 43 6f 75 6e 74 65 72 5b 6f 70 2d 31 5d 20 3d  aCounter[op-1] =
90f0: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 76 3b 0a   0;.  return v;.
9100: 7d 0a                                            }.