/ Hex Artifact Content
Login

Artifact a8b6a6617fc9a0492e4f7d6626d3afe994ddd3f2:


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 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2560: 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20  fetyOn(db) ){.  
2570: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
2580: 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 72 65 74  _MISUSE;.    ret
2590: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
25a0: 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e  E;.  }.  if( p->
25b0: 70 63 3c 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  pc<0 ){.    /* I
25c0: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f  f there are no o
25d0: 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 20  ther statements 
25e0: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
25f0: 67 2c 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 72  g, then.    ** r
2600: 65 73 65 74 20 74 68 65 20 69 6e 74 65 72 72 75  eset the interru
2610: 70 74 20 66 6c 61 67 2e 20 20 54 68 69 73 20 70  pt flag.  This p
2620: 72 65 76 65 6e 74 73 20 61 20 63 61 6c 6c 20 74  revents a call t
2630: 6f 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  o sqlite3_interr
2640: 75 70 74 0a 20 20 20 20 2a 2a 20 66 72 6f 6d 20  upt.    ** from 
2650: 69 6e 74 65 72 72 75 70 74 69 6e 67 20 61 20 73  interrupting a s
2660: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 68 61  tatement that ha
2670: 73 20 6e 6f 74 20 79 65 74 20 73 74 61 72 74 65  s not yet starte
2680: 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
2690: 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
26a0: 43 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Cnt==0 ){.      
26b0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
26c0: 70 74 65 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  pted = 0;.    }.
26d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
26e0: 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
26f0: 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
2700: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  t==0 || db->nDef
2710: 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 29 3b 0a  erredCons==0 );.
2720: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2730: 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 20 20 69  OMIT_TRACE.    i
2740: 66 28 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65 20  f( db->xProfile 
2750: 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  && !db->init.bus
2760: 79 20 29 7b 0a 20 20 20 20 20 20 64 6f 75 62 6c  y ){.      doubl
2770: 65 20 72 4e 6f 77 3b 0a 20 20 20 20 20 20 73 71  e rNow;.      sq
2780: 6c 69 74 65 33 4f 73 43 75 72 72 65 6e 74 54 69  lite3OsCurrentTi
2790: 6d 65 28 64 62 2d 3e 70 56 66 73 2c 20 26 72 4e  me(db->pVfs, &rN
27a0: 6f 77 29 3b 0a 20 20 20 20 20 20 70 2d 3e 73 74  ow);.      p->st
27b0: 61 72 74 54 69 6d 65 20 3d 20 28 75 36 34 29 28  artTime = (u64)(
27c0: 28 72 4e 6f 77 20 2d 20 28 69 6e 74 29 72 4e 6f  (rNow - (int)rNo
27d0: 77 29 2a 33 36 30 30 2e 30 2a 32 34 2e 30 2a 31  w)*3600.0*24.0*1
27e0: 30 30 30 30 30 30 30 30 30 2e 30 29 3b 0a 20 20  000000000.0);.  
27f0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
2800: 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
2810: 74 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  t++;.    if( p->
2820: 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 20 64 62  readOnly==0 ) db
2830: 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 2b 2b  ->writeVdbeCnt++
2840: 3b 0a 20 20 20 20 70 2d 3e 70 63 20 3d 20 30 3b  ;.    p->pc = 0;
2850: 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  .  }.#ifndef SQL
2860: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
2870: 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 6c 61 69  .  if( p->explai
2880: 6e 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  n ){.    rc = sq
2890: 6c 69 74 65 33 56 64 62 65 4c 69 73 74 28 70 29  lite3VdbeList(p)
28a0: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
28b0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
28c0: 45 58 50 4c 41 49 4e 20 2a 2f 0a 20 20 7b 0a 20  EXPLAIN */.  {. 
28d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
28e0: 64 62 65 45 78 65 63 28 70 29 3b 0a 20 20 7d 0a  dbeExec(p);.  }.
28f0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
2900: 66 65 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20  fetyOff(db) ){. 
2910: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
2920: 49 53 55 53 45 3b 0a 20 20 7d 0a 0a 23 69 66 6e  ISUSE;.  }..#ifn
2930: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2940: 54 52 41 43 45 0a 20 20 2f 2a 20 49 6e 76 6f 6b  TRACE.  /* Invok
2950: 65 20 74 68 65 20 70 72 6f 66 69 6c 65 20 63 61  e the profile ca
2960: 6c 6c 62 61 63 6b 20 69 66 20 74 68 65 72 65 20  llback if there 
2970: 69 73 20 6f 6e 65 0a 20 20 2a 2f 0a 20 20 69 66  is one.  */.  if
2980: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57  ( rc!=SQLITE_ROW
2990: 20 26 26 20 64 62 2d 3e 78 50 72 6f 66 69 6c 65   && db->xProfile
29a0: 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75   && !db->init.bu
29b0: 73 79 20 26 26 20 70 2d 3e 7a 53 71 6c 20 29 7b  sy && p->zSql ){
29c0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 4e 6f 77  .    double rNow
29d0: 3b 0a 20 20 20 20 75 36 34 20 65 6c 61 70 73 65  ;.    u64 elapse
29e0: 54 69 6d 65 3b 0a 0a 20 20 20 20 73 71 6c 69 74  Time;..    sqlit
29f0: 65 33 4f 73 43 75 72 72 65 6e 74 54 69 6d 65 28  e3OsCurrentTime(
2a00: 64 62 2d 3e 70 56 66 73 2c 20 26 72 4e 6f 77 29  db->pVfs, &rNow)
2a10: 3b 0a 20 20 20 20 65 6c 61 70 73 65 54 69 6d 65  ;.    elapseTime
2a20: 20 3d 20 28 75 36 34 29 28 28 72 4e 6f 77 20 2d   = (u64)((rNow -
2a30: 20 28 69 6e 74 29 72 4e 6f 77 29 2a 33 36 30 30   (int)rNow)*3600
2a40: 2e 30 2a 32 34 2e 30 2a 31 30 30 30 30 30 30 30  .0*24.0*10000000
2a50: 30 30 2e 30 29 3b 0a 20 20 20 20 65 6c 61 70 73  00.0);.    elaps
2a60: 65 54 69 6d 65 20 2d 3d 20 70 2d 3e 73 74 61 72  eTime -= p->star
2a70: 74 54 69 6d 65 3b 0a 20 20 20 20 64 62 2d 3e 78  tTime;.    db->x
2a80: 50 72 6f 66 69 6c 65 28 64 62 2d 3e 70 50 72 6f  Profile(db->pPro
2a90: 66 69 6c 65 41 72 67 2c 20 70 2d 3e 7a 53 71 6c  fileArg, p->zSql
2aa0: 2c 20 65 6c 61 70 73 65 54 69 6d 65 29 3b 0a 20  , elapseTime);. 
2ab0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d   }.#endif..  db-
2ac0: 3e 65 72 72 43 6f 64 65 20 3d 20 72 63 3b 0a 20  >errCode = rc;. 
2ad0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45   if( SQLITE_NOME
2ae0: 4d 3d 3d 73 71 6c 69 74 65 33 41 70 69 45 78 69  M==sqlite3ApiExi
2af0: 74 28 70 2d 3e 64 62 2c 20 70 2d 3e 72 63 29 20  t(p->db, p->rc) 
2b00: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53  ){.    p->rc = S
2b10: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
2b20: 0a 65 6e 64 5f 6f 66 5f 73 74 65 70 3a 0a 20 20  .end_of_step:.  
2b30: 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  /* At this point
2b40: 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20   local variable 
2b50: 72 63 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c  rc holds the val
2b60: 75 65 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ue that should b
2b70: 65 20 0a 20 20 2a 2a 20 72 65 74 75 72 6e 65 64  e .  ** returned
2b80: 20 69 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   if this stateme
2b90: 6e 74 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  nt was compiled 
2ba0: 75 73 69 6e 67 20 74 68 65 20 6c 65 67 61 63 79  using the legacy
2bb0: 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 70   .  ** sqlite3_p
2bc0: 72 65 70 61 72 65 28 29 20 69 6e 74 65 72 66 61  repare() interfa
2bd0: 63 65 2e 20 41 63 63 6f 72 64 69 6e 67 20 74 6f  ce. According to
2be0: 20 74 68 65 20 64 6f 63 73 2c 20 74 68 69 73 20   the docs, this 
2bf0: 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 62 65  can only.  ** be
2c00: 20 6f 6e 65 20 6f 66 20 74 68 65 20 76 61 6c 75   one of the valu
2c10: 65 73 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  es in the first 
2c20: 61 73 73 65 72 74 28 29 20 62 65 6c 6f 77 2e 20  assert() below. 
2c30: 56 61 72 69 61 62 6c 65 20 70 2d 3e 72 63 20 0a  Variable p->rc .
2c40: 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68    ** contains th
2c50: 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  e value that wou
2c60: 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 69  ld be returned i
2c70: 66 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  f sqlite3_finali
2c80: 7a 65 28 29 20 0a 20 20 2a 2a 20 77 65 72 65 20  ze() .  ** were 
2c90: 63 61 6c 6c 65 64 20 6f 6e 20 73 74 61 74 65 6d  called on statem
2ca0: 65 6e 74 20 70 2e 0a 20 20 2a 2f 0a 20 20 61 73  ent p..  */.  as
2cb0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
2cc0: 5f 52 4f 57 20 20 7c 7c 20 72 63 3d 3d 53 51 4c  _ROW  || rc==SQL
2cd0: 49 54 45 5f 44 4f 4e 45 20 20 20 7c 7c 20 72 63  ITE_DONE   || rc
2ce0: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 0a  ==SQLITE_ERROR .
2cf0: 20 20 20 20 20 20 20 7c 7c 20 72 63 3d 3d 53 51         || rc==SQ
2d00: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
2d10: 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 0a 20  =SQLITE_MISUSE. 
2d20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
2d30: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20  >rc!=SQLITE_ROW 
2d40: 26 26 20 70 2d 3e 72 63 21 3d 53 51 4c 49 54 45  && p->rc!=SQLITE
2d50: 5f 44 4f 4e 45 20 29 3b 0a 20 20 69 66 28 20 70  _DONE );.  if( p
2d60: 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26 26  ->isPrepareV2 &&
2d70: 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20   rc!=SQLITE_ROW 
2d80: 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  && rc!=SQLITE_DO
2d90: 4e 45 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  NE ){.    /* If 
2da0: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  this statement w
2db0: 61 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  as prepared usin
2dc0: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
2dd0: 65 5f 76 32 28 29 2c 20 61 6e 64 20 61 6e 0a 20  e_v2(), and an. 
2de0: 20 20 20 2a 2a 20 65 72 72 6f 72 20 68 61 73 20     ** error has 
2df0: 6f 63 63 75 72 65 64 2c 20 74 68 65 6e 20 72 65  occured, then re
2e00: 74 75 72 6e 20 74 68 65 20 65 72 72 6f 72 20 63  turn the error c
2e10: 6f 64 65 20 69 6e 20 70 2d 3e 72 63 20 74 6f 20  ode in p->rc to 
2e20: 74 68 65 0a 20 20 20 20 2a 2a 20 63 61 6c 6c 65  the.    ** calle
2e30: 72 2e 20 53 65 74 20 74 68 65 20 65 72 72 6f 72  r. Set the error
2e40: 20 63 6f 64 65 20 69 6e 20 74 68 65 20 64 61 74   code in the dat
2e50: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 6f 20  abase handle to 
2e60: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a  the same value..
2e70: 20 20 20 20 2a 2f 20 0a 20 20 20 20 72 63 20 3d      */ .    rc =
2e80: 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 3d 20 70   db->errCode = p
2e90: 2d 3e 72 63 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ->rc;.  }.  retu
2ea0: 72 6e 20 28 72 63 26 64 62 2d 3e 65 72 72 4d 61  rn (rc&db->errMa
2eb0: 73 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  sk);.}../*.** Th
2ec0: 69 73 20 69 73 20 74 68 65 20 74 6f 70 2d 6c 65  is is the top-le
2ed0: 76 65 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  vel implementati
2ee0: 6f 6e 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74  on of sqlite3_st
2ef0: 65 70 28 29 2e 20 20 43 61 6c 6c 0a 2a 2a 20 73  ep().  Call.** s
2f00: 71 6c 69 74 65 33 53 74 65 70 28 29 20 74 6f 20  qlite3Step() to 
2f10: 64 6f 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 77  do most of the w
2f20: 6f 72 6b 2e 20 20 49 66 20 61 20 73 63 68 65 6d  ork.  If a schem
2f30: 61 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 0a  a error occurs,.
2f40: 2a 2a 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 52  ** call sqlite3R
2f50: 65 70 72 65 70 61 72 65 28 29 20 61 6e 64 20 74  eprepare() and t
2f60: 72 79 20 61 67 61 69 6e 2e 0a 2a 2f 0a 69 6e 74  ry again..*/.int
2f70: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73 71   sqlite3_step(sq
2f80: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
2f90: 74 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53  t){.  int rc = S
2fa0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
2fb0: 56 64 62 65 20 2a 76 20 3d 20 28 56 64 62 65 2a  Vdbe *v = (Vdbe*
2fc0: 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 76 20  )pStmt;.  if( v 
2fd0: 26 26 20 28 76 2d 3e 64 62 29 21 3d 30 20 29 7b  && (v->db)!=0 ){
2fe0: 0a 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30  .    int cnt = 0
2ff0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64  ;.    sqlite3 *d
3000: 62 20 3d 20 76 2d 3e 64 62 3b 0a 20 20 20 20 73  b = v->db;.    s
3010: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
3020: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
3030: 20 20 20 77 68 69 6c 65 28 20 28 72 63 20 3d 20     while( (rc = 
3040: 73 71 6c 69 74 65 33 53 74 65 70 28 76 29 29 3d  sqlite3Step(v))=
3050: 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20  =SQLITE_SCHEMA. 
3060: 20 20 20 20 20 20 20 20 20 20 26 26 20 63 6e 74            && cnt
3070: 2b 2b 20 3c 20 35 0a 20 20 20 20 20 20 20 20 20  ++ < 5.         
3080: 20 20 26 26 20 28 72 63 20 3d 20 73 71 6c 69 74    && (rc = sqlit
3090: 65 33 52 65 70 72 65 70 61 72 65 28 76 29 29 3d  e3Reprepare(v))=
30a0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
30b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65      sqlite3_rese
30c0: 74 28 70 53 74 6d 74 29 3b 0a 20 20 20 20 20 20  t(pStmt);.      
30d0: 76 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  v->expired = 0;.
30e0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
30f0: 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  ==SQLITE_SCHEMA 
3100: 26 26 20 41 4c 57 41 59 53 28 76 2d 3e 69 73 50  && ALWAYS(v->isP
3110: 72 65 70 61 72 65 56 32 29 20 26 26 20 41 4c 57  repareV2) && ALW
3120: 41 59 53 28 64 62 2d 3e 70 45 72 72 29 20 29 7b  AYS(db->pErr) ){
3130: 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
3140: 61 73 65 20 6f 63 63 75 72 73 20 61 66 74 65 72  ase occurs after
3150: 20 66 61 69 6c 69 6e 67 20 74 6f 20 72 65 63 6f   failing to reco
3160: 6d 70 69 6c 65 20 61 6e 20 73 71 6c 20 73 74 61  mpile an sql sta
3170: 74 65 6d 65 6e 74 2e 20 0a 20 20 20 20 20 20 2a  tement. .      *
3180: 2a 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  * The error mess
3190: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  age from the SQL
31a0: 20 63 6f 6d 70 69 6c 65 72 20 68 61 73 20 61 6c   compiler has al
31b0: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65  ready been loade
31c0: 64 20 0a 20 20 20 20 20 20 2a 2a 20 69 6e 74 6f  d .      ** into
31d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
31e0: 6e 64 6c 65 2e 20 54 68 69 73 20 62 6c 6f 63 6b  ndle. This block
31f0: 20 63 6f 70 69 65 73 20 74 68 65 20 65 72 72 6f   copies the erro
3200: 72 20 6d 65 73 73 61 67 65 20 0a 20 20 20 20 20  r message .     
3210: 20 2a 2a 20 66 72 6f 6d 20 74 68 65 20 64 61 74   ** from the dat
3220: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 6e 74  abase handle int
3230: 6f 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  o the statement 
3240: 61 6e 64 20 73 65 74 73 20 74 68 65 20 73 74 61  and sets the sta
3250: 74 65 6d 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20  tement.      ** 
3260: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
3270: 74 6f 20 30 20 74 6f 20 65 6e 73 75 72 65 20 74  to 0 to ensure t
3280: 68 61 74 20 77 68 65 6e 20 74 68 65 20 73 74 61  hat when the sta
3290: 74 65 6d 65 6e 74 20 69 73 20 0a 20 20 20 20 20  tement is .     
32a0: 20 2a 2a 20 66 69 6e 61 6c 69 7a 65 64 20 6f 72   ** finalized or
32b0: 20 72 65 73 65 74 20 74 68 65 20 70 61 72 73 65   reset the parse
32c0: 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  r error message 
32d0: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 76 69 61  is available via
32e0: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
32f0: 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20 73  3_errmsg() and s
3300: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29  qlite3_errcode()
3310: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
3320: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
3330: 72 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20  r = (const char 
3340: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
3350: 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 20  text(db->pErr); 
3360: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
3370: 46 72 65 65 28 64 62 2c 20 76 2d 3e 7a 45 72 72  Free(db, v->zErr
3380: 4d 73 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Msg);.      if( 
3390: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
33a0: 64 20 29 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e  d ){.        v->
33b0: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
33c0: 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 7a 45  3DbStrDup(db, zE
33d0: 72 72 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  rr);.      } els
33e0: 65 20 7b 0a 20 20 20 20 20 20 20 20 76 2d 3e 7a  e {.        v->z
33f0: 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
3400: 20 20 20 20 76 2d 3e 72 63 20 3d 20 53 51 4c 49      v->rc = SQLI
3410: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 20 20  TE_NOMEM;.      
3420: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  }.    }.    rc =
3430: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
3440: 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 73 71 6c  db, rc);.    sql
3450: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
3460: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  (db->mutex);.  }
3470: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
3480: 0a 2f 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  ./*.** Extract t
3490: 68 65 20 75 73 65 72 20 64 61 74 61 20 66 72 6f  he user data fro
34a0: 6d 20 61 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  m a sqlite3_cont
34b0: 65 78 74 20 73 74 72 75 63 74 75 72 65 20 61 6e  ext structure an
34c0: 64 20 72 65 74 75 72 6e 20 61 0a 2a 2a 20 70 6f  d return a.** po
34d0: 69 6e 74 65 72 20 74 6f 20 69 74 2e 0a 2a 2f 0a  inter to it..*/.
34e0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 73  void *sqlite3_us
34f0: 65 72 5f 64 61 74 61 28 73 71 6c 69 74 65 33 5f  er_data(sqlite3_
3500: 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20 20 61  context *p){.  a
3510: 73 73 65 72 74 28 20 70 20 26 26 20 70 2d 3e 70  ssert( p && p->p
3520: 46 75 6e 63 20 29 3b 0a 20 20 72 65 74 75 72 6e  Func );.  return
3530: 20 70 2d 3e 70 46 75 6e 63 2d 3e 70 55 73 65 72   p->pFunc->pUser
3540: 44 61 74 61 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  Data;.}../*.** E
3550: 78 74 72 61 63 74 20 74 68 65 20 75 73 65 72 20  xtract the user 
3560: 64 61 74 61 20 66 72 6f 6d 20 61 20 73 71 6c 69  data from a sqli
3570: 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 74 72 75  te3_context stru
3580: 63 74 75 72 65 20 61 6e 64 20 72 65 74 75 72 6e  cture and return
3590: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
35a0: 20 69 74 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20   it..*/.sqlite3 
35b0: 2a 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  *sqlite3_context
35c0: 5f 64 62 5f 68 61 6e 64 6c 65 28 73 71 6c 69 74  _db_handle(sqlit
35d0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a  e3_context *p){.
35e0: 20 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70    assert( p && p
35f0: 2d 3e 70 46 75 6e 63 20 29 3b 0a 20 20 72 65 74  ->pFunc );.  ret
3600: 75 72 6e 20 70 2d 3e 73 2e 64 62 3b 0a 7d 0a 0a  urn p->s.db;.}..
3610: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
3620: 69 6e 67 20 69 73 20 74 68 65 20 69 6d 70 6c 65  ing is the imple
3630: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20  mentation of an 
3640: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  SQL function tha
3650: 74 20 61 6c 77 61 79 73 0a 2a 2a 20 66 61 69 6c  t always.** fail
3660: 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  s with an error 
3670: 6d 65 73 73 61 67 65 20 73 74 61 74 69 6e 67 20  message stating 
3680: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
3690: 6e 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  n is used in the
36a0: 0a 2a 2a 20 77 72 6f 6e 67 20 63 6f 6e 74 65 78  .** wrong contex
36b0: 74 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  t.  The sqlite3_
36c0: 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
36d0: 6e 28 29 20 41 50 49 20 6d 69 67 68 74 20 63 6f  n() API might co
36e0: 6e 73 74 72 75 63 74 0a 2a 2a 20 53 51 4c 20 66  nstruct.** SQL f
36f0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 75 73 65  unction that use
3700: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 73 6f   this routine so
3710: 20 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69   that the functi
3720: 6f 6e 73 20 77 69 6c 6c 20 65 78 69 73 74 0a 2a  ons will exist.*
3730: 2a 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  * for name resol
3740: 75 74 69 6f 6e 20 62 75 74 20 61 72 65 20 61 63  ution but are ac
3750: 74 75 61 6c 6c 79 20 6f 76 65 72 6c 6f 61 64 65  tually overloade
3760: 64 20 62 79 20 74 68 65 20 78 46 69 6e 64 46 75  d by the xFindFu
3770: 6e 63 74 69 6f 6e 0a 2a 2a 20 6d 65 74 68 6f 64  nction.** method
3780: 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
3790: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
37a0: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
37b0: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  on(.  sqlite3_co
37c0: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
37d0: 20 2f 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e   /* The function
37e0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74   calling context
37f0: 20 2a 2f 0a 20 20 69 6e 74 20 4e 6f 74 55 73 65   */.  int NotUse
3800: 64 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d,              
3810: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
3820: 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 66  guments to the f
3830: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  unction */.  sql
3840: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 4e 6f 74  ite3_value **Not
3850: 55 73 65 64 32 20 20 20 2f 2a 20 56 61 6c 75 65  Used2   /* Value
3860: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3870: 74 20 2a 2f 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  t */.){.  const 
3880: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 63 6f  char *zName = co
3890: 6e 74 65 78 74 2d 3e 70 46 75 6e 63 2d 3e 7a 4e  ntext->pFunc->zN
38a0: 61 6d 65 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72  ame;.  char *zEr
38b0: 72 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  r;.  UNUSED_PARA
38c0: 4d 45 54 45 52 32 28 4e 6f 74 55 73 65 64 2c 20  METER2(NotUsed, 
38d0: 4e 6f 74 55 73 65 64 32 29 3b 0a 20 20 7a 45 72  NotUsed2);.  zEr
38e0: 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
38f0: 6e 74 66 28 0a 20 20 20 20 20 20 22 75 6e 61 62  ntf(.      "unab
3900: 6c 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69  le to use functi
3910: 6f 6e 20 25 73 20 69 6e 20 74 68 65 20 72 65 71  on %s in the req
3920: 75 65 73 74 65 64 20 63 6f 6e 74 65 78 74 22 2c  uested context",
3930: 20 7a 4e 61 6d 65 29 3b 0a 20 20 73 71 6c 69 74   zName);.  sqlit
3940: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
3950: 63 6f 6e 74 65 78 74 2c 20 7a 45 72 72 2c 20 2d  context, zErr, -
3960: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  1);.  sqlite3_fr
3970: 65 65 28 7a 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  ee(zErr);.}../*.
3980: 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 6f 72 20 72  ** Allocate or r
3990: 65 74 75 72 6e 20 74 68 65 20 61 67 67 72 65 67  eturn the aggreg
39a0: 61 74 65 20 63 6f 6e 74 65 78 74 20 66 6f 72 20  ate context for 
39b0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  a user function.
39c0: 20 20 41 20 6e 65 77 0a 2a 2a 20 63 6f 6e 74 65    A new.** conte
39d0: 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
39e0: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 63 61 6c  on the first cal
39f0: 6c 2e 20 20 53 75 62 73 65 71 75 65 6e 74 20 63  l.  Subsequent c
3a00: 61 6c 6c 73 20 72 65 74 75 72 6e 20 74 68 65 0a  alls return the.
3a10: 2a 2a 20 73 61 6d 65 20 63 6f 6e 74 65 78 74 20  ** same context 
3a20: 74 68 61 74 20 77 61 73 20 72 65 74 75 72 6e 65  that was returne
3a30: 64 20 6f 6e 20 70 72 69 6f 72 20 63 61 6c 6c 73  d on prior calls
3a40: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
3a50: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
3a60: 74 65 78 74 28 73 71 6c 69 74 65 33 5f 63 6f 6e  text(sqlite3_con
3a70: 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 6e 42 79  text *p, int nBy
3a80: 74 65 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  te){.  Mem *pMem
3a90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 20 26 26  ;.  assert( p &&
3aa0: 20 70 2d 3e 70 46 75 6e 63 20 26 26 20 70 2d 3e   p->pFunc && p->
3ab0: 70 46 75 6e 63 2d 3e 78 53 74 65 70 20 29 3b 0a  pFunc->xStep );.
3ac0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
3ad0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 70 2d 3e  3_mutex_held(p->
3ae0: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
3af0: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 4d 65 6d    pMem = p->pMem
3b00: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 42  ;.  testcase( nB
3b10: 79 74 65 3c 30 20 29 3b 0a 20 20 69 66 28 20 28  yte<0 );.  if( (
3b20: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
3b30: 4d 5f 41 67 67 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Agg)==0 ){.   
3b40: 20 69 66 28 20 6e 42 79 74 65 3c 3d 30 20 29 7b   if( nByte<=0 ){
3b50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3b60: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
3b70: 72 6e 61 6c 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rnal(pMem);.    
3b80: 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
3b90: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
3ba0: 70 4d 65 6d 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  pMem->z = 0;.   
3bb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
3bc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
3bd0: 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29  (pMem, nByte, 0)
3be0: 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  ;.      pMem->fl
3bf0: 61 67 73 20 3d 20 4d 45 4d 5f 41 67 67 3b 0a 20  ags = MEM_Agg;. 
3c00: 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 70 44 65       pMem->u.pDe
3c10: 66 20 3d 20 70 2d 3e 70 46 75 6e 63 3b 0a 20 20  f = p->pFunc;.  
3c20: 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 7a 20      if( pMem->z 
3c30: 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
3c40: 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42  t(pMem->z, 0, nB
3c50: 79 74 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  yte);.      }.  
3c60: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
3c70: 20 28 76 6f 69 64 2a 29 70 4d 65 6d 2d 3e 7a 3b   (void*)pMem->z;
3c80: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3c90: 20 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61   the auxilary da
3ca0: 74 61 20 70 6f 69 6e 74 65 72 2c 20 69 66 20 61  ta pointer, if a
3cb0: 6e 79 2c 20 66 6f 72 20 74 68 65 20 69 41 72 67  ny, for the iArg
3cc0: 27 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  'th argument to.
3cd0: 2a 2a 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  ** the user-func
3ce0: 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 62 79 20  tion defined by 
3cf0: 70 43 74 78 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  pCtx..*/.void *s
3d00: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 78 64 61  qlite3_get_auxda
3d10: 74 61 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ta(sqlite3_conte
3d20: 78 74 20 2a 70 43 74 78 2c 20 69 6e 74 20 69 41  xt *pCtx, int iA
3d30: 72 67 29 7b 0a 20 20 56 64 62 65 46 75 6e 63 20  rg){.  VdbeFunc 
3d40: 2a 70 56 64 62 65 46 75 6e 63 3b 0a 0a 20 20 61  *pVdbeFunc;..  a
3d50: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
3d60: 75 74 65 78 5f 68 65 6c 64 28 70 43 74 78 2d 3e  utex_held(pCtx->
3d70: 73 2e 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  s.db->mutex) );.
3d80: 20 20 70 56 64 62 65 46 75 6e 63 20 3d 20 70 43    pVdbeFunc = pC
3d90: 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 3b 0a 20  tx->pVdbeFunc;. 
3da0: 20 69 66 28 20 21 70 56 64 62 65 46 75 6e 63 20   if( !pVdbeFunc 
3db0: 7c 7c 20 69 41 72 67 3e 3d 70 56 64 62 65 46 75  || iArg>=pVdbeFu
3dc0: 6e 63 2d 3e 6e 41 75 78 20 7c 7c 20 69 41 72 67  nc->nAux || iArg
3dd0: 3c 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  <0 ){.    return
3de0: 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   0;.  }.  return
3df0: 20 70 56 64 62 65 46 75 6e 63 2d 3e 61 70 41 75   pVdbeFunc->apAu
3e00: 78 5b 69 41 72 67 5d 2e 70 41 75 78 3b 0a 7d 0a  x[iArg].pAux;.}.
3e10: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 61  ./*.** Set the a
3e20: 75 78 69 6c 61 72 79 20 64 61 74 61 20 70 6f 69  uxilary data poi
3e30: 6e 74 65 72 20 61 6e 64 20 64 65 6c 65 74 65 20  nter and delete 
3e40: 66 75 6e 63 74 69 6f 6e 2c 20 66 6f 72 20 74 68  function, for th
3e50: 65 20 69 41 72 67 27 74 68 0a 2a 2a 20 61 72 67  e iArg'th.** arg
3e60: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 75 73 65  ument to the use
3e70: 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r-function defin
3e80: 65 64 20 62 79 20 70 43 74 78 2e 20 41 6e 79 20  ed by pCtx. Any 
3e90: 70 72 65 76 69 6f 75 73 20 76 61 6c 75 65 20 69  previous value i
3ea0: 73 0a 2a 2a 20 64 65 6c 65 74 65 64 20 62 79 20  s.** deleted by 
3eb0: 63 61 6c 6c 69 6e 67 20 74 68 65 20 64 65 6c 65  calling the dele
3ec0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  te function spec
3ed0: 69 66 69 65 64 20 77 68 65 6e 20 69 74 20 77 61  ified when it wa
3ee0: 73 20 73 65 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  s set..*/.void s
3ef0: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
3f00: 74 61 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ta(.  sqlite3_co
3f10: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20  ntext *pCtx, .  
3f20: 69 6e 74 20 69 41 72 67 2c 20 0a 20 20 76 6f 69  int iArg, .  voi
3f30: 64 20 2a 70 41 75 78 2c 20 0a 20 20 76 6f 69 64  d *pAux, .  void
3f40: 20 28 2a 78 44 65 6c 65 74 65 29 28 76 6f 69 64   (*xDelete)(void
3f50: 2a 29 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 41  *).){.  struct A
3f60: 75 78 44 61 74 61 20 2a 70 41 75 78 44 61 74 61  uxData *pAuxData
3f70: 3b 0a 20 20 56 64 62 65 46 75 6e 63 20 2a 70 56  ;.  VdbeFunc *pV
3f80: 64 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 69  dbeFunc;.  if( i
3f90: 41 72 67 3c 30 20 29 20 67 6f 74 6f 20 66 61 69  Arg<0 ) goto fai
3fa0: 6c 65 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  led;..  assert( 
3fb0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
3fc0: 6c 64 28 70 43 74 78 2d 3e 73 2e 64 62 2d 3e 6d  ld(pCtx->s.db->m
3fd0: 75 74 65 78 29 20 29 3b 0a 20 20 70 56 64 62 65  utex) );.  pVdbe
3fe0: 46 75 6e 63 20 3d 20 70 43 74 78 2d 3e 70 56 64  Func = pCtx->pVd
3ff0: 62 65 46 75 6e 63 3b 0a 20 20 69 66 28 20 21 70  beFunc;.  if( !p
4000: 56 64 62 65 46 75 6e 63 20 7c 7c 20 70 56 64 62  VdbeFunc || pVdb
4010: 65 46 75 6e 63 2d 3e 6e 41 75 78 3c 3d 69 41 72  eFunc->nAux<=iAr
4020: 67 20 29 7b 0a 20 20 20 20 69 6e 74 20 6e 41 75  g ){.    int nAu
4030: 78 20 3d 20 28 70 56 64 62 65 46 75 6e 63 20 3f  x = (pVdbeFunc ?
4040: 20 70 56 64 62 65 46 75 6e 63 2d 3e 6e 41 75 78   pVdbeFunc->nAux
4050: 20 3a 20 30 29 3b 0a 20 20 20 20 69 6e 74 20 6e   : 0);.    int n
4060: 4d 61 6c 6c 6f 63 20 3d 20 73 69 7a 65 6f 66 28  Malloc = sizeof(
4070: 56 64 62 65 46 75 6e 63 29 20 2b 20 73 69 7a 65  VdbeFunc) + size
4080: 6f 66 28 73 74 72 75 63 74 20 41 75 78 44 61 74  of(struct AuxDat
4090: 61 29 2a 69 41 72 67 3b 0a 20 20 20 20 70 56 64  a)*iArg;.    pVd
40a0: 62 65 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33  beFunc = sqlite3
40b0: 44 62 52 65 61 6c 6c 6f 63 28 70 43 74 78 2d 3e  DbRealloc(pCtx->
40c0: 73 2e 64 62 2c 20 70 56 64 62 65 46 75 6e 63 2c  s.db, pVdbeFunc,
40d0: 20 6e 4d 61 6c 6c 6f 63 29 3b 0a 20 20 20 20 69   nMalloc);.    i
40e0: 66 28 20 21 70 56 64 62 65 46 75 6e 63 20 29 7b  f( !pVdbeFunc ){
40f0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 66 61 69 6c  .      goto fail
4100: 65 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43  ed;.    }.    pC
4110: 74 78 2d 3e 70 56 64 62 65 46 75 6e 63 20 3d 20  tx->pVdbeFunc = 
4120: 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 6d  pVdbeFunc;.    m
4130: 65 6d 73 65 74 28 26 70 56 64 62 65 46 75 6e 63  emset(&pVdbeFunc
4140: 2d 3e 61 70 41 75 78 5b 6e 41 75 78 5d 2c 20 30  ->apAux[nAux], 0
4150: 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20  , sizeof(struct 
4160: 41 75 78 44 61 74 61 29 2a 28 69 41 72 67 2b 31  AuxData)*(iArg+1
4170: 2d 6e 41 75 78 29 29 3b 0a 20 20 20 20 70 56 64  -nAux));.    pVd
4180: 62 65 46 75 6e 63 2d 3e 6e 41 75 78 20 3d 20 69  beFunc->nAux = i
4190: 41 72 67 2b 31 3b 0a 20 20 20 20 70 56 64 62 65  Arg+1;.    pVdbe
41a0: 46 75 6e 63 2d 3e 70 46 75 6e 63 20 3d 20 70 43  Func->pFunc = pC
41b0: 74 78 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a  tx->pFunc;.  }..
41c0: 20 20 70 41 75 78 44 61 74 61 20 3d 20 26 70 56    pAuxData = &pV
41d0: 64 62 65 46 75 6e 63 2d 3e 61 70 41 75 78 5b 69  dbeFunc->apAux[i
41e0: 41 72 67 5d 3b 0a 20 20 69 66 28 20 70 41 75 78  Arg];.  if( pAux
41f0: 44 61 74 61 2d 3e 70 41 75 78 20 26 26 20 70 41  Data->pAux && pA
4200: 75 78 44 61 74 61 2d 3e 78 44 65 6c 65 74 65 20  uxData->xDelete 
4210: 29 7b 0a 20 20 20 20 70 41 75 78 44 61 74 61 2d  ){.    pAuxData-
4220: 3e 78 44 65 6c 65 74 65 28 70 41 75 78 44 61 74  >xDelete(pAuxDat
4230: 61 2d 3e 70 41 75 78 29 3b 0a 20 20 7d 0a 20 20  a->pAux);.  }.  
4240: 70 41 75 78 44 61 74 61 2d 3e 70 41 75 78 20 3d  pAuxData->pAux =
4250: 20 70 41 75 78 3b 0a 20 20 70 41 75 78 44 61 74   pAux;.  pAuxDat
4260: 61 2d 3e 78 44 65 6c 65 74 65 20 3d 20 78 44 65  a->xDelete = xDe
4270: 6c 65 74 65 3b 0a 20 20 72 65 74 75 72 6e 3b 0a  lete;.  return;.
4280: 0a 66 61 69 6c 65 64 3a 0a 20 20 69 66 28 20 78  .failed:.  if( x
4290: 44 65 6c 65 74 65 20 29 7b 0a 20 20 20 20 78 44  Delete ){.    xD
42a0: 65 6c 65 74 65 28 70 41 75 78 29 3b 0a 20 20 7d  elete(pAux);.  }
42b0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
42c0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
42d0: 45 44 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ED./*.** Return 
42e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 69  the number of ti
42f0: 6d 65 73 20 74 68 65 20 53 74 65 70 20 66 75 6e  mes the Step fun
4300: 63 74 69 6f 6e 20 6f 66 20 61 20 61 67 67 72 65  ction of a aggre
4310: 67 61 74 65 20 68 61 73 20 62 65 65 6e 20 0a 2a  gate has been .*
4320: 2a 20 63 61 6c 6c 65 64 2e 0a 2a 2a 0a 2a 2a 20  * called..**.** 
4330: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
4340: 20 64 65 70 72 65 63 61 74 65 64 2e 20 20 44 6f   deprecated.  Do
4350: 20 6e 6f 74 20 75 73 65 20 69 74 20 66 6f 72 20   not use it for 
4360: 6e 65 77 20 63 6f 64 65 2e 20 20 49 74 20 69 73  new code.  It is
4370: 0a 2a 2a 20 70 72 6f 76 69 64 65 20 6f 6e 6c 79  .** provide only
4380: 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b 69   to avoid breaki
4390: 6e 67 20 6c 65 67 61 63 79 20 63 6f 64 65 2e 20  ng legacy code. 
43a0: 20 4e 65 77 20 61 67 67 72 65 67 61 74 65 20 66   New aggregate f
43b0: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69 6d 70 6c 65  unction.** imple
43c0: 6d 65 6e 74 61 74 69 6f 6e 73 20 73 68 6f 75 6c  mentations shoul
43d0: 64 20 6b 65 65 70 20 74 68 65 69 72 20 6f 77 6e  d keep their own
43e0: 20 63 6f 75 6e 74 73 20 77 69 74 68 69 6e 20 74   counts within t
43f0: 68 65 69 72 20 61 67 67 72 65 67 61 74 65 0a 2a  heir aggregate.*
4400: 2a 20 63 6f 6e 74 65 78 74 2e 0a 2a 2f 0a 69 6e  * context..*/.in
4410: 74 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  t sqlite3_aggreg
4420: 61 74 65 5f 63 6f 75 6e 74 28 73 71 6c 69 74 65  ate_count(sqlite
4430: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  3_context *p){. 
4440: 20 61 73 73 65 72 74 28 20 70 20 26 26 20 70 2d   assert( p && p-
4450: 3e 70 4d 65 6d 20 26 26 20 70 2d 3e 70 46 75 6e  >pMem && p->pFun
4460: 63 20 26 26 20 70 2d 3e 70 46 75 6e 63 2d 3e 78  c && p->pFunc->x
4470: 53 74 65 70 20 29 3b 0a 20 20 72 65 74 75 72 6e  Step );.  return
4480: 20 70 2d 3e 70 4d 65 6d 2d 3e 6e 3b 0a 7d 0a 23   p->pMem->n;.}.#
4490: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
44a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
44b0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
44c0: 20 72 65 73 75 6c 74 20 73 65 74 20 66 6f 72 20   result set for 
44d0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 70 53  the statement pS
44e0: 74 6d 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  tmt..*/.int sqli
44f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
4500: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
4510: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
4520: 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  Vm = (Vdbe *)pSt
4530: 6d 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 56 6d  mt;.  return pVm
4540: 20 3f 20 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75   ? pVm->nResColu
4550: 6d 6e 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  mn : 0;.}../*.**
4560: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
4570: 65 72 20 6f 66 20 76 61 6c 75 65 73 20 61 76 61  er of values ava
4580: 69 6c 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20  ilable from the 
4590: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 74  current row of t
45a0: 68 65 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  he.** currently 
45b0: 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
45c0: 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 69 6e  ent pStmt..*/.in
45d0: 74 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  t sqlite3_data_c
45e0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  ount(sqlite3_stm
45f0: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 56 64 62  t *pStmt){.  Vdb
4600: 65 20 2a 70 56 6d 20 3d 20 28 56 64 62 65 20 2a  e *pVm = (Vdbe *
4610: 29 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 70 56  )pStmt;.  if( pV
4620: 6d 3d 3d 30 20 7c 7c 20 70 56 6d 2d 3e 70 52 65  m==0 || pVm->pRe
4630: 73 75 6c 74 53 65 74 3d 3d 30 20 29 20 72 65 74  sultSet==0 ) ret
4640: 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  urn 0;.  return 
4650: 70 56 6d 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3b  pVm->nResColumn;
4660: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  .}.../*.** Check
4670: 20 74 6f 20 73 65 65 20 69 66 20 63 6f 6c 75 6d   to see if colum
4680: 6e 20 69 43 6f 6c 20 6f 66 20 74 68 65 20 67 69  n iCol of the gi
4690: 76 65 6e 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ven statement is
46a0: 20 76 61 6c 69 64 2e 20 20 49 66 0a 2a 2a 20 69   valid.  If.** i
46b0: 74 20 69 73 2c 20 72 65 74 75 72 6e 20 61 20 70  t is, return a p
46c0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 4d 65  ointer to the Me
46d0: 6d 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65 20  m for the value 
46e0: 6f 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  of that column..
46f0: 2a 2a 20 49 66 20 69 43 6f 6c 20 69 73 20 6e 6f  ** If iCol is no
4700: 74 20 76 61 6c 69 64 2c 20 72 65 74 75 72 6e 20  t valid, return 
4710: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
4720: 65 6d 20 77 68 69 63 68 20 68 61 73 20 61 20 76  em which has a v
4730: 61 6c 75 65 0a 2a 2a 20 6f 66 20 4e 55 4c 4c 2e  alue.** of NULL.
4740: 0a 2a 2f 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a  .*/.static Mem *
4750: 63 6f 6c 75 6d 6e 4d 65 6d 28 73 71 6c 69 74 65  columnMem(sqlite
4760: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69  3_stmt *pStmt, i
4770: 6e 74 20 69 29 7b 0a 20 20 56 64 62 65 20 2a 70  nt i){.  Vdbe *p
4780: 56 6d 3b 0a 20 20 69 6e 74 20 76 61 6c 73 3b 0a  Vm;.  int vals;.
4790: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 0a 20 20    Mem *pOut;..  
47a0: 70 56 6d 20 3d 20 28 56 64 62 65 20 2a 29 70 53  pVm = (Vdbe *)pS
47b0: 74 6d 74 3b 0a 20 20 69 66 28 20 70 56 6d 20 26  tmt;.  if( pVm &
47c0: 26 20 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65  & pVm->pResultSe
47d0: 74 21 3d 30 20 26 26 20 69 3c 70 56 6d 2d 3e 6e  t!=0 && i<pVm->n
47e0: 52 65 73 43 6f 6c 75 6d 6e 20 26 26 20 69 3e 3d  ResColumn && i>=
47f0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
4800: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 56 6d  _mutex_enter(pVm
4810: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
4820: 20 20 76 61 6c 73 20 3d 20 73 71 6c 69 74 65 33    vals = sqlite3
4830: 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d  _data_count(pStm
4840: 74 29 3b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26  t);.    pOut = &
4850: 70 56 6d 2d 3e 70 52 65 73 75 6c 74 53 65 74 5b  pVm->pResultSet[
4860: 69 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  i];.  }else{.   
4870: 20 2f 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65   /* If the value
4880: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 73   passed as the s
4890: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 69  econd argument i
48a0: 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c 20  s out of range, 
48b0: 72 65 74 75 72 6e 0a 20 20 20 20 2a 2a 20 61 20  return.    ** a 
48c0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
48d0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 69 63 20  ollowing static 
48e0: 4d 65 6d 20 6f 62 6a 65 63 74 20 77 68 69 63 68  Mem object which
48f0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 20 20   contains the.  
4900: 20 20 2a 2a 20 76 61 6c 75 65 20 53 51 4c 20 4e    ** value SQL N
4910: 55 4c 4c 2e 20 45 76 65 6e 20 74 68 6f 75 67 68  ULL. Even though
4920: 20 74 68 65 20 4d 65 6d 20 73 74 72 75 63 74 75   the Mem structu
4930: 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  re contains an e
4940: 6c 65 6d 65 6e 74 0a 20 20 20 20 2a 2a 20 6f 66  lement.    ** of
4950: 20 74 79 70 65 20 69 36 34 2c 20 6f 6e 20 63 65   type i64, on ce
4960: 72 74 61 69 6e 20 61 72 63 68 69 74 65 63 74 75  rtain architectu
4970: 72 65 20 28 78 38 36 29 20 77 69 74 68 20 63 65  re (x86) with ce
4980: 72 74 61 69 6e 20 63 6f 6d 70 69 6c 65 72 0a 20  rtain compiler. 
4990: 20 20 20 2a 2a 20 73 77 69 74 63 68 65 73 20 28     ** switches (
49a0: 2d 4f 73 29 2c 20 67 63 63 20 6d 61 79 20 61 6c  -Os), gcc may al
49b0: 69 67 6e 20 74 68 69 73 20 4d 65 6d 20 6f 62 6a  ign this Mem obj
49c0: 65 63 74 20 6f 6e 20 61 20 34 2d 62 79 74 65 20  ect on a 4-byte 
49d0: 62 6f 75 6e 64 61 72 79 0a 20 20 20 20 2a 2a 20  boundary.    ** 
49e0: 69 6e 73 74 65 61 64 20 6f 66 20 61 6e 20 38 2d  instead of an 8-
49f0: 62 79 74 65 20 6f 6e 65 2e 20 54 68 69 73 20 61  byte one. This a
4a00: 6c 6c 20 77 6f 72 6b 73 20 66 69 6e 65 2c 20 65  ll works fine, e
4a10: 78 63 65 70 74 20 74 68 61 74 20 77 68 65 6e 0a  xcept that when.
4a20: 20 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67 20 77      ** running w
4a30: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47  ith SQLITE_DEBUG
4a40: 20 64 65 66 69 6e 65 64 20 74 68 65 20 53 51 4c   defined the SQL
4a50: 69 74 65 20 63 6f 64 65 20 73 6f 6d 65 74 69 6d  ite code sometim
4a60: 65 73 20 61 73 73 65 72 74 28 29 73 0a 20 20 20  es assert()s.   
4a70: 20 2a 2a 20 74 68 61 74 20 61 20 4d 65 6d 20 73   ** that a Mem s
4a80: 74 72 75 63 74 75 72 65 20 69 73 20 6c 6f 63 61  tructure is loca
4a90: 74 65 64 20 6f 6e 20 61 6e 20 38 2d 62 79 74 65  ted on an 8-byte
4aa0: 20 62 6f 75 6e 64 61 72 79 2e 20 54 6f 20 70 72   boundary. To pr
4ab0: 65 76 65 6e 74 0a 20 20 20 20 2a 2a 20 74 68 69  event.    ** thi
4ac0: 73 20 61 73 73 65 72 74 28 29 20 66 72 6f 6d 20  s assert() from 
4ad0: 66 61 69 6c 69 6e 67 2c 20 77 68 65 6e 20 62 75  failing, when bu
4ae0: 69 6c 64 69 6e 67 20 77 69 74 68 20 53 51 4c 49  ilding with SQLI
4af0: 54 45 5f 44 45 42 55 47 20 64 65 66 69 6e 65 64  TE_DEBUG defined
4b00: 0a 20 20 20 20 2a 2a 20 75 73 69 6e 67 20 67 63  .    ** using gc
4b10: 63 2c 20 66 6f 72 63 65 20 6e 75 6c 6c 4d 65 6d  c, force nullMem
4b20: 20 74 6f 20 62 65 20 38 2d 62 79 74 65 20 61 6c   to be 8-byte al
4b30: 69 67 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  igned using the 
4b40: 6d 61 67 69 63 61 6c 0a 20 20 20 20 2a 2a 20 5f  magical.    ** _
4b50: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 61 6c  _attribute__((al
4b60: 69 67 6e 65 64 28 38 29 29 29 20 6d 61 63 72 6f  igned(8))) macro
4b70: 2e 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63  .  */.    static
4b80: 20 63 6f 6e 73 74 20 4d 65 6d 20 6e 75 6c 6c 4d   const Mem nullM
4b90: 65 6d 20 0a 23 69 66 20 64 65 66 69 6e 65 64 28  em .#if defined(
4ba0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
4bb0: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f   defined(__GNUC_
4bc0: 5f 29 0a 20 20 20 20 20 20 5f 5f 61 74 74 72 69  _).      __attri
4bd0: 62 75 74 65 5f 5f 28 28 61 6c 69 67 6e 65 64 28  bute__((aligned(
4be0: 38 29 29 29 20 0a 23 65 6e 64 69 66 0a 20 20 20  8))) .#endif.   
4bf0: 20 20 20 3d 20 7b 7b 30 7d 2c 20 28 64 6f 75 62     = {{0}, (doub
4c00: 6c 65 29 30 2c 20 30 2c 20 22 22 2c 20 30 2c 20  le)0, 0, "", 0, 
4c10: 4d 45 4d 5f 4e 75 6c 6c 2c 20 53 51 4c 49 54 45  MEM_Null, SQLITE
4c20: 5f 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20 30 20 7d  _NULL, 0, 0, 0 }
4c30: 3b 0a 0a 20 20 20 20 69 66 28 20 70 56 6d 20 26  ;..    if( pVm &
4c40: 26 20 41 4c 57 41 59 53 28 70 56 6d 2d 3e 64 62  & ALWAYS(pVm->db
4c50: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4c60: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
4c70: 56 6d 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  Vm->db->mutex);.
4c80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
4c90: 6f 72 28 70 56 6d 2d 3e 64 62 2c 20 53 51 4c 49  or(pVm->db, SQLI
4ca0: 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a 20 20  TE_RANGE, 0);.  
4cb0: 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20 28    }.    pOut = (
4cc0: 4d 65 6d 2a 29 26 6e 75 6c 6c 4d 65 6d 3b 0a 20  Mem*)&nullMem;. 
4cd0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74   }.  return pOut
4ce0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
4cf0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
4d00: 65 64 20 61 66 74 65 72 20 69 6e 76 6f 6b 69 6e  ed after invokin
4d10: 67 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  g an sqlite3_val
4d20: 75 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  ue_XXX function 
4d30: 6f 6e 20 61 20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  on a .** column 
4d40: 76 61 6c 75 65 20 28 69 2e 65 2e 20 61 20 76 61  value (i.e. a va
4d50: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
4d60: 65 76 61 6c 75 61 74 69 6e 67 20 61 6e 20 53 51  evaluating an SQ
4d70: 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  L expression in 
4d80: 74 68 65 0a 2a 2a 20 73 65 6c 65 63 74 20 6c 69  the.** select li
4d90: 73 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  st of a SELECT s
4da0: 74 61 74 65 6d 65 6e 74 29 20 74 68 61 74 20 6d  tatement) that m
4db0: 61 79 20 63 61 75 73 65 20 61 20 6d 61 6c 6c 6f  ay cause a mallo
4dc0: 63 28 29 20 66 61 69 6c 75 72 65 2e 20 49 66 20  c() failure. If 
4dd0: 0a 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  .** malloc() has
4de0: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 74 68 72   failed, the thr
4df0: 65 61 64 73 20 6d 61 6c 6c 6f 63 46 61 69 6c 65  eads mallocFaile
4e00: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
4e10: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
4e20: 0a 2a 2a 20 63 6f 64 65 20 6f 66 20 73 74 61 74  .** code of stat
4e30: 65 6d 65 6e 74 20 70 53 74 6d 74 20 73 65 74 20  ement pStmt set 
4e40: 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  to SQLITE_NOMEM.
4e50: 0a 2a 2a 0a 2a 2a 20 53 70 65 63 69 66 69 63 61  .**.** Specifica
4e60: 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 63 61 6c  lly, this is cal
4e70: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 3a  led from within:
4e80: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 73 71 6c 69 74  .**.**     sqlit
4e90: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 29 0a  e3_column_int().
4ea0: 2a 2a 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63  **     sqlite3_c
4eb0: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 29 0a 2a 2a  olumn_int64().**
4ec0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c       sqlite3_col
4ed0: 75 6d 6e 5f 74 65 78 74 28 29 0a 2a 2a 20 20 20  umn_text().**   
4ee0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
4ef0: 5f 74 65 78 74 31 36 28 29 0a 2a 2a 20 20 20 20  _text16().**    
4f00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4f10: 72 65 61 6c 28 29 0a 2a 2a 20 20 20 20 20 73 71  real().**     sq
4f20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
4f30: 65 73 28 29 0a 2a 2a 20 20 20 20 20 73 71 6c 69  es().**     sqli
4f40: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
4f50: 31 36 28 29 0a 2a 2a 0a 2a 2a 20 42 75 74 20 6e  16().**.** But n
4f60: 6f 74 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63  ot for sqlite3_c
4f70: 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 29 2c 20 77 68  olumn_blob(), wh
4f80: 69 63 68 20 6e 65 76 65 72 20 63 61 6c 6c 73 20  ich never calls 
4f90: 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 73 74 61  malloc()..*/.sta
4fa0: 74 69 63 20 76 6f 69 64 20 63 6f 6c 75 6d 6e 4d  tic void columnM
4fb0: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 73 71 6c  allocFailure(sql
4fc0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
4fd0: 29 0a 7b 0a 20 20 2f 2a 20 49 66 20 6d 61 6c 6c  ).{.  /* If mall
4fe0: 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69  oc() failed duri
4ff0: 6e 67 20 61 6e 20 65 6e 63 6f 64 69 6e 67 20 63  ng an encoding c
5000: 6f 6e 76 65 72 73 69 6f 6e 20 77 69 74 68 69 6e  onversion within
5010: 20 61 6e 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   an.  ** sqlite3
5020: 5f 63 6f 6c 75 6d 6e 5f 58 58 58 20 41 50 49 2c  _column_XXX API,
5030: 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 72 65   then set the re
5040: 74 75 72 6e 20 63 6f 64 65 20 6f 66 20 74 68 65  turn code of the
5050: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20   statement to.  
5060: 2a 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2e  ** SQLITE_NOMEM.
5070: 20 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   The next call t
5080: 6f 20 5f 73 74 65 70 28 29 20 28 69 66 20 61 6e  o _step() (if an
5090: 79 29 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 53  y) will return S
50a0: 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 2a 2a  QLITE_ERROR.  **
50b0: 20 61 6e 64 20 5f 66 69 6e 61 6c 69 7a 65 28 29   and _finalize()
50c0: 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 4e 4f 4d   will return NOM
50d0: 45 4d 2e 0a 20 20 2a 2f 0a 20 20 56 64 62 65 20  EM..  */.  Vdbe 
50e0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74  *p = (Vdbe *)pSt
50f0: 6d 74 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20  mt;.  if( p ){. 
5100: 20 20 20 70 2d 3e 72 63 20 3d 20 73 71 6c 69 74     p->rc = sqlit
5110: 65 33 41 70 69 45 78 69 74 28 70 2d 3e 64 62 2c  e3ApiExit(p->db,
5120: 20 70 2d 3e 72 63 29 3b 0a 20 20 20 20 73 71 6c   p->rc);.    sql
5130: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
5140: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
5150: 20 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a    }.}../********
5160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5170: 2a 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  **** sqlite3_col
5180: 75 6d 6e 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  umn_  **********
5190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
51a0: 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  *****.** The fol
51b0: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 73 20  lowing routines 
51c0: 61 72 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  are used to acce
51d0: 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 74  ss elements of t
51e0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 0a 2a  he current row.*
51f0: 2a 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  * in the result 
5200: 73 65 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f  set..*/.const vo
5210: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id *sqlite3_colu
5220: 6d 6e 5f 62 6c 6f 62 28 73 71 6c 69 74 65 33 5f  mn_blob(sqlite3_
5230: 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74  stmt *pStmt, int
5240: 20 69 29 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i){.  const voi
5250: 64 20 2a 76 61 6c 3b 0a 20 20 76 61 6c 20 3d 20  d *val;.  val = 
5260: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c  sqlite3_value_bl
5270: 6f 62 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  ob( columnMem(pS
5280: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 2f 2a 20 45  tmt,i) );.  /* E
5290: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65  ven though there
52a0: 20 69 73 20 6e 6f 20 65 6e 63 6f 64 69 6e 67 20   is no encoding 
52b0: 63 6f 6e 76 65 72 73 69 6f 6e 2c 20 76 61 6c 75  conversion, valu
52c0: 65 5f 62 6c 6f 62 28 29 20 6d 69 67 68 74 0a 20  e_blob() might. 
52d0: 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c   ** need to call
52e0: 20 6d 61 6c 6c 6f 63 28 29 20 74 6f 20 65 78 70   malloc() to exp
52f0: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 6f  and the result o
5300: 66 20 61 20 7a 65 72 6f 62 6c 6f 62 28 29 20 0a  f a zeroblob() .
5310: 20 20 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e    ** expression.
5320: 20 0a 20 20 2a 2f 0a 20 20 63 6f 6c 75 6d 6e 4d   .  */.  columnM
5330: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
5340: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76 61  mt);.  return va
5350: 6c 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  l;.}.int sqlite3
5360: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 71  _column_bytes(sq
5370: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5380: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
5390: 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76   val = sqlite3_v
53a0: 61 6c 75 65 5f 62 79 74 65 73 28 20 63 6f 6c 75  alue_bytes( colu
53b0: 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29  mnMem(pStmt,i) )
53c0: 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63  ;.  columnMalloc
53d0: 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a  Failure(pStmt);.
53e0: 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a    return val;.}.
53f0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  int sqlite3_colu
5400: 6d 6e 5f 62 79 74 65 73 31 36 28 73 71 6c 69 74  mn_bytes16(sqlit
5410: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5420: 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61  int i){.  int va
5430: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5440: 65 5f 62 79 74 65 73 31 36 28 20 63 6f 6c 75 6d  e_bytes16( colum
5450: 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b  nMem(pStmt,i) );
5460: 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46  .  columnMallocF
5470: 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20  ailure(pStmt);. 
5480: 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 64   return val;.}.d
5490: 6f 75 62 6c 65 20 73 71 6c 69 74 65 33 5f 63 6f  ouble sqlite3_co
54a0: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 71 6c 69  lumn_double(sqli
54b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
54c0: 20 69 6e 74 20 69 29 7b 0a 20 20 64 6f 75 62 6c   int i){.  doubl
54d0: 65 20 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  e val = sqlite3_
54e0: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 20 63 6f  value_double( co
54f0: 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29  lumnMem(pStmt,i)
5500: 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c   );.  columnMall
5510: 6f 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29  ocFailure(pStmt)
5520: 3b 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a  ;.  return val;.
5530: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  }.int sqlite3_co
5540: 6c 75 6d 6e 5f 69 6e 74 28 73 71 6c 69 74 65 33  lumn_int(sqlite3
5550: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
5560: 74 20 69 29 7b 0a 20 20 69 6e 74 20 76 61 6c 20  t i){.  int val 
5570: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
5580: 69 6e 74 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70  int( columnMem(p
5590: 53 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c  Stmt,i) );.  col
55a0: 75 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65  umnMallocFailure
55b0: 28 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72  (pStmt);.  retur
55c0: 6e 20 76 61 6c 3b 0a 7d 0a 73 71 6c 69 74 65 5f  n val;.}.sqlite_
55d0: 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 63 6f  int64 sqlite3_co
55e0: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 71 6c 69 74  lumn_int64(sqlit
55f0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20  e3_stmt *pStmt, 
5600: 69 6e 74 20 69 29 7b 0a 20 20 73 71 6c 69 74 65  int i){.  sqlite
5610: 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 73 71 6c  _int64 val = sql
5620: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
5630: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
5640: 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75 6d 6e  t,i) );.  column
5650: 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53  MallocFailure(pS
5660: 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 76  tmt);.  return v
5670: 61 6c 3b 0a 7d 0a 63 6f 6e 73 74 20 75 6e 73 69  al;.}.const unsi
5680: 67 6e 65 64 20 63 68 61 72 20 2a 73 71 6c 69 74  gned char *sqlit
5690: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
56a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
56b0: 6d 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 63 6f  mt, int i){.  co
56c0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
56d0: 72 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33  r *val = sqlite3
56e0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 20 63 6f 6c  _value_text( col
56f0: 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20  umnMem(pStmt,i) 
5700: 29 3b 0a 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f  );.  columnMallo
5710: 63 46 61 69 6c 75 72 65 28 70 53 74 6d 74 29 3b  cFailure(pStmt);
5720: 0a 20 20 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d  .  return val;.}
5730: 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
5740: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 76  sqlite3_column_v
5750: 61 6c 75 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  alue(sqlite3_stm
5760: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
5770: 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  {.  Mem *pOut = 
5780: 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d 74 2c  columnMem(pStmt,
5790: 20 69 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 2d   i);.  if( pOut-
57a0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 61 74 69  >flags&MEM_Stati
57b0: 63 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  c ){.    pOut->f
57c0: 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 53 74 61  lags &= ~MEM_Sta
57d0: 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  tic;.    pOut->f
57e0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68 65  lags |= MEM_Ephe
57f0: 6d 3b 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 4d  m;.  }.  columnM
5800: 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28 70 53 74  allocFailure(pSt
5810: 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 73  mt);.  return (s
5820: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 29 70  qlite3_value *)p
5830: 4f 75 74 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53  Out;.}.#ifndef S
5840: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
5850: 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
5860: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
5870: 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  16(sqlite3_stmt 
5880: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29 7b 0a  *pStmt, int i){.
5890: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61    const void *va
58a0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
58b0: 65 5f 74 65 78 74 31 36 28 20 63 6f 6c 75 6d 6e  e_text16( column
58c0: 4d 65 6d 28 70 53 74 6d 74 2c 69 29 20 29 3b 0a  Mem(pStmt,i) );.
58d0: 20 20 63 6f 6c 75 6d 6e 4d 61 6c 6c 6f 63 46 61    columnMallocFa
58e0: 69 6c 75 72 65 28 70 53 74 6d 74 29 3b 0a 20 20  ilure(pStmt);.  
58f0: 72 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 23 65  return val;.}.#e
5900: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
5910: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 69 6e 74  MIT_UTF16 */.int
5920: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5930: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  type(sqlite3_stm
5940: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 29  t *pStmt, int i)
5950: 7b 0a 20 20 69 6e 74 20 69 54 79 70 65 20 3d 20  {.  int iType = 
5960: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
5970: 70 65 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53  pe( columnMem(pS
5980: 74 6d 74 2c 69 29 20 29 3b 0a 20 20 63 6f 6c 75  tmt,i) );.  colu
5990: 6d 6e 4d 61 6c 6c 6f 63 46 61 69 6c 75 72 65 28  mnMallocFailure(
59a0: 70 53 74 6d 74 29 3b 0a 20 20 72 65 74 75 72 6e  pStmt);.  return
59b0: 20 69 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 20 54 68   iType;.}../* Th
59c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63  e following func
59d0: 74 69 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65  tion is experime
59e0: 6e 74 61 6c 20 61 6e 64 20 73 75 62 6a 65 63 74  ntal and subject
59f0: 20 74 6f 20 63 68 61 6e 67 65 20 6f 72 0a 2a 2a   to change or.**
5a00: 20 72 65 6d 6f 76 61 6c 20 2a 2f 0a 2f 2a 69 6e   removal */./*in
5a10: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  t sqlite3_column
5a20: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
5a30: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5a40: 74 2c 20 69 6e 74 20 69 29 7b 0a 2a 2a 20 20 72  t, int i){.**  r
5a50: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61  eturn sqlite3_va
5a60: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
5a70: 28 20 63 6f 6c 75 6d 6e 4d 65 6d 28 70 53 74 6d  ( columnMem(pStm
5a80: 74 2c 69 29 20 29 3b 0a 2a 2a 7d 0a 2a 2f 0a 0a  t,i) );.**}.*/..
5a90: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
5aa0: 65 20 4e 2d 74 68 20 65 6c 65 6d 65 6e 74 20 6f  e N-th element o
5ab0: 66 20 70 53 74 6d 74 2d 3e 70 43 6f 6c 4e 61 6d  f pStmt->pColNam
5ac0: 65 5b 5d 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  e[] into a strin
5ad0: 67 20 75 73 69 6e 67 0a 2a 2a 20 78 46 75 6e 63  g using.** xFunc
5ae0: 28 29 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  () then return t
5af0: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  hat string.  If 
5b00: 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
5b10: 65 2c 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a  e, return 0..**.
5b20: 2a 2a 20 54 68 65 72 65 20 61 72 65 20 75 70 20  ** There are up 
5b30: 74 6f 20 35 20 6e 61 6d 65 73 20 66 6f 72 20 65  to 5 names for e
5b40: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 20 75 73 65  ach column.  use
5b50: 54 79 70 65 20 64 65 74 65 72 6d 69 6e 65 73 20  Type determines 
5b60: 77 68 69 63 68 0a 2a 2a 20 6e 61 6d 65 20 69 73  which.** name is
5b70: 20 72 65 74 75 72 6e 65 64 2e 20 20 48 65 72 65   returned.  Here
5b80: 20 61 72 65 20 74 68 65 20 6e 61 6d 65 73 3a 0a   are the names:.
5b90: 2a 2a 0a 2a 2a 20 20 20 20 30 20 20 20 20 20 20  **.**    0      
5ba0: 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  The column name 
5bb0: 61 73 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  as it should be 
5bc0: 64 69 73 70 6c 61 79 65 64 20 66 6f 72 20 6f 75  displayed for ou
5bd0: 74 70 75 74 0a 2a 2a 20 20 20 20 31 20 20 20 20  tput.**    1    
5be0: 20 20 54 68 65 20 64 61 74 61 74 79 70 65 20 6e    The datatype n
5bf0: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ame for the colu
5c00: 6d 6e 0a 2a 2a 20 20 20 20 32 20 20 20 20 20 20  mn.**    2      
5c10: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
5c20: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 74 68  database that th
5c30: 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  e column derives
5c40: 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 33 20 20 20   from.**    3   
5c50: 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74     The name of t
5c60: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  he table that th
5c70: 65 20 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73  e column derives
5c80: 20 66 72 6f 6d 0a 2a 2a 20 20 20 20 34 20 20 20   from.**    4   
5c90: 20 20 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74     The name of t
5ca0: 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  he table column 
5cb0: 74 68 61 74 20 74 68 65 20 72 65 73 75 6c 74 20  that the result 
5cc0: 63 6f 6c 75 6d 6e 20 64 65 72 69 76 65 73 20 66  column derives f
5cd0: 72 6f 6d 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  rom.**.** If the
5ce0: 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 61   result is not a
5cf0: 20 73 69 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 72   simple column r
5d00: 65 66 65 72 65 6e 63 65 20 28 69 66 20 69 74 20  eference (if it 
5d10: 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  is an expression
5d20: 0a 2a 2a 20 6f 72 20 61 20 63 6f 6e 73 74 61 6e  .** or a constan
5d30: 74 29 20 74 68 65 6e 20 75 73 65 54 79 70 65 73  t) then useTypes
5d40: 20 32 2c 20 33 2c 20 61 6e 64 20 34 20 72 65 74   2, 3, and 4 ret
5d50: 75 72 6e 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61  urn NULL..*/.sta
5d60: 74 69 63 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tic const void *
5d70: 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 73 71  columnName(.  sq
5d80: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
5d90: 74 2c 0a 20 20 69 6e 74 20 4e 2c 0a 20 20 63 6f  t,.  int N,.  co
5da0: 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
5db0: 63 29 28 4d 65 6d 2a 29 2c 0a 20 20 69 6e 74 20  c)(Mem*),.  int 
5dc0: 75 73 65 54 79 70 65 0a 29 7b 0a 20 20 63 6f 6e  useType.){.  con
5dd0: 73 74 20 76 6f 69 64 20 2a 72 65 74 20 3d 20 30  st void *ret = 0
5de0: 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ;.  Vdbe *p = (V
5df0: 64 62 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 69  dbe *)pStmt;.  i
5e00: 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 20  nt n;.  sqlite3 
5e10: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 0a  *db = p->db;.  .
5e20: 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30 20    assert( db!=0 
5e30: 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  );.  n = sqlite3
5e40: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
5e50: 74 6d 74 29 3b 0a 20 20 69 66 28 20 4e 3c 6e 20  tmt);.  if( N<n 
5e60: 26 26 20 4e 3e 3d 30 20 29 7b 0a 20 20 20 20 4e  && N>=0 ){.    N
5e70: 20 2b 3d 20 75 73 65 54 79 70 65 2a 6e 3b 0a 20   += useType*n;. 
5e80: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
5e90: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
5ea0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  );.    assert( d
5eb0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d  b->mallocFailed=
5ec0: 3d 30 20 29 3b 0a 20 20 20 20 72 65 74 20 3d 20  =0 );.    ret = 
5ed0: 78 46 75 6e 63 28 26 70 2d 3e 61 43 6f 6c 4e 61  xFunc(&p->aColNa
5ee0: 6d 65 5b 4e 5d 29 3b 0a 20 20 20 20 20 2f 2a 20  me[N]);.     /* 
5ef0: 41 20 6d 61 6c 6c 6f 63 20 6d 61 79 20 68 61 76  A malloc may hav
5f00: 65 20 66 61 69 6c 65 64 20 69 6e 73 69 64 65 20  e failed inside 
5f10: 6f 66 20 74 68 65 20 78 46 75 6e 63 28 29 20 63  of the xFunc() c
5f20: 61 6c 6c 2e 20 49 66 20 74 68 69 73 0a 20 20 20  all. If this.   
5f30: 20 2a 2a 20 69 73 20 74 68 65 20 63 61 73 65 2c   ** is the case,
5f40: 20 63 6c 65 61 72 20 74 68 65 20 6d 61 6c 6c 6f   clear the mallo
5f50: 63 46 61 69 6c 65 64 20 66 6c 61 67 20 61 6e 64  cFailed flag and
5f60: 20 72 65 74 75 72 6e 20 4e 55 4c 4c 2e 0a 20 20   return NULL..  
5f70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
5f80: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
5f90: 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
5fa0: 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 20  cFailed = 0;.   
5fb0: 20 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20 20     ret = 0;.    
5fc0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  }.    sqlite3_mu
5fd0: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
5fe0: 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tex);.  }.  retu
5ff0: 72 6e 20 72 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn ret;.}../*.**
6000: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
6010: 20 6f 66 20 74 68 65 20 4e 74 68 20 63 6f 6c 75   of the Nth colu
6020: 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
6030: 20 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79   set returned by
6040: 20 53 51 4c 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   SQL.** statemen
6050: 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63 6f 6e 73  t pStmt..*/.cons
6060: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6070: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 71 6c 69  column_name(sqli
6080: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
6090: 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65 74 75 72   int N){.  retur
60a0: 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20  n columnName(.  
60b0: 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63      pStmt, N, (c
60c0: 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65  onst void*(*)(Me
60d0: 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  m*))sqlite3_valu
60e0: 65 5f 74 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f  e_text, COLNAME_
60f0: 4e 41 4d 45 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  NAME);.}.#ifndef
6100: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6110: 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  16.const void *s
6120: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
6130: 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d  me16(sqlite3_stm
6140: 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29  t *pStmt, int N)
6150: 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d  {.  return colum
6160: 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74  nName(.      pSt
6170: 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f  mt, N, (const vo
6180: 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c  id*(*)(Mem*))sql
6190: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
61a0: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 29  6, COLNAME_NAME)
61b0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
61c0: 2a 20 43 6f 6e 73 74 72 61 69 6e 74 3a 20 20 49  * Constraint:  I
61d0: 66 20 79 6f 75 20 68 61 76 65 20 45 4e 41 42 4c  f you have ENABL
61e0: 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
61f0: 41 20 74 68 65 6e 20 79 6f 75 20 6d 75 73 74 0a  A then you must.
6200: 2a 2a 20 6e 6f 74 20 64 65 66 69 6e 65 20 4f 4d  ** not define OM
6210: 49 54 5f 44 45 43 4c 54 59 50 45 2e 0a 2a 2f 0a  IT_DECLTYPE..*/.
6220: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
6230: 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45  TE_OMIT_DECLTYPE
6240: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
6250: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
6260: 4e 5f 4d 45 54 41 44 41 54 41 29 0a 23 20 65 72  N_METADATA).# er
6270: 72 6f 72 20 22 4d 75 73 74 20 6e 6f 74 20 64 65  ror "Must not de
6280: 66 69 6e 65 20 62 6f 74 68 20 53 51 4c 49 54 45  fine both SQLITE
6290: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20 5c  _OMIT_DECLTYPE \
62a0: 0a 20 20 20 20 20 20 20 20 20 61 6e 64 20 53 51  .         and SQ
62b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
62c0: 4d 4e 5f 4d 45 54 41 44 41 54 41 22 0a 23 65 6e  MN_METADATA".#en
62d0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
62e0: 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
62f0: 45 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  E./*.** Return t
6300: 68 65 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72  he column declar
6310: 61 74 69 6f 6e 20 74 79 70 65 20 28 69 66 20 61  ation type (if a
6320: 70 70 6c 69 63 61 62 6c 65 29 20 6f 66 20 74 68  pplicable) of th
6330: 65 20 27 69 27 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e 'i'th column.*
6340: 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
6350: 73 65 74 20 6f 66 20 53 51 4c 20 73 74 61 74 65  set of SQL state
6360: 6d 65 6e 74 20 70 53 74 6d 74 2e 0a 2a 2f 0a 63  ment pStmt..*/.c
6370: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
6380: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
6390: 70 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  pe(sqlite3_stmt 
63a0: 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a  *pStmt, int N){.
63b0: 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e    return columnN
63c0: 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d 74  ame(.      pStmt
63d0: 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69 64  , N, (const void
63e0: 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69 74  *(*)(Mem*))sqlit
63f0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20 43  e3_value_text, C
6400: 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59 50 45 29  OLNAME_DECLTYPE)
6410: 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ;.}.#ifndef SQLI
6420: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f  TE_OMIT_UTF16.co
6430: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
6440: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
6450: 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  e16(sqlite3_stmt
6460: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
6470: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6480: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6490: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
64a0: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
64b0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
64c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 44 45 43 4c 54 59  , COLNAME_DECLTY
64d0: 50 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  PE);.}.#endif /*
64e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
64f0: 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  16 */.#endif /* 
6500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
6510: 54 59 50 45 20 2a 2f 0a 0a 23 69 66 64 65 66 20  TYPE */..#ifdef 
6520: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
6530: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 2f 2a  LUMN_METADATA./*
6540: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
6550: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
6560: 61 73 65 20 66 72 6f 6d 20 77 68 69 63 68 20 61  ase from which a
6570: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64   result column d
6580: 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20  erives..** NULL 
6590: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  is returned if t
65a0: 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
65b0: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
65c0: 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72  n or constant or
65d0: 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  .** anything els
65e0: 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20 61  e which is not a
65f0: 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65 66  n unabiguous ref
6600: 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74 61  erence to a data
6610: 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a  base column..*/.
6620: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
6630: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
6640: 61 73 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33  ase_name(sqlite3
6650: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e  _stmt *pStmt, in
6660: 74 20 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63  t N){.  return c
6670: 6f 6c 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20  olumnName(.     
6680: 20 70 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73   pStmt, N, (cons
6690: 74 20 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29  t void*(*)(Mem*)
66a0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
66b0: 65 78 74 2c 20 43 4f 4c 4e 41 4d 45 5f 44 41 54  ext, COLNAME_DAT
66c0: 41 42 41 53 45 29 3b 0a 7d 0a 23 69 66 6e 64 65  ABASE);.}.#ifnde
66d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
66e0: 46 31 36 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  F16.const void *
66f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
6700: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73  atabase_name16(s
6710: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
6720: 6d 74 2c 20 69 6e 74 20 4e 29 7b 0a 20 20 72 65  mt, int N){.  re
6730: 74 75 72 6e 20 63 6f 6c 75 6d 6e 4e 61 6d 65 28  turn columnName(
6740: 0a 20 20 20 20 20 20 70 53 74 6d 74 2c 20 4e 2c  .      pStmt, N,
6750: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 28 2a 29   (const void*(*)
6760: 28 4d 65 6d 2a 29 29 73 71 6c 69 74 65 33 5f 76  (Mem*))sqlite3_v
6770: 61 6c 75 65 5f 74 65 78 74 31 36 2c 20 43 4f 4c  alue_text16, COL
6780: 4e 41 4d 45 5f 44 41 54 41 42 41 53 45 29 3b 0a  NAME_DATABASE);.
6790: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
67a0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
67b0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
67c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
67d0: 61 62 6c 65 20 66 72 6f 6d 20 77 68 69 63 68 20  able from which 
67e0: 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  a result column 
67f0: 64 65 72 69 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c  derives..** NULL
6800: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
6810: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
6820: 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
6830: 6f 6e 20 6f 72 20 63 6f 6e 73 74 61 6e 74 20 6f  on or constant o
6840: 72 0a 2a 2a 20 61 6e 79 74 68 69 6e 67 20 65 6c  r.** anything el
6850: 73 65 20 77 68 69 63 68 20 69 73 20 6e 6f 74 20  se which is not 
6860: 61 6e 20 75 6e 61 62 69 67 75 6f 75 73 20 72 65  an unabiguous re
6870: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 64 61 74  ference to a dat
6880: 61 62 61 73 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f  abase column..*/
6890: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
68a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
68b0: 65 5f 6e 61 6d 65 28 73 71 6c 69 74 65 33 5f 73  e_name(sqlite3_s
68c0: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
68d0: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
68e0: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
68f0: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
6900: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
6910: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
6920: 74 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42 4c 45  t, COLNAME_TABLE
6930: 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  );.}.#ifndef SQL
6940: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63  ITE_OMIT_UTF16.c
6950: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
6960: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
6970: 6e 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73  name16(sqlite3_s
6980: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20  tmt *pStmt, int 
6990: 4e 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c  N){.  return col
69a0: 75 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70  umnName(.      p
69b0: 53 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20  Stmt, N, (const 
69c0: 76 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73  void*(*)(Mem*))s
69d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
69e0: 74 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 54 41 42  t16, COLNAME_TAB
69f0: 4c 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  LE);.}.#endif /*
6a00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6a10: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  16 */../*.** Ret
6a20: 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
6a30: 74 68 65 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  the table column
6a40: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 20 72 65   from which a re
6a50: 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 64 65 72 69  sult column deri
6a60: 76 65 73 2e 0a 2a 2a 20 4e 55 4c 4c 20 69 73 20  ves..** NULL is 
6a70: 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20  returned if the 
6a80: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 73  result column is
6a90: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
6aa0: 72 20 63 6f 6e 73 74 61 6e 74 20 6f 72 0a 2a 2a  r constant or.**
6ab0: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 20 77   anything else w
6ac0: 68 69 63 68 20 69 73 20 6e 6f 74 20 61 6e 20 75  hich is not an u
6ad0: 6e 61 62 69 67 75 6f 75 73 20 72 65 66 65 72 65  nabiguous refere
6ae0: 6e 63 65 20 74 6f 20 61 20 64 61 74 61 62 61 73  nce to a databas
6af0: 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2f 0a 63 6f 6e  e column..*/.con
6b00: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
6b10: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
6b20: 61 6d 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ame(sqlite3_stmt
6b30: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e 29 7b   *pStmt, int N){
6b40: 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75 6d 6e  .  return column
6b50: 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53 74 6d  Name(.      pStm
6b60: 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76 6f 69  t, N, (const voi
6b70: 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71 6c 69  d*(*)(Mem*))sqli
6b80: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 2c 20  te3_value_text, 
6b90: 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55 4d 4e 29 3b  COLNAME_COLUMN);
6ba0: 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  .}.#ifndef SQLIT
6bb0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 6f 6e  E_OMIT_UTF16.con
6bc0: 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
6bd0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
6be0: 61 6d 65 31 36 28 73 71 6c 69 74 65 33 5f 73 74  ame16(sqlite3_st
6bf0: 6d 74 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 4e  mt *pStmt, int N
6c00: 29 7b 0a 20 20 72 65 74 75 72 6e 20 63 6f 6c 75  ){.  return colu
6c10: 6d 6e 4e 61 6d 65 28 0a 20 20 20 20 20 20 70 53  mnName(.      pS
6c20: 74 6d 74 2c 20 4e 2c 20 28 63 6f 6e 73 74 20 76  tmt, N, (const v
6c30: 6f 69 64 2a 28 2a 29 28 4d 65 6d 2a 29 29 73 71  oid*(*)(Mem*))sq
6c40: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6c50: 31 36 2c 20 43 4f 4c 4e 41 4d 45 5f 43 4f 4c 55  16, COLNAME_COLU
6c60: 4d 4e 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  MN);.}.#endif /*
6c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6c80: 31 36 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  16 */.#endif /* 
6c90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
6ca0: 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 20 2a 2f  LUMN_METADATA */
6cb0: 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
6cc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6cd0: 2a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  *** sqlite3_bind
6ce0: 5f 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  _  *************
6cf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
6d00: 2a 20 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 75  * .** Routines u
6d10: 73 65 64 20 74 6f 20 61 74 74 61 63 68 20 76 61  sed to attach va
6d20: 6c 75 65 73 20 74 6f 20 77 69 6c 64 63 61 72 64  lues to wildcard
6d30: 73 20 69 6e 20 61 20 63 6f 6d 70 69 6c 65 64 20  s in a compiled 
6d40: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  SQL statement..*
6d50: 2f 0a 2f 2a 0a 2a 2a 20 55 6e 62 69 6e 64 20 74  /./*.** Unbind t
6d60: 68 65 20 76 61 6c 75 65 20 62 6f 75 6e 64 20 74  he value bound t
6d70: 6f 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20  o variable i in 
6d80: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6d90: 70 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 0a  p. This is the .
6da0: 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 62  ** the same as b
6db0: 69 6e 64 69 6e 67 20 61 20 4e 55 4c 4c 20 76 61  inding a NULL va
6dc0: 6c 75 65 20 74 6f 20 74 68 65 20 63 6f 6c 75 6d  lue to the colum
6dd0: 6e 2e 20 49 66 20 74 68 65 20 22 69 22 20 70 61  n. If the "i" pa
6de0: 72 61 6d 65 74 65 72 20 69 73 0a 2a 2a 20 6f 75  rameter is.** ou
6df0: 74 20 6f 66 20 72 61 6e 67 65 2c 20 74 68 65 6e  t of range, then
6e00: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 69 73   SQLITE_RANGE is
6e10: 20 72 65 74 75 72 6e 65 64 2e 20 4f 74 68 65 77   returned. Othew
6e20: 69 73 65 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a  ise SQLITE_OK..*
6e30: 2a 0a 2a 2a 20 41 20 73 75 63 63 65 73 73 66 75  *.** A successfu
6e40: 6c 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  l evaluation of 
6e50: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 61 63 71  this routine acq
6e60: 75 69 72 65 73 20 74 68 65 20 6d 75 74 65 78 20  uires the mutex 
6e70: 6f 6e 20 70 2e 0a 2a 2a 20 74 68 65 20 6d 75 74  on p..** the mut
6e80: 65 78 20 69 73 20 72 65 6c 65 61 73 65 64 20 69  ex is released i
6e90: 66 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 65 72  f any kind of er
6ea0: 72 6f 72 20 6f 63 63 75 72 73 2e 0a 2a 2a 0a 2a  ror occurs..**.*
6eb0: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
6ec0: 20 73 74 6f 72 65 64 20 69 6e 20 64 61 74 61 62   stored in datab
6ed0: 61 73 65 20 70 2d 3e 64 62 20 69 73 20 6f 76 65  ase p->db is ove
6ee0: 72 77 72 69 74 74 65 6e 20 77 69 74 68 20 74 68  rwritten with th
6ef0: 65 20 72 65 74 75 72 6e 0a 2a 2a 20 76 61 6c 75  e return.** valu
6f00: 65 20 69 6e 20 61 6e 79 20 63 61 73 65 2e 0a 2a  e in any case..*
6f10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 64 62  /.static int vdb
6f20: 65 55 6e 62 69 6e 64 28 56 64 62 65 20 2a 70 2c  eUnbind(Vdbe *p,
6f30: 20 69 6e 74 20 69 29 7b 0a 20 20 4d 65 6d 20 2a   int i){.  Mem *
6f40: 70 56 61 72 3b 0a 20 20 69 66 28 20 70 3d 3d 30  pVar;.  if( p==0
6f50: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
6f60: 5f 4d 49 53 55 53 45 3b 0a 20 20 73 71 6c 69 74  _MISUSE;.  sqlit
6f70: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
6f80: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
6f90: 69 66 28 20 70 2d 3e 6d 61 67 69 63 21 3d 56 44  if( p->magic!=VD
6fa0: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 7c 7c 20  BE_MAGIC_RUN || 
6fb0: 70 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20  p->pc>=0 ){.    
6fc0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d 3e  sqlite3Error(p->
6fd0: 64 62 2c 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  db, SQLITE_MISUS
6fe0: 45 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  E, 0);.    sqlit
6ff0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
7000: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
7010: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7020: 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66  MISUSE;.  }.  if
7030: 28 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56  ( i<1 || i>p->nV
7040: 61 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ar ){.    sqlite
7050: 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20 53 51  3Error(p->db, SQ
7060: 4c 49 54 45 5f 52 41 4e 47 45 2c 20 30 29 3b 0a  LITE_RANGE, 0);.
7070: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
7080: 78 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d  x_leave(p->db->m
7090: 75 74 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72  utex);.    retur
70a0: 6e 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3b 0a  n SQLITE_RANGE;.
70b0: 20 20 7d 0a 20 20 69 2d 2d 3b 0a 20 20 70 56 61    }.  i--;.  pVa
70c0: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 69 5d 3b  r = &p->aVar[i];
70d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
70e0: 6d 52 65 6c 65 61 73 65 28 70 56 61 72 29 3b 0a  mRelease(pVar);.
70f0: 20 20 70 56 61 72 2d 3e 66 6c 61 67 73 20 3d 20    pVar->flags = 
7100: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 73 71 6c 69  MEM_Null;.  sqli
7110: 74 65 33 45 72 72 6f 72 28 70 2d 3e 64 62 2c 20  te3Error(p->db, 
7120: 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 0a  SQLITE_OK, 0);..
7130: 20 20 2f 2a 20 49 66 20 74 68 65 20 62 69 74 20    /* If the bit 
7140: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
7150: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
7160: 6e 20 56 64 62 65 2e 65 78 70 6d 61 73 6b 20 69  n Vdbe.expmask i
7170: 73 20 73 65 74 2c 20 74 68 65 6e 20 0a 20 20 2a  s set, then .  *
7180: 2a 20 62 69 6e 64 69 6e 67 20 61 20 6e 65 77 20  * binding a new 
7190: 76 61 6c 75 65 20 74 6f 20 74 68 69 73 20 76 61  value to this va
71a0: 72 69 61 62 6c 65 20 69 6e 76 61 6c 69 64 61 74  riable invalidat
71b0: 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 71  es the current q
71c0: 75 65 72 79 20 70 6c 61 6e 2e 0a 20 20 2a 2f 0a  uery plan..  */.
71d0: 20 20 69 66 28 20 70 2d 3e 69 73 50 72 65 70 61    if( p->isPrepa
71e0: 72 65 56 32 20 26 26 0a 20 20 20 20 20 28 28 69  reV2 &&.     ((i
71f0: 3c 33 32 20 26 26 20 70 2d 3e 65 78 70 6d 61 73  <32 && p->expmas
7200: 6b 20 26 20 28 28 75 33 32 29 31 20 3c 3c 20 69  k & ((u32)1 << i
7210: 29 29 20 7c 7c 20 70 2d 3e 65 78 70 6d 61 73 6b  )) || p->expmask
7220: 3d 3d 30 78 66 66 66 66 66 66 66 66 29 0a 20 20  ==0xffffffff).  
7230: 29 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  ){.    p->expire
7240: 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  d = 1;.  }.  ret
7250: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
7260: 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20 61 20 74  ../*.** Bind a t
7270: 65 78 74 20 6f 72 20 42 4c 4f 42 20 76 61 6c 75  ext or BLOB valu
7280: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
7290: 20 62 69 6e 64 54 65 78 74 28 0a 20 20 73 71 6c   bindText(.  sql
72a0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
72b0: 2c 20 20 20 2f 2a 20 54 68 65 20 73 74 61 74 65  ,   /* The state
72c0: 6d 65 6e 74 20 74 6f 20 62 69 6e 64 20 61 67 61  ment to bind aga
72d0: 69 6e 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 2c  inst */.  int i,
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
7300: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 69   parameter to bi
7310: 6e 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f  nd */.  const vo
7320: 69 64 20 2a 7a 44 61 74 61 2c 20 20 20 20 20 2f  id *zData,     /
7330: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  * Pointer to the
7340: 20 64 61 74 61 20 74 6f 20 62 65 20 62 6f 75 6e   data to be boun
7350: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 61 74 61  d */.  int nData
7360: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ,             /*
7370: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
7380: 20 6f 66 20 64 61 74 61 20 74 6f 20 62 65 20 62   of data to be b
7390: 6f 75 6e 64 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ound */.  void (
73a0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 2c 20 20  *xDel)(void*),  
73b0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
73c0: 6f 72 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  or the data */. 
73d0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 20 20 20   u8 encoding    
73e0: 20 20 20 20 20 20 20 20 2f 2a 20 45 6e 63 6f 64          /* Encod
73f0: 69 6e 67 20 66 6f 72 20 74 68 65 20 64 61 74 61  ing for the data
7400: 20 2a 2f 0a 29 7b 0a 20 20 56 64 62 65 20 2a 70   */.){.  Vdbe *p
7410: 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d 74   = (Vdbe *)pStmt
7420: 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20  ;.  Mem *pVar;. 
7430: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d   int rc;..  rc =
7440: 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20 69   vdbeUnbind(p, i
7450: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7460: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
7470: 28 20 7a 44 61 74 61 21 3d 30 20 29 7b 0a 20 20  ( zData!=0 ){.  
7480: 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61      pVar = &p->a
7490: 56 61 72 5b 69 2d 31 5d 3b 0a 20 20 20 20 20 20  Var[i-1];.      
74a0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
74b0: 4d 65 6d 53 65 74 53 74 72 28 70 56 61 72 2c 20  MemSetStr(pVar, 
74c0: 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 65 6e  zData, nData, en
74d0: 63 6f 64 69 6e 67 2c 20 78 44 65 6c 29 3b 0a 20  coding, xDel);. 
74e0: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
74f0: 49 54 45 5f 4f 4b 20 26 26 20 65 6e 63 6f 64 69  ITE_OK && encodi
7500: 6e 67 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ng!=0 ){.       
7510: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
7520: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
7530: 70 56 61 72 2c 20 45 4e 43 28 70 2d 3e 64 62 29  pVar, ENC(p->db)
7540: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7550: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 70 2d   sqlite3Error(p-
7560: 3e 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20  >db, rc, 0);.   
7570: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41     rc = sqlite3A
7580: 70 69 45 78 69 74 28 70 2d 3e 64 62 2c 20 72 63  piExit(p->db, rc
7590: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
75a0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
75b0: 28 70 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  (p->db->mutex);.
75c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
75d0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 6e 64 20  .}.../*.** Bind 
75e0: 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 74 6f 20  a blob value to 
75f0: 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
7600: 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 69 6e   variable..*/.in
7610: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  t sqlite3_bind_b
7620: 6c 6f 62 28 0a 20 20 73 71 6c 69 74 65 33 5f 73  lob(.  sqlite3_s
7630: 74 6d 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69  tmt *pStmt, .  i
7640: 6e 74 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76  nt i, .  const v
7650: 6f 69 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69  oid *zData, .  i
7660: 6e 74 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69  nt nData, .  voi
7670: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
7680: 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e  .){.  return bin
7690: 64 54 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20  dText(pStmt, i, 
76a0: 7a 44 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44  zData, nData, xD
76b0: 65 6c 2c 20 30 29 3b 0a 7d 0a 69 6e 74 20 73 71  el, 0);.}.int sq
76c0: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
76d0: 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  e(sqlite3_stmt *
76e0: 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20 64 6f  pStmt, int i, do
76f0: 75 62 6c 65 20 72 56 61 6c 75 65 29 7b 0a 20 20  uble rValue){.  
7700: 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65 20 2a  int rc;.  Vdbe *
7710: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53 74 6d  p = (Vdbe *)pStm
7720: 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65 55 6e  t;.  rc = vdbeUn
7730: 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20 69 66  bind(p, i);.  if
7740: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7750: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
7760: 62 65 4d 65 6d 53 65 74 44 6f 75 62 6c 65 28 26  beMemSetDouble(&
7770: 70 2d 3e 61 56 61 72 5b 69 2d 31 5d 2c 20 72 56  p->aVar[i-1], rV
7780: 61 6c 75 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  alue);.    sqlit
7790: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
77a0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
77b0: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
77c0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e  .int sqlite3_bin
77d0: 64 5f 69 6e 74 28 73 71 6c 69 74 65 33 5f 73 74  d_int(sqlite3_st
77e0: 6d 74 20 2a 70 2c 20 69 6e 74 20 69 2c 20 69 6e  mt *p, int i, in
77f0: 74 20 69 56 61 6c 75 65 29 7b 0a 20 20 72 65 74  t iValue){.  ret
7800: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
7810: 5f 69 6e 74 36 34 28 70 2c 20 69 2c 20 28 69 36  _int64(p, i, (i6
7820: 34 29 69 56 61 6c 75 65 29 3b 0a 7d 0a 69 6e 74  4)iValue);.}.int
7830: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
7840: 74 36 34 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  t64(sqlite3_stmt
7850: 20 2a 70 53 74 6d 74 2c 20 69 6e 74 20 69 2c 20   *pStmt, int i, 
7860: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 56 61  sqlite_int64 iVa
7870: 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  lue){.  int rc;.
7880: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
7890: 65 20 2a 29 70 53 74 6d 74 3b 0a 20 20 72 63 20  e *)pStmt;.  rc 
78a0: 3d 20 76 64 62 65 55 6e 62 69 6e 64 28 70 2c 20  = vdbeUnbind(p, 
78b0: 69 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  i);.  if( rc==SQ
78c0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
78d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
78e0: 49 6e 74 36 34 28 26 70 2d 3e 61 56 61 72 5b 69  Int64(&p->aVar[i
78f0: 2d 31 5d 2c 20 69 56 61 6c 75 65 29 3b 0a 20 20  -1], iValue);.  
7900: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
7910: 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75 74  leave(p->db->mut
7920: 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ex);.  }.  retur
7930: 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  n rc;.}.int sqli
7940: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 73 71  te3_bind_null(sq
7950: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7960: 74 2c 20 69 6e 74 20 69 29 7b 0a 20 20 69 6e 74  t, int i){.  int
7970: 20 72 63 3b 0a 20 20 56 64 62 65 20 2a 70 20 3d   rc;.  Vdbe *p =
7980: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
7990: 20 72 63 20 3d 20 76 64 62 65 55 6e 62 69 6e 64   rc = vdbeUnbind
79a0: 28 70 2c 20 69 29 3b 0a 20 20 69 66 28 20 72 63  (p, i);.  if( rc
79b0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
79c0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
79d0: 5f 6c 65 61 76 65 28 70 2d 3e 64 62 2d 3e 6d 75  _leave(p->db->mu
79e0: 74 65 78 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  tex);.  }.  retu
79f0: 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c  rn rc;.}.int sql
7a00: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 20  ite3_bind_text( 
7a10: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
7a20: 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74 20 69  *pStmt, .  int i
7a30: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
7a40: 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74 20 6e  *zData, .  int n
7a50: 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20 28 2a  Data, .  void (*
7a60: 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  xDel)(void*).){.
7a70: 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54 65 78    return bindTex
7a80: 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44 61 74  t(pStmt, i, zDat
7a90: 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c 2c 20  a, nData, xDel, 
7aa0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 7d 0a  SQLITE_UTF8);.}.
7ab0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7ac0: 4d 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71  MIT_UTF16.int sq
7ad0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
7ae0: 36 28 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  6(.  sqlite3_stm
7af0: 74 20 2a 70 53 74 6d 74 2c 20 0a 20 20 69 6e 74  t *pStmt, .  int
7b00: 20 69 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   i, .  const voi
7b10: 64 20 2a 7a 44 61 74 61 2c 20 0a 20 20 69 6e 74  d *zData, .  int
7b20: 20 6e 44 61 74 61 2c 20 0a 20 20 76 6f 69 64 20   nData, .  void 
7b30: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29  (*xDel)(void*).)
7b40: 7b 0a 20 20 72 65 74 75 72 6e 20 62 69 6e 64 54  {.  return bindT
7b50: 65 78 74 28 70 53 74 6d 74 2c 20 69 2c 20 7a 44  ext(pStmt, i, zD
7b60: 61 74 61 2c 20 6e 44 61 74 61 2c 20 78 44 65 6c  ata, nData, xDel
7b70: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
7b80: 54 49 56 45 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  TIVE);.}.#endif 
7b90: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7ba0: 54 46 31 36 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  TF16 */.int sqli
7bb0: 74 65 33 5f 62 69 6e 64 5f 76 61 6c 75 65 28 73  te3_bind_value(s
7bc0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
7bd0: 6d 74 2c 20 69 6e 74 20 69 2c 20 63 6f 6e 73 74  mt, int i, const
7be0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
7bf0: 70 56 61 6c 75 65 29 7b 0a 20 20 69 6e 74 20 72  pValue){.  int r
7c00: 63 3b 0a 20 20 73 77 69 74 63 68 28 20 70 56 61  c;.  switch( pVa
7c10: 6c 75 65 2d 3e 74 79 70 65 20 29 7b 0a 20 20 20  lue->type ){.   
7c20: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
7c30: 45 47 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63  EGER: {.      rc
7c40: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
7c50: 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 2c 20  int64(pStmt, i, 
7c60: 70 56 61 6c 75 65 2d 3e 75 2e 69 29 3b 0a 20 20  pValue->u.i);.  
7c70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
7c80: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
7c90: 5f 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20  _FLOAT: {.      
7ca0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
7cb0: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
7cc0: 69 2c 20 70 56 61 6c 75 65 2d 3e 72 29 3b 0a 20  i, pValue->r);. 
7cd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
7ce0: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
7cf0: 45 5f 42 4c 4f 42 3a 20 7b 0a 20 20 20 20 20 20  E_BLOB: {.      
7d00: 69 66 28 20 70 56 61 6c 75 65 2d 3e 66 6c 61 67  if( pValue->flag
7d10: 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
7d20: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
7d30: 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
7d40: 6f 62 28 70 53 74 6d 74 2c 20 69 2c 20 70 56 61  ob(pStmt, i, pVa
7d50: 6c 75 65 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  lue->u.nZero);. 
7d60: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
7d70: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7d80: 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74  _bind_blob(pStmt
7d90: 2c 20 69 2c 20 70 56 61 6c 75 65 2d 3e 7a 2c 20  , i, pValue->z, 
7da0: 70 56 61 6c 75 65 2d 3e 6e 2c 53 51 4c 49 54 45  pValue->n,SQLITE
7db0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
7dc0: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
7dd0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65  ;.    }.    case
7de0: 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 20 7b 0a   SQLITE_TEXT: {.
7df0: 20 20 20 20 20 20 72 63 20 3d 20 62 69 6e 64 54        rc = bindT
7e00: 65 78 74 28 70 53 74 6d 74 2c 69 2c 20 20 70 56  ext(pStmt,i,  pV
7e10: 61 6c 75 65 2d 3e 7a 2c 20 70 56 61 6c 75 65 2d  alue->z, pValue-
7e20: 3e 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  >n, SQLITE_TRANS
7e30: 49 45 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20  IENT,.          
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 70 56 61 6c 75 65 2d 3e 65 6e 63 29      pValue->enc)
7e60: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
7e70: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
7e80: 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  : {.      rc = s
7e90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
7ea0: 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20  (pStmt, i);.    
7eb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
7ec0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a   }.  return rc;.
7ed0: 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69  }.int sqlite3_bi
7ee0: 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 73 71 6c 69  nd_zeroblob(sqli
7ef0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
7f00: 20 69 6e 74 20 69 2c 20 69 6e 74 20 6e 29 7b 0a   int i, int n){.
7f10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 56 64 62 65    int rc;.  Vdbe
7f20: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 53   *p = (Vdbe *)pS
7f30: 74 6d 74 3b 0a 20 20 72 63 20 3d 20 76 64 62 65  tmt;.  rc = vdbe
7f40: 55 6e 62 69 6e 64 28 70 2c 20 69 29 3b 0a 20 20  Unbind(p, i);.  
7f50: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
7f60: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
7f70: 56 64 62 65 4d 65 6d 53 65 74 5a 65 72 6f 42 6c  VdbeMemSetZeroBl
7f80: 6f 62 28 26 70 2d 3e 61 56 61 72 5b 69 2d 31 5d  ob(&p->aVar[i-1]
7f90: 2c 20 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , n);.    sqlite
7fa0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 2d  3_mutex_leave(p-
7fb0: 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d  >db->mutex);.  }
7fc0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
7fd0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
7fe0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64  e number of wild
7ff0: 63 61 72 64 73 20 74 68 61 74 20 63 61 6e 20 62  cards that can b
8000: 65 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 62 6f  e potentially bo
8010: 75 6e 64 20 74 6f 2e 0a 2a 2a 20 54 68 69 73 20  und to..** This 
8020: 72 6f 75 74 69 6e 65 20 69 73 20 61 64 64 65 64  routine is added
8030: 20 74 6f 20 73 75 70 70 6f 72 74 20 44 42 44 3a   to support DBD:
8040: 3a 53 51 4c 69 74 65 2e 20 20 0a 2a 2f 0a 69 6e  :SQLite.  .*/.in
8050: 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  t sqlite3_bind_p
8060: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73  arameter_count(s
8070: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
8080: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  mt){.  Vdbe *p =
8090: 20 28 56 64 62 65 2a 29 70 53 74 6d 74 3b 0a 20   (Vdbe*)pStmt;. 
80a0: 20 72 65 74 75 72 6e 20 70 20 3f 20 70 2d 3e 6e   return p ? p->n
80b0: 56 61 72 20 3a 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  Var : 0;.}../*.*
80c0: 2a 20 43 72 65 61 74 65 20 61 20 6d 61 70 70 69  * Create a mappi
80d0: 6e 67 20 66 72 6f 6d 20 76 61 72 69 61 62 6c 65  ng from variable
80e0: 20 6e 75 6d 62 65 72 73 20 74 6f 20 76 61 72 69   numbers to vari
80f0: 61 62 6c 65 20 6e 61 6d 65 73 0a 2a 2a 20 69 6e  able names.** in
8100: 20 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b   the Vdbe.azVar[
8110: 5d 20 61 72 72 61 79 2c 20 69 66 20 73 75 63 68  ] array, if such
8120: 20 61 20 6d 61 70 70 69 6e 67 20 64 6f 65 73 20   a mapping does 
8130: 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 65  not already.** e
8140: 78 69 73 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  xist..*/.static 
8150: 76 6f 69 64 20 63 72 65 61 74 65 56 61 72 4d 61  void createVarMa
8160: 70 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69 66  p(Vdbe *p){.  if
8170: 28 20 21 70 2d 3e 6f 6b 56 61 72 20 29 7b 0a 20  ( !p->okVar ){. 
8180: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 4f 70     int j;.    Op
8190: 20 2a 70 4f 70 3b 0a 20 20 20 20 73 71 6c 69 74   *pOp;.    sqlit
81a0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70  e3_mutex_enter(p
81b0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
81c0: 20 20 2f 2a 20 54 68 65 20 72 61 63 65 20 63 6f    /* The race co
81d0: 6e 64 69 74 69 6f 6e 20 68 65 72 65 20 69 73 20  ndition here is 
81e0: 68 61 72 6d 6c 65 73 73 2e 20 20 49 66 20 74 77  harmless.  If tw
81f0: 6f 20 74 68 72 65 61 64 73 20 63 61 6c 6c 20 74  o threads call t
8200: 68 69 73 0a 20 20 20 20 2a 2a 20 72 6f 75 74 69  his.    ** routi
8210: 6e 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 56  ne on the same V
8220: 64 62 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  dbe at the same 
8230: 74 69 6d 65 2c 20 74 68 65 79 20 62 6f 74 68 20  time, they both 
8240: 6d 69 67 68 74 20 65 6e 64 0a 20 20 20 20 2a 2a  might end.    **
8250: 20 75 70 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67   up initializing
8260: 20 74 68 65 20 56 64 62 65 2e 61 7a 56 61 72 5b   the Vdbe.azVar[
8270: 5d 20 61 72 72 61 79 2e 20 20 54 68 61 74 20 69  ] array.  That i
8280: 73 20 61 20 6c 69 74 74 6c 65 20 65 78 74 72 61  s a little extra
8290: 0a 20 20 20 20 2a 2a 20 77 6f 72 6b 20 62 75 74  .    ** work but
82a0: 20 69 74 20 72 65 73 75 6c 74 73 20 69 6e 20 74   it results in t
82b0: 68 65 20 73 61 6d 65 20 61 6e 73 77 65 72 2e 0a  he same answer..
82c0: 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a      */.    for(j
82d0: 3d 30 2c 20 70 4f 70 3d 70 2d 3e 61 4f 70 3b 20  =0, pOp=p->aOp; 
82e0: 6a 3c 70 2d 3e 6e 4f 70 3b 20 6a 2b 2b 2c 20 70  j<p->nOp; j++, p
82f0: 4f 70 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28  Op++){.      if(
8300: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
8310: 5f 56 61 72 69 61 62 6c 65 20 29 7b 0a 20 20 20  _Variable ){.   
8320: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
8330: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8340: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
8350: 20 20 20 20 20 20 70 2d 3e 61 7a 56 61 72 5b 70        p->azVar[p
8360: 4f 70 2d 3e 70 31 2d 31 5d 20 3d 20 70 4f 70 2d  Op->p1-1] = pOp-
8370: 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a 20  >p4.z;.      }. 
8380: 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6f 6b 56 61     }.    p->okVa
8390: 72 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  r = 1;.    sqlit
83a0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
83b0: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
83c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  }.}../*.** Retur
83d0: 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  n the name of a 
83e0: 77 69 6c 64 63 61 72 64 20 70 61 72 61 6d 65 74  wildcard paramet
83f0: 65 72 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  er.  Return NULL
8400: 20 69 66 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a   if the index.**
8410: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
8420: 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
8430: 61 72 64 20 69 73 20 75 6e 6e 61 6d 65 64 2e 0a  ard is unnamed..
8440: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  **.** The result
8450: 20 69 73 20 61 6c 77 61 79 73 20 55 54 46 2d 38   is always UTF-8
8460: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
8470: 2a 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  *sqlite3_bind_pa
8480: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 71 6c  rameter_name(sql
8490: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
84a0: 2c 20 69 6e 74 20 69 29 7b 0a 20 20 56 64 62 65  , int i){.  Vdbe
84b0: 20 2a 70 20 3d 20 28 56 64 62 65 2a 29 70 53 74   *p = (Vdbe*)pSt
84c0: 6d 74 3b 0a 20 20 69 66 28 20 70 3d 3d 30 20 7c  mt;.  if( p==0 |
84d0: 7c 20 69 3c 31 20 7c 7c 20 69 3e 70 2d 3e 6e 56  | i<1 || i>p->nV
84e0: 61 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ar ){.    return
84f0: 20 30 3b 0a 20 20 7d 0a 20 20 63 72 65 61 74 65   0;.  }.  create
8500: 56 61 72 4d 61 70 28 70 29 3b 0a 20 20 72 65 74  VarMap(p);.  ret
8510: 75 72 6e 20 70 2d 3e 61 7a 56 61 72 5b 69 2d 31  urn p->azVar[i-1
8520: 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 69 76 65  ];.}../*.** Give
8530: 6e 20 61 20 77 69 6c 64 63 61 72 64 20 70 61 72  n a wildcard par
8540: 61 6d 65 74 65 72 20 6e 61 6d 65 2c 20 72 65 74  ameter name, ret
8550: 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20 6f 66  urn the index of
8560: 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a   the variable.**
8570: 20 77 69 74 68 20 74 68 61 74 20 6e 61 6d 65 2e   with that name.
8580: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
8590: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
85a0: 68 65 20 67 69 76 65 6e 20 6e 61 6d 65 2c 0a 2a  he given name,.*
85b0: 2a 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 69  * return 0..*/.i
85c0: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
85d0: 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
85e0: 65 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  e *p, const char
85f0: 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 6e 4e 61   *zName, int nNa
8600: 6d 65 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  me){.  int i;.  
8610: 69 66 28 20 70 3d 3d 30 20 29 7b 0a 20 20 20 20  if( p==0 ){.    
8620: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
8630: 63 72 65 61 74 65 56 61 72 4d 61 70 28 70 29 3b  createVarMap(p);
8640: 20 0a 20 20 69 66 28 20 7a 4e 61 6d 65 20 29 7b   .  if( zName ){
8650: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
8660: 70 2d 3e 6e 56 61 72 3b 20 69 2b 2b 29 7b 0a 20  p->nVar; i++){. 
8670: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
8680: 2a 7a 20 3d 20 70 2d 3e 61 7a 56 61 72 5b 69 5d  *z = p->azVar[i]
8690: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 20 26 26  ;.      if( z &&
86a0: 20 6d 65 6d 63 6d 70 28 7a 2c 7a 4e 61 6d 65 2c   memcmp(z,zName,
86b0: 6e 4e 61 6d 65 29 3d 3d 30 20 26 26 20 7a 5b 6e  nName)==0 && z[n
86c0: 4e 61 6d 65 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  Name]==0 ){.    
86d0: 20 20 20 20 72 65 74 75 72 6e 20 69 2b 31 3b 0a      return i+1;.
86e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
86f0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
8700: 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  int sqlite3_bind
8710: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
8720: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
8730: 53 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  Stmt, const char
8740: 20 2a 7a 4e 61 6d 65 29 7b 0a 20 20 72 65 74 75   *zName){.  retu
8750: 72 6e 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  rn sqlite3VdbePa
8760: 72 61 6d 65 74 65 72 49 6e 64 65 78 28 28 56 64  rameterIndex((Vd
8770: 62 65 2a 29 70 53 74 6d 74 2c 20 7a 4e 61 6d 65  be*)pStmt, zName
8780: 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  , sqlite3Strlen3
8790: 30 28 7a 4e 61 6d 65 29 29 3b 0a 7d 0a 0a 2f 2a  0(zName));.}../*
87a0: 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c 6c  .** Transfer all
87b0: 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20 74   bindings from t
87c0: 68 65 20 66 69 72 73 74 20 73 74 61 74 65 6d 65  he first stateme
87d0: 6e 74 20 6f 76 65 72 20 74 6f 20 74 68 65 20 73  nt over to the s
87e0: 65 63 6f 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  econd..*/.int sq
87f0: 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
8800: 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
8810: 6d 74 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73  mt *pFromStmt, s
8820: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f  qlite3_stmt *pTo
8830: 53 74 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70  Stmt){.  Vdbe *p
8840: 46 72 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46  From = (Vdbe*)pF
8850: 72 6f 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20  romStmt;.  Vdbe 
8860: 2a 70 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54  *pTo = (Vdbe*)pT
8870: 6f 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  oStmt;.  int i;.
8880: 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 64    assert( pTo->d
8890: 62 3d 3d 70 46 72 6f 6d 2d 3e 64 62 20 29 3b 0a  b==pFrom->db );.
88a0: 20 20 61 73 73 65 72 74 28 20 70 54 6f 2d 3e 6e    assert( pTo->n
88b0: 56 61 72 3d 3d 70 46 72 6f 6d 2d 3e 6e 56 61 72  Var==pFrom->nVar
88c0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   );.  sqlite3_mu
88d0: 74 65 78 5f 65 6e 74 65 72 28 70 54 6f 2d 3e 64  tex_enter(pTo->d
88e0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 66 6f 72  b->mutex);.  for
88f0: 28 69 3d 30 3b 20 69 3c 70 46 72 6f 6d 2d 3e 6e  (i=0; i<pFrom->n
8900: 56 61 72 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  Var; i++){.    s
8910: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
8920: 65 28 26 70 54 6f 2d 3e 61 56 61 72 5b 69 5d 2c  e(&pTo->aVar[i],
8930: 20 26 70 46 72 6f 6d 2d 3e 61 56 61 72 5b 69 5d   &pFrom->aVar[i]
8940: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
8950: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 54 6f  _mutex_leave(pTo
8960: 2d 3e 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  ->db->mutex);.  
8970: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8980: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
8990: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
89a0: 54 45 44 0a 2f 2a 0a 2a 2a 20 44 65 70 72 65 63  TED./*.** Deprec
89b0: 61 74 65 64 20 65 78 74 65 72 6e 61 6c 20 69 6e  ated external in
89c0: 74 65 72 66 61 63 65 2e 20 20 49 6e 74 65 72 6e  terface.  Intern
89d0: 61 6c 2f 63 6f 72 65 20 53 51 4c 69 74 65 20 63  al/core SQLite c
89e0: 6f 64 65 0a 2a 2a 20 73 68 6f 75 6c 64 20 63 61  ode.** should ca
89f0: 6c 6c 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  ll sqlite3Transf
8a00: 65 72 42 69 6e 64 69 6e 67 73 2e 0a 2a 2a 0a 2a  erBindings..**.*
8a10: 2a 20 49 73 20 69 73 20 6d 69 73 75 73 65 20 74  * Is is misuse t
8a20: 6f 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74  o call this rout
8a30: 69 6e 65 20 77 69 74 68 20 73 74 61 74 65 6d 65  ine with stateme
8a40: 6e 74 73 20 66 72 6f 6d 20 64 69 66 66 65 72 65  nts from differe
8a50: 6e 74 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  nt.** database c
8a60: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 42 75 74  onnections.  But
8a70: 20 61 73 20 74 68 69 73 20 69 73 20 61 20 64 65   as this is a de
8a80: 70 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61  precated interfa
8a90: 63 65 2c 20 77 65 0a 2a 2a 20 77 69 6c 6c 20 6e  ce, we.** will n
8aa0: 6f 74 20 62 6f 74 68 65 72 20 74 6f 20 63 68 65  ot bother to che
8ab0: 63 6b 20 66 6f 72 20 74 68 61 74 20 63 6f 6e 64  ck for that cond
8ac0: 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ition..**.** If 
8ad0: 74 68 65 20 74 77 6f 20 73 74 61 74 65 6d 65 6e  the two statemen
8ae0: 74 73 20 63 6f 6e 74 61 69 6e 20 61 20 64 69 66  ts contain a dif
8af0: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  ferent number of
8b00: 20 62 69 6e 64 69 6e 67 73 2c 20 74 68 65 6e 0a   bindings, then.
8b10: 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 45 52 52  ** an SQLITE_ERR
8b20: 4f 52 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  OR is returned. 
8b30: 20 4e 6f 74 68 69 6e 67 20 65 6c 73 65 20 63 61   Nothing else ca
8b40: 6e 20 67 6f 20 77 72 6f 6e 67 2c 20 73 6f 20 6f  n go wrong, so o
8b50: 74 68 65 72 77 69 73 65 0a 2a 2a 20 53 51 4c 49  therwise.** SQLI
8b60: 54 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e 65  TE_OK is returne
8b70: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
8b80: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
8b90: 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
8ba0: 20 2a 70 46 72 6f 6d 53 74 6d 74 2c 20 73 71 6c   *pFromStmt, sql
8bb0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 54 6f 53 74  ite3_stmt *pToSt
8bc0: 6d 74 29 7b 0a 20 20 56 64 62 65 20 2a 70 46 72  mt){.  Vdbe *pFr
8bd0: 6f 6d 20 3d 20 28 56 64 62 65 2a 29 70 46 72 6f  om = (Vdbe*)pFro
8be0: 6d 53 74 6d 74 3b 0a 20 20 56 64 62 65 20 2a 70  mStmt;.  Vdbe *p
8bf0: 54 6f 20 3d 20 28 56 64 62 65 2a 29 70 54 6f 53  To = (Vdbe*)pToS
8c00: 74 6d 74 3b 0a 20 20 69 66 28 20 70 46 72 6f 6d  tmt;.  if( pFrom
8c10: 2d 3e 6e 56 61 72 21 3d 70 54 6f 2d 3e 6e 56 61  ->nVar!=pTo->nVa
8c20: 72 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  r ){.    return 
8c30: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
8c40: 7d 0a 20 20 69 66 28 20 70 54 6f 2d 3e 69 73 50  }.  if( pTo->isP
8c50: 72 65 70 61 72 65 56 32 20 26 26 20 70 54 6f 2d  repareV2 && pTo-
8c60: 3e 65 78 70 6d 61 73 6b 20 29 7b 0a 20 20 20 20  >expmask ){.    
8c70: 70 54 6f 2d 3e 65 78 70 69 72 65 64 20 3d 20 31  pTo->expired = 1
8c80: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 46 72 6f  ;.  }.  if( pFro
8c90: 6d 2d 3e 69 73 50 72 65 70 61 72 65 56 32 20 26  m->isPrepareV2 &
8ca0: 26 20 70 46 72 6f 6d 2d 3e 65 78 70 6d 61 73 6b  & pFrom->expmask
8cb0: 20 29 7b 0a 20 20 20 20 70 46 72 6f 6d 2d 3e 65   ){.    pFrom->e
8cc0: 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
8cd0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
8ce0: 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73  TransferBindings
8cf0: 28 70 46 72 6f 6d 53 74 6d 74 2c 20 70 54 6f 53  (pFromStmt, pToS
8d00: 74 6d 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  tmt);.}.#endif..
8d10: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
8d20: 20 73 71 6c 69 74 65 33 2a 20 64 61 74 61 62 61   sqlite3* databa
8d30: 73 65 20 68 61 6e 64 6c 65 20 74 6f 20 77 68 69  se handle to whi
8d40: 63 68 20 74 68 65 20 70 72 65 70 61 72 65 64 20  ch the prepared 
8d50: 73 74 61 74 65 6d 65 6e 74 20 67 69 76 65 6e 0a  statement given.
8d60: 2a 2a 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65  ** in the argume
8d70: 6e 74 20 62 65 6c 6f 6e 67 73 2e 20 20 54 68 69  nt belongs.  Thi
8d80: 73 20 69 73 20 74 68 65 20 73 61 6d 65 20 64 61  s is the same da
8d90: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 74 68  tabase handle th
8da0: 61 74 20 77 61 73 0a 2a 2a 20 74 68 65 20 66 69  at was.** the fi
8db0: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
8dc0: 74 68 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70  the sqlite3_prep
8dd0: 61 72 65 28 29 20 74 68 61 74 20 77 61 73 20 75  are() that was u
8de0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a  sed to create.**
8df0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
8e00: 6e 20 74 68 65 20 66 69 72 73 74 20 70 6c 61 63  n the first plac
8e10: 65 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 20 2a 73  e..*/.sqlite3 *s
8e20: 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65  qlite3_db_handle
8e30: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
8e40: 53 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20  Stmt){.  return 
8e50: 70 53 74 6d 74 20 3f 20 28 28 56 64 62 65 2a 29  pStmt ? ((Vdbe*)
8e60: 70 53 74 6d 74 29 2d 3e 64 62 20 3a 20 30 3b 0a  pStmt)->db : 0;.
8e70: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
8e80: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
8e90: 20 6e 65 78 74 20 70 72 65 70 61 72 65 64 20 73   next prepared s
8ea0: 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 20 70  tatement after p
8eb0: 53 74 6d 74 20 61 73 73 6f 63 69 61 74 65 64 0a  Stmt associated.
8ec0: 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61 73 65  ** with database
8ed0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 44 62 2e   connection pDb.
8ee0: 20 20 49 66 20 70 53 74 6d 74 20 69 73 20 4e 55    If pStmt is NU
8ef0: 4c 4c 2c 20 72 65 74 75 72 6e 20 74 68 65 20 66  LL, return the f
8f00: 69 72 73 74 0a 2a 2a 20 70 72 65 70 61 72 65 64  irst.** prepared
8f10: 20 73 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74   statement for t
8f20: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
8f30: 65 63 74 69 6f 6e 2e 20 20 52 65 74 75 72 6e 20  ection.  Return 
8f40: 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 0a 2a 2a  NULL if there.**
8f50: 20 61 72 65 20 6e 6f 20 6d 6f 72 65 2e 0a 2a 2f   are no more..*/
8f60: 0a 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  .sqlite3_stmt *s
8f70: 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74  qlite3_next_stmt
8f80: 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 73  (sqlite3 *pDb, s
8f90: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
8fa0: 6d 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  mt){.  sqlite3_s
8fb0: 74 6d 74 20 2a 70 4e 65 78 74 3b 0a 20 20 73 71  tmt *pNext;.  sq
8fc0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
8fd0: 72 28 70 44 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  r(pDb->mutex);. 
8fe0: 20 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b   if( pStmt==0 ){
8ff0: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
9000: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 70 44 62 2d  lite3_stmt*)pDb-
9010: 3e 70 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 7b  >pVdbe;.  }else{
9020: 0a 20 20 20 20 70 4e 65 78 74 20 3d 20 28 73 71  .    pNext = (sq
9030: 6c 69 74 65 33 5f 73 74 6d 74 2a 29 28 28 56 64  lite3_stmt*)((Vd
9040: 62 65 2a 29 70 53 74 6d 74 29 2d 3e 70 4e 65 78  be*)pStmt)->pNex
9050: 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
9060: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 44 62  _mutex_leave(pDb
9070: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
9080: 72 6e 20 70 4e 65 78 74 3b 0a 7d 0a 0a 2f 2a 0a  rn pNext;.}../*.
9090: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 76 61  ** Return the va
90a0: 6c 75 65 20 6f 66 20 61 20 73 74 61 74 75 73 20  lue of a status 
90b0: 63 6f 75 6e 74 65 72 20 66 6f 72 20 61 20 70 72  counter for a pr
90c0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
90d0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
90e0: 73 74 6d 74 5f 73 74 61 74 75 73 28 73 71 6c 69  stmt_status(sqli
90f0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 2c  te3_stmt *pStmt,
9100: 20 69 6e 74 20 6f 70 2c 20 69 6e 74 20 72 65 73   int op, int res
9110: 65 74 46 6c 61 67 29 7b 0a 20 20 56 64 62 65 20  etFlag){.  Vdbe 
9120: 2a 70 56 64 62 65 20 3d 20 28 56 64 62 65 2a 29  *pVdbe = (Vdbe*)
9130: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 76 20 3d  pStmt;.  int v =
9140: 20 70 56 64 62 65 2d 3e 61 43 6f 75 6e 74 65 72   pVdbe->aCounter
9150: 5b 6f 70 2d 31 5d 3b 0a 20 20 69 66 28 20 72 65  [op-1];.  if( re
9160: 73 65 74 46 6c 61 67 20 29 20 70 56 64 62 65 2d  setFlag ) pVdbe-
9170: 3e 61 43 6f 75 6e 74 65 72 5b 6f 70 2d 31 5d 20  >aCounter[op-1] 
9180: 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 76 3b  = 0;.  return v;
9190: 0a 7d 0a                                         .}.