/ Hex Artifact Content
Login

Artifact 098db34b1dbe073f1955b0364975615d5fc0feed901d049d582cf86919ef90ae:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
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: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0270: 74 65 49 6e 74 2e 68 22 0a 0a 23 69 66 64 65 66  teInt.h"..#ifdef
0280: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
0290: 51 4c 52 52 0a 23 20 69 6e 63 6c 75 64 65 20 22  QLRR.# include "
02a0: 73 71 6c 72 72 2e 68 22 0a 23 65 6e 64 69 66 20  sqlrr.h".#endif 
02b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
02c0: 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 69 6e 63  NABLE_FTS3.# inc
02d0: 6c 75 64 65 20 22 66 74 73 33 2e 68 22 0a 23 65  lude "fts3.h".#e
02e0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
02f0: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a  TE_ENABLE_RTREE.
0300: 23 20 69 6e 63 6c 75 64 65 20 22 72 74 72 65 65  # include "rtree
0310: 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h".#endif.#ifde
0320: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
0330: 49 43 55 0a 23 20 69 6e 63 6c 75 64 65 20 22 73  ICU.# include "s
0340: 71 6c 69 74 65 69 63 75 2e 68 22 0a 23 65 6e 64  qliteicu.h".#end
0350: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
0360: 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a 69 6e  _ENABLE_JSON1.in
0370: 74 20 73 71 6c 69 74 65 33 4a 73 6f 6e 31 49 6e  t sqlite3Json1In
0380: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  it(sqlite3*);.#e
0390: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
03a0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 56 54  TE_ENABLE_STMTVT
03b0: 41 42 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  AB.int sqlite3St
03c0: 6d 74 56 74 61 62 49 6e 69 74 28 73 71 6c 69 74  mtVtabInit(sqlit
03d0: 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  e3*);.#endif.#if
03e0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
03f0: 45 5f 46 54 53 35 0a 69 6e 74 20 73 71 6c 69 74  E_FTS5.int sqlit
0400: 65 33 46 74 73 35 49 6e 69 74 28 73 71 6c 69 74  e3Fts5Init(sqlit
0410: 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  e3*);.#endif..#i
0420: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
0430: 4c 47 41 4d 41 54 49 4f 4e 0a 2f 2a 20 49 4d 50  LGAMATION./* IMP
0440: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
0450: 52 2d 34 36 36 35 36 2d 34 35 31 35 36 20 54 68  R-46656-45156 Th
0460: 65 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f  e sqlite3_versio
0470: 6e 5b 5d 20 73 74 72 69 6e 67 20 63 6f 6e 73 74  n[] string const
0480: 61 6e 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ant.** contains 
0490: 74 68 65 20 74 65 78 74 20 6f 66 20 53 51 4c 49  the text of SQLI
04a0: 54 45 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f  TE_VERSION macro
04b0: 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  . .*/.const char
04c0: 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e   sqlite3_version
04d0: 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53  [] = SQLITE_VERS
04e0: 49 4f 4e 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  ION;.#endif../* 
04f0: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
0500: 46 3a 20 52 2d 35 33 35 33 36 2d 34 32 35 37 35  F: R-53536-42575
0510: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 62   The sqlite3_lib
0520: 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74 69  version() functi
0530: 6f 6e 20 72 65 74 75 72 6e 73 0a 2a 2a 20 61 20  on returns.** a 
0540: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 74  pointer to the t
0550: 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 65  o the sqlite3_ve
0560: 72 73 69 6f 6e 5b 5d 20 73 74 72 69 6e 67 20 63  rsion[] string c
0570: 6f 6e 73 74 61 6e 74 2e 20 0a 2a 2f 0a 63 6f 6e  onstant. .*/.con
0580: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
0590: 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69 64  _libversion(void
05a0: 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  ){ return sqlite
05b0: 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 0a 2f 2a  3_version; }../*
05c0: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
05d0: 4f 46 3a 20 52 2d 36 33 31 32 34 2d 33 39 33 30  OF: R-63124-3930
05e0: 30 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 6f  0 The sqlite3_so
05f0: 75 72 63 65 69 64 28 29 20 66 75 6e 63 74 69 6f  urceid() functio
0600: 6e 20 72 65 74 75 72 6e 73 20 61 0a 2a 2a 20 70  n returns a.** p
0610: 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 74 72 69  ointer to a stri
0620: 6e 67 20 63 6f 6e 73 74 61 6e 74 20 77 68 6f 73  ng constant whos
0630: 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  e value is the s
0640: 61 6d 65 20 61 73 20 74 68 65 0a 2a 2a 20 53 51  ame as the.** SQ
0650: 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 20 43  LITE_SOURCE_ID C
0660: 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   preprocessor ma
0670: 63 72 6f 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20 63  cro. .*/.const c
0680: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 73 6f 75  har *sqlite3_sou
0690: 72 63 65 69 64 28 76 6f 69 64 29 7b 20 72 65 74  rceid(void){ ret
06a0: 75 72 6e 20 53 51 4c 49 54 45 5f 53 4f 55 52 43  urn SQLITE_SOURC
06b0: 45 5f 49 44 3b 20 7d 0a 0a 2f 2a 20 49 4d 50 4c  E_ID; }../* IMPL
06c0: 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
06d0: 2d 33 35 32 31 30 2d 36 33 35 30 38 20 54 68 65  -35210-63508 The
06e0: 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73   sqlite3_libvers
06f0: 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 20 66 75 6e  ion_number() fun
0700: 63 74 69 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e 73  ction.** returns
0710: 20 61 6e 20 69 6e 74 65 67 65 72 20 65 71 75 61   an integer equa
0720: 6c 20 74 6f 20 53 51 4c 49 54 45 5f 56 45 52 53  l to SQLITE_VERS
0730: 49 4f 4e 5f 4e 55 4d 42 45 52 2e 0a 2a 2f 0a 69  ION_NUMBER..*/.i
0740: 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  nt sqlite3_libve
0750: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69  rsion_number(voi
0760: 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49 54  d){ return SQLIT
0770: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
0780: 3b 20 7d 0a 0a 2f 2a 20 49 4d 50 4c 45 4d 45 4e  ; }../* IMPLEMEN
0790: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 30 37  TATION-OF: R-207
07a0: 39 30 2d 31 34 30 32 35 20 54 68 65 20 73 71 6c  90-14025 The sql
07b0: 69 74 65 33 5f 74 68 72 65 61 64 73 61 66 65 28  ite3_threadsafe(
07c0: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
07d0: 6e 73 0a 2a 2a 20 7a 65 72 6f 20 69 66 20 61 6e  ns.** zero if an
07e0: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 69 74 65  d only if SQLite
07f0: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
0800: 74 68 20 6d 75 74 65 78 69 6e 67 20 63 6f 64 65  th mutexing code
0810: 20 6f 6d 69 74 74 65 64 20 64 75 65 20 74 6f 0a   omitted due to.
0820: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 54 48  ** the SQLITE_TH
0830: 52 45 41 44 53 41 46 45 20 63 6f 6d 70 69 6c 65  READSAFE compile
0840: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 62 65 69  -time option bei
0850: 6e 67 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2f 0a  ng set to 0..*/.
0860: 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 68 72 65  int sqlite3_thre
0870: 61 64 73 61 66 65 28 76 6f 69 64 29 7b 20 72 65  adsafe(void){ re
0880: 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 48 52 45  turn SQLITE_THRE
0890: 41 44 53 41 46 45 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  ADSAFE; }../*.**
08a0: 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   When compiling 
08b0: 74 68 65 20 74 65 73 74 20 66 69 78 74 75 72 65  the test fixture
08c0: 20 6f 72 20 77 69 74 68 20 64 65 62 75 67 67 69   or with debuggi
08d0: 6e 67 20 65 6e 61 62 6c 65 64 20 28 6f 6e 20 57  ng enabled (on W
08e0: 69 6e 33 32 29 2c 0a 2a 2a 20 74 68 69 73 20 76  in32),.** this v
08f0: 61 72 69 61 62 6c 65 20 62 65 69 6e 67 20 73 65  ariable being se
0900: 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 77 69  t to non-zero wi
0910: 6c 6c 20 63 61 75 73 65 20 4f 53 54 52 41 43 45  ll cause OSTRACE
0920: 20 6d 61 63 72 6f 73 20 74 6f 20 65 6d 69 74 0a   macros to emit.
0930: 2a 2a 20 65 78 74 72 61 20 64 69 61 67 6e 6f 73  ** extra diagnos
0940: 74 69 63 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  tic information.
0950: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0960: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a  E_HAVE_OS_TRACE.
0970: 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  # ifndef SQLITE_
0980: 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 0a 23  DEBUG_OS_TRACE.#
0990: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
09a0: 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 20  _DEBUG_OS_TRACE 
09b0: 30 0a 23 20 65 6e 64 69 66 0a 20 20 69 6e 74 20  0.# endif.  int 
09c0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 3d  sqlite3OSTrace =
09d0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53   SQLITE_DEBUG_OS
09e0: 5f 54 52 41 43 45 3b 0a 23 65 6e 64 69 66 0a 0a  _TRACE;.#endif..
09f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0a00: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20  ITE_OMIT_TRACE) 
0a10: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
0a20: 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
0a30: 29 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66  )./*.** If the f
0a40: 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f  ollowing functio
0a50: 6e 20 70 6f 69 6e 74 65 72 20 69 73 20 6e 6f 74  n pointer is not
0a60: 20 4e 55 4c 4c 20 61 6e 64 20 69 66 0a 2a 2a 20   NULL and if.** 
0a70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
0a80: 54 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64  TRACE is enabled
0a90: 2c 20 74 68 65 6e 20 6d 65 73 73 61 67 65 73 20  , then messages 
0aa0: 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 49 2f  describing.** I/
0ab0: 4f 20 61 63 74 69 76 65 20 61 72 65 20 77 72 69  O active are wri
0ac0: 74 74 65 6e 20 75 73 69 6e 67 20 74 68 69 73 20  tten using this 
0ad0: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 73 65  function.  These
0ae0: 20 6d 65 73 73 61 67 65 73 0a 2a 2a 20 61 72 65   messages.** are
0af0: 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 64 65   intended for de
0b00: 62 75 67 67 69 6e 67 20 61 63 74 69 76 69 74 79  bugging activity
0b10: 20 6f 6e 6c 79 2e 0a 2a 2f 0a 53 51 4c 49 54 45   only..*/.SQLITE
0b20: 5f 41 50 49 20 76 6f 69 64 20 28 53 51 4c 49 54  _API void (SQLIT
0b30: 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
0b40: 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
0b50: 68 61 72 2a 2c 20 2e 2e 2e 29 20 3d 20 30 3b 0a  har*, ...) = 0;.
0b60: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
0b70: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67   the following g
0b80: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 70  lobal variable p
0b90: 6f 69 6e 74 73 20 74 6f 20 61 20 73 74 72 69 6e  oints to a strin
0ba0: 67 20 77 68 69 63 68 20 69 73 20 74 68 65 0a 2a  g which is the.*
0bb0: 2a 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72 65  * name of a dire
0bc0: 63 74 6f 72 79 2c 20 74 68 65 6e 20 74 68 61 74  ctory, then that
0bd0: 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20   directory will 
0be0: 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  be used to store
0bf0: 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 66 69  .** temporary fi
0c00: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  les..**.** See a
0c10: 6c 73 6f 20 74 68 65 20 22 50 52 41 47 4d 41 20  lso the "PRAGMA 
0c20: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
0c30: 74 6f 72 79 22 20 53 51 4c 20 63 6f 6d 6d 61 6e  tory" SQL comman
0c40: 64 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69  d..*/.char *sqli
0c50: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
0c60: 72 79 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49  ry = 0;../*.** I
0c70: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0c80: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0c90: 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74 72 69  points to a stri
0ca0: 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 0a  ng which is the.
0cb0: 2a 2a 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72  ** name of a dir
0cc0: 65 63 74 6f 72 79 2c 20 74 68 65 6e 20 74 68 61  ectory, then tha
0cd0: 74 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  t directory will
0ce0: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
0cf0: 65 0a 2a 2a 20 61 6c 6c 20 64 61 74 61 62 61 73  e.** all databas
0d00: 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65  e files specifie
0d10: 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69 76  d with a relativ
0d20: 65 20 70 61 74 68 6e 61 6d 65 2e 0a 2a 2a 0a 2a  e pathname..**.*
0d30: 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 22  * See also the "
0d40: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
0d50: 65 5f 64 69 72 65 63 74 6f 72 79 22 20 53 51 4c  e_directory" SQL
0d60: 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 63 68 61   command..*/.cha
0d70: 72 20 2a 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  r *sqlite3_data_
0d80: 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 0a  directory = 0;..
0d90: 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65  /*.** Initialize
0da0: 20 53 51 4c 69 74 65 2e 20 20 0a 2a 2a 0a 2a 2a   SQLite.  .**.**
0db0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 6d 75   This routine mu
0dc0: 73 74 20 62 65 20 63 61 6c 6c 65 64 20 74 6f 20  st be called to 
0dd0: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 6d  initialize the m
0de0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
0df0: 2c 0a 2a 2a 20 56 46 53 2c 20 61 6e 64 20 6d 75  ,.** VFS, and mu
0e00: 74 65 78 20 73 75 62 73 79 73 74 65 6d 73 20 70  tex subsystems p
0e10: 72 69 6f 72 20 74 6f 20 64 6f 69 6e 67 20 61 6e  rior to doing an
0e20: 79 20 73 65 72 69 6f 75 73 20 77 6f 72 6b 20 77  y serious work w
0e30: 69 74 68 0a 2a 2a 20 53 51 4c 69 74 65 2e 20 20  ith.** SQLite.  
0e40: 42 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 79  But as long as y
0e50: 6f 75 20 64 6f 20 6e 6f 74 20 63 6f 6d 70 69 6c  ou do not compil
0e60: 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d  e with SQLITE_OM
0e70: 49 54 5f 41 55 54 4f 49 4e 49 54 0a 2a 2a 20 74  IT_AUTOINIT.** t
0e80: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c  his routine will
0e90: 20 62 65 20 63 61 6c 6c 65 64 20 61 75 74 6f 6d   be called autom
0ea0: 61 74 69 63 61 6c 6c 79 20 62 79 20 6b 65 79 20  atically by key 
0eb0: 72 6f 75 74 69 6e 65 73 20 73 75 63 68 20 61 73  routines such as
0ec0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  .** sqlite3_open
0ed0: 28 29 2e 20 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ().  .**.** This
0ee0: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
0ef0: 2d 6f 70 20 65 78 63 65 70 74 20 6f 6e 20 69 74  -op except on it
0f00: 73 20 76 65 72 79 20 66 69 72 73 74 20 63 61 6c  s very first cal
0f10: 6c 20 66 6f 72 20 74 68 65 20 70 72 6f 63 65 73  l for the proces
0f20: 73 2c 0a 2a 2a 20 6f 72 20 66 6f 72 20 74 68 65  s,.** or for the
0f30: 20 66 69 72 73 74 20 63 61 6c 6c 20 61 66 74 65   first call afte
0f40: 72 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  r a call to sqli
0f50: 74 65 33 5f 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a  te3_shutdown..**
0f60: 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 74 68  .** The first th
0f70: 72 65 61 64 20 74 6f 20 63 61 6c 6c 20 74 68 69  read to call thi
0f80: 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20 74  s routine runs t
0f90: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
0fa0: 6e 20 74 6f 0a 2a 2a 20 63 6f 6d 70 6c 65 74 69  n to.** completi
0fb0: 6f 6e 2e 20 20 49 66 20 73 75 62 73 65 71 75 65  on.  If subseque
0fc0: 6e 74 20 74 68 72 65 61 64 73 20 63 61 6c 6c 20  nt threads call 
0fd0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 62 65 66  this routine bef
0fe0: 6f 72 65 20 74 68 65 20 66 69 72 73 74 0a 2a 2a  ore the first.**
0ff0: 20 74 68 72 65 61 64 20 68 61 73 20 66 69 6e 69   thread has fini
1000: 73 68 65 64 20 74 68 65 20 69 6e 69 74 69 61 6c  shed the initial
1010: 69 7a 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 2c  ization process,
1020: 20 74 68 65 6e 20 74 68 65 20 73 75 62 73 65 71   then the subseq
1030: 75 65 6e 74 0a 2a 2a 20 74 68 72 65 61 64 73 20  uent.** threads 
1040: 6d 75 73 74 20 62 6c 6f 63 6b 20 75 6e 74 69 6c  must block until
1050: 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65 61   the first threa
1060: 64 20 66 69 6e 69 73 68 65 73 20 77 69 74 68 20  d finishes with 
1070: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
1080: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  on..**.** The fi
1090: 72 73 74 20 74 68 72 65 61 64 20 6d 69 67 68 74  rst thread might
10a0: 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69   call this routi
10b0: 6e 65 20 72 65 63 75 72 73 69 76 65 6c 79 2e 20  ne recursively. 
10c0: 20 52 65 63 75 72 73 69 76 65 0a 2a 2a 20 63 61   Recursive.** ca
10d0: 6c 6c 73 20 74 6f 20 74 68 69 73 20 72 6f 75 74  lls to this rout
10e0: 69 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  ine should not b
10f0: 6c 6f 63 6b 2c 20 6f 66 20 63 6f 75 72 73 65 2e  lock, of course.
1100: 20 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a    Otherwise the.
1110: 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ** initializatio
1120: 6e 20 70 72 6f 63 65 73 73 20 77 6f 75 6c 64 20  n process would 
1130: 6e 65 76 65 72 20 63 6f 6d 70 6c 65 74 65 2e 0a  never complete..
1140: 2a 2a 0a 2a 2a 20 4c 65 74 20 58 20 62 65 20 74  **.** Let X be t
1150: 68 65 20 66 69 72 73 74 20 74 68 72 65 61 64 20  he first thread 
1160: 74 6f 20 65 6e 74 65 72 20 74 68 69 73 20 72 6f  to enter this ro
1170: 75 74 69 6e 65 2e 20 20 4c 65 74 20 59 20 62 65  utine.  Let Y be
1180: 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20 74   some other.** t
1190: 68 72 65 61 64 2e 20 20 54 68 65 6e 20 77 68 69  hread.  Then whi
11a0: 6c 65 20 74 68 65 20 69 6e 69 74 69 61 6c 20 69  le the initial i
11b0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69  nvocation of thi
11c0: 73 20 72 6f 75 74 69 6e 65 20 62 79 20 58 20 69  s routine by X i
11d0: 73 0a 2a 2a 20 69 6e 63 6f 6d 70 6c 65 74 65 2c  s.** incomplete,
11e0: 20 69 74 20 69 73 20 72 65 71 75 69 72 65 64 20   it is required 
11f0: 74 68 61 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 2a  that:.**.**    *
1200: 20 20 43 61 6c 6c 73 20 74 6f 20 74 68 69 73 20    Calls to this 
1210: 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 59 20 6d  routine from Y m
1220: 75 73 74 20 62 6c 6f 63 6b 20 75 6e 74 69 6c 20  ust block until 
1230: 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a 2a  the outer-most.*
1240: 2a 20 20 20 20 20 20 20 63 61 6c 6c 20 62 79 20  *       call by 
1250: 58 20 63 6f 6d 70 6c 65 74 65 73 2e 0a 2a 2a 0a  X completes..**.
1260: 2a 2a 20 20 20 20 2a 20 20 52 65 63 75 72 73 69  **    *  Recursi
1270: 76 65 20 63 61 6c 6c 73 20 74 6f 20 74 68 69 73  ve calls to this
1280: 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68   routine from th
1290: 72 65 61 64 20 58 20 72 65 74 75 72 6e 20 69 6d  read X return im
12a0: 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 20 20 20  mediately.**    
12b0: 20 20 20 77 69 74 68 6f 75 74 20 62 6c 6f 63 6b     without block
12c0: 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ing..*/.int sqli
12d0: 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 76  te3_initialize(v
12e0: 6f 69 64 29 7b 0a 20 20 4d 55 54 45 58 5f 4c 4f  oid){.  MUTEX_LO
12f0: 47 49 43 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  GIC( sqlite3_mut
1300: 65 78 20 2a 70 4d 61 73 74 65 72 3b 20 29 20 20  ex *pMaster; )  
1310: 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1320: 20 73 74 61 74 69 63 20 6d 75 74 65 78 20 2a 2f   static mutex */
1330: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1360: 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 2a  /* Result code *
1370: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1380: 45 58 54 52 41 5f 49 4e 49 54 0a 20 20 69 6e 74  EXTRA_INIT.  int
1390: 20 62 52 75 6e 45 78 74 72 61 49 6e 69 74 20 3d   bRunExtraInit =
13a0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
13b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
13c0: 72 61 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ra initializatio
13d0: 6e 20 6e 65 65 64 65 64 20 2a 2f 0a 23 65 6e 64  n needed */.#end
13e0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13f0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 72 63 20  E_OMIT_WSD.  rc 
1400: 3d 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  = sqlite3_wsd_in
1410: 69 74 28 34 30 39 36 2c 20 32 34 29 3b 0a 20 20  it(4096, 24);.  
1420: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1430: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
1440: 72 63 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  rc;.  }.#endif..
1450: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 6f 6c 6c    /* If the foll
1460: 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 20 66  owing assert() f
1470: 61 69 6c 73 20 6f 6e 20 73 6f 6d 65 20 6f 62 73  ails on some obs
1480: 63 75 72 65 20 70 72 6f 63 65 73 73 6f 72 2f 63  cure processor/c
1490: 6f 6d 70 69 6c 65 72 0a 20 20 2a 2a 20 63 6f 6d  ompiler.  ** com
14a0: 62 69 6e 61 74 69 6f 6e 2c 20 74 68 65 20 77 6f  bination, the wo
14b0: 72 6b 2d 61 72 6f 75 6e 64 20 69 73 20 74 6f 20  rk-around is to 
14c0: 73 65 74 20 74 68 65 20 63 6f 72 72 65 63 74 20  set the correct 
14d0: 70 6f 69 6e 74 65 72 0a 20 20 2a 2a 20 73 69 7a  pointer.  ** siz
14e0: 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e at compile-tim
14f0: 65 20 75 73 69 6e 67 20 2d 44 53 51 4c 49 54 45  e using -DSQLITE
1500: 5f 50 54 52 53 49 5a 45 3d 6e 20 63 6f 6d 70 69  _PTRSIZE=n compi
1510: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 2a  le-time option *
1520: 2f 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49  /.  assert( SQLI
1530: 54 45 5f 50 54 52 53 49 5a 45 3d 3d 73 69 7a 65  TE_PTRSIZE==size
1540: 6f 66 28 63 68 61 72 2a 29 20 29 3b 0a 0a 20 20  of(char*) );..  
1550: 2f 2a 20 49 66 20 53 51 4c 69 74 65 20 69 73 20  /* If SQLite is 
1560: 61 6c 72 65 61 64 79 20 63 6f 6d 70 6c 65 74 65  already complete
1570: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20  ly initialized, 
1580: 74 68 65 6e 20 74 68 69 73 20 63 61 6c 6c 0a 20  then this call. 
1590: 20 2a 2a 20 74 6f 20 73 71 6c 69 74 65 33 5f 69   ** to sqlite3_i
15a0: 6e 69 74 69 61 6c 69 7a 65 28 29 20 73 68 6f 75  nitialize() shou
15b0: 6c 64 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ld be a no-op.  
15c0: 42 75 74 20 74 68 65 20 69 6e 69 74 69 61 6c 69  But the initiali
15d0: 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20 6d 75 73 74  zation.  ** must
15e0: 20 62 65 20 63 6f 6d 70 6c 65 74 65 2e 20 20 53   be complete.  S
15f0: 6f 20 69 73 49 6e 69 74 20 6d 75 73 74 20 6e 6f  o isInit must no
1600: 74 20 62 65 20 73 65 74 20 75 6e 74 69 6c 20 74  t be set until t
1610: 68 65 20 76 65 72 79 20 65 6e 64 0a 20 20 2a 2a  he very end.  **
1620: 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   of this routine
1630: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  ..  */.  if( sql
1640: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1650: 2e 69 73 49 6e 69 74 20 29 20 72 65 74 75 72 6e  .isInit ) return
1660: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 2f   SQLITE_OK;..  /
1670: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
1680: 6d 75 74 65 78 20 73 75 62 73 79 73 74 65 6d 20  mutex subsystem 
1690: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  is initialized. 
16a0: 20 49 66 20 75 6e 61 62 6c 65 20 74 6f 20 0a 20   If unable to . 
16b0: 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 20 74   ** initialize t
16c0: 68 65 20 6d 75 74 65 78 20 73 75 62 73 79 73 74  he mutex subsyst
16d0: 65 6d 2c 20 72 65 74 75 72 6e 20 65 61 72 6c 79  em, return early
16e0: 20 77 69 74 68 20 74 68 65 20 65 72 72 6f 72 2e   with the error.
16f0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 73 79 73  .  ** If the sys
1700: 74 65 6d 20 69 73 20 73 6f 20 73 69 63 6b 20 74  tem is so sick t
1710: 68 61 74 20 77 65 20 61 72 65 20 75 6e 61 62 6c  hat we are unabl
1720: 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61 20  e to allocate a 
1730: 6d 75 74 65 78 2c 0a 20 20 2a 2a 20 74 68 65 72  mutex,.  ** ther
1740: 65 20 69 73 20 6e 6f 74 20 6d 75 63 68 20 53 51  e is not much SQ
1750: 4c 69 74 65 20 69 73 20 67 6f 69 6e 67 20 74 6f  Lite is going to
1760: 20 62 65 20 61 62 6c 65 20 74 6f 20 64 6f 2e 0a   be able to do..
1770: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 75    **.  ** The mu
1780: 74 65 78 20 73 75 62 73 79 73 74 65 6d 20 6d 75  tex subsystem mu
1790: 73 74 20 74 61 6b 65 20 63 61 72 65 20 6f 66 20  st take care of 
17a0: 73 65 72 69 61 6c 69 7a 69 6e 67 20 69 74 73 20  serializing its 
17b0: 6f 77 6e 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  own.  ** initial
17c0: 69 7a 61 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20  ization..  */.  
17d0: 72 63 20 3d 20 73 71 6c 69 74 65 33 4d 75 74 65  rc = sqlite3Mute
17e0: 78 49 6e 69 74 28 29 3b 0a 20 20 69 66 28 20 72  xInit();.  if( r
17f0: 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  c ) return rc;..
1800: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
1810: 74 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73 79 73  the malloc() sys
1820: 74 65 6d 20 61 6e 64 20 74 68 65 20 72 65 63 75  tem and the recu
1830: 72 73 69 76 65 20 70 49 6e 69 74 4d 75 74 65 78  rsive pInitMutex
1840: 20 6d 75 74 65 78 2e 0a 20 20 2a 2a 20 54 68 69   mutex..  ** Thi
1850: 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 70  s operation is p
1860: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
1870: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 6d 75  STATIC_MASTER mu
1880: 74 65 78 2e 20 20 4e 6f 74 65 20 74 68 61 74 0a  tex.  Note that.
1890: 20 20 2a 2a 20 4d 75 74 65 78 41 6c 6c 6f 63 28    ** MutexAlloc(
18a0: 29 20 69 73 20 63 61 6c 6c 65 64 20 66 6f 72 20  ) is called for 
18b0: 61 20 73 74 61 74 69 63 20 6d 75 74 65 78 20 70  a static mutex p
18c0: 72 69 6f 72 20 74 6f 20 69 6e 69 74 69 61 6c 69  rior to initiali
18d0: 7a 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 6d 61  zing the.  ** ma
18e0: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 20 2d  lloc subsystem -
18f0: 20 74 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   this implies th
1900: 61 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  at the allocatio
1910: 6e 20 6f 66 20 61 20 73 74 61 74 69 63 0a 20 20  n of a static.  
1920: 2a 2a 20 6d 75 74 65 78 20 6d 75 73 74 20 6e 6f  ** mutex must no
1930: 74 20 72 65 71 75 69 72 65 20 73 75 70 70 6f 72  t require suppor
1940: 74 20 66 72 6f 6d 20 74 68 65 20 6d 61 6c 6c 6f  t from the mallo
1950: 63 20 73 75 62 73 79 73 74 65 6d 2e 0a 20 20 2a  c subsystem..  *
1960: 2f 0a 20 20 4d 55 54 45 58 5f 4c 4f 47 49 43 28  /.  MUTEX_LOGIC(
1970: 20 70 4d 61 73 74 65 72 20 3d 20 73 71 6c 69 74   pMaster = sqlit
1980: 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c  e3MutexAlloc(SQL
1990: 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49 43  ITE_MUTEX_STATIC
19a0: 5f 4d 41 53 54 45 52 29 3b 20 29 0a 20 20 73 71  _MASTER); ).  sq
19b0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
19c0: 72 28 70 4d 61 73 74 65 72 29 3b 0a 20 20 73 71  r(pMaster);.  sq
19d0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
19e0: 67 2e 69 73 4d 75 74 65 78 49 6e 69 74 20 3d 20  g.isMutexInit = 
19f0: 31 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  1;.  if( !sqlite
1a00: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73  3GlobalConfig.is
1a10: 4d 61 6c 6c 6f 63 49 6e 69 74 20 29 7b 0a 20 20  MallocInit ){.  
1a20: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4d 61    rc = sqlite3Ma
1a30: 6c 6c 6f 63 49 6e 69 74 28 29 3b 0a 20 20 7d 0a  llocInit();.  }.
1a40: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a50: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
1a60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
1a70: 73 4d 61 6c 6c 6f 63 49 6e 69 74 20 3d 20 31 3b  sMallocInit = 1;
1a80: 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65  .    if( !sqlite
1a90: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49  3GlobalConfig.pI
1aa0: 6e 69 74 4d 75 74 65 78 20 29 7b 0a 20 20 20 20  nitMutex ){.    
1ab0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
1ac0: 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65 78  onfig.pInitMutex
1ad0: 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 73 71   =.           sq
1ae0: 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
1af0: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 52 45 43  SQLITE_MUTEX_REC
1b00: 55 52 53 49 56 45 29 3b 0a 20 20 20 20 20 20 69  URSIVE);.      i
1b10: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
1b20: 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75 74 65  Config.bCoreMute
1b30: 78 20 26 26 20 21 73 71 6c 69 74 65 33 47 6c 6f  x && !sqlite3Glo
1b40: 62 61 6c 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d  balConfig.pInitM
1b50: 75 74 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  utex ){.        
1b60: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
1b70: 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d 0a  M_BKPT;.      }.
1b80: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1b90: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1ba0: 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62  .    sqlite3Glob
1bb0: 61 6c 43 6f 6e 66 69 67 2e 6e 52 65 66 49 6e 69  alConfig.nRefIni
1bc0: 74 4d 75 74 65 78 2b 2b 3b 0a 20 20 7d 0a 20 20  tMutex++;.  }.  
1bd0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
1be0: 61 76 65 28 70 4d 61 73 74 65 72 29 3b 0a 0a 20  ave(pMaster);.. 
1bf0: 20 2f 2a 20 49 66 20 72 63 20 69 73 20 6e 6f 74   /* If rc is not
1c00: 20 53 51 4c 49 54 45 5f 4f 4b 20 61 74 20 74 68   SQLITE_OK at th
1c10: 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 65  is point, then e
1c20: 69 74 68 65 72 20 74 68 65 20 6d 61 6c 6c 6f 63  ither the malloc
1c30: 0a 20 20 2a 2a 20 73 75 62 73 79 73 74 65 6d 20  .  ** subsystem 
1c40: 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 69 6e 69  could not be ini
1c50: 74 69 61 6c 69 7a 65 64 20 6f 72 20 74 68 65 20  tialized or the 
1c60: 73 79 73 74 65 6d 20 66 61 69 6c 65 64 20 74 6f  system failed to
1c70: 20 61 6c 6c 6f 63 61 74 65 0a 20 20 2a 2a 20 74   allocate.  ** t
1c80: 68 65 20 70 49 6e 69 74 4d 75 74 65 78 20 6d 75  he pInitMutex mu
1c90: 74 65 78 2e 20 52 65 74 75 72 6e 20 61 6e 20 65  tex. Return an e
1ca0: 72 72 6f 72 20 69 6e 20 65 69 74 68 65 72 20 63  rror in either c
1cb0: 61 73 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 72  ase.  */.  if( r
1cc0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1cd0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
1ce0: 20 7d 0a 0a 20 20 2f 2a 20 44 6f 20 74 68 65 20   }..  /* Do the 
1cf0: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 69 74  rest of the init
1d00: 69 61 6c 69 7a 61 74 69 6f 6e 20 75 6e 64 65 72  ialization under
1d10: 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 6d   the recursive m
1d20: 75 74 65 78 20 73 6f 0a 20 20 2a 2a 20 74 68 61  utex so.  ** tha
1d30: 74 20 77 65 20 77 69 6c 6c 20 62 65 20 61 62 6c  t we will be abl
1d40: 65 20 74 6f 20 68 61 6e 64 6c 65 20 72 65 63 75  e to handle recu
1d50: 72 73 69 76 65 20 63 61 6c 6c 73 20 69 6e 74 6f  rsive calls into
1d60: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  .  ** sqlite3_in
1d70: 69 74 69 61 6c 69 7a 65 28 29 2e 20 20 54 68 65  itialize().  The
1d80: 20 72 65 63 75 72 73 69 76 65 20 63 61 6c 6c 73   recursive calls
1d90: 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6d 65 20 74   normally come t
1da0: 68 72 6f 75 67 68 0a 20 20 2a 2a 20 73 71 6c 69  hrough.  ** sqli
1db0: 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 20 77 68  te3_os_init() wh
1dc0: 65 6e 20 69 74 20 69 6e 76 6f 6b 65 73 20 73 71  en it invokes sq
1dd0: 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74  lite3_vfs_regist
1de0: 65 72 28 29 2c 20 62 75 74 20 6f 74 68 65 72 0a  er(), but other.
1df0: 20 20 2a 2a 20 72 65 63 75 72 73 69 76 65 20 63    ** recursive c
1e00: 61 6c 6c 73 20 6d 69 67 68 74 20 61 6c 73 6f 20  alls might also 
1e10: 62 65 20 70 6f 73 73 69 62 6c 65 2e 0a 20 20 2a  be possible..  *
1e20: 2a 0a 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54  *.  ** IMPLEMENT
1e30: 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 30 31 34  ATION-OF: R-0014
1e40: 30 2d 33 37 34 34 35 20 53 51 4c 69 74 65 20 61  0-37445 SQLite a
1e50: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 72  utomatically ser
1e60: 69 61 6c 69 7a 65 73 20 63 61 6c 6c 73 0a 20 20  ializes calls.  
1e70: 2a 2a 20 74 6f 20 74 68 65 20 78 49 6e 69 74 20  ** to the xInit 
1e80: 6d 65 74 68 6f 64 2c 20 73 6f 20 74 68 65 20 78  method, so the x
1e90: 49 6e 69 74 20 6d 65 74 68 6f 64 20 6e 65 65 64  Init method need
1ea0: 20 6e 6f 74 20 62 65 20 74 68 72 65 61 64 73 61   not be threadsa
1eb0: 66 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  fe..  **.  ** Th
1ec0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 75 74 65  e following mute
1ed0: 78 20 69 73 20 77 68 61 74 20 73 65 72 69 61 6c  x is what serial
1ee0: 69 7a 65 73 20 61 63 63 65 73 73 20 74 6f 20 74  izes access to t
1ef0: 68 65 20 61 70 70 64 65 66 20 70 63 61 63 68 65  he appdef pcache
1f00: 20 78 49 6e 69 74 0a 20 20 2a 2a 20 6d 65 74 68   xInit.  ** meth
1f10: 6f 64 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  ods.  The sqlite
1f20: 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
1f30: 2e 78 49 6e 69 74 28 29 20 61 6c 6c 20 69 73 20  .xInit() all is 
1f40: 65 6d 62 65 64 64 65 64 20 69 6e 20 74 68 65 0a  embedded in the.
1f50: 20 20 2a 2a 20 63 61 6c 6c 20 74 6f 20 73 71 6c    ** call to sql
1f60: 69 74 65 33 50 63 61 63 68 65 49 6e 69 74 69 61  ite3PcacheInitia
1f70: 6c 69 7a 65 28 29 2e 0a 20 20 2a 2f 0a 20 20 73  lize()..  */.  s
1f80: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
1f90: 65 72 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  er(sqlite3Global
1fa0: 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65  Config.pInitMute
1fb0: 78 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  x);.  if( sqlite
1fc0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73  3GlobalConfig.is
1fd0: 49 6e 69 74 3d 3d 30 20 26 26 20 73 71 6c 69 74  Init==0 && sqlit
1fe0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
1ff0: 6e 50 72 6f 67 72 65 73 73 3d 3d 30 20 29 7b 0a  nProgress==0 ){.
2000: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
2010: 6c 43 6f 6e 66 69 67 2e 69 6e 50 72 6f 67 72 65  lConfig.inProgre
2020: 73 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  ss = 1;.#ifdef S
2030: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
2040: 4c 4f 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  LOG.    {.      
2050: 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c 69  extern void sqli
2060: 74 65 33 5f 69 6e 69 74 5f 73 71 6c 6c 6f 67 28  te3_init_sqllog(
2070: 76 6f 69 64 29 3b 0a 20 20 20 20 20 20 73 71 6c  void);.      sql
2080: 69 74 65 33 5f 69 6e 69 74 5f 73 71 6c 6c 6f 67  ite3_init_sqllog
2090: 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ();.    }.#endif
20a0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 73 71 6c  .    memset(&sql
20b0: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
20c0: 69 6f 6e 73 2c 20 30 2c 20 73 69 7a 65 6f 66 28  ions, 0, sizeof(
20d0: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
20e0: 6e 63 74 69 6f 6e 73 29 29 3b 0a 20 20 20 20 73  nctions));.    s
20f0: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
2100: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 29  iltinFunctions()
2110: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
2120: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73  3GlobalConfig.is
2130: 50 43 61 63 68 65 49 6e 69 74 3d 3d 30 20 29 7b  PCacheInit==0 ){
2140: 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
2150: 74 65 33 50 63 61 63 68 65 49 6e 69 74 69 61 6c  te3PcacheInitial
2160: 69 7a 65 28 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ize();.    }.   
2170: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2180: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  OK ){.      sqli
2190: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
21a0: 69 73 50 43 61 63 68 65 49 6e 69 74 20 3d 20 31  isPCacheInit = 1
21b0: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
21c0: 69 74 65 33 4f 73 49 6e 69 74 28 29 3b 0a 20 20  ite3OsInit();.  
21d0: 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d    }.    if( rc==
21e0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21f0: 20 20 20 73 71 6c 69 74 65 33 50 43 61 63 68 65     sqlite3PCache
2200: 42 75 66 66 65 72 53 65 74 75 70 28 20 73 71 6c  BufferSetup( sql
2210: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
2220: 2e 70 50 61 67 65 2c 20 0a 20 20 20 20 20 20 20  .pPage, .       
2230: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
2240: 43 6f 6e 66 69 67 2e 73 7a 50 61 67 65 2c 20 73  Config.szPage, s
2250: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
2260: 69 67 2e 6e 50 61 67 65 29 3b 0a 20 20 20 20 20  ig.nPage);.     
2270: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2280: 6e 66 69 67 2e 69 73 49 6e 69 74 20 3d 20 31 3b  nfig.isInit = 1;
2290: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22a0: 58 54 52 41 5f 49 4e 49 54 0a 20 20 20 20 20 20  XTRA_INIT.      
22b0: 62 52 75 6e 45 78 74 72 61 49 6e 69 74 20 3d 20  bRunExtraInit = 
22c0: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  1;.#endif.    }.
22d0: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
22e0: 6c 43 6f 6e 66 69 67 2e 69 6e 50 72 6f 67 72 65  lConfig.inProgre
22f0: 73 73 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71  ss = 0;.  }.  sq
2300: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
2310: 65 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e(sqlite3GlobalC
2320: 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65 78  onfig.pInitMutex
2330: 29 3b 0a 0a 20 20 2f 2a 20 47 6f 20 62 61 63 6b  );..  /* Go back
2340: 20 75 6e 64 65 72 20 74 68 65 20 73 74 61 74 69   under the stati
2350: 63 20 6d 75 74 65 78 20 61 6e 64 20 63 6c 65 61  c mutex and clea
2360: 6e 20 75 70 20 74 68 65 20 72 65 63 75 72 73 69  n up the recursi
2370: 76 65 0a 20 20 2a 2a 20 6d 75 74 65 78 20 74 6f  ve.  ** mutex to
2380: 20 70 72 65 76 65 6e 74 20 61 20 72 65 73 6f 75   prevent a resou
2390: 72 63 65 20 6c 65 61 6b 2e 0a 20 20 2a 2f 0a 20  rce leak..  */. 
23a0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
23b0: 6e 74 65 72 28 70 4d 61 73 74 65 72 29 3b 0a 20  nter(pMaster);. 
23c0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
23d0: 6e 66 69 67 2e 6e 52 65 66 49 6e 69 74 4d 75 74  nfig.nRefInitMut
23e0: 65 78 2d 2d 3b 0a 20 20 69 66 28 20 73 71 6c 69  ex--;.  if( sqli
23f0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2400: 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3c 3d 30  nRefInitMutex<=0
2410: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2420: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
2430: 66 69 67 2e 6e 52 65 66 49 6e 69 74 4d 75 74 65  fig.nRefInitMute
2440: 78 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  x==0 );.    sqli
2450: 74 65 33 5f 6d 75 74 65 78 5f 66 72 65 65 28 73  te3_mutex_free(s
2460: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
2470: 69 67 2e 70 49 6e 69 74 4d 75 74 65 78 29 3b 0a  ig.pInitMutex);.
2480: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
2490: 6c 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74  lConfig.pInitMut
24a0: 65 78 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71  ex = 0;.  }.  sq
24b0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
24c0: 65 28 70 4d 61 73 74 65 72 29 3b 0a 0a 20 20 2f  e(pMaster);..  /
24d0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24e0: 69 73 20 6a 75 73 74 20 61 20 73 61 6e 69 74 79  is just a sanity
24f0: 20 63 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73   check to make s
2500: 75 72 65 20 53 51 4c 69 74 65 20 68 61 73 0a 20  ure SQLite has. 
2510: 20 2a 2a 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65   ** been compile
2520: 64 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 49 74  d correctly.  It
2530: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2540: 20 72 75 6e 20 74 68 69 73 20 63 6f 64 65 2c 20   run this code, 
2550: 62 75 74 0a 20 20 2a 2a 20 77 65 20 64 6f 6e 27  but.  ** we don'
2560: 74 20 77 61 6e 74 20 74 6f 20 72 75 6e 20 69 74  t want to run it
2570: 20 74 6f 6f 20 6f 66 74 65 6e 20 61 6e 64 20 73   too often and s
2580: 6f 61 6b 20 75 70 20 43 50 55 20 63 79 63 6c 65  oak up CPU cycle
2590: 73 20 66 6f 72 20 6e 6f 0a 20 20 2a 2a 20 72 65  s for no.  ** re
25a0: 61 73 6f 6e 2e 20 20 53 6f 20 77 65 20 72 75 6e  ason.  So we run
25b0: 20 69 74 20 6f 6e 63 65 20 64 75 72 69 6e 67 20   it once during 
25c0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 2e 0a  initialization..
25d0: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45    */.#ifndef NDE
25e0: 42 55 47 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  BUG.#ifndef SQLI
25f0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
2600: 5f 50 4f 49 4e 54 0a 20 20 2f 2a 20 54 68 69 73  _POINT.  /* This
2610: 20 73 65 63 74 69 6f 6e 20 6f 66 20 63 6f 64 65   section of code
2620: 27 73 20 6f 6e 6c 79 20 22 6f 75 74 70 75 74 22  's only "output"
2630: 20 69 73 20 76 69 61 20 61 73 73 65 72 74 28 29   is via assert()
2640: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 2a 2f 0a   statements. */.
2650: 20 20 69 66 20 28 20 72 63 3d 3d 53 51 4c 49 54    if ( rc==SQLIT
2660: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 75 36 34 20  E_OK ){.    u64 
2670: 78 20 3d 20 28 28 28 75 36 34 29 31 29 3c 3c 36  x = (((u64)1)<<6
2680: 33 29 2d 31 3b 0a 20 20 20 20 64 6f 75 62 6c 65  3)-1;.    double
2690: 20 79 3b 0a 20 20 20 20 61 73 73 65 72 74 28 73   y;.    assert(s
26a0: 69 7a 65 6f 66 28 78 29 3d 3d 38 29 3b 0a 20 20  izeof(x)==8);.  
26b0: 20 20 61 73 73 65 72 74 28 73 69 7a 65 6f 66 28    assert(sizeof(
26c0: 78 29 3d 3d 73 69 7a 65 6f 66 28 79 29 29 3b 0a  x)==sizeof(y));.
26d0: 20 20 20 20 6d 65 6d 63 70 79 28 26 79 2c 20 26      memcpy(&y, &
26e0: 78 2c 20 38 29 3b 0a 20 20 20 20 61 73 73 65 72  x, 8);.    asser
26f0: 74 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  t( sqlite3IsNaN(
2700: 79 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  y) );.  }.#endif
2710: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 44 6f  .#endif..  /* Do
2720: 20 65 78 74 72 61 20 69 6e 69 74 69 61 6c 69 7a   extra initializ
2730: 61 74 69 6f 6e 20 73 74 65 70 73 20 72 65 71 75  ation steps requ
2740: 65 73 74 65 64 20 62 79 20 74 68 65 20 53 51 4c  ested by the SQL
2750: 49 54 45 5f 45 58 54 52 41 5f 49 4e 49 54 0a 20  ITE_EXTRA_INIT. 
2760: 20 2a 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   ** compile-time
2770: 20 6f 70 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 23 69   option..  */.#i
2780: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52  fdef SQLITE_EXTR
2790: 41 5f 49 4e 49 54 0a 20 20 69 66 28 20 62 52 75  A_INIT.  if( bRu
27a0: 6e 45 78 74 72 61 49 6e 69 74 20 29 7b 0a 20 20  nExtraInit ){.  
27b0: 20 20 69 6e 74 20 53 51 4c 49 54 45 5f 45 58 54    int SQLITE_EXT
27c0: 52 41 5f 49 4e 49 54 28 63 6f 6e 73 74 20 63 68  RA_INIT(const ch
27d0: 61 72 2a 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ar*);.    rc = S
27e0: 51 4c 49 54 45 5f 45 58 54 52 41 5f 49 4e 49 54  QLITE_EXTRA_INIT
27f0: 28 30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  (0);.  }.#endif.
2800: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
2810: 0a 2f 2a 0a 2a 2a 20 55 6e 64 6f 20 74 68 65 20  ./*.** Undo the 
2820: 65 66 66 65 63 74 73 20 6f 66 20 73 71 6c 69 74  effects of sqlit
2830: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 2e  e3_initialize().
2840: 20 20 4d 75 73 74 20 6e 6f 74 20 62 65 20 63 61    Must not be ca
2850: 6c 6c 65 64 20 77 68 69 6c 65 0a 2a 2a 20 74 68  lled while.** th
2860: 65 72 65 20 61 72 65 20 6f 75 74 73 74 61 6e 64  ere are outstand
2870: 69 6e 67 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ing database con
2880: 6e 65 63 74 69 6f 6e 73 20 6f 72 20 6d 65 6d 6f  nections or memo
2890: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f  ry allocations o
28a0: 72 0a 2a 2a 20 77 68 69 6c 65 20 61 6e 79 20 70  r.** while any p
28b0: 61 72 74 20 6f 66 20 53 51 4c 69 74 65 20 69 73  art of SQLite is
28c0: 20 6f 74 68 65 72 77 69 73 65 20 69 6e 20 75 73   otherwise in us
28d0: 65 20 69 6e 20 61 6e 79 20 74 68 72 65 61 64 2e  e in any thread.
28e0: 20 20 54 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e    This.** routin
28f0: 65 20 69 73 20 6e 6f 74 20 74 68 72 65 61 64 73  e is not threads
2900: 61 66 65 2e 20 20 42 75 74 20 69 74 20 69 73 20  afe.  But it is 
2910: 73 61 66 65 20 74 6f 20 69 6e 76 6f 6b 65 20 74  safe to invoke t
2920: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 6f  his routine.** o
2930: 6e 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73  n when SQLite is
2940: 20 61 6c 72 65 61 64 79 20 73 68 75 74 20 64 6f   already shut do
2950: 77 6e 2e 20 20 49 66 20 53 51 4c 69 74 65 20 69  wn.  If SQLite i
2960: 73 20 61 6c 72 65 61 64 79 20 73 68 75 74 20 64  s already shut d
2970: 6f 77 6e 0a 2a 2a 20 77 68 65 6e 20 74 68 69 73  own.** when this
2980: 20 72 6f 75 74 69 6e 65 20 69 73 20 69 6e 76 6f   routine is invo
2990: 6b 65 64 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ked, then this r
29a0: 6f 75 74 69 6e 65 20 69 73 20 61 20 68 61 72 6d  outine is a harm
29b0: 6c 65 73 73 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 69  less no-op..*/.i
29c0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  nt sqlite3_shutd
29d0: 6f 77 6e 28 76 6f 69 64 29 7b 0a 23 69 66 64 65  own(void){.#ifde
29e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
29f0: 44 0a 20 20 69 6e 74 20 72 63 20 3d 20 73 71 6c  D.  int rc = sql
2a00: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 34 30  ite3_wsd_init(40
2a10: 39 36 2c 20 32 34 29 3b 0a 20 20 69 66 28 20 72  96, 24);.  if( r
2a20: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
2a30: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
2a40: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28   }.#endif..  if(
2a50: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2a60: 6e 66 69 67 2e 69 73 49 6e 69 74 20 29 7b 0a 23  nfig.isInit ){.#
2a70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54  ifdef SQLITE_EXT
2a80: 52 41 5f 53 48 55 54 44 4f 57 4e 0a 20 20 20 20  RA_SHUTDOWN.    
2a90: 76 6f 69 64 20 53 51 4c 49 54 45 5f 45 58 54 52  void SQLITE_EXTR
2aa0: 41 5f 53 48 55 54 44 4f 57 4e 28 76 6f 69 64 29  A_SHUTDOWN(void)
2ab0: 3b 0a 20 20 20 20 53 51 4c 49 54 45 5f 45 58 54  ;.    SQLITE_EXT
2ac0: 52 41 5f 53 48 55 54 44 4f 57 4e 28 29 3b 0a 23  RA_SHUTDOWN();.#
2ad0: 65 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65  endif.    sqlite
2ae0: 33 5f 6f 73 5f 65 6e 64 28 29 3b 0a 20 20 20 20  3_os_end();.    
2af0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 61 75  sqlite3_reset_au
2b00: 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 28 29 3b 0a  to_extension();.
2b10: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
2b20: 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20 3d  lConfig.isInit =
2b30: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
2b40: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2b50: 67 2e 69 73 50 43 61 63 68 65 49 6e 69 74 20 29  g.isPCacheInit )
2b60: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 50 63 61  {.    sqlite3Pca
2b70: 63 68 65 53 68 75 74 64 6f 77 6e 28 29 3b 0a 20  cheShutdown();. 
2b80: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
2b90: 43 6f 6e 66 69 67 2e 69 73 50 43 61 63 68 65 49  Config.isPCacheI
2ba0: 6e 69 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  nit = 0;.  }.  i
2bb0: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
2bc0: 43 6f 6e 66 69 67 2e 69 73 4d 61 6c 6c 6f 63 49  Config.isMallocI
2bd0: 6e 69 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  nit ){.    sqlit
2be0: 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 29 3b 0a 20  e3MallocEnd();. 
2bf0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
2c00: 43 6f 6e 66 69 67 2e 69 73 4d 61 6c 6c 6f 63 49  Config.isMallocI
2c10: 6e 69 74 20 3d 20 30 3b 0a 0a 23 69 66 6e 64 65  nit = 0;..#ifnde
2c20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2c30: 55 54 44 4f 57 4e 5f 44 49 52 45 43 54 4f 52 49  UTDOWN_DIRECTORI
2c40: 45 53 0a 20 20 20 20 2f 2a 20 54 68 65 20 68 65  ES.    /* The he
2c50: 61 70 20 73 75 62 73 79 73 74 65 6d 20 68 61 73  ap subsystem has
2c60: 20 6e 6f 77 20 62 65 65 6e 20 73 68 75 74 64 6f   now been shutdo
2c70: 77 6e 20 61 6e 64 20 74 68 65 73 65 20 76 61 6c  wn and these val
2c80: 75 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 64  ues are supposed
2c90: 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 4e 55  .    ** to be NU
2ca0: 4c 4c 20 6f 72 20 70 6f 69 6e 74 20 74 6f 20 6d  LL or point to m
2cb0: 65 6d 6f 72 79 20 74 68 61 74 20 77 61 73 20 6f  emory that was o
2cc0: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
2cd0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 2c 0a 20  ite3_malloc(),. 
2ce0: 20 20 20 2a 2a 20 77 68 69 63 68 20 77 6f 75 6c     ** which woul
2cf0: 64 20 72 65 6c 79 20 6f 6e 20 74 68 61 74 20 68  d rely on that h
2d00: 65 61 70 20 73 75 62 73 79 73 74 65 6d 3b 20 74  eap subsystem; t
2d10: 68 65 72 65 66 6f 72 65 2c 20 6d 61 6b 65 20 73  herefore, make s
2d20: 75 72 65 20 74 68 65 73 65 0a 20 20 20 20 2a 2a  ure these.    **
2d30: 20 76 61 6c 75 65 73 20 63 61 6e 6e 6f 74 20 72   values cannot r
2d40: 65 66 65 72 20 74 6f 20 68 65 61 70 20 6d 65 6d  efer to heap mem
2d50: 6f 72 79 20 74 68 61 74 20 77 61 73 20 6a 75 73  ory that was jus
2d60: 74 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  t invalidated wh
2d70: 65 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 68 65  en the.    ** he
2d80: 61 70 20 73 75 62 73 79 73 74 65 6d 20 77 61 73  ap subsystem was
2d90: 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73   shutdown.  This
2da0: 20 69 73 20 6f 6e 6c 79 20 64 6f 6e 65 20 69 66   is only done if
2db0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 61 6c   the current cal
2dc0: 6c 20 74 6f 0a 20 20 20 20 2a 2a 20 74 68 69 73  l to.    ** this
2dd0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74   function result
2de0: 65 64 20 69 6e 20 74 68 65 20 68 65 61 70 20 73  ed in the heap s
2df0: 75 62 73 79 73 74 65 6d 20 61 63 74 75 61 6c 6c  ubsystem actuall
2e00: 79 20 62 65 69 6e 67 20 73 68 75 74 64 6f 77 6e  y being shutdown
2e10: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
2e20: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
2e30: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  ory = 0;.    sql
2e40: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
2e50: 6f 72 79 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  ory = 0;.#endif.
2e60: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
2e70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73  3GlobalConfig.is
2e80: 4d 75 74 65 78 49 6e 69 74 20 29 7b 0a 20 20 20  MutexInit ){.   
2e90: 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
2ea0: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47  ();.    sqlite3G
2eb0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 4d 75  lobalConfig.isMu
2ec0: 74 65 78 49 6e 69 74 20 3d 20 30 3b 0a 20 20 7d  texInit = 0;.  }
2ed0: 0a 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ..  return SQLIT
2ee0: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  E_OK;.}../*.** T
2ef0: 68 69 73 20 41 50 49 20 61 6c 6c 6f 77 73 20 61  his API allows a
2f00: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 6f 20 6d  pplications to m
2f10: 6f 64 69 66 79 20 74 68 65 20 67 6c 6f 62 61 6c  odify the global
2f20: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
2f30: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 69 74 65 20  f.** the SQLite 
2f40: 6c 69 62 72 61 72 79 20 61 74 20 72 75 6e 2d 74  library at run-t
2f50: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ime..**.** This 
2f60: 72 6f 75 74 69 6e 65 20 73 68 6f 75 6c 64 20 6f  routine should o
2f70: 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 77 68  nly be called wh
2f80: 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  en there are no 
2f90: 6f 75 74 73 74 61 6e 64 69 6e 67 0a 2a 2a 20 64  outstanding.** d
2fa0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
2fb0: 6f 6e 73 20 6f 72 20 6d 65 6d 6f 72 79 20 61 6c  ons or memory al
2fc0: 6c 6f 63 61 74 69 6f 6e 73 2e 20 20 54 68 69 73  locations.  This
2fd0: 20 72 6f 75 74 69 6e 65 20 69 73 20 6e 6f 74 0a   routine is not.
2fe0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
2ff0: 46 61 69 6c 75 72 65 20 74 6f 20 68 65 65 64 20  Failure to heed 
3000: 74 68 65 73 65 20 77 61 72 6e 69 6e 67 73 20 63  these warnings c
3010: 61 6e 20 6c 65 61 64 20 74 6f 20 75 6e 70 72 65  an lead to unpre
3020: 64 69 63 74 61 62 6c 65 0a 2a 2a 20 62 65 68 61  dictable.** beha
3030: 76 69 6f 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  vior..*/.int sql
3040: 69 74 65 33 5f 63 6f 6e 66 69 67 28 69 6e 74 20  ite3_config(int 
3050: 6f 70 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  op, ...){.  va_l
3060: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 72 63  ist ap;.  int rc
3070: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20   = SQLITE_OK;.. 
3080: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   /* sqlite3_conf
3090: 69 67 28 29 20 73 68 61 6c 6c 20 72 65 74 75 72  ig() shall retur
30a0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
30b0: 69 66 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  if it is invoked
30c0: 20 77 68 69 6c 65 0a 20 20 2a 2a 20 74 68 65 20   while.  ** the 
30d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 69  SQLite library i
30e0: 73 20 69 6e 20 75 73 65 2e 20 2a 2f 0a 20 20 69  s in use. */.  i
30f0: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
3100: 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20 29 20  Config.isInit ) 
3110: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
3120: 53 55 53 45 5f 42 4b 50 54 3b 0a 0a 20 20 76 61  SUSE_BKPT;..  va
3130: 5f 73 74 61 72 74 28 61 70 2c 20 6f 70 29 3b 0a  _start(ap, op);.
3140: 20 20 73 77 69 74 63 68 28 20 6f 70 20 29 7b 0a    switch( op ){.
3150: 0a 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 63 6f  .    /* Mutex co
3160: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
3170: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61  ons are only ava
3180: 69 6c 61 62 6c 65 20 69 6e 20 61 20 74 68 72 65  ilable in a thre
3190: 61 64 73 61 66 65 0a 20 20 20 20 2a 2a 20 63 6f  adsafe.    ** co
31a0: 6d 70 69 6c 65 2e 0a 20 20 20 20 2a 2f 0a 23 69  mpile..    */.#i
31b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
31c0: 5f 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  _THREADSAFE) && 
31d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
31e0: 45 3e 30 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 35  E>0  /* IMP: R-5
31f0: 34 34 36 36 2d 34 36 37 35 36 20 2a 2f 0a 20 20  4466-46756 */.  
3200: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
3210: 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48 52 45 41  NFIG_SINGLETHREA
3220: 44 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56  D: {.      /* EV
3230: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 37  IDENCE-OF: R-027
3240: 34 38 2d 31 39 30 39 36 20 54 68 69 73 20 6f 70  48-19096 This op
3250: 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20 74 68  tion sets the th
3260: 72 65 61 64 69 6e 67 20 6d 6f 64 65 20 74 6f 0a  reading mode to.
3270: 20 20 20 20 20 20 2a 2a 20 53 69 6e 67 6c 65 2d        ** Single-
3280: 74 68 72 65 61 64 2e 20 2a 2f 0a 20 20 20 20 20  thread. */.     
3290: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
32a0: 6e 66 69 67 2e 62 43 6f 72 65 4d 75 74 65 78 20  nfig.bCoreMutex 
32b0: 3d 20 30 3b 20 20 2f 2a 20 44 69 73 61 62 6c 65  = 0;  /* Disable
32c0: 20 6d 75 74 65 78 20 6f 6e 20 63 6f 72 65 20 2a   mutex on core *
32d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
32e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 46 75 6c  lobalConfig.bFul
32f0: 6c 4d 75 74 65 78 20 3d 20 30 3b 20 20 2f 2a 20  lMutex = 0;  /* 
3300: 44 69 73 61 62 6c 65 20 6d 75 74 65 78 20 6f 6e  Disable mutex on
3310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
3320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3330: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
3340: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
3350: 45 41 44 53 41 46 45 29 20 26 26 20 53 51 4c 49  EADSAFE) && SQLI
3360: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3e 30 20  TE_THREADSAFE>0 
3370: 2f 2a 20 49 4d 50 3a 20 52 2d 32 30 35 32 30 2d  /* IMP: R-20520-
3380: 35 34 30 38 36 20 2a 2f 0a 20 20 20 20 63 61 73  54086 */.    cas
3390: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
33a0: 4d 55 4c 54 49 54 48 52 45 41 44 3a 20 7b 0a 20  MULTITHREAD: {. 
33b0: 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45       /* EVIDENCE
33c0: 2d 4f 46 3a 20 52 2d 31 34 33 37 34 2d 34 32 34  -OF: R-14374-424
33d0: 36 38 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 73  68 This option s
33e0: 65 74 73 20 74 68 65 20 74 68 72 65 61 64 69 6e  ets the threadin
33f0: 67 20 6d 6f 64 65 20 74 6f 0a 20 20 20 20 20 20  g mode to.      
3400: 2a 2a 20 4d 75 6c 74 69 2d 74 68 72 65 61 64 2e  ** Multi-thread.
3410: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
3420: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 43  3GlobalConfig.bC
3430: 6f 72 65 4d 75 74 65 78 20 3d 20 31 3b 20 20 2f  oreMutex = 1;  /
3440: 2a 20 45 6e 61 62 6c 65 20 6d 75 74 65 78 20 6f  * Enable mutex o
3450: 6e 20 63 6f 72 65 20 2a 2f 0a 20 20 20 20 20 20  n core */.      
3460: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
3470: 66 69 67 2e 62 46 75 6c 6c 4d 75 74 65 78 20 3d  fig.bFullMutex =
3480: 20 30 3b 20 20 2f 2a 20 44 69 73 61 62 6c 65 20   0;  /* Disable 
3490: 6d 75 74 65 78 20 6f 6e 20 63 6f 6e 6e 65 63 74  mutex on connect
34a0: 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 20 20 62 72  ions */.      br
34b0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  eak;.    }.#endi
34c0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
34d0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29  LITE_THREADSAFE)
34e0: 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
34f0: 44 53 41 46 45 3e 30 20 2f 2a 20 49 4d 50 3a 20  DSAFE>0 /* IMP: 
3500: 52 2d 35 39 35 39 33 2d 32 31 38 31 30 20 2a 2f  R-59593-21810 */
3510: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
3520: 5f 43 4f 4e 46 49 47 5f 53 45 52 49 41 4c 49 5a  _CONFIG_SERIALIZ
3530: 45 44 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  ED: {.      /* E
3540: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 31  VIDENCE-OF: R-41
3550: 32 32 30 2d 35 31 38 30 30 20 54 68 69 73 20 6f  220-51800 This o
3560: 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20 74  ption sets the t
3570: 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 20 74 6f  hreading mode to
3580: 0a 20 20 20 20 20 20 2a 2a 20 53 65 72 69 61 6c  .      ** Serial
3590: 69 7a 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 73  ized. */.      s
35a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
35b0: 69 67 2e 62 43 6f 72 65 4d 75 74 65 78 20 3d 20  ig.bCoreMutex = 
35c0: 31 3b 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6d 75  1;  /* Enable mu
35d0: 74 65 78 20 6f 6e 20 63 6f 72 65 20 2a 2f 0a 20  tex on core */. 
35e0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
35f0: 61 6c 43 6f 6e 66 69 67 2e 62 46 75 6c 6c 4d 75  alConfig.bFullMu
3600: 74 65 78 20 3d 20 31 3b 20 20 2f 2a 20 45 6e 61  tex = 1;  /* Ena
3610: 62 6c 65 20 6d 75 74 65 78 20 6f 6e 20 63 6f 6e  ble mutex on con
3620: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  nections */.    
3630: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
3640: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
3650: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
3660: 41 46 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  AFE) && SQLITE_T
3670: 48 52 45 41 44 53 41 46 45 3e 30 20 2f 2a 20 49  HREADSAFE>0 /* I
3680: 4d 50 3a 20 52 2d 36 33 36 36 36 2d 34 38 37 35  MP: R-63666-4875
3690: 35 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51  5 */.    case SQ
36a0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55 54 45  LITE_CONFIG_MUTE
36b0: 58 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 53 70  X: {.      /* Sp
36c0: 65 63 69 66 79 20 61 6e 20 61 6c 74 65 72 6e 61  ecify an alterna
36d0: 74 69 76 65 20 6d 75 74 65 78 20 69 6d 70 6c 65  tive mutex imple
36e0: 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
36f0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
3700: 43 6f 6e 66 69 67 2e 6d 75 74 65 78 20 3d 20 2a  Config.mutex = *
3710: 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74  va_arg(ap, sqlit
3720: 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
3730: 2a 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  *);.      break;
3740: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
3750: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3760: 5f 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  _THREADSAFE) && 
3770: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
3780: 45 3e 30 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 34  E>0 /* IMP: R-14
3790: 34 35 30 2d 33 37 35 39 37 20 2a 2f 0a 20 20 20  450-37597 */.   
37a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
37b0: 46 49 47 5f 47 45 54 4d 55 54 45 58 3a 20 7b 0a  FIG_GETMUTEX: {.
37c0: 20 20 20 20 20 20 2f 2a 20 52 65 74 72 69 65 76        /* Retriev
37d0: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 75  e the current mu
37e0: 74 65 78 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  tex implementati
37f0: 6f 6e 20 2a 2f 0a 20 20 20 20 20 20 2a 76 61 5f  on */.      *va_
3800: 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33 5f  arg(ap, sqlite3_
3810: 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 2a 29 20  mutex_methods*) 
3820: 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  = sqlite3GlobalC
3830: 6f 6e 66 69 67 2e 6d 75 74 65 78 3b 0a 20 20 20  onfig.mutex;.   
3840: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
3850: 23 65 6e 64 69 66 0a 0a 20 20 20 20 63 61 73 65  #endif..    case
3860: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
3870: 41 4c 4c 4f 43 3a 20 7b 0a 20 20 20 20 20 20 2f  ALLOC: {.      /
3880: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
3890: 2d 35 35 35 39 34 2d 32 31 30 33 30 20 54 68 65  -55594-21030 The
38a0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
38b0: 41 4c 4c 4f 43 20 6f 70 74 69 6f 6e 20 74 61 6b  ALLOC option tak
38c0: 65 73 20 61 0a 20 20 20 20 20 20 2a 2a 20 73 69  es a.      ** si
38d0: 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  ngle argument wh
38e0: 69 63 68 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ich is a pointer
38f0: 20 74 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   to an instance 
3900: 6f 66 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  of the.      ** 
3910: 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
3920: 6f 64 73 20 73 74 72 75 63 74 75 72 65 2e 20 54  ods structure. T
3930: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 70 65 63  he argument spec
3940: 69 66 69 65 73 20 61 6c 74 65 72 6e 61 74 69 76  ifies alternativ
3950: 65 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 77 2d 6c  e.      ** low-l
3960: 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
3970: 63 61 74 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20  cation routines 
3980: 74 6f 20 62 65 20 75 73 65 64 20 69 6e 20 70 6c  to be used in pl
3990: 61 63 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ace of the memor
39a0: 79 0a 20 20 20 20 20 20 2a 2a 20 61 6c 6c 6f 63  y.      ** alloc
39b0: 61 74 69 6f 6e 20 72 6f 75 74 69 6e 65 73 20 62  ation routines b
39c0: 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65  uilt into SQLite
39d0: 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
39e0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d  e3GlobalConfig.m
39f0: 20 3d 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 73   = *va_arg(ap, s
3a00: 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
3a10: 64 73 2a 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ds*);.      brea
3a20: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
3a30: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
3a40: 47 45 54 4d 41 4c 4c 4f 43 3a 20 7b 0a 20 20 20  GETMALLOC: {.   
3a50: 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
3a60: 46 3a 20 52 2d 35 31 32 31 33 2d 34 36 34 31 34  F: R-51213-46414
3a70: 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46   The SQLITE_CONF
3a80: 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20 6f 70 74  IG_GETMALLOC opt
3a90: 69 6f 6e 20 74 61 6b 65 73 20 61 0a 20 20 20 20  ion takes a.    
3aa0: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75    ** single argu
3ab0: 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  ment which is a 
3ac0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e  pointer to an in
3ad0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 20 20  stance of the.  
3ae0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6d      ** sqlite3_m
3af0: 65 6d 5f 6d 65 74 68 6f 64 73 20 73 74 72 75 63  em_methods struc
3b00: 74 75 72 65 2e 20 54 68 65 20 73 71 6c 69 74 65  ture. The sqlite
3b10: 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 73 74  3_mem_methods st
3b20: 72 75 63 74 75 72 65 20 69 73 0a 20 20 20 20 20  ructure is.     
3b30: 20 2a 2a 20 66 69 6c 6c 65 64 20 77 69 74 68 20   ** filled with 
3b40: 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65  the currently de
3b50: 66 69 6e 65 64 20 6d 65 6d 6f 72 79 20 61 6c 6c  fined memory all
3b60: 6f 63 61 74 69 6f 6e 20 72 6f 75 74 69 6e 65 73  ocation routines
3b70: 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  . */.      if( s
3b80: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
3b90: 69 67 2e 6d 2e 78 4d 61 6c 6c 6f 63 3d 3d 30 20  ig.m.xMalloc==0 
3ba0: 29 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  ) sqlite3MemSetD
3bb0: 65 66 61 75 6c 74 28 29 3b 0a 20 20 20 20 20 20  efault();.      
3bc0: 2a 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69  *va_arg(ap, sqli
3bd0: 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a  te3_mem_methods*
3be0: 29 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ) = sqlite3Globa
3bf0: 6c 43 6f 6e 66 69 67 2e 6d 3b 0a 20 20 20 20 20  lConfig.m;.     
3c00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
3c10: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
3c20: 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 3a 20  NFIG_MEMSTATUS: 
3c30: 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45  {.      /* EVIDE
3c40: 4e 43 45 2d 4f 46 3a 20 52 2d 36 31 32 37 35 2d  NCE-OF: R-61275-
3c50: 33 35 31 35 37 20 54 68 65 20 53 51 4c 49 54 45  35157 The SQLITE
3c60: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
3c70: 53 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 0a 20  S option takes. 
3c80: 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 61       ** single a
3c90: 72 67 75 6d 65 6e 74 20 6f 66 20 74 79 70 65 20  rgument of type 
3ca0: 69 6e 74 2c 20 69 6e 74 65 72 70 72 65 74 65 64  int, interpreted
3cb0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 77   as a boolean, w
3cc0: 68 69 63 68 20 65 6e 61 62 6c 65 73 0a 20 20 20  hich enables.   
3cd0: 20 20 20 2a 2a 20 6f 72 20 64 69 73 61 62 6c 65     ** or disable
3ce0: 73 20 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  s the collection
3cf0: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
3d00: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
3d10: 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  . */.      sqlit
3d20: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62  e3GlobalConfig.b
3d30: 4d 65 6d 73 74 61 74 20 3d 20 76 61 5f 61 72 67  Memstat = va_arg
3d40: 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20  (ap, int);.     
3d50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
3d60: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
3d70: 4e 46 49 47 5f 53 43 52 41 54 43 48 3a 20 7b 0a  NFIG_SCRATCH: {.
3d80: 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43        /* EVIDENC
3d90: 45 2d 4f 46 3a 20 52 2d 30 38 34 30 34 2d 36 30  E-OF: R-08404-60
3da0: 38 38 37 20 54 68 65 72 65 20 61 72 65 20 74 68  887 There are th
3db0: 72 65 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ree arguments to
3dc0: 0a 20 20 20 20 20 20 2a 2a 20 53 51 4c 49 54 45  .      ** SQLITE
3dd0: 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54 43 48 3a  _CONFIG_SCRATCH:
3de0: 20 41 20 70 6f 69 6e 74 65 72 20 61 6e 20 38 2d   A pointer an 8-
3df0: 62 79 74 65 20 61 6c 69 67 6e 65 64 20 6d 65 6d  byte aligned mem
3e00: 6f 72 79 20 62 75 66 66 65 72 20 66 72 6f 6d 0a  ory buffer from.
3e10: 20 20 20 20 20 20 2a 2a 20 77 68 69 63 68 20 74        ** which t
3e20: 68 65 20 73 63 72 61 74 63 68 20 61 6c 6c 6f 63  he scratch alloc
3e30: 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 64  ations will be d
3e40: 72 61 77 6e 2c 20 74 68 65 20 73 69 7a 65 20 6f  rawn, the size o
3e50: 66 20 65 61 63 68 20 73 63 72 61 74 63 68 0a 20  f each scratch. 
3e60: 20 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69       ** allocati
3e70: 6f 6e 20 28 73 7a 29 2c 20 61 6e 64 20 74 68 65  on (sz), and the
3e80: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
3e90: 6f 66 20 73 63 72 61 74 63 68 20 61 6c 6c 6f 63  of scratch alloc
3ea0: 61 74 69 6f 6e 73 20 28 4e 29 2e 20 2a 2f 0a 20  ations (N). */. 
3eb0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
3ec0: 61 6c 43 6f 6e 66 69 67 2e 70 53 63 72 61 74 63  alConfig.pScratc
3ed0: 68 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76  h = va_arg(ap, v
3ee0: 6f 69 64 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c  oid*);.      sql
3ef0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
3f00: 2e 73 7a 53 63 72 61 74 63 68 20 3d 20 76 61 5f  .szScratch = va_
3f10: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
3f20: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
3f30: 6c 43 6f 6e 66 69 67 2e 6e 53 63 72 61 74 63 68  lConfig.nScratch
3f40: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e   = va_arg(ap, in
3f50: 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  t);.      break;
3f60: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
3f70: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41  SQLITE_CONFIG_PA
3f80: 47 45 43 41 43 48 45 3a 20 7b 0a 20 20 20 20 20  GECACHE: {.     
3f90: 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
3fa0: 20 52 2d 31 38 37 36 31 2d 33 36 36 30 31 20 54   R-18761-36601 T
3fb0: 68 65 72 65 20 61 72 65 20 74 68 72 65 65 20 61  here are three a
3fc0: 72 67 75 6d 65 6e 74 73 20 74 6f 0a 20 20 20 20  rguments to.    
3fd0: 20 20 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46    ** SQLITE_CONF
3fe0: 49 47 5f 50 41 47 45 43 41 43 48 45 3a 20 41 20  IG_PAGECACHE: A 
3ff0: 70 6f 69 6e 74 65 72 20 74 6f 20 38 2d 62 79 74  pointer to 8-byt
4000: 65 20 61 6c 69 67 6e 65 64 20 6d 65 6d 6f 72 79  e aligned memory
4010: 20 28 70 4d 65 6d 29 2c 0a 20 20 20 20 20 20 2a   (pMem),.      *
4020: 2a 20 74 68 65 20 73 69 7a 65 20 6f 66 20 65 61  * the size of ea
4030: 63 68 20 70 61 67 65 20 63 61 63 68 65 20 6c 69  ch page cache li
4040: 6e 65 20 28 73 7a 29 2c 20 61 6e 64 20 74 68 65  ne (sz), and the
4050: 20 6e 75 6d 62 65 72 20 6f 66 20 63 61 63 68 65   number of cache
4060: 20 6c 69 6e 65 73 0a 20 20 20 20 20 20 2a 2a 20   lines.      ** 
4070: 28 4e 29 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71  (N). */.      sq
4080: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
4090: 67 2e 70 50 61 67 65 20 3d 20 76 61 5f 61 72 67  g.pPage = va_arg
40a0: 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a 20 20 20  (ap, void*);.   
40b0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
40c0: 43 6f 6e 66 69 67 2e 73 7a 50 61 67 65 20 3d 20  Config.szPage = 
40d0: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
40e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
40f0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 50 61 67 65  obalConfig.nPage
4100: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e   = va_arg(ap, in
4110: 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  t);.      break;
4120: 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
4130: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43  SQLITE_CONFIG_PC
4140: 41 43 48 45 5f 48 44 52 53 5a 3a 20 7b 0a 20 20  ACHE_HDRSZ: {.  
4150: 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
4160: 4f 46 3a 20 52 2d 33 39 31 30 30 2d 32 37 33 31  OF: R-39100-2731
4170: 37 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e  7 The SQLITE_CON
4180: 46 49 47 5f 50 43 41 43 48 45 5f 48 44 52 53 5a  FIG_PCACHE_HDRSZ
4190: 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 0a 20 20   option takes.  
41a0: 20 20 20 20 2a 2a 20 61 20 73 69 6e 67 6c 65 20      ** a single 
41b0: 70 61 72 61 6d 65 74 65 72 20 77 68 69 63 68 20  parameter which 
41c0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
41d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 77  an integer and w
41e0: 72 69 74 65 73 20 69 6e 74 6f 0a 20 20 20 20 20  rites into.     
41f0: 20 2a 2a 20 74 68 61 74 20 69 6e 74 65 67 65 72   ** that integer
4200: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
4210: 78 74 72 61 20 62 79 74 65 73 20 70 65 72 20 70  xtra bytes per p
4220: 61 67 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  age required for
4230: 20 65 61 63 68 20 70 61 67 65 0a 20 20 20 20 20   each page.     
4240: 20 2a 2a 20 69 6e 20 53 51 4c 49 54 45 5f 43 4f   ** in SQLITE_CO
4250: 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 2e 20  NFIG_PAGECACHE. 
4260: 2a 2f 0a 20 20 20 20 20 20 2a 76 61 5f 61 72 67  */.      *va_arg
4270: 28 61 70 2c 20 69 6e 74 2a 29 20 3d 20 0a 20 20  (ap, int*) = .  
4280: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 48          sqlite3H
4290: 65 61 64 65 72 53 69 7a 65 42 74 72 65 65 28 29  eaderSizeBtree()
42a0: 20 2b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   +.          sql
42b0: 69 74 65 33 48 65 61 64 65 72 53 69 7a 65 50 63  ite3HeaderSizePc
42c0: 61 63 68 65 28 29 20 2b 0a 20 20 20 20 20 20 20  ache() +.       
42d0: 20 20 20 73 71 6c 69 74 65 33 48 65 61 64 65 72     sqlite3Header
42e0: 53 69 7a 65 50 63 61 63 68 65 31 28 29 3b 0a 20  SizePcache1();. 
42f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4300: 7d 0a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  }..    case SQLI
4310: 54 45 5f 43 4f 4e 46 49 47 5f 50 43 41 43 48 45  TE_CONFIG_PCACHE
4320: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 6e 6f 2d  : {.      /* no-
4330: 6f 70 20 2a 2f 0a 20 20 20 20 20 20 62 72 65 61  op */.      brea
4340: 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73  k;.    }.    cas
4350: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
4360: 47 45 54 50 43 41 43 48 45 3a 20 7b 0a 20 20 20  GETPCACHE: {.   
4370: 20 20 20 2f 2a 20 6e 6f 77 20 61 6e 20 65 72 72     /* now an err
4380: 6f 72 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d  or */.      rc =
4390: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
43a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
43b0: 7d 0a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  }..    case SQLI
43c0: 54 45 5f 43 4f 4e 46 49 47 5f 50 43 41 43 48 45  TE_CONFIG_PCACHE
43d0: 32 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56  2: {.      /* EV
43e0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 33 33  IDENCE-OF: R-633
43f0: 32 35 2d 34 38 33 37 38 20 54 68 65 20 53 51 4c  25-48378 The SQL
4400: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43 41 43 48  ITE_CONFIG_PCACH
4410: 45 32 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 20  E2 option takes 
4420: 61 0a 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c  a.      ** singl
4430: 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  e argument which
4440: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
4450: 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 63 61 63   an sqlite3_pcac
4460: 68 65 5f 6d 65 74 68 6f 64 73 32 0a 20 20 20 20  he_methods2.    
4470: 20 20 2a 2a 20 6f 62 6a 65 63 74 2e 20 54 68 69    ** object. Thi
4480: 73 20 6f 62 6a 65 63 74 20 73 70 65 63 69 66 69  s object specifi
4490: 65 73 20 74 68 65 20 69 6e 74 65 72 66 61 63 65  es the interface
44a0: 20 74 6f 20 61 20 63 75 73 74 6f 6d 20 70 61 67   to a custom pag
44b0: 65 20 63 61 63 68 65 0a 20 20 20 20 20 20 2a 2a  e cache.      **
44c0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
44d0: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
44e0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 63  3GlobalConfig.pc
44f0: 61 63 68 65 32 20 3d 20 2a 76 61 5f 61 72 67 28  ache2 = *va_arg(
4500: 61 70 2c 20 73 71 6c 69 74 65 33 5f 70 63 61 63  ap, sqlite3_pcac
4510: 68 65 5f 6d 65 74 68 6f 64 73 32 2a 29 3b 0a 20  he_methods2*);. 
4520: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4530: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
4540: 45 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41 43  E_CONFIG_GETPCAC
4550: 48 45 32 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20  HE2: {.      /* 
4560: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
4570: 32 30 33 35 2d 34 36 31 38 32 20 54 68 65 20 53  2035-46182 The S
4580: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54  QLITE_CONFIG_GET
4590: 50 43 41 43 48 45 32 20 6f 70 74 69 6f 6e 20 74  PCACHE2 option t
45a0: 61 6b 65 73 20 61 0a 20 20 20 20 20 20 2a 2a 20  akes a.      ** 
45b0: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20  single argument 
45c0: 77 68 69 63 68 20 69 73 20 61 20 70 6f 69 6e 74  which is a point
45d0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
45e0: 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
45f0: 0a 20 20 20 20 20 20 2a 2a 20 6f 62 6a 65 63 74  .      ** object
4600: 2e 20 53 51 4c 69 74 65 20 63 6f 70 69 65 73 20  . SQLite copies 
4610: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  of the current p
4620: 61 67 65 20 63 61 63 68 65 20 69 6d 70 6c 65 6d  age cache implem
4630: 65 6e 74 61 74 69 6f 6e 20 69 6e 74 6f 0a 20 20  entation into.  
4640: 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 62 6a 65      ** that obje
4650: 63 74 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ct. */.      if(
4660: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
4670: 6e 66 69 67 2e 70 63 61 63 68 65 32 2e 78 49 6e  nfig.pcache2.xIn
4680: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  it==0 ){.       
4690: 20 73 71 6c 69 74 65 33 50 43 61 63 68 65 53 65   sqlite3PCacheSe
46a0: 74 44 65 66 61 75 6c 74 28 29 3b 0a 20 20 20 20  tDefault();.    
46b0: 20 20 7d 0a 20 20 20 20 20 20 2a 76 61 5f 61 72    }.      *va_ar
46c0: 67 28 61 70 2c 20 73 71 6c 69 74 65 33 5f 70 63  g(ap, sqlite3_pc
46d0: 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 2a 29 20  ache_methods2*) 
46e0: 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  = sqlite3GlobalC
46f0: 6f 6e 66 69 67 2e 70 63 61 63 68 65 32 3b 0a 20  onfig.pcache2;. 
4700: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4710: 7d 0a 0a 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  }../* EVIDENCE-O
4720: 46 3a 20 52 2d 30 36 36 32 36 2d 31 32 39 31 31  F: R-06626-12911
4730: 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46   The SQLITE_CONF
4740: 49 47 5f 48 45 41 50 20 6f 70 74 69 6f 6e 20 69  IG_HEAP option i
4750: 73 20 6f 6e 6c 79 0a 2a 2a 20 61 76 61 69 6c 61  s only.** availa
4760: 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73  ble if SQLite is
4770: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 65   compiled with e
4780: 69 74 68 65 72 20 53 51 4c 49 54 45 5f 45 4e 41  ither SQLITE_ENA
4790: 42 4c 45 5f 4d 45 4d 53 59 53 33 20 6f 72 0a 2a  BLE_MEMSYS3 or.*
47a0: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
47b0: 4d 45 4d 53 59 53 35 20 61 6e 64 20 72 65 74 75  MEMSYS5 and retu
47c0: 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  rns SQLITE_ERROR
47d0: 20 69 66 20 69 6e 76 6f 6b 65 64 20 6f 74 68 65   if invoked othe
47e0: 72 77 69 73 65 2e 20 2a 2f 0a 23 69 66 20 64 65  rwise. */.#if de
47f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
4800: 42 4c 45 5f 4d 45 4d 53 59 53 33 29 20 7c 7c 20  BLE_MEMSYS3) || 
4810: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
4820: 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 29 0a 20  NABLE_MEMSYS5). 
4830: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
4840: 4f 4e 46 49 47 5f 48 45 41 50 3a 20 7b 0a 20 20  ONFIG_HEAP: {.  
4850: 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
4860: 4f 46 3a 20 52 2d 31 39 38 35 34 2d 34 32 31 32  OF: R-19854-4212
4870: 36 20 54 68 65 72 65 20 61 72 65 20 74 68 72 65  6 There are thre
4880: 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0a 20  e arguments to. 
4890: 20 20 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f 43       ** SQLITE_C
48a0: 4f 4e 46 49 47 5f 48 45 41 50 3a 20 41 6e 20 38  ONFIG_HEAP: An 8
48b0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20 70 6f  -byte aligned po
48c0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d  inter to the mem
48d0: 6f 72 79 2c 20 74 68 65 0a 20 20 20 20 20 20 2a  ory, the.      *
48e0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * number of byte
48f0: 73 20 69 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20  s in the memory 
4900: 62 75 66 66 65 72 2c 20 61 6e 64 20 74 68 65 20  buffer, and the 
4910: 6d 69 6e 69 6d 75 6d 20 61 6c 6c 6f 63 61 74 69  minimum allocati
4920: 6f 6e 20 73 69 7a 65 2e 0a 20 20 20 20 20 20 2a  on size..      *
4930: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
4940: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 48 65 61  lobalConfig.pHea
4950: 70 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76  p = va_arg(ap, v
4960: 6f 69 64 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c  oid*);.      sql
4970: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
4980: 2e 6e 48 65 61 70 20 3d 20 76 61 5f 61 72 67 28  .nHeap = va_arg(
4990: 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20  ap, int);.      
49a0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
49b0: 66 69 67 2e 6d 6e 52 65 71 20 3d 20 76 61 5f 61  fig.mnReq = va_a
49c0: 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 0a 20 20  rg(ap, int);..  
49d0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
49e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65  lobalConfig.mnRe
49f0: 71 3c 31 20 29 7b 0a 20 20 20 20 20 20 20 20 73  q<1 ){.        s
4a00: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
4a10: 69 67 2e 6d 6e 52 65 71 20 3d 20 31 3b 0a 20 20  ig.mnReq = 1;.  
4a20: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
4a30: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
4a40: 67 2e 6d 6e 52 65 71 3e 28 31 3c 3c 31 32 29 20  g.mnReq>(1<<12) 
4a50: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 61  ){.        /* ca
4a60: 70 20 6d 69 6e 20 72 65 71 75 65 73 74 20 73 69  p min request si
4a70: 7a 65 20 61 74 20 32 5e 31 32 20 2a 2f 0a 20 20  ze at 2^12 */.  
4a80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f        sqlite3Glo
4a90: 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65 71 20  balConfig.mnReq 
4aa0: 3d 20 28 31 3c 3c 31 32 29 3b 0a 20 20 20 20 20  = (1<<12);.     
4ab0: 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71   }..      if( sq
4ac0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
4ad0: 67 2e 70 48 65 61 70 3d 3d 30 20 29 7b 0a 20 20  g.pHeap==0 ){.  
4ae0: 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43        /* EVIDENC
4af0: 45 2d 4f 46 3a 20 52 2d 34 39 39 32 30 2d 36 30  E-OF: R-49920-60
4b00: 31 38 39 20 49 66 20 74 68 65 20 66 69 72 73 74  189 If the first
4b10: 20 70 6f 69 6e 74 65 72 20 28 74 68 65 20 6d 65   pointer (the me
4b20: 6d 6f 72 79 20 70 6f 69 6e 74 65 72 29 0a 20 20  mory pointer).  
4b30: 20 20 20 20 20 20 2a 2a 20 69 73 20 4e 55 4c 4c        ** is NULL
4b40: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 72 65  , then SQLite re
4b50: 76 65 72 74 73 20 74 6f 20 75 73 69 6e 67 20 69  verts to using i
4b60: 74 73 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  ts default memor
4b70: 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 20 20 20 20  y allocator.    
4b80: 20 20 20 20 2a 2a 20 28 74 68 65 20 73 79 73 74      ** (the syst
4b90: 65 6d 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  em malloc() impl
4ba0: 65 6d 65 6e 74 61 74 69 6f 6e 29 2c 20 75 6e 64  ementation), und
4bb0: 6f 69 6e 67 20 61 6e 79 20 70 72 69 6f 72 20 69  oing any prior i
4bc0: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
4bd0: 20 20 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f 43       ** SQLITE_C
4be0: 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43 2e 0a 20 20  ONFIG_MALLOC..  
4bf0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
4c00: 20 2a 2a 20 53 65 74 74 69 6e 67 20 73 71 6c 69   ** Setting sqli
4c10: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
4c20: 6d 20 74 6f 20 61 6c 6c 20 7a 65 72 6f 73 20 77  m to all zeros w
4c30: 69 6c 6c 20 63 61 75 73 65 20 6d 61 6c 6c 6f 63  ill cause malloc
4c40: 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 72   to.        ** r
4c50: 65 76 65 72 74 20 74 6f 20 69 74 73 20 64 65 66  evert to its def
4c60: 61 75 6c 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ault implementat
4c70: 69 6f 6e 20 77 68 65 6e 20 73 71 6c 69 74 65 33  ion when sqlite3
4c80: 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 69 73  _initialize() is
4c90: 20 72 75 6e 0a 20 20 20 20 20 20 20 20 2a 2f 0a   run.        */.
4ca0: 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26          memset(&
4cb0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4cc0: 66 69 67 2e 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  fig.m, 0, sizeof
4cd0: 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f  (sqlite3GlobalCo
4ce0: 6e 66 69 67 2e 6d 29 29 3b 0a 20 20 20 20 20 20  nfig.m));.      
4cf0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
4d00: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
4d10: 2d 36 31 30 30 36 2d 30 38 39 31 38 20 49 66 20  -61006-08918 If 
4d20: 74 68 65 20 6d 65 6d 6f 72 79 20 70 6f 69 6e 74  the memory point
4d30: 65 72 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  er is not NULL t
4d40: 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20  hen the.        
4d50: 2a 2a 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d  ** alternative m
4d60: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20  emory allocator 
4d70: 69 73 20 65 6e 67 61 67 65 64 20 74 6f 20 68 61  is engaged to ha
4d80: 6e 64 6c 65 20 61 6c 6c 20 6f 66 20 53 51 4c 69  ndle all of SQLi
4d90: 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 6d  tes.        ** m
4da0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
4db0: 20 6e 65 65 64 73 2e 20 2a 2f 0a 23 69 66 64 65   needs. */.#ifde
4dc0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
4dd0: 4d 45 4d 53 59 53 33 0a 20 20 20 20 20 20 20 20  MEMSYS3.        
4de0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4df0: 66 69 67 2e 6d 20 3d 20 2a 73 71 6c 69 74 65 33  fig.m = *sqlite3
4e00: 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 29 3b  MemGetMemsys3();
4e10: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4e20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
4e30: 53 59 53 35 0a 20 20 20 20 20 20 20 20 73 71 6c  SYS5.        sql
4e40: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
4e50: 2e 6d 20 3d 20 2a 73 71 6c 69 74 65 33 4d 65 6d  .m = *sqlite3Mem
4e60: 47 65 74 4d 65 6d 73 79 73 35 28 29 3b 0a 23 65  GetMemsys5();.#e
4e70: 6e 64 69 66 0a 20 20 20 20 20 20 7d 0a 20 20 20  ndif.      }.   
4e80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
4e90: 23 65 6e 64 69 66 0a 0a 20 20 20 20 63 61 73 65  #endif..    case
4ea0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c   SQLITE_CONFIG_L
4eb0: 4f 4f 4b 41 53 49 44 45 3a 20 7b 0a 20 20 20 20  OOKASIDE: {.    
4ec0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
4ed0: 6f 6e 66 69 67 2e 73 7a 4c 6f 6f 6b 61 73 69 64  onfig.szLookasid
4ee0: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  e = va_arg(ap, i
4ef0: 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nt);.      sqlit
4f00: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e  e3GlobalConfig.n
4f10: 4c 6f 6f 6b 61 73 69 64 65 20 3d 20 76 61 5f 61  Lookaside = va_a
4f20: 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20  rg(ap, int);.   
4f30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
4f40: 20 20 20 20 0a 20 20 20 20 2f 2a 20 52 65 63 6f      .    /* Reco
4f50: 72 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  rd a pointer to 
4f60: 74 68 65 20 6c 6f 67 67 65 72 20 66 75 6e 63 74  the logger funct
4f70: 69 6f 6e 20 61 6e 64 20 69 74 73 20 66 69 72 73  ion and its firs
4f80: 74 20 61 72 67 75 6d 65 6e 74 2e 0a 20 20 20 20  t argument..    
4f90: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69  ** The default i
4fa0: 73 20 4e 55 4c 4c 2e 20 20 4c 6f 67 67 69 6e 67  s NULL.  Logging
4fb0: 20 69 73 20 64 69 73 61 62 6c 65 64 20 69 66 20   is disabled if 
4fc0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  the function poi
4fd0: 6e 74 65 72 20 69 73 0a 20 20 20 20 2a 2a 20 4e  nter is.    ** N
4fe0: 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
4ff0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46  case SQLITE_CONF
5000: 49 47 5f 4c 4f 47 3a 20 7b 0a 20 20 20 20 20 20  IG_LOG: {.      
5010: 2f 2a 20 4d 53 56 43 20 69 73 20 70 69 63 6b 79  /* MSVC is picky
5020: 20 61 62 6f 75 74 20 70 75 6c 6c 69 6e 67 20 66   about pulling f
5030: 75 6e 63 20 70 74 72 73 20 66 72 6f 6d 20 76 61  unc ptrs from va
5040: 20 6c 69 73 74 73 2e 0a 20 20 20 20 20 20 2a 2a   lists..      **
5050: 20 68 74 74 70 3a 2f 2f 73 75 70 70 6f 72 74 2e   http://support.
5060: 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6b 62  microsoft.com/kb
5070: 2f 34 37 39 36 31 0a 20 20 20 20 20 20 2a 2a 20  /47961.      ** 
5080: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5090: 66 69 67 2e 78 4c 6f 67 20 3d 20 76 61 5f 61 72  fig.xLog = va_ar
50a0: 67 28 61 70 2c 20 76 6f 69 64 28 2a 29 28 76 6f  g(ap, void(*)(vo
50b0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
50c0: 61 72 2a 29 29 3b 0a 20 20 20 20 20 20 2a 2f 0a  ar*));.      */.
50d0: 20 20 20 20 20 20 74 79 70 65 64 65 66 20 76 6f        typedef vo
50e0: 69 64 28 2a 4c 4f 47 46 55 4e 43 5f 74 29 28 76  id(*LOGFUNC_t)(v
50f0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
5100: 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c  har*);.      sql
5110: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
5120: 2e 78 4c 6f 67 20 3d 20 76 61 5f 61 72 67 28 61  .xLog = va_arg(a
5130: 70 2c 20 4c 4f 47 46 55 4e 43 5f 74 29 3b 0a 20  p, LOGFUNC_t);. 
5140: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
5150: 61 6c 43 6f 6e 66 69 67 2e 70 4c 6f 67 41 72 67  alConfig.pLogArg
5160: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f   = va_arg(ap, vo
5170: 69 64 2a 29 3b 0a 20 20 20 20 20 20 62 72 65 61  id*);.      brea
5180: 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
5190: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
51a0: 35 35 35 34 38 2d 33 33 38 31 37 20 54 68 65 20  55548-33817 The 
51b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73 65 74  compile-time set
51c0: 74 69 6e 67 20 66 6f 72 20 55 52 49 20 66 69 6c  ting for URI fil
51d0: 65 6e 61 6d 65 73 0a 20 20 20 20 2a 2a 20 63 61  enames.    ** ca
51e0: 6e 20 62 65 20 63 68 61 6e 67 65 64 20 61 74 20  n be changed at 
51f0: 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e 67  start-time using
5200: 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71 6c 69   the.    ** sqli
5210: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
5220: 45 5f 43 4f 4e 46 49 47 5f 55 52 49 2c 31 29 20  E_CONFIG_URI,1) 
5230: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
5240: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
5250: 43 4f 4e 46 49 47 5f 55 52 49 2c 30 29 20 63 6f  CONFIG_URI,0) co
5260: 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 61 6c 6c  nfiguration call
5270: 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61  s..    */.    ca
5280: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  se SQLITE_CONFIG
5290: 5f 55 52 49 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  _URI: {.      /*
52a0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
52b0: 32 35 34 35 31 2d 36 31 31 32 35 20 54 68 65 20  25451-61125 The 
52c0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 55 52  SQLITE_CONFIG_UR
52d0: 49 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 20 61  I option takes a
52e0: 20 73 69 6e 67 6c 65 0a 20 20 20 20 20 20 2a 2a   single.      **
52f0: 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 74 79 70   argument of typ
5300: 65 20 69 6e 74 2e 20 49 66 20 6e 6f 6e 2d 7a 65  e int. If non-ze
5310: 72 6f 2c 20 74 68 65 6e 20 55 52 49 20 68 61 6e  ro, then URI han
5320: 64 6c 69 6e 67 20 69 73 20 67 6c 6f 62 61 6c 6c  dling is globall
5330: 79 0a 20 20 20 20 20 20 2a 2a 20 65 6e 61 62 6c  y.      ** enabl
5340: 65 64 2e 20 49 66 20 74 68 65 20 70 61 72 61 6d  ed. If the param
5350: 65 74 65 72 20 69 73 20 7a 65 72 6f 2c 20 74 68  eter is zero, th
5360: 65 6e 20 55 52 49 20 68 61 6e 64 6c 69 6e 67 20  en URI handling 
5370: 69 73 20 67 6c 6f 62 61 6c 6c 79 0a 20 20 20 20  is globally.    
5380: 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 2a    ** disabled. *
5390: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
53a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 4f 70 65  lobalConfig.bOpe
53b0: 6e 55 72 69 20 3d 20 76 61 5f 61 72 67 28 61 70  nUri = va_arg(ap
53c0: 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72  , int);.      br
53d0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
53e0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46  case SQLITE_CONF
53f0: 49 47 5f 43 4f 56 45 52 49 4e 47 5f 49 4e 44 45  IG_COVERING_INDE
5400: 58 5f 53 43 41 4e 3a 20 7b 0a 20 20 20 20 20 20  X_SCAN: {.      
5410: 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
5420: 52 2d 33 36 35 39 32 2d 30 32 37 37 32 20 54 68  R-36592-02772 Th
5430: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
5440: 43 4f 56 45 52 49 4e 47 5f 49 4e 44 45 58 5f 53  COVERING_INDEX_S
5450: 43 41 4e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74  CAN.      ** opt
5460: 69 6f 6e 20 74 61 6b 65 73 20 61 20 73 69 6e 67  ion takes a sing
5470: 6c 65 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  le integer argum
5480: 65 6e 74 20 77 68 69 63 68 20 69 73 20 69 6e 74  ent which is int
5490: 65 72 70 72 65 74 65 64 20 61 73 20 61 0a 20 20  erpreted as a.  
54a0: 20 20 20 20 2a 2a 20 62 6f 6f 6c 65 61 6e 20 69      ** boolean i
54b0: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c  n order to enabl
54c0: 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65  e or disable the
54d0: 20 75 73 65 20 6f 66 20 63 6f 76 65 72 69 6e 67   use of covering
54e0: 20 69 6e 64 69 63 65 73 20 66 6f 72 0a 20 20 20   indices for.   
54f0: 20 20 20 2a 2a 20 66 75 6c 6c 20 74 61 62 6c 65     ** full table
5500: 20 73 63 61 6e 73 20 69 6e 20 74 68 65 20 71 75   scans in the qu
5510: 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 2e 20 2a  ery optimizer. *
5520: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
5530: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 55 73 65  lobalConfig.bUse
5540: 43 69 73 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  Cis = va_arg(ap,
5550: 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65   int);.      bre
5560: 61 6b 3b 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  ak;.    }..#ifde
5570: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5580: 53 51 4c 4c 4f 47 0a 20 20 20 20 63 61 73 65 20  SQLLOG.    case 
5590: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 51  SQLITE_CONFIG_SQ
55a0: 4c 4c 4f 47 3a 20 7b 0a 20 20 20 20 20 20 74 79  LLOG: {.      ty
55b0: 70 65 64 65 66 20 76 6f 69 64 28 2a 53 51 4c 4c  pedef void(*SQLL
55c0: 4f 47 46 55 4e 43 5f 74 29 28 76 6f 69 64 2a 2c  OGFUNC_t)(void*,
55d0: 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
55e0: 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
55f0: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
5600: 6c 43 6f 6e 66 69 67 2e 78 53 71 6c 6c 6f 67 20  lConfig.xSqllog 
5610: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 53 51 4c  = va_arg(ap, SQL
5620: 4c 4f 47 46 55 4e 43 5f 74 29 3b 0a 20 20 20 20  LOGFUNC_t);.    
5630: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
5640: 6f 6e 66 69 67 2e 70 53 71 6c 6c 6f 67 41 72 67  onfig.pSqllogArg
5650: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f   = va_arg(ap, vo
5660: 69 64 20 2a 29 3b 0a 20 20 20 20 20 20 62 72 65  id *);.      bre
5670: 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ak;.    }.#endif
5680: 0a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ..    case SQLIT
5690: 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49  E_CONFIG_MMAP_SI
56a0: 5a 45 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  ZE: {.      /* E
56b0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 38  VIDENCE-OF: R-58
56c0: 30 36 33 2d 33 38 32 35 38 20 53 51 4c 49 54 45  063-38258 SQLITE
56d0: 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a  _CONFIG_MMAP_SIZ
56e0: 45 20 74 61 6b 65 73 20 74 77 6f 20 36 34 2d 62  E takes two 64-b
56f0: 69 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 74 65  it.      ** inte
5700: 67 65 72 20 28 73 71 6c 69 74 65 33 5f 69 6e 74  ger (sqlite3_int
5710: 36 34 29 20 76 61 6c 75 65 73 20 74 68 61 74 20  64) values that 
5720: 61 72 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  are the default 
5730: 6d 6d 61 70 20 73 69 7a 65 20 6c 69 6d 69 74 0a  mmap size limit.
5740: 20 20 20 20 20 20 2a 2a 20 28 74 68 65 20 64 65        ** (the de
5750: 66 61 75 6c 74 20 73 65 74 74 69 6e 67 20 66 6f  fault setting fo
5760: 72 20 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73 69  r PRAGMA mmap_si
5770: 7a 65 29 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ze) and the maxi
5780: 6d 75 6d 20 61 6c 6c 6f 77 65 64 0a 20 20 20 20  mum allowed.    
5790: 20 20 2a 2a 20 6d 6d 61 70 20 73 69 7a 65 20 6c    ** mmap size l
57a0: 69 6d 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 73  imit. */.      s
57b0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
57c0: 6d 61 70 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  map = va_arg(ap,
57d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b   sqlite3_int64);
57e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
57f0: 6e 74 36 34 20 6d 78 4d 6d 61 70 20 3d 20 76 61  nt64 mxMmap = va
5800: 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33  _arg(ap, sqlite3
5810: 5f 69 6e 74 36 34 29 3b 0a 20 20 20 20 20 20 2f  _int64);.      /
5820: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
5830: 2d 35 33 33 36 37 2d 34 33 31 39 30 20 49 66 20  -53367-43190 If 
5840: 65 69 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20  either argument 
5850: 74 6f 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  to this option i
5860: 73 0a 20 20 20 20 20 20 2a 2a 20 6e 65 67 61 74  s.      ** negat
5870: 69 76 65 2c 20 74 68 65 6e 20 74 68 61 74 20 61  ive, then that a
5880: 72 67 75 6d 65 6e 74 20 69 73 20 63 68 61 6e 67  rgument is chang
5890: 65 64 20 74 6f 20 69 74 73 20 63 6f 6d 70 69 6c  ed to its compil
58a0: 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a  e-time default..
58b0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
58c0: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
58d0: 2d 33 34 39 39 33 2d 34 35 30 33 31 20 54 68 65  -34993-45031 The
58e0: 20 6d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   maximum allowed
58f0: 20 6d 6d 61 70 20 73 69 7a 65 20 77 69 6c 6c 20   mmap size will 
5900: 62 65 0a 20 20 20 20 20 20 2a 2a 20 73 69 6c 65  be.      ** sile
5910: 6e 74 6c 79 20 74 72 75 6e 63 61 74 65 64 20 69  ntly truncated i
5920: 66 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  f necessary so t
5930: 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  hat it does not 
5940: 65 78 63 65 65 64 20 74 68 65 0a 20 20 20 20 20  exceed the.     
5950: 20 2a 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   ** compile-time
5960: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
5970: 7a 65 20 73 65 74 20 62 79 20 74 68 65 20 53 51  ze set by the SQ
5980: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5990: 5a 45 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  ZE.      ** comp
59a0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
59b0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
59c0: 69 66 28 20 6d 78 4d 6d 61 70 3c 30 20 7c 7c 20  if( mxMmap<0 || 
59d0: 6d 78 4d 6d 61 70 3e 53 51 4c 49 54 45 5f 4d 41  mxMmap>SQLITE_MA
59e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 29 7b 0a 20  X_MMAP_SIZE ){. 
59f0: 20 20 20 20 20 20 20 6d 78 4d 6d 61 70 20 3d 20         mxMmap = 
5a00: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5a10: 53 49 5a 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20  SIZE;.      }.  
5a20: 20 20 20 20 69 66 28 20 73 7a 4d 6d 61 70 3c 30      if( szMmap<0
5a30: 20 29 20 73 7a 4d 6d 61 70 20 3d 20 53 51 4c 49   ) szMmap = SQLI
5a40: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5a50: 53 49 5a 45 3b 0a 20 20 20 20 20 20 69 66 28 20  SIZE;.      if( 
5a60: 73 7a 4d 6d 61 70 3e 6d 78 4d 6d 61 70 29 20 73  szMmap>mxMmap) s
5a70: 7a 4d 6d 61 70 20 3d 20 6d 78 4d 6d 61 70 3b 0a  zMmap = mxMmap;.
5a80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f        sqlite3Glo
5a90: 62 61 6c 43 6f 6e 66 69 67 2e 6d 78 4d 6d 61 70  balConfig.mxMmap
5aa0: 20 3d 20 6d 78 4d 6d 61 70 3b 0a 20 20 20 20 20   = mxMmap;.     
5ab0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
5ac0: 6e 66 69 67 2e 73 7a 4d 6d 61 70 20 3d 20 73 7a  nfig.szMmap = sz
5ad0: 4d 6d 61 70 3b 0a 20 20 20 20 20 20 62 72 65 61  Mmap;.      brea
5ae0: 6b 3b 0a 20 20 20 20 7d 0a 0a 23 69 66 20 53 51  k;.    }..#if SQ
5af0: 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20 64  LITE_OS_WIN && d
5b00: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
5b10: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 2f 2a 20 49  N32_MALLOC) /* I
5b20: 4d 50 3a 20 52 2d 30 34 37 38 30 2d 35 35 38 31  MP: R-04780-5581
5b30: 35 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51  5 */.    case SQ
5b40: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 57 49 4e 33  LITE_CONFIG_WIN3
5b50: 32 5f 48 45 41 50 53 49 5a 45 3a 20 7b 0a 20 20  2_HEAPSIZE: {.  
5b60: 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
5b70: 4f 46 3a 20 52 2d 33 34 39 32 36 2d 30 33 33 36  OF: R-34926-0336
5b80: 30 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  0 SQLITE_CONFIG_
5b90: 57 49 4e 33 32 5f 48 45 41 50 53 49 5a 45 20 74  WIN32_HEAPSIZE t
5ba0: 61 6b 65 73 20 61 20 33 32 2d 62 69 74 0a 20 20  akes a 32-bit.  
5bb0: 20 20 20 20 2a 2a 20 75 6e 73 69 67 6e 65 64 20      ** unsigned 
5bc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74 68  integer value th
5bd0: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
5be0: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
5bf0: 20 74 68 65 20 63 72 65 61 74 65 64 0a 20 20 20   the created.   
5c00: 20 20 20 2a 2a 20 68 65 61 70 2e 20 2a 2f 0a 20     ** heap. */. 
5c10: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
5c20: 61 6c 43 6f 6e 66 69 67 2e 6e 48 65 61 70 20 3d  alConfig.nHeap =
5c30: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
5c40: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
5c50: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5c60: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
5c70: 46 49 47 5f 50 4d 41 53 5a 3a 20 7b 0a 20 20 20  FIG_PMASZ: {.   
5c80: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
5c90: 43 6f 6e 66 69 67 2e 73 7a 50 6d 61 20 3d 20 76  Config.szPma = v
5ca0: 61 5f 61 72 67 28 61 70 2c 20 75 6e 73 69 67 6e  a_arg(ap, unsign
5cb0: 65 64 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62  ed int);.      b
5cc0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
5cd0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
5ce0: 46 49 47 5f 53 54 4d 54 4a 52 4e 4c 5f 53 50 49  FIG_STMTJRNL_SPI
5cf0: 4c 4c 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  LL: {.      sqli
5d00: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
5d10: 6e 53 74 6d 74 53 70 69 6c 6c 20 3d 20 76 61 5f  nStmtSpill = va_
5d20: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
5d30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
5d40: 0a 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b  ..    default: {
5d50: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
5d60: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
5d70: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
5d80: 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20  .  va_end(ap);. 
5d90: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
5da0: 2a 0a 2a 2a 20 53 65 74 20 75 70 20 74 68 65 20  *.** Set up the 
5db0: 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
5dc0: 73 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  s for a database
5dd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2a 20   connection..** 
5de0: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  Return SQLITE_OK
5df0: 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 20 0a 2a   on success.  .*
5e00: 2a 20 49 66 20 6c 6f 6f 6b 61 73 69 64 65 20 69  * If lookaside i
5e10: 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
5e20: 2c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  , return SQLITE_
5e30: 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  BUSY..**.** The 
5e40: 73 7a 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  sz parameter is 
5e50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
5e60: 74 65 73 20 69 6e 20 65 61 63 68 20 6c 6f 6f 6b  tes in each look
5e70: 61 73 69 64 65 20 73 6c 6f 74 2e 0a 2a 2a 20 54  aside slot..** T
5e80: 68 65 20 63 6e 74 20 70 61 72 61 6d 65 74 65 72  he cnt parameter
5e90: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
5ea0: 66 20 73 6c 6f 74 73 2e 20 20 49 66 20 70 53 74  f slots.  If pSt
5eb0: 61 72 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 0a  art is NULL the.
5ec0: 2a 2a 20 73 70 61 63 65 20 66 6f 72 20 74 68 65  ** space for the
5ed0: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
5ee0: 79 20 69 73 20 6f 62 74 61 69 6e 65 64 20 66 72  y is obtained fr
5ef0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
5f00: 63 28 29 2e 0a 2a 2a 20 49 66 20 70 53 74 61 72  c()..** If pStar
5f10: 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  t is not NULL th
5f20: 65 6e 20 69 74 20 69 73 20 73 7a 2a 63 6e 74 20  en it is sz*cnt 
5f30: 62 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  bytes of memory 
5f40: 74 6f 20 75 73 65 20 66 6f 72 0a 2a 2a 20 74 68  to use for.** th
5f50: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  e lookaside memo
5f60: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ry..*/.static in
5f70: 74 20 73 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65  t setupLookaside
5f80: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f  (sqlite3 *db, vo
5f90: 69 64 20 2a 70 42 75 66 2c 20 69 6e 74 20 73 7a  id *pBuf, int sz
5fa0: 2c 20 69 6e 74 20 63 6e 74 29 7b 0a 23 69 66 6e  , int cnt){.#ifn
5fb0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
5fc0: 4c 4f 4f 4b 41 53 49 44 45 0a 20 20 76 6f 69 64  LOOKASIDE.  void
5fd0: 20 2a 70 53 74 61 72 74 3b 0a 20 20 69 66 28 20   *pStart;.  if( 
5fe0: 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 6e 4f  db->lookaside.nO
5ff0: 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ut ){.    return
6000: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
6010: 7d 0a 20 20 2f 2a 20 46 72 65 65 20 61 6e 79 20  }.  /* Free any 
6020: 65 78 69 73 74 69 6e 67 20 6c 6f 6f 6b 61 73 69  existing lookasi
6030: 64 65 20 62 75 66 66 65 72 20 66 6f 72 20 74 68  de buffer for th
6040: 69 73 20 68 61 6e 64 6c 65 20 62 65 66 6f 72 65  is handle before
6050: 0a 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6e 67  .  ** allocating
6060: 20 61 20 6e 65 77 20 6f 6e 65 20 73 6f 20 77 65   a new one so we
6070: 20 64 6f 6e 27 74 20 68 61 76 65 20 74 6f 20 68   don't have to h
6080: 61 76 65 20 73 70 61 63 65 20 66 6f 72 20 0a 20  ave space for . 
6090: 20 2a 2a 20 62 6f 74 68 20 61 74 20 74 68 65 20   ** both at the 
60a0: 73 61 6d 65 20 74 69 6d 65 2e 0a 20 20 2a 2f 0a  same time..  */.
60b0: 20 20 69 66 28 20 64 62 2d 3e 6c 6f 6f 6b 61 73    if( db->lookas
60c0: 69 64 65 2e 62 4d 61 6c 6c 6f 63 65 64 20 29 7b  ide.bMalloced ){
60d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
60e0: 65 28 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  e(db->lookaside.
60f0: 70 53 74 61 72 74 29 3b 0a 20 20 7d 0a 20 20 2f  pStart);.  }.  /
6100: 2a 20 54 68 65 20 73 69 7a 65 20 6f 66 20 61 20  * The size of a 
6110: 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 20 61  lookaside slot a
6120: 66 74 65 72 20 52 4f 55 4e 44 44 4f 57 4e 38 20  fter ROUNDDOWN8 
6130: 6e 65 65 64 73 20 74 6f 20 62 65 20 6c 61 72 67  needs to be larg
6140: 65 72 0a 20 20 2a 2a 20 74 68 61 6e 20 61 20 70  er.  ** than a p
6150: 6f 69 6e 74 65 72 20 74 6f 20 62 65 20 75 73 65  ointer to be use
6160: 66 75 6c 2e 0a 20 20 2a 2f 0a 20 20 73 7a 20 3d  ful..  */.  sz =
6170: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 73 7a 29 3b   ROUNDDOWN8(sz);
6180: 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 33 30 33    /* IMP: R-3303
6190: 38 2d 30 39 33 38 32 20 2a 2f 0a 20 20 69 66 28  8-09382 */.  if(
61a0: 20 73 7a 3c 3d 28 69 6e 74 29 73 69 7a 65 6f 66   sz<=(int)sizeof
61b0: 28 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 2a 29  (LookasideSlot*)
61c0: 20 29 20 73 7a 20 3d 20 30 3b 0a 20 20 69 66 28   ) sz = 0;.  if(
61d0: 20 63 6e 74 3c 30 20 29 20 63 6e 74 20 3d 20 30   cnt<0 ) cnt = 0
61e0: 3b 0a 20 20 69 66 28 20 73 7a 3d 3d 30 20 7c 7c  ;.  if( sz==0 ||
61f0: 20 63 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 73   cnt==0 ){.    s
6200: 7a 20 3d 20 30 3b 0a 20 20 20 20 70 53 74 61 72  z = 0;.    pStar
6210: 74 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69  t = 0;.  }else i
6220: 66 28 20 70 42 75 66 3d 3d 30 20 29 7b 0a 20 20  f( pBuf==0 ){.  
6230: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
6240: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
6250: 20 20 70 53 74 61 72 74 20 3d 20 73 71 6c 69 74    pStart = sqlit
6260: 65 33 4d 61 6c 6c 6f 63 28 20 73 7a 2a 63 6e 74  e3Malloc( sz*cnt
6270: 20 29 3b 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36   );  /* IMP: R-6
6280: 31 39 34 39 2d 33 35 37 32 37 20 2a 2f 0a 20 20  1949-35727 */.  
6290: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
62a0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20  gnMalloc();.    
62b0: 69 66 28 20 70 53 74 61 72 74 20 29 20 63 6e 74  if( pStart ) cnt
62c0: 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63   = sqlite3Malloc
62d0: 53 69 7a 65 28 70 53 74 61 72 74 29 2f 73 7a 3b  Size(pStart)/sz;
62e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 53  .  }else{.    pS
62f0: 74 61 72 74 20 3d 20 70 42 75 66 3b 0a 20 20 7d  tart = pBuf;.  }
6300: 0a 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65  .  db->lookaside
6310: 2e 70 53 74 61 72 74 20 3d 20 70 53 74 61 72 74  .pStart = pStart
6320: 3b 0a 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64  ;.  db->lookasid
6330: 65 2e 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 64  e.pFree = 0;.  d
6340: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 73 7a 20  b->lookaside.sz 
6350: 3d 20 28 75 31 36 29 73 7a 3b 0a 20 20 69 66 28  = (u16)sz;.  if(
6360: 20 70 53 74 61 72 74 20 29 7b 0a 20 20 20 20 69   pStart ){.    i
6370: 6e 74 20 69 3b 0a 20 20 20 20 4c 6f 6f 6b 61 73  nt i;.    Lookas
6380: 69 64 65 53 6c 6f 74 20 2a 70 3b 0a 20 20 20 20  ideSlot *p;.    
6390: 61 73 73 65 72 74 28 20 73 7a 20 3e 20 28 69 6e  assert( sz > (in
63a0: 74 29 73 69 7a 65 6f 66 28 4c 6f 6f 6b 61 73 69  t)sizeof(Lookasi
63b0: 64 65 53 6c 6f 74 2a 29 20 29 3b 0a 20 20 20 20  deSlot*) );.    
63c0: 70 20 3d 20 28 4c 6f 6f 6b 61 73 69 64 65 53 6c  p = (LookasideSl
63d0: 6f 74 2a 29 70 53 74 61 72 74 3b 0a 20 20 20 20  ot*)pStart;.    
63e0: 66 6f 72 28 69 3d 63 6e 74 2d 31 3b 20 69 3e 3d  for(i=cnt-1; i>=
63f0: 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 20 20 70  0; i--){.      p
6400: 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 6c 6f  ->pNext = db->lo
6410: 6f 6b 61 73 69 64 65 2e 70 46 72 65 65 3b 0a 20  okaside.pFree;. 
6420: 20 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69       db->lookasi
6430: 64 65 2e 70 46 72 65 65 20 3d 20 70 3b 0a 20 20  de.pFree = p;.  
6440: 20 20 20 20 70 20 3d 20 28 4c 6f 6f 6b 61 73 69      p = (Lookasi
6450: 64 65 53 6c 6f 74 2a 29 26 28 28 75 38 2a 29 70  deSlot*)&((u8*)p
6460: 29 5b 73 7a 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  )[sz];.    }.   
6470: 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 70   db->lookaside.p
6480: 45 6e 64 20 3d 20 70 3b 0a 20 20 20 20 64 62 2d  End = p;.    db-
6490: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73 61  >lookaside.bDisa
64a0: 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d  ble = 0;.    db-
64b0: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 4d 61 6c 6c  >lookaside.bMall
64c0: 6f 63 65 64 20 3d 20 70 42 75 66 3d 3d 30 20 3f  oced = pBuf==0 ?
64d0: 31 3a 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1:0;.  }else{.  
64e0: 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e    db->lookaside.
64f0: 70 53 74 61 72 74 20 3d 20 64 62 3b 0a 20 20 20  pStart = db;.   
6500: 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 70   db->lookaside.p
6510: 45 6e 64 20 3d 20 64 62 3b 0a 20 20 20 20 64 62  End = db;.    db
6520: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73  ->lookaside.bDis
6530: 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 64 62  able = 1;.    db
6540: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 4d 61 6c  ->lookaside.bMal
6550: 6c 6f 63 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 23  loced = 0;.  }.#
6560: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
6570: 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44 45 20 2a  OMIT_LOOKASIDE *
6580: 2f 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  /.  return SQLIT
6590: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  E_OK;.}../*.** R
65a0: 65 74 75 72 6e 20 74 68 65 20 6d 75 74 65 78 20  eturn the mutex 
65b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
65c0: 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
65d0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 71 6c 69 74 65  ction..*/.sqlite
65e0: 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
65f0: 5f 64 62 5f 6d 75 74 65 78 28 73 71 6c 69 74 65  _db_mutex(sqlite
6600: 33 20 2a 64 62 29 7b 0a 23 69 66 64 65 66 20 53  3 *db){.#ifdef S
6610: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
6620: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
6630: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
6640: 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
6650: 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
6660: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
6670: 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rn 0;.  }.#endif
6680: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6d 75  .  return db->mu
6690: 74 65 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72  tex;.}../*.** Fr
66a0: 65 65 20 75 70 20 61 73 20 6d 75 63 68 20 6d 65  ee up as much me
66b0: 6d 6f 72 79 20 61 73 20 77 65 20 63 61 6e 20 66  mory as we can f
66c0: 72 6f 6d 20 74 68 65 20 67 69 76 65 6e 20 64 61  rom the given da
66d0: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
66e0: 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  tion..*/.int sql
66f0: 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
6700: 6d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 20 2a  memory(sqlite3 *
6710: 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 0a 23  db){.  int i;..#
6720: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
6730: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
6740: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
6750: 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20  tyCheckOk(db) ) 
6760: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
6770: 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
6780: 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  f.  sqlite3_mute
6790: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
67a0: 78 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72  x);.  sqlite3Btr
67b0: 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a  eeEnterAll(db);.
67c0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
67d0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
67e0: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d  Btree *pBt = db-
67f0: 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
6800: 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
6810: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
6820: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
6830: 67 65 72 28 70 42 74 29 3b 0a 20 20 20 20 20 20  ger(pBt);.      
6840: 73 71 6c 69 74 65 33 50 61 67 65 72 53 68 72 69  sqlite3PagerShri
6850: 6e 6b 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  nk(pPager);.    
6860: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  }.  }.  sqlite3B
6870: 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29  treeLeaveAll(db)
6880: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
6890: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
68a0: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  x);.  return SQL
68b0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
68c0: 20 46 6c 75 73 68 20 61 6e 79 20 64 69 72 74 79   Flush any dirty
68d0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70 61   pages in the pa
68e0: 67 65 72 2d 63 61 63 68 65 20 66 6f 72 20 61 6e  ger-cache for an
68f0: 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
6900: 61 73 65 0a 2a 2a 20 74 6f 20 64 69 73 6b 2e 0a  ase.** to disk..
6910: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 64  */.int sqlite3_d
6920: 62 5f 63 61 63 68 65 66 6c 75 73 68 28 73 71 6c  b_cacheflush(sql
6930: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
6940: 20 69 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   i;.  int rc = S
6950: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 6e 74 20  QLITE_OK;.  int 
6960: 62 53 65 65 6e 42 75 73 79 20 3d 20 30 3b 0a 0a  bSeenBusy = 0;..
6970: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
6980: 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
6990: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
69a0: 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
69b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
69c0: 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64  ISUSE_BKPT;.#end
69d0: 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
69e0: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
69f0: 65 78 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  ex);.  sqlite3Bt
6a00: 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b  reeEnterAll(db);
6a10: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
6a20: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64  SQLITE_OK && i<d
6a30: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
6a40: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 64    Btree *pBt = d
6a50: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
6a60: 20 20 20 69 66 28 20 70 42 74 20 26 26 20 73 71     if( pBt && sq
6a70: 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72  lite3BtreeIsInTr
6a80: 61 6e 73 28 70 42 74 29 20 29 7b 0a 20 20 20 20  ans(pBt) ){.    
6a90: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
6aa0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
6ab0: 67 65 72 28 70 42 74 29 3b 0a 20 20 20 20 20 20  ger(pBt);.      
6ac0: 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
6ad0: 72 46 6c 75 73 68 28 70 50 61 67 65 72 29 3b 0a  rFlush(pPager);.
6ae0: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
6af0: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
6b00: 20 20 20 20 20 62 53 65 65 6e 42 75 73 79 20 3d       bSeenBusy =
6b10: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   1;.        rc =
6b20: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
6b30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
6b40: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
6b50: 65 41 6c 6c 28 64 62 29 3b 0a 20 20 73 71 6c 69  eAll(db);.  sqli
6b60: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
6b70: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
6b80: 74 75 72 6e 20 28 28 72 63 3d 3d 53 51 4c 49 54  turn ((rc==SQLIT
6b90: 45 5f 4f 4b 20 26 26 20 62 53 65 65 6e 42 75 73  E_OK && bSeenBus
6ba0: 79 29 20 3f 20 53 51 4c 49 54 45 5f 42 55 53 59  y) ? SQLITE_BUSY
6bb0: 20 3a 20 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   : rc);.}../*.**
6bc0: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   Configuration s
6bd0: 65 74 74 69 6e 67 73 20 66 6f 72 20 61 6e 20 69  ettings for an i
6be0: 6e 64 69 76 69 64 75 61 6c 20 64 61 74 61 62 61  ndividual databa
6bf0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2f  se connection.*/
6c00: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 62 5f  .int sqlite3_db_
6c10: 63 6f 6e 66 69 67 28 73 71 6c 69 74 65 33 20 2a  config(sqlite3 *
6c20: 64 62 2c 20 69 6e 74 20 6f 70 2c 20 2e 2e 2e 29  db, int op, ...)
6c30: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
6c40: 20 20 69 6e 74 20 72 63 3b 0a 20 20 76 61 5f 73    int rc;.  va_s
6c50: 74 61 72 74 28 61 70 2c 20 6f 70 29 3b 0a 20 20  tart(ap, op);.  
6c60: 73 77 69 74 63 68 28 20 6f 70 20 29 7b 0a 20 20  switch( op ){.  
6c70: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 42    case SQLITE_DB
6c80: 43 4f 4e 46 49 47 5f 4d 41 49 4e 44 42 4e 41 4d  CONFIG_MAINDBNAM
6c90: 45 3a 20 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  E: {.      db->a
6ca0: 44 62 5b 30 5d 2e 7a 44 62 53 4e 61 6d 65 20 3d  Db[0].zDbSName =
6cb0: 20 76 61 5f 61 72 67 28 61 70 2c 63 68 61 72 2a   va_arg(ap,char*
6cc0: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
6cd0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62  LITE_OK;.      b
6ce0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
6cf0: 63 61 73 65 20 53 51 4c 49 54 45 5f 44 42 43 4f  case SQLITE_DBCO
6d00: 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45 3a 20  NFIG_LOOKASIDE: 
6d10: 7b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 42  {.      void *pB
6d20: 75 66 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  uf = va_arg(ap, 
6d30: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 4d 50 3a 20  void*); /* IMP: 
6d40: 52 2d 32 36 38 33 35 2d 31 30 39 36 34 20 2a 2f  R-26835-10964 */
6d50: 0a 20 20 20 20 20 20 69 6e 74 20 73 7a 20 3d 20  .      int sz = 
6d60: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
6d70: 20 20 20 20 20 20 20 2f 2a 20 49 4d 50 3a 20 52         /* IMP: R
6d80: 2d 34 37 38 37 31 2d 32 35 39 39 34 20 2a 2f 0a  -47871-25994 */.
6d90: 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20        int cnt = 
6da0: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
6db0: 20 20 20 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d        /* IMP: R-
6dc0: 30 34 34 36 30 2d 35 33 33 38 36 20 2a 2f 0a 20  04460-53386 */. 
6dd0: 20 20 20 20 20 72 63 20 3d 20 73 65 74 75 70 4c       rc = setupL
6de0: 6f 6f 6b 61 73 69 64 65 28 64 62 2c 20 70 42 75  ookaside(db, pBu
6df0: 66 2c 20 73 7a 2c 20 63 6e 74 29 3b 0a 20 20 20  f, sz, cnt);.   
6e00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
6e10: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
6e20: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
6e30: 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20  t struct {.     
6e40: 20 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20     int op;      
6e50: 2f 2a 20 54 68 65 20 6f 70 63 6f 64 65 20 2a 2f  /* The opcode */
6e60: 0a 20 20 20 20 20 20 20 20 75 33 32 20 6d 61 73  .        u32 mas
6e70: 6b 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66  k;    /* Mask of
6e80: 20 74 68 65 20 62 69 74 20 69 6e 20 73 71 6c 69   the bit in sqli
6e90: 74 65 33 2e 66 6c 61 67 73 20 74 6f 20 73 65 74  te3.flags to set
6ea0: 2f 63 6c 65 61 72 20 2a 2f 0a 20 20 20 20 20 20  /clear */.      
6eb0: 7d 20 61 46 6c 61 67 4f 70 5b 5d 20 3d 20 7b 0a  } aFlagOp[] = {.
6ec0: 20 20 20 20 20 20 20 20 7b 20 53 51 4c 49 54 45          { SQLITE
6ed0: 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
6ee0: 5f 46 4b 45 59 2c 20 20 20 20 20 20 20 20 20 20  _FKEY,          
6ef0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
6f00: 65 79 73 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  eys    },.      
6f10: 20 20 7b 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e    { SQLITE_DBCON
6f20: 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47  FIG_ENABLE_TRIGG
6f30: 45 52 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54  ER,        SQLIT
6f40: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
6f50: 20 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 53 51   },.        { SQ
6f60: 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
6f70: 41 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49  ABLE_FTS3_TOKENI
6f80: 5a 45 52 2c 20 53 51 4c 49 54 45 5f 46 74 73 33  ZER, SQLITE_Fts3
6f90: 54 6f 6b 65 6e 69 7a 65 72 20 20 7d 2c 0a 20 20  Tokenizer  },.  
6fa0: 20 20 20 20 20 20 7b 20 53 51 4c 49 54 45 5f 44        { SQLITE_D
6fb0: 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c  BCONFIG_ENABLE_L
6fc0: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 2c 20 53  OAD_EXTENSION, S
6fd0: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
6fe0: 69 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 20 20 20  ion  },.        
6ff0: 7b 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  { SQLITE_DBCONFI
7000: 47 5f 4e 4f 5f 43 4b 50 54 5f 4f 4e 5f 43 4c 4f  G_NO_CKPT_ON_CLO
7010: 53 45 2c 20 20 20 20 20 20 53 51 4c 49 54 45 5f  SE,      SQLITE_
7020: 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 7d  NoCkptOnClose  }
7030: 2c 0a 20 20 20 20 20 20 20 20 7b 20 53 51 4c 49  ,.        { SQLI
7040: 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
7050: 4c 45 5f 51 50 53 47 2c 20 20 20 20 20 20 20 20  LE_QPSG,        
7060: 20 20 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65     SQLITE_Enable
7070: 51 50 53 47 20 20 20 20 20 7d 2c 0a 20 20 20 20  QPSG     },.    
7080: 20 20 7d 3b 0a 20 20 20 20 20 20 75 6e 73 69 67    };.      unsig
7090: 6e 65 64 20 69 6e 74 20 69 3b 0a 20 20 20 20 20  ned int i;.     
70a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
70b0: 4f 52 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 34 32  OR; /* IMP: R-42
70c0: 37 39 30 2d 32 33 33 37 32 20 2a 2f 0a 20 20 20  790-23372 */.   
70d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72     for(i=0; i<Ar
70e0: 72 61 79 53 69 7a 65 28 61 46 6c 61 67 4f 70 29  raySize(aFlagOp)
70f0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
7100: 69 66 28 20 61 46 6c 61 67 4f 70 5b 69 5d 2e 6f  if( aFlagOp[i].o
7110: 70 3d 3d 6f 70 20 29 7b 0a 20 20 20 20 20 20 20  p==op ){.       
7120: 20 20 20 69 6e 74 20 6f 6e 6f 66 66 20 3d 20 76     int onoff = v
7130: 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a  a_arg(ap, int);.
7140: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 2a 70            int *p
7150: 52 65 73 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  Res = va_arg(ap,
7160: 20 69 6e 74 2a 29 3b 0a 20 20 20 20 20 20 20 20   int*);.        
7170: 20 20 69 6e 74 20 6f 6c 64 46 6c 61 67 73 20 3d    int oldFlags =
7180: 20 64 62 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20   db->flags;.    
7190: 20 20 20 20 20 20 69 66 28 20 6f 6e 6f 66 66 3e        if( onoff>
71a0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
71b0: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 61 46   db->flags |= aF
71c0: 6c 61 67 4f 70 5b 69 5d 2e 6d 61 73 6b 3b 0a 20  lagOp[i].mask;. 
71d0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69           }else i
71e0: 66 28 20 6f 6e 6f 66 66 3d 3d 30 20 29 7b 0a 20  f( onoff==0 ){. 
71f0: 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66             db->f
7200: 6c 61 67 73 20 26 3d 20 7e 61 46 6c 61 67 4f 70  lags &= ~aFlagOp
7210: 5b 69 5d 2e 6d 61 73 6b 3b 0a 20 20 20 20 20 20  [i].mask;.      
7220: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
7230: 69 66 28 20 6f 6c 64 46 6c 61 67 73 21 3d 64 62  if( oldFlags!=db
7240: 2d 3e 66 6c 61 67 73 20 29 7b 0a 20 20 20 20 20  ->flags ){.     
7250: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
7260: 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
7270: 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
7280: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7290: 20 20 69 66 28 20 70 52 65 73 20 29 7b 0a 20 20    if( pRes ){.  
72a0: 20 20 20 20 20 20 20 20 20 20 2a 70 52 65 73 20            *pRes 
72b0: 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61  = (db->flags & a
72c0: 46 6c 61 67 4f 70 5b 69 5d 2e 6d 61 73 6b 29 21  FlagOp[i].mask)!
72d0: 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  =0;.          }.
72e0: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
72f0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
7300: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
7310: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
7320: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
7330: 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29    }.  va_end(ap)
7340: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
7350: 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  .../*.** Return 
7360: 74 72 75 65 20 69 66 20 74 68 65 20 62 75 66 66  true if the buff
7370: 65 72 20 7a 5b 30 2e 2e 6e 2d 31 5d 20 63 6f 6e  er z[0..n-1] con
7380: 74 61 69 6e 73 20 61 6c 6c 20 73 70 61 63 65 73  tains all spaces
7390: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
73a0: 61 6c 6c 53 70 61 63 65 73 28 63 6f 6e 73 74 20  allSpaces(const 
73b0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b  char *z, int n){
73c0: 0a 20 20 77 68 69 6c 65 28 20 6e 3e 30 20 26 26  .  while( n>0 &&
73d0: 20 7a 5b 6e 2d 31 5d 3d 3d 27 20 27 20 29 7b 20   z[n-1]==' ' ){ 
73e0: 6e 2d 2d 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20  n--; }.  return 
73f0: 6e 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  n==0;.}../*.** T
7400: 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
7410: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  lt collating fun
7420: 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e  ction named "BIN
7430: 41 52 59 22 20 77 68 69 63 68 20 69 73 20 61 6c  ARY" which is al
7440: 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c  ways.** availabl
7450: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
7460: 70 61 64 46 6c 61 67 20 61 72 67 75 6d 65 6e 74  padFlag argument
7470: 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
7480: 6e 20 73 70 61 63 65 20 70 61 64 64 69 6e 67 20  n space padding 
7490: 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66  at the end.** of
74a0: 20 73 74 72 69 6e 67 73 20 69 73 20 69 67 6e 6f   strings is igno
74b0: 72 65 64 2e 20 20 54 68 69 73 20 69 6d 70 6c 65  red.  This imple
74c0: 6d 65 6e 74 73 20 74 68 65 20 52 54 52 49 4d 20  ments the RTRIM 
74d0: 63 6f 6c 6c 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  collation..*/.st
74e0: 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c 6c  atic int binColl
74f0: 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 61  Func(.  void *pa
7500: 64 46 6c 61 67 2c 0a 20 20 69 6e 74 20 6e 4b 65  dFlag,.  int nKe
7510: 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y1, const void *
7520: 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65  pKey1,.  int nKe
7530: 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  y2, const void *
7540: 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72  pKey2.){.  int r
7550: 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79  c, n;.  n = nKey
7560: 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20  1<nKey2 ? nKey1 
7570: 3a 20 6e 4b 65 79 32 3b 0a 20 20 2f 2a 20 45 56  : nKey2;.  /* EV
7580: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 35 30  IDENCE-OF: R-650
7590: 33 33 2d 32 38 34 34 39 20 54 68 65 20 62 75 69  33-28449 The bui
75a0: 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c  lt-in BINARY col
75b0: 6c 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 0a  lation compares.
75c0: 20 20 2a 2a 20 73 74 72 69 6e 67 73 20 62 79 74    ** strings byt
75d0: 65 20 62 79 20 62 79 74 65 20 75 73 69 6e 67 20  e by byte using 
75e0: 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e  the memcmp() fun
75f0: 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73  ction from the s
7600: 74 61 6e 64 61 72 64 20 43 0a 20 20 2a 2a 20 6c  tandard C.  ** l
7610: 69 62 72 61 72 79 2e 20 2a 2f 0a 20 20 61 73 73  ibrary. */.  ass
7620: 65 72 74 28 20 70 4b 65 79 31 20 26 26 20 70 4b  ert( pKey1 && pK
7630: 65 79 32 20 29 3b 0a 20 20 72 63 20 3d 20 6d 65  ey2 );.  rc = me
7640: 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79  mcmp(pKey1, pKey
7650: 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d  2, n);.  if( rc=
7660: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 61  =0 ){.    if( pa
7670: 64 46 6c 61 67 0a 20 20 20 20 20 26 26 20 61 6c  dFlag.     && al
7680: 6c 53 70 61 63 65 73 28 28 28 63 68 61 72 2a 29  lSpaces(((char*)
7690: 70 4b 65 79 31 29 2b 6e 2c 20 6e 4b 65 79 31 2d  pKey1)+n, nKey1-
76a0: 6e 29 0a 20 20 20 20 20 26 26 20 61 6c 6c 53 70  n).     && allSp
76b0: 61 63 65 73 28 28 28 63 68 61 72 2a 29 70 4b 65  aces(((char*)pKe
76c0: 79 32 29 2b 6e 2c 20 6e 4b 65 79 32 2d 6e 29 0a  y2)+n, nKey2-n).
76d0: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
76e0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
76f0: 31 36 32 34 2d 32 34 37 33 37 20 52 54 52 49 4d  1624-24737 RTRIM
7700: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
7710: 65 78 63 65 70 74 20 74 68 61 74 20 65 78 74 72  except that extr
7720: 61 0a 20 20 20 20 20 20 2a 2a 20 73 70 61 63 65  a.      ** space
7730: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
7740: 65 69 74 68 65 72 20 73 74 72 69 6e 67 20 64 6f  either string do
7750: 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
7760: 72 65 73 75 6c 74 2e 20 49 6e 20 6f 74 68 65 72  result. In other
7770: 0a 20 20 20 20 20 20 2a 2a 20 77 6f 72 64 73 2c  .      ** words,
7780: 20 73 74 72 69 6e 67 73 20 77 69 6c 6c 20 63 6f   strings will co
7790: 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f  mpare equal to o
77a0: 6e 65 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f  ne another as lo
77b0: 6e 67 20 61 73 20 74 68 65 79 0a 20 20 20 20 20  ng as they.     
77c0: 20 2a 2a 20 64 69 66 66 65 72 20 6f 6e 6c 79 20   ** differ only 
77d0: 69 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  in the number of
77e0: 20 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65   spaces at the e
77f0: 6e 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  nd..      */.   
7800: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
7810: 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32   = nKey1 - nKey2
7820: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
7830: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
7840: 2a 20 41 6e 6f 74 68 65 72 20 62 75 69 6c 74 2d  * Another built-
7850: 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  in collating seq
7860: 75 65 6e 63 65 3a 20 4e 4f 43 41 53 45 2e 20 0a  uence: NOCASE. .
7870: 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 6f 6c 6c 61  **.** This colla
7880: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
7890: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20   intended to be 
78a0: 75 73 65 64 20 66 6f 72 20 22 63 61 73 65 20 69  used for "case i
78b0: 6e 64 65 70 65 6e 64 65 6e 74 0a 2a 2a 20 63 6f  ndependent.** co
78c0: 6d 70 61 72 69 73 6f 6e 22 2e 20 53 51 4c 69 74  mparison". SQLit
78d0: 65 27 73 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66  e's knowledge of
78e0: 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72   upper and lower
78f0: 20 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74   case equivalent
7900: 73 0a 2a 2a 20 65 78 74 65 6e 64 73 20 6f 6e 6c  s.** extends onl
7910: 79 20 74 6f 20 74 68 65 20 32 36 20 63 68 61 72  y to the 26 char
7920: 61 63 74 65 72 73 20 75 73 65 64 20 69 6e 20 74  acters used in t
7930: 68 65 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he English langu
7940: 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 41 74 20 74 68  age..**.** At th
7950: 65 20 6d 6f 6d 65 6e 74 20 74 68 65 72 65 20 69  e moment there i
7960: 73 20 6f 6e 6c 79 20 61 20 55 54 46 2d 38 20 69  s only a UTF-8 i
7970: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
7980: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6e 6f 63  /.static int noc
7990: 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63  aseCollatingFunc
79a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
79b0: 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20  d,.  int nKey1, 
79c0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
79d0: 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20  1,.  int nKey2, 
79e0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79  const void *pKey
79f0: 32 0a 29 7b 0a 20 20 69 6e 74 20 72 20 3d 20 73  2.){.  int r = s
7a00: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 0a  qlite3StrNICmp(.
7a10: 20 20 20 20 20 20 28 63 6f 6e 73 74 20 63 68 61        (const cha
7a20: 72 20 2a 29 70 4b 65 79 31 2c 20 28 63 6f 6e 73  r *)pKey1, (cons
7a30: 74 20 63 68 61 72 20 2a 29 70 4b 65 79 32 2c 20  t char *)pKey2, 
7a40: 28 6e 4b 65 79 31 3c 6e 4b 65 79 32 29 3f 6e 4b  (nKey1<nKey2)?nK
7a50: 65 79 31 3a 6e 4b 65 79 32 29 3b 0a 20 20 55 4e  ey1:nKey2);.  UN
7a60: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e  USED_PARAMETER(N
7a70: 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28 20 30  otUsed);.  if( 0
7a80: 3d 3d 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e  ==r ){.    r = n
7a90: 4b 65 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a  Key1-nKey2;.  }.
7aa0: 20 20 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f    return r;.}../
7ab0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
7ac0: 52 4f 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73  ROWID of the mos
7ad0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a  t recent insert.
7ae0: 2a 2f 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  */.sqlite_int64 
7af0: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
7b00: 65 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65  ert_rowid(sqlite
7b10: 33 20 2a 64 62 29 7b 0a 23 69 66 64 65 66 20 53  3 *db){.#ifdef S
7b20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
7b30: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
7b40: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
7b50: 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
7b60: 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
7b70: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
7b80: 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rn 0;.  }.#endif
7b90: 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61  .  return db->la
7ba0: 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a  stRowid;.}../*.*
7bb0: 2a 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  * Set the value 
7bc0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
7bd0: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
7be0: 65 72 74 5f 72 6f 77 69 64 28 29 20 41 50 49 20  ert_rowid() API 
7bf0: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69  function..*/.voi
7c00: 64 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 6c 61  d sqlite3_set_la
7c10: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
7c20: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 73 71 6c  sqlite3 *db, sql
7c30: 69 74 65 33 5f 69 6e 74 36 34 20 69 52 6f 77 69  ite3_int64 iRowi
7c40: 64 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  d){.#ifdef SQLIT
7c50: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
7c60: 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  OR.  if( !sqlite
7c70: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64  3SafetyCheckOk(d
7c80: 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29  b) ){.    (void)
7c90: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
7ca0: 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a  PT;.    return;.
7cb0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
7cc0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
7cd0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 64  (db->mutex);.  d
7ce0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  b->lastRowid = i
7cf0: 52 6f 77 69 64 3b 0a 20 20 73 71 6c 69 74 65 33  Rowid;.  sqlite3
7d00: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7d10: 3e 6d 75 74 65 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  >mutex);.}../*.*
7d20: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
7d30: 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69  ber of changes i
7d40: 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
7d50: 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  t call to sqlite
7d60: 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74  3_exec()..*/.int
7d70: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
7d80: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23  (sqlite3 *db){.#
7d90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
7da0: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
7db0: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
7dc0: 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
7dd0: 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54  .    (void)SQLIT
7de0: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
7df0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
7e00: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
7e10: 20 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a   db->nChange;.}.
7e20: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
7e30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
7e40: 67 65 73 20 73 69 6e 63 65 20 74 68 65 20 64 61  ges since the da
7e50: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 77 61  tabase handle wa
7e60: 73 20 6f 70 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74  s opened..*/.int
7e70: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7e80: 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
7e90: 64 62 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  db){.#ifdef SQLI
7ea0: 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
7eb0: 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
7ec0: 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
7ed0: 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  db) ){.    (void
7ee0: 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42  )SQLITE_MISUSE_B
7ef0: 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  KPT;.    return 
7f00: 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  0;.  }.#endif.  
7f10: 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74 61  return db->nTota
7f20: 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  lChange;.}../*.*
7f30: 2a 20 43 6c 6f 73 65 20 61 6c 6c 20 6f 70 65 6e  * Close all open
7f40: 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 54 68 69   savepoints. Thi
7f50: 73 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 6c 79 20  s function only 
7f60: 6d 61 6e 69 70 75 6c 61 74 65 73 20 66 69 65 6c  manipulates fiel
7f70: 64 73 20 6f 66 20 74 68 65 0a 2a 2a 20 64 61 74  ds of the.** dat
7f80: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 6f 62 6a  abase handle obj
7f90: 65 63 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  ect, it does not
7fa0: 20 63 6c 6f 73 65 20 61 6e 79 20 73 61 76 65 70   close any savep
7fb0: 6f 69 6e 74 73 20 74 68 61 74 20 6d 61 79 20 62  oints that may b
7fc0: 65 20 6f 70 65 6e 0a 2a 2a 20 61 74 20 74 68 65  e open.** at the
7fd0: 20 62 2d 74 72 65 65 2f 70 61 67 65 72 20 6c 65   b-tree/pager le
7fe0: 76 65 6c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  vel..*/.void sql
7ff0: 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
8000: 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  nts(sqlite3 *db)
8010: 7b 0a 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70  {.  while( db->p
8020: 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
8030: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
8040: 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
8050: 74 3b 0a 20 20 20 20 64 62 2d 3e 70 53 61 76 65  t;.    db->pSave
8060: 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
8070: 65 78 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ext;.    sqlite3
8080: 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
8090: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6e 53 61 76  ;.  }.  db->nSav
80a0: 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 64 62  epoint = 0;.  db
80b0: 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 20 3d 20 30  ->nStatement = 0
80c0: 3b 0a 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  ;.  db->isTransa
80d0: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
80e0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76   0;.}../*.** Inv
80f0: 6f 6b 65 20 74 68 65 20 64 65 73 74 72 75 63 74  oke the destruct
8100: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 61 73 73 6f  or function asso
8110: 63 69 61 74 65 64 20 77 69 74 68 20 46 75 6e 63  ciated with Func
8120: 44 65 66 20 70 2c 20 69 66 20 61 6e 79 2e 20 45  Def p, if any. E
8130: 78 63 65 70 74 2c 0a 2a 2a 20 69 66 20 74 68 69  xcept,.** if thi
8140: 73 20 69 73 20 6e 6f 74 20 74 68 65 20 6c 61 73  s is not the las
8150: 74 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66 75  t copy of the fu
8160: 6e 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 69  nction, do not i
8170: 6e 76 6f 6b 65 20 69 74 2e 20 4d 75 6c 74 69 70  nvoke it. Multip
8180: 6c 65 0a 2a 2a 20 63 6f 70 69 65 73 20 6f 66 20  le.** copies of 
8190: 61 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f  a single functio
81a0: 6e 20 61 72 65 20 63 72 65 61 74 65 64 20 77 68  n are created wh
81b0: 65 6e 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  en create_functi
81c0: 6f 6e 28 29 20 69 73 20 63 61 6c 6c 65 64 0a 2a  on() is called.*
81d0: 2a 20 77 69 74 68 20 53 51 4c 49 54 45 5f 41 4e  * with SQLITE_AN
81e0: 59 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  Y as the encodin
81f0: 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  g..*/.static voi
8200: 64 20 66 75 6e 63 74 69 6f 6e 44 65 73 74 72 6f  d functionDestro
8210: 79 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 46  y(sqlite3 *db, F
8220: 75 6e 63 44 65 66 20 2a 70 29 7b 0a 20 20 46 75  uncDef *p){.  Fu
8230: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
8240: 65 73 74 72 75 63 74 6f 72 20 3d 20 70 2d 3e 75  estructor = p->u
8250: 2e 70 44 65 73 74 72 75 63 74 6f 72 3b 0a 20 20  .pDestructor;.  
8260: 69 66 28 20 70 44 65 73 74 72 75 63 74 6f 72 20  if( pDestructor 
8270: 29 7b 0a 20 20 20 20 70 44 65 73 74 72 75 63 74  ){.    pDestruct
8280: 6f 72 2d 3e 6e 52 65 66 2d 2d 3b 0a 20 20 20 20  or->nRef--;.    
8290: 69 66 28 20 70 44 65 73 74 72 75 63 74 6f 72 2d  if( pDestructor-
82a0: 3e 6e 52 65 66 3d 3d 30 20 29 7b 0a 20 20 20 20  >nRef==0 ){.    
82b0: 20 20 70 44 65 73 74 72 75 63 74 6f 72 2d 3e 78    pDestructor->x
82c0: 44 65 73 74 72 6f 79 28 70 44 65 73 74 72 75 63  Destroy(pDestruc
82d0: 74 6f 72 2d 3e 70 55 73 65 72 44 61 74 61 29 3b  tor->pUserData);
82e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
82f0: 46 72 65 65 28 64 62 2c 20 70 44 65 73 74 72 75  Free(db, pDestru
8300: 63 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ctor);.    }.  }
8310: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 63 6f 6e  .}../*.** Discon
8320: 6e 65 63 74 20 61 6c 6c 20 73 71 6c 69 74 65 33  nect all sqlite3
8330: 5f 76 74 61 62 20 6f 62 6a 65 63 74 73 20 74 68  _vtab objects th
8340: 61 74 20 62 65 6c 6f 6e 67 20 74 6f 20 64 61 74  at belong to dat
8350: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8360: 0a 2a 2a 20 64 62 2e 20 54 68 69 73 20 69 73 20  .** db. This is 
8370: 63 61 6c 6c 65 64 20 77 68 65 6e 20 64 62 20 69  called when db i
8380: 73 20 62 65 69 6e 67 20 63 6c 6f 73 65 64 2e 0a  s being closed..
8390: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64  */.static void d
83a0: 69 73 63 6f 6e 6e 65 63 74 41 6c 6c 56 74 61 62  isconnectAllVtab
83b0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23  (sqlite3 *db){.#
83c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
83d0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
83e0: 20 20 69 6e 74 20 69 3b 0a 20 20 48 61 73 68 45    int i;.  HashE
83f0: 6c 65 6d 20 2a 70 3b 0a 20 20 73 71 6c 69 74 65  lem *p;.  sqlite
8400: 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64  3BtreeEnterAll(d
8410: 62 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  b);.  for(i=0; i
8420: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
8430: 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
8440: 65 6d 61 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  ema = db->aDb[i]
8450: 2e 70 53 63 68 65 6d 61 3b 0a 20 20 20 20 69 66  .pSchema;.    if
8460: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63  ( db->aDb[i].pSc
8470: 68 65 6d 61 20 29 7b 0a 20 20 20 20 20 20 66 6f  hema ){.      fo
8480: 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(p=sqliteHashFi
8490: 72 73 74 28 26 70 53 63 68 65 6d 61 2d 3e 74 62  rst(&pSchema->tb
84a0: 6c 48 61 73 68 29 3b 20 70 3b 20 70 3d 73 71 6c  lHash); p; p=sql
84b0: 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b  iteHashNext(p)){
84c0: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
84d0: 70 54 61 62 20 3d 20 28 54 61 62 6c 65 20 2a 29  pTab = (Table *)
84e0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
84f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 49  );.        if( I
8500: 73 56 69 72 74 75 61 6c 28 70 54 61 62 29 20 29  sVirtual(pTab) )
8510: 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
8520: 6f 6e 6e 65 63 74 28 64 62 2c 20 70 54 61 62 29  onnect(db, pTab)
8530: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8540: 20 20 7d 0a 20 20 66 6f 72 28 70 3d 73 71 6c 69    }.  for(p=sqli
8550: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
8560: 3e 61 4d 6f 64 75 6c 65 29 3b 20 70 3b 20 70 3d  >aModule); p; p=
8570: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70  sqliteHashNext(p
8580: 29 29 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20 2a  )){.    Module *
8590: 70 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20 2a  pMod = (Module *
85a0: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
85b0: 70 29 3b 0a 20 20 20 20 69 66 28 20 70 4d 6f 64  p);.    if( pMod
85c0: 2d 3e 70 45 70 6f 54 61 62 20 29 7b 0a 20 20 20  ->pEpoTab ){.   
85d0: 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 44 69     sqlite3VtabDi
85e0: 73 63 6f 6e 6e 65 63 74 28 64 62 2c 20 70 4d 6f  sconnect(db, pMo
85f0: 64 2d 3e 70 45 70 6f 54 61 62 29 3b 0a 20 20 20  d->pEpoTab);.   
8600: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
8610: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 64  VtabUnlockList(d
8620: 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72  b);.  sqlite3Btr
8630: 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a  eeLeaveAll(db);.
8640: 23 65 6c 73 65 0a 20 20 55 4e 55 53 45 44 5f 50  #else.  UNUSED_P
8650: 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 23 65  ARAMETER(db);.#e
8660: 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ndif.}../*.** Re
8670: 74 75 72 6e 20 54 52 55 45 20 69 66 20 64 61 74  turn TRUE if dat
8680: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8690: 20 64 62 20 68 61 73 20 75 6e 66 69 6e 61 6c 69   db has unfinali
86a0: 7a 65 64 20 70 72 65 70 61 72 65 64 0a 2a 2a 20  zed prepared.** 
86b0: 73 74 61 74 65 6d 65 6e 74 73 20 6f 72 20 75 6e  statements or un
86c0: 66 69 6e 69 73 68 65 64 20 73 71 6c 69 74 65 33  finished sqlite3
86d0: 5f 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 2e  _backup objects.
86e0: 20 20 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74    .*/.static int
86f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 49 73 42 75 73   connectionIsBus
8700: 79 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  y(sqlite3 *db){.
8710: 20 20 69 6e 74 20 6a 3b 0a 20 20 61 73 73 65 72    int j;.  asser
8720: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
8730: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
8740: 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 70 56   );.  if( db->pV
8750: 64 62 65 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  dbe ) return 1;.
8760: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d    for(j=0; j<db-
8770: 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  >nDb; j++){.    
8780: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d  Btree *pBt = db-
8790: 3e 61 44 62 5b 6a 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[j].pBt;.   
87a0: 20 69 66 28 20 70 42 74 20 26 26 20 73 71 6c 69   if( pBt && sqli
87b0: 74 65 33 42 74 72 65 65 49 73 49 6e 42 61 63 6b  te3BtreeIsInBack
87c0: 75 70 28 70 42 74 29 20 29 20 72 65 74 75 72 6e  up(pBt) ) return
87d0: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
87e0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f   0;.}../*.** Clo
87f0: 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 53  se an existing S
8800: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a 2a  QLite database.*
8810: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
8820: 69 74 65 33 43 6c 6f 73 65 28 73 71 6c 69 74 65  ite3Close(sqlite
8830: 33 20 2a 64 62 2c 20 69 6e 74 20 66 6f 72 63 65  3 *db, int force
8840: 5a 6f 6d 62 69 65 29 7b 0a 20 20 69 66 28 20 21  Zombie){.  if( !
8850: 64 62 20 29 7b 0a 20 20 20 20 2f 2a 20 45 56 49  db ){.    /* EVI
8860: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 33 32 35  DENCE-OF: R-6325
8870: 37 2d 31 31 37 34 30 20 43 61 6c 6c 69 6e 67 20  7-11740 Calling 
8880: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20  sqlite3_close() 
8890: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
88a0: 33 5f 63 6c 6f 73 65 5f 76 32 28 29 20 77 69 74  3_close_v2() wit
88b0: 68 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  h a NULL pointer
88c0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 68   argument is a h
88d0: 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70 2e 20 2a  armless no-op. *
88e0: 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  /.    return SQL
88f0: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66  ITE_OK;.  }.  if
8900: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
8910: 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64 62  CheckSickOrOk(db
8920: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
8930: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
8940: 50 54 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  PT;.  }.  sqlite
8950: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
8960: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20  ->mutex);.  if( 
8970: 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
8980: 49 54 45 5f 54 52 41 43 45 5f 43 4c 4f 53 45 20  ITE_TRACE_CLOSE 
8990: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  ){.    db->xTrac
89a0: 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 43  e(SQLITE_TRACE_C
89b0: 4c 4f 53 45 2c 20 64 62 2d 3e 70 54 72 61 63 65  LOSE, db->pTrace
89c0: 41 72 67 2c 20 64 62 2c 20 30 29 3b 0a 20 20 7d  Arg, db, 0);.  }
89d0: 0a 0a 20 20 2f 2a 20 46 6f 72 63 65 20 78 44 69  ..  /* Force xDi
89e0: 73 63 6f 6e 6e 65 63 74 20 63 61 6c 6c 73 20 6f  sconnect calls o
89f0: 6e 20 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61  n all virtual ta
8a00: 62 6c 65 73 20 2a 2f 0a 20 20 64 69 73 63 6f 6e  bles */.  discon
8a10: 6e 65 63 74 41 6c 6c 56 74 61 62 28 64 62 29 3b  nectAllVtab(db);
8a20: 0a 0a 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e  ..  /* If a tran
8a30: 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c  saction is open,
8a40: 20 74 68 65 20 64 69 73 63 6f 6e 6e 65 63 74 41   the disconnectA
8a50: 6c 6c 56 74 61 62 28 29 20 63 61 6c 6c 20 61 62  llVtab() call ab
8a60: 6f 76 65 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f  ove.  ** will no
8a70: 74 20 68 61 76 65 20 63 61 6c 6c 65 64 20 74 68  t have called th
8a80: 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 20  e xDisconnect() 
8a90: 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76 69  method on any vi
8aa0: 72 74 75 61 6c 0a 20 20 2a 2a 20 74 61 62 6c 65  rtual.  ** table
8ab0: 73 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 56 54  s in the db->aVT
8ac0: 72 61 6e 73 5b 5d 20 61 72 72 61 79 2e 20 54 68  rans[] array. Th
8ad0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69  e following sqli
8ae0: 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
8af0: 29 0a 20 20 2a 2a 20 63 61 6c 6c 20 77 69 6c 6c  ).  ** call will
8b00: 20 64 6f 20 73 6f 2e 20 57 65 20 6e 65 65 64 20   do so. We need 
8b10: 74 6f 20 64 6f 20 74 68 69 73 20 62 65 66 6f 72  to do this befor
8b20: 65 20 74 68 65 20 63 68 65 63 6b 20 66 6f 72 20  e the check for 
8b30: 61 63 74 69 76 65 0a 20 20 2a 2a 20 53 51 4c 20  active.  ** SQL 
8b40: 73 74 61 74 65 6d 65 6e 74 73 20 62 65 6c 6f 77  statements below
8b50: 2c 20 61 73 20 74 68 65 20 76 2d 74 61 62 6c 65  , as the v-table
8b60: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
8b70: 6d 61 79 20 62 65 20 73 74 6f 72 69 6e 67 0a 20  may be storing. 
8b80: 20 2a 2a 20 73 6f 6d 65 20 70 72 65 70 61 72 65   ** some prepare
8b90: 64 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 74  d statements int
8ba0: 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20  ernally..  */.  
8bb0: 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
8bc0: 61 63 6b 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 4c  ack(db);..  /* L
8bd0: 65 67 61 63 79 20 62 65 68 61 76 69 6f 72 20 28  egacy behavior (
8be0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20  sqlite3_close() 
8bf0: 62 65 68 61 76 69 6f 72 29 20 69 73 20 74 6f 20  behavior) is to 
8c00: 72 65 74 75 72 6e 0a 20 20 2a 2a 20 53 51 4c 49  return.  ** SQLI
8c10: 54 45 5f 42 55 53 59 20 69 66 20 74 68 65 20 63  TE_BUSY if the c
8c20: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 20 6e 6f  onnection can no
8c30: 74 20 62 65 20 63 6c 6f 73 65 64 20 69 6d 6d 65  t be closed imme
8c40: 64 69 61 74 65 6c 79 2e 0a 20 20 2a 2f 0a 20 20  diately..  */.  
8c50: 69 66 28 20 21 66 6f 72 63 65 5a 6f 6d 62 69 65  if( !forceZombie
8c60: 20 26 26 20 63 6f 6e 6e 65 63 74 69 6f 6e 49 73   && connectionIs
8c70: 42 75 73 79 28 64 62 29 20 29 7b 0a 20 20 20 20  Busy(db) ){.    
8c80: 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
8c90: 4d 73 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 42  Msg(db, SQLITE_B
8ca0: 55 53 59 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20  USY, "unable to 
8cb0: 63 6c 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66  close due to unf
8cc0: 69 6e 61 6c 69 7a 65 64 20 22 0a 20 20 20 20 20  inalized ".     
8cd0: 20 20 22 73 74 61 74 65 6d 65 6e 74 73 20 6f 72    "statements or
8ce0: 20 75 6e 66 69 6e 69 73 68 65 64 20 62 61 63 6b   unfinished back
8cf0: 75 70 73 22 29 3b 0a 20 20 20 20 73 71 6c 69 74  ups");.    sqlit
8d00: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
8d10: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 72  b->mutex);.    r
8d20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
8d30: 59 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  Y;.  }..#ifdef S
8d40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
8d50: 4c 4f 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65  LOG.  if( sqlite
8d60: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 53  3GlobalConfig.xS
8d70: 71 6c 6c 6f 67 20 29 7b 0a 20 20 20 20 2f 2a 20  qllog ){.    /* 
8d80: 43 6c 6f 73 69 6e 67 20 74 68 65 20 68 61 6e 64  Closing the hand
8d90: 6c 65 2e 20 46 6f 75 72 74 68 20 70 61 72 61 6d  le. Fourth param
8da0: 65 74 65 72 20 69 73 20 70 61 73 73 65 64 20 74  eter is passed t
8db0: 68 65 20 76 61 6c 75 65 20 32 2e 20 2a 2f 0a 20  he value 2. */. 
8dc0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
8dd0: 43 6f 6e 66 69 67 2e 78 53 71 6c 6c 6f 67 28 73  Config.xSqllog(s
8de0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8df0: 69 67 2e 70 53 71 6c 6c 6f 67 41 72 67 2c 20 64  ig.pSqllogArg, d
8e00: 62 2c 20 30 2c 20 32 29 3b 0a 20 20 7d 0a 23 65  b, 0, 2);.  }.#e
8e10: 6e 64 69 66 0a 0a 20 20 2f 2a 20 43 6f 6e 76 65  ndif..  /* Conve
8e20: 72 74 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  rt the connectio
8e30: 6e 20 69 6e 74 6f 20 61 20 7a 6f 6d 62 69 65 20  n into a zombie 
8e40: 61 6e 64 20 74 68 65 6e 20 63 6c 6f 73 65 20 69  and then close i
8e50: 74 2e 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 6d 61  t..  */.  db->ma
8e60: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
8e70: 49 43 5f 5a 4f 4d 42 49 45 3b 0a 20 20 73 71 6c  IC_ZOMBIE;.  sql
8e80: 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
8e90: 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 64 62 29  dCloseZombie(db)
8ea0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
8eb0: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  E_OK;.}../*.** T
8ec0: 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 6e  wo variations on
8ed0: 20 74 68 65 20 70 75 62 6c 69 63 20 69 6e 74 65   the public inte
8ee0: 72 66 61 63 65 20 66 6f 72 20 63 6c 6f 73 69 6e  rface for closin
8ef0: 67 20 61 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  g a database.** 
8f00: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 54 68 65 20  connection. The 
8f10: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20  sqlite3_close() 
8f20: 76 65 72 73 69 6f 6e 20 72 65 74 75 72 6e 73 20  version returns 
8f30: 53 51 4c 49 54 45 5f 42 55 53 59 20 61 6e 64 0a  SQLITE_BUSY and.
8f40: 2a 2a 20 6c 65 61 76 65 73 20 74 68 65 20 63 6f  ** leaves the co
8f50: 6e 6e 65 63 74 69 6f 6e 20 6f 70 74 69 6f 6e 20  nnection option 
8f60: 69 66 20 74 68 65 72 65 20 61 72 65 20 75 6e 66  if there are unf
8f70: 69 6e 61 6c 69 7a 65 64 20 70 72 65 70 61 72 65  inalized prepare
8f80: 64 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20  d.** statements 
8f90: 6f 72 20 75 6e 66 69 6e 69 73 68 65 64 20 73 71  or unfinished sq
8fa0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 73 2e 20 20  lite3_backups.  
8fb0: 54 68 65 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  The sqlite3_clos
8fc0: 65 5f 76 32 28 29 0a 2a 2a 20 76 65 72 73 69 6f  e_v2().** versio
8fd0: 6e 20 66 6f 72 63 65 73 20 74 68 65 20 63 6f 6e  n forces the con
8fe0: 6e 65 63 74 69 6f 6e 20 74 6f 20 62 65 63 6f 6d  nection to becom
8ff0: 65 20 61 20 7a 6f 6d 62 69 65 20 69 66 20 74 68  e a zombie if th
9000: 65 72 65 20 61 72 65 0a 2a 2a 20 75 6e 63 6c 6f  ere are.** unclo
9010: 73 65 64 20 72 65 73 6f 75 72 63 65 73 2c 20 61  sed resources, a
9020: 6e 64 20 61 72 72 61 6e 67 65 73 20 66 6f 72 20  nd arranges for 
9030: 64 65 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 68 65  deallocation whe
9040: 6e 20 74 68 65 20 6c 61 73 74 0a 2a 2a 20 70 72  n the last.** pr
9050: 65 70 61 72 65 20 73 74 61 74 65 6d 65 6e 74 20  epare statement 
9060: 6f 72 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  or sqlite3_backu
9070: 70 20 63 6c 6f 73 65 73 2e 0a 2a 2f 0a 69 6e 74  p closes..*/.int
9080: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73   sqlite3_close(s
9090: 71 6c 69 74 65 33 20 2a 64 62 29 7b 20 72 65 74  qlite3 *db){ ret
90a0: 75 72 6e 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  urn sqlite3Close
90b0: 28 64 62 2c 30 29 3b 20 7d 0a 69 6e 74 20 73 71  (db,0); }.int sq
90c0: 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 73  lite3_close_v2(s
90d0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 20 72 65 74  qlite3 *db){ ret
90e0: 75 72 6e 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  urn sqlite3Close
90f0: 28 64 62 2c 31 29 3b 20 7d 0a 0a 0a 2f 2a 0a 2a  (db,1); }.../*.*
9100: 2a 20 43 6c 6f 73 65 20 74 68 65 20 6d 75 74 65  * Close the mute
9110: 78 20 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f  x on database co
9120: 6e 6e 65 63 74 69 6f 6e 20 64 62 2e 0a 2a 2a 0a  nnection db..**.
9130: 2a 2a 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  ** Furthermore, 
9140: 69 66 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  if database conn
9150: 65 63 74 69 6f 6e 20 64 62 20 69 73 20 61 20 7a  ection db is a z
9160: 6f 6d 62 69 65 20 28 6d 65 61 6e 69 6e 67 20 74  ombie (meaning t
9170: 68 61 74 20 74 68 65 72 65 0a 2a 2a 20 68 61 73  hat there.** has
9180: 20 62 65 65 6e 20 61 20 70 72 69 6f 72 20 63 61   been a prior ca
9190: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c  ll to sqlite3_cl
91a0: 6f 73 65 28 64 62 29 20 6f 72 20 73 71 6c 69 74  ose(db) or sqlit
91b0: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 29  e3_close_v2(db))
91c0: 20 61 6e 64 0a 2a 2a 20 65 76 65 72 79 20 73 71   and.** every sq
91d0: 6c 69 74 65 33 5f 73 74 6d 74 20 68 61 73 20 6e  lite3_stmt has n
91e0: 6f 77 20 62 65 65 6e 20 66 69 6e 61 6c 69 7a 65  ow been finalize
91f0: 64 20 61 6e 64 20 65 76 65 72 79 20 73 71 6c 69  d and every sqli
9200: 74 65 33 5f 62 61 63 6b 75 70 20 68 61 73 0a 2a  te3_backup has.*
9210: 2a 20 66 69 6e 69 73 68 65 64 2c 20 74 68 65 6e  * finished, then
9220: 20 66 72 65 65 20 61 6c 6c 20 72 65 73 6f 75 72   free all resour
9230: 63 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ces..*/.void sql
9240: 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
9250: 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
9260: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 48 61 73  ite3 *db){.  Has
9270: 68 45 6c 65 6d 20 2a 69 3b 20 20 20 20 20 20 20  hElem *i;       
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9290: 48 61 73 68 20 74 61 62 6c 65 20 69 74 65 72 61  Hash table itera
92a0: 74 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 0a  tor */.  int j;.
92b0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 61  .  /* If there a
92c0: 72 65 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 73  re outstanding s
92d0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 72 20 73  qlite3_stmt or s
92e0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 6f 62  qlite3_backup ob
92f0: 6a 65 63 74 73 0a 20 20 2a 2a 20 6f 72 20 69 66  jects.  ** or if
9300: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
9310: 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e  has not yet been
9320: 20 63 6c 6f 73 65 64 20 62 79 20 73 71 6c 69 74   closed by sqlit
9330: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 29 2c 0a 20  e3_close_v2(),. 
9340: 20 2a 2a 20 74 68 65 6e 20 6a 75 73 74 20 6c 65   ** then just le
9350: 61 76 65 20 74 68 65 20 6d 75 74 65 78 20 61 6e  ave the mutex an
9360: 64 20 72 65 74 75 72 6e 2e 0a 20 20 2a 2f 0a 20  d return..  */. 
9370: 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21 3d   if( db->magic!=
9380: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
9390: 42 49 45 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f  BIE || connectio
93a0: 6e 49 73 42 75 73 79 28 64 62 29 20 29 7b 0a 20  nIsBusy(db) ){. 
93b0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
93c0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
93d0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  );.    return;. 
93e0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72   }..  /* If we r
93f0: 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c  each this point,
9400: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
9410: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
9420: 65 63 74 69 6f 6e 20 68 61 73 0a 20 20 2a 2a 20  ection has.  ** 
9430: 63 6c 6f 73 65 64 20 61 6c 6c 20 73 71 6c 69 74  closed all sqlit
9440: 65 33 5f 73 74 6d 74 20 61 6e 64 20 73 71 6c 69  e3_stmt and sqli
9450: 74 65 33 5f 62 61 63 6b 75 70 20 6f 62 6a 65 63  te3_backup objec
9460: 74 73 20 61 6e 64 20 68 61 73 20 62 65 65 6e 0a  ts and has been.
9470: 20 20 2a 2a 20 70 61 73 73 65 64 20 74 6f 20 73    ** passed to s
9480: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 28 6d 65  qlite3_close (me
9490: 61 6e 69 6e 67 20 74 68 61 74 20 69 74 20 69 73  aning that it is
94a0: 20 61 20 7a 6f 6d 62 69 65 29 2e 20 20 54 68 65   a zombie).  The
94b0: 72 65 66 6f 72 65 2c 0a 20 20 2a 2a 20 67 6f 20  refore,.  ** go 
94c0: 61 68 65 61 64 20 61 6e 64 20 66 72 65 65 20 61  ahead and free a
94d0: 6c 6c 20 72 65 73 6f 75 72 63 65 73 2e 0a 20 20  ll resources..  
94e0: 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 61 20 74 72  */..  /* If a tr
94f0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
9500: 6e 2c 20 72 6f 6c 6c 20 69 74 20 62 61 63 6b 2e  n, roll it back.
9510: 20 54 68 69 73 20 61 6c 73 6f 20 65 6e 73 75 72   This also ensur
9520: 65 73 20 74 68 61 74 20 69 66 0a 20 20 2a 2a 20  es that if.  ** 
9530: 61 6e 79 20 64 61 74 61 62 61 73 65 20 73 63 68  any database sch
9540: 65 6d 61 73 20 68 61 76 65 20 62 65 65 6e 20 6d  emas have been m
9550: 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 75 6e  odified by an un
9560: 63 6f 6d 6d 69 74 74 65 64 20 74 72 61 6e 73 61  committed transa
9570: 63 74 69 6f 6e 0a 20 20 2a 2a 20 74 68 65 79 20  ction.  ** they 
9580: 61 72 65 20 72 65 73 65 74 2e 20 41 6e 64 20 74  are reset. And t
9590: 68 61 74 20 74 68 65 20 72 65 71 75 69 72 65 64  hat the required
95a0: 20 62 2d 74 72 65 65 20 6d 75 74 65 78 20 69 73   b-tree mutex is
95b0: 20 68 65 6c 64 20 74 6f 20 6d 61 6b 65 0a 20 20   held to make.  
95c0: 2a 2a 20 74 68 65 20 70 61 67 65 72 20 72 6f 6c  ** the pager rol
95d0: 6c 62 61 63 6b 20 61 6e 64 20 73 63 68 65 6d 61  lback and schema
95e0: 20 72 65 73 65 74 20 61 6e 20 61 74 6f 6d 69 63   reset an atomic
95f0: 20 6f 70 65 72 61 74 69 6f 6e 2e 20 2a 2f 0a 20   operation. */. 
9600: 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
9610: 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  All(db, SQLITE_O
9620: 4b 29 3b 0a 0a 20 20 2f 2a 20 46 72 65 65 20 61  K);..  /* Free a
9630: 6e 79 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 53  ny outstanding S
9640: 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
9650: 72 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  res. */.  sqlite
9660: 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
9670: 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 6c 6f 73  (db);..  /* Clos
9680: 65 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  e all database c
9690: 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  onnections */.  
96a0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e  for(j=0; j<db->n
96b0: 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74  Db; j++){.    st
96c0: 72 75 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26  ruct Db *pDb = &
96d0: 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20  db->aDb[j];.    
96e0: 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a  if( pDb->pBt ){.
96f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
9700: 65 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74  eeClose(pDb->pBt
9710: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42  );.      pDb->pB
9720: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28  t = 0;.      if(
9730: 20 6a 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20   j!=1 ){.       
9740: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 20 3d 20   pDb->pSchema = 
9750: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
9760: 0a 20 20 7d 0a 20 20 2f 2a 20 43 6c 65 61 72 20  .  }.  /* Clear 
9770: 74 68 65 20 54 45 4d 50 20 73 63 68 65 6d 61 20  the TEMP schema 
9780: 73 65 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6c  separately and l
9790: 61 73 74 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ast */.  if( db-
97a0: 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d 61 20  >aDb[1].pSchema 
97b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 63  ){.    sqlite3Sc
97c0: 68 65 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61 44  hemaClear(db->aD
97d0: 62 5b 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20  b[1].pSchema);. 
97e0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62   }.  sqlite3Vtab
97f0: 55 6e 6c 6f 63 6b 4c 69 73 74 28 64 62 29 3b 0a  UnlockList(db);.
9800: 0a 20 20 2f 2a 20 46 72 65 65 20 75 70 20 74 68  .  /* Free up th
9810: 65 20 61 72 72 61 79 20 6f 66 20 61 75 78 69 6c  e array of auxil
9820: 69 61 72 79 20 64 61 74 61 62 61 73 65 73 20 2a  iary databases *
9830: 2f 0a 20 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  /.  sqlite3Colla
9840: 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
9850: 28 64 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20  (db);.  assert( 
9860: 64 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20  db->nDb<=2 );.  
9870: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d  assert( db->aDb=
9880: 3d 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29  =db->aDbStatic )
9890: 3b 0a 0a 20 20 2f 2a 20 54 65 6c 6c 20 74 68 65  ;..  /* Tell the
98a0: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
98b0: 63 20 74 68 61 74 20 74 68 65 20 63 6f 6e 6e 65  c that the conne
98c0: 63 74 69 6f 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20  ction no longer 
98d0: 68 6f 6c 64 73 20 61 6e 79 0a 20 20 2a 2a 20 6c  holds any.  ** l
98e0: 6f 63 6b 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ocks and does no
98f0: 74 20 72 65 71 75 69 72 65 20 61 6e 79 20 66 75  t require any fu
9900: 72 74 68 65 72 20 75 6e 6c 6f 63 6b 2d 6e 6f 74  rther unlock-not
9910: 69 66 79 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ify callbacks.. 
9920: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 43 6f 6e   */.  sqlite3Con
9930: 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 64 62  nectionClosed(db
9940: 29 3b 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69  );..  for(i=sqli
9950: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
9960: 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71  >aFunc); i; i=sq
9970: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29  liteHashNext(i))
9980: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
9990: 4e 65 78 74 2c 20 2a 70 3b 0a 20 20 20 20 70 20  Next, *p;.    p 
99a0: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
99b0: 28 69 29 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20  (i);.    do{.   
99c0: 20 20 20 66 75 6e 63 74 69 6f 6e 44 65 73 74 72     functionDestr
99d0: 6f 79 28 64 62 2c 20 70 29 3b 0a 20 20 20 20 20  oy(db, p);.     
99e0: 20 70 4e 65 78 74 20 3d 20 70 2d 3e 70 4e 65 78   pNext = p->pNex
99f0: 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  t;.      sqlite3
9a00: 44 62 46 72 65 65 28 64 62 2c 20 70 29 3b 0a 20  DbFree(db, p);. 
9a10: 20 20 20 20 20 70 20 3d 20 70 4e 65 78 74 3b 0a       p = pNext;.
9a20: 20 20 20 20 7d 77 68 69 6c 65 28 20 70 20 29 3b      }while( p );
9a30: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61  .  }.  sqlite3Ha
9a40: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75  shClear(&db->aFu
9a50: 6e 63 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c  nc);.  for(i=sql
9a60: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
9a70: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20  ->aCollSeq); i; 
9a80: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
9a90: 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65  (i)){.    CollSe
9aa0: 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c  q *pColl = (Coll
9ab0: 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68  Seq *)sqliteHash
9ac0: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 2f 2a 20  Data(i);.    /* 
9ad0: 49 6e 76 6f 6b 65 20 61 6e 79 20 64 65 73 74 72  Invoke any destr
9ae0: 75 63 74 6f 72 73 20 72 65 67 69 73 74 65 72 65  uctors registere
9af0: 64 20 66 6f 72 20 63 6f 6c 6c 61 74 69 6f 6e 20  d for collation 
9b00: 73 65 71 75 65 6e 63 65 20 75 73 65 72 20 64 61  sequence user da
9b10: 74 61 2e 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a  ta. */.    for(j
9b20: 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20  =0; j<3; j++){. 
9b30: 20 20 20 20 20 69 66 28 20 70 43 6f 6c 6c 5b 6a       if( pColl[j
9b40: 5d 2e 78 44 65 6c 20 29 7b 0a 20 20 20 20 20 20  ].xDel ){.      
9b50: 20 20 70 43 6f 6c 6c 5b 6a 5d 2e 78 44 65 6c 28    pColl[j].xDel(
9b60: 70 43 6f 6c 6c 5b 6a 5d 2e 70 55 73 65 72 29 3b  pColl[j].pUser);
9b70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9b80: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
9b90: 28 64 62 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 7d  (db, pColl);.  }
9ba0: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
9bb0: 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  ear(&db->aCollSe
9bc0: 71 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  q);.#ifndef SQLI
9bd0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
9be0: 41 42 4c 45 0a 20 20 66 6f 72 28 69 3d 73 71 6c  ABLE.  for(i=sql
9bf0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
9c00: 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 69 3b 20 69  ->aModule); i; i
9c10: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
9c20: 69 29 29 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20  i)){.    Module 
9c30: 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20  *pMod = (Module 
9c40: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
9c50: 28 69 29 3b 0a 20 20 20 20 69 66 28 20 70 4d 6f  (i);.    if( pMo
9c60: 64 2d 3e 78 44 65 73 74 72 6f 79 20 29 7b 0a 20  d->xDestroy ){. 
9c70: 20 20 20 20 20 70 4d 6f 64 2d 3e 78 44 65 73 74       pMod->xDest
9c80: 72 6f 79 28 70 4d 6f 64 2d 3e 70 41 75 78 29 3b  roy(pMod->pAux);
9c90: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
9ca0: 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
9cb0: 61 62 6c 65 43 6c 65 61 72 28 64 62 2c 20 70 4d  ableClear(db, pM
9cc0: 6f 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  od);.    sqlite3
9cd0: 44 62 46 72 65 65 28 64 62 2c 20 70 4d 6f 64 29  DbFree(db, pMod)
9ce0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48  ;.  }.  sqlite3H
9cf0: 61 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 4d  ashClear(&db->aM
9d00: 6f 64 75 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 0a  odule);.#endif..
9d10: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
9d20: 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 20 2f  b, SQLITE_OK); /
9d30: 2a 20 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e  * Deallocates an
9d40: 79 20 63 61 63 68 65 64 20 65 72 72 6f 72 20 73  y cached error s
9d50: 74 72 69 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c  trings. */.  sql
9d60: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 64 62  ite3ValueFree(db
9d70: 2d 3e 70 45 72 72 29 3b 0a 20 20 73 71 6c 69 74  ->pErr);.  sqlit
9d80: 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
9d90: 73 28 64 62 29 3b 0a 23 69 66 20 53 51 4c 49 54  s(db);.#if SQLIT
9da0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9db0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
9dc0: 66 72 65 65 28 64 62 2d 3e 61 75 74 68 2e 7a 41  free(db->auth.zA
9dd0: 75 74 68 55 73 65 72 29 3b 0a 20 20 73 71 6c 69  uthUser);.  sqli
9de0: 74 65 33 5f 66 72 65 65 28 64 62 2d 3e 61 75 74  te3_free(db->aut
9df0: 68 2e 7a 41 75 74 68 50 57 29 3b 0a 23 65 6e 64  h.zAuthPW);.#end
9e00: 69 66 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20  if..  db->magic 
9e10: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
9e20: 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  RROR;..  /* The 
9e30: 74 65 6d 70 2d 64 61 74 61 62 61 73 65 20 73 63  temp-database sc
9e40: 68 65 6d 61 20 69 73 20 61 6c 6c 6f 63 61 74 65  hema is allocate
9e50: 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72  d differently fr
9e60: 6f 6d 20 74 68 65 20 6f 74 68 65 72 20 73 63 68  om the other sch
9e70: 65 6d 61 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 73  ema.  ** objects
9e80: 20 28 75 73 69 6e 67 20 73 71 6c 69 74 65 4d 61   (using sqliteMa
9e90: 6c 6c 6f 63 28 29 20 64 69 72 65 63 74 6c 79 2c  lloc() directly,
9ea0: 20 69 6e 73 74 65 61 64 20 6f 66 20 73 71 6c 69   instead of sqli
9eb0: 74 65 33 42 74 72 65 65 53 63 68 65 6d 61 28 29  te3BtreeSchema()
9ec0: 29 2e 0a 20 20 2a 2a 20 53 6f 20 69 74 20 6e 65  )..  ** So it ne
9ed0: 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
9ee0: 68 65 72 65 2e 20 54 6f 64 6f 3a 20 57 68 79 20  here. Todo: Why 
9ef0: 6e 6f 74 20 72 6f 6c 6c 20 74 68 65 20 74 65 6d  not roll the tem
9f00: 70 20 73 63 68 65 6d 61 20 69 6e 74 6f 0a 20 20  p schema into.  
9f10: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 71 6c 69  ** the same sqli
9f20: 74 65 4d 61 6c 6c 6f 63 28 29 20 61 73 20 74 68  teMalloc() as th
9f30: 65 20 6f 6e 65 20 74 68 61 74 20 61 6c 6c 6f 63  e one that alloc
9f40: 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ates the databas
9f50: 65 20 0a 20 20 2a 2a 20 73 74 72 75 63 74 75 72  e .  ** structur
9f60: 65 3f 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e?.  */.  sqlite
9f70: 33 44 62 46 72 65 65 28 64 62 2c 20 64 62 2d 3e  3DbFree(db, db->
9f80: 61 44 62 5b 31 5d 2e 70 53 63 68 65 6d 61 29 3b  aDb[1].pSchema);
9f90: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
9fa0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
9fb0: 29 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  );.  db->magic =
9fc0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
9fd0: 4f 53 45 44 3b 0a 20 20 73 71 6c 69 74 65 33 5f  OSED;.  sqlite3_
9fe0: 6d 75 74 65 78 5f 66 72 65 65 28 64 62 2d 3e 6d  mutex_free(db->m
9ff0: 75 74 65 78 29 3b 0a 20 20 61 73 73 65 72 74 28  utex);.  assert(
a000: 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 6e   db->lookaside.n
a010: 4f 75 74 3d 3d 30 20 29 3b 20 20 2f 2a 20 46 61  Out==0 );  /* Fa
a020: 69 6c 73 20 6f 6e 20 61 20 6c 6f 6f 6b 61 73 69  ils on a lookasi
a030: 64 65 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 20 2a  de memory leak *
a040: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6c 6f 6f 6b  /.  if( db->look
a050: 61 73 69 64 65 2e 62 4d 61 6c 6c 6f 63 65 64 20  aside.bMalloced 
a060: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  ){.    sqlite3_f
a070: 72 65 65 28 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64  ree(db->lookasid
a080: 65 2e 70 53 74 61 72 74 29 3b 0a 20 20 7d 0a 23  e.pStart);.  }.#
a090: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
a0a0: 42 4c 45 5f 53 51 4c 52 52 0a 20 20 53 52 52 65  BLE_SQLRR.  SRRe
a0b0: 63 43 6c 6f 73 65 28 64 62 29 3b 0a 23 65 6e 64  cClose(db);.#end
a0c0: 69 66 0a 20 20 0a 20 20 73 71 6c 69 74 65 33 5f  if.  .  sqlite3_
a0d0: 66 72 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a  free(db);.}../*.
a0e0: 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20  ** Rollback all 
a0f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 20  database files. 
a100: 20 49 66 20 74 72 69 70 43 6f 64 65 20 69 73 20   If tripCode is 
a110: 6e 6f 74 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74  not SQLITE_OK, t
a120: 68 65 6e 0a 2a 2a 20 61 6e 79 20 77 72 69 74 65  hen.** any write
a130: 20 63 75 72 73 6f 72 73 20 61 72 65 20 69 6e 76   cursors are inv
a140: 61 6c 69 64 61 74 65 64 20 28 22 74 72 69 70 70  alidated ("tripp
a150: 65 64 22 20 2d 20 61 73 20 69 6e 20 22 74 72 69  ed" - as in "tri
a160: 70 70 69 6e 67 20 61 20 63 69 72 63 75 69 74 0a  pping a circuit.
a170: 2a 2a 20 62 72 65 61 6b 65 72 22 29 20 61 6e 64  ** breaker") and
a180: 20 6d 61 64 65 20 74 6f 20 72 65 74 75 72 6e 20   made to return 
a190: 74 72 69 70 43 6f 64 65 20 69 66 20 74 68 65 72  tripCode if ther
a1a0: 65 20 61 72 65 20 61 6e 79 20 66 75 72 74 68 65  e are any furthe
a1b0: 72 0a 2a 2a 20 61 74 74 65 6d 70 74 73 20 74 6f  r.** attempts to
a1c0: 20 75 73 65 20 74 68 61 74 20 63 75 72 73 6f 72   use that cursor
a1d0: 2e 20 20 52 65 61 64 20 63 75 72 73 6f 72 73 20  .  Read cursors 
a1e0: 72 65 6d 61 69 6e 20 6f 70 65 6e 20 61 6e 64 20  remain open and 
a1f0: 76 61 6c 69 64 0a 2a 2a 20 62 75 74 20 61 72 65  valid.** but are
a200: 20 22 73 61 76 65 64 22 20 69 6e 20 63 61 73 65   "saved" in case
a210: 20 74 68 65 20 74 61 62 6c 65 20 70 61 67 65 73   the table pages
a220: 20 61 72 65 20 6d 6f 76 65 64 20 61 72 6f 75 6e   are moved aroun
a230: 64 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  d..*/.void sqlit
a240: 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
a250: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 74  lite3 *db, int t
a260: 72 69 70 43 6f 64 65 29 7b 0a 20 20 69 6e 74 20  ripCode){.  int 
a270: 69 3b 0a 20 20 69 6e 74 20 69 6e 54 72 61 6e 73  i;.  int inTrans
a280: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 73 63 68 65   = 0;.  int sche
a290: 6d 61 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65  maChange;.  asse
a2a0: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
a2b0: 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78  x_held(db->mutex
a2c0: 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 65  ) );.  sqlite3Be
a2d0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
a2e0: 29 3b 0a 0a 20 20 2f 2a 20 4f 62 74 61 69 6e 20  );..  /* Obtain 
a2f0: 61 6c 6c 20 62 2d 74 72 65 65 20 6d 75 74 65 78  all b-tree mutex
a300: 65 73 20 62 65 66 6f 72 65 20 6d 61 6b 69 6e 67  es before making
a310: 20 61 6e 79 20 63 61 6c 6c 73 20 74 6f 20 42 74   any calls to Bt
a320: 72 65 65 52 6f 6c 6c 62 61 63 6b 28 29 2e 20 0a  reeRollback(). .
a330: 20 20 2a 2a 20 54 68 69 73 20 69 73 20 69 6d 70    ** This is imp
a340: 6f 72 74 61 6e 74 20 69 6e 20 63 61 73 65 20 74  ortant in case t
a350: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62  he transaction b
a360: 65 69 6e 67 20 72 6f 6c 6c 65 64 20 62 61 63 6b  eing rolled back
a370: 20 68 61 73 0a 20 20 2a 2a 20 6d 6f 64 69 66 69   has.  ** modifi
a380: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
a390: 73 63 68 65 6d 61 2e 20 49 66 20 74 68 65 20 62  schema. If the b
a3a0: 2d 74 72 65 65 20 6d 75 74 65 78 65 73 20 61 72  -tree mutexes ar
a3b0: 65 20 6e 6f 74 20 74 61 6b 65 6e 0a 20 20 2a 2a  e not taken.  **
a3c0: 20 68 65 72 65 2c 20 74 68 65 6e 20 61 6e 6f 74   here, then anot
a3d0: 68 65 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  her shared-cache
a3e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 69 67 68   connection migh
a3f0: 74 20 73 6e 65 61 6b 20 69 6e 20 62 65 74 77 65  t sneak in betwe
a400: 65 6e 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  en.  ** the data
a410: 62 61 73 65 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  base rollback an
a420: 64 20 73 63 68 65 6d 61 20 72 65 73 65 74 2c 20  d schema reset, 
a430: 77 68 69 63 68 20 63 61 6e 20 63 61 75 73 65 20  which can cause 
a440: 66 61 6c 73 65 0a 20 20 2a 2a 20 63 6f 72 72 75  false.  ** corru
a450: 70 74 69 6f 6e 20 72 65 70 6f 72 74 73 20 69 6e  ption reports in
a460: 20 73 6f 6d 65 20 63 61 73 65 73 2e 20 20 2a 2f   some cases.  */
a470: 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45  .  sqlite3BtreeE
a480: 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 73  nterAll(db);.  s
a490: 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64  chemaChange = (d
a4a0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
a4b0: 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
a4c0: 21 3d 30 20 26 26 20 64 62 2d 3e 69 6e 69 74 2e  !=0 && db->init.
a4d0: 62 75 73 79 3d 3d 30 3b 0a 0a 20 20 66 6f 72 28  busy==0;..  for(
a4e0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
a4f0: 69 2b 2b 29 7b 0a 20 20 20 20 42 74 72 65 65 20  i++){.    Btree 
a500: 2a 70 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  *p = db->aDb[i].
a510: 70 42 74 3b 0a 20 20 20 20 69 66 28 20 70 20 29  pBt;.    if( p )
a520: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
a530: 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
a540: 73 28 70 29 20 29 7b 0a 20 20 20 20 20 20 20 20  s(p) ){.        
a550: 69 6e 54 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20  inTrans = 1;.   
a560: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
a570: 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28  e3BtreeRollback(
a580: 70 2c 20 74 72 69 70 43 6f 64 65 2c 20 21 73 63  p, tripCode, !sc
a590: 68 65 6d 61 43 68 61 6e 67 65 29 3b 0a 20 20 20  hemaChange);.   
a5a0: 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33   }.  }.  sqlite3
a5b0: 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29  VtabRollback(db)
a5c0: 3b 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ;.  sqlite3EndBe
a5d0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 0a 20  nignMalloc();.. 
a5e0: 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 26   if( (db->flags&
a5f0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
a600: 6e 67 65 73 29 21 3d 30 20 26 26 20 64 62 2d 3e  nges)!=0 && db->
a610: 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 7b 0a  init.busy==0 ){.
a620: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
a630: 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
a640: 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  nts(db);.    sql
a650: 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
a660: 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
a670: 64 62 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  db);.  }.  sqlit
a680: 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28  e3BtreeLeaveAll(
a690: 64 62 29 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 64  db);..  /* Any d
a6a0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
a6b0: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 68 61  nt violations ha
a6c0: 76 65 20 6e 6f 77 20 62 65 65 6e 20 72 65 73 6f  ve now been reso
a6d0: 6c 76 65 64 2e 20 2a 2f 0a 20 20 64 62 2d 3e 6e  lved. */.  db->n
a6e0: 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 30  DeferredCons = 0
a6f0: 3b 0a 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  ;.  db->nDeferre
a700: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
a710: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
a720: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 3b 0a 0a  LITE_DeferFKs;..
a730: 20 20 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73 20    /* If one has 
a740: 62 65 65 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c  been configured,
a750: 20 69 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c   invoke the roll
a760: 62 61 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61  back-hook callba
a770: 63 6b 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  ck */.  if( db->
a780: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
a790: 6b 20 26 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c  k && (inTrans ||
a7a0: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
a7b0: 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f  ) ){.    db->xRo
a7c0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64  llbackCallback(d
a7d0: 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29  b->pRollbackArg)
a7e0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ;.  }.}../*.** R
a7f0: 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73  eturn a static s
a800: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
a810: 20 74 68 65 20 6e 61 6d 65 20 63 6f 72 72 65 73   the name corres
a820: 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 65  ponding to the e
a830: 72 72 6f 72 20 63 6f 64 65 0a 2a 2a 20 73 70 65  rror code.** spe
a840: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 61 72  cified in the ar
a850: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 20 64  gument..*/.#if d
a860: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
a870: 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
a880: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
a890: 45 72 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b  ErrName(int rc){
a8a0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
a8b0: 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20  Name = 0;.  int 
a8c0: 69 2c 20 6f 72 69 67 52 63 20 3d 20 72 63 3b 0a  i, origRc = rc;.
a8d0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 20 26    for(i=0; i<2 &
a8e0: 26 20 7a 4e 61 6d 65 3d 3d 30 3b 20 69 2b 2b 2c  & zName==0; i++,
a8f0: 20 72 63 20 26 3d 20 30 78 66 66 29 7b 0a 20 20   rc &= 0xff){.  
a900: 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a    switch( rc ){.
a910: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
a920: 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 20 20  E_OK:           
a930: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
a940: 51 4c 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20  QLITE_OK";      
a950: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a960: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
a970: 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 20  TE_ERROR:       
a980: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
a990: 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20  SQLITE_ERROR";  
a9a0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
a9b0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
a9c0: 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20  ITE_INTERNAL:   
a9d0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
a9e0: 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c  "SQLITE_INTERNAL
a9f0: 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ";          brea
aa00: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
aa10: 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20  LITE_PERM:      
aa20: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
aa30: 20 22 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20   "SQLITE_PERM"; 
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
aa50: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
aa60: 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20  QLITE_ABORT:    
aa70: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
aa80: 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22  = "SQLITE_ABORT"
aa90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
aaa0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
aab0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
aac0: 4c 42 41 43 4b 3a 20 20 20 20 20 7a 4e 61 6d 65  LBACK:     zName
aad0: 20 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54   = "SQLITE_ABORT
aae0: 5f 52 4f 4c 4c 42 41 43 4b 22 3b 20 20 20 20 62  _ROLLBACK";    b
aaf0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
ab00: 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20   SQLITE_BUSY:   
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
ab20: 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59  e = "SQLITE_BUSY
ab30: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
ab40: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
ab50: 65 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  e SQLITE_BUSY_RE
ab60: 43 4f 56 45 52 59 3a 20 20 20 20 20 20 7a 4e 61  COVERY:      zNa
ab70: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53  me = "SQLITE_BUS
ab80: 59 5f 52 45 43 4f 56 45 52 59 22 3b 20 20 20 20  Y_RECOVERY";    
ab90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
aba0: 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 53  se SQLITE_BUSY_S
abb0: 4e 41 50 53 48 4f 54 3a 20 20 20 20 20 20 7a 4e  NAPSHOT:      zN
abc0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55  ame = "SQLITE_BU
abd0: 53 59 5f 53 4e 41 50 53 48 4f 54 22 3b 20 20 20  SY_SNAPSHOT";   
abe0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
abf0: 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  ase SQLITE_LOCKE
ac00: 44 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 7a  D:             z
ac10: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c  Name = "SQLITE_L
ac20: 4f 43 4b 45 44 22 3b 20 20 20 20 20 20 20 20 20  OCKED";         
ac30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ac40: 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  case SQLITE_LOCK
ac50: 45 44 5f 53 48 41 52 45 44 43 41 43 48 45 3a 20  ED_SHAREDCACHE: 
ac60: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
ac70: 4c 4f 43 4b 45 44 5f 53 48 41 52 45 44 43 41 43  LOCKED_SHAREDCAC
ac80: 48 45 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20  HE";break;.     
ac90: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d   case SQLITE_NOM
aca0: 45 4d 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  EM:             
acb0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
acc0: 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20 20 20  _NOMEM";        
acd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ace0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45    case SQLITE_RE
acf0: 41 44 4f 4e 4c 59 3a 20 20 20 20 20 20 20 20 20  ADONLY:         
ad00: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
ad10: 45 5f 52 45 41 44 4f 4e 4c 59 22 3b 20 20 20 20  E_READONLY";    
ad20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
ad30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
ad40: 45 41 44 4f 4e 4c 59 5f 52 45 43 4f 56 45 52 59  EADONLY_RECOVERY
ad50: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49  :  zName = "SQLI
ad60: 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 45 43 4f  TE_READONLY_RECO
ad70: 56 45 52 59 22 3b 20 62 72 65 61 6b 3b 0a 20 20  VERY"; break;.  
ad80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
ad90: 52 45 41 44 4f 4e 4c 59 5f 43 41 4e 54 4c 4f 43  READONLY_CANTLOC
ada0: 4b 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  K:  zName = "SQL
adb0: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 43 41 4e  ITE_READONLY_CAN
adc0: 54 4c 4f 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20  TLOCK"; break;. 
add0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
ade0: 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f 4c 4c 42 41  _READONLY_ROLLBA
adf0: 43 4b 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  CK:  zName = "SQ
ae00: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f  LITE_READONLY_RO
ae10: 4c 4c 42 41 43 4b 22 3b 20 62 72 65 61 6b 3b 0a  LLBACK"; break;.
ae20: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
ae30: 45 5f 52 45 41 44 4f 4e 4c 59 5f 44 42 4d 4f 56  E_READONLY_DBMOV
ae40: 45 44 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  ED:   zName = "S
ae50: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 44  QLITE_READONLY_D
ae60: 42 4d 4f 56 45 44 22 3b 20 20 62 72 65 61 6b 3b  BMOVED";  break;
ae70: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
ae80: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 20  TE_INTERRUPT:   
ae90: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
aea0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
aeb0: 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ";         break
aec0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
aed0: 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20  ITE_IOERR:      
aee0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
aef0: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20  "SQLITE_IOERR"; 
af00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
af10: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
af20: 4c 49 54 45 5f 49 4f 45 52 52 5f 52 45 41 44 3a  LITE_IOERR_READ:
af30: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
af40: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52   "SQLITE_IOERR_R
af50: 45 41 44 22 3b 20 20 20 20 20 20 20 20 62 72 65  EAD";        bre
af60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
af70: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52  QLITE_IOERR_SHOR
af80: 54 5f 52 45 41 44 3a 20 20 20 7a 4e 61 6d 65 20  T_READ:   zName 
af90: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
afa0: 53 48 4f 52 54 5f 52 45 41 44 22 3b 20 20 62 72  SHORT_READ";  br
afb0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
afc0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57 52 49  SQLITE_IOERR_WRI
afd0: 54 45 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65  TE:        zName
afe0: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
aff0: 5f 57 52 49 54 45 22 3b 20 20 20 20 20 20 20 62  _WRITE";       b
b000: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b010: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53   SQLITE_IOERR_FS
b020: 59 4e 43 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d  YNC:        zNam
b030: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52  e = "SQLITE_IOER
b040: 52 5f 46 53 59 4e 43 22 3b 20 20 20 20 20 20 20  R_FSYNC";       
b050: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b060: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44  e SQLITE_IOERR_D
b070: 49 52 5f 46 53 59 4e 43 3a 20 20 20 20 7a 4e 61  IR_FSYNC:    zNa
b080: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
b090: 52 52 5f 44 49 52 5f 46 53 59 4e 43 22 3b 20 20  RR_DIR_FSYNC";  
b0a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b0b0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  se SQLITE_IOERR_
b0c0: 54 52 55 4e 43 41 54 45 3a 20 20 20 20 20 7a 4e  TRUNCATE:     zN
b0d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
b0e0: 45 52 52 5f 54 52 55 4e 43 41 54 45 22 3b 20 20  ERR_TRUNCATE";  
b0f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b100: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
b110: 5f 46 53 54 41 54 3a 20 20 20 20 20 20 20 20 7a  _FSTAT:        z
b120: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
b130: 4f 45 52 52 5f 46 53 54 41 54 22 3b 20 20 20 20  OERR_FSTAT";    
b140: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b150: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
b160: 52 5f 55 4e 4c 4f 43 4b 3a 20 20 20 20 20 20 20  R_UNLOCK:       
b170: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b180: 49 4f 45 52 52 5f 55 4e 4c 4f 43 4b 22 3b 20 20  IOERR_UNLOCK";  
b190: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b1a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
b1b0: 52 52 5f 52 44 4c 4f 43 4b 3a 20 20 20 20 20 20  RR_RDLOCK:      
b1c0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b1d0: 5f 49 4f 45 52 52 5f 52 44 4c 4f 43 4b 22 3b 20  _IOERR_RDLOCK"; 
b1e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b1f0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
b200: 45 52 52 5f 44 45 4c 45 54 45 3a 20 20 20 20 20  ERR_DELETE:     
b210: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b220: 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54 45 22 3b  E_IOERR_DELETE";
b230: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b240: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
b250: 4f 45 52 52 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20  OERR_NOMEM:     
b260: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b270: 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 22 3b  TE_IOERR_NOMEM";
b280: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b290: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b2a0: 49 4f 45 52 52 5f 41 43 43 45 53 53 3a 20 20 20  IOERR_ACCESS:   
b2b0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b2c0: 49 54 45 5f 49 4f 45 52 52 5f 41 43 43 45 53 53  ITE_IOERR_ACCESS
b2d0: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
b2e0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b2f0: 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53 45  _IOERR_CHECKRESE
b300: 52 56 45 44 4c 4f 43 4b 3a 0a 20 20 20 20 20 20  RVEDLOCK:.      
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
b330: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
b340: 43 48 45 43 4b 52 45 53 45 52 56 45 44 4c 4f 43  CHECKRESERVEDLOC
b350: 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K"; break;.     
b360: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
b370: 52 52 5f 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20  RR_LOCK:        
b380: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b390: 5f 49 4f 45 52 52 5f 4c 4f 43 4b 22 3b 20 20 20  _IOERR_LOCK";   
b3a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b3b0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
b3c0: 45 52 52 5f 43 4c 4f 53 45 3a 20 20 20 20 20 20  ERR_CLOSE:      
b3d0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b3e0: 45 5f 49 4f 45 52 52 5f 43 4c 4f 53 45 22 3b 20  E_IOERR_CLOSE"; 
b3f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b400: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
b410: 4f 45 52 52 5f 44 49 52 5f 43 4c 4f 53 45 3a 20  OERR_DIR_CLOSE: 
b420: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b430: 54 45 5f 49 4f 45 52 52 5f 44 49 52 5f 43 4c 4f  TE_IOERR_DIR_CLO
b440: 53 45 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20  SE";   break;.  
b450: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b460: 49 4f 45 52 52 5f 53 48 4d 4f 50 45 4e 3a 20 20  IOERR_SHMOPEN:  
b470: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b480: 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4f 50 45  ITE_IOERR_SHMOPE
b490: 4e 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  N";     break;. 
b4a0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b4b0: 5f 49 4f 45 52 52 5f 53 48 4d 53 49 5a 45 3a 20  _IOERR_SHMSIZE: 
b4c0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
b4d0: 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 53 49  LITE_IOERR_SHMSI
b4e0: 5a 45 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ZE";     break;.
b4f0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
b500: 45 5f 49 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b 3a  E_IOERR_SHMLOCK:
b510: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
b520: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4c  QLITE_IOERR_SHML
b530: 4f 43 4b 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  OCK";     break;
b540: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
b550: 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4d 41 50 3a  TE_IOERR_SHMMAP:
b560: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
b570: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d  SQLITE_IOERR_SHM
b580: 4d 41 50 22 3b 20 20 20 20 20 20 62 72 65 61 6b  MAP";      break
b590: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
b5a0: 49 54 45 5f 49 4f 45 52 52 5f 53 45 45 4b 3a 20  ITE_IOERR_SEEK: 
b5b0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
b5c0: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 45  "SQLITE_IOERR_SE
b5d0: 45 4b 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  EK";        brea
b5e0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
b5f0: 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54  LITE_IOERR_DELET
b600: 45 5f 4e 4f 45 4e 54 3a 20 7a 4e 61 6d 65 20 3d  E_NOENT: zName =
b610: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44   "SQLITE_IOERR_D
b620: 45 4c 45 54 45 5f 4e 4f 45 4e 54 22 3b 62 72 65  ELETE_NOENT";bre
b630: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
b640: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4d 4d 41 50  QLITE_IOERR_MMAP
b650: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
b660: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
b670: 4d 4d 41 50 22 3b 20 20 20 20 20 20 20 20 62 72  MMAP";        br
b680: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b690: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 47 45 54  SQLITE_IOERR_GET
b6a0: 54 45 4d 50 50 41 54 48 3a 20 20 7a 4e 61 6d 65  TEMPPATH:  zName
b6b0: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
b6c0: 5f 47 45 54 54 45 4d 50 50 41 54 48 22 3b 20 62  _GETTEMPPATH"; b
b6d0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b6e0: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43 4f   SQLITE_IOERR_CO
b6f0: 4e 56 50 41 54 48 3a 20 20 20 20 20 7a 4e 61 6d  NVPATH:     zNam
b700: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52  e = "SQLITE_IOER
b710: 52 5f 43 4f 4e 56 50 41 54 48 22 3b 20 20 20 20  R_CONVPATH";    
b720: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b730: 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
b740: 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61  :            zNa
b750: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52  me = "SQLITE_COR
b760: 52 55 50 54 22 3b 20 20 20 20 20 20 20 20 20 20  RUPT";          
b770: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b780: 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  se SQLITE_CORRUP
b790: 54 5f 56 54 41 42 3a 20 20 20 20 20 20 20 7a 4e  T_VTAB:       zN
b7a0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
b7b0: 52 52 55 50 54 5f 56 54 41 42 22 3b 20 20 20 20  RRUPT_VTAB";    
b7c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b7d0: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  ase SQLITE_NOTFO
b7e0: 55 4e 44 3a 20 20 20 20 20 20 20 20 20 20 20 7a  UND:           z
b7f0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e  Name = "SQLITE_N
b800: 4f 54 46 4f 55 4e 44 22 3b 20 20 20 20 20 20 20  OTFOUND";       
b810: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b820: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
b830: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b840: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b850: 46 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 20 20  FULL";          
b860: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b870: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
b880: 54 4f 50 45 4e 3a 20 20 20 20 20 20 20 20 20 20  TOPEN:          
b890: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b8a0: 5f 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20 20 20  _CANTOPEN";     
b8b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b8c0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41    case SQLITE_CA
b8d0: 4e 54 4f 50 45 4e 5f 4e 4f 54 45 4d 50 44 49 52  NTOPEN_NOTEMPDIR
b8e0: 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54  : zName = "SQLIT
b8f0: 45 5f 43 41 4e 54 4f 50 45 4e 5f 4e 4f 54 45 4d  E_CANTOPEN_NOTEM
b900: 50 44 49 52 22 3b 62 72 65 61 6b 3b 0a 20 20 20  PDIR";break;.   
b910: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
b920: 41 4e 54 4f 50 45 4e 5f 49 53 44 49 52 3a 20 20  ANTOPEN_ISDIR:  
b930: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b940: 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 49 53 44 49  TE_CANTOPEN_ISDI
b950: 52 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  R";    break;.  
b960: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b970: 43 41 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50 41 54  CANTOPEN_FULLPAT
b980: 48 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  H:  zName = "SQL
b990: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 46 55 4c  ITE_CANTOPEN_FUL
b9a0: 4c 50 41 54 48 22 3b 20 62 72 65 61 6b 3b 0a 20  LPATH"; break;. 
b9b0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b9c0: 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50 41  _CANTOPEN_CONVPA
b9d0: 54 48 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  TH:  zName = "SQ
b9e0: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f  LITE_CANTOPEN_CO
b9f0: 4e 56 50 41 54 48 22 3b 20 62 72 65 61 6b 3b 0a  NVPATH"; break;.
ba00: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
ba10: 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 20 20  E_PROTOCOL:     
ba20: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
ba30: 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b  QLITE_PROTOCOL";
ba40: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ba50: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
ba60: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 20  TE_EMPTY:       
ba70: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
ba80: 53 51 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20 20  SQLITE_EMPTY";  
ba90: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
baa0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
bab0: 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20  ITE_SCHEMA:     
bac0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
bad0: 22 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b  "SQLITE_SCHEMA";
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
baf0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
bb00: 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20  LITE_TOOBIG:    
bb10: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
bb20: 20 22 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 22   "SQLITE_TOOBIG"
bb30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  ;            bre
bb40: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
bb50: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
bb60: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
bb70: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  = "SQLITE_CONSTR
bb80: 41 49 4e 54 22 3b 20 20 20 20 20 20 20 20 62 72  AINT";        br
bb90: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bba0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
bbb0: 54 5f 55 4e 49 51 55 45 3a 20 20 7a 4e 61 6d 65  T_UNIQUE:  zName
bbc0: 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54   = "SQLITE_CONST
bbd0: 52 41 49 4e 54 5f 55 4e 49 51 55 45 22 3b 20 62  RAINT_UNIQUE"; b
bbe0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bbf0: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
bc00: 4e 54 5f 54 52 49 47 47 45 52 3a 20 7a 4e 61 6d  NT_TRIGGER: zNam
bc10: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53  e = "SQLITE_CONS
bc20: 54 52 41 49 4e 54 5f 54 52 49 47 47 45 52 22 3b  TRAINT_TRIGGER";
bc30: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bc40: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
bc50: 49 4e 54 5f 46 4f 52 45 49 47 4e 4b 45 59 3a 0a  INT_FOREIGNKEY:.
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
bc90: 43 4f 4e 53 54 52 41 49 4e 54 5f 46 4f 52 45 49  CONSTRAINT_FOREI
bca0: 47 4e 4b 45 59 22 3b 20 20 20 62 72 65 61 6b 3b  GNKEY";   break;
bcb0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
bcc0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 43 48  TE_CONSTRAINT_CH
bcd0: 45 43 4b 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22  ECK:   zName = "
bce0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
bcf0: 54 5f 43 48 45 43 4b 22 3b 20 20 62 72 65 61 6b  T_CHECK";  break
bd00: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
bd10: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 50  ITE_CONSTRAINT_P
bd20: 52 49 4d 41 52 59 4b 45 59 3a 0a 20 20 20 20 20  RIMARYKEY:.     
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd40: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
bd50: 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54   = "SQLITE_CONST
bd60: 52 41 49 4e 54 5f 50 52 49 4d 41 52 59 4b 45 59  RAINT_PRIMARYKEY
bd70: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
bd80: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
bd90: 4e 53 54 52 41 49 4e 54 5f 4e 4f 54 4e 55 4c 4c  NSTRAINT_NOTNULL
bda0: 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54  : zName = "SQLIT
bdb0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 4f 54  E_CONSTRAINT_NOT
bdc0: 4e 55 4c 4c 22 3b 62 72 65 61 6b 3b 0a 20 20 20  NULL";break;.   
bdd0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
bde0: 4f 4e 53 54 52 41 49 4e 54 5f 43 4f 4d 4d 49 54  ONSTRAINT_COMMIT
bdf0: 48 4f 4f 4b 3a 0a 20 20 20 20 20 20 20 20 20 20  HOOK:.          
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be10: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
be20: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
be30: 5f 43 4f 4d 4d 49 54 48 4f 4f 4b 22 3b 20 20 20  _COMMITHOOK";   
be40: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
be50: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
be60: 49 4e 54 5f 56 54 41 42 3a 20 20 20 20 7a 4e 61  INT_VTAB:    zNa
be70: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e  me = "SQLITE_CON
be80: 53 54 52 41 49 4e 54 5f 56 54 41 42 22 3b 20 20  STRAINT_VTAB";  
be90: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bea0: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  se SQLITE_CONSTR
beb0: 41 49 4e 54 5f 46 55 4e 43 54 49 4f 4e 3a 0a 20  AINT_FUNCTION:. 
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
bee0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
bef0: 4f 4e 53 54 52 41 49 4e 54 5f 46 55 4e 43 54 49  ONSTRAINT_FUNCTI
bf00: 4f 4e 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ON";     break;.
bf10: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
bf20: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 52 4f 57  E_CONSTRAINT_ROW
bf30: 49 44 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  ID:   zName = "S
bf40: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
bf50: 5f 52 4f 57 49 44 22 3b 20 20 62 72 65 61 6b 3b  _ROWID";  break;
bf60: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
bf70: 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 20  TE_MISMATCH:    
bf80: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
bf90: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22  SQLITE_MISMATCH"
bfa0: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
bfb0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
bfc0: 49 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20  ITE_MISUSE:     
bfd0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
bfe0: 22 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b  "SQLITE_MISUSE";
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
c000: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
c010: 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20  LITE_NOLFS:     
c020: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
c030: 20 22 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b   "SQLITE_NOLFS";
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
c050: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
c060: 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20  QLITE_AUTH:     
c070: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
c080: 3d 20 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b  = "SQLITE_AUTH";
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
c0a0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c0b0: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20  SQLITE_FORMAT:  
c0c0: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
c0d0: 20 3d 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41   = "SQLITE_FORMA
c0e0: 54 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62  T";            b
c0f0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c100: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20   SQLITE_RANGE:  
c110: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
c120: 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47  e = "SQLITE_RANG
c130: 45 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  E";             
c140: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c150: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a  e SQLITE_NOTADB:
c160: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
c170: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
c180: 41 44 42 22 3b 20 20 20 20 20 20 20 20 20 20 20  ADB";           
c190: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c1a0: 73 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20  se SQLITE_ROW:  
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
c1c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f  ame = "SQLITE_RO
c1d0: 57 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  W";             
c1e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c1f0: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43  ase SQLITE_NOTIC
c200: 45 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 7a  E:             z
c210: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e  Name = "SQLITE_N
c220: 4f 54 49 43 45 22 3b 20 20 20 20 20 20 20 20 20  OTICE";         
c230: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c240: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49  case SQLITE_NOTI
c250: 43 45 5f 52 45 43 4f 56 45 52 5f 57 41 4c 3a 20  CE_RECOVER_WAL: 
c260: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
c270: 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45 52 5f 57  NOTICE_RECOVER_W
c280: 41 4c 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20  AL";break;.     
c290: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54   case SQLITE_NOT
c2a0: 49 43 45 5f 52 45 43 4f 56 45 52 5f 52 4f 4c 4c  ICE_RECOVER_ROLL
c2b0: 42 41 43 4b 3a 0a 20 20 20 20 20 20 20 20 20 20  BACK:.          
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
c2e0: 51 4c 49 54 45 5f 4e 4f 54 49 43 45 5f 52 45 43  QLITE_NOTICE_REC
c2f0: 4f 56 45 52 5f 52 4f 4c 4c 42 41 43 4b 22 3b 20  OVER_ROLLBACK"; 
c300: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c310: 65 20 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47  e SQLITE_WARNING
c320: 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61  :            zNa
c330: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 57 41 52  me = "SQLITE_WAR
c340: 4e 49 4e 47 22 3b 20 20 20 20 20 20 20 20 20 20  NING";          
c350: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c360: 73 65 20 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e  se SQLITE_WARNIN
c370: 47 5f 41 55 54 4f 49 4e 44 45 58 3a 20 20 7a 4e  G_AUTOINDEX:  zN
c380: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 57 41  ame = "SQLITE_WA
c390: 52 4e 49 4e 47 5f 41 55 54 4f 49 4e 44 45 58 22  RNING_AUTOINDEX"
c3a0: 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ; break;.      c
c3b0: 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a  ase SQLITE_DONE:
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
c3d0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44  Name = "SQLITE_D
c3e0: 4f 4e 45 22 3b 20 20 20 20 20 20 20 20 20 20 20  ONE";           
c3f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
c400: 20 20 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d    }.  if( zName=
c410: 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  =0 ){.    static
c420: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
c430: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
c440: 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66  intf(sizeof(zBuf
c450: 29 2c 20 7a 42 75 66 2c 20 22 53 51 4c 49 54 45  ), zBuf, "SQLITE
c460: 5f 55 4e 4b 4e 4f 57 4e 28 25 64 29 22 2c 20 6f  _UNKNOWN(%d)", o
c470: 72 69 67 52 63 29 3b 0a 20 20 20 20 7a 4e 61 6d  rigRc);.    zNam
c480: 65 20 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20  e = zBuf;.  }.  
c490: 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a  return zName;.}.
c4a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
c4b0: 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74  turn a static st
c4c0: 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72 69  ring that descri
c4d0: 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20  bes the kind of 
c4e0: 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64 20  error specified 
c4f0: 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65  in the.** argume
c500: 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  nt..*/.const cha
c510: 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
c520: 28 69 6e 74 20 72 63 29 7b 0a 20 20 73 74 61 74  (int rc){.  stat
c530: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 63  ic const char* c
c540: 6f 6e 73 74 20 61 4d 73 67 5b 5d 20 3d 20 7b 0a  onst aMsg[] = {.
c550: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b      /* SQLITE_OK
c560: 20 20 20 20 20 20 20 20 20 20 2a 2f 20 22 6e 6f            */ "no
c570: 74 20 61 6e 20 65 72 72 6f 72 22 2c 0a 20 20 20  t an error",.   
c580: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 52 52 4f 52   /* SQLITE_ERROR
c590: 20 20 20 20 20 20 20 2a 2f 20 22 53 51 4c 20 6c         */ "SQL l
c5a0: 6f 67 69 63 20 65 72 72 6f 72 22 2c 0a 20 20 20  ogic error",.   
c5b0: 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54 45 52   /* SQLITE_INTER
c5c0: 4e 41 4c 20 20 20 20 2a 2f 20 30 2c 0a 20 20 20  NAL    */ 0,.   
c5d0: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 45 52 4d 20   /* SQLITE_PERM 
c5e0: 20 20 20 20 20 20 20 2a 2f 20 22 61 63 63 65 73         */ "acces
c5f0: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
c600: 69 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c  ied",.    /* SQL
c610: 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20 20 20  ITE_ABORT       
c620: 2a 2f 20 22 63 61 6c 6c 62 61 63 6b 20 72 65 71  */ "callback req
c630: 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62 6f  uested query abo
c640: 72 74 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49  rt",.    /* SQLI
c650: 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 20 2a  TE_BUSY        *
c660: 2f 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c  / "database is l
c670: 6f 63 6b 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53  ocked",.    /* S
c680: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20  QLITE_LOCKED    
c690: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 74    */ "database t
c6a0: 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 2c  able is locked",
c6b0: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e  .    /* SQLITE_N
c6c0: 4f 4d 45 4d 20 20 20 20 20 20 20 2a 2f 20 22 6f  OMEM       */ "o
c6d0: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 0a 20  ut of memory",. 
c6e0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52 45 41     /* SQLITE_REA
c6f0: 44 4f 4e 4c 59 20 20 20 20 2a 2f 20 22 61 74 74  DONLY    */ "att
c700: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
c710: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
c720: 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  e",.    /* SQLIT
c730: 45 5f 49 4e 54 45 52 52 55 50 54 20 20 20 2a 2f  E_INTERRUPT   */
c740: 20 22 69 6e 74 65 72 72 75 70 74 65 64 22 2c 0a   "interrupted",.
c750: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4f      /* SQLITE_IO
c760: 45 52 52 20 20 20 20 20 20 20 2a 2f 20 22 64 69  ERR       */ "di
c770: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 2c 0a 20  sk I/O error",. 
c780: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43 4f 52     /* SQLITE_COR
c790: 52 55 50 54 20 20 20 20 20 2a 2f 20 22 64 61 74  RUPT     */ "dat
c7a0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
c7b0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 2c 0a   is malformed",.
c7c0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f      /* SQLITE_NO
c7d0: 54 46 4f 55 4e 44 20 20 20 20 2a 2f 20 22 75 6e  TFOUND    */ "un
c7e0: 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e 22  known operation"
c7f0: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
c800: 46 55 4c 4c 20 20 20 20 20 20 20 20 2a 2f 20 22  FULL        */ "
c810: 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b  database or disk
c820: 20 69 73 20 66 75 6c 6c 22 2c 0a 20 20 20 20 2f   is full",.    /
c830: 2a 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  * SQLITE_CANTOPE
c840: 4e 20 20 20 20 2a 2f 20 22 75 6e 61 62 6c 65 20  N    */ "unable 
c850: 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
c860: 20 66 69 6c 65 22 2c 0a 20 20 20 20 2f 2a 20 53   file",.    /* S
c870: 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 20 20  QLITE_PROTOCOL  
c880: 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 20 70 72    */ "locking pr
c890: 6f 74 6f 63 6f 6c 22 2c 0a 20 20 20 20 2f 2a 20  otocol",.    /* 
c8a0: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20  SQLITE_EMPTY    
c8b0: 20 20 20 2a 2f 20 22 74 61 62 6c 65 20 63 6f 6e     */ "table con
c8c0: 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 2c 0a  tains no data",.
c8d0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 53 43      /* SQLITE_SC
c8e0: 48 45 4d 41 20 20 20 20 20 20 2a 2f 20 22 64 61  HEMA      */ "da
c8f0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
c900: 73 20 63 68 61 6e 67 65 64 22 2c 0a 20 20 20 20  s changed",.    
c910: 2f 2a 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  /* SQLITE_TOOBIG
c920: 20 20 20 20 20 20 2a 2f 20 22 73 74 72 69 6e 67        */ "string
c930: 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
c940: 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  ",.    /* SQLITE
c950: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 20 2a 2f 20  _CONSTRAINT  */ 
c960: 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  "constraint fail
c970: 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49  ed",.    /* SQLI
c980: 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 20 2a  TE_MISMATCH    *
c990: 2f 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d  / "datatype mism
c9a0: 61 74 63 68 22 2c 0a 20 20 20 20 2f 2a 20 53 51  atch",.    /* SQ
c9b0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20  LITE_MISUSE     
c9c0: 20 2a 2f 20 22 6c 69 62 72 61 72 79 20 72 6f 75   */ "library rou
c9d0: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
c9e0: 6f 66 20 73 65 71 75 65 6e 63 65 22 2c 0a 20 20  of sequence",.  
c9f0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4c 46    /* SQLITE_NOLF
ca00: 53 20 20 20 20 20 20 20 2a 2f 20 22 6c 61 72 67  S       */ "larg
ca10: 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 69  e file support i
ca20: 73 20 64 69 73 61 62 6c 65 64 22 2c 0a 20 20 20  s disabled",.   
ca30: 20 2f 2a 20 53 51 4c 49 54 45 5f 41 55 54 48 20   /* SQLITE_AUTH 
ca40: 20 20 20 20 20 20 20 2a 2f 20 22 61 75 74 68 6f         */ "autho
ca50: 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 22  rization denied"
ca60: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
ca70: 46 4f 52 4d 41 54 20 20 20 20 20 20 2a 2f 20 22  FORMAT      */ "
ca80: 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
ca90: 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22  se format error"
caa0: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
cab0: 52 41 4e 47 45 20 20 20 20 20 20 20 2a 2f 20 22  RANGE       */ "
cac0: 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69  bind or column i
cad0: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
cae0: 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  e",.    /* SQLIT
caf0: 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 20 2a 2f  E_NOTADB      */
cb00: 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70   "file is encryp
cb10: 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20  ted or is not a 
cb20: 64 61 74 61 62 61 73 65 22 2c 0a 20 20 7d 3b 0a  database",.  };.
cb30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
cb40: 72 72 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72  rr = "unknown er
cb50: 72 6f 72 22 3b 0a 20 20 73 77 69 74 63 68 28 20  ror";.  switch( 
cb60: 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  rc ){.    case S
cb70: 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
cb80: 42 41 43 4b 3a 20 7b 0a 20 20 20 20 20 20 7a 45  BACK: {.      zE
cb90: 72 72 20 3d 20 22 61 62 6f 72 74 20 64 75 65 20  rr = "abort due 
cba0: 74 6f 20 52 4f 4c 4c 42 41 43 4b 22 3b 0a 20 20  to ROLLBACK";.  
cbb0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
cbc0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a  .    default: {.
cbd0: 20 20 20 20 20 20 72 63 20 26 3d 20 30 78 66 66        rc &= 0xff
cbe0: 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57 41  ;.      if( ALWA
cbf0: 59 53 28 72 63 3e 3d 30 29 20 26 26 20 72 63 3c  YS(rc>=0) && rc<
cc00: 41 72 72 61 79 53 69 7a 65 28 61 4d 73 67 29 20  ArraySize(aMsg) 
cc10: 26 26 20 61 4d 73 67 5b 72 63 5d 21 3d 30 20 29  && aMsg[rc]!=0 )
cc20: 7b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d  {.        zErr =
cc30: 20 61 4d 73 67 5b 72 63 5d 3b 0a 20 20 20 20 20   aMsg[rc];.     
cc40: 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
cc50: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
cc60: 72 6e 20 7a 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn zErr;.}../*.*
cc70: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
cc80: 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79  mplements a busy
cc90: 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73   callback that s
cca0: 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a  leeps and tries.
ccb0: 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61  ** again until a
ccc0: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69   timeout value i
ccd0: 73 20 72 65 61 63 68 65 64 2e 20 20 54 68 65 20  s reached.  The 
cce0: 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73  timeout value is
ccf0: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e  .** an integer n
cd00: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
cd10: 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20  conds passed in 
cd20: 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
cd30: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61  argument..*/.sta
cd40: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65  tic int sqliteDe
cd50: 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63  faultBusyCallbac
cd60: 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72 2c 20 20  k(. void *ptr,  
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cd80: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
cd90: 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e  ion */. int coun
cda0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
cdb0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
cdc0: 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62 65  mes table has be
cdd0: 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69  en busy */.){.#i
cde0: 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20  f SQLITE_OS_WIN 
cdf0: 7c 7c 20 48 41 56 45 5f 55 53 4c 45 45 50 0a 20  || HAVE_USLEEP. 
ce00: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
ce10: 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20   delays[] =.    
ce20: 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20   { 1, 2, 5, 10, 
ce30: 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20  15, 20, 25, 25, 
ce40: 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 31   25,  50,  50, 1
ce50: 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63  00 };.  static c
ce60: 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73 5b 5d  onst u8 totals[]
ce70: 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20   =.     { 0, 1, 
ce80: 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35  3,  8, 18, 33, 5
ce90: 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c  3, 78, 103, 128,
cea0: 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23 20 64   178, 228 };.# d
ceb0: 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 41 72 72  efine NDELAY Arr
cec0: 61 79 53 69 7a 65 28 64 65 6c 61 79 73 29 0a 20  aySize(delays). 
ced0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 28   sqlite3 *db = (
cee0: 73 71 6c 69 74 65 33 20 2a 29 70 74 72 3b 0a 20  sqlite3 *)ptr;. 
cef0: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 64   int timeout = d
cf00: 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b 0a  b->busyTimeout;.
cf10: 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72 69    int delay, pri
cf20: 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 63  or;..  assert( c
cf30: 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  ount>=0 );.  if(
cf40: 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41 59 20   count < NDELAY 
cf50: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  ){.    delay = d
cf60: 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20  elays[count];.  
cf70: 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73    prior = totals
cf80: 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c 73 65  [count];.  }else
cf90: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65  {.    delay = de
cfa0: 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a  lays[NDELAY-1];.
cfb0: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
cfc0: 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64  ls[NDELAY-1] + d
cfd0: 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e 44 45  elay*(count-(NDE
cfe0: 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 69  LAY-1));.  }.  i
cff0: 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79  f( prior + delay
d000: 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20   > timeout ){.  
d010: 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75    delay = timeou
d020: 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69  t - prior;.    i
d030: 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65  f( delay<=0 ) re
d040: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71  turn 0;.  }.  sq
d050: 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64 62 2d  lite3OsSleep(db-
d060: 3e 70 56 66 73 2c 20 64 65 6c 61 79 2a 31 30 30  >pVfs, delay*100
d070: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a  0);.  return 1;.
d080: 23 65 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 20  #else.  sqlite3 
d090: 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 33 20 2a  *db = (sqlite3 *
d0a0: 29 70 74 72 3b 0a 20 20 69 6e 74 20 74 69 6d 65  )ptr;.  int time
d0b0: 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33 20  out = ((sqlite3 
d0c0: 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d 65  *)ptr)->busyTime
d0d0: 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e  out;.  if( (coun
d0e0: 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65  t+1)*1000 > time
d0f0: 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72  out ){.    retur
d100: 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n 0;.  }.  sqlit
d110: 65 33 4f 73 53 6c 65 65 70 28 64 62 2d 3e 70 56  e3OsSleep(db->pV
d120: 66 73 2c 20 31 30 30 30 30 30 30 29 3b 0a 20 20  fs, 1000000);.  
d130: 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66  return 1;.#endif
d140: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  .}../*.** Invoke
d150: 20 74 68 65 20 67 69 76 65 6e 20 62 75 73 79 20   the given busy 
d160: 68 61 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  handler..**.** T
d170: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 63  his routine is c
d180: 61 6c 6c 65 64 20 77 68 65 6e 20 61 6e 20 6f 70  alled when an op
d190: 65 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 77  eration failed w
d1a0: 69 74 68 20 61 20 6c 6f 63 6b 2e 0a 2a 2a 20 49  ith a lock..** I
d1b0: 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  f this routine r
d1c0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
d1d0: 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 72 65 74   the lock is ret
d1e0: 72 69 65 64 2e 20 20 49 66 20 69 74 0a 2a 2a 20  ried.  If it.** 
d1f0: 72 65 74 75 72 6e 73 20 30 2c 20 74 68 65 20 6f  returns 0, the o
d200: 70 65 72 61 74 69 6f 6e 20 61 62 6f 72 74 73 20  peration aborts 
d210: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 42  with an SQLITE_B
d220: 55 53 59 20 65 72 72 6f 72 2e 0a 2a 2f 0a 69 6e  USY error..*/.in
d230: 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
d240: 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
d250: 61 6e 64 6c 65 72 20 2a 70 29 7b 0a 20 20 69 6e  andler *p){.  in
d260: 74 20 72 63 3b 0a 20 20 69 66 28 20 4e 45 56 45  t rc;.  if( NEVE
d270: 52 28 70 3d 3d 30 29 20 7c 7c 20 70 2d 3e 78 46  R(p==0) || p->xF
d280: 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 42 75  unc==0 || p->nBu
d290: 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20 30 3b  sy<0 ) return 0;
d2a0: 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75 6e 63  .  rc = p->xFunc
d2b0: 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e 42 75  (p->pArg, p->nBu
d2c0: 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30  sy);.  if( rc==0
d2d0: 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79   ){.    p->nBusy
d2e0: 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
d2f0: 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b 3b 0a      p->nBusy++;.
d300: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
d310: 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20   .}../*.** This 
d320: 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65  routine sets the
d330: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66   busy callback f
d340: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
d350: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
d360: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
d370: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
d380: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
d390: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
d3a0: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20  busy_handler(.  
d3b0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69  sqlite3 *db,.  i
d3c0: 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64  nt (*xBusy)(void
d3d0: 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a  *,int),.  void *
d3e0: 70 41 72 67 0a 29 7b 0a 23 69 66 64 65 66 20 53  pArg.){.#ifdef S
d3f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
d400: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
d410: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
d420: 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20  Ok(db) ) return 
d430: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
d440: 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c  PT;.#endif.  sql
d450: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
d460: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 64  (db->mutex);.  d
d470: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 78  b->busyHandler.x
d480: 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20 20  Func = xBusy;.  
d490: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
d4a0: 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 64  pArg = pArg;.  d
d4b0: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
d4c0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  Busy = 0;.  db->
d4d0: 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 30 3b  busyTimeout = 0;
d4e0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
d4f0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
d500: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
d510: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  TE_OK;.}..#ifnde
d520: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
d530: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
d540: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
d550: 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f 67  ne sets the prog
d560: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f  ress callback fo
d570: 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61  r an Sqlite data
d580: 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67  base to the.** g
d590: 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75  iven callback fu
d5a0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20  nction with the 
d5b0: 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20  given argument. 
d5c0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
d5d0: 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65  lback will.** be
d5e0: 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e   invoked every n
d5f0: 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  Ops opcodes..*/.
d600: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f  void sqlite3_pro
d610: 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20  gress_handler(. 
d620: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
d630: 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74   int nOps,.  int
d640: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
d650: 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70  id*), .  void *p
d660: 41 72 67 0a 29 7b 0a 23 69 66 64 65 66 20 53 51  Arg.){.#ifdef SQ
d670: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
d680: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
d690: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
d6a0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f  k(db) ){.    (vo
d6b0: 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  id)SQLITE_MISUSE
d6c0: 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72  _BKPT;.    retur
d6d0: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
d6e0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
d6f0: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
d700: 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a    if( nOps>0 ){.
d710: 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73      db->xProgres
d720: 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20  s = xProgress;. 
d730: 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73     db->nProgress
d740: 4f 70 73 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Ops = (unsigned)
d750: 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d 3e 70 50  nOps;.    db->pP
d760: 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70 41 72  rogressArg = pAr
d770: 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  g;.  }else{.    
d780: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20  db->xProgress = 
d790: 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67  0;.    db->nProg
d7a0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20  ressOps = 0;.   
d7b0: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
d7c0: 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  g = 0;.  }.  sql
d7d0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
d7e0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 7d 0a 23  (db->mutex);.}.#
d7f0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  endif.../*.** Th
d800: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74 61  is routine insta
d810: 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62 75  lls a default bu
d820: 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74 20  sy handler that 
d830: 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a 2a  waits for the.**
d840: 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65   specified numbe
d850: 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r of millisecond
d860: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
d870: 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ng 0..*/.int sql
d880: 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
d890: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
d8a0: 6e 74 20 6d 73 29 7b 0a 23 69 66 64 65 66 20 53  nt ms){.#ifdef S
d8b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
d8c0: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
d8d0: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
d8e0: 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20  Ok(db) ) return 
d8f0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
d900: 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  PT;.#endif.  if(
d910: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c   ms>0 ){.    sql
d920: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
d930: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
d940: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
d950: 20 28 76 6f 69 64 2a 29 64 62 29 3b 0a 20 20 20   (void*)db);.   
d960: 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74   db->busyTimeout
d970: 20 3d 20 6d 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = ms;.  }else{.
d980: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
d990: 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20  _handler(db, 0, 
d9a0: 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
d9b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
d9c0: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
d9d0: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
d9e0: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
d9f0: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
da00: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
da10: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
da20: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23 69  sqlite3 *db){.#i
da30: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
da40: 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69  LE_API_ARMOR.  i
da50: 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
da60: 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 26 26 20  yCheckOk(db) && 
da70: 28 64 62 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6d 61  (db==0 || db->ma
da80: 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49  gic!=SQLITE_MAGI
da90: 43 5f 5a 4f 4d 42 49 45 29 20 29 7b 0a 20 20 20  C_ZOMBIE) ){.   
daa0: 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49   (void)SQLITE_MI
dab0: 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72  SUSE_BKPT;.    r
dac0: 65 74 75 72 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  eturn;.  }.#endi
dad0: 66 0a 20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  f.  db->u1.isInt
dae0: 65 72 72 75 70 74 65 64 20 3d 20 31 3b 0a 7d 0a  errupted = 1;.}.
daf0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
db00: 63 74 69 6f 6e 20 69 73 20 65 78 61 63 74 6c 79  ction is exactly
db10: 20 74 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c   the same as sql
db20: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
db30: 74 69 6f 6e 28 29 2c 20 65 78 63 65 70 74 0a 2a  tion(), except.*
db40: 2a 20 74 68 61 74 20 69 74 20 69 73 20 64 65 73  * that it is des
db50: 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c 6c  igned to be call
db60: 65 64 20 62 79 20 69 6e 74 65 72 6e 61 6c 20 63  ed by internal c
db70: 6f 64 65 2e 20 54 68 65 20 64 69 66 66 65 72 65  ode. The differe
db80: 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61 74 20 69  nce is.** that i
db90: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
dba0: 6c 73 20 69 6e 20 73 71 6c 69 74 65 33 5f 63 72  ls in sqlite3_cr
dbb0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 2c  eate_function(),
dbc0: 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 0a 2a   an error code.*
dbd0: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e  * is returned an
dbe0: 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c  d the mallocFail
dbf0: 65 64 20 66 6c 61 67 20 63 6c 65 61 72 65 64 2e  ed flag cleared.
dc00: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
dc10: 43 72 65 61 74 65 46 75 6e 63 28 0a 20 20 73 71  CreateFunc(.  sq
dc20: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e  lite3 *db,.  con
dc30: 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69  st char *zFuncti
dc40: 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41  onName,.  int nA
dc50: 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20  rg,.  int enc,. 
dc60: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
dc70: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e  ,.  void (*xSFun
dc80: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
dc90: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
dca0: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
dcb0: 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74  d (*xStep)(sqlit
dcc0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
dcd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
dce0: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  ),.  void (*xFin
dcf0: 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  al)(sqlite3_cont
dd00: 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
dd10: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
dd20: 63 74 6f 72 0a 29 7b 0a 20 20 46 75 6e 63 44 65  ctor.){.  FuncDe
dd30: 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d  f *p;.  int nNam
dd40: 65 3b 0a 20 20 69 6e 74 20 65 78 74 72 61 46 6c  e;.  int extraFl
dd50: 61 67 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ags;..  assert( 
dd60: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
dd70: 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  ld(db->mutex) );
dd80: 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69 6f 6e  .  if( zFunction
dd90: 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20 20  Name==0 ||.     
dda0: 20 28 78 53 46 75 6e 63 20 26 26 20 28 78 46 69   (xSFunc && (xFi
ddb0: 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29 20 7c  nal || xStep)) |
ddc0: 7c 20 0a 20 20 20 20 20 20 28 21 78 53 46 75 6e  | .      (!xSFun
ddd0: 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26 20  c && (xFinal && 
dde0: 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20  !xStep)) ||.    
ddf0: 20 20 28 21 78 53 46 75 6e 63 20 26 26 20 28 21    (!xSFunc && (!
de00: 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29  xFinal && xStep)
de10: 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67  ) ||.      (nArg
de20: 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 53 51 4c 49  <-1 || nArg>SQLI
de30: 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
de40: 41 52 47 29 20 7c 7c 0a 20 20 20 20 20 20 28 32  ARG) ||.      (2
de50: 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 71 6c 69  55<(nName = sqli
de60: 74 65 33 53 74 72 6c 65 6e 33 30 28 20 7a 46 75  te3Strlen30( zFu
de70: 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b  nctionName))) ){
de80: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
de90: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
dea0: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 53    }..  assert( S
deb0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
dec0: 41 4e 54 3d 3d 53 51 4c 49 54 45 5f 44 45 54 45  ANT==SQLITE_DETE
ded0: 52 4d 49 4e 49 53 54 49 43 20 29 3b 0a 20 20 65  RMINISTIC );.  e
dee0: 78 74 72 61 46 6c 61 67 73 20 3d 20 65 6e 63 20  xtraFlags = enc 
def0: 26 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  &  SQLITE_DETERM
df00: 49 4e 49 53 54 49 43 3b 0a 20 20 65 6e 63 20 26  INISTIC;.  enc &
df10: 3d 20 28 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  = (SQLITE_FUNC_E
df20: 4e 43 4d 41 53 4b 7c 53 51 4c 49 54 45 5f 41 4e  NCMASK|SQLITE_AN
df30: 59 29 3b 0a 20 20 0a 23 69 66 6e 64 65 66 20 53  Y);.  .#ifndef S
df40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
df50: 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f  .  /* If SQLITE_
df60: 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69  UTF16 is specifi
df70: 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69  ed as the encodi
df80: 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f  ng type, transfo
df90: 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20  rm this.  ** to 
dfa0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54  one of SQLITE_UT
dfb0: 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f  F16LE or SQLITE_
dfc0: 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68  UTF16BE using th
dfd0: 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54  e.  ** SQLITE_UT
dfe0: 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e  F16NATIVE macro.
dff0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73   SQLITE_UTF16 is
e000: 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e   not used intern
e010: 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ally..  **.  ** 
e020: 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69 73  If SQLITE_ANY is
e030: 20 73 70 65 63 69 66 69 65 64 2c 20 61 64 64 20   specified, add 
e040: 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f  three versions o
e050: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20  f the function. 
e060: 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68 20   ** to the hash 
e070: 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  table..  */.  if
e080: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ( enc==SQLITE_UT
e090: 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d  F16 ){.    enc =
e0a0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
e0b0: 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  IVE;.  }else if(
e0c0: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59   enc==SQLITE_ANY
e0d0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a   ){.    int rc;.
e0e0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
e0f0: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
e100: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
e110: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
e120: 65 78 74 72 61 46 6c 61 67 73 2c 0a 20 20 20 20  extraFlags,.    
e130: 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c 20       pUserData, 
e140: 78 53 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78  xSFunc, xStep, x
e150: 46 69 6e 61 6c 2c 20 70 44 65 73 74 72 75 63 74  Final, pDestruct
e160: 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  or);.    if( rc=
e170: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
e180: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
e190: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
e1a0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
e1b0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  rg, SQLITE_UTF16
e1c0: 4c 45 7c 65 78 74 72 61 46 6c 61 67 73 2c 0a 20  LE|extraFlags,. 
e1d0: 20 20 20 20 20 20 20 20 20 70 55 73 65 72 44 61           pUserDa
e1e0: 74 61 2c 20 78 53 46 75 6e 63 2c 20 78 53 74 65  ta, xSFunc, xSte
e1f0: 70 2c 20 78 46 69 6e 61 6c 2c 20 70 44 65 73 74  p, xFinal, pDest
e200: 72 75 63 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  ructor);.    }. 
e210: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
e220: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
e230: 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20  turn rc;.    }. 
e240: 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f     enc = SQLITE_
e250: 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c  UTF16BE;.  }.#el
e260: 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  se.  enc = SQLIT
e270: 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20  E_UTF8;.#endif. 
e280: 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20   .  /* Check if 
e290: 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63  an existing func
e2a0: 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f 76  tion is being ov
e2b0: 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65 6c 65  erridden or dele
e2c0: 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a  ted. If so,.  **
e2d0: 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61   and there are a
e2e0: 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65 6e 20  ctive VMs, then 
e2f0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
e300: 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74 69 6f  SY. If a functio
e310: 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20  n.  ** is being 
e320: 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c 65 74  overridden/delet
e330: 65 64 20 62 75 74 20 74 68 65 72 65 20 61 72 65  ed but there are
e340: 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20   no active VMs, 
e350: 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f  allow the.  ** o
e360: 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74  peration to cont
e370: 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c 69 64  inue but invalid
e380: 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69  ate all precompi
e390: 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  led statements..
e3a0: 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74    */.  p = sqlit
e3b0: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
e3c0: 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  b, zFunctionName
e3d0: 2c 20 6e 41 72 67 2c 20 28 75 38 29 65 6e 63 2c  , nArg, (u8)enc,
e3e0: 20 30 29 3b 0a 20 20 69 66 28 20 70 20 26 26 20   0);.  if( p && 
e3f0: 28 70 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  (p->funcFlags & 
e400: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
e410: 41 53 4b 29 3d 3d 65 6e 63 20 26 26 20 70 2d 3e  ASK)==enc && p->
e420: 6e 41 72 67 3d 3d 6e 41 72 67 20 29 7b 0a 20 20  nArg==nArg ){.  
e430: 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 41    if( db->nVdbeA
e440: 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20 20 73  ctive ){.      s
e450: 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
e460: 73 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55  sg(db, SQLITE_BU
e470: 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22 75 6e  SY, .        "un
e480: 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d  able to delete/m
e490: 6f 64 69 66 79 20 75 73 65 72 2d 66 75 6e 63 74  odify user-funct
e4a0: 69 6f 6e 20 64 75 65 20 74 6f 20 61 63 74 69 76  ion due to activ
e4b0: 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a  e statements");.
e4c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
e4d0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
e4e0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
e4f0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
e500: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
e510: 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
e520: 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
e530: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
e540: 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46  p = sqlite3FindF
e550: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
e560: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  ctionName, nArg,
e570: 20 28 75 38 29 65 6e 63 2c 20 31 29 3b 0a 20 20   (u8)enc, 1);.  
e580: 61 73 73 65 72 74 28 70 20 7c 7c 20 64 62 2d 3e  assert(p || db->
e590: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 29 3b 0a 20  mallocFailed);. 
e5a0: 20 69 66 28 20 21 70 20 29 7b 0a 20 20 20 20 72   if( !p ){.    r
e5b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
e5c0: 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 0a 20 20  EM_BKPT;.  }..  
e5d0: 2f 2a 20 49 66 20 61 6e 20 6f 6c 64 65 72 20 76  /* If an older v
e5e0: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 75  ersion of the fu
e5f0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 63 6f  nction with a co
e600: 6e 66 69 67 75 72 65 64 20 64 65 73 74 72 75 63  nfigured destruc
e610: 74 6f 72 20 69 73 0a 20 20 2a 2a 20 62 65 69 6e  tor is.  ** bein
e620: 67 20 72 65 70 6c 61 63 65 64 20 69 6e 76 6f 6b  g replaced invok
e630: 65 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  e the destructor
e640: 20 66 75 6e 63 74 69 6f 6e 20 68 65 72 65 2e 20   function here. 
e650: 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 44 65 73  */.  functionDes
e660: 74 72 6f 79 28 64 62 2c 20 70 29 3b 0a 0a 20 20  troy(db, p);..  
e670: 69 66 28 20 70 44 65 73 74 72 75 63 74 6f 72 20  if( pDestructor 
e680: 29 7b 0a 20 20 20 20 70 44 65 73 74 72 75 63 74  ){.    pDestruct
e690: 6f 72 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 0a  or->nRef++;.  }.
e6a0: 20 20 70 2d 3e 75 2e 70 44 65 73 74 72 75 63 74    p->u.pDestruct
e6b0: 6f 72 20 3d 20 70 44 65 73 74 72 75 63 74 6f 72  or = pDestructor
e6c0: 3b 0a 20 20 70 2d 3e 66 75 6e 63 46 6c 61 67 73  ;.  p->funcFlags
e6d0: 20 3d 20 28 70 2d 3e 66 75 6e 63 46 6c 61 67 73   = (p->funcFlags
e6e0: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45   & SQLITE_FUNC_E
e6f0: 4e 43 4d 41 53 4b 29 20 7c 20 65 78 74 72 61 46  NCMASK) | extraF
e700: 6c 61 67 73 3b 0a 20 20 74 65 73 74 63 61 73 65  lags;.  testcase
e710: 28 20 70 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26  ( p->funcFlags &
e720: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
e730: 49 53 54 49 43 20 29 3b 0a 20 20 70 2d 3e 78 53  ISTIC );.  p->xS
e740: 46 75 6e 63 20 3d 20 78 53 46 75 6e 63 20 3f 20  Func = xSFunc ? 
e750: 78 53 46 75 6e 63 20 3a 20 78 53 74 65 70 3b 0a  xSFunc : xStep;.
e760: 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65 20 3d    p->xFinalize =
e770: 20 78 46 69 6e 61 6c 3b 0a 20 20 70 2d 3e 70 55   xFinal;.  p->pU
e780: 73 65 72 44 61 74 61 20 3d 20 70 55 73 65 72 44  serData = pUserD
e790: 61 74 61 3b 0a 20 20 70 2d 3e 6e 41 72 67 20 3d  ata;.  p->nArg =
e7a0: 20 28 75 31 36 29 6e 41 72 67 3b 0a 20 20 72 65   (u16)nArg;.  re
e7b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
e7c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
e7d0: 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69 6f  new user functio
e7e0: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
e7f0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
e800: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  on(.  sqlite3 *d
e810: 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
e820: 2a 7a 46 75 6e 63 2c 0a 20 20 69 6e 74 20 6e 41  *zFunc,.  int nA
e830: 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20  rg,.  int enc,. 
e840: 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64   void *p,.  void
e850: 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74   (*xSFunc)(sqlit
e860: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
e870: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
e880: 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  ),.  void (*xSte
e890: 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  p)(sqlite3_conte
e8a0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
e8b0: 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
e8c0: 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69  d (*xFinal)(sqli
e8d0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b  te3_context*).){
e8e0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
e8f0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
e900: 6e 5f 76 32 28 64 62 2c 20 7a 46 75 6e 63 2c 20  n_v2(db, zFunc, 
e910: 6e 41 72 67 2c 20 65 6e 63 2c 20 70 2c 20 78 53  nArg, enc, p, xS
e920: 46 75 6e 63 2c 20 78 53 74 65 70 2c 0a 20 20 20  Func, xStep,.   
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 78 46 69 6e 61 6c 2c 20 30 29 3b 0a 7d 0a 0a   xFinal, 0);.}..
e960: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61  int sqlite3_crea
e970: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 0a  te_function_v2(.
e980: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
e990: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75   const char *zFu
e9a0: 6e 63 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  nc,.  int nArg,.
e9b0: 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f 69    int enc,.  voi
e9c0: 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78  d *p,.  void (*x
e9d0: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
e9e0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
e9f0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
ea00: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
ea10: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
ea20: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
ea30: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
ea40: 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f  xFinal)(sqlite3_
ea50: 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69  context*),.  voi
ea60: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
ea70: 69 64 20 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72  id *).){.  int r
ea80: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
ea90: 3b 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ;.  FuncDestruct
eaa0: 6f 72 20 2a 70 41 72 67 20 3d 20 30 3b 0a 0a 23  or *pArg = 0;..#
eab0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
eac0: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
ead0: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
eae0: 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
eaf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
eb00: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
eb10: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
eb20: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
eb30: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69  (db->mutex);.  i
eb40: 66 28 20 78 44 65 73 74 72 6f 79 20 29 7b 0a 20  f( xDestroy ){. 
eb50: 20 20 20 70 41 72 67 20 3d 20 28 46 75 6e 63 44     pArg = (FuncD
eb60: 65 73 74 72 75 63 74 6f 72 20 2a 29 73 71 6c 69  estructor *)sqli
eb70: 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
eb80: 64 62 2c 20 73 69 7a 65 6f 66 28 46 75 6e 63 44  db, sizeof(FuncD
eb90: 65 73 74 72 75 63 74 6f 72 29 29 3b 0a 20 20 20  estructor));.   
eba0: 20 69 66 28 20 21 70 41 72 67 20 29 7b 0a 20 20   if( !pArg ){.  
ebb0: 20 20 20 20 78 44 65 73 74 72 6f 79 28 70 29 3b      xDestroy(p);
ebc0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 75 74 3b  .      goto out;
ebd0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 41 72 67 2d  .    }.    pArg-
ebe0: 3e 78 44 65 73 74 72 6f 79 20 3d 20 78 44 65 73  >xDestroy = xDes
ebf0: 74 72 6f 79 3b 0a 20 20 20 20 70 41 72 67 2d 3e  troy;.    pArg->
ec00: 70 55 73 65 72 44 61 74 61 20 3d 20 70 3b 0a 20  pUserData = p;. 
ec10: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
ec20: 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20  3CreateFunc(db, 
ec30: 7a 46 75 6e 63 2c 20 6e 41 72 67 2c 20 65 6e 63  zFunc, nArg, enc
ec40: 2c 20 70 2c 20 78 53 46 75 6e 63 2c 20 78 53 74  , p, xSFunc, xSt
ec50: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 70 41 72 67  ep, xFinal, pArg
ec60: 29 3b 0a 20 20 69 66 28 20 70 41 72 67 20 26 26  );.  if( pArg &&
ec70: 20 70 41 72 67 2d 3e 6e 52 65 66 3d 3d 30 20 29   pArg->nRef==0 )
ec80: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
ec90: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  !=SQLITE_OK );. 
eca0: 20 20 20 78 44 65 73 74 72 6f 79 28 70 29 3b 0a     xDestroy(p);.
ecb0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
ecc0: 65 28 64 62 2c 20 70 41 72 67 29 3b 0a 20 20 7d  e(db, pArg);.  }
ecd0: 0a 0a 20 6f 75 74 3a 0a 20 20 72 63 20 3d 20 73  .. out:.  rc = s
ece0: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62  qlite3ApiExit(db
ecf0: 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33  , rc);.  sqlite3
ed00: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
ed10: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
ed20: 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  n rc;.}..#ifndef
ed30: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
ed40: 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  16.int sqlite3_c
ed50: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
ed60: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
ed70: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
ed80: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20  FunctionName,.  
ed90: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20  int nArg,.  int 
eda0: 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64  eTextRep,.  void
edb0: 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53   *p,.  void (*xS
edc0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
edd0: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
ede0: 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76  e3_value**),.  v
edf0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
ee00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
ee10: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
ee20: 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69  *),.  void (*xFi
ee30: 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  nal)(sqlite3_con
ee40: 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20  text*).){.  int 
ee50: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75 6e  rc;.  char *zFun
ee60: 63 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  c8;..#ifdef SQLI
ee70: 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
ee80: 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
ee90: 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
eea0: 64 62 29 20 7c 7c 20 7a 46 75 6e 63 74 69 6f 6e  db) || zFunction
eeb0: 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72 6e  Name==0 ) return
eec0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
eed0: 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  KPT;.#endif.  sq
eee0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
eef0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
ef00: 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
ef10: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 7a  locFailed );.  z
ef20: 46 75 6e 63 38 20 3d 20 73 71 6c 69 74 65 33 55  Func8 = sqlite3U
ef30: 74 66 31 36 74 6f 38 28 64 62 2c 20 7a 46 75 6e  tf16to8(db, zFun
ef40: 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31 2c 20 53  ctionName, -1, S
ef50: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
ef60: 45 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  E);.  rc = sqlit
ef70: 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c  e3CreateFunc(db,
ef80: 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20 65   zFunc8, nArg, e
ef90: 54 65 78 74 52 65 70 2c 20 70 2c 20 78 53 46 75  TextRep, p, xSFu
efa0: 6e 63 2c 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  nc,xStep,xFinal,
efb0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  0);.  sqlite3DbF
efc0: 72 65 65 28 64 62 2c 20 7a 46 75 6e 63 38 29 3b  ree(db, zFunc8);
efd0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
efe0: 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
eff0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
f000: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
f010: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
f020: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
f030: 44 65 63 6c 61 72 65 20 74 68 61 74 20 61 20 66  Declare that a f
f040: 75 6e 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  unction has been
f050: 20 6f 76 65 72 6c 6f 61 64 65 64 20 62 79 20 61   overloaded by a
f060: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
f070: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 75 6e  **.** If the fun
f080: 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 20 65 78  ction already ex
f090: 69 73 74 73 20 61 73 20 61 20 72 65 67 75 6c 61  ists as a regula
f0a0: 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74 69 6f  r global functio
f0b0: 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20  n, then.** this 
f0c0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
f0d0: 6f 70 2e 20 20 49 66 20 74 68 65 20 66 75 6e 63  op.  If the func
f0e0: 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 65 78  tion does not ex
f0f0: 69 73 74 2c 20 74 68 65 6e 20 63 72 65 61 74 65  ist, then create
f100: 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20 74 68  .** a new one th
f110: 61 74 20 61 6c 77 61 79 73 20 74 68 72 6f 77 73  at always throws
f120: 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72 72 6f   a run-time erro
f130: 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  r.  .**.** When 
f140: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 69  virtual tables i
f150: 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76 69 64 65  ntend to provide
f160: 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 66   an overloaded f
f170: 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a 2a 2a  unction, they.**
f180: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69   should call thi
f190: 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6b  s routine to mak
f1a0: 65 20 73 75 72 65 20 74 68 65 20 67 6c 6f 62 61  e sure the globa
f1b0: 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73 74  l function exist
f1c0: 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c 20 66  s..** A global f
f1d0: 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65 78 69  unction must exi
f1e0: 73 74 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20  st in order for 
f1f0: 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
f200: 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f 70 65  to work.** prope
f210: 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  rly..*/.int sqli
f220: 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66 75 6e  te3_overload_fun
f230: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ction(.  sqlite3
f240: 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68   *db,.  const ch
f250: 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e 74  ar *zName,.  int
f260: 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74 20 72   nArg.){.  int r
f270: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a  c = SQLITE_OK;..
f280: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
f290: 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
f2a0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
f2b0: 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 7c  etyCheckOk(db) |
f2c0: 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20 6e 41  | zName==0 || nA
f2d0: 72 67 3c 2d 32 20 29 7b 0a 20 20 20 20 72 65 74  rg<-2 ){.    ret
f2e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
f2f0: 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64  E_BKPT;.  }.#end
f300: 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
f310: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
f320: 65 78 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ex);.  if( sqlit
f330: 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64  e3FindFunction(d
f340: 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  b, zName, nArg, 
f350: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 29 3d  SQLITE_UTF8, 0)=
f360: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
f370: 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
f380: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41 72 67  (db, zName, nArg
f390: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20  , SQLITE_UTF8,. 
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3b0: 20 20 20 20 20 20 20 20 20 20 30 2c 20 73 71 6c            0, sql
f3c0: 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
f3d0: 69 6f 6e 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  ion, 0, 0, 0);. 
f3e0: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
f3f0: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
f400: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
f410: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
f420: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
f430: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
f440: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a  TE_OMIT_TRACE./*
f450: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 74  .** Register a t
f460: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  race function.  
f470: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
f480: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
f490: 69 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a  istered trace.**
f4a0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a   is returned.  .
f4b0: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61  **.** A NULL tra
f4c0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e  ce function mean
f4d0: 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e  s that no tracin
f4e0: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
f4f0: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72  A non-NULL.** tr
f500: 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
f510: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
f520: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
f530: 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 65  t the start of e
f540: 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65  ach.** SQL state
f550: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ment..*/.#ifndef
f560: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
f570: 52 45 43 41 54 45 44 0a 76 6f 69 64 20 2a 73 71  RECATED.void *sq
f580: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
f590: 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 28 2a 78  te3 *db, void(*x
f5a0: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
f5b0: 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20  st char*), void 
f5c0: 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a  *pArg){.  void *
f5d0: 70 4f 6c 64 3b 0a 0a 23 69 66 64 65 66 20 53 51  pOld;..#ifdef SQ
f5e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
f5f0: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
f600: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
f610: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f  k(db) ){.    (vo
f620: 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  id)SQLITE_MISUSE
f630: 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72  _BKPT;.    retur
f640: 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  n 0;.  }.#endif.
f650: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
f660: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
f670: 3b 0a 20 20 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  ;.  pOld = db->p
f680: 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e  TraceArg;.  db->
f690: 6d 54 72 61 63 65 20 3d 20 78 54 72 61 63 65 20  mTrace = xTrace 
f6a0: 3f 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  ? SQLITE_TRACE_L
f6b0: 45 47 41 43 59 20 3a 20 30 3b 0a 20 20 64 62 2d  EGACY : 0;.  db-
f6c0: 3e 78 54 72 61 63 65 20 3d 20 28 69 6e 74 28 2a  >xTrace = (int(*
f6d0: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
f6e0: 2a 2c 76 6f 69 64 2a 29 29 78 54 72 61 63 65 3b  *,void*))xTrace;
f6f0: 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67  .  db->pTraceArg
f700: 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69 74   = pArg;.  sqlit
f710: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
f720: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
f730: 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65 6e 64  urn pOld;.}.#end
f740: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f750: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
f760: 0a 2f 2a 20 52 65 67 69 73 74 65 72 20 61 20 74  ./* Register a t
f770: 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 75 73  race callback us
f780: 69 6e 67 20 74 68 65 20 76 65 72 73 69 6f 6e 2d  ing the version-
f790: 32 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  2 interface..*/.
f7a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72 61 63  int sqlite3_trac
f7b0: 65 5f 76 32 28 0a 20 20 73 71 6c 69 74 65 33 20  e_v2(.  sqlite3 
f7c0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
f7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7e0: 20 20 20 2f 2a 20 54 72 61 63 65 20 74 68 69 73     /* Trace this
f7f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
f800: 20 75 6e 73 69 67 6e 65 64 20 6d 54 72 61 63 65   unsigned mTrace
f810: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
f820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
f830: 61 73 6b 20 6f 66 20 65 76 65 6e 74 73 20 74 6f  ask of events to
f840: 20 62 65 20 74 72 61 63 65 64 20 2a 2f 0a 20 20   be traced */.  
f850: 69 6e 74 28 2a 78 54 72 61 63 65 29 28 75 6e 73  int(*xTrace)(uns
f860: 69 67 6e 65 64 2c 76 6f 69 64 2a 2c 76 6f 69 64  igned,void*,void
f870: 2a 2c 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 43 61  *,void*),  /* Ca
f880: 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f 6b 65  llback to invoke
f890: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 2a 2f 0a 29   /* Context */.)
f8d0: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
f8e0: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
f8f0: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
f900: 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
f910: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
f920: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
f930: 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  T;.  }.#endif.  
f940: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
f950: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
f960: 20 20 69 66 28 20 6d 54 72 61 63 65 3d 3d 30 20    if( mTrace==0 
f970: 29 20 78 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  ) xTrace = 0;.  
f980: 69 66 28 20 78 54 72 61 63 65 3d 3d 30 20 29 20  if( xTrace==0 ) 
f990: 6d 54 72 61 63 65 20 3d 20 30 3b 0a 20 20 64 62  mTrace = 0;.  db
f9a0: 2d 3e 6d 54 72 61 63 65 20 3d 20 6d 54 72 61 63  ->mTrace = mTrac
f9b0: 65 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63 65 20  e;.  db->xTrace 
f9c0: 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e  = xTrace;.  db->
f9d0: 70 54 72 61 63 65 41 72 67 20 3d 20 70 41 72 67  pTraceArg = pArg
f9e0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
f9f0: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
fa00: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  x);.  return SQL
fa10: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  ITE_OK;.}..#ifnd
fa20: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
fa30: 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20  EPRECATED./*.** 
fa40: 52 65 67 69 73 74 65 72 20 61 20 70 72 6f 66 69  Register a profi
fa50: 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  le function.  Th
fa60: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
fa70: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
fa80: 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66 69 6c  tered .** profil
fa90: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65  e function is re
faa0: 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20  turned.  .**.** 
fab0: 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65 20 66  A NULL profile f
fac0: 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20 74 68  unction means th
fad0: 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e 67 20  at no profiling 
fae0: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
faf0: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72 6f 66  non-NULL.** prof
fb00: 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ile is a pointer
fb10: 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74   to a function t
fb20: 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  hat is invoked a
fb30: 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69 6f 6e  t the conclusion
fb40: 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51 4c 20   of.** each SQL 
fb50: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
fb60: 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  s run..*/.void *
fb70: 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28  sqlite3_profile(
fb80: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
fb90: 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c    void (*xProfil
fba0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
fbb0: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69 6e 74  har*,sqlite_uint
fbc0: 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  64),.  void *pAr
fbd0: 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c  g.){.  void *pOl
fbe0: 64 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  d;..#ifdef SQLIT
fbf0: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
fc00: 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  OR.  if( !sqlite
fc10: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64  3SafetyCheckOk(d
fc20: 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29  b) ){.    (void)
fc30: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
fc40: 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  PT;.    return 0
fc50: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73  ;.  }.#endif.  s
fc60: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
fc70: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
fc80: 20 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50 72 6f   pOld = db->pPro
fc90: 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78  fileArg;.  db->x
fca0: 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f 66 69  Profile = xProfi
fcb0: 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f 66 69  le;.  db->pProfi
fcc0: 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  leArg = pArg;.  
fcd0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
fce0: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
fcf0: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
fd00: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
fd10: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
fd20: 44 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  D */.#endif /* S
fd30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
fd40: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73   */../*.** Regis
fd50: 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74  ter a function t
fd60: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65  o be invoked whe
fd70: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
fd80: 63 6f 6d 6d 69 74 73 2e 0a 2a 2a 20 49 66 20 74  commits..** If t
fd90: 68 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74  he invoked funct
fda0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ion returns non-
fdb0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63  zero, then the c
fdc0: 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a  ommit becomes a.
fdd0: 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  ** rollback..*/.
fde0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f  void *sqlite3_co
fdf0: 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  mmit_hook(.  sql
fe00: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
fe10: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
fe20: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
fe30: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
fe40: 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29  int (*xCallback)
fe50: 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e  (void*),  /* Fun
fe60: 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20  ction to invoke 
fe70: 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a  on each commit *
fe80: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20  /.  void *pArg  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fea0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
feb0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a   function */.){.
fec0: 20 20 76 6f 69 64 20 2a 70 4f 6c 64 3b 0a 0a 23    void *pOld;..#
fed0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
fee0: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
fef0: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
ff00: 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
ff10: 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54  .    (void)SQLIT
ff20: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
ff30: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
ff40: 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
ff50: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
ff60: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 70 4f 6c 64  ->mutex);.  pOld
ff70: 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72   = db->pCommitAr
ff80: 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74  g;.  db->xCommit
ff90: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
ffa0: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d  back;.  db->pCom
ffb0: 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  mitArg = pArg;. 
ffc0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
ffd0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
ffe0: 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a  .  return pOld;.
fff0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
10000 72 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  r a callback to 
10010 62 65 20 69 6e 76 6f 6b 65 64 20 65 61 63 68 20  be invoked each 
10020 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20 75 70  time a row is up
10030 64 61 74 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74  dated,.** insert
10040 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20 75 73  ed or deleted us
10050 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61 73  ing this databas
10060 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f  e connection..*/
10070 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75  .void *sqlite3_u
10080 70 64 61 74 65 5f 68 6f 6f 6b 28 0a 20 20 73 71  pdate_hook(.  sq
10090 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
100a0 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63          /* Attac
100b0 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68  h the hook to th
100c0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
100d0 20 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63   void (*xCallbac
100e0 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61  k)(void*,int,cha
100f0 72 20 63 6f 6e 73 74 20 2a 2c 63 68 61 72 20 63  r const *,char c
10100 6f 6e 73 74 20 2a 2c 73 71 6c 69 74 65 5f 69 6e  onst *,sqlite_in
10110 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41  t64),.  void *pA
10120 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
10130 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
10140 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
10150 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74  .){.  void *pRet
10160 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
10170 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
10180 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  R.  if( !sqlite3
10190 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62  SafetyCheckOk(db
101a0 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53  ) ){.    (void)S
101b0 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
101c0 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  T;.    return 0;
101d0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71  .  }.#endif.  sq
101e0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
101f0 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
10200 70 52 65 74 20 3d 20 64 62 2d 3e 70 55 70 64 61  pRet = db->pUpda
10210 74 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 55 70  teArg;.  db->xUp
10220 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 78  dateCallback = x
10230 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e  Callback;.  db->
10240 70 55 70 64 61 74 65 41 72 67 20 3d 20 70 41 72  pUpdateArg = pAr
10250 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  g;.  sqlite3_mut
10260 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
10270 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 52  ex);.  return pR
10280 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  et;.}../*.** Reg
10290 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63 6b  ister a callback
102a0 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 65   to be invoked e
102b0 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73  ach time a trans
102c0 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64  action is rolled
102d0 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74 68 69 73  .** back by this
102e0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
102f0 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73  tion..*/.void *s
10300 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
10310 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20  hook(.  sqlite3 
10320 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
10330 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20    /* Attach the 
10340 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74  hook to this dat
10350 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20  abase */.  void 
10360 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  (*xCallback)(voi
10370 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  d*), /* Callback
10380 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
10390 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
103a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
103b0 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63  ment to the func
103c0 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69  tion */.){.  voi
103d0 64 20 2a 70 52 65 74 3b 0a 0a 23 69 66 64 65 66  d *pRet;..#ifdef
103e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
103f0 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
10400 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
10410 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  ckOk(db) ){.    
10420 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
10430 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
10440 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
10450 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
10460 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
10470 65 78 29 3b 0a 20 20 70 52 65 74 20 3d 20 64 62  ex);.  pRet = db
10480 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a  ->pRollbackArg;.
10490 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43    db->xRollbackC
104a0 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
104b0 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c  ack;.  db->pRoll
104c0 62 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a  backArg = pArg;.
104d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
104e0 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
104f0 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74 3b  ;.  return pRet;
10500 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
10510 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
10520 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a 2a 2a 20 52 65  TE_HOOK./*.** Re
10530 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63  gister a callbac
10540 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  k to be invoked 
10550 65 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20  each time a row 
10560 69 73 20 75 70 64 61 74 65 64 2c 0a 2a 2a 20 69  is updated,.** i
10570 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74  nserted or delet
10580 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
10590 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
105a0 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  n..*/.void *sqli
105b0 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
105c0 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ok(.  sqlite3 *d
105d0 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
105e0 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f  /* Attach the ho
105f0 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62  ok to this datab
10600 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 28 2a 78  ase */.  void(*x
10610 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 20 20 20  Callback)(      
10620 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
10630 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 76  unction */.    v
10640 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
10650 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
10660 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
10670 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
10680 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a  int64),.  void *
10690 70 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20  pArg            
106a0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 63 61 6c      /* First cal
106b0 6c 62 61 63 6b 20 61 72 67 75 6d 65 6e 74 20 2a  lback argument *
106c0 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65  /.){.  void *pRe
106d0 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  t;.  sqlite3_mut
106e0 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
106f0 65 78 29 3b 0a 20 20 70 52 65 74 20 3d 20 64 62  ex);.  pRet = db
10700 2d 3e 70 50 72 65 55 70 64 61 74 65 41 72 67 3b  ->pPreUpdateArg;
10710 0a 20 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74  .  db->xPreUpdat
10720 65 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  eCallback = xCal
10730 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 50 72  lback;.  db->pPr
10740 65 55 70 64 61 74 65 41 72 67 20 3d 20 70 41 72  eUpdateArg = pAr
10750 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  g;.  sqlite3_mut
10760 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
10770 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 52  ex);.  return pR
10780 65 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  et;.}.#endif /* 
10790 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
107a0 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a  EUPDATE_HOOK */.
107b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
107c0 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 0a 2a 2a 20 54  OMIT_WAL./*.** T
107d0 68 65 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 68  he sqlite3_wal_h
107e0 6f 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b 20 72  ook() callback r
107f0 65 67 69 73 74 65 72 65 64 20 62 79 20 73 71 6c  egistered by sql
10800 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
10810 63 6b 70 6f 69 6e 74 28 29 2e 0a 2a 2a 20 49 6e  ckpoint()..** In
10820 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 77 61 6c  voke sqlite3_wal
10830 5f 63 68 65 63 6b 70 6f 69 6e 74 20 69 66 20 74  _checkpoint if t
10840 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he number of fra
10850 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 20 66  mes in the log f
10860 69 6c 65 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  ile.** is greate
10870 72 20 74 68 61 6e 20 73 71 6c 69 74 65 33 2e 70  r than sqlite3.p
10880 57 61 6c 41 72 67 20 63 61 73 74 20 74 6f 20 61  WalArg cast to a
10890 6e 20 69 6e 74 65 67 65 72 20 28 74 68 65 20 76  n integer (the v
108a0 61 6c 75 65 20 63 6f 6e 66 69 67 75 72 65 64 20  alue configured 
108b0 62 79 0a 2a 2a 20 77 61 6c 5f 61 75 74 6f 63 68  by.** wal_autoch
108c0 65 63 6b 70 6f 69 6e 74 28 29 29 2e 0a 2a 2f 20  eckpoint())..*/ 
108d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44  .int sqlite3WalD
108e0 65 66 61 75 6c 74 48 6f 6f 6b 28 0a 20 20 76 6f  efaultHook(.  vo
108f0 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c  id *pClientData,
10900 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
10910 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
10920 62 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b,           /* 
10930 43 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  Connection */.  
10940 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 2c  const char *zDb,
10950 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
10960 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 72 61  se */.  int nFra
10970 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  me             /
10980 2a 20 53 69 7a 65 20 6f 66 20 57 41 4c 20 2a 2f  * Size of WAL */
10990 0a 29 7b 0a 20 20 69 66 28 20 6e 46 72 61 6d 65  .){.  if( nFrame
109a0 3e 3d 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  >=SQLITE_PTR_TO_
109b0 49 4e 54 28 70 43 6c 69 65 6e 74 44 61 74 61 29  INT(pClientData)
109c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
109d0 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
109e0 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ();.    sqlite3_
109f0 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 28 64  wal_checkpoint(d
10a00 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20 73 71 6c  b, zDb);.    sql
10a10 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
10a20 6c 6f 63 28 29 3b 0a 20 20 7d 0a 20 20 72 65 74  loc();.  }.  ret
10a30 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
10a40 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
10a50 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 2f  E_OMIT_WAL */../
10a60 2a 0a 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61  *.** Configure a
10a70 6e 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 68 6f  n sqlite3_wal_ho
10a80 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b 20 74 6f  ok() callback to
10a90 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
10aa0 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 61 20 64  heckpoint.** a d
10ab0 61 74 61 62 61 73 65 20 61 66 74 65 72 20 63 6f  atabase after co
10ac0 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73  mmitting a trans
10ad0 61 63 74 69 6f 6e 20 69 66 20 74 68 65 72 65 20  action if there 
10ae0 61 72 65 20 6e 46 72 61 6d 65 20 6f 72 0a 2a 2a  are nFrame or.**
10af0 20 6d 6f 72 65 20 66 72 61 6d 65 73 20 69 6e 20   more frames in 
10b00 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 50 61  the log file. Pa
10b10 73 73 69 6e 67 20 7a 65 72 6f 20 6f 72 20 61 20  ssing zero or a 
10b20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 61  negative value a
10b30 73 20 74 68 65 0a 2a 2a 20 6e 46 72 61 6d 65 20  s the.** nFrame 
10b40 70 61 72 61 6d 65 74 65 72 20 64 69 73 61 62 6c  parameter disabl
10b50 65 73 20 61 75 74 6f 6d 61 74 69 63 20 63 68 65  es automatic che
10b60 63 6b 70 6f 69 6e 74 73 20 65 6e 74 69 72 65 6c  ckpoints entirel
10b70 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 6c  y..**.** The cal
10b80 6c 62 61 63 6b 20 72 65 67 69 73 74 65 72 65 64  lback registered
10b90 20 62 79 20 74 68 69 73 20 66 75 6e 63 74 69 6f   by this functio
10ba0 6e 20 72 65 70 6c 61 63 65 73 20 61 6e 79 20 65  n replaces any e
10bb0 78 69 73 74 69 6e 67 20 63 61 6c 6c 62 61 63 6b  xisting callback
10bc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20 75  .** registered u
10bd0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 77 61 6c  sing sqlite3_wal
10be0 5f 68 6f 6f 6b 28 29 2e 20 4c 69 6b 65 77 69 73  _hook(). Likewis
10bf0 65 2c 20 72 65 67 69 73 74 65 72 69 6e 67 20 61  e, registering a
10c00 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 75 73 69   callback.** usi
10c10 6e 67 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 68  ng sqlite3_wal_h
10c20 6f 6f 6b 28 29 20 64 69 73 61 62 6c 65 73 20 74  ook() disables t
10c30 68 65 20 61 75 74 6f 6d 61 74 69 63 20 63 68 65  he automatic che
10c40 63 6b 70 6f 69 6e 74 20 6d 65 63 68 61 6e 69 73  ckpoint mechanis
10c50 6d 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  m.** configured 
10c60 62 79 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  by this function
10c70 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
10c80 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  _wal_autocheckpo
10c90 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  int(sqlite3 *db,
10ca0 20 69 6e 74 20 6e 46 72 61 6d 65 29 7b 0a 23 69   int nFrame){.#i
10cb0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
10cc0 5f 57 41 4c 0a 20 20 55 4e 55 53 45 44 5f 50 41  _WAL.  UNUSED_PA
10cd0 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20 20 55  RAMETER(db);.  U
10ce0 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
10cf0 6e 46 72 61 6d 65 29 3b 0a 23 65 6c 73 65 0a 23  nFrame);.#else.#
10d00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
10d10 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
10d20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
10d30 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20  tyCheckOk(db) ) 
10d40 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
10d50 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
10d60 66 0a 20 20 69 66 28 20 6e 46 72 61 6d 65 3e 30  f.  if( nFrame>0
10d70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
10d80 77 61 6c 5f 68 6f 6f 6b 28 64 62 2c 20 73 71 6c  wal_hook(db, sql
10d90 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
10da0 6f 6b 2c 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ok, SQLITE_INT_T
10db0 4f 5f 50 54 52 28 6e 46 72 61 6d 65 29 29 3b 0a  O_PTR(nFrame));.
10dc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
10dd0 69 74 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28 64 62  ite3_wal_hook(db
10de0 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 65 6e  , 0, 0);.  }.#en
10df0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  dif.  return SQL
10e00 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
10e10 20 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c   Register a call
10e20 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b  back to be invok
10e30 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74  ed each time a t
10e40 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 77 72  ransaction is wr
10e50 69 74 74 65 6e 0a 2a 2a 20 69 6e 74 6f 20 74 68  itten.** into th
10e60 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
10e70 67 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  g by this databa
10e80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
10e90 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
10ea0 77 61 6c 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69  wal_hook(.  sqli
10eb0 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
10ed0 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74  ttach the hook t
10ee0 6f 20 74 68 69 73 20 64 62 20 68 61 6e 64 6c 65  o this db handle
10ef0 20 2a 2f 0a 20 20 69 6e 74 28 2a 78 43 61 6c 6c   */.  int(*xCall
10f00 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
10f10 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
10f20 61 72 2a 2c 20 69 6e 74 29 2c 0a 20 20 76 6f 69  ar*, int),.  voi
10f30 64 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20  d *pArg         
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10f50 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 70  First argument p
10f60 61 73 73 65 64 20 74 6f 20 78 43 61 6c 6c 62 61  assed to xCallba
10f70 63 6b 28 29 20 2a 2f 0a 29 7b 0a 23 69 66 6e 64  ck() */.){.#ifnd
10f80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
10f90 41 4c 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 3b  AL.  void *pRet;
10fa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
10fb0 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
10fc0 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
10fd0 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
10fe0 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c  ){.    (void)SQL
10ff0 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
11000 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
11010 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69   }.#endif.  sqli
11020 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
11030 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 70 52  db->mutex);.  pR
11040 65 74 20 3d 20 64 62 2d 3e 70 57 61 6c 41 72 67  et = db->pWalArg
11050 3b 0a 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c  ;.  db->xWalCall
11060 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b  back = xCallback
11070 3b 0a 20 20 64 62 2d 3e 70 57 61 6c 41 72 67 20  ;.  db->pWalArg 
11080 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  = pArg;.  sqlite
11090 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
110a0 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
110b0 72 6e 20 70 52 65 74 3b 0a 23 65 6c 73 65 0a 20  rn pRet;.#else. 
110c0 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69   return 0;.#endi
110d0 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  f.}../*.** Check
110e0 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 7a  point database z
110f0 44 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  Db..*/.int sqlit
11100 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  e3_wal_checkpoin
11110 74 5f 76 32 28 0a 20 20 73 71 6c 69 74 65 33 20  t_v2(.  sqlite3 
11120 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
11130 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
11140 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20  ase handle */.  
11150 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 2c  const char *zDb,
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 74 74 61 63  /* Name of attac
11180 68 65 64 20 64 61 74 61 62 61 73 65 20 28 6f 72  hed database (or
11190 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 69 6e 74 20   NULL) */.  int 
111a0 65 4d 6f 64 65 2c 20 20 20 20 20 20 20 20 20 20  eMode,          
111b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
111c0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
111d0 5f 2a 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 6e  _* value */.  in
111e0 74 20 2a 70 6e 4c 6f 67 2c 20 20 20 20 20 20 20  t *pnLog,       
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11200 20 4f 55 54 3a 20 53 69 7a 65 20 6f 66 20 57 41   OUT: Size of WA
11210 4c 20 6c 6f 67 20 69 6e 20 66 72 61 6d 65 73 20  L log in frames 
11220 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 43 6b 70 74  */.  int *pnCkpt
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 54 6f 74       /* OUT: Tot
11250 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  al number of fra
11260 6d 65 73 20 63 68 65 63 6b 70 6f 69 6e 74 65 64  mes checkpointed
11270 20 2a 2f 0a 29 7b 0a 23 69 66 64 65 66 20 53 51   */.){.#ifdef SQ
11280 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
11290 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
112a0 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 72 63  ;.#else.  int rc
112b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
112c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
112d0 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  urn code */.  in
112e0 74 20 69 44 62 20 3d 20 53 51 4c 49 54 45 5f 4d  t iDb = SQLITE_M
112f0 41 58 5f 41 54 54 41 43 48 45 44 3b 20 20 2f 2a  AX_ATTACHED;  /*
11300 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 69   sqlite3.aDb[] i
11310 6e 64 65 78 20 6f 66 20 64 62 20 74 6f 20 63 68  ndex of db to ch
11320 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 0a 23 69 66  eckpoint */..#if
11330 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
11340 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
11350 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
11360 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20 72 65  CheckOk(db) ) re
11370 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
11380 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a  SE_BKPT;.#endif.
11390 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
113a0 20 74 68 65 20 6f 75 74 70 75 74 20 76 61 72 69   the output vari
113b0 61 62 6c 65 73 20 74 6f 20 2d 31 20 69 6e 20 63  ables to -1 in c
113c0 61 73 65 20 61 6e 20 65 72 72 6f 72 20 6f 63 63  ase an error occ
113d0 75 72 73 2e 20 2a 2f 0a 20 20 69 66 28 20 70 6e  urs. */.  if( pn
113e0 4c 6f 67 20 29 20 2a 70 6e 4c 6f 67 20 3d 20 2d  Log ) *pnLog = -
113f0 31 3b 0a 20 20 69 66 28 20 70 6e 43 6b 70 74 20  1;.  if( pnCkpt 
11400 29 20 2a 70 6e 43 6b 70 74 20 3d 20 2d 31 3b 0a  ) *pnCkpt = -1;.
11410 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54  .  assert( SQLIT
11420 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
11430 53 49 56 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73  SIVE==0 );.  ass
11440 65 72 74 28 20 53 51 4c 49 54 45 5f 43 48 45 43  ert( SQLITE_CHEC
11450 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3d 3d 31 20 29  KPOINT_FULL==1 )
11460 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49  ;.  assert( SQLI
11470 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
11480 53 54 41 52 54 3d 3d 32 20 29 3b 0a 20 20 61 73  START==2 );.  as
11490 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 48 45  sert( SQLITE_CHE
114a0 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
114b0 3d 3d 33 20 29 3b 0a 20 20 69 66 28 20 65 4d 6f  ==3 );.  if( eMo
114c0 64 65 3c 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  de<SQLITE_CHECKP
114d0 4f 49 4e 54 5f 50 41 53 53 49 56 45 20 7c 7c 20  OINT_PASSIVE || 
114e0 65 4d 6f 64 65 3e 53 51 4c 49 54 45 5f 43 48 45  eMode>SQLITE_CHE
114f0 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
11500 20 29 7b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   ){.    /* EVIDE
11510 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 39 39 36 2d  NCE-OF: R-03996-
11520 31 32 30 38 38 20 54 68 65 20 4d 20 70 61 72 61  12088 The M para
11530 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 61 20  meter must be a 
11540 76 61 6c 69 64 20 63 68 65 63 6b 70 6f 69 6e 74  valid checkpoint
11550 0a 20 20 20 20 2a 2a 20 6d 6f 64 65 3a 20 2a 2f  .    ** mode: */
11560 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
11570 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 0a  TE_MISUSE;.  }..
11580 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
11590 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
115a0 3b 0a 20 20 69 66 28 20 7a 44 62 20 26 26 20 7a  ;.  if( zDb && z
115b0 44 62 5b 30 5d 20 29 7b 0a 20 20 20 20 69 44 62  Db[0] ){.    iDb
115c0 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62   = sqlite3FindDb
115d0 4e 61 6d 65 28 64 62 2c 20 7a 44 62 29 3b 0a 20  Name(db, zDb);. 
115e0 20 7d 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29   }.  if( iDb<0 )
115f0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
11600 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
11610 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
11620 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f  (db, SQLITE_ERRO
11630 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 64 61 74 61  R, "unknown data
11640 62 61 73 65 3a 20 25 73 22 2c 20 7a 44 62 29 3b  base: %s", zDb);
11650 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62  .  }else{.    db
11660 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
11670 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  usy = 0;.    rc 
11680 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
11690 69 6e 74 28 64 62 2c 20 69 44 62 2c 20 65 4d 6f  int(db, iDb, eMo
116a0 64 65 2c 20 70 6e 4c 6f 67 2c 20 70 6e 43 6b 70  de, pnLog, pnCkp
116b0 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 45  t);.    sqlite3E
116c0 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 20 20  rror(db, rc);.  
116d0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
116e0 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
116f0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
11700 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20 73 74  are no active st
11710 61 74 65 6d 65 6e 74 73 2c 20 63 6c 65 61 72 20  atements, clear 
11720 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 66 6c  the interrupt fl
11730 61 67 20 61 74 20 74 68 69 73 0a 20 20 2a 2a 20  ag at this.  ** 
11740 70 6f 69 6e 74 2e 20 20 2a 2f 0a 20 20 69 66 28  point.  */.  if(
11750 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
11760 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 75  ==0 ){.    db->u
11770 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
11780 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69  = 0;.  }..  sqli
11790 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
117a0 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
117b0 74 75 72 6e 20 72 63 3b 0a 23 65 6e 64 69 66 0a  turn rc;.#endif.
117c0 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 70  }.../*.** Checkp
117d0 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 7a 44  oint database zD
117e0 62 2e 20 49 66 20 7a 44 62 20 69 73 20 4e 55 4c  b. If zDb is NUL
117f0 4c 2c 20 6f 72 20 69 66 20 74 68 65 20 62 75 66  L, or if the buf
11800 66 65 72 20 7a 44 62 20 70 6f 69 6e 74 73 0a 2a  fer zDb points.*
11810 2a 20 74 6f 20 63 6f 6e 74 61 69 6e 73 20 61 20  * to contains a 
11820 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 73 74 72 69  zero-length stri
11830 6e 67 2c 20 61 6c 6c 20 61 74 74 61 63 68 65 64  ng, all attached
11840 20 64 61 74 61 62 61 73 65 73 20 61 72 65 20 0a   databases are .
11850 2a 2a 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 2e  ** checkpointed.
11860 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
11870 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 28 73  wal_checkpoint(s
11880 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
11890 74 20 63 68 61 72 20 2a 7a 44 62 29 7b 0a 20 20  t char *zDb){.  
118a0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
118b0 52 2d 34 31 36 31 33 2d 32 30 35 35 33 20 54 68  R-41613-20553 Th
118c0 65 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 63 68  e sqlite3_wal_ch
118d0 65 63 6b 70 6f 69 6e 74 28 44 2c 58 29 20 69 73  eckpoint(D,X) is
118e0 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 0a 20   equivalent to. 
118f0 20 2a 2a 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f   ** sqlite3_wal_
11900 63 68 65 63 6b 70 6f 69 6e 74 5f 76 32 28 44 2c  checkpoint_v2(D,
11910 58 2c 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  X,SQLITE_CHECKPO
11920 49 4e 54 5f 50 41 53 53 49 56 45 2c 30 2c 30 29  INT_PASSIVE,0,0)
11930 2e 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 73 71  . */.  return sq
11940 6c 69 74 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70  lite3_wal_checkp
11950 6f 69 6e 74 5f 76 32 28 64 62 2c 7a 44 62 2c 53  oint_v2(db,zDb,S
11960 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
11970 5f 50 41 53 53 49 56 45 2c 30 2c 30 29 3b 0a 7d  _PASSIVE,0,0);.}
11980 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
11990 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 0a 2a 2a 20  _OMIT_WAL./*.** 
119a0 52 75 6e 20 61 20 63 68 65 63 6b 70 6f 69 6e 74  Run a checkpoint
119b0 20 6f 6e 20 64 61 74 61 62 61 73 65 20 69 44 62   on database iDb
119c0 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
119d0 70 20 69 66 20 64 61 74 61 62 61 73 65 20 69 44  p if database iD
119e0 62 20 69 73 0a 2a 2a 20 6e 6f 74 20 63 75 72 72  b is.** not curr
119f0 65 6e 74 6c 79 20 6f 70 65 6e 20 69 6e 20 57 41  ently open in WA
11a00 4c 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  L mode..**.** If
11a10 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
11a20 73 20 6f 70 65 6e 20 6f 6e 20 74 68 65 20 64 61  s open on the da
11a30 74 61 62 61 73 65 20 62 65 69 6e 67 20 63 68 65  tabase being che
11a40 63 6b 70 6f 69 6e 74 65 64 2c 20 74 68 69 73 20  ckpointed, this 
11a50 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  .** function ret
11a60 75 72 6e 73 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  urns SQLITE_LOCK
11a70 45 44 20 61 6e 64 20 61 20 63 68 65 63 6b 70 6f  ED and a checkpo
11a80 69 6e 74 20 69 73 20 6e 6f 74 20 61 74 74 65 6d  int is not attem
11a90 70 74 65 64 2e 20 49 66 20 0a 2a 2a 20 61 6e 20  pted. If .** an 
11aa0 65 72 72 6f 72 20 6f 63 63 75 72 73 20 77 68 69  error occurs whi
11ab0 6c 65 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 63  le running the c
11ac0 68 65 63 6b 70 6f 69 6e 74 2c 20 61 6e 20 53 51  heckpoint, an SQ
11ad0 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20  Lite error code 
11ae0 69 73 20 0a 2a 2a 20 72 65 74 75 72 6e 65 64 20  is .** returned 
11af0 28 69 2e 65 2e 20 53 51 4c 49 54 45 5f 49 4f 45  (i.e. SQLITE_IOE
11b00 52 52 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  RR). Otherwise, 
11b10 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a 2a 2a  SQLITE_OK..**.**
11b20 20 54 68 65 20 6d 75 74 65 78 20 6f 6e 20 64 61   The mutex on da
11b30 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
11b40 20 73 68 6f 75 6c 64 20 62 65 20 68 65 6c 64 20   should be held 
11b50 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2e 20 54  by the caller. T
11b60 68 65 20 6d 75 74 65 78 0a 2a 2a 20 61 73 73 6f  he mutex.** asso
11b70 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
11b80 73 70 65 63 69 66 69 63 20 62 2d 74 72 65 65 20  specific b-tree 
11b90 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74  being checkpoint
11ba0 65 64 20 69 73 20 74 61 6b 65 6e 20 62 79 0a 2a  ed is taken by.*
11bb0 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * this function 
11bc0 77 68 69 6c 65 20 74 68 65 20 63 68 65 63 6b 70  while the checkp
11bd0 6f 69 6e 74 20 69 73 20 72 75 6e 6e 69 6e 67 2e  oint is running.
11be0 0a 2a 2a 0a 2a 2a 20 49 66 20 69 44 62 20 69 73  .**.** If iDb is
11bf0 20 70 61 73 73 65 64 20 53 51 4c 49 54 45 5f 4d   passed SQLITE_M
11c00 41 58 5f 41 54 54 41 43 48 45 44 2c 20 74 68 65  AX_ATTACHED, the
11c10 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
11c20 61 74 61 62 61 73 65 73 20 61 72 65 0a 2a 2a 20  atabases are.** 
11c30 63 68 65 63 6b 70 6f 69 6e 74 65 64 2e 20 49 66  checkpointed. If
11c40 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63   an error is enc
11c50 6f 75 6e 74 65 72 65 64 20 69 74 20 69 73 20 72  ountered it is r
11c60 65 74 75 72 6e 65 64 20 69 6d 6d 65 64 69 61 74  eturned immediat
11c70 65 6c 79 20 2d 0a 2a 2a 20 6e 6f 20 61 74 74 65  ely -.** no atte
11c80 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 63  mpt is made to c
11c90 68 65 63 6b 70 6f 69 6e 74 20 61 6e 79 20 72 65  heckpoint any re
11ca0 6d 61 69 6e 69 6e 67 20 64 61 74 61 62 61 73 65  maining database
11cb0 73 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  s..**.** Paramet
11cc0 65 72 20 65 4d 6f 64 65 20 69 73 20 6f 6e 65 20  er eMode is one 
11cd0 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
11ce0 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
11cf0 4c 4c 20 6f 72 20 52 45 53 54 41 52 54 2e 0a 2a  LL or RESTART..*
11d00 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  /.int sqlite3Che
11d10 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  ckpoint(sqlite3 
11d20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c 20 69 6e  *db, int iDb, in
11d30 74 20 65 4d 6f 64 65 2c 20 69 6e 74 20 2a 70 6e  t eMode, int *pn
11d40 4c 6f 67 2c 20 69 6e 74 20 2a 70 6e 43 6b 70 74  Log, int *pnCkpt
11d50 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  ){.  int rc = SQ
11d60 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
11d70 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
11d80 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ode */.  int i; 
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
11db0 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
11dc0 75 67 68 20 61 74 74 61 63 68 65 64 20 64 62 73  ugh attached dbs
11dd0 20 2a 2f 0a 20 20 69 6e 74 20 62 42 75 73 79 20   */.  int bBusy 
11de0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
11df0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
11e00 20 53 51 4c 49 54 45 5f 42 55 53 59 20 68 61 73   SQLITE_BUSY has
11e10 20 62 65 65 6e 20 65 6e 63 6f 75 6e 74 65 72 65   been encountere
11e20 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  d */..  assert( 
11e30 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
11e40 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  ld(db->mutex) );
11e50 0a 20 20 61 73 73 65 72 74 28 20 21 70 6e 4c 6f  .  assert( !pnLo
11e60 67 20 7c 7c 20 2a 70 6e 4c 6f 67 3d 3d 2d 31 20  g || *pnLog==-1 
11e70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 6e  );.  assert( !pn
11e80 43 6b 70 74 20 7c 7c 20 2a 70 6e 43 6b 70 74 3d  Ckpt || *pnCkpt=
11e90 3d 2d 31 20 29 3b 0a 0a 20 20 66 6f 72 28 69 3d  =-1 );..  for(i=
11ea0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 20 26 26 20  0; i<db->nDb && 
11eb0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 69  rc==SQLITE_OK; i
11ec0 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 3d 3d  ++){.    if( i==
11ed0 69 44 62 20 7c 7c 20 69 44 62 3d 3d 53 51 4c 49  iDb || iDb==SQLI
11ee0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 20  TE_MAX_ATTACHED 
11ef0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
11f00 6c 69 74 65 33 42 74 72 65 65 43 68 65 63 6b 70  lite3BtreeCheckp
11f10 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  oint(db->aDb[i].
11f20 70 42 74 2c 20 65 4d 6f 64 65 2c 20 70 6e 4c 6f  pBt, eMode, pnLo
11f30 67 2c 20 70 6e 43 6b 70 74 29 3b 0a 20 20 20 20  g, pnCkpt);.    
11f40 20 20 70 6e 4c 6f 67 20 3d 20 30 3b 0a 20 20 20    pnLog = 0;.   
11f50 20 20 20 70 6e 43 6b 70 74 20 3d 20 30 3b 0a 20     pnCkpt = 0;. 
11f60 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
11f70 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
11f80 20 20 20 20 62 42 75 73 79 20 3d 20 31 3b 0a 20      bBusy = 1;. 
11f90 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
11fa0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 0a 20  TE_OK;.      }. 
11fb0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65 74 75     }.  }..  retu
11fc0 72 6e 20 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rn (rc==SQLITE_O
11fd0 4b 20 26 26 20 62 42 75 73 79 29 20 3f 20 53 51  K && bBusy) ? SQ
11fe0 4c 49 54 45 5f 42 55 53 59 20 3a 20 72 63 3b 0a  LITE_BUSY : rc;.
11ff0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
12000 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
12010 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
12020 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 72 75 65  ion returns true
12030 20 69 66 20 6d 61 69 6e 2d 6d 65 6d 6f 72 79 20   if main-memory 
12040 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 69  should be used i
12050 6e 73 74 65 61 64 20 6f 66 0a 2a 2a 20 61 20 74  nstead of.** a t
12060 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20 66 6f  emporary file fo
12070 72 20 74 72 61 6e 73 69 65 6e 74 20 70 61 67 65  r transient page
12080 72 20 66 69 6c 65 73 20 61 6e 64 20 73 74 61 74  r files and stat
12090 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73 2e 0a  ement journals..
120a0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  ** The value ret
120b0 75 72 6e 65 64 20 64 65 70 65 6e 64 73 20 6f 6e  urned depends on
120c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 64 62   the value of db
120d0 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 28 72 75  ->temp_store (ru
120e0 6e 74 69 6d 65 0a 2a 2a 20 70 61 72 61 6d 65 74  ntime.** paramet
120f0 65 72 29 20 61 6e 64 20 74 68 65 20 63 6f 6d 70  er) and the comp
12100 69 6c 65 20 74 69 6d 65 20 76 61 6c 75 65 20 6f  ile time value o
12110 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
12120 4f 52 45 2e 20 54 68 65 0a 2a 2a 20 66 6f 6c 6c  ORE. The.** foll
12130 6f 77 69 6e 67 20 74 61 62 6c 65 20 64 65 73 63  owing table desc
12140 72 69 62 65 73 20 74 68 65 20 72 65 6c 61 74 69  ribes the relati
12150 6f 6e 73 68 69 70 20 62 65 74 77 65 65 6e 20 74  onship between t
12160 68 65 73 65 20 74 77 6f 20 76 61 6c 75 65 73 0a  hese two values.
12170 2a 2a 20 61 6e 64 20 74 68 69 73 20 66 75 6e 63  ** and this func
12180 74 69 6f 6e 73 20 72 65 74 75 72 6e 20 76 61 6c  tions return val
12190 75 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 53 51 4c 49  ue..**.**   SQLI
121a0 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 20 20  TE_TEMP_STORE   
121b0 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65    db->temp_store
121c0 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20 6f 66       Location of
121d0 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
121e0 61 73 65 0a 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d 2d  ase.**   -------
121f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d  ----------     -
12200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20  -------------   
12210 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
12220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12230 0a 2a 2a 20 20 20 30 20 20 20 20 20 20 20 20 20  .**   0         
12240 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 79 20              any 
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12260 69 6c 65 20 20 20 20 20 20 28 72 65 74 75 72 6e  ile      (return
12270 20 30 29 0a 2a 2a 20 20 20 31 20 20 20 20 20 20   0).**   1      
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 66 69 6c 65 20 20 20 20 20 20 28 72 65 74    file      (ret
122b0 75 72 6e 20 30 29 0a 2a 2a 20 20 20 31 20 20 20  urn 0).**   1   
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
122e0 20 20 20 20 20 6d 65 6d 6f 72 79 20 20 20 20 28       memory    (
122f0 72 65 74 75 72 6e 20 31 29 0a 2a 2a 20 20 20 31  return 1).**   1
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12310 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
12320 20 20 20 20 20 20 20 20 66 69 6c 65 20 20 20 20          file    
12330 20 20 28 72 65 74 75 72 6e 20 30 29 0a 2a 2a 20    (return 0).** 
12340 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
12350 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
12360 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20             file 
12370 20 20 20 20 20 28 72 65 74 75 72 6e 20 30 29 0a       (return 0).
12380 2a 2a 20 20 20 32 20 20 20 20 20 20 20 20 20 20  **   2          
12390 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
123b0 6d 6f 72 79 20 20 20 20 28 72 65 74 75 72 6e 20  mory    (return 
123c0 31 29 0a 2a 2a 20 20 20 32 20 20 20 20 20 20 20  1).**   2       
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 20 6d 65 6d 6f 72 79 20 20 20 20 28 72 65 74 75   memory    (retu
12400 72 6e 20 31 29 0a 2a 2a 20 20 20 33 20 20 20 20  rn 1).**   3    
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20   any            
12430 20 20 20 20 6d 65 6d 6f 72 79 20 20 20 20 28 72      memory    (r
12440 65 74 75 72 6e 20 31 29 0a 2a 2f 0a 69 6e 74 20  eturn 1).*/.int 
12450 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
12460 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
12470 33 20 2a 64 62 29 7b 0a 23 69 66 20 53 51 4c 49  3 *db){.#if SQLI
12480 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31  TE_TEMP_STORE==1
12490 0a 20 20 72 65 74 75 72 6e 20 28 20 64 62 2d 3e  .  return ( db->
124a0 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20 29 3b  temp_store==2 );
124b0 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
124c0 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32  TE_TEMP_STORE==2
124d0 0a 20 20 72 65 74 75 72 6e 20 28 20 64 62 2d 3e  .  return ( db->
124e0 74 65 6d 70 5f 73 74 6f 72 65 21 3d 31 20 29 3b  temp_store!=1 );
124f0 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
12500 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33  TE_TEMP_STORE==3
12510 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
12520 54 45 52 28 64 62 29 3b 0a 20 20 72 65 74 75 72  TER(db);.  retur
12530 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  n 1;.#endif.#if 
12540 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
12550 45 3c 31 20 7c 7c 20 53 51 4c 49 54 45 5f 54 45  E<1 || SQLITE_TE
12560 4d 50 5f 53 54 4f 52 45 3e 33 0a 20 20 55 4e 55  MP_STORE>3.  UNU
12570 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 64 62  SED_PARAMETER(db
12580 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 23  );.  return 0;.#
12590 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  endif.}../*.** R
125a0 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e 63 6f  eturn UTF-8 enco
125b0 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  ded English lang
125c0 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e  uage explanation
125d0 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
125e0 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f  ent.** error..*/
125f0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
12600 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71 6c 69  ite3_errmsg(sqli
12610 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e 73  te3 *db){.  cons
12620 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28  t char *z;.  if(
12630 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74 75   !db ){.    retu
12640 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  rn sqlite3ErrStr
12650 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b  (SQLITE_NOMEM_BK
12660 50 54 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21  PT);.  }.  if( !
12670 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
12680 63 6b 53 69 63 6b 4f 72 4f 6b 28 64 62 29 20 29  ckSickOrOk(db) )
12690 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c  {.    return sql
126a0 69 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54  ite3ErrStr(SQLIT
126b0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 29 3b 0a  E_MISUSE_BKPT);.
126c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
126d0 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
126e0 74 65 78 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  tex);.  if( db->
126f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
12700 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45      z = sqlite3E
12710 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d  rrStr(SQLITE_NOM
12720 45 4d 5f 42 4b 50 54 29 3b 0a 20 20 7d 65 6c 73  EM_BKPT);.  }els
12730 65 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  e{.    testcase(
12740 20 64 62 2d 3e 70 45 72 72 3d 3d 30 20 29 3b 0a   db->pErr==0 );.
12750 20 20 20 20 7a 20 3d 20 28 63 68 61 72 2a 29 73      z = (char*)s
12760 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
12770 74 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 20  t(db->pErr);.   
12780 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
12790 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
127a0 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20    if( z==0 ){.  
127b0 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45      z = sqlite3E
127c0 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64  rrStr(db->errCod
127d0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  e);.    }.  }.  
127e0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
127f0 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
12800 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23    return z;.}..#
12810 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12820 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52  IT_UTF16./*.** R
12830 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e 63  eturn UTF-16 enc
12840 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e  oded English lan
12850 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f  guage explanatio
12860 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
12870 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a  cent.** error..*
12880 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  /.const void *sq
12890 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 73  lite3_errmsg16(s
128a0 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 73  qlite3 *db){.  s
128b0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20  tatic const u16 
128c0 6f 75 74 4f 66 4d 65 6d 5b 5d 20 3d 20 7b 0a 20  outOfMem[] = {. 
128d0 20 20 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27     'o', 'u', 't'
128e0 2c 20 27 20 27 2c 20 27 6f 27 2c 20 27 66 27 2c  , ' ', 'o', 'f',
128f0 20 27 20 27 2c 20 27 6d 27 2c 20 27 65 27 2c 20   ' ', 'm', 'e', 
12900 27 6d 27 2c 20 27 6f 27 2c 20 27 72 27 2c 20 27  'm', 'o', 'r', '
12910 79 27 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61  y', 0.  };.  sta
12920 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 6d 69  tic const u16 mi
12930 73 75 73 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 27  suse[] = {.    '
12940 6c 27 2c 20 27 69 27 2c 20 27 62 27 2c 20 27 72  l', 'i', 'b', 'r
12950 27 2c 20 27 61 27 2c 20 27 72 27 2c 20 27 79 27  ', 'a', 'r', 'y'
12960 2c 20 27 20 27 2c 20 0a 20 20 20 20 27 72 27 2c  , ' ', .    'r',
12970 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27 2c 20   'o', 'u', 't', 
12980 27 69 27 2c 20 27 6e 27 2c 20 27 65 27 2c 20 27  'i', 'n', 'e', '
12990 20 27 2c 20 0a 20 20 20 20 27 63 27 2c 20 27 61   ', .    'c', 'a
129a0 27 2c 20 27 6c 27 2c 20 27 6c 27 2c 20 27 65 27  ', 'l', 'l', 'e'
129b0 2c 20 27 64 27 2c 20 27 20 27 2c 20 0a 20 20 20  , 'd', ' ', .   
129c0 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27 2c 20   'o', 'u', 't', 
129d0 27 20 27 2c 20 0a 20 20 20 20 27 6f 27 2c 20 27  ' ', .    'o', '
129e0 66 27 2c 20 27 20 27 2c 20 0a 20 20 20 20 27 73  f', ' ', .    's
129f0 27 2c 20 27 65 27 2c 20 27 71 27 2c 20 27 75 27  ', 'e', 'q', 'u'
12a00 2c 20 27 65 27 2c 20 27 6e 27 2c 20 27 63 27 2c  , 'e', 'n', 'c',
12a10 20 27 65 27 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20   'e', 0.  };..  
12a20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b 0a 20  const void *z;. 
12a30 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20   if( !db ){.    
12a40 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 6f  return (void *)o
12a50 75 74 4f 66 4d 65 6d 3b 0a 20 20 7d 0a 20 20 69  utOfMem;.  }.  i
12a60 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
12a70 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64  yCheckSickOrOk(d
12a80 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
12a90 20 28 76 6f 69 64 20 2a 29 6d 69 73 75 73 65 3b   (void *)misuse;
12aa0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  .  }.  sqlite3_m
12ab0 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
12ac0 75 74 65 78 29 3b 0a 20 20 69 66 28 20 64 62 2d  utex);.  if( db-
12ad0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
12ae0 0a 20 20 20 20 7a 20 3d 20 28 76 6f 69 64 20 2a  .    z = (void *
12af0 29 6f 75 74 4f 66 4d 65 6d 3b 0a 20 20 7d 65 6c  )outOfMem;.  }el
12b00 73 65 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69  se{.    z = sqli
12b10 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
12b20 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 20 20  (db->pErr);.    
12b30 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
12b40 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69    sqlite3ErrorWi
12b50 74 68 4d 73 67 28 64 62 2c 20 64 62 2d 3e 65 72  thMsg(db, db->er
12b60 72 43 6f 64 65 2c 20 73 71 6c 69 74 65 33 45 72  rCode, sqlite3Er
12b70 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
12b80 29 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71  ));.      z = sq
12b90 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
12ba0 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20  16(db->pErr);.  
12bb0 20 20 7d 0a 20 20 20 20 2f 2a 20 41 20 6d 61 6c    }.    /* A mal
12bc0 6c 6f 63 28 29 20 6d 61 79 20 68 61 76 65 20 66  loc() may have f
12bd0 61 69 6c 65 64 20 77 69 74 68 69 6e 20 74 68 65  ailed within the
12be0 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
12bf0 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 29 0a  _value_text16().
12c00 20 20 20 20 2a 2a 20 61 62 6f 76 65 2e 20 49 66      ** above. If
12c10 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
12c20 65 2c 20 74 68 65 6e 20 74 68 65 20 64 62 2d 3e  e, then the db->
12c30 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61  mallocFailed fla
12c40 67 20 6e 65 65 64 73 20 74 6f 0a 20 20 20 20 2a  g needs to.    *
12c50 2a 20 62 65 20 63 6c 65 61 72 65 64 20 62 65 66  * be cleared bef
12c60 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 20 44  ore returning. D
12c70 6f 20 74 68 69 73 20 64 69 72 65 63 74 6c 79 2c  o this directly,
12c80 20 69 6e 73 74 65 61 64 20 6f 66 20 76 69 61 0a   instead of via.
12c90 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 41 70      ** sqlite3Ap
12ca0 69 45 78 69 74 28 29 2c 20 74 6f 20 61 76 6f 69  iExit(), to avoi
12cb0 64 20 73 65 74 74 69 6e 67 20 74 68 65 20 64 61  d setting the da
12cc0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 65 72  tabase handle er
12cd0 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 20 20 20  ror message..   
12ce0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 4f   */.    sqlite3O
12cf0 6f 6d 43 6c 65 61 72 28 64 62 29 3b 0a 20 20 7d  omClear(db);.  }
12d00 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
12d10 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
12d20 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d  );.  return z;.}
12d30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
12d40 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
12d50 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
12d60 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  e most recent er
12d70 72 6f 72 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ror code generat
12d80 65 64 20 62 79 20 61 6e 20 53 51 4c 69 74 65 20  ed by an SQLite 
12d90 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e 55 4c 4c  routine. If NULL
12da0 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 74 6f   is.** passed to
12db0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20   this function, 
12dc0 77 65 20 61 73 73 75 6d 65 20 61 20 6d 61 6c 6c  we assume a mall
12dd0 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69  oc() failed duri
12de0 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  ng sqlite3_open(
12df0 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
12e00 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65  3_errcode(sqlite
12e10 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
12e20 20 26 26 20 21 73 71 6c 69 74 65 33 53 61 66 65   && !sqlite3Safe
12e30 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
12e40 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
12e50 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
12e60 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69 66 28 20  BKPT;.  }.  if( 
12e70 21 64 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  !db || db->mallo
12e80 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  cFailed ){.    r
12e90 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
12ea0 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 72  EM_BKPT;.  }.  r
12eb0 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f 64  eturn db->errCod
12ec0 65 20 26 20 64 62 2d 3e 65 72 72 4d 61 73 6b 3b  e & db->errMask;
12ed0 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 65  .}.int sqlite3_e
12ee0 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28  xtended_errcode(
12ef0 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
12f00 69 66 28 20 64 62 20 26 26 20 21 73 71 6c 69 74  if( db && !sqlit
12f10 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
12f20 6b 4f 72 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20  kOrOk(db) ){.   
12f30 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
12f40 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a  ISUSE_BKPT;.  }.
12f50 20 20 69 66 28 20 21 64 62 20 7c 7c 20 64 62 2d    if( !db || db-
12f60 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
12f70 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
12f80 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
12f90 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e   }.  return db->
12fa0 65 72 72 43 6f 64 65 3b 0a 7d 0a 69 6e 74 20 73  errCode;.}.int s
12fb0 71 6c 69 74 65 33 5f 73 79 73 74 65 6d 5f 65 72  qlite3_system_er
12fc0 72 6e 6f 28 73 71 6c 69 74 65 33 20 2a 64 62 29  rno(sqlite3 *db)
12fd0 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 20 3f 20  {.  return db ? 
12fe0 64 62 2d 3e 69 53 79 73 45 72 72 6e 6f 20 3a 20  db->iSysErrno : 
12ff0 30 3b 0a 7d 20 20 0a 0a 2f 2a 0a 2a 2a 20 52 65  0;.}  ../*.** Re
13000 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20 74 68  turn a string th
13010 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
13020 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72 20 73   kind of error s
13030 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
13040 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 20 20 46 6f  ** argument.  Fo
13050 72 20 6e 6f 77 2c 20 74 68 69 73 20 73 69 6d 70  r now, this simp
13060 6c 79 20 63 61 6c 6c 73 20 74 68 65 20 69 6e 74  ly calls the int
13070 65 72 6e 61 6c 20 73 71 6c 69 74 65 33 45 72 72  ernal sqlite3Err
13080 53 74 72 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  Str().** functio
13090 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
130a0 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72   *sqlite3_errstr
130b0 28 69 6e 74 20 72 63 29 7b 0a 20 20 72 65 74 75  (int rc){.  retu
130c0 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  rn sqlite3ErrStr
130d0 28 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  (rc);.}../*.** C
130e0 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f 6c 6c  reate a new coll
130f0 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66  ating function f
13100 6f 72 20 64 61 74 61 62 61 73 65 20 22 64 62 22  or database "db"
13110 2e 20 20 54 68 65 20 6e 61 6d 65 20 69 73 20 7a  .  The name is z
13120 4e 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  Name.** and the 
13130 65 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 63 2e  encoding is enc.
13140 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
13150 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0a  reateCollation(.
13160 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 0a 20    sqlite3* db,. 
13170 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
13180 6d 65 2c 20 0a 20 20 75 38 20 65 6e 63 2c 0a 20  me, .  u8 enc,. 
13190 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
131a0 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
131b0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
131c0 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
131d0 69 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a 78 44  id*),.  void(*xD
131e0 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  el)(void*).){.  
131f0 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a  CollSeq *pColl;.
13200 20 20 69 6e 74 20 65 6e 63 32 3b 0a 20 20 0a 20    int enc2;.  . 
13210 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
13220 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e  _mutex_held(db->
13230 6d 75 74 65 78 29 20 29 3b 0a 0a 20 20 2f 2a 20  mutex) );..  /* 
13240 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  If SQLITE_UTF16 
13250 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
13260 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70  the encoding typ
13270 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69  e, transform thi
13280 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66  s.  ** to one of
13290 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
132a0 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  or SQLITE_UTF16B
132b0 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a  E using the.  **
132c0 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
132d0 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54  IVE macro. SQLIT
132e0 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75  E_UTF16 is not u
132f0 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  sed internally..
13300 20 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20 65 6e    */.  enc2 = en
13310 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 65  c;.  testcase( e
13320 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  nc2==SQLITE_UTF1
13330 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
13340 20 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54   enc2==SQLITE_UT
13350 46 31 36 5f 41 4c 49 47 4e 45 44 20 29 3b 0a 20  F16_ALIGNED );. 
13360 20 69 66 28 20 65 6e 63 32 3d 3d 53 51 4c 49 54   if( enc2==SQLIT
13370 45 5f 55 54 46 31 36 20 7c 7c 20 65 6e 63 32 3d  E_UTF16 || enc2=
13380 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c  =SQLITE_UTF16_AL
13390 49 47 4e 45 44 20 29 7b 0a 20 20 20 20 65 6e 63  IGNED ){.    enc
133a0 32 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  2 = SQLITE_UTF16
133b0 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 20 20 69 66  NATIVE;.  }.  if
133c0 28 20 65 6e 63 32 3c 53 51 4c 49 54 45 5f 55 54  ( enc2<SQLITE_UT
133d0 46 38 20 7c 7c 20 65 6e 63 32 3e 53 51 4c 49 54  F8 || enc2>SQLIT
133e0 45 5f 55 54 46 31 36 42 45 20 29 7b 0a 20 20 20  E_UTF16BE ){.   
133f0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
13400 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a  ISUSE_BKPT;.  }.
13410 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20 74  .  /* Check if t
13420 68 69 73 20 63 61 6c 6c 20 69 73 20 72 65 6d 6f  his call is remo
13430 76 69 6e 67 20 6f 72 20 72 65 70 6c 61 63 69 6e  ving or replacin
13440 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 63 6f  g an existing co
13450 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a 2a 20 73 65  llation .  ** se
13460 71 75 65 6e 63 65 2e 20 49 66 20 73 6f 2c 20 61  quence. If so, a
13470 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 63 74  nd there are act
13480 69 76 65 20 56 4d 73 2c 20 72 65 74 75 72 6e 20  ive VMs, return 
13490 62 75 73 79 2e 20 49 66 20 74 68 65 72 65 0a 20  busy. If there. 
134a0 20 2a 2a 20 61 72 65 20 6e 6f 20 61 63 74 69 76   ** are no activ
134b0 65 20 56 4d 73 2c 20 69 6e 76 61 6c 69 64 61 74  e VMs, invalidat
134c0 65 20 61 6e 79 20 70 72 65 2d 63 6f 6d 70 69 6c  e any pre-compil
134d0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  ed statements.. 
134e0 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71   */.  pColl = sq
134f0 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
13500 28 64 62 2c 20 28 75 38 29 65 6e 63 32 2c 20 7a  (db, (u8)enc2, z
13510 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 69 66 28 20  Name, 0);.  if( 
13520 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c 2d 3e  pColl && pColl->
13530 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66 28 20  xCmp ){.    if( 
13540 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 20  db->nVdbeActive 
13550 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
13560 45 72 72 6f 72 57 69 74 68 4d 73 67 28 64 62 2c  ErrorWithMsg(db,
13570 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20   SQLITE_BUSY, . 
13580 20 20 20 20 20 20 20 22 75 6e 61 62 6c 65 20 74         "unable t
13590 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79 20  o delete/modify 
135a0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
135b0 63 65 20 64 75 65 20 74 6f 20 61 63 74 69 76 65  ce due to active
135c0 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20   statements");. 
135d0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
135e0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a 20  TE_BUSY;.    }. 
135f0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
13600 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
13610 74 73 28 64 62 29 3b 0a 0a 20 20 20 20 2f 2a 20  ts(db);..    /* 
13620 49 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  If collation seq
13630 75 65 6e 63 65 20 70 43 6f 6c 6c 20 77 61 73 20  uence pColl was 
13640 63 72 65 61 74 65 64 20 64 69 72 65 63 74 6c 79  created directly
13650 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20   by a call to.  
13660 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65    ** sqlite3_cre
13670 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 2c 20 61  ate_collation, a
13680 6e 64 20 6e 6f 74 20 67 65 6e 65 72 61 74 65 64  nd not generated
13690 20 62 79 20 73 79 6e 74 68 43 6f 6c 6c 53 65 71   by synthCollSeq
136a0 28 29 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20  (),.    ** then 
136b0 61 6e 79 20 63 6f 70 69 65 73 20 6d 61 64 65 20  any copies made 
136c0 62 79 20 73 79 6e 74 68 43 6f 6c 6c 53 65 71 28  by synthCollSeq(
136d0 29 20 6e 65 65 64 20 74 6f 20 62 65 20 69 6e 76  ) need to be inv
136e0 61 6c 69 64 61 74 65 64 2e 0a 20 20 20 20 2a 2a  alidated..    **
136f0 20 41 6c 73 6f 2c 20 63 6f 6c 6c 61 74 69 6f 6e   Also, collation
13700 20 64 65 73 74 72 75 63 74 6f 72 20 2d 20 43 6f   destructor - Co
13710 6c 6c 53 65 71 2e 78 44 65 6c 28 29 20 2d 20 66  llSeq.xDel() - f
13720 75 6e 63 74 69 6f 6e 20 6d 61 79 20 6e 65 65 64  unction may need
13730 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 63 61  .    ** to be ca
13740 6c 6c 65 64 2e 0a 20 20 20 20 2a 2f 20 0a 20 20  lled..    */ .  
13750 20 20 69 66 28 20 28 70 43 6f 6c 6c 2d 3e 65 6e    if( (pColl->en
13760 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54 46 31  c & ~SQLITE_UTF1
13770 36 5f 41 4c 49 47 4e 45 44 29 3d 3d 65 6e 63 32  6_ALIGNED)==enc2
13780 20 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65   ){.      CollSe
13790 71 20 2a 61 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  q *aColl = sqlit
137a0 65 33 48 61 73 68 46 69 6e 64 28 26 64 62 2d 3e  e3HashFind(&db->
137b0 61 43 6f 6c 6c 53 65 71 2c 20 7a 4e 61 6d 65 29  aCollSeq, zName)
137c0 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20  ;.      int j;. 
137d0 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
137e0 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  3; j++){.       
137f0 20 43 6f 6c 6c 53 65 71 20 2a 70 20 3d 20 26 61   CollSeq *p = &a
13800 43 6f 6c 6c 5b 6a 5d 3b 0a 20 20 20 20 20 20 20  Coll[j];.       
13810 20 69 66 28 20 70 2d 3e 65 6e 63 3d 3d 70 43 6f   if( p->enc==pCo
13820 6c 6c 2d 3e 65 6e 63 20 29 7b 0a 20 20 20 20 20  ll->enc ){.     
13830 20 20 20 20 20 69 66 28 20 70 2d 3e 78 44 65 6c       if( p->xDel
13840 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
13850 70 2d 3e 78 44 65 6c 28 70 2d 3e 70 55 73 65 72  p->xDel(p->pUser
13860 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
13870 20 20 20 20 20 20 20 20 20 70 2d 3e 78 43 6d 70           p->xCmp
13880 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
13890 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
138a0 7d 0a 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71 6c  }..  pColl = sql
138b0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
138c0 64 62 2c 20 28 75 38 29 65 6e 63 32 2c 20 7a 4e  db, (u8)enc2, zN
138d0 61 6d 65 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  ame, 1);.  if( p
138e0 43 6f 6c 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e  Coll==0 ) return
138f0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
13900 50 54 3b 0a 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d  PT;.  pColl->xCm
13910 70 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20  p = xCompare;.  
13920 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70  pColl->pUser = p
13930 43 74 78 3b 0a 20 20 70 43 6f 6c 6c 2d 3e 78 44  Ctx;.  pColl->xD
13940 65 6c 20 3d 20 78 44 65 6c 3b 0a 20 20 70 43 6f  el = xDel;.  pCo
13950 6c 6c 2d 3e 65 6e 63 20 3d 20 28 75 38 29 28 65  ll->enc = (u8)(e
13960 6e 63 32 20 7c 20 28 65 6e 63 20 26 20 53 51 4c  nc2 | (enc & SQL
13970 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
13980 44 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72  D));.  sqlite3Er
13990 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
139a0 4b 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  K);.  return SQL
139b0 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  ITE_OK;.}.../*.*
139c0 2a 20 54 68 69 73 20 61 72 72 61 79 20 64 65 66  * This array def
139d0 69 6e 65 73 20 68 61 72 64 20 75 70 70 65 72 20  ines hard upper 
139e0 62 6f 75 6e 64 73 20 6f 6e 20 6c 69 6d 69 74 20  bounds on limit 
139f0 76 61 6c 75 65 73 2e 20 20 54 68 65 0a 2a 2a 20  values.  The.** 
13a00 69 6e 69 74 69 61 6c 69 7a 65 72 20 6d 75 73 74  initializer must
13a10 20 62 65 20 6b 65 70 74 20 69 6e 20 73 79 6e 63   be kept in sync
13a20 20 77 69 74 68 20 74 68 65 20 53 51 4c 49 54 45   with the SQLITE
13a30 5f 4c 49 4d 49 54 5f 2a 0a 2a 2a 20 23 64 65 66  _LIMIT_*.** #def
13a40 69 6e 65 73 20 69 6e 20 73 71 6c 69 74 65 33 2e  ines in sqlite3.
13a50 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e  h..*/.static con
13a60 73 74 20 69 6e 74 20 61 48 61 72 64 4c 69 6d 69  st int aHardLimi
13a70 74 5b 5d 20 3d 20 7b 0a 20 20 53 51 4c 49 54 45  t[] = {.  SQLITE
13a80 5f 4d 41 58 5f 4c 45 4e 47 54 48 2c 0a 20 20 53  _MAX_LENGTH,.  S
13a90 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45  QLITE_MAX_SQL_LE
13aa0 4e 47 54 48 2c 0a 20 20 53 51 4c 49 54 45 5f 4d  NGTH,.  SQLITE_M
13ab0 41 58 5f 43 4f 4c 55 4d 4e 2c 0a 20 20 53 51 4c  AX_COLUMN,.  SQL
13ac0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
13ad0 54 48 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58  TH,.  SQLITE_MAX
13ae0 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54  _COMPOUND_SELECT
13af0 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56  ,.  SQLITE_MAX_V
13b00 44 42 45 5f 4f 50 2c 0a 20 20 53 51 4c 49 54 45  DBE_OP,.  SQLITE
13b10 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  _MAX_FUNCTION_AR
13b20 47 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f  G,.  SQLITE_MAX_
13b30 41 54 54 41 43 48 45 44 2c 0a 20 20 53 51 4c 49  ATTACHED,.  SQLI
13b40 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54  TE_MAX_LIKE_PATT
13b50 45 52 4e 5f 4c 45 4e 47 54 48 2c 0a 20 20 53 51  ERN_LENGTH,.  SQ
13b60 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
13b70 45 5f 4e 55 4d 42 45 52 2c 20 20 20 20 20 20 2f  E_NUMBER,      /
13b80 2a 20 49 4d 50 3a 20 52 2d 33 38 30 39 31 2d 33  * IMP: R-38091-3
13b90 32 33 35 32 20 2a 2f 0a 20 20 53 51 4c 49 54 45  2352 */.  SQLITE
13ba0 5f 4d 41 58 5f 54 52 49 47 47 45 52 5f 44 45 50  _MAX_TRIGGER_DEP
13bb0 54 48 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58  TH,.  SQLITE_MAX
13bc0 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
13bd0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  .};../*.** Make 
13be0 73 75 72 65 20 74 68 65 20 68 61 72 64 20 6c 69  sure the hard li
13bf0 6d 69 74 73 20 61 72 65 20 73 65 74 20 74 6f 20  mits are set to 
13c00 72 65 61 73 6f 6e 61 62 6c 65 20 76 61 6c 75 65  reasonable value
13c10 73 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  s.*/.#if SQLITE_
13c20 4d 41 58 5f 4c 45 4e 47 54 48 3c 31 30 30 0a 23  MAX_LENGTH<100.#
13c30 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41   error SQLITE_MA
13c40 58 5f 4c 45 4e 47 54 48 20 6d 75 73 74 20 62 65  X_LENGTH must be
13c50 20 61 74 20 6c 65 61 73 74 20 31 30 30 0a 23 65   at least 100.#e
13c60 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
13c70 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 3c 31  MAX_SQL_LENGTH<1
13c80 30 30 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54  00.# error SQLIT
13c90 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48  E_MAX_SQL_LENGTH
13ca0 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
13cb0 74 20 31 30 30 0a 23 65 6e 64 69 66 0a 23 69 66  t 100.#endif.#if
13cc0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f   SQLITE_MAX_SQL_
13cd0 4c 45 4e 47 54 48 3e 53 51 4c 49 54 45 5f 4d 41  LENGTH>SQLITE_MA
13ce0 58 5f 4c 45 4e 47 54 48 0a 23 20 65 72 72 6f 72  X_LENGTH.# error
13cf0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f   SQLITE_MAX_SQL_
13d00 4c 45 4e 47 54 48 20 6d 75 73 74 20 6e 6f 74 20  LENGTH must not 
13d10 62 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  be greater than 
13d20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
13d30 48 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  H.#endif.#if SQL
13d40 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44  ITE_MAX_COMPOUND
13d50 5f 53 45 4c 45 43 54 3c 32 0a 23 20 65 72 72 6f  _SELECT<2.# erro
13d60 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d  r SQLITE_MAX_COM
13d70 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 6d 75 73  POUND_SELECT mus
13d80 74 20 62 65 20 61 74 20 6c 65 61 73 74 20 32 0a  t be at least 2.
13d90 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13da0 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 3c 34 30  E_MAX_VDBE_OP<40
13db0 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f  .# error SQLITE_
13dc0 4d 41 58 5f 56 44 42 45 5f 4f 50 20 6d 75 73 74  MAX_VDBE_OP must
13dd0 20 62 65 20 61 74 20 6c 65 61 73 74 20 34 30 0a   be at least 40.
13de0 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13df0 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41  E_MAX_FUNCTION_A
13e00 52 47 3c 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4d  RG<0 || SQLITE_M
13e10 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 3e  AX_FUNCTION_ARG>
13e20 31 32 37 0a 23 20 65 72 72 6f 72 20 53 51 4c 49  127.# error SQLI
13e30 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
13e40 41 52 47 20 6d 75 73 74 20 62 65 20 62 65 74 77  ARG must be betw
13e50 65 65 6e 20 30 20 61 6e 64 20 31 32 37 0a 23 65  een 0 and 127.#e
13e60 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
13e70 4d 41 58 5f 41 54 54 41 43 48 45 44 3c 30 20 7c  MAX_ATTACHED<0 |
13e80 7c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  | SQLITE_MAX_ATT
13e90 41 43 48 45 44 3e 31 32 35 0a 23 20 65 72 72 6f  ACHED>125.# erro
13ea0 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  r SQLITE_MAX_ATT
13eb0 41 43 48 45 44 20 6d 75 73 74 20 62 65 20 62 65  ACHED must be be
13ec0 74 77 65 65 6e 20 30 20 61 6e 64 20 31 32 35 0a  tween 0 and 125.
13ed0 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13ee0 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54 45  E_MAX_LIKE_PATTE
13ef0 52 4e 5f 4c 45 4e 47 54 48 3c 31 0a 23 20 65 72  RN_LENGTH<1.# er
13f00 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  ror SQLITE_MAX_L
13f10 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
13f20 54 48 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65  TH must be at le
13f30 61 73 74 20 31 0a 23 65 6e 64 69 66 0a 23 69 66  ast 1.#endif.#if
13f40 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55   SQLITE_MAX_COLU
13f50 4d 4e 3e 33 32 37 36 37 0a 23 20 65 72 72 6f 72  MN>32767.# error
13f60 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55   SQLITE_MAX_COLU
13f70 4d 4e 20 6d 75 73 74 20 6e 6f 74 20 65 78 63 65  MN must not exce
13f80 65 64 20 33 32 37 36 37 0a 23 65 6e 64 69 66 0a  ed 32767.#endif.
13f90 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 54  #if SQLITE_MAX_T
13fa0 52 49 47 47 45 52 5f 44 45 50 54 48 3c 31 0a 23  RIGGER_DEPTH<1.#
13fb0 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41   error SQLITE_MA
13fc0 58 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20  X_TRIGGER_DEPTH 
13fd0 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74  must be at least
13fe0 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51   1.#endif.#if SQ
13ff0 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
14000 54 48 52 45 41 44 53 3c 30 20 7c 7c 20 53 51 4c  THREADS<0 || SQL
14010 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
14020 48 52 45 41 44 53 3e 35 30 0a 23 20 65 72 72 6f  HREADS>50.# erro
14030 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  r SQLITE_MAX_WOR
14040 4b 45 52 5f 54 48 52 45 41 44 53 20 6d 75 73 74  KER_THREADS must
14050 20 62 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e   be between 0 an
14060 64 20 35 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d 50.#endif.../*
14070 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 76  .** Change the v
14080 61 6c 75 65 20 6f 66 20 61 20 6c 69 6d 69 74 2e  alue of a limit.
14090 20 20 52 65 70 6f 72 74 20 74 68 65 20 6f 6c 64    Report the old
140a0 20 76 61 6c 75 65 2e 0a 2a 2a 20 49 66 20 61 6e   value..** If an
140b0 20 69 6e 76 61 6c 69 64 20 6c 69 6d 69 74 20 69   invalid limit i
140c0 6e 64 65 78 20 69 73 20 73 75 70 70 6c 69 65 64  ndex is supplied
140d0 2c 20 72 65 70 6f 72 74 20 2d 31 2e 0a 2a 2a 20  , report -1..** 
140e0 4d 61 6b 65 20 6e 6f 20 63 68 61 6e 67 65 73 20  Make no changes 
140f0 62 75 74 20 73 74 69 6c 6c 20 72 65 70 6f 72 74  but still report
14100 20 74 68 65 20 6f 6c 64 20 76 61 6c 75 65 20 69   the old value i
14110 66 20 74 68 65 0a 2a 2a 20 6e 65 77 20 6c 69 6d  f the.** new lim
14120 69 74 20 69 73 20 6e 65 67 61 74 69 76 65 2e 0a  it is negative..
14130 2a 2a 0a 2a 2a 20 41 20 6e 65 77 20 6c 6f 77 65  **.** A new lowe
14140 72 20 6c 69 6d 69 74 20 64 6f 65 73 20 6e 6f 74  r limit does not
14150 20 73 68 72 69 6e 6b 20 65 78 69 73 74 69 6e 67   shrink existing
14160 20 63 6f 6e 73 74 72 75 63 74 73 2e 0a 2a 2a 20   constructs..** 
14170 49 74 20 6d 65 72 65 6c 79 20 70 72 65 76 65 6e  It merely preven
14180 74 73 20 6e 65 77 20 63 6f 6e 73 74 72 75 63 74  ts new construct
14190 73 20 74 68 61 74 20 65 78 63 65 65 64 20 74 68  s that exceed th
141a0 65 20 6c 69 6d 69 74 0a 2a 2a 20 66 72 6f 6d 20  e limit.** from 
141b0 66 6f 72 6d 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20  forming..*/.int 
141c0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 73 71  sqlite3_limit(sq
141d0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6c  lite3 *db, int l
141e0 69 6d 69 74 49 64 2c 20 69 6e 74 20 6e 65 77 4c  imitId, int newL
141f0 69 6d 69 74 29 7b 0a 20 20 69 6e 74 20 6f 6c 64  imit){.  int old
14200 4c 69 6d 69 74 3b 0a 0a 23 69 66 64 65 66 20 53  Limit;..#ifdef S
14210 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
14220 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
14230 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
14240 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
14250 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
14260 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
14270 72 6e 20 2d 31 3b 0a 20 20 7d 0a 23 65 6e 64 69  rn -1;.  }.#endi
14280 66 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  f..  /* EVIDENCE
14290 2d 4f 46 3a 20 52 2d 33 30 31 38 39 2d 35 34 30  -OF: R-30189-540
142a0 39 37 20 46 6f 72 20 65 61 63 68 20 6c 69 6d 69  97 For each limi
142b0 74 20 63 61 74 65 67 6f 72 79 20 53 51 4c 49 54  t category SQLIT
142c0 45 5f 4c 49 4d 49 54 5f 4e 41 4d 45 0a 20 20 2a  E_LIMIT_NAME.  *
142d0 2a 20 74 68 65 72 65 20 69 73 20 61 20 68 61 72  * there is a har
142e0 64 20 75 70 70 65 72 20 62 6f 75 6e 64 20 73 65  d upper bound se
142f0 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  t at compile-tim
14300 65 20 62 79 20 61 20 43 20 70 72 65 70 72 6f 63  e by a C preproc
14310 65 73 73 6f 72 0a 20 20 2a 2a 20 6d 61 63 72 6f  essor.  ** macro
14320 20 63 61 6c 6c 65 64 20 53 51 4c 49 54 45 5f 4d   called SQLITE_M
14330 41 58 5f 4e 41 4d 45 2e 20 28 54 68 65 20 22 5f  AX_NAME. (The "_
14340 4c 49 4d 49 54 5f 22 20 69 6e 20 74 68 65 20 6e  LIMIT_" in the n
14350 61 6d 65 20 69 73 20 63 68 61 6e 67 65 64 20 74  ame is changed t
14360 6f 0a 20 20 2a 2a 20 22 5f 4d 41 58 5f 22 2e 29  o.  ** "_MAX_".)
14370 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
14380 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54  aHardLimit[SQLIT
14390 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3d  E_LIMIT_LENGTH]=
143a0 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47  =SQLITE_MAX_LENG
143b0 54 48 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TH );.  assert( 
143c0 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54  aHardLimit[SQLIT
143d0 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
143e0 54 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f  TH]==SQLITE_MAX_
143f0 53 51 4c 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  SQL_LENGTH );.  
14400 61 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d  assert( aHardLim
14410 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
14420 43 4f 4c 55 4d 4e 5d 3d 3d 53 51 4c 49 54 45 5f  COLUMN]==SQLITE_
14430 4d 41 58 5f 43 4f 4c 55 4d 4e 20 29 3b 0a 20 20  MAX_COLUMN );.  
14440 61 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d  assert( aHardLim
14450 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
14460 45 58 50 52 5f 44 45 50 54 48 5d 3d 3d 53 51 4c  EXPR_DEPTH]==SQL
14470 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
14480 54 48 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TH );.  assert( 
14490 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54  aHardLimit[SQLIT
144a0 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
144b0 5f 53 45 4c 45 43 54 5d 3d 3d 53 51 4c 49 54 45  _SELECT]==SQLITE
144c0 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  _MAX_COMPOUND_SE
144d0 4c 45 43 54 29 3b 0a 20 20 61 73 73 65 72 74 28  LECT);.  assert(
144e0 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49   aHardLimit[SQLI
144f0 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50  TE_LIMIT_VDBE_OP
14500 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 56 44  ]==SQLITE_MAX_VD
14510 42 45 5f 4f 50 20 29 3b 0a 20 20 61 73 73 65 72  BE_OP );.  asser
14520 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51  t( aHardLimit[SQ
14530 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54  LITE_LIMIT_FUNCT
14540 49 4f 4e 5f 41 52 47 5d 3d 3d 53 51 4c 49 54 45  ION_ARG]==SQLITE
14550 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  _MAX_FUNCTION_AR
14560 47 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  G );.  assert( a
14570 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45  HardLimit[SQLITE
14580 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 5d  _LIMIT_ATTACHED]
14590 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  ==SQLITE_MAX_ATT
145a0 41 43 48 45 44 20 29 3b 0a 20 20 61 73 73 65 72  ACHED );.  asser
145b0 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51  t( aHardLimit[SQ
145c0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
145d0 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 5d 3d  PATTERN_LENGTH]=
145e0 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  =.              
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45   SQLITE_MAX_LIKE
14620 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20  _PATTERN_LENGTH 
14630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 48 61  );.  assert( aHa
14640 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  rdLimit[SQLITE_L
14650 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55  IMIT_VARIABLE_NU
14660 4d 42 45 52 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41  MBER]==SQLITE_MA
14670 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
14680 52 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 48  R);.  assert( aH
14690 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ardLimit[SQLITE_
146a0 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
146b0 50 54 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58  PTH]==SQLITE_MAX
146c0 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 29  _TRIGGER_DEPTH )
146d0 3b 0a 20 20 61 73 73 65 72 74 28 20 61 48 61 72  ;.  assert( aHar
146e0 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  dLimit[SQLITE_LI
146f0 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
14700 44 53 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f  DS]==SQLITE_MAX_
14710 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 29  WORKER_THREADS )
14720 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49  ;.  assert( SQLI
14730 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
14740 54 48 52 45 41 44 53 3d 3d 28 53 51 4c 49 54 45  THREADS==(SQLITE
14750 5f 4e 5f 4c 49 4d 49 54 2d 31 29 20 29 3b 0a 0a  _N_LIMIT-1) );..
14760 0a 20 20 69 66 28 20 6c 69 6d 69 74 49 64 3c 30  .  if( limitId<0
14770 20 7c 7c 20 6c 69 6d 69 74 49 64 3e 3d 53 51 4c   || limitId>=SQL
14780 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 29 7b 0a 20  ITE_N_LIMIT ){. 
14790 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20     return -1;.  
147a0 7d 0a 20 20 6f 6c 64 4c 69 6d 69 74 20 3d 20 64  }.  oldLimit = d
147b0 62 2d 3e 61 4c 69 6d 69 74 5b 6c 69 6d 69 74 49  b->aLimit[limitI
147c0 64 5d 3b 0a 20 20 69 66 28 20 6e 65 77 4c 69 6d  d];.  if( newLim
147d0 69 74 3e 3d 30 20 29 7b 20 20 20 20 20 20 20 20  it>=0 ){        
147e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 4d             /* IM
147f0 50 3a 20 52 2d 35 32 34 37 36 2d 32 38 37 33 32  P: R-52476-28732
14800 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 65 77 4c   */.    if( newL
14810 69 6d 69 74 3e 61 48 61 72 64 4c 69 6d 69 74 5b  imit>aHardLimit[
14820 6c 69 6d 69 74 49 64 5d 20 29 7b 0a 20 20 20 20  limitId] ){.    
14830 20 20 6e 65 77 4c 69 6d 69 74 20 3d 20 61 48 61    newLimit = aHa
14840 72 64 4c 69 6d 69 74 5b 6c 69 6d 69 74 49 64 5d  rdLimit[limitId]
14850 3b 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 31 34  ;  /* IMP: R-514
14860 36 33 2d 32 35 36 33 34 20 2a 2f 0a 20 20 20 20  63-25634 */.    
14870 7d 0a 20 20 20 20 64 62 2d 3e 61 4c 69 6d 69 74  }.    db->aLimit
14880 5b 6c 69 6d 69 74 49 64 5d 20 3d 20 6e 65 77 4c  [limitId] = newL
14890 69 6d 69 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75  imit;.  }.  retu
148a0 72 6e 20 6f 6c 64 4c 69 6d 69 74 3b 20 20 20 20  rn oldLimit;    
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 33 33 34 31   /* IMP: R-53341
148d0 2d 33 35 34 31 39 20 2a 2f 0a 7d 0a 23 69 66 20  -35419 */.}.#if 
148e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
148f0 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52 4f 46 49  NABLE_AUTO_PROFI
14900 4c 45 29 0a 2f 2a 20 73 74 64 65 72 72 20 6c 6f  LE)./* stderr lo
14910 67 67 69 6e 67 20 2a 2f 0a 76 6f 69 64 20 5f 73  gging */.void _s
14920 71 6c 69 74 65 5f 61 75 74 6f 5f 70 72 6f 66 69  qlite_auto_profi
14930 6c 65 28 76 6f 69 64 20 2a 61 75 78 2c 20 63 6f  le(void *aux, co
14940 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c 20 75  nst char *sql, u
14950 36 34 20 6e 73 29 3b 0a 76 6f 69 64 20 5f 73 71  64 ns);.void _sq
14960 6c 69 74 65 5f 61 75 74 6f 5f 74 72 61 63 65 28  lite_auto_trace(
14970 76 6f 69 64 20 2a 61 75 78 2c 20 63 6f 6e 73 74  void *aux, const
14980 20 63 68 61 72 20 2a 73 71 6c 29 3b 0a 76 6f 69   char *sql);.voi
14990 64 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f 5f 70  d _sqlite_auto_p
149a0 72 6f 66 69 6c 65 28 76 6f 69 64 20 2a 61 75 78  rofile(void *aux
149b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  , const char *sq
149c0 6c 2c 20 75 36 34 20 6e 73 29 20 7b 0a 23 70 72  l, u64 ns) {.#pr
149d0 61 67 6d 61 20 75 6e 75 73 65 64 28 61 75 78 29  agma unused(aux)
149e0 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72  ..fprintf(stderr
149f0 2c 20 22 51 75 65 72 79 3a 20 25 73 5c 6e 20 45  , "Query: %s\n E
14a00 78 65 63 75 74 69 6f 6e 20 54 69 6d 65 3a 20 25  xecution Time: %
14a10 6c 6c 75 20 6d 73 5c 6e 22 2c 20 73 71 6c 2c 20  llu ms\n", sql, 
14a20 6e 73 20 2f 20 31 30 30 30 30 30 30 29 3b 0a 7d  ns / 1000000);.}
14a30 0a 76 6f 69 64 20 5f 73 71 6c 69 74 65 5f 61 75  .void _sqlite_au
14a40 74 6f 5f 74 72 61 63 65 28 76 6f 69 64 20 2a 61  to_trace(void *a
14a50 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ux, const char *
14a60 73 71 6c 29 20 7b 0a 09 66 70 72 69 6e 74 66 28  sql) {..fprintf(
14a70 73 74 64 65 72 72 2c 20 22 54 72 61 63 65 53 51  stderr, "TraceSQ
14a80 4c 28 25 70 29 3a 20 25 73 5c 6e 22 2c 20 61 75  L(%p): %s\n", au
14a90 78 2c 20 73 71 6c 29 3b 0a 7d 0a 0a 2f 2a 20 73  x, sql);.}../* s
14aa0 79 73 6c 6f 67 20 6c 6f 67 67 69 6e 67 20 2a 2f  yslog logging */
14ab0 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 6c 2e 68  .#include <asl.h
14ac0 3e 0a 73 74 61 74 69 63 20 61 73 6c 63 6c 69 65  >.static aslclie
14ad0 6e 74 20 61 75 74 6f 6c 6f 67 5f 63 6c 69 65 6e  nt autolog_clien
14ae0 74 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74 69 63  t = NULL;.static
14af0 20 76 6f 69 64 20 5f 63 6c 6f 73 65 5f 61 73 6c   void _close_asl
14b00 5f 6c 6f 67 28 29 20 7b 0a 20 20 69 66 28 20 4e  _log() {.  if( N
14b10 55 4c 4c 21 3d 61 75 74 6f 6c 6f 67 5f 63 6c 69  ULL!=autolog_cli
14b20 65 6e 74 20 29 7b 0a 20 20 20 20 61 73 6c 5f 63  ent ){.    asl_c
14b30 6c 6f 73 65 28 61 75 74 6f 6c 6f 67 5f 63 6c 69  lose(autolog_cli
14b40 65 6e 74 29 3b 0a 20 20 20 20 61 75 74 6f 6c 6f  ent);.    autolo
14b50 67 5f 63 6c 69 65 6e 74 20 3d 20 4e 55 4c 4c 3b  g_client = NULL;
14b60 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
14b70 69 64 20 5f 6f 70 65 6e 5f 61 73 6c 5f 6c 6f 67  id _open_asl_log
14b80 28 29 20 7b 0a 20 20 69 66 28 20 4e 55 4c 4c 3d  () {.  if( NULL=
14b90 3d 61 75 74 6f 6c 6f 67 5f 63 6c 69 65 6e 74 20  =autolog_client 
14ba0 29 7b 0a 20 20 20 20 61 75 74 6f 6c 6f 67 5f 63  ){.    autolog_c
14bb0 6c 69 65 6e 74 20 3d 20 61 73 6c 5f 6f 70 65 6e  lient = asl_open
14bc0 28 22 53 51 4c 69 74 65 22 2c 20 4e 55 4c 4c 2c  ("SQLite", NULL,
14bd0 20 30 29 3b 0a 20 20 20 20 61 74 65 78 69 74 28   0);.    atexit(
14be0 5f 63 6c 6f 73 65 5f 61 73 6c 5f 6c 6f 67 29 3b  _close_asl_log);
14bf0 0a 20 20 7d 0a 7d 0a 0a 76 6f 69 64 20 5f 73 71  .  }.}..void _sq
14c00 6c 69 74 65 5f 61 75 74 6f 5f 70 72 6f 66 69 6c  lite_auto_profil
14c10 65 5f 73 79 73 6c 6f 67 28 76 6f 69 64 20 2a 61  e_syslog(void *a
14c20 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ux, const char *
14c30 73 71 6c 2c 20 75 36 34 20 6e 73 29 3b 0a 76 6f  sql, u64 ns);.vo
14c40 69 64 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f 5f  id _sqlite_auto_
14c50 74 72 61 63 65 5f 73 79 73 6c 6f 67 28 76 6f 69  trace_syslog(voi
14c60 64 20 2a 61 75 78 2c 20 63 6f 6e 73 74 20 63 68  d *aux, const ch
14c70 61 72 20 2a 73 71 6c 29 3b 0a 76 6f 69 64 20 5f  ar *sql);.void _
14c80 73 71 6c 69 74 65 5f 61 75 74 6f 5f 70 72 6f 66  sqlite_auto_prof
14c90 69 6c 65 5f 73 79 73 6c 6f 67 28 76 6f 69 64 20  ile_syslog(void 
14ca0 2a 61 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72  *aux, const char
14cb0 20 2a 73 71 6c 2c 20 75 36 34 20 6e 73 29 20 7b   *sql, u64 ns) {
14cc0 0a 23 70 72 61 67 6d 61 20 75 6e 75 73 65 64 28  .#pragma unused(
14cd0 61 75 78 29 0a 09 61 73 6c 5f 6c 6f 67 28 61 75  aux)..asl_log(au
14ce0 74 6f 6c 6f 67 5f 63 6c 69 65 6e 74 2c 20 4e 55  tolog_client, NU
14cf0 4c 4c 2c 20 41 53 4c 5f 4c 45 56 45 4c 5f 4e 4f  LL, ASL_LEVEL_NO
14d00 54 49 43 45 2c 20 22 51 75 65 72 79 3a 20 25 73  TICE, "Query: %s
14d10 5c 6e 20 45 78 65 63 75 74 69 6f 6e 20 54 69 6d  \n Execution Tim
14d20 65 3a 20 25 6c 6c 75 20 6d 73 5c 6e 22 2c 20 73  e: %llu ms\n", s
14d30 71 6c 2c 20 6e 73 20 2f 20 31 30 30 30 30 30 30  ql, ns / 1000000
14d40 29 3b 0a 7d 0a 76 6f 69 64 20 5f 73 71 6c 69 74  );.}.void _sqlit
14d50 65 5f 61 75 74 6f 5f 74 72 61 63 65 5f 73 79 73  e_auto_trace_sys
14d60 6c 6f 67 28 76 6f 69 64 20 2a 61 75 78 2c 20 63  log(void *aux, c
14d70 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 29 20  onst char *sql) 
14d80 7b 0a 09 61 73 6c 5f 6c 6f 67 28 61 75 74 6f 6c  {..asl_log(autol
14d90 6f 67 5f 63 6c 69 65 6e 74 2c 20 4e 55 4c 4c 2c  og_client, NULL,
14da0 20 41 53 4c 5f 4c 45 56 45 4c 5f 4e 4f 54 49 43   ASL_LEVEL_NOTIC
14db0 45 2c 20 22 54 72 61 63 65 53 51 4c 28 25 70 29  E, "TraceSQL(%p)
14dc0 3a 20 25 73 5c 6e 22 2c 20 61 75 78 2c 20 73 71  : %s\n", aux, sq
14dd0 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  l);.}.#endif../*
14de0 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
14df0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 70 61 72  n is used to par
14e00 73 65 20 62 6f 74 68 20 55 52 49 73 20 61 6e 64  se both URIs and
14e10 20 6e 6f 6e 2d 55 52 49 20 66 69 6c 65 6e 61 6d   non-URI filenam
14e20 65 73 20 70 61 73 73 65 64 20 62 79 20 74 68 65  es passed by the
14e30 0a 2a 2a 20 75 73 65 72 20 74 6f 20 41 50 49 20  .** user to API 
14e40 66 75 6e 63 74 69 6f 6e 73 20 73 71 6c 69 74 65  functions sqlite
14e50 33 5f 6f 70 65 6e 28 29 20 6f 72 20 73 71 6c 69  3_open() or sqli
14e60 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 2c 20 61  te3_open_v2(), a
14e70 6e 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 0a  nd for database.
14e80 2a 2a 20 55 52 49 73 20 73 70 65 63 69 66 69 65  ** URIs specifie
14e90 64 20 61 73 20 70 61 72 74 20 6f 66 20 41 54 54  d as part of ATT
14ea0 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ACH statements..
14eb0 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  **.** The first 
14ec0 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69 73  argument to this
14ed0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 68 65   function is the
14ee0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53   name of the VFS
14ef0 20 74 6f 20 75 73 65 20 28 6f 72 0a 2a 2a 20 61   to use (or.** a
14f00 20 4e 55 4c 4c 20 74 6f 20 73 69 67 6e 69 66 79   NULL to signify
14f10 20 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53   the default VFS
14f20 29 20 69 66 20 74 68 65 20 55 52 49 20 64 6f 65  ) if the URI doe
14f30 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20  s not contain a 
14f40 22 76 66 73 3d 78 78 78 22 0a 2a 2a 20 71 75 65  "vfs=xxx".** que
14f50 72 79 20 70 61 72 61 6d 65 74 65 72 2e 20 54 68  ry parameter. Th
14f60 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
14f70 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 55  t contains the U
14f80 52 49 20 28 6f 72 20 6e 6f 6e 2d 55 52 49 20 66  RI (or non-URI f
14f90 69 6c 65 6e 61 6d 65 29 0a 2a 2a 20 69 74 73 65  ilename).** itse
14fa0 6c 66 2e 20 57 68 65 6e 20 74 68 69 73 20 66 75  lf. When this fu
14fb0 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
14fc0 20 74 68 65 20 2a 70 46 6c 61 67 73 20 76 61 72   the *pFlags var
14fd0 69 61 62 6c 65 20 73 68 6f 75 6c 64 20 63 6f 6e  iable should con
14fe0 74 61 69 6e 0a 2a 2a 20 74 68 65 20 64 65 66 61  tain.** the defa
14ff0 75 6c 74 20 66 6c 61 67 73 20 74 6f 20 6f 70 65  ult flags to ope
15000 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
15010 61 6e 64 6c 65 20 77 69 74 68 2e 20 54 68 65 20  andle with. The 
15020 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 0a  value stored in.
15030 2a 2a 20 2a 70 46 6c 61 67 73 20 6d 61 79 20 62  ** *pFlags may b
15040 65 20 75 70 64 61 74 65 64 20 62 65 66 6f 72 65  e updated before
15050 20 72 65 74 75 72 6e 69 6e 67 20 69 66 20 74 68   returning if th
15060 65 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 20 63  e URI filename c
15070 6f 6e 74 61 69 6e 73 20 0a 2a 2a 20 22 63 61 63  ontains .** "cac
15080 68 65 3d 78 78 78 22 20 6f 72 20 22 6d 6f 64 65  he=xxx" or "mode
15090 3d 78 78 78 22 20 71 75 65 72 79 20 70 61 72 61  =xxx" query para
150a0 6d 65 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  meters..**.** If
150b0 20 73 75 63 63 65 73 73 66 75 6c 2c 20 53 51 4c   successful, SQL
150c0 49 54 45 5f 4f 4b 20 69 73 20 72 65 74 75 72 6e  ITE_OK is return
150d0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
150e0 20 2a 70 70 56 66 73 20 69 73 20 73 65 74 20 74   *ppVfs is set t
150f0 6f 20 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20 74 68  o point to.** th
15100 65 20 56 46 53 20 74 68 61 74 20 73 68 6f 75 6c  e VFS that shoul
15110 64 20 62 65 20 75 73 65 64 20 74 6f 20 6f 70 65  d be used to ope
15120 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
15130 69 6c 65 2e 20 2a 70 7a 46 69 6c 65 20 69 73 20  ile. *pzFile is 
15140 73 65 74 20 74 6f 0a 2a 2a 20 70 6f 69 6e 74 20  set to.** point 
15150 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f 6e 74  to a buffer cont
15160 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 6d 65 20  aining the name 
15170 6f 66 20 74 68 65 20 66 69 6c 65 20 74 6f 20 6f  of the file to o
15180 70 65 6e 2e 20 49 74 20 69 73 20 74 68 65 20 0a  pen. It is the .
15190 2a 2a 20 72 65 73 70 6f 6e 73 69 62 69 6c 69 74  ** responsibilit
151a0 79 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 20  y of the caller 
151b0 74 6f 20 65 76 65 6e 74 75 61 6c 6c 79 20 63 61  to eventually ca
151c0 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  ll sqlite3_free(
151d0 29 20 74 6f 20 72 65 6c 65 61 73 65 0a 2a 2a 20  ) to release.** 
151e0 74 68 69 73 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  this buffer..**.
151f0 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
15200 63 63 75 72 73 2c 20 74 68 65 6e 20 61 6e 20 53  ccurs, then an S
15210 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  QLite error code
15220 20 69 73 20 72 65 74 75 72 6e 65 64 20 61 6e 64   is returned and
15230 20 2a 70 7a 45 72 72 4d 73 67 0a 2a 2a 20 6d 61   *pzErrMsg.** ma
15240 79 20 62 65 20 73 65 74 20 74 6f 20 70 6f 69 6e  y be set to poin
15250 74 20 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f  t to a buffer co
15260 6e 74 61 69 6e 69 6e 67 20 61 6e 20 45 6e 67 6c  ntaining an Engl
15270 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 72 72  ish language err
15280 6f 72 20 0a 2a 2a 20 6d 65 73 73 61 67 65 2e 20  or .** message. 
15290 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f 6e  It is the respon
152a0 73 69 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20  sibility of the 
152b0 63 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e 74 75  caller to eventu
152c0 61 6c 6c 79 20 72 65 6c 65 61 73 65 0a 2a 2a 20  ally release.** 
152d0 74 68 69 73 20 62 75 66 66 65 72 20 62 79 20 63  this buffer by c
152e0 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 66  alling sqlite3_f
152f0 72 65 65 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ree()..*/.int sq
15300 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 0a 20  lite3ParseUri(. 
15310 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 65   const char *zDe
15320 66 61 75 6c 74 56 66 73 2c 20 20 20 20 20 20 20  faultVfs,       
15330 20 2f 2a 20 56 46 53 20 74 6f 20 75 73 65 20 69   /* VFS to use i
15340 66 20 6e 6f 20 22 76 66 73 3d 78 78 78 22 20 71  f no "vfs=xxx" q
15350 75 65 72 79 20 6f 70 74 69 6f 6e 20 2a 2f 0a 20  uery option */. 
15360 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 55 72   const char *zUr
15370 69 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i,              
15380 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
15390 65 64 20 55 52 49 20 74 6f 20 70 61 72 73 65 20  ed URI to parse 
153a0 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
153b0 74 20 2a 70 46 6c 61 67 73 2c 20 20 20 20 20 20  t *pFlags,      
153c0 20 20 20 20 20 2f 2a 20 49 4e 2f 4f 55 54 3a 20       /* IN/OUT: 
153d0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 58 58 58 20  SQLITE_OPEN_XXX 
153e0 66 6c 61 67 73 20 2a 2f 0a 20 20 73 71 6c 69 74  flags */.  sqlit
153f0 65 33 5f 76 66 73 20 2a 2a 70 70 56 66 73 2c 20  e3_vfs **ppVfs, 
15400 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
15410 54 3a 20 56 46 53 20 74 6f 20 75 73 65 20 2a 2f  T: VFS to use */
15420 20 0a 20 20 63 68 61 72 20 2a 2a 70 7a 46 69 6c   .  char **pzFil
15430 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e,              
15440 20 20 20 20 2f 2a 20 4f 55 54 3a 20 46 69 6c 65      /* OUT: File
15450 6e 61 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 6f  name component o
15460 66 20 55 52 49 20 2a 2f 0a 20 20 63 68 61 72 20  f URI */.  char 
15470 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20 20 20  **pzErrMsg      
15480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
15490 54 3a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  T: Error message
154a0 20 28 69 66 20 72 63 21 3d 53 51 4c 49 54 45 5f   (if rc!=SQLITE_
154b0 4f 4b 29 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  OK) */.){.  int 
154c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
154d0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 66    unsigned int f
154e0 6c 61 67 73 20 3d 20 2a 70 46 6c 61 67 73 3b 0a  lags = *pFlags;.
154f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56    const char *zV
15500 66 73 20 3d 20 7a 44 65 66 61 75 6c 74 56 66 73  fs = zDefaultVfs
15510 3b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b  ;.  char *zFile;
15520 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 69 6e 74  .  char c;.  int
15530 20 6e 55 72 69 20 3d 20 73 71 6c 69 74 65 33 53   nUri = sqlite3S
15540 74 72 6c 65 6e 33 30 28 7a 55 72 69 29 3b 0a 0a  trlen30(zUri);..
15550 20 20 61 73 73 65 72 74 28 20 2a 70 7a 45 72 72    assert( *pzErr
15560 4d 73 67 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  Msg==0 );..  if(
15570 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 49 54   ((flags & SQLIT
15580 45 5f 4f 50 45 4e 5f 55 52 49 29 20 20 20 20 20  E_OPEN_URI)     
15590 20 20 20 20 20 20 20 20 2f 2a 20 49 4d 50 3a 20          /* IMP: 
155a0 52 2d 34 38 37 32 35 2d 33 32 32 30 36 20 2a 2f  R-48725-32206 */
155b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
155c0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
155d0 66 69 67 2e 62 4f 70 65 6e 55 72 69 29 20 2f 2a  fig.bOpenUri) /*
155e0 20 49 4d 50 3a 20 52 2d 35 31 36 38 39 2d 34 36   IMP: R-51689-46
155f0 35 34 38 20 2a 2f 0a 20 20 20 26 26 20 6e 55 72  548 */.   && nUr
15600 69 3e 3d 35 20 26 26 20 6d 65 6d 63 6d 70 28 7a  i>=5 && memcmp(z
15610 55 72 69 2c 20 22 66 69 6c 65 3a 22 2c 20 35 29  Uri, "file:", 5)
15620 3d 3d 30 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 37  ==0 /* IMP: R-57
15630 38 38 34 2d 33 37 34 39 36 20 2a 2f 0a 20 20 29  884-37496 */.  )
15640 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4f 70 74  {.    char *zOpt
15650 3b 0a 20 20 20 20 69 6e 74 20 65 53 74 61 74 65  ;.    int eState
15660 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15670 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 73 74      /* Parser st
15680 61 74 65 20 77 68 65 6e 20 70 61 72 73 69 6e 67  ate when parsing
15690 20 55 52 49 20 2a 2f 0a 20 20 20 20 69 6e 74 20   URI */.    int 
156a0 69 49 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  iIn;            
156b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 70            /* Inp
156c0 75 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 64  ut character ind
156d0 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4f  ex */.    int iO
156e0 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
156f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
15700 74 20 63 68 61 72 61 63 74 65 72 20 69 6e 64 65  t character inde
15710 78 20 2a 2f 0a 20 20 20 20 75 36 34 20 6e 42 79  x */.    u64 nBy
15720 74 65 20 3d 20 6e 55 72 69 2b 32 3b 20 20 20 20  te = nUri+2;    
15730 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
15740 6f 66 20 73 70 61 63 65 20 74 6f 20 61 6c 6c 6f  of space to allo
15750 63 61 74 65 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  cate */..    /* 
15760 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 53 51  Make sure the SQ
15770 4c 49 54 45 5f 4f 50 45 4e 5f 55 52 49 20 66 6c  LITE_OPEN_URI fl
15780 61 67 20 69 73 20 73 65 74 20 74 6f 20 69 6e 64  ag is set to ind
15790 69 63 61 74 65 20 74 6f 20 74 68 65 20 56 46 53  icate to the VFS
157a0 20 78 4f 70 65 6e 20 0a 20 20 20 20 2a 2a 20 6d   xOpen .    ** m
157b0 65 74 68 6f 64 20 74 68 61 74 20 74 68 65 72 65  ethod that there
157c0 20 6d 61 79 20 62 65 20 65 78 74 72 61 20 70 61   may be extra pa
157d0 72 61 6d 65 74 65 72 73 20 66 6f 6c 6c 6f 77 69  rameters followi
157e0 6e 67 20 74 68 65 20 66 69 6c 65 2d 6e 61 6d 65  ng the file-name
157f0 2e 20 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  .  */.    flags 
15800 7c 3d 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 55  |= SQLITE_OPEN_U
15810 52 49 3b 0a 0a 20 20 20 20 66 6f 72 28 69 49 6e  RI;..    for(iIn
15820 3d 30 3b 20 69 49 6e 3c 6e 55 72 69 3b 20 69 49  =0; iIn<nUri; iI
15830 6e 2b 2b 29 20 6e 42 79 74 65 20 2b 3d 20 28 7a  n++) nByte += (z
15840 55 72 69 5b 69 49 6e 5d 3d 3d 27 26 27 29 3b 0a  Uri[iIn]=='&');.
15850 20 20 20 20 7a 46 69 6c 65 20 3d 20 73 71 6c 69      zFile = sqli
15860 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e 42 79  te3_malloc64(nBy
15870 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 46  te);.    if( !zF
15880 69 6c 65 20 29 20 72 65 74 75 72 6e 20 53 51 4c  ile ) return SQL
15890 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
158a0 0a 20 20 20 20 69 49 6e 20 3d 20 35 3b 0a 23 69  .    iIn = 5;.#i
158b0 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4c 4c 4f  fdef SQLITE_ALLO
158c0 57 5f 55 52 49 5f 41 55 54 48 4f 52 49 54 59 0a  W_URI_AUTHORITY.
158d0 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28      if( strncmp(
158e0 7a 55 72 69 2b 35 2c 20 22 2f 2f 2f 22 2c 20 33  zUri+5, "///", 3
158f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 49  )==0 ){.      iI
15900 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 2f 2a 20  n = 7;.      /* 
15910 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
15920 6e 64 69 74 69 6f 6e 20 63 61 75 73 65 73 20 55  ndition causes U
15930 52 49 73 20 77 69 74 68 20 66 69 76 65 20 6c 65  RIs with five le
15940 61 64 69 6e 67 20 2f 20 63 68 61 72 61 63 74 65  ading / characte
15950 72 73 0a 20 20 20 20 20 20 2a 2a 20 6c 69 6b 65  rs.      ** like
15960 20 66 69 6c 65 3a 2f 2f 2f 2f 2f 68 6f 73 74 2f   file://///host/
15970 70 61 74 68 20 74 6f 20 62 65 20 63 6f 6e 76 65  path to be conve
15980 72 74 65 64 20 69 6e 74 6f 20 55 4e 43 73 20 6c  rted into UNCs l
15990 69 6b 65 20 2f 2f 68 6f 73 74 2f 70 61 74 68 2e  ike //host/path.
159a0 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 63 6f  .      ** The co
159b0 72 72 65 63 74 20 55 52 49 20 66 6f 72 20 74 68  rrect URI for th
159c0 61 74 20 55 4e 43 20 68 61 73 20 6f 6e 6c 79 20  at UNC has only 
159d0 74 77 6f 20 6f 72 20 66 6f 75 72 20 6c 65 61 64  two or four lead
159e0 69 6e 67 20 2f 20 63 68 61 72 61 63 74 65 72 73  ing / characters
159f0 0a 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 3a 2f  .      ** file:/
15a00 2f 68 6f 73 74 2f 70 61 74 68 20 6f 72 20 66 69  /host/path or fi
15a10 6c 65 3a 2f 2f 2f 2f 68 6f 73 74 2f 70 61 74 68  le:////host/path
15a20 2e 20 20 42 75 74 20 35 20 6c 65 61 64 69 6e 67  .  But 5 leading
15a30 20 73 6c 61 73 68 65 73 20 69 73 20 61 20 0a 20   slashes is a . 
15a40 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 6f 6e 20 65       ** common e
15a50 72 72 6f 72 2c 20 77 65 20 61 72 65 20 74 6f 6c  rror, we are tol
15a60 64 2c 20 73 6f 20 77 65 20 68 61 6e 64 6c 65 20  d, so we handle 
15a70 69 74 20 61 73 20 61 20 73 70 65 63 69 61 6c 20  it as a special 
15a80 63 61 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 69  case. */.      i
15a90 66 28 20 73 74 72 6e 63 6d 70 28 7a 55 72 69 2b  f( strncmp(zUri+
15aa0 37 2c 20 22 2f 2f 2f 22 2c 20 33 29 3d 3d 30 20  7, "///", 3)==0 
15ab0 29 7b 20 69 49 6e 2b 2b 3b 20 7d 0a 20 20 20 20  ){ iIn++; }.    
15ac0 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63 6d  }else if( strncm
15ad0 70 28 7a 55 72 69 2b 35 2c 20 22 2f 2f 6c 6f 63  p(zUri+5, "//loc
15ae0 61 6c 68 6f 73 74 2f 22 2c 20 31 32 29 3d 3d 30  alhost/", 12)==0
15af0 20 29 7b 0a 20 20 20 20 20 20 69 49 6e 20 3d 20   ){.      iIn = 
15b00 31 36 3b 0a 20 20 20 20 7d 0a 23 65 6c 73 65 0a  16;.    }.#else.
15b10 20 20 20 20 2f 2a 20 44 69 73 63 61 72 64 20 74      /* Discard t
15b20 68 65 20 73 63 68 65 6d 65 20 61 6e 64 20 61 75  he scheme and au
15b30 74 68 6f 72 69 74 79 20 73 65 67 6d 65 6e 74 73  thority segments
15b40 20 6f 66 20 74 68 65 20 55 52 49 2e 20 2a 2f 0a   of the URI. */.
15b50 20 20 20 20 69 66 28 20 7a 55 72 69 5b 35 5d 3d      if( zUri[5]=
15b60 3d 27 2f 27 20 26 26 20 7a 55 72 69 5b 36 5d 3d  ='/' && zUri[6]=
15b70 3d 27 2f 27 20 29 7b 0a 20 20 20 20 20 20 69 49  ='/' ){.      iI
15b80 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 77 68 69  n = 7;.      whi
15b90 6c 65 28 20 7a 55 72 69 5b 69 49 6e 5d 20 26 26  le( zUri[iIn] &&
15ba0 20 7a 55 72 69 5b 69 49 6e 5d 21 3d 27 2f 27 20   zUri[iIn]!='/' 
15bb0 29 20 69 49 6e 2b 2b 3b 0a 20 20 20 20 20 20 69  ) iIn++;.      i
15bc0 66 28 20 69 49 6e 21 3d 37 20 26 26 20 28 69 49  f( iIn!=7 && (iI
15bd0 6e 21 3d 31 36 20 7c 7c 20 6d 65 6d 63 6d 70 28  n!=16 || memcmp(
15be0 22 6c 6f 63 61 6c 68 6f 73 74 22 2c 20 26 7a 55  "localhost", &zU
15bf0 72 69 5b 37 5d 2c 20 39 29 29 20 29 7b 0a 20 20  ri[7], 9)) ){.  
15c00 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20        *pzErrMsg 
15c10 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
15c20 66 28 22 69 6e 76 61 6c 69 64 20 75 72 69 20 61  f("invalid uri a
15c30 75 74 68 6f 72 69 74 79 3a 20 25 2e 2a 73 22 2c  uthority: %.*s",
15c40 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 49   .            iI
15c50 6e 2d 37 2c 20 26 7a 55 72 69 5b 37 5d 29 3b 0a  n-7, &zUri[7]);.
15c60 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
15c70 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
15c80 20 20 20 67 6f 74 6f 20 70 61 72 73 65 5f 75 72     goto parse_ur
15c90 69 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  i_out;.      }. 
15ca0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
15cb0 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 66 69 6c   /* Copy the fil
15cc0 65 6e 61 6d 65 20 61 6e 64 20 61 6e 79 20 71 75  ename and any qu
15cd0 65 72 79 20 70 61 72 61 6d 65 74 65 72 73 20 69  ery parameters i
15ce0 6e 74 6f 20 74 68 65 20 7a 46 69 6c 65 20 62 75  nto the zFile bu
15cf0 66 66 65 72 2e 20 0a 20 20 20 20 2a 2a 20 44 65  ffer. .    ** De
15d00 63 6f 64 65 20 25 48 48 20 65 73 63 61 70 65 20  code %HH escape 
15d10 63 6f 64 65 73 20 61 6c 6f 6e 67 20 74 68 65 20  codes along the 
15d20 77 61 79 2e 20 0a 20 20 20 20 2a 2a 0a 20 20 20  way. .    **.   
15d30 20 2a 2a 20 57 69 74 68 69 6e 20 74 68 69 73 20   ** Within this 
15d40 6c 6f 6f 70 2c 20 76 61 72 69 61 62 6c 65 20 65  loop, variable e
15d50 53 74 61 74 65 20 6d 61 79 20 62 65 20 73 65 74  State may be set
15d60 20 74 6f 20 30 2c 20 31 20 6f 72 20 32 2c 20 64   to 0, 1 or 2, d
15d70 65 70 65 6e 64 69 6e 67 0a 20 20 20 20 2a 2a 20  epending.    ** 
15d80 6f 6e 20 74 68 65 20 70 61 72 73 69 6e 67 20 63  on the parsing c
15d90 6f 6e 74 65 78 74 2e 20 41 73 20 66 6f 6c 6c 6f  ontext. As follo
15da0 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ws:.    **.    *
15db0 2a 20 20 20 30 3a 20 50 61 72 73 69 6e 67 20 66  *   0: Parsing f
15dc0 69 6c 65 2d 6e 61 6d 65 2e 0a 20 20 20 20 2a 2a  ile-name..    **
15dd0 20 20 20 31 3a 20 50 61 72 73 69 6e 67 20 6e 61     1: Parsing na
15de0 6d 65 20 73 65 63 74 69 6f 6e 20 6f 66 20 61 20  me section of a 
15df0 6e 61 6d 65 3d 76 61 6c 75 65 20 71 75 65 72 79  name=value query
15e00 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 20 20   parameter..    
15e10 2a 2a 20 20 20 32 3a 20 50 61 72 73 69 6e 67 20  **   2: Parsing 
15e20 76 61 6c 75 65 20 73 65 63 74 69 6f 6e 20 6f 66  value section of
15e30 20 61 20 6e 61 6d 65 3d 76 61 6c 75 65 20 71 75   a name=value qu
15e40 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a 20  ery parameter.. 
15e50 20 20 20 2a 2f 0a 20 20 20 20 65 53 74 61 74 65     */.    eState
15e60 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65 28   = 0;.    while(
15e70 20 28 63 20 3d 20 7a 55 72 69 5b 69 49 6e 5d 29   (c = zUri[iIn])
15e80 21 3d 30 20 26 26 20 63 21 3d 27 23 27 20 29 7b  !=0 && c!='#' ){
15e90 0a 20 20 20 20 20 20 69 49 6e 2b 2b 3b 0a 20 20  .      iIn++;.  
15ea0 20 20 20 20 69 66 28 20 63 3d 3d 27 25 27 20 0a      if( c=='%' .
15eb0 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65         && sqlite
15ec0 33 49 73 78 64 69 67 69 74 28 7a 55 72 69 5b 69  3Isxdigit(zUri[i
15ed0 49 6e 5d 29 20 0a 20 20 20 20 20 20 20 26 26 20  In]) .       && 
15ee0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
15ef0 7a 55 72 69 5b 69 49 6e 2b 31 5d 29 20 0a 20 20  zUri[iIn+1]) .  
15f00 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15f10 6e 74 20 6f 63 74 65 74 20 3d 20 28 73 71 6c 69  nt octet = (sqli
15f20 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 55 72 69  te3HexToInt(zUri
15f30 5b 69 49 6e 2b 2b 5d 29 20 3c 3c 20 34 29 3b 0a  [iIn++]) << 4);.
15f40 20 20 20 20 20 20 20 20 6f 63 74 65 74 20 2b 3d          octet +=
15f50 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
15f60 28 7a 55 72 69 5b 69 49 6e 2b 2b 5d 29 3b 0a 0a  (zUri[iIn++]);..
15f70 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
15f80 6f 63 74 65 74 3e 3d 30 20 26 26 20 6f 63 74 65  octet>=0 && octe
15f90 74 3c 32 35 36 20 29 3b 0a 20 20 20 20 20 20 20  t<256 );.       
15fa0 20 69 66 28 20 6f 63 74 65 74 3d 3d 30 20 29 7b   if( octet==0 ){
15fb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
15fc0 45 4e 41 42 4c 45 5f 55 52 49 5f 30 30 5f 45 52  ENABLE_URI_00_ER
15fd0 52 4f 52 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  ROR.          /*
15fe0 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20   This branch is 
15ff0 74 61 6b 65 6e 20 77 68 65 6e 20 22 25 30 30 22  taken when "%00"
16000 20 61 70 70 65 61 72 73 20 77 69 74 68 69 6e 20   appears within 
16010 74 68 65 20 55 52 49 2e 20 49 6e 20 74 68 69 73  the URI. In this
16020 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 61  .          ** ca
16030 73 65 20 77 65 20 69 67 6e 6f 72 65 20 61 6c 6c  se we ignore all
16040 20 74 65 78 74 20 69 6e 20 74 68 65 20 72 65 6d   text in the rem
16050 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 70 61  ainder of the pa
16060 74 68 2c 20 6e 61 6d 65 20 6f 72 0a 20 20 20 20  th, name or.    
16070 20 20 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 63        ** value c
16080 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
16090 61 72 73 65 64 2e 20 53 6f 20 69 67 6e 6f 72 65  arsed. So ignore
160a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68 61   the current cha
160b0 72 61 63 74 65 72 0a 20 20 20 20 20 20 20 20 20  racter.         
160c0 20 2a 2a 20 61 6e 64 20 73 6b 69 70 20 74 6f 20   ** and skip to 
160d0 74 68 65 20 6e 65 78 74 20 22 3f 22 2c 20 22 3d  the next "?", "=
160e0 22 20 6f 72 20 22 26 22 2c 20 61 73 20 61 70 70  " or "&", as app
160f0 72 6f 70 72 69 61 74 65 2e 20 2a 2f 0a 20 20 20  ropriate. */.   
16100 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 28 63         while( (c
16110 20 3d 20 7a 55 72 69 5b 69 49 6e 5d 29 21 3d 30   = zUri[iIn])!=0
16120 20 26 26 20 63 21 3d 27 23 27 20 0a 20 20 20 20   && c!='#' .    
16130 20 20 20 20 20 20 20 20 20 20 26 26 20 28 65 53            && (eS
16140 74 61 74 65 21 3d 30 20 7c 7c 20 63 21 3d 27 3f  tate!=0 || c!='?
16150 27 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ').             
16160 20 26 26 20 28 65 53 74 61 74 65 21 3d 31 20 7c   && (eState!=1 |
16170 7c 20 28 63 21 3d 27 3d 27 20 26 26 20 63 21 3d  | (c!='=' && c!=
16180 27 26 27 29 29 0a 20 20 20 20 20 20 20 20 20 20  '&')).          
16190 20 20 20 20 26 26 20 28 65 53 74 61 74 65 21 3d      && (eState!=
161a0 32 20 7c 7c 20 63 21 3d 27 26 27 29 0a 20 20 20  2 || c!='&').   
161b0 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20         ){.      
161c0 20 20 20 20 20 20 69 49 6e 2b 2b 3b 0a 20 20 20        iIn++;.   
161d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
161e0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 23 65 6c     continue;.#el
161f0 73 65 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se.          /* 
16200 49 66 20 45 4e 41 42 4c 45 5f 55 52 49 5f 30 30  If ENABLE_URI_00
16210 5f 45 52 52 4f 52 20 69 73 20 64 65 66 69 6e 65  _ERROR is define
16220 64 2c 20 22 25 30 30 22 20 69 6e 20 61 20 55 52  d, "%00" in a UR
16230 49 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 2a  I is an error. *
16240 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 70 7a 45  /.          *pzE
16250 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 5f  rrMsg = sqlite3_
16260 6d 70 72 69 6e 74 66 28 22 75 6e 65 78 70 65 63  mprintf("unexpec
16270 74 65 64 20 25 25 30 30 20 69 6e 20 75 72 69 22  ted %%00 in uri"
16280 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  );.          rc 
16290 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
162a0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
162b0 61 72 73 65 5f 75 72 69 5f 6f 75 74 3b 0a 23 65  arse_uri_out;.#e
162c0 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d 0a 20  ndif.        }. 
162d0 20 20 20 20 20 20 20 63 20 3d 20 6f 63 74 65 74         c = octet
162e0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
162f0 28 20 65 53 74 61 74 65 3d 3d 31 20 26 26 20 28  ( eState==1 && (
16300 63 3d 3d 27 26 27 20 7c 7c 20 63 3d 3d 27 3d 27  c=='&' || c=='='
16310 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ) ){.        if(
16320 20 7a 46 69 6c 65 5b 69 4f 75 74 2d 31 5d 3d 3d   zFile[iOut-1]==
16330 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  0 ){.          /
16340 2a 20 41 6e 20 65 6d 70 74 79 20 6f 70 74 69 6f  * An empty optio
16350 6e 20 6e 61 6d 65 2e 20 49 67 6e 6f 72 65 20 74  n name. Ignore t
16360 68 69 73 20 6f 70 74 69 6f 6e 20 61 6c 74 6f 67  his option altog
16370 65 74 68 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  ether. */.      
16380 20 20 20 20 77 68 69 6c 65 28 20 7a 55 72 69 5b      while( zUri[
16390 69 49 6e 5d 20 26 26 20 7a 55 72 69 5b 69 49 6e  iIn] && zUri[iIn
163a0 5d 21 3d 27 23 27 20 26 26 20 7a 55 72 69 5b 69  ]!='#' && zUri[i
163b0 49 6e 2d 31 5d 21 3d 27 26 27 20 29 20 69 49 6e  In-1]!='&' ) iIn
163c0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ++;.          co
163d0 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
163e0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 3d  }.        if( c=
163f0 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 20 20 20  ='&' ){.        
16400 20 20 7a 46 69 6c 65 5b 69 4f 75 74 2b 2b 5d 20    zFile[iOut++] 
16410 3d 20 27 5c 30 27 3b 0a 20 20 20 20 20 20 20 20  = '\0';.        
16420 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
16430 20 65 53 74 61 74 65 20 3d 20 32 3b 0a 20 20 20   eState = 2;.   
16440 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63       }.        c
16450 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
16460 65 20 69 66 28 20 28 65 53 74 61 74 65 3d 3d 30  e if( (eState==0
16470 20 26 26 20 63 3d 3d 27 3f 27 29 20 7c 7c 20 28   && c=='?') || (
16480 65 53 74 61 74 65 3d 3d 32 20 26 26 20 63 3d 3d  eState==2 && c==
16490 27 26 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20  '&') ){.        
164a0 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 65  c = 0;.        e
164b0 53 74 61 74 65 20 3d 20 31 3b 0a 20 20 20 20 20  State = 1;.     
164c0 20 7d 0a 20 20 20 20 20 20 7a 46 69 6c 65 5b 69   }.      zFile[i
164d0 4f 75 74 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  Out++] = c;.    
164e0 7d 0a 20 20 20 20 69 66 28 20 65 53 74 61 74 65  }.    if( eState
164f0 3d 3d 31 20 29 20 7a 46 69 6c 65 5b 69 4f 75 74  ==1 ) zFile[iOut
16500 2b 2b 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20  ++] = '\0';.    
16510 7a 46 69 6c 65 5b 69 4f 75 74 2b 2b 5d 20 3d 20  zFile[iOut++] = 
16520 27 5c 30 27 3b 0a 20 20 20 20 7a 46 69 6c 65 5b  '\0';.    zFile[
16530 69 4f 75 74 2b 2b 5d 20 3d 20 27 5c 30 27 3b 0a  iOut++] = '\0';.
16540 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 69 66  .    /* Check if
16550 20 74 68 65 72 65 20 77 65 72 65 20 61 6e 79 20   there were any 
16560 6f 70 74 69 6f 6e 73 20 73 70 65 63 69 66 69 65  options specifie
16570 64 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  d that should be
16580 20 69 6e 74 65 72 70 72 65 74 65 64 20 0a 20 20   interpreted .  
16590 20 20 2a 2a 20 68 65 72 65 2e 20 4f 70 74 69 6f    ** here. Optio
165a0 6e 73 20 74 68 61 74 20 61 72 65 20 69 6e 74 65  ns that are inte
165b0 72 70 72 65 74 65 64 20 68 65 72 65 20 69 6e 63  rpreted here inc
165c0 6c 75 64 65 20 22 76 66 73 22 20 61 6e 64 20 74  lude "vfs" and t
165d0 68 6f 73 65 20 74 68 61 74 0a 20 20 20 20 2a 2a  hose that.    **
165e0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 66   correspond to f
165f0 6c 61 67 73 20 74 68 61 74 20 6d 61 79 20 62 65  lags that may be
16600 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
16610 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29  qlite3_open_v2()
16620 0a 20 20 20 20 2a 2a 20 6d 65 74 68 6f 64 2e 20  .    ** method. 
16630 2a 2f 0a 20 20 20 20 7a 4f 70 74 20 3d 20 26 7a  */.    zOpt = &z
16640 46 69 6c 65 5b 73 71 6c 69 74 65 33 53 74 72 6c  File[sqlite3Strl
16650 65 6e 33 30 28 7a 46 69 6c 65 29 2b 31 5d 3b 0a  en30(zFile)+1];.
16660 20 20 20 20 77 68 69 6c 65 28 20 7a 4f 70 74 5b      while( zOpt[
16670 30 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  0] ){.      int 
16680 6e 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 53 74  nOpt = sqlite3St
16690 72 6c 65 6e 33 30 28 7a 4f 70 74 29 3b 0a 20 20  rlen30(zOpt);.  
166a0 20 20 20 20 63 68 61 72 20 2a 7a 56 61 6c 20 3d      char *zVal =
166b0 20 26 7a 4f 70 74 5b 6e 4f 70 74 2b 31 5d 3b 0a   &zOpt[nOpt+1];.
166c0 20 20 20 20 20 20 69 6e 74 20 6e 56 61 6c 20 3d        int nVal =
166d0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
166e0 28 7a 56 61 6c 29 3b 0a 0a 20 20 20 20 20 20 69  (zVal);..      i
166f0 66 28 20 6e 4f 70 74 3d 3d 33 20 26 26 20 6d 65  f( nOpt==3 && me
16700 6d 63 6d 70 28 22 76 66 73 22 2c 20 7a 4f 70 74  mcmp("vfs", zOpt
16710 2c 20 33 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 3)==0 ){.     
16720 20 20 20 7a 56 66 73 20 3d 20 7a 56 61 6c 3b 0a     zVfs = zVal;.
16730 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16740 20 20 20 20 20 73 74 72 75 63 74 20 4f 70 65 6e       struct Open
16750 4d 6f 64 65 20 7b 0a 20 20 20 20 20 20 20 20 20  Mode {.         
16760 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a   const char *z;.
16770 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d 6f            int mo
16780 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 20 2a 61  de;.        } *a
16790 4d 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  Mode = 0;.      
167a0 20 20 63 68 61 72 20 2a 7a 4d 6f 64 65 54 79 70    char *zModeTyp
167b0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  e = 0;.        i
167c0 6e 74 20 6d 61 73 6b 20 3d 20 30 3b 0a 20 20 20  nt mask = 0;.   
167d0 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74 20 3d       int limit =
167e0 20 30 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28   0;..        if(
167f0 20 6e 4f 70 74 3d 3d 35 20 26 26 20 6d 65 6d 63   nOpt==5 && memc
16800 6d 70 28 22 63 61 63 68 65 22 2c 20 7a 4f 70 74  mp("cache", zOpt
16810 2c 20 35 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  , 5)==0 ){.     
16820 20 20 20 20 20 73 74 61 74 69 63 20 73 74 72 75       static stru
16830 63 74 20 4f 70 65 6e 4d 6f 64 65 20 61 43 61 63  ct OpenMode aCac
16840 68 65 4d 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20  heMode[] = {.   
16850 20 20 20 20 20 20 20 20 20 7b 20 22 73 68 61 72           { "shar
16860 65 64 22 2c 20 20 53 51 4c 49 54 45 5f 4f 50 45  ed",  SQLITE_OPE
16870 4e 5f 53 48 41 52 45 44 43 41 43 48 45 20 7d 2c  N_SHAREDCACHE },
16880 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 22  .            { "
16890 70 72 69 76 61 74 65 22 2c 20 53 51 4c 49 54 45  private", SQLITE
168a0 5f 4f 50 45 4e 5f 50 52 49 56 41 54 45 43 41 43  _OPEN_PRIVATECAC
168b0 48 45 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  HE },.          
168c0 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 20    { 0, 0 }.     
168d0 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 20       };..       
168e0 20 20 20 6d 61 73 6b 20 3d 20 53 51 4c 49 54 45     mask = SQLITE
168f0 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41 43 48  _OPEN_SHAREDCACH
16900 45 7c 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 50 52  E|SQLITE_OPEN_PR
16910 49 56 41 54 45 43 41 43 48 45 3b 0a 20 20 20 20  IVATECACHE;.    
16920 20 20 20 20 20 20 61 4d 6f 64 65 20 3d 20 61 43        aMode = aC
16930 61 63 68 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20  acheMode;.      
16940 20 20 20 20 6c 69 6d 69 74 20 3d 20 6d 61 73 6b      limit = mask
16950 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 4d 6f 64  ;.          zMod
16960 65 54 79 70 65 20 3d 20 22 63 61 63 68 65 22 3b  eType = "cache";
16970 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16980 20 20 20 69 66 28 20 6e 4f 70 74 3d 3d 34 20 26     if( nOpt==4 &
16990 26 20 6d 65 6d 63 6d 70 28 22 6d 6f 64 65 22 2c  & memcmp("mode",
169a0 20 7a 4f 70 74 2c 20 34 29 3d 3d 30 20 29 7b 0a   zOpt, 4)==0 ){.
169b0 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63            static
169c0 20 73 74 72 75 63 74 20 4f 70 65 6e 4d 6f 64 65   struct OpenMode
169d0 20 61 4f 70 65 6e 4d 6f 64 65 5b 5d 20 3d 20 7b   aOpenMode[] = {
169e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 22  .            { "
169f0 72 6f 22 2c 20 20 53 51 4c 49 54 45 5f 4f 50 45  ro",  SQLITE_OPE
16a00 4e 5f 52 45 41 44 4f 4e 4c 59 20 7d 2c 0a 20 20  N_READONLY },.  
16a10 20 20 20 20 20 20 20 20 20 20 7b 20 22 72 77 22            { "rw"
16a20 2c 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52  ,  SQLITE_OPEN_R
16a30 45 41 44 57 52 49 54 45 20 7d 2c 20 0a 20 20 20  EADWRITE }, .   
16a40 20 20 20 20 20 20 20 20 20 7b 20 22 72 77 63 22           { "rwc"
16a50 2c 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45  , SQLITE_OPEN_RE
16a60 41 44 57 52 49 54 45 20 7c 20 53 51 4c 49 54 45  ADWRITE | SQLITE
16a70 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7d 2c 0a  _OPEN_CREATE },.
16a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 22 6d              { "m
16a90 65 6d 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 4f  emory", SQLITE_O
16aa0 50 45 4e 5f 4d 45 4d 4f 52 59 20 7d 2c 0a 20 20  PEN_MEMORY },.  
16ab0 20 20 20 20 20 20 20 20 20 20 7b 20 30 2c 20 30            { 0, 0
16ac0 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a   }.          };.
16ad0 0a 20 20 20 20 20 20 20 20 20 20 6d 61 73 6b 20  .          mask 
16ae0 3d 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45  = SQLITE_OPEN_RE
16af0 41 44 4f 4e 4c 59 20 7c 20 53 51 4c 49 54 45 5f  ADONLY | SQLITE_
16b00 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 0a 20  OPEN_READWRITE. 
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f    | SQLITE_OPEN_
16b30 43 52 45 41 54 45 20 7c 20 53 51 4c 49 54 45 5f  CREATE | SQLITE_
16b40 4f 50 45 4e 5f 4d 45 4d 4f 52 59 3b 0a 20 20 20  OPEN_MEMORY;.   
16b50 20 20 20 20 20 20 20 61 4d 6f 64 65 20 3d 20 61         aMode = a
16b60 4f 70 65 6e 4d 6f 64 65 3b 0a 20 20 20 20 20 20  OpenMode;.      
16b70 20 20 20 20 6c 69 6d 69 74 20 3d 20 6d 61 73 6b      limit = mask
16b80 20 26 20 66 6c 61 67 73 3b 0a 20 20 20 20 20 20   & flags;.      
16b90 20 20 20 20 7a 4d 6f 64 65 54 79 70 65 20 3d 20      zModeType = 
16ba0 22 61 63 63 65 73 73 22 3b 0a 20 20 20 20 20 20  "access";.      
16bb0 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69 66 28    }..        if(
16bc0 20 61 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20   aMode ){.      
16bd0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
16be0 20 20 20 20 20 69 6e 74 20 6d 6f 64 65 20 3d 20       int mode = 
16bf0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
16c00 28 69 3d 30 3b 20 61 4d 6f 64 65 5b 69 5d 2e 7a  (i=0; aMode[i].z
16c10 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
16c20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
16c30 7a 20 3d 20 61 4d 6f 64 65 5b 69 5d 2e 7a 3b 0a  z = aMode[i].z;.
16c40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
16c50 6e 56 61 6c 3d 3d 73 71 6c 69 74 65 33 53 74 72  nVal==sqlite3Str
16c60 6c 65 6e 33 30 28 7a 29 20 26 26 20 30 3d 3d 6d  len30(z) && 0==m
16c70 65 6d 63 6d 70 28 7a 56 61 6c 2c 20 7a 2c 20 6e  emcmp(zVal, z, n
16c80 56 61 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Val) ){.        
16c90 20 20 20 20 20 20 6d 6f 64 65 20 3d 20 61 4d 6f        mode = aMo
16ca0 64 65 5b 69 5d 2e 6d 6f 64 65 3b 0a 20 20 20 20  de[i].mode;.    
16cb0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
16cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
16cd0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16ce0 20 20 20 20 20 69 66 28 20 6d 6f 64 65 3d 3d 30       if( mode==0
16cf0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
16d00 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  *pzErrMsg = sqli
16d10 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6e 6f 20  te3_mprintf("no 
16d20 73 75 63 68 20 25 73 20 6d 6f 64 65 3a 20 25 73  such %s mode: %s
16d30 22 2c 20 7a 4d 6f 64 65 54 79 70 65 2c 20 7a 56  ", zModeType, zV
16d40 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  al);.           
16d50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16d60 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  OR;.            
16d70 67 6f 74 6f 20 70 61 72 73 65 5f 75 72 69 5f 6f  goto parse_uri_o
16d80 75 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ut;.          }.
16d90 20 20 20 20 20 20 20 20 20 20 69 66 28 20 28 6d            if( (m
16da0 6f 64 65 20 26 20 7e 53 51 4c 49 54 45 5f 4f 50  ode & ~SQLITE_OP
16db0 45 4e 5f 4d 45 4d 4f 52 59 29 3e 6c 69 6d 69 74  EN_MEMORY)>limit
16dc0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
16dd0 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  *pzErrMsg = sqli
16de0 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 20  te3_mprintf("%s 
16df0 6d 6f 64 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  mode not allowed
16e00 3a 20 25 73 22 2c 0a 20 20 20 20 20 20 20 20 20  : %s",.         
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
16e30 4d 6f 64 65 54 79 70 65 2c 20 7a 56 61 6c 29 3b  ModeType, zVal);
16e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
16e50 3d 20 53 51 4c 49 54 45 5f 50 45 52 4d 3b 0a 20  = SQLITE_PERM;. 
16e60 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
16e70 70 61 72 73 65 5f 75 72 69 5f 6f 75 74 3b 0a 20  parse_uri_out;. 
16e80 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16e90 20 20 20 20 20 66 6c 61 67 73 20 3d 20 28 66 6c       flags = (fl
16ea0 61 67 73 20 26 20 7e 6d 61 73 6b 29 20 7c 20 6d  ags & ~mask) | m
16eb0 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ode;.        }. 
16ec0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 7a 4f       }..      zO
16ed0 70 74 20 3d 20 26 7a 56 61 6c 5b 6e 56 61 6c 2b  pt = &zVal[nVal+
16ee0 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d 65 6c  1];.    }..  }el
16ef0 73 65 7b 0a 20 20 20 20 7a 46 69 6c 65 20 3d 20  se{.    zFile = 
16f00 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34  sqlite3_malloc64
16f10 28 6e 55 72 69 2b 32 29 3b 0a 20 20 20 20 69 66  (nUri+2);.    if
16f20 28 20 21 7a 46 69 6c 65 20 29 20 72 65 74 75 72  ( !zFile ) retur
16f30 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  n SQLITE_NOMEM_B
16f40 4b 50 54 3b 0a 20 20 20 20 69 66 28 20 6e 55 72  KPT;.    if( nUr
16f50 69 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70  i ){.      memcp
16f60 79 28 7a 46 69 6c 65 2c 20 7a 55 72 69 2c 20 6e  y(zFile, zUri, n
16f70 55 72 69 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Uri);.    }.    
16f80 7a 46 69 6c 65 5b 6e 55 72 69 5d 20 3d 20 27 5c  zFile[nUri] = '\
16f90 30 27 3b 0a 20 20 20 20 7a 46 69 6c 65 5b 6e 55  0';.    zFile[nU
16fa0 72 69 2b 31 5d 20 3d 20 27 5c 30 27 3b 0a 20 20  ri+1] = '\0';.  
16fb0 20 20 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49    flags &= ~SQLI
16fc0 54 45 5f 4f 50 45 4e 5f 55 52 49 3b 0a 20 20 7d  TE_OPEN_URI;.  }
16fd0 0a 0a 20 20 2a 70 70 56 66 73 20 3d 20 73 71 6c  ..  *ppVfs = sql
16fe0 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 7a 56  ite3_vfs_find(zV
16ff0 66 73 29 3b 0a 20 20 69 66 28 20 2a 70 70 56 66  fs);.  if( *ppVf
17000 73 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 70 7a 45  s==0 ){.    *pzE
17010 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 5f  rrMsg = sqlite3_
17020 6d 70 72 69 6e 74 66 28 22 6e 6f 20 73 75 63 68  mprintf("no such
17030 20 76 66 73 3a 20 25 73 22 2c 20 7a 56 66 73 29   vfs: %s", zVfs)
17040 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17050 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 70 61  E_ERROR;.  }. pa
17060 72 73 65 5f 75 72 69 5f 6f 75 74 3a 0a 20 20 69  rse_uri_out:.  i
17070 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17080 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
17090 66 72 65 65 28 7a 46 69 6c 65 29 3b 0a 20 20 20  free(zFile);.   
170a0 20 7a 46 69 6c 65 20 3d 20 30 3b 0a 20 20 7d 0a   zFile = 0;.  }.
170b0 20 20 2a 70 46 6c 61 67 73 20 3d 20 66 6c 61 67    *pFlags = flag
170c0 73 3b 0a 20 20 2a 70 7a 46 69 6c 65 20 3d 20 7a  s;.  *pzFile = z
170d0 46 69 6c 65 3b 0a 20 20 72 65 74 75 72 6e 20 72  File;.  return r
170e0 63 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  c;.}..#if define
170f0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
17100 41 55 54 4f 5f 50 52 4f 46 49 4c 45 29 0a 23 64  AUTO_PROFILE).#d
17110 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 55 54  efine SQLITE_AUT
17120 4f 4c 4f 47 47 49 4e 47 5f 53 54 44 45 52 52 20  OLOGGING_STDERR 
17130 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  1.#define SQLITE
17140 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 59 53  _AUTOLOGGING_SYS
17150 4c 4f 47 20 32 0a 73 74 61 74 69 63 20 76 6f 69  LOG 2.static voi
17160 64 20 65 6e 61 62 6c 65 41 75 74 6f 4c 6f 67 67  d enableAutoLogg
17170 69 6e 67 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ing(.  sqlite3 *
17180 64 62 0a 29 7b 0a 20 20 63 68 61 72 20 2a 65 6e  db.){.  char *en
17190 76 70 72 6f 66 69 6c 65 20 3d 20 67 65 74 65 6e  vprofile = geten
171a0 76 28 22 53 51 4c 49 54 45 5f 41 55 54 4f 5f 50  v("SQLITE_AUTO_P
171b0 52 4f 46 49 4c 45 22 29 3b 0a 20 20 0a 20 20 69  ROFILE");.  .  i
171c0 66 28 20 65 6e 76 70 72 6f 66 69 6c 65 21 3d 4e  f( envprofile!=N
171d0 55 4c 4c 20 29 7b 0a 20 20 20 20 69 6e 74 20 77  ULL ){.    int w
171e0 68 65 72 65 20 3d 20 30 3b 0a 20 20 20 20 69 66  here = 0;.    if
171f0 28 20 21 73 74 72 6e 63 61 73 65 63 6d 70 28 22  ( !strncasecmp("
17200 31 22 2c 20 65 6e 76 70 72 6f 66 69 6c 65 2c 20  1", envprofile, 
17210 31 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  1) ){.      if( 
17220 69 73 61 74 74 79 28 32 29 20 29 7b 0a 20 20 20  isatty(2) ){.   
17230 20 20 20 20 20 77 68 65 72 65 20 3d 20 53 51 4c       where = SQL
17240 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f  ITE_AUTOLOGGING_
17250 53 54 44 45 52 52 3b 0a 20 20 20 20 20 20 7d 65  STDERR;.      }e
17260 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68 65  lse{.        whe
17270 72 65 20 3d 20 53 51 4c 49 54 45 5f 41 55 54 4f  re = SQLITE_AUTO
17280 4c 4f 47 47 49 4e 47 5f 53 59 53 4c 4f 47 3b 0a  LOGGING_SYSLOG;.
17290 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c        }.    } el
172a0 73 65 20 69 66 28 20 21 73 74 72 6e 63 61 73 65  se if( !strncase
172b0 63 6d 70 28 22 73 74 64 65 72 72 22 2c 20 65 6e  cmp("stderr", en
172c0 76 70 72 6f 66 69 6c 65 2c 20 36 29 20 29 7b 0a  vprofile, 6) ){.
172d0 20 20 20 20 20 20 77 68 65 72 65 20 3d 20 53 51        where = SQ
172e0 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47  LITE_AUTOLOGGING
172f0 5f 53 54 44 45 52 52 3b 0a 20 20 20 20 7d 20 65  _STDERR;.    } e
17300 6c 73 65 20 69 66 28 20 21 73 74 72 6e 63 61 73  lse if( !strncas
17310 65 63 6d 70 28 22 73 79 73 6c 6f 67 22 2c 20 65  ecmp("syslog", e
17320 6e 76 70 72 6f 66 69 6c 65 2c 20 36 29 20 29 7b  nvprofile, 6) ){
17330 0a 20 20 20 20 20 20 77 68 65 72 65 20 3d 20 53  .      where = S
17340 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e  QLITE_AUTOLOGGIN
17350 47 5f 53 59 53 4c 4f 47 3b 0a 20 20 20 20 7d 0a  G_SYSLOG;.    }.
17360 20 20 20 20 69 66 28 20 77 68 65 72 65 3d 3d 53      if( where==S
17370 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e  QLITE_AUTOLOGGIN
17380 47 5f 53 54 44 45 52 52 20 29 7b 0a 20 20 20 20  G_STDERR ){.    
17390 20 20 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c    sqlite3_profil
173a0 65 28 64 62 2c 20 5f 73 71 6c 69 74 65 5f 61 75  e(db, _sqlite_au
173b0 74 6f 5f 70 72 6f 66 69 6c 65 2c 20 64 62 29 3b  to_profile, db);
173c0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 77  .    }else if( w
173d0 68 65 72 65 3d 3d 53 51 4c 49 54 45 5f 41 55 54  here==SQLITE_AUT
173e0 4f 4c 4f 47 47 49 4e 47 5f 53 59 53 4c 4f 47 20  OLOGGING_SYSLOG 
173f0 29 7b 0a 20 20 20 20 20 20 5f 6f 70 65 6e 5f 61  ){.      _open_a
17400 73 6c 5f 6c 6f 67 28 29 3b 0a 20 20 20 20 20 20  sl_log();.      
17410 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28  sqlite3_profile(
17420 64 62 2c 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f  db, _sqlite_auto
17430 5f 70 72 6f 66 69 6c 65 5f 73 79 73 6c 6f 67 2c  _profile_syslog,
17440 20 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   db);.    }.  }.
17450 20 20 63 68 61 72 20 2a 65 6e 76 74 72 61 63 65    char *envtrace
17460 20 3d 20 67 65 74 65 6e 76 28 22 53 51 4c 49 54   = getenv("SQLIT
17470 45 5f 41 55 54 4f 5f 54 52 41 43 45 22 29 3b 0a  E_AUTO_TRACE");.
17480 20 20 69 66 28 20 65 6e 76 74 72 61 63 65 21 3d    if( envtrace!=
17490 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 69 6e 74 20  NULL ){.    int 
174a0 77 68 65 72 65 20 3d 20 30 3b 0a 20 20 20 20 69  where = 0;.    i
174b0 66 28 20 21 73 74 72 6e 63 61 73 65 63 6d 70 28  f( !strncasecmp(
174c0 22 31 22 2c 20 65 6e 76 74 72 61 63 65 2c 20 31  "1", envtrace, 1
174d0 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 69  ) ){.      if( i
174e0 73 61 74 74 79 28 32 29 20 29 7b 0a 20 20 20 20  satty(2) ){.    
174f0 20 20 20 20 77 68 65 72 65 20 3d 20 53 51 4c 49      where = SQLI
17500 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53  TE_AUTOLOGGING_S
17510 54 44 45 52 52 3b 0a 20 20 20 20 20 20 7d 65 6c  TDERR;.      }el
17520 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68 65 72  se{.        wher
17530 65 20 3d 20 53 51 4c 49 54 45 5f 41 55 54 4f 4c  e = SQLITE_AUTOL
17540 4f 47 47 49 4e 47 5f 53 59 53 4c 4f 47 3b 0a 20  OGGING_SYSLOG;. 
17550 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73       }.    } els
17560 65 20 69 66 28 20 21 73 74 72 6e 63 61 73 65 63  e if( !strncasec
17570 6d 70 28 22 73 74 64 65 72 72 22 2c 20 65 6e 76  mp("stderr", env
17580 74 72 61 63 65 2c 20 36 29 20 29 7b 0a 20 20 20  trace, 6) ){.   
17590 20 20 20 77 68 65 72 65 20 3d 20 53 51 4c 49 54     where = SQLIT
175a0 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 54  E_AUTOLOGGING_ST
175b0 44 45 52 52 3b 0a 20 20 20 20 7d 20 65 6c 73 65  DERR;.    } else
175c0 20 69 66 28 20 21 73 74 72 6e 63 61 73 65 63 6d   if( !strncasecm
175d0 70 28 22 73 79 73 6c 6f 67 22 2c 20 65 6e 76 74  p("syslog", envt
175e0 72 61 63 65 2c 20 36 29 20 29 7b 0a 20 20 20 20  race, 6) ){.    
175f0 20 20 77 68 65 72 65 20 3d 20 53 51 4c 49 54 45    where = SQLITE
17600 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 59 53  _AUTOLOGGING_SYS
17610 4c 4f 47 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  LOG;.    }.    i
17620 66 28 20 77 68 65 72 65 3d 3d 53 51 4c 49 54 45  f( where==SQLITE
17630 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 54 44  _AUTOLOGGING_STD
17640 45 52 52 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ERR ){.      sql
17650 69 74 65 33 5f 74 72 61 63 65 28 64 62 2c 20 5f  ite3_trace(db, _
17660 73 71 6c 69 74 65 5f 61 75 74 6f 5f 74 72 61 63  sqlite_auto_trac
17670 65 2c 20 64 62 29 3b 0a 20 20 20 20 7d 65 6c 73  e, db);.    }els
17680 65 20 69 66 28 20 77 68 65 72 65 3d 3d 53 51 4c  e if( where==SQL
17690 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f  ITE_AUTOLOGGING_
176a0 53 59 53 4c 4f 47 20 29 7b 0a 20 20 20 20 20 20  SYSLOG ){.      
176b0 5f 6f 70 65 6e 5f 61 73 6c 5f 6c 6f 67 28 29 3b  _open_asl_log();
176c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74  .      sqlite3_t
176d0 72 61 63 65 28 64 62 2c 20 5f 73 71 6c 69 74 65  race(db, _sqlite
176e0 5f 61 75 74 6f 5f 74 72 61 63 65 5f 73 79 73 6c  _auto_trace_sysl
176f0 6f 67 2c 20 64 62 29 3b 0a 20 20 20 20 7d 0a 20  og, db);.    }. 
17700 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   }.}.#endif../*.
17710 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
17720 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66  does the work of
17730 20 6f 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62   opening a datab
17740 61 73 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66  ase on behalf of
17750 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  .** sqlite3_open
17760 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f  () and sqlite3_o
17770 70 65 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74  pen16(). The dat
17780 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22  abase filename "
17790 7a 46 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20  zFilename"  .** 
177a0 69 73 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  is UTF-8 encoded
177b0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
177c0 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20 20  openDatabase(.  
177d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
177e0 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62 61  ename, /* Databa
177f0 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46 2d  se filename UTF-
17800 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 73  8 encoded */.  s
17810 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20 20  qlite3 **ppDb,  
17820 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52 65        /* OUT: Re
17830 74 75 72 6e 65 64 20 64 61 74 61 62 61 73 65 20  turned database 
17840 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 75 6e 73 69  handle */.  unsi
17850 67 6e 65 64 20 69 6e 74 20 66 6c 61 67 73 2c 20  gned int flags, 
17860 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 61     /* Operationa
17870 6c 20 66 6c 61 67 73 20 2a 2f 0a 20 20 63 6f 6e  l flags */.  con
17880 73 74 20 63 68 61 72 20 2a 7a 56 66 73 20 20 20  st char *zVfs   
17890 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
178a0 68 65 20 56 46 53 20 74 6f 20 75 73 65 20 2a 2f  he VFS to use */
178b0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
178c0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
178d0 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 61        /* Store a
178e0 6c 6c 6f 63 61 74 65 64 20 68 61 6e 64 6c 65 20  llocated handle 
178f0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  here */.  int rc
17900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
17920 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  urn code */.  in
17930 74 20 69 73 54 68 72 65 61 64 73 61 66 65 3b 20  t isThreadsafe; 
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17950 20 54 72 75 65 20 66 6f 72 20 74 68 72 65 61 64   True for thread
17960 73 61 66 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  safe connections
17970 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4f 70 65   */.  char *zOpe
17980 6e 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  n = 0;          
17990 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 6e 61 6d        /* Filenam
179a0 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 70 61  e argument to pa
179b0 73 73 20 74 6f 20 42 74 72 65 65 4f 70 65 6e 28  ss to BtreeOpen(
179c0 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  ) */.  char *zEr
179d0 72 4d 73 67 20 3d 20 30 3b 20 20 20 20 20 20 20  rMsg = 0;       
179e0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
179f0 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 73 71 6c  message from sql
17a00 69 74 65 33 50 61 72 73 65 55 72 69 28 29 20 2a  ite3ParseUri() *
17a10 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  /..#ifdef SQLITE
17a20 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
17a30 52 0a 20 20 69 66 28 20 70 70 44 62 3d 3d 30 20  R.  if( ppDb==0 
17a40 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
17a50 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
17a60 64 69 66 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b  dif.  *ppDb = 0;
17a70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
17a80 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20  OMIT_AUTOINIT.  
17a90 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 69 6e 69  rc = sqlite3_ini
17aa0 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 69 66 28  tialize();.  if(
17ab0 20 72 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b   rc ) return rc;
17ac0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4f 6e  .#endif..  /* On
17ad0 6c 79 20 61 6c 6c 6f 77 20 73 65 6e 73 69 62 6c  ly allow sensibl
17ae0 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  e combinations o
17af0 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 66 6c  f bits in the fl
17b00 61 67 73 20 61 72 67 75 6d 65 6e 74 2e 20 20 0a  ags argument.  .
17b10 20 20 2a 2a 20 54 68 72 6f 77 20 61 6e 20 65 72    ** Throw an er
17b20 72 6f 72 20 69 66 20 61 6e 79 20 6e 6f 6e 2d 73  ror if any non-s
17b30 65 6e 73 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ense combination
17b40 20 69 73 20 75 73 65 64 2e 20 20 49 66 20 77 65   is used.  If we
17b50 0a 20 20 2a 2a 20 64 6f 20 6e 6f 74 20 62 6c 6f  .  ** do not blo
17b60 63 6b 20 69 6c 6c 65 67 61 6c 20 63 6f 6d 62 69  ck illegal combi
17b70 6e 61 74 69 6f 6e 73 20 68 65 72 65 2c 20 69 74  nations here, it
17b80 20 63 6f 75 6c 64 20 74 72 69 67 67 65 72 0a 20   could trigger. 
17b90 20 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61   ** assert() sta
17ba0 74 65 6d 65 6e 74 73 20 69 6e 20 64 65 65 70 65  tements in deepe
17bb0 72 20 6c 61 79 65 72 73 2e 20 20 53 65 6e 73 69  r layers.  Sensi
17bc0 62 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73  ble combinations
17bd0 0a 20 20 2a 2a 20 61 72 65 3a 0a 20 20 2a 2a 0a  .  ** are:.  **.
17be0 20 20 2a 2a 20 20 31 3a 20 20 53 51 4c 49 54 45    **  1:  SQLITE
17bf0 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 0a 20  _OPEN_READONLY. 
17c00 20 2a 2a 20 20 32 3a 20 20 53 51 4c 49 54 45 5f   **  2:  SQLITE_
17c10 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 0a 20  OPEN_READWRITE. 
17c20 20 2a 2a 20 20 36 3a 20 20 53 51 4c 49 54 45 5f   **  6:  SQLITE_
17c30 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
17c40 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
17c50 41 54 45 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ATE.  */.  asser
17c60 74 28 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52  t( SQLITE_OPEN_R
17c70 45 41 44 4f 4e 4c 59 20 20 3d 3d 20 30 78 30 31  EADONLY  == 0x01
17c80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51   );.  assert( SQ
17c90 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
17ca0 49 54 45 20 3d 3d 20 30 78 30 32 20 29 3b 0a 20  ITE == 0x02 );. 
17cb0 20 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f   assert( SQLITE_
17cc0 4f 50 45 4e 5f 43 52 45 41 54 45 20 20 20 20 3d  OPEN_CREATE    =
17cd0 3d 20 30 78 30 34 20 29 3b 0a 20 20 74 65 73 74  = 0x04 );.  test
17ce0 63 61 73 65 28 20 28 31 3c 3c 28 66 6c 61 67 73  case( (1<<(flags
17cf0 26 37 29 29 3d 3d 30 78 30 32 20 29 3b 20 2f 2a  &7))==0x02 ); /*
17d00 20 52 45 41 44 4f 4e 4c 59 20 2a 2f 0a 20 20 74   READONLY */.  t
17d10 65 73 74 63 61 73 65 28 20 28 31 3c 3c 28 66 6c  estcase( (1<<(fl
17d20 61 67 73 26 37 29 29 3d 3d 30 78 30 34 20 29 3b  ags&7))==0x04 );
17d30 20 2f 2a 20 52 45 41 44 57 52 49 54 45 20 2a 2f   /* READWRITE */
17d40 0a 20 20 74 65 73 74 63 61 73 65 28 20 28 31 3c  .  testcase( (1<
17d50 3c 28 66 6c 61 67 73 26 37 29 29 3d 3d 30 78 34  <(flags&7))==0x4
17d60 30 20 29 3b 20 2f 2a 20 52 45 41 44 57 52 49 54  0 ); /* READWRIT
17d70 45 20 7c 20 43 52 45 41 54 45 20 2a 2f 0a 20 20  E | CREATE */.  
17d80 69 66 28 20 28 28 31 3c 3c 28 66 6c 61 67 73 26  if( ((1<<(flags&
17d90 37 29 29 20 26 20 30 78 34 36 29 3d 3d 30 20 29  7)) & 0x46)==0 )
17da0 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
17db0 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
17dc0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 35 34 39    /* IMP: R-6549
17dd0 37 2d 34 34 35 39 34 20 2a 2f 0a 20 20 7d 0a 0a  7-44594 */.  }..
17de0 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f    if( sqlite3Glo
17df0 62 61 6c 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d  balConfig.bCoreM
17e00 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20 69  utex==0 ){.    i
17e10 73 54 68 72 65 61 64 73 61 66 65 20 3d 20 30 3b  sThreadsafe = 0;
17e20 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c 61  .  }else if( fla
17e30 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 50 45 4e  gs & SQLITE_OPEN
17e40 5f 4e 4f 4d 55 54 45 58 20 29 7b 0a 20 20 20 20  _NOMUTEX ){.    
17e50 69 73 54 68 72 65 61 64 73 61 66 65 20 3d 20 30  isThreadsafe = 0
17e60 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 6c  ;.  }else if( fl
17e70 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 50 45  ags & SQLITE_OPE
17e80 4e 5f 46 55 4c 4c 4d 55 54 45 58 20 29 7b 0a 20  N_FULLMUTEX ){. 
17e90 20 20 20 69 73 54 68 72 65 61 64 73 61 66 65 20     isThreadsafe 
17ea0 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 1;.  }else{.  
17eb0 20 20 69 73 54 68 72 65 61 64 73 61 66 65 20 3d    isThreadsafe =
17ec0 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
17ed0 6e 66 69 67 2e 62 46 75 6c 6c 4d 75 74 65 78 3b  nfig.bFullMutex;
17ee0 0a 20 20 7d 0a 20 20 69 66 28 20 66 6c 61 67 73  .  }.  if( flags
17ef0 20 26 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 50   & SQLITE_OPEN_P
17f00 52 49 56 41 54 45 43 41 43 48 45 20 29 7b 0a 20  RIVATECACHE ){. 
17f10 20 20 20 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c     flags &= ~SQL
17f20 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43  ITE_OPEN_SHAREDC
17f30 41 43 48 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ACHE;.  }else if
17f40 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
17f50 6f 6e 66 69 67 2e 73 68 61 72 65 64 43 61 63 68  onfig.sharedCach
17f60 65 45 6e 61 62 6c 65 64 20 29 7b 0a 20 20 20 20  eEnabled ){.    
17f70 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
17f80 4f 50 45 4e 5f 53 48 41 52 45 44 43 41 43 48 45  OPEN_SHAREDCACHE
17f90 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 6d 6f  ;.  }..  /* Remo
17fa0 76 65 20 68 61 72 6d 66 75 6c 20 62 69 74 73 20  ve harmful bits 
17fb0 66 72 6f 6d 20 74 68 65 20 66 6c 61 67 73 20 70  from the flags p
17fc0 61 72 61 6d 65 74 65 72 0a 20 20 2a 2a 0a 20 20  arameter.  **.  
17fd0 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 50  ** The SQLITE_OP
17fe0 45 4e 5f 4e 4f 4d 55 54 45 58 20 61 6e 64 20 53  EN_NOMUTEX and S
17ff0 51 4c 49 54 45 5f 4f 50 45 4e 5f 46 55 4c 4c 4d  QLITE_OPEN_FULLM
18000 55 54 45 58 20 66 6c 61 67 73 20 77 65 72 65 0a  UTEX flags were.
18010 20 20 2a 2a 20 64 65 61 6c 74 20 77 69 74 68 20    ** dealt with 
18020 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  in the previous 
18030 63 6f 64 65 20 62 6c 6f 63 6b 2e 20 20 42 65 73  code block.  Bes
18040 69 64 65 73 20 74 68 65 73 65 2c 20 74 68 65 20  ides these, the 
18050 6f 6e 6c 79 0a 20 20 2a 2a 20 76 61 6c 69 64 20  only.  ** valid 
18060 69 6e 70 75 74 20 66 6c 61 67 73 20 66 6f 72 20  input flags for 
18070 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
18080 29 20 61 72 65 20 53 51 4c 49 54 45 5f 4f 50 45  ) are SQLITE_OPE
18090 4e 5f 52 45 41 44 4f 4e 4c 59 2c 0a 20 20 2a 2a  N_READONLY,.  **
180a0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
180b0 44 57 52 49 54 45 2c 20 53 51 4c 49 54 45 5f 4f  DWRITE, SQLITE_O
180c0 50 45 4e 5f 43 52 45 41 54 45 2c 20 53 51 4c 49  PEN_CREATE, SQLI
180d0 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41  TE_OPEN_SHAREDCA
180e0 43 48 45 2c 0a 20 20 2a 2a 20 53 51 4c 49 54 45  CHE,.  ** SQLITE
180f0 5f 4f 50 45 4e 5f 50 52 49 56 41 54 45 43 41 43  _OPEN_PRIVATECAC
18100 48 45 2c 20 61 6e 64 20 73 6f 6d 65 20 72 65 73  HE, and some res
18110 65 72 76 65 64 20 62 69 74 73 2e 20 20 53 69 6c  erved bits.  Sil
18120 65 6e 74 6c 79 20 6d 61 73 6b 0a 20 20 2a 2a 20  ently mask.  ** 
18130 6f 66 66 20 61 6c 6c 20 6f 74 68 65 72 20 66 6c  off all other fl
18140 61 67 73 2e 0a 20 20 2a 2f 0a 20 20 66 6c 61 67  ags..  */.  flag
18150 73 20 26 3d 20 20 7e 28 20 53 51 4c 49 54 45 5f  s &=  ~( SQLITE_
18160 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
18170 53 45 20 7c 0a 20 20 20 20 20 20 20 20 20 20 20  SE |.           
18180 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
18190 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
181a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
181b0 45 5f 4f 50 45 4e 5f 4d 41 49 4e 5f 44 42 20 7c  E_OPEN_MAIN_DB |
181c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181d0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 45 4d 50  SQLITE_OPEN_TEMP
181e0 5f 44 42 20 7c 20 0a 20 20 20 20 20 20 20 20 20  _DB | .         
181f0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
18200 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 20 7c  N_TRANSIENT_DB |
18210 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
18220 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d 41 49   SQLITE_OPEN_MAI
18230 4e 5f 4a 4f 55 52 4e 41 4c 20 7c 20 0a 20 20 20  N_JOURNAL | .   
18240 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
18250 54 45 5f 4f 50 45 4e 5f 54 45 4d 50 5f 4a 4f 55  TE_OPEN_TEMP_JOU
18260 52 4e 41 4c 20 7c 20 0a 20 20 20 20 20 20 20 20  RNAL | .        
18270 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50         SQLITE_OP
18280 45 4e 5f 53 55 42 4a 4f 55 52 4e 41 4c 20 7c 20  EN_SUBJOURNAL | 
18290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182a0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d 41 53 54  SQLITE_OPEN_MAST
182b0 45 52 5f 4a 4f 55 52 4e 41 4c 20 7c 0a 20 20 20  ER_JOURNAL |.   
182c0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
182d0 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55 54 45 58 20  TE_OPEN_NOMUTEX 
182e0 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  |.              
182f0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 46 55 4c   SQLITE_OPEN_FUL
18300 4c 4d 55 54 45 58 20 7c 0a 20 20 20 20 20 20 20  LMUTEX |.       
18310 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f          SQLITE_O
18320 50 45 4e 5f 57 41 4c 0a 20 20 20 20 20 20 20 20  PEN_WAL.        
18330 20 20 20 20 20 29 3b 0a 0a 20 20 2f 2a 20 41 6c       );..  /* Al
18340 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74  locate the sqlit
18350 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e data structure
18360 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74   */.  db = sqlit
18370 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 20 73 69  e3MallocZero( si
18380 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20 29 3b  zeof(sqlite3) );
18390 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29 20 67  .  if( db==0 ) g
183a0 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a  oto opendb_out;.
183b0 20 20 69 66 28 20 69 73 54 68 72 65 61 64 73 61    if( isThreadsa
183c0 66 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 75  fe ){.    db->mu
183d0 74 65 78 20 3d 20 73 71 6c 69 74 65 33 4d 75 74  tex = sqlite3Mut
183e0 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d  exAlloc(SQLITE_M
183f0 55 54 45 58 5f 52 45 43 55 52 53 49 56 45 29 3b  UTEX_RECURSIVE);
18400 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 75 74  .    if( db->mut
18410 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ex==0 ){.      s
18420 71 6c 69 74 65 33 5f 66 72 65 65 28 64 62 29 3b  qlite3_free(db);
18430 0a 20 20 20 20 20 20 64 62 20 3d 20 30 3b 0a 20  .      db = 0;. 
18440 20 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62       goto opendb
18450 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
18460 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
18470 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
18480 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61 73 6b 20  ;.  db->errMask 
18490 3d 20 30 78 66 66 3b 0a 20 20 64 62 2d 3e 6e 44  = 0xff;.  db->nD
184a0 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 6d 61 67  b = 2;.  db->mag
184b0 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
184c0 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e 61 44  C_BUSY;.  db->aD
184d0 62 20 3d 20 64 62 2d 3e 61 44 62 53 74 61 74 69  b = db->aDbStati
184e0 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 73 69  c;..  assert( si
184f0 7a 65 6f 66 28 64 62 2d 3e 61 4c 69 6d 69 74 29  zeof(db->aLimit)
18500 3d 3d 73 69 7a 65 6f 66 28 61 48 61 72 64 4c 69  ==sizeof(aHardLi
18510 6d 69 74 29 20 29 3b 0a 20 20 6d 65 6d 63 70 79  mit) );.  memcpy
18520 28 64 62 2d 3e 61 4c 69 6d 69 74 2c 20 61 48 61  (db->aLimit, aHa
18530 72 64 4c 69 6d 69 74 2c 20 73 69 7a 65 6f 66 28  rdLimit, sizeof(
18540 64 62 2d 3e 61 4c 69 6d 69 74 29 29 3b 0a 20 20  db->aLimit));.  
18550 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
18560 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
18570 48 52 45 41 44 53 5d 20 3d 20 53 51 4c 49 54 45  HREADS] = SQLITE
18580 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
18590 54 48 52 45 41 44 53 3b 0a 20 20 64 62 2d 3e 61  THREADS;.  db->a
185a0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
185b0 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63   db->nextAutovac
185c0 20 3d 20 2d 31 3b 0a 20 20 64 62 2d 3e 73 7a 4d   = -1;.  db->szM
185d0 6d 61 70 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f  map = sqlite3Glo
185e0 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70  balConfig.szMmap
185f0 3b 0a 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65  ;.  db->nextPage
18600 73 69 7a 65 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  size = 0;.  db->
18610 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 20 3d  nMaxSorterMmap =
18620 20 30 78 37 46 46 46 46 46 46 46 3b 0a 20 20 64   0x7FFFFFFF;.  d
18630 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
18640 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
18650 20 7c 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65   | SQLITE_Enable
18660 54 72 69 67 67 65 72 20 7c 20 53 51 4c 49 54 45  Trigger | SQLITE
18670 5f 43 61 63 68 65 53 70 69 6c 6c 0a 23 69 66 20  _CacheSpill.#if 
18680 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
18690 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d 41 54 49  DEFAULT_AUTOMATI
186a0 43 5f 49 4e 44 45 58 29 20 7c 7c 20 53 51 4c 49  C_INDEX) || SQLI
186b0 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d  TE_DEFAULT_AUTOM
186c0 41 54 49 43 5f 49 4e 44 45 58 0a 20 20 20 20 20  ATIC_INDEX.     
186d0 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51              | SQ
186e0 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 0a 23  LITE_AutoIndex.#
186f0 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
18700 5f 44 45 46 41 55 4c 54 5f 43 4b 50 54 46 55 4c  _DEFAULT_CKPTFUL
18710 4c 46 53 59 4e 43 0a 20 20 20 20 20 20 20 20 20  LFSYNC.         
18720 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45          | SQLITE
18730 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 0a 23  _CkptFullFSync.#
18740 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
18750 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
18760 52 4d 41 54 3c 34 0a 20 20 20 20 20 20 20 20 20  RMAT<4.         
18770 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45          | SQLITE
18780 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 0a 23  _LegacyFileFmt.#
18790 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
187a0 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f  ITE_ENABLE_LOAD_
187b0 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20 20 20  EXTENSION.      
187c0 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c             | SQL
187d0 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  ITE_LoadExtensio
187e0 6e 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  n.#endif.#if SQL
187f0 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
18800 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 20  RSIVE_TRIGGERS. 
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 7c 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  | SQLITE_RecTrig
18830 67 65 72 73 0a 23 65 6e 64 69 66 0a 23 69 66 20  gers.#endif.#if 
18840 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
18850 45 46 41 55 4c 54 5f 46 4f 52 45 49 47 4e 5f 4b  EFAULT_FOREIGN_K
18860 45 59 53 29 20 26 26 20 53 51 4c 49 54 45 5f 44  EYS) && SQLITE_D
18870 45 46 41 55 4c 54 5f 46 4f 52 45 49 47 4e 5f 4b  EFAULT_FOREIGN_K
18880 45 59 53 0a 20 20 20 20 20 20 20 20 20 20 20 20  EYS.            
18890 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 46 6f       | SQLITE_Fo
188a0 72 65 69 67 6e 4b 65 79 73 0a 23 65 6e 64 69 66  reignKeys.#endif
188b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
188c0 49 54 45 5f 52 45 56 45 52 53 45 5f 55 4e 4f 52  ITE_REVERSE_UNOR
188d0 44 45 52 45 44 5f 53 45 4c 45 43 54 53 29 0a 20  DERED_SELECTS). 
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 7c 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  | SQLITE_Reverse
18900 4f 72 64 65 72 0a 23 65 6e 64 69 66 0a 23 69 66  Order.#endif.#if
18910 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18920 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a 45 5f  ENABLE_OVERSIZE_
18930 43 45 4c 4c 5f 43 48 45 43 4b 29 0a 20 20 20 20  CELL_CHECK).    
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 53               | S
18950 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
18960 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
18970 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
18980 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52  E_FTS3_TOKENIZER
18990 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
189a0 20 20 20 7c 20 53 51 4c 49 54 45 5f 46 74 73 33     | SQLITE_Fts3
189b0 54 6f 6b 65 6e 69 7a 65 72 0a 23 65 6e 64 69 66  Tokenizer.#endif
189c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
189d0 49 54 45 5f 45 4e 41 42 4c 45 5f 51 50 53 47 29  ITE_ENABLE_QPSG)
189e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
189f0 20 20 7c 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c    | SQLITE_Enabl
18a00 65 51 50 53 47 0a 23 65 6e 64 69 66 0a 20 20 20  eQPSG.#endif.   
18a10 20 20 20 3b 0a 20 20 73 71 6c 69 74 65 33 48 61     ;.  sqlite3Ha
18a20 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c  shInit(&db->aCol
18a30 6c 53 65 71 29 3b 0a 23 69 66 6e 64 65 66 20 53  lSeq);.#ifndef S
18a40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18a50 41 4c 54 41 42 4c 45 0a 20 20 73 71 6c 69 74 65  ALTABLE.  sqlite
18a60 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
18a70 4d 6f 64 75 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  Module);.#endif.
18a80 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64 65  .  /* Add the de
18a90 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
18aa0 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59 2e  sequence BINARY.
18ab0 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f   BINARY works fo
18ac0 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a  r both UTF-8.  *
18ad0 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f  * and UTF-16, so
18ae0 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20 66   add a version f
18af0 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69 64  or each to avoid
18b00 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72 79   any unnecessary
18b10 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e  .  ** conversion
18b20 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f  s. The only erro
18b30 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72  r that can occur
18b40 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f   here is a mallo
18b50 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a  c() failure..  *
18b60 2a 0a 20 20 2a 2a 20 45 56 49 44 45 4e 43 45 2d  *.  ** EVIDENCE-
18b70 4f 46 3a 20 52 2d 35 32 37 38 36 2d 34 34 38 37  OF: R-52786-4487
18b80 38 20 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73  8 SQLite defines
18b90 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20   three built-in 
18ba0 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 2a 2a 20 66  collating.  ** f
18bb0 75 6e 63 74 69 6f 6e 73 3a 0a 20 20 2a 2f 0a 20  unctions:.  */. 
18bc0 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   createCollation
18bd0 28 64 62 2c 20 73 71 6c 69 74 65 33 53 74 72 42  (db, sqlite3StrB
18be0 49 4e 41 52 59 2c 20 53 51 4c 49 54 45 5f 55 54  INARY, SQLITE_UT
18bf0 46 38 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75  F8, 0, binCollFu
18c00 6e 63 2c 20 30 29 3b 0a 20 20 63 72 65 61 74 65  nc, 0);.  create
18c10 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 73 71  Collation(db, sq
18c20 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 2c 20  lite3StrBINARY, 
18c30 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
18c40 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20  0, binCollFunc, 
18c50 30 29 3b 0a 20 20 63 72 65 61 74 65 43 6f 6c 6c  0);.  createColl
18c60 61 74 69 6f 6e 28 64 62 2c 20 73 71 6c 69 74 65  ation(db, sqlite
18c70 33 53 74 72 42 49 4e 41 52 59 2c 20 53 51 4c 49  3StrBINARY, SQLI
18c80 54 45 5f 55 54 46 31 36 4c 45 2c 20 30 2c 20 62  TE_UTF16LE, 0, b
18c90 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 3b 0a  inCollFunc, 0);.
18ca0 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f    createCollatio
18cb0 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c 20  n(db, "NOCASE", 
18cc0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
18cd0 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46  nocaseCollatingF
18ce0 75 6e 63 2c 20 30 29 3b 0a 20 20 63 72 65 61 74  unc, 0);.  creat
18cf0 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  eCollation(db, "
18d00 52 54 52 49 4d 22 2c 20 53 51 4c 49 54 45 5f 55  RTRIM", SQLITE_U
18d10 54 46 38 2c 20 28 76 6f 69 64 2a 29 31 2c 20 62  TF8, (void*)1, b
18d20 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 3b 0a  inCollFunc, 0);.
18d30 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
18d40 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 67 6f  Failed ){.    go
18d50 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
18d60 20 7d 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45   }.  /* EVIDENCE
18d70 2d 4f 46 3a 20 52 2d 30 38 33 30 38 2d 31 37 32  -OF: R-08308-172
18d80 32 34 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  24 The default c
18d90 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
18da0 6e 20 66 6f 72 20 61 6c 6c 0a 20 20 2a 2a 20 73  n for all.  ** s
18db0 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59  trings is BINARY
18dc0 2e 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 70 44  . .  */.  db->pD
18dd0 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65  fltColl = sqlite
18de0 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c  3FindCollSeq(db,
18df0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
18e00 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 2c 20  lite3StrBINARY, 
18e10 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  0);.  assert( db
18e20 2d 3e 70 44 66 6c 74 43 6f 6c 6c 21 3d 30 20 29  ->pDfltColl!=0 )
18e30 3b 0a 0a 20 20 2f 2a 20 50 61 72 73 65 20 74 68  ;..  /* Parse th
18e40 65 20 66 69 6c 65 6e 61 6d 65 2f 55 52 49 20 61  e filename/URI a
18e50 72 67 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 64 62  rgument. */.  db
18e60 2d 3e 6f 70 65 6e 46 6c 61 67 73 20 3d 20 66 6c  ->openFlags = fl
18e70 61 67 73 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ags;.  rc = sqli
18e80 74 65 33 50 61 72 73 65 55 72 69 28 7a 56 66 73  te3ParseUri(zVfs
18e90 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 66 6c  , zFilename, &fl
18ea0 61 67 73 2c 20 26 64 62 2d 3e 70 56 66 73 2c 20  ags, &db->pVfs, 
18eb0 26 7a 4f 70 65 6e 2c 20 26 7a 45 72 72 4d 73 67  &zOpen, &zErrMsg
18ec0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
18ed0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
18ee0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
18ef0 45 4d 20 29 20 73 71 6c 69 74 65 33 4f 6f 6d 46  EM ) sqlite3OomF
18f00 61 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 73 71  ault(db);.    sq
18f10 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
18f20 67 28 64 62 2c 20 72 63 2c 20 7a 45 72 72 4d 73  g(db, rc, zErrMs
18f30 67 20 3f 20 22 25 73 22 20 3a 20 30 2c 20 7a 45  g ? "%s" : 0, zE
18f40 72 72 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c 69  rrMsg);.    sqli
18f50 74 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67  te3_free(zErrMsg
18f60 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  );.    goto open
18f70 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  db_out;.  }..  /
18f80 2a 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65  * Open the backe
18f90 6e 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76  nd database driv
18fa0 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  er */.  rc = sql
18fb0 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
18fc0 2d 3e 70 56 66 73 2c 20 7a 4f 70 65 6e 2c 20 64  ->pVfs, zOpen, d
18fd0 62 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  b, &db->aDb[0].p
18fe0 42 74 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  Bt, 0,.         
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
19000 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 4f 50  lags | SQLITE_OP
19010 45 4e 5f 4d 41 49 4e 5f 44 42 29 3b 0a 20 20 69  EN_MAIN_DB);.  i
19020 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19030 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d   ){.    if( rc==
19040 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
19050 45 4d 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  EM ){.      rc =
19060 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
19070 50 54 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  PT;.    }.    sq
19080 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
19090 63 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  c);.    goto ope
190a0 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 73  ndb_out;.  }.  s
190b0 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
190c0 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29  (db->aDb[0].pBt)
190d0 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  ;.  db->aDb[0].p
190e0 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33  Schema = sqlite3
190f0 53 63 68 65 6d 61 47 65 74 28 64 62 2c 20 64 62  SchemaGet(db, db
19100 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20  ->aDb[0].pBt);. 
19110 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63   if( !db->malloc
19120 46 61 69 6c 65 64 20 29 20 45 4e 43 28 64 62 29  Failed ) ENC(db)
19130 20 3d 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62   = SCHEMA_ENC(db
19140 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
19150 65 4c 65 61 76 65 28 64 62 2d 3e 61 44 62 5b 30  eLeave(db->aDb[0
19160 5d 2e 70 42 74 29 3b 0a 20 20 64 62 2d 3e 61 44  ].pBt);.  db->aD
19170 62 5b 31 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73  b[1].pSchema = s
19180 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
19190 64 62 2c 20 30 29 3b 0a 0a 20 20 2f 2a 20 54 68  db, 0);..  /* Th
191a0 65 20 64 65 66 61 75 6c 74 20 73 61 66 65 74 79  e default safety
191b0 5f 6c 65 76 65 6c 20 66 6f 72 20 74 68 65 20 6d  _level for the m
191c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
191d0 46 55 4c 4c 3b 20 66 6f 72 20 74 68 65 20 74 65  FULL; for the te
191e0 6d 70 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  mp.  ** database
191f0 20 69 74 20 69 73 20 4f 46 46 2e 20 54 68 69 73   it is OFF. This
19200 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67   matches the pag
19210 65 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74  er layer default
19220 73 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e  s.  .  */.  db->
19230 61 44 62 5b 30 5d 2e 7a 44 62 53 4e 61 6d 65 20  aDb[0].zDbSName 
19240 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e  = "main";.  db->
19250 61 44 62 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65  aDb[0].safety_le
19260 76 65 6c 20 3d 20 53 51 4c 49 54 45 5f 44 45 46  vel = SQLITE_DEF
19270 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
19280 2b 31 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d  +1;.  db->aDb[1]
19290 2e 7a 44 62 53 4e 61 6d 65 20 3d 20 22 74 65 6d  .zDbSName = "tem
192a0 70 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d  p";.  db->aDb[1]
192b0 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20  .safety_level = 
192c0 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
192d0 53 5f 4f 46 46 3b 0a 0a 20 20 64 62 2d 3e 6d 61  S_OFF;..  db->ma
192e0 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
192f0 49 43 5f 4f 50 45 4e 3b 0a 20 20 69 66 28 20 64  IC_OPEN;.  if( d
19300 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
19310 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  ){.    goto open
19320 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  db_out;.  }..  /
19330 2a 20 52 65 67 69 73 74 65 72 20 61 6c 6c 20 62  * Register all b
19340 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
19350 73 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 61 74  s, but do not at
19360 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68  tempt to read th
19370 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
19380 73 63 68 65 6d 61 20 79 65 74 2e 20 54 68 69 73  schema yet. This
19390 20 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69   is delayed unti
193a0 6c 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  l the first time
193b0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
193c0 2a 2a 20 69 73 20 61 63 63 65 73 73 65 64 2e 0a  ** is accessed..
193d0 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 45 72    */.  sqlite3Er
193e0 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
193f0 4b 29 3b 0a 20 20 73 71 6c 69 74 65 33 52 65 67  K);.  sqlite3Reg
19400 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
19410 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
19420 6e 73 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73  ns(db);.  rc = s
19430 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
19440 62 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  b);..#ifdef SQLI
19450 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 0a 20  TE_ENABLE_FTS5. 
19460 20 2f 2a 20 52 65 67 69 73 74 65 72 20 61 6e 79   /* Register any
19470 20 62 75 69 6c 74 2d 69 6e 20 46 54 53 35 20 6d   built-in FTS5 m
19480 6f 64 75 6c 65 20 62 65 66 6f 72 65 20 6c 6f 61  odule before loa
19490 64 69 6e 67 20 74 68 65 20 61 75 74 6f 6d 61 74  ding the automat
194a0 69 63 0a 20 20 2a 2a 20 65 78 74 65 6e 73 69 6f  ic.  ** extensio
194b0 6e 73 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  ns. This allows 
194c0 61 75 74 6f 6d 61 74 69 63 20 65 78 74 65 6e 73  automatic extens
194d0 69 6f 6e 73 20 74 6f 20 72 65 67 69 73 74 65 72  ions to register
194e0 20 46 54 53 35 20 0a 20 20 2a 2a 20 74 6f 6b 65   FTS5 .  ** toke
194f0 6e 69 7a 65 72 73 20 61 6e 64 20 61 75 78 69 6c  nizers and auxil
19500 69 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 2e 20  iary functions. 
19510 20 2a 2f 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d   */.  if( !db->m
19520 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20 72  allocFailed && r
19530 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
19540 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19550 46 74 73 35 49 6e 69 74 28 64 62 29 3b 0a 20 20  Fts5Init(db);.  
19560 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c  }.#endif..  /* L
19570 6f 61 64 20 61 75 74 6f 6d 61 74 69 63 20 65 78  oad automatic ex
19580 74 65 6e 73 69 6f 6e 73 20 2d 20 65 78 74 65 6e  tensions - exten
19590 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76 65 20  sions that have 
195a0 62 65 65 6e 20 72 65 67 69 73 74 65 72 65 64 0a  been registered.
195b0 20 20 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73    ** using the s
195c0 71 6c 69 74 65 33 5f 61 75 74 6f 6d 61 74 69 63  qlite3_automatic
195d0 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 41 50 49  _extension() API
195e0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ..  */.  if( rc=
195f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19600 20 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61    sqlite3AutoLoa
19610 64 45 78 74 65 6e 73 69 6f 6e 73 28 64 62 29 3b  dExtensions(db);
19620 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
19630 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20  3_errcode(db);. 
19640 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19650 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
19660 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
19670 20 20 20 7d 0a 20 20 7d 0a 0a 23 69 66 64 65 66     }.  }..#ifdef
19680 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
19690 54 53 31 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d  TS1.  if( !db->m
196a0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
196b0 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71     extern int sq
196c0 6c 69 74 65 33 46 74 73 31 49 6e 69 74 28 73 71  lite3Fts1Init(sq
196d0 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 72 63 20  lite3*);.    rc 
196e0 3d 20 73 71 6c 69 74 65 33 46 74 73 31 49 6e 69  = sqlite3Fts1Ini
196f0 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  t(db);.  }.#endi
19700 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
19710 5f 45 4e 41 42 4c 45 5f 46 54 53 32 0a 20 20 69  _ENABLE_FTS2.  i
19720 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  f( !db->mallocFa
19730 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51 4c 49  iled && rc==SQLI
19740 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 65 78 74  TE_OK ){.    ext
19750 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ern int sqlite3F
19760 74 73 32 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  ts2Init(sqlite3*
19770 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
19780 74 65 33 46 74 73 32 49 6e 69 74 28 64 62 29 3b  te3Fts2Init(db);
19790 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
197a0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
197b0 45 5f 46 54 53 33 20 2f 2a 20 61 75 74 6f 6d 61  E_FTS3 /* automa
197c0 74 69 63 61 6c 6c 79 20 64 65 66 69 6e 65 64 20  tically defined 
197d0 62 79 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  by SQLITE_ENABLE
197e0 5f 46 54 53 34 20 2a 2f 0a 20 20 69 66 28 20 21  _FTS4 */.  if( !
197f0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
19800 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
19810 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
19820 6c 69 74 65 33 46 74 73 33 49 6e 69 74 28 64 62  lite3Fts3Init(db
19830 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  );.  }.#endif..#
19840 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
19850 42 4c 45 5f 49 43 55 0a 20 20 69 66 28 20 21 64  BLE_ICU.  if( !d
19860 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
19870 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
19880 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
19890 69 74 65 33 49 63 75 49 6e 69 74 28 64 62 29 3b  ite3IcuInit(db);
198a0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
198b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
198c0 45 5f 52 54 52 45 45 0a 20 20 69 66 28 20 21 64  E_RTREE.  if( !d
198d0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
198e0 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  && rc==SQLITE_OK
198f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
19900 74 65 33 52 74 72 65 65 49 6e 69 74 28 64 62 29  te3RtreeInit(db)
19910 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
19920 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
19930 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 0a 20  LE_DBSTAT_VTAB. 
19940 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63   if( !db->malloc
19950 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51  Failed && rc==SQ
19960 4c 49 54 45 5f 4f 4b 29 7b 0a 20 20 20 20 72 63  LITE_OK){.    rc
19970 20 3d 20 73 71 6c 69 74 65 33 44 62 73 74 61 74   = sqlite3Dbstat
19980 52 65 67 69 73 74 65 72 28 64 62 29 3b 0a 20 20  Register(db);.  
19990 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
199a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4a   SQLITE_ENABLE_J
199b0 53 4f 4e 31 0a 20 20 69 66 28 20 21 64 62 2d 3e  SON1.  if( !db->
199c0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20  mallocFailed && 
199d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 7b 0a  rc==SQLITE_OK){.
199e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
199f0 4a 73 6f 6e 31 49 6e 69 74 28 64 62 29 3b 0a 20  Json1Init(db);. 
19a00 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65   }.#endif..#ifde
19a10 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
19a20 53 54 4d 54 56 54 41 42 0a 20 20 69 66 28 20 21  STMTVTAB.  if( !
19a30 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
19a40 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
19a50 4b 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  K){.    rc = sql
19a60 69 74 65 33 53 74 6d 74 56 74 61 62 49 6e 69 74  ite3StmtVtabInit
19a70 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  (db);.  }.#endif
19a80 0a 0a 20 20 2f 2a 20 2d 44 53 51 4c 49 54 45 5f  ..  /* -DSQLITE_
19a90 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
19aa0 4d 4f 44 45 3d 31 20 6d 61 6b 65 73 20 45 58 43  MODE=1 makes EXC
19ab0 4c 55 53 49 56 45 20 74 68 65 20 64 65 66 61 75  LUSIVE the defau
19ac0 6c 74 20 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20  lt locking.  ** 
19ad0 6d 6f 64 65 2e 20 20 2d 44 53 51 4c 49 54 45 5f  mode.  -DSQLITE_
19ae0 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
19af0 4d 4f 44 45 3d 30 20 6d 61 6b 65 20 4e 4f 52 4d  MODE=0 make NORM
19b00 41 4c 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  AL the default l
19b10 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64 65  ocking.  ** mode
19b20 2e 20 20 44 6f 69 6e 67 20 6e 6f 74 68 69 6e 67  .  Doing nothing
19b30 20 61 74 20 61 6c 6c 20 61 6c 73 6f 20 6d 61 6b   at all also mak
19b40 65 73 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64 65  es NORMAL the de
19b50 66 61 75 6c 74 2e 0a 20 20 2a 2f 0a 23 69 66 64  fault..  */.#ifd
19b60 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
19b70 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 0a 20  T_LOCKING_MODE. 
19b80 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
19b90 65 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55  e = SQLITE_DEFAU
19ba0 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3b  LT_LOCKING_MODE;
19bb0 0a 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c  .  sqlite3PagerL
19bc0 6f 63 6b 69 6e 67 4d 6f 64 65 28 73 71 6c 69 74  ockingMode(sqlit
19bd0 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d  e3BtreePager(db-
19be0 3e 61 44 62 5b 30 5d 2e 70 42 74 29 2c 0a 20 20  >aDb[0].pBt),.  
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 44          SQLITE_D
19c10 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d  EFAULT_LOCKING_M
19c20 4f 44 45 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  ODE);.#endif..  
19c30 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
19c40 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 0a  Error(db, rc);..
19c50 20 20 2f 2a 20 45 6e 61 62 6c 65 20 74 68 65 20    /* Enable the 
19c60 6c 6f 6f 6b 61 73 69 64 65 2d 6d 61 6c 6c 6f 63  lookaside-malloc
19c70 20 73 75 62 73 79 73 74 65 6d 20 2a 2f 0a 20 20   subsystem */.  
19c80 73 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65 28 64  setupLookaside(d
19c90 62 2c 20 30 2c 20 73 71 6c 69 74 65 33 47 6c 6f  b, 0, sqlite3Glo
19ca0 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4c 6f 6f 6b  balConfig.szLook
19cb0 61 73 69 64 65 2c 0a 20 20 20 20 20 20 20 20 20  aside,.         
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19cd0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
19ce0 69 67 2e 6e 4c 6f 6f 6b 61 73 69 64 65 29 3b 0a  ig.nLookaside);.
19cf0 0a 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61  .  sqlite3_wal_a
19d00 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62  utocheckpoint(db
19d10 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
19d20 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
19d30 49 4e 54 29 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75  INT);..opendb_ou
19d40 74 3a 0a 20 20 69 66 28 20 64 62 20 29 7b 0a 20  t:.  if( db ){. 
19d50 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
19d60 75 74 65 78 21 3d 30 20 7c 7c 20 69 73 54 68 72  utex!=0 || isThr
19d70 65 61 64 73 61 66 65 3d 3d 30 0a 20 20 20 20 20  eadsafe==0.     
19d80 20 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33        || sqlite3
19d90 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 46 75  GlobalConfig.bFu
19da0 6c 6c 4d 75 74 65 78 3d 3d 30 20 29 3b 0a 20 20  llMutex==0 );.  
19db0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
19dc0 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
19dd0 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
19de0 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
19df0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 21 3d  ;.  assert( db!=
19e00 30 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  0 || rc==SQLITE_
19e10 4e 4f 4d 45 4d 20 29 3b 0a 20 20 69 66 28 20 72  NOMEM );.  if( r
19e20 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
19e30 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
19e40 6c 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62  lose(db);.    db
19e50 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66   = 0;.  }else if
19e60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19e70 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
19e80 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
19e90 53 49 43 4b 3b 0a 20 20 7d 0a 23 69 66 20 64 65  SICK;.  }.#if de
19ea0 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
19eb0 20 26 26 20 45 4e 41 42 4c 45 5f 46 4f 52 43 45   && ENABLE_FORCE
19ec0 5f 57 41 4c 0a 20 20 69 66 28 20 64 62 20 26 26  _WAL.  if( db &&
19ed0 20 21 72 63 20 29 7b 0a 20 20 20 20 69 66 20 28   !rc ){.    if (
19ee0 28 30 20 3d 3d 20 61 63 63 65 73 73 28 22 2f 76  (0 == access("/v
19ef0 61 72 2f 64 62 2f 65 6e 61 62 6c 65 46 6f 72 63  ar/db/enableForc
19f00 65 57 41 4c 22 2c 20 52 5f 4f 4b 29 29 29 20 7b  eWAL", R_OK))) {
19f10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
19f20 45 42 55 47 0a 20 20 20 20 20 20 66 70 72 69 6e  EBUG.      fprin
19f30 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69  tf(stderr, "SQLi
19f40 74 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 5f 6d  te WAL journal_m
19f50 6f 64 65 20 45 4e 41 42 4c 45 44 20 62 79 20 64  ode ENABLED by d
19f60 65 66 61 75 6c 74 2e 5c 6e 22 29 3b 0a 23 65 6e  efault.\n");.#en
19f70 64 69 66 0a 20 20 20 20 20 20 0a 20 20 20 20 20  dif.      .     
19f80 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
19f90 2c 20 22 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61  , "pragma journa
19fa0 6c 5f 6d 6f 64 65 3d 77 61 6c 22 2c 20 4e 55 4c  l_mode=wal", NUL
19fb0 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a  L, NULL, NULL);.
19fc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
19fd0 42 55 47 0a 2f 2f 20 20 20 20 7d 20 65 6c 73 65  BUG.//    } else
19fe0 20 7b 0a 2f 2f 20 20 20 20 20 20 66 70 72 69 6e   {.//      fprin
19ff0 74 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69  tf(stderr, "SQLi
1a000 74 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 5f 6d  te WAL journal_m
1a010 6f 64 65 20 4e 4f 54 20 45 4e 41 42 4c 45 44 20  ode NOT ENABLED 
1a020 62 79 20 64 65 66 61 75 6c 74 2e 5c 6e 22 29 3b  by default.\n");
1a030 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
1a040 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  }.#endif.#if def
1a050 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1a060 4c 45 5f 41 55 54 4f 5f 50 52 4f 46 49 4c 45 29  LE_AUTO_PROFILE)
1a070 0a 20 20 69 66 28 20 64 62 20 26 26 20 21 72 63  .  if( db && !rc
1a080 20 29 7b 0a 20 20 20 20 65 6e 61 62 6c 65 41 75   ){.    enableAu
1a090 74 6f 4c 6f 67 67 69 6e 67 28 64 62 29 3b 0a 20  toLogging(db);. 
1a0a0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 2a 70 70 44   }.#endif.  *ppD
1a0b0 62 20 3d 20 64 62 3b 0a 23 69 66 64 65 66 20 53  b = db;.#ifdef S
1a0c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1a0d0 52 52 0a 20 20 53 52 52 65 63 4f 70 65 6e 28 64  RR.  SRRecOpen(d
1a0e0 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 66 6c  b, zFilename, fl
1a0f0 61 67 73 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ags);.#endif.#if
1a100 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1a110 45 5f 53 51 4c 4c 4f 47 0a 20 20 69 66 28 20 73  E_SQLLOG.  if( s
1a120 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1a130 69 67 2e 78 53 71 6c 6c 6f 67 20 29 7b 0a 20 20  ig.xSqllog ){.  
1a140 20 20 2f 2a 20 4f 70 65 6e 69 6e 67 20 61 20 64    /* Opening a d
1a150 62 20 68 61 6e 64 6c 65 2e 20 46 6f 75 72 74 68  b handle. Fourth
1a160 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 70 61   parameter is pa
1a170 73 73 65 64 20 30 2e 20 2a 2f 0a 20 20 20 20 76  ssed 0. */.    v
1a180 6f 69 64 20 2a 70 41 72 67 20 3d 20 73 71 6c 69  oid *pArg = sqli
1a190 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1a1a0 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 20 20 20 20  pSqllogArg;.    
1a1b0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
1a1c0 66 69 67 2e 78 53 71 6c 6c 6f 67 28 70 41 72 67  fig.xSqllog(pArg
1a1d0 2c 20 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c  , db, zFilename,
1a1e0 20 30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a   0);.  }.#endif.
1a1f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1a200 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20  TE_HAS_CODEC).  
1a210 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a220 4b 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  K ){.    const c
1a230 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 20 20 69  har *zKey;.    i
1a240 66 28 20 28 7a 4b 65 79 20 3d 20 73 71 6c 69 74  f( (zKey = sqlit
1a250 65 33 5f 75 72 69 5f 70 61 72 61 6d 65 74 65 72  e3_uri_parameter
1a260 28 7a 4f 70 65 6e 2c 20 22 68 65 78 6b 65 79 22  (zOpen, "hexkey"
1a270 29 29 21 3d 30 20 26 26 20 7a 4b 65 79 5b 30 5d  ))!=0 && zKey[0]
1a280 20 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79   ){.      u8 iBy
1a290 74 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b  te;.      int i;
1a2a0 0a 20 20 20 20 20 20 63 68 61 72 20 7a 44 65 63  .      char zDec
1a2b0 6f 64 65 64 5b 34 30 5d 3b 0a 20 20 20 20 20 20  oded[40];.      
1a2c0 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
1a2d0 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 44 65 63 6f  ; i<sizeof(zDeco
1a2e0 64 65 64 29 2a 32 20 26 26 20 73 71 6c 69 74 65  ded)*2 && sqlite
1a2f0 33 49 73 78 64 69 67 69 74 28 7a 4b 65 79 5b 69  3Isxdigit(zKey[i
1a300 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
1a310 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65    iByte = (iByte
1a320 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65  <<4) + sqlite3He
1a330 78 54 6f 49 6e 74 28 7a 4b 65 79 5b 69 5d 29 3b  xToInt(zKey[i]);
1a340 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
1a350 31 29 21 3d 30 20 29 20 7a 44 65 63 6f 64 65 64  1)!=0 ) zDecoded
1a360 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20  [i/2] = iByte;. 
1a370 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
1a380 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
1a390 30 2c 20 7a 44 65 63 6f 64 65 64 2c 20 69 2f 32  0, zDecoded, i/2
1a3a0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
1a3b0 20 28 7a 4b 65 79 20 3d 20 73 71 6c 69 74 65 33   (zKey = sqlite3
1a3c0 5f 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28 7a  _uri_parameter(z
1a3d0 4f 70 65 6e 2c 20 22 6b 65 79 22 29 29 21 3d 30  Open, "key"))!=0
1a3e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1a3f0 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 30 2c 20  3_key_v2(db, 0, 
1a400 7a 4b 65 79 2c 20 73 71 6c 69 74 65 33 53 74 72  zKey, sqlite3Str
1a410 6c 65 6e 33 30 28 7a 4b 65 79 29 29 3b 0a 20 20  len30(zKey));.  
1a420 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
1a430 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4f   sqlite3_free(zO
1a440 70 65 6e 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  pen);.  return r
1a450 63 20 26 20 30 78 66 66 3b 0a 7d 0a 0a 2f 2a 0a  c & 0xff;.}../*.
1a460 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61  ** Open a new da
1a470 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a  tabase handle..*
1a480 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  /.int sqlite3_op
1a490 65 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  en(.  const char
1a4a0 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20   *zFilename, .  
1a4b0 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a  sqlite3 **ppDb .
1a4c0 29 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e  ){.  return open
1a4d0 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61  Database(zFilena
1a4e0 6d 65 2c 20 70 70 44 62 2c 0a 20 20 20 20 20 20  me, ppDb,.      
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a500 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1a510 57 52 49 54 45 20 7c 20 53 51 4c 49 54 45 5f 4f  WRITE | SQLITE_O
1a520 50 45 4e 5f 43 52 45 41 54 45 2c 20 30 29 3b 0a  PEN_CREATE, 0);.
1a530 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  }.int sqlite3_op
1a540 65 6e 5f 76 32 28 0a 20 20 63 6f 6e 73 74 20 63  en_v2(.  const c
1a550 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 20  har *filename,  
1a560 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
1a570 65 6e 61 6d 65 20 28 55 54 46 2d 38 29 20 2a 2f  ename (UTF-8) */
1a580 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  .  sqlite3 **ppD
1a590 62 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55  b,         /* OU
1a5a0 54 3a 20 53 51 4c 69 74 65 20 64 62 20 68 61 6e  T: SQLite db han
1a5b0 64 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  dle */.  int fla
1a5c0 67 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gs,             
1a5d0 20 2f 2a 20 46 6c 61 67 73 20 2a 2f 0a 20 20 63   /* Flags */.  c
1a5e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 66 73 20  onst char *zVfs 
1a5f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
1a600 66 20 56 46 53 20 6d 6f 64 75 6c 65 20 74 6f 20  f VFS module to 
1a610 75 73 65 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75  use */.){.  retu
1a620 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28  rn openDatabase(
1a630 66 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 2c 20  filename, ppDb, 
1a640 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 66 6c  (unsigned int)fl
1a650 61 67 73 2c 20 7a 56 66 73 29 3b 0a 7d 0a 0a 23  ags, zVfs);.}..#
1a660 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1a670 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f  IT_UTF16./*.** O
1a680 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61  pen a new databa
1a690 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  se handle..*/.in
1a6a0 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36  t sqlite3_open16
1a6b0 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  (.  const void *
1a6c0 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71  zFilename, .  sq
1a6d0 6c 69 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a  lite3 **ppDb.){.
1a6e0 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46    char const *zF
1a6f0 69 6c 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a  ilename8;   /* z
1a700 46 69 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64  Filename encoded
1a710 20 69 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61   in UTF-8 instea
1a720 64 20 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20  d of UTF-16 */. 
1a730 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
1a740 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  pVal;.  int rc;.
1a750 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1a760 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
1a770 20 20 69 66 28 20 70 70 44 62 3d 3d 30 20 29 20    if( ppDb==0 ) 
1a780 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
1a790 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
1a7a0 66 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 23  f.  *ppDb = 0;.#
1a7b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1a7c0 49 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 72 63  IT_AUTOINIT.  rc
1a7d0 20 3d 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69   = sqlite3_initi
1a7e0 61 6c 69 7a 65 28 29 3b 0a 20 20 69 66 28 20 72  alize();.  if( r
1a7f0 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 23  c ) return rc;.#
1a800 65 6e 64 69 66 0a 20 20 69 66 28 20 7a 46 69 6c  endif.  if( zFil
1a810 65 6e 61 6d 65 3d 3d 30 20 29 20 7a 46 69 6c 65  ename==0 ) zFile
1a820 6e 61 6d 65 20 3d 20 22 5c 30 30 30 5c 30 30 30  name = "\000\000
1a830 22 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  ";.  pVal = sqli
1a840 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a  te3ValueNew(0);.
1a850 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
1a860 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a  tStr(pVal, -1, z
1a870 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45  Filename, SQLITE
1a880 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51  _UTF16NATIVE, SQ
1a890 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
1a8a0 7a 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c  zFilename8 = sql
1a8b0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
1a8c0 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  al, SQLITE_UTF8)
1a8d0 3b 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d  ;.  if( zFilenam
1a8e0 65 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f  e8 ){.    rc = o
1a8f0 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c  penDatabase(zFil
1a900 65 6e 61 6d 65 38 2c 20 70 70 44 62 2c 0a 20 20  ename8, ppDb,.  
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1a930 52 45 41 44 57 52 49 54 45 20 7c 20 53 51 4c 49  READWRITE | SQLI
1a940 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 2c 20  TE_OPEN_CREATE, 
1a950 30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  0);.    assert( 
1a960 2a 70 70 44 62 20 7c 7c 20 72 63 3d 3d 53 51 4c  *ppDb || rc==SQL
1a970 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20  ITE_NOMEM );.   
1a980 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1a990 4f 4b 20 26 26 20 21 44 62 48 61 73 50 72 6f 70  OK && !DbHasProp
1a9a0 65 72 74 79 28 2a 70 70 44 62 2c 20 30 2c 20 44  erty(*ppDb, 0, D
1a9b0 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
1a9c0 29 7b 0a 20 20 20 20 20 20 53 43 48 45 4d 41 5f  ){.      SCHEMA_
1a9d0 45 4e 43 28 2a 70 70 44 62 29 20 3d 20 45 4e 43  ENC(*ppDb) = ENC
1a9e0 28 2a 70 70 44 62 29 20 3d 20 53 51 4c 49 54 45  (*ppDb) = SQLITE
1a9f0 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20  _UTF16NATIVE;.  
1aa00 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1aa10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
1aa20 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73  EM_BKPT;.  }.  s
1aa30 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
1aa40 70 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e  pVal);..  return
1aa50 20 72 63 20 26 20 30 78 66 66 3b 0a 7d 0a 23 65   rc & 0xff;.}.#e
1aa60 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
1aa70 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a  MIT_UTF16 */../*
1aa80 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e  .** Register a n
1aa90 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ew collation seq
1aaa0 75 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64  uence with the d
1aab0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64  atabase handle d
1aac0 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  b..*/.int sqlite
1aad0 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
1aae0 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  on(.  sqlite3* d
1aaf0 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  b, .  const char
1ab00 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20   *zName, .  int 
1ab10 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
1ab20 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
1ab30 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
1ab40 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
1ab50 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
1ab60 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
1ab70 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
1ab80 5f 76 32 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 65  _v2(db, zName, e
1ab90 6e 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61  nc, pCtx, xCompa
1aba0 72 65 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  re, 0);.}../*.**
1abb0 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20   Register a new 
1abc0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1abd0 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ce with the data
1abe0 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a  base handle db..
1abf0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
1ac00 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  reate_collation_
1ac10 76 32 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  v2(.  sqlite3* d
1ac20 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  b, .  const char
1ac30 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20   *zName, .  int 
1ac40 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
1ac50 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
1ac60 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
1ac70 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
1ac80 6f 6e 73 74 20 76 6f 69 64 2a 29 2c 0a 20 20 76  onst void*),.  v
1ac90 6f 69 64 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  oid(*xDel)(void*
1aca0 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ).){.  int rc;..
1acb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1acc0 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
1acd0 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
1ace0 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 7c  etyCheckOk(db) |
1acf0 7c 20 7a 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74  | zName==0 ) ret
1ad00 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
1ad10 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20  E_BKPT;.#endif. 
1ad20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
1ad30 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
1ad40 0a 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e  .  assert( !db->
1ad50 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
1ad60 20 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f 6c    rc = createCol
1ad70 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65  lation(db, zName
1ad80 2c 20 28 75 38 29 65 6e 63 2c 20 70 43 74 78 2c  , (u8)enc, pCtx,
1ad90 20 78 43 6f 6d 70 61 72 65 2c 20 78 44 65 6c 29   xCompare, xDel)
1ada0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1adb0 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
1adc0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1add0 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
1ade0 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
1adf0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1ae00 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
1ae10 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
1ae20 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
1ae30 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
1ae40 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
1ae50 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1ae60 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
1ae70 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  n16(.  sqlite3* 
1ae80 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69  db, .  const voi
1ae90 64 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  d *zName,.  int 
1aea0 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
1aeb0 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
1aec0 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
1aed0 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
1aee0 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
1aef0 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
1af00 5f 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  _OK;.  char *zNa
1af10 6d 65 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  me8;..#ifdef SQL
1af20 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
1af30 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
1af40 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
1af50 28 64 62 29 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30  (db) || zName==0
1af60 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
1af70 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65  _MISUSE_BKPT;.#e
1af80 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ndif.  sqlite3_m
1af90 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
1afa0 75 74 65 78 29 3b 0a 20 20 61 73 73 65 72 74 28  utex);.  assert(
1afb0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
1afc0 65 64 20 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d  ed );.  zName8 =
1afd0 20 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38   sqlite3Utf16to8
1afe0 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 2d 31 2c 20  (db, zName, -1, 
1aff0 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
1b000 56 45 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  VE);.  if( zName
1b010 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 63 72  8 ){.    rc = cr
1b020 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62  eateCollation(db
1b030 2c 20 7a 4e 61 6d 65 38 2c 20 28 75 38 29 65 6e  , zName8, (u8)en
1b040 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72  c, pCtx, xCompar
1b050 65 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 0);.    sqlit
1b060 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4e 61  e3DbFree(db, zNa
1b070 6d 65 38 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  me8);.  }.  rc =
1b080 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
1b090 64 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74  db, rc);.  sqlit
1b0a0 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
1b0b0 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
1b0c0 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66  urn rc;.}.#endif
1b0d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
1b0e0 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  UTF16 */../*.** 
1b0f0 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61  Register a colla
1b100 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61  tion sequence fa
1b110 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77  ctory callback w
1b120 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
1b130 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52   handle.** db. R
1b140 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69  eplace any previ
1b150 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20  ously installed 
1b160 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1b170 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69  ce factory..*/.i
1b180 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61  nt sqlite3_colla
1b190 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73  tion_needed(.  s
1b1a0 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76  qlite3 *db, .  v
1b1b0 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
1b1c0 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43  Arg, .  void(*xC
1b1d0 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
1b1e0 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
1b1f0 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
1b200 72 2a 29 0a 29 7b 0a 23 69 66 64 65 66 20 53 51  r*).){.#ifdef SQ
1b210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
1b220 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
1b230 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1b240 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 53  k(db) ) return S
1b250 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
1b260 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69  T;.#endif.  sqli
1b270 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
1b280 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 64 62  db->mutex);.  db
1b290 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20  ->xCollNeeded = 
1b2a0 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20 64  xCollNeeded;.  d
1b2b0 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  b->xCollNeeded16
1b2c0 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c   = 0;.  db->pCol
1b2d0 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f  lNeededArg = pCo
1b2e0 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
1b2f0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
1b300 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
1b310 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
1b320 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
1b330 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
1b340 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
1b350 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1b360 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c  nce factory call
1b370 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61  back with the da
1b380 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
1b390 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79   db. Replace any
1b3a0 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74   previously inst
1b3b0 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  alled collation 
1b3c0 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
1b3d0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1b3e0 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65  _collation_neede
1b3f0 64 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  d16(.  sqlite3 *
1b400 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f  db, .  void *pCo
1b410 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20  llNeededArg, .  
1b420 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
1b430 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
1b440 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
1b450 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b  ,const void*).){
1b460 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1b470 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
1b480 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
1b490 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
1b4a0 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
1b4b0 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
1b4c0 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  dif.  sqlite3_mu
1b4d0 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
1b4e0 74 65 78 29 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c  tex);.  db->xCol
1b4f0 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20 64  lNeeded = 0;.  d
1b500 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  b->xCollNeeded16
1b510 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36   = xCollNeeded16
1b520 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65  ;.  db->pCollNee
1b530 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65  dedArg = pCollNe
1b540 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
1b550 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
1b560 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
1b570 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
1b580 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
1b590 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
1b5a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1b5b0 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
1b5c0 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
1b5d0 69 6f 6e 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e  ion is now an an
1b5e0 61 63 68 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73  achronism. It us
1b5f0 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 74 6f  ed to be used to
1b600 20 72 65 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a   recover from a.
1b610 2a 2a 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c  ** malloc() fail
1b620 75 72 65 2c 20 62 75 74 20 53 51 4c 69 74 65 20  ure, but SQLite 
1b630 6e 6f 77 20 64 6f 65 73 20 74 68 69 73 20 61 75  now does this au
1b640 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a  tomatically..*/.
1b650 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  int sqlite3_glob
1b660 61 6c 5f 72 65 63 6f 76 65 72 28 76 6f 69 64 29  al_recover(void)
1b670 7b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  {.  return SQLIT
1b680 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  E_OK;.}.#endif..
1b690 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65  /*.** Test to se
1b6a0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
1b6b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
1b6c0 6e 6e 65 63 74 69 6f 6e 20 69 73 20 69 6e 20 61  nnection is in a
1b6d0 75 74 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64  utocommit.** mod
1b6e0 65 2e 20 20 52 65 74 75 72 6e 20 54 52 55 45 20  e.  Return TRUE 
1b6f0 69 66 20 69 74 20 69 73 20 61 6e 64 20 46 41 4c  if it is and FAL
1b700 53 45 20 69 66 20 6e 6f 74 2e 20 20 41 75 74 6f  SE if not.  Auto
1b710 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f  commit mode is o
1b720 6e 0a 2a 2a 20 62 79 20 64 65 66 61 75 6c 74 2e  n.** by default.
1b730 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 69 73 20    Autocommit is 
1b740 64 69 73 61 62 6c 65 64 20 62 79 20 61 20 42 45  disabled by a BE
1b750 47 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  GIN statement an
1b760 64 20 72 65 65 6e 61 62 6c 65 64 0a 2a 2a 20 62  d reenabled.** b
1b770 79 20 74 68 65 20 6e 65 78 74 20 43 4f 4d 4d 49  y the next COMMI
1b780 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a  T or ROLLBACK..*
1b790 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65  /.int sqlite3_ge
1b7a0 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c  t_autocommit(sql
1b7b0 69 74 65 33 20 2a 64 62 29 7b 0a 23 69 66 64 65  ite3 *db){.#ifde
1b7c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1b7d0 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
1b7e0 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68  !sqlite3SafetyCh
1b7f0 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20  eckOk(db) ){.   
1b800 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49   (void)SQLITE_MI
1b810 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72  SUSE_BKPT;.    r
1b820 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e  eturn 0;.  }.#en
1b830 64 69 66 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  dif.  return db-
1b840 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a  >autoCommit;.}..
1b850 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1b860 69 6e 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ing routines are
1b870 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
1b880 20 63 6f 6e 73 74 61 6e 74 73 20 53 51 4c 49 54   constants SQLIT
1b890 45 5f 43 4f 52 52 55 50 54 2c 0a 2a 2a 20 53 51  E_CORRUPT,.** SQ
1b8a0 4c 49 54 45 5f 4d 49 53 55 53 45 2c 20 53 51 4c  LITE_MISUSE, SQL
1b8b0 49 54 45 5f 43 41 4e 54 4f 50 45 4e 2c 20 53 51  ITE_CANTOPEN, SQ
1b8c0 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 70  LITE_NOMEM and p
1b8d0 6f 73 73 69 62 6c 79 20 6f 74 68 65 72 20 65 72  ossibly other er
1b8e0 72 6f 72 0a 2a 2a 20 63 6f 6e 73 74 61 6e 74 73  ror.** constants
1b8f0 2e 20 20 54 68 65 79 20 73 65 72 76 65 20 74 77  .  They serve tw
1b900 6f 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2a 0a 2a  o purposes:.**.*
1b910 2a 20 20 20 31 2e 20 20 53 65 72 76 65 20 61 73  *   1.  Serve as
1b920 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1b930 61 63 65 20 74 6f 20 73 65 74 20 61 20 62 72 65  ace to set a bre
1b940 61 6b 70 6f 69 6e 74 20 69 6e 20 61 20 64 65 62  akpoint in a deb
1b950 75 67 67 65 72 0a 2a 2a 20 20 20 20 20 20 20 74  ugger.**       t
1b960 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 76 65  o detect when ve
1b970 72 73 69 6f 6e 20 65 72 72 6f 72 20 63 6f 6e 64  rsion error cond
1b980 69 74 69 6f 6e 73 20 6f 63 63 75 72 73 2e 0a 2a  itions occurs..*
1b990 2a 0a 2a 2a 20 20 20 32 2e 20 20 49 6e 76 6f 6b  *.**   2.  Invok
1b9a0 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20  e sqlite3_log() 
1b9b0 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 73  to provide the s
1b9c0 6f 75 72 63 65 20 63 6f 64 65 20 6c 6f 63 61 74  ource code locat
1b9d0 69 6f 6e 20 77 68 65 72 65 0a 2a 2a 20 20 20 20  ion where.**    
1b9e0 20 20 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 65     a low-level e
1b9f0 72 72 6f 72 20 69 73 20 66 69 72 73 74 20 64 65  rror is first de
1ba00 74 65 63 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  tected..*/.stati
1ba10 63 20 69 6e 74 20 72 65 70 6f 72 74 45 72 72 6f  c int reportErro
1ba20 72 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20  r(int iErr, int 
1ba30 6c 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68  lineno, const ch
1ba40 61 72 20 2a 7a 54 79 70 65 29 7b 0a 20 20 73 71  ar *zType){.  sq
1ba50 6c 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 2c 20  lite3_log(iErr, 
1ba60 22 25 73 20 61 74 20 6c 69 6e 65 20 25 64 20 6f  "%s at line %d o
1ba70 66 20 5b 25 2e 31 30 73 5d 22 2c 0a 20 20 20 20  f [%.10s]",.    
1ba80 20 20 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c            zType,
1ba90 20 6c 69 6e 65 6e 6f 2c 20 32 30 2b 73 71 6c 69   lineno, 20+sqli
1baa0 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b  te3_sourceid());
1bab0 0a 20 20 72 65 74 75 72 6e 20 69 45 72 72 3b 0a  .  return iErr;.
1bac0 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  }.int sqlite3Cor
1bad0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 20 6c 69  ruptError(int li
1bae0 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63 61 73  neno){.  testcas
1baf0 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
1bb00 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
1bb10 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 70 6f 72  ;.  return repor
1bb20 74 45 72 72 6f 72 28 53 51 4c 49 54 45 5f 43 4f  tError(SQLITE_CO
1bb30 52 52 55 50 54 2c 20 6c 69 6e 65 6e 6f 2c 20 22  RRUPT, lineno, "
1bb40 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1bb50 69 6f 6e 22 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c  ion");.}.int sql
1bb60 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
1bb70 69 6e 74 20 6c 69 6e 65 6e 6f 29 7b 0a 20 20 74  int lineno){.  t
1bb80 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
1bb90 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
1bba0 67 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e  g!=0 );.  return
1bbb0 20 72 65 70 6f 72 74 45 72 72 6f 72 28 53 51 4c   reportError(SQL
1bbc0 49 54 45 5f 4d 49 53 55 53 45 2c 20 6c 69 6e 65  ITE_MISUSE, line
1bbd0 6e 6f 2c 20 22 6d 69 73 75 73 65 22 29 3b 0a 7d  no, "misuse");.}
1bbe0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1bbf0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 20 6c 69  openError(int li
1bc00 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63 61 73  neno){.  testcas
1bc10 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e( sqlite3Global
1bc20 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29  Config.xLog!=0 )
1bc30 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 70 6f 72  ;.  return repor
1bc40 74 45 72 72 6f 72 28 53 51 4c 49 54 45 5f 43 41  tError(SQLITE_CA
1bc50 4e 54 4f 50 45 4e 2c 20 6c 69 6e 65 6e 6f 2c 20  NTOPEN, lineno, 
1bc60 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 66 69 6c  "cannot open fil
1bc70 65 22 29 3b 0a 7d 0a 23 69 66 64 65 66 20 53 51  e");.}.#ifdef SQ
1bc80 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
1bc90 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
1bca0 6f 45 72 72 6f 72 28 69 6e 74 20 6c 69 6e 65 6e  oError(int linen
1bcb0 6f 2c 20 50 67 6e 6f 20 70 67 6e 6f 29 7b 0a 20  o, Pgno pgno){. 
1bcc0 20 63 68 61 72 20 7a 4d 73 67 5b 31 30 30 5d 3b   char zMsg[100];
1bcd0 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
1bce0 6e 74 66 28 73 69 7a 65 6f 66 28 7a 4d 73 67 29  ntf(sizeof(zMsg)
1bcf0 2c 20 7a 4d 73 67 2c 20 22 64 61 74 61 62 61 73  , zMsg, "databas
1bd00 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 70 61 67  e corruption pag
1bd10 65 20 25 64 22 2c 20 70 67 6e 6f 29 3b 0a 20 20  e %d", pgno);.  
1bd20 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
1bd30 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
1bd40 6f 67 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72  og!=0 );.  retur
1bd50 6e 20 72 65 70 6f 72 74 45 72 72 6f 72 28 53 51  n reportError(SQ
1bd60 4c 49 54 45 5f 43 4f 52 52 55 50 54 2c 20 6c 69  LITE_CORRUPT, li
1bd70 6e 65 6e 6f 2c 20 7a 4d 73 67 29 3b 0a 7d 0a 69  neno, zMsg);.}.i
1bd80 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  nt sqlite3NomemE
1bd90 72 72 6f 72 28 69 6e 74 20 6c 69 6e 65 6e 6f 29  rror(int lineno)
1bda0 7b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  {.  testcase( sq
1bdb0 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
1bdc0 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 72  g.xLog!=0 );.  r
1bdd0 65 74 75 72 6e 20 72 65 70 6f 72 74 45 72 72 6f  eturn reportErro
1bde0 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20  r(SQLITE_NOMEM, 
1bdf0 6c 69 6e 65 6e 6f 2c 20 22 4f 4f 4d 22 29 3b 0a  lineno, "OOM");.
1be00 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65  }.int sqlite3Ioe
1be10 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74  rrnomemError(int
1be20 20 6c 69 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74   lineno){.  test
1be30 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f  case( sqlite3Glo
1be40 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d  balConfig.xLog!=
1be50 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  0 );.  return re
1be60 70 6f 72 74 45 72 72 6f 72 28 53 51 4c 49 54 45  portError(SQLITE
1be70 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 2c 20 6c 69  _IOERR_NOMEM, li
1be80 6e 65 6e 6f 2c 20 22 49 2f 4f 20 4f 4f 4d 20 65  neno, "I/O OOM e
1be90 72 72 6f 72 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  rror");.}.#endif
1bea0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1beb0 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
1bec0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
1bed0 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75   convenience rou
1bee0 74 69 6e 65 20 74 68 61 74 20 6d 61 6b 65 73 20  tine that makes 
1bef0 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68  sure that all th
1bf00 72 65 61 64 2d 73 70 65 63 69 66 69 63 0a 2a 2a  read-specific.**
1bf10 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 74   data for this t
1bf20 68 72 65 61 64 20 68 61 73 20 62 65 65 6e 20 64  hread has been d
1bf30 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2a 0a 2a  eallocated..**.*
1bf40 2a 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67  * SQLite no long
1bf50 65 72 20 75 73 65 73 20 74 68 72 65 61 64 2d 73  er uses thread-s
1bf60 70 65 63 69 66 69 63 20 64 61 74 61 20 73 6f 20  pecific data so 
1bf70 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
1bf80 6e 6f 77 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 2e 20  now a.** no-op. 
1bf90 20 49 74 20 69 73 20 72 65 74 61 69 6e 65 64 20   It is retained 
1bfa0 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 63  for historical c
1bfb0 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 2a 2f  ompatibility..*/
1bfc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 74 68  .void sqlite3_th
1bfd0 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 76 6f 69  read_cleanup(voi
1bfe0 64 29 7b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  d){.}.#endif../*
1bff0 0a 2a 2a 20 52 65 74 75 72 6e 20 6d 65 74 61 20  .** Return meta 
1c000 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
1c010 74 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 6c  t a specific col
1c020 75 6d 6e 20 6f 66 20 61 20 64 61 74 61 62 61 73  umn of a databas
1c030 65 20 74 61 62 6c 65 2e 0a 2a 2a 20 53 65 65 20  e table..** See 
1c040 63 6f 6d 6d 65 6e 74 20 69 6e 20 73 71 6c 69 74  comment in sqlit
1c050 65 33 2e 68 20 28 73 71 6c 69 74 65 2e 68 2e 69  e3.h (sqlite.h.i
1c060 6e 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  n) for details..
1c070 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74  */.int sqlite3_t
1c080 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
1c090 64 61 74 61 28 0a 20 20 73 71 6c 69 74 65 33 20  data(.  sqlite3 
1c0a0 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
1c0b0 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
1c0c0 6e 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f  n handle */.  co
1c0d0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d  nst char *zDbNam
1c0e0 65 2c 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74  e,        /* Dat
1c0f0 61 62 61 73 65 20 6e 61 6d 65 20 6f 72 20 4e 55  abase name or NU
1c100 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  LL */.  const ch
1c110 61 72 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20  ar *zTableName, 
1c120 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d      /* Table nam
1c130 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
1c140 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  r *zColumnName, 
1c150 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1c160 65 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73  e */.  char cons
1c170 74 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20  t **pzDataType, 
1c180 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 44 65     /* OUTPUT: De
1c190 63 6c 61 72 65 64 20 64 61 74 61 20 74 79 70 65  clared data type
1c1a0 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74   */.  char const
1c1b0 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 20 20   **pzCollSeq,   
1c1c0 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 43 6f 6c    /* OUTPUT: Col
1c1d0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
1c1e0 6e 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  name */.  int *p
1c1f0 4e 6f 74 4e 75 6c 6c 2c 20 20 20 20 20 20 20 20  NotNull,        
1c200 20 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a        /* OUTPUT:
1c210 20 54 72 75 65 20 69 66 20 4e 4f 54 20 4e 55 4c   True if NOT NUL
1c220 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 69  L constraint exi
1c230 73 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 50  sts */.  int *pP
1c240 72 69 6d 61 72 79 4b 65 79 2c 20 20 20 20 20 20  rimaryKey,      
1c250 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20       /* OUTPUT: 
1c260 54 72 75 65 20 69 66 20 63 6f 6c 75 6d 6e 20 70  True if column p
1c270 61 72 74 20 6f 66 20 50 4b 20 2a 2f 0a 20 20 69  art of PK */.  i
1c280 6e 74 20 2a 70 41 75 74 6f 69 6e 63 20 20 20 20  nt *pAutoinc    
1c290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55             /* OU
1c2a0 54 50 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f  TPUT: True if co
1c2b0 6c 75 6d 6e 20 69 73 20 61 75 74 6f 2d 69 6e 63  lumn is auto-inc
1c2c0 72 65 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  rement */.){.  i
1c2d0 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
1c2e0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 54 61  ErrMsg = 0;.  Ta
1c2f0 62 6c 65 20 2a 70 54 61 62 20 3d 20 30 3b 0a 20  ble *pTab = 0;. 
1c300 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 20 3d 20   Column *pCol = 
1c310 30 3b 0a 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20  0;.  int iCol = 
1c320 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  0;.  char const 
1c330 2a 7a 44 61 74 61 54 79 70 65 20 3d 20 30 3b 0a  *zDataType = 0;.
1c340 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 43    char const *zC
1c350 6f 6c 6c 53 65 71 20 3d 20 30 3b 0a 20 20 69 6e  ollSeq = 0;.  in
1c360 74 20 6e 6f 74 6e 75 6c 6c 20 3d 20 30 3b 0a 20  t notnull = 0;. 
1c370 20 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 20   int primarykey 
1c380 3d 20 30 3b 0a 20 20 69 6e 74 20 61 75 74 6f 69  = 0;.  int autoi
1c390 6e 63 20 3d 20 30 3b 0a 0a 0a 23 69 66 64 65 66  nc = 0;...#ifdef
1c3a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
1c3b0 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
1c3c0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1c3d0 63 6b 4f 6b 28 64 62 29 20 7c 7c 20 7a 54 61 62  ckOk(db) || zTab
1c3e0 6c 65 4e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20  leName==0 ){.   
1c3f0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1c400 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a  ISUSE_BKPT;.  }.
1c410 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 45 6e 73  #endif..  /* Ens
1c420 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
1c430 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
1c440 20 6c 6f 61 64 65 64 20 2a 2f 0a 20 20 73 71 6c   loaded */.  sql
1c450 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
1c460 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73  (db->mutex);.  s
1c470 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
1c480 41 6c 6c 28 64 62 29 3b 0a 20 20 72 63 20 3d 20  All(db);.  rc = 
1c490 73 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20  sqlite3Init(db, 
1c4a0 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28  &zErrMsg);.  if(
1c4b0 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29   SQLITE_OK!=rc )
1c4c0 7b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72  {.    goto error
1c4d0 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
1c4e0 4c 6f 63 61 74 65 20 74 68 65 20 74 61 62 6c 65  Locate the table
1c4f0 20 69 6e 20 71 75 65 73 74 69 6f 6e 20 2a 2f 0a   in question */.
1c500 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
1c510 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 54  FindTable(db, zT
1c520 61 62 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d  ableName, zDbNam
1c530 65 29 3b 0a 20 20 69 66 28 20 21 70 54 61 62 20  e);.  if( !pTab 
1c540 7c 7c 20 70 54 61 62 2d 3e 70 53 65 6c 65 63 74  || pTab->pSelect
1c550 20 29 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30   ){.    pTab = 0
1c560 3b 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72  ;.    goto error
1c570 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
1c580 46 69 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20  Find the column 
1c590 66 6f 72 20 77 68 69 63 68 20 69 6e 66 6f 20 69  for which info i
1c5a0 73 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a 20  s requested */. 
1c5b0 20 69 66 28 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65   if( zColumnName
1c5c0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 51 75  ==0 ){.    /* Qu
1c5d0 65 72 79 20 66 6f 72 20 65 78 69 73 74 61 6e 63  ery for existanc
1c5e0 65 20 6f 66 20 74 61 62 6c 65 20 6f 6e 6c 79 20  e of table only 
1c5f0 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1c600 66 6f 72 28 69 43 6f 6c 3d 30 3b 20 69 43 6f 6c  for(iCol=0; iCol
1c610 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 43 6f  <pTab->nCol; iCo
1c620 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 70 43 6f 6c  l++){.      pCol
1c630 20 3d 20 26 70 54 61 62 2d 3e 61 43 6f 6c 5b 69   = &pTab->aCol[i
1c640 43 6f 6c 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  Col];.      if( 
1c650 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
1c660 70 28 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a  p(pCol->zName, z
1c670 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20  ColumnName) ){. 
1c680 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1c690 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1c6a0 69 66 28 20 69 43 6f 6c 3d 3d 70 54 61 62 2d 3e  if( iCol==pTab->
1c6b0 6e 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 69 66  nCol ){.      if
1c6c0 28 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  ( HasRowid(pTab)
1c6d0 20 26 26 20 73 71 6c 69 74 65 33 49 73 52 6f 77   && sqlite3IsRow
1c6e0 69 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20  id(zColumnName) 
1c6f0 29 7b 0a 20 20 20 20 20 20 20 20 69 43 6f 6c 20  ){.        iCol 
1c700 3d 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20  = pTab->iPKey;. 
1c710 20 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 69 43         pCol = iC
1c720 6f 6c 3e 3d 30 20 3f 20 26 70 54 61 62 2d 3e 61  ol>=0 ? &pTab->a
1c730 43 6f 6c 5b 69 43 6f 6c 5d 20 3a 20 30 3b 0a 20  Col[iCol] : 0;. 
1c740 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1c750 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20      pTab = 0;.  
1c760 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72        goto error
1c770 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
1c780 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68    }.  }..  /* Th
1c790 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63  e following bloc
1c7a0 6b 20 73 74 6f 72 65 73 20 74 68 65 20 6d 65 74  k stores the met
1c7b0 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  a information th
1c7c0 61 74 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  at will be retur
1c7d0 6e 65 64 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ned.  ** to the 
1c7e0 63 61 6c 6c 65 72 20 69 6e 20 6c 6f 63 61 6c 20  caller in local 
1c7f0 76 61 72 69 61 62 6c 65 73 20 7a 44 61 74 61 54  variables zDataT
1c800 79 70 65 2c 20 7a 43 6f 6c 6c 53 65 71 2c 20 6e  ype, zCollSeq, n
1c810 6f 74 6e 75 6c 6c 2c 20 70 72 69 6d 61 72 79 6b  otnull, primaryk
1c820 65 79 0a 20 20 2a 2a 20 61 6e 64 20 61 75 74 6f  ey.  ** and auto
1c830 69 6e 63 2e 20 41 74 20 74 68 69 73 20 70 6f 69  inc. At this poi
1c840 6e 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f  nt there are two
1c850 20 70 6f 73 73 69 62 69 6c 69 74 69 65 73 3a 0a   possibilities:.
1c860 20 20 2a 2a 20 0a 20 20 2a 2a 20 20 20 20 20 31    ** .  **     1
1c870 2e 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20  . The specified 
1c880 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 61 73 20  column name was 
1c890 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
1c8a0 20 22 5f 72 6f 77 69 64 5f 22 20 0a 20 20 2a 2a   "_rowid_" .  **
1c8b0 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 72          and ther
1c8c0 65 20 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74  e is no explicit
1c8d0 6c 79 20 64 65 63 6c 61 72 65 64 20 49 50 4b 20  ly declared IPK 
1c8e0 63 6f 6c 75 6d 6e 2e 20 0a 20 20 2a 2a 0a 20 20  column. .  **.  
1c8f0 2a 2a 20 20 20 20 20 32 2e 20 54 68 65 20 74 61  **     2. The ta
1c900 62 6c 65 20 69 73 20 6e 6f 74 20 61 20 76 69 65  ble is not a vie
1c910 77 20 61 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e  w and the column
1c920 20 6e 61 6d 65 20 69 64 65 6e 74 69 66 69 65 64   name identified
1c930 20 61 6e 20 0a 20 20 2a 2a 20 20 20 20 20 20 20   an .  **       
1c940 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
1c950 61 72 65 64 20 63 6f 6c 75 6d 6e 2e 20 43 6f 70  ared column. Cop
1c960 79 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69  y meta informati
1c970 6f 6e 20 66 72 6f 6d 20 2a 70 43 6f 6c 2e 0a 20  on from *pCol.. 
1c980 20 2a 2f 20 0a 20 20 69 66 28 20 70 43 6f 6c 20   */ .  if( pCol 
1c990 29 7b 0a 20 20 20 20 7a 44 61 74 61 54 79 70 65  ){.    zDataType
1c9a0 20 3d 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e   = sqlite3Column
1c9b0 54 79 70 65 28 70 43 6f 6c 2c 30 29 3b 0a 20 20  Type(pCol,0);.  
1c9c0 20 20 7a 43 6f 6c 6c 53 65 71 20 3d 20 70 43 6f    zCollSeq = pCo
1c9d0 6c 2d 3e 7a 43 6f 6c 6c 3b 0a 20 20 20 20 6e 6f  l->zColl;.    no
1c9e0 74 6e 75 6c 6c 20 3d 20 70 43 6f 6c 2d 3e 6e 6f  tnull = pCol->no
1c9f0 74 4e 75 6c 6c 21 3d 30 3b 0a 20 20 20 20 70 72  tNull!=0;.    pr
1ca00 69 6d 61 72 79 6b 65 79 20 20 3d 20 28 70 43 6f  imarykey  = (pCo
1ca10 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  l->colFlags & CO
1ca20 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 21 3d  LFLAG_PRIMKEY)!=
1ca30 30 3b 0a 20 20 20 20 61 75 74 6f 69 6e 63 20 3d  0;.    autoinc =
1ca40 20 70 54 61 62 2d 3e 69 50 4b 65 79 3d 3d 69 43   pTab->iPKey==iC
1ca50 6f 6c 20 26 26 20 28 70 54 61 62 2d 3e 74 61 62  ol && (pTab->tab
1ca60 46 6c 61 67 73 20 26 20 54 46 5f 41 75 74 6f 69  Flags & TF_Autoi
1ca70 6e 63 72 65 6d 65 6e 74 29 21 3d 30 3b 0a 20 20  ncrement)!=0;.  
1ca80 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 61 74 61  }else{.    zData
1ca90 54 79 70 65 20 3d 20 22 49 4e 54 45 47 45 52 22  Type = "INTEGER"
1caa0 3b 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79  ;.    primarykey
1cab0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 1;.  }.  if( 
1cac0 21 7a 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20  !zCollSeq ){.   
1cad0 20 7a 43 6f 6c 6c 53 65 71 20 3d 20 73 71 6c 69   zCollSeq = sqli
1cae0 74 65 33 53 74 72 42 49 4e 41 52 59 3b 0a 20 20  te3StrBINARY;.  
1caf0 7d 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  }..error_out:.  
1cb00 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
1cb10 65 41 6c 6c 28 64 62 29 3b 0a 0a 20 20 2f 2a 20  eAll(db);..  /* 
1cb20 57 68 65 74 68 65 72 20 74 68 65 20 66 75 6e 63  Whether the func
1cb30 74 69 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65  tion call succee
1cb40 64 65 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73  ded or failed, s
1cb50 65 74 20 74 68 65 20 6f 75 74 70 75 74 20 70 61  et the output pa
1cb60 72 61 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f  rameters.  ** to
1cb70 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20   whatever their 
1cb80 6c 6f 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72  local counterpar
1cb90 74 73 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61  ts contain. If a
1cba0 6e 20 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75  n error did occu
1cbb0 72 2c 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73  r,.  ** this has
1cbc0 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a   the effect of z
1cbd0 65 72 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75  eroing all outpu
1cbe0 74 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20  t parameters..  
1cbf0 2a 2f 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54  */.  if( pzDataT
1cc00 79 70 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70  ype ) *pzDataTyp
1cc10 65 20 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20  e = zDataType;. 
1cc20 20 69 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29   if( pzCollSeq )
1cc30 20 2a 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43   *pzCollSeq = zC
1cc40 6f 6c 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e  ollSeq;.  if( pN
1cc50 6f 74 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75  otNull ) *pNotNu
1cc60 6c 6c 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20  ll = notnull;.  
1cc70 69 66 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20  if( pPrimaryKey 
1cc80 29 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d  ) *pPrimaryKey =
1cc90 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69   primarykey;.  i
1cca0 66 28 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70  f( pAutoinc ) *p
1ccb0 41 75 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e  Autoinc = autoin
1ccc0 63 3b 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45  c;..  if( SQLITE
1ccd0 5f 4f 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62  _OK==rc && !pTab
1cce0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1ccf0 62 46 72 65 65 28 64 62 2c 20 7a 45 72 72 4d 73  bFree(db, zErrMs
1cd00 67 29 3b 0a 20 20 20 20 7a 45 72 72 4d 73 67 20  g);.    zErrMsg 
1cd10 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
1cd20 28 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 74 61  (db, "no such ta
1cd30 62 6c 65 20 63 6f 6c 75 6d 6e 3a 20 25 73 2e 25  ble column: %s.%
1cd40 73 22 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 0a  s", zTableName,.
1cd50 20 20 20 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e          zColumnN
1cd60 61 6d 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ame);.    rc = S
1cd70 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
1cd80 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  .  sqlite3ErrorW
1cd90 69 74 68 4d 73 67 28 64 62 2c 20 72 63 2c 20 28  ithMsg(db, rc, (
1cda0 7a 45 72 72 4d 73 67 3f 22 25 73 22 3a 30 29 2c  zErrMsg?"%s":0),
1cdb0 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c   zErrMsg);.  sql
1cdc0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
1cdd0 45 72 72 4d 73 67 29 3b 0a 20 20 72 63 20 3d 20  ErrMsg);.  rc = 
1cde0 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
1cdf0 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65  b, rc);.  sqlite
1ce00 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
1ce10 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
1ce20 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
1ce30 53 6c 65 65 70 20 66 6f 72 20 61 20 6c 69 74 74  Sleep for a litt
1ce40 6c 65 20 77 68 69 6c 65 2e 20 20 52 65 74 75 72  le while.  Retur
1ce50 6e 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  n the amount of 
1ce60 74 69 6d 65 20 73 6c 65 70 74 2e 0a 2a 2f 0a 69  time slept..*/.i
1ce70 6e 74 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  nt sqlite3_sleep
1ce80 28 69 6e 74 20 6d 73 29 7b 0a 20 20 73 71 6c 69  (int ms){.  sqli
1ce90 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20  te3_vfs *pVfs;. 
1cea0 20 69 6e 74 20 72 63 3b 0a 20 20 70 56 66 73 20   int rc;.  pVfs 
1ceb0 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  = sqlite3_vfs_fi
1cec0 6e 64 28 30 29 3b 0a 20 20 69 66 28 20 70 56 66  nd(0);.  if( pVf
1ced0 73 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  s==0 ) return 0;
1cee0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 66 75 6e 63  ..  /* This func
1cef0 74 69 6f 6e 20 77 6f 72 6b 73 20 69 6e 20 6d 69  tion works in mi
1cf00 6c 6c 69 73 65 63 6f 6e 64 73 2c 20 62 75 74 20  lliseconds, but 
1cf10 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 4f  the underlying O
1cf20 73 53 6c 65 65 70 28 29 20 0a 20 20 2a 2a 20 41  sSleep() .  ** A
1cf30 50 49 20 75 73 65 73 20 6d 69 63 72 6f 73 65 63  PI uses microsec
1cf40 6f 6e 64 73 2e 20 48 65 6e 63 65 20 74 68 65 20  onds. Hence the 
1cf50 31 30 30 30 27 73 2e 0a 20 20 2a 2f 0a 20 20 72  1000's..  */.  r
1cf60 63 20 3d 20 28 73 71 6c 69 74 65 33 4f 73 53 6c  c = (sqlite3OsSl
1cf70 65 65 70 28 70 56 66 73 2c 20 31 30 30 30 2a 6d  eep(pVfs, 1000*m
1cf80 73 29 2f 31 30 30 30 29 3b 0a 20 20 72 65 74 75  s)/1000);.  retu
1cf90 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
1cfa0 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  Enable or disabl
1cfb0 65 20 74 68 65 20 65 78 74 65 6e 64 65 64 20 72  e the extended r
1cfc0 65 73 75 6c 74 20 63 6f 64 65 73 2e 0a 2a 2f 0a  esult codes..*/.
1cfd0 69 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 74 65  int sqlite3_exte
1cfe0 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
1cff0 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  s(sqlite3 *db, i
1d000 6e 74 20 6f 6e 6f 66 66 29 7b 0a 23 69 66 64 65  nt onoff){.#ifde
1d010 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1d020 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
1d030 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68  !sqlite3SafetyCh
1d040 65 63 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75  eckOk(db) ) retu
1d050 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
1d060 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20  _BKPT;.#endif.  
1d070 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
1d080 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
1d090 20 20 64 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20    db->errMask = 
1d0a0 6f 6e 6f 66 66 20 3f 20 30 78 66 66 66 66 66 66  onoff ? 0xffffff
1d0b0 66 66 20 3a 20 30 78 66 66 3b 0a 20 20 73 71 6c  ff : 0xff;.  sql
1d0c0 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
1d0d0 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  (db->mutex);.  r
1d0e0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1d0f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  .}../*.** Invoke
1d100 20 74 68 65 20 78 46 69 6c 65 43 6f 6e 74 72 6f   the xFileContro
1d110 6c 20 6d 65 74 68 6f 64 20 6f 6e 20 61 20 70 61  l method on a pa
1d120 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
1d130 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
1d140 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 73  3_file_control(s
1d150 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
1d160 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c  t char *zDbName,
1d170 20 69 6e 74 20 6f 70 2c 20 76 6f 69 64 20 2a 70   int op, void *p
1d180 41 72 67 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  Arg){.  int rc =
1d190 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
1d1a0 20 42 74 72 65 65 20 2a 70 42 74 72 65 65 3b 0a   Btree *pBtree;.
1d1b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1d1c0 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
1d1d0 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
1d1e0 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
1d1f0 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
1d200 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
1d210 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  dif.  sqlite3_mu
1d220 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
1d230 74 65 78 29 3b 0a 20 20 70 42 74 72 65 65 20 3d  tex);.  pBtree =
1d240 20 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f   sqlite3DbNameTo
1d250 42 74 72 65 65 28 64 62 2c 20 7a 44 62 4e 61 6d  Btree(db, zDbNam
1d260 65 29 3b 0a 20 20 69 66 28 20 70 42 74 72 65 65  e);.  if( pBtree
1d270 20 29 7b 0a 20 20 20 20 50 61 67 65 72 20 2a 70   ){.    Pager *p
1d280 50 61 67 65 72 3b 0a 20 20 20 20 73 71 6c 69 74  Pager;.    sqlit
1d290 65 33 5f 66 69 6c 65 20 2a 66 64 3b 0a 20 20 20  e3_file *fd;.   
1d2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
1d2b0 65 72 28 70 42 74 72 65 65 29 3b 0a 20 20 20 20  er(pBtree);.    
1d2c0 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
1d2d0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 72 65  BtreePager(pBtre
1d2e0 65 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  e);.    assert( 
1d2f0 70 50 61 67 65 72 21 3d 30 20 29 3b 0a 20 20 20  pPager!=0 );.   
1d300 20 66 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67   fd = sqlite3Pag
1d310 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
1d320 20 20 20 20 61 73 73 65 72 74 28 20 66 64 21 3d      assert( fd!=
1d330 30 20 29 3b 0a 20 20 20 20 69 66 28 20 6f 70 3d  0 );.    if( op=
1d340 3d 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 46 49  =SQLITE_FCNTL_FI
1d350 4c 45 5f 50 4f 49 4e 54 45 52 20 29 7b 0a 20 20  LE_POINTER ){.  
1d360 20 20 20 20 2a 28 73 71 6c 69 74 65 33 5f 66 69      *(sqlite3_fi
1d370 6c 65 2a 2a 29 70 41 72 67 20 3d 20 66 64 3b 0a  le**)pArg = fd;.
1d380 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1d390 45 5f 4f 4b 3b 0a 20 20 20 20 7d 65 6c 73 65 20  E_OK;.    }else 
1d3a0 69 66 28 20 6f 70 3d 3d 53 51 4c 49 54 45 5f 46  if( op==SQLITE_F
1d3b0 43 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52  CNTL_VFS_POINTER
1d3c0 20 29 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69   ){.      *(sqli
1d3d0 74 65 33 5f 76 66 73 2a 2a 29 70 41 72 67 20 3d  te3_vfs**)pArg =
1d3e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 56 66 73   sqlite3PagerVfs
1d3f0 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
1d400 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
1d410 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70      }else if( op
1d420 3d 3d 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4a  ==SQLITE_FCNTL_J
1d430 4f 55 52 4e 41 4c 5f 50 4f 49 4e 54 45 52 20 29  OURNAL_POINTER )
1d440 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74 65  {.      *(sqlite
1d450 33 5f 66 69 6c 65 2a 2a 29 70 41 72 67 20 3d 20  3_file**)pArg = 
1d460 73 71 6c 69 74 65 33 50 61 67 65 72 4a 72 6e 6c  sqlite3PagerJrnl
1d470 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
1d480 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1d490 4f 4b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OK;.    }else if
1d4a0 28 20 66 64 2d 3e 70 4d 65 74 68 6f 64 73 20 29  ( fd->pMethods )
1d4b0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1d4c0 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
1d4d0 6c 28 66 64 2c 20 6f 70 2c 20 70 41 72 67 29 3b  l(fd, op, pArg);
1d4e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d4f0 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 20 69  OMIT_WAL.      i
1d500 66 28 20 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  f( (rc==SQLITE_O
1d510 4b 29 26 26 28 6f 70 3d 3d 53 51 4c 49 54 45 5f  K)&&(op==SQLITE_
1d520 46 43 4e 54 4c 5f 4c 41 53 54 5f 45 52 52 4e 4f  FCNTL_LAST_ERRNO
1d530 29 26 26 28 2a 28 69 6e 74 20 2a 29 70 41 72 67  )&&(*(int *)pArg
1d540 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
1d550 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 57  sqlite3_file *pW
1d560 61 6c 46 64 20 3d 20 73 71 6c 69 74 65 33 50 61  alFd = sqlite3Pa
1d570 67 65 72 57 61 6c 46 69 6c 65 28 70 50 61 67 65  gerWalFile(pPage
1d580 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  r);.        if( 
1d590 70 57 61 6c 46 64 26 26 28 70 57 61 6c 46 64 2d  pWalFd&&(pWalFd-
1d5a0 3e 70 4d 65 74 68 6f 64 73 29 20 29 7b 0a 20 20  >pMethods) ){.  
1d5b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1d5c0 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
1d5d0 6c 28 70 57 61 6c 46 64 2c 20 6f 70 2c 20 70 41  l(pWalFd, op, pA
1d5e0 72 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rg);.        }. 
1d5f0 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
1d600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1d610 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  c = SQLITE_NOTFO
1d620 55 4e 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  UND;.    }.    s
1d630 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
1d640 28 70 42 74 72 65 65 29 3b 0a 20 20 7d 0a 20 20  (pBtree);.  }.  
1d650 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
1d660 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f   rc);.  sqlite3_
1d670 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e  mutex_leave(db->
1d680 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e  mutex);.  return
1d690 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   rc;.}../*.** In
1d6a0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 74  terface to the t
1d6b0 65 73 74 69 6e 67 20 6c 6f 67 69 63 2e 0a 2a 2f  esting logic..*/
1d6c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 65 73  .int sqlite3_tes
1d6d0 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 20 6f 70  t_control(int op
1d6e0 2c 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74 20 72 63  , ...){.  int rc
1d6f0 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 0;.#ifdef SQL
1d700 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
1d710 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
1d720 52 28 6f 70 29 3b 0a 23 65 6c 73 65 0a 20 20 76  R(op);.#else.  v
1d730 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f  a_list ap;.  va_
1d740 73 74 61 72 74 28 61 70 2c 20 6f 70 29 3b 0a 20  start(ap, op);. 
1d750 20 73 77 69 74 63 68 28 20 6f 70 20 29 7b 0a 0a   switch( op ){..
1d760 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 53 61      /*.    ** Sa
1d770 76 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ve the current s
1d780 74 61 74 65 20 6f 66 20 74 68 65 20 50 52 4e 47  tate of the PRNG
1d790 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73  ..    */.    cas
1d7a0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
1d7b0 4c 5f 50 52 4e 47 5f 53 41 56 45 3a 20 7b 0a 20  L_PRNG_SAVE: {. 
1d7c0 20 20 20 20 20 73 71 6c 69 74 65 33 50 72 6e 67       sqlite3Prng
1d7d0 53 61 76 65 53 74 61 74 65 28 29 3b 0a 20 20 20  SaveState();.   
1d7e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1d7f0 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 52  .    /*.    ** R
1d800 65 73 74 6f 72 65 20 74 68 65 20 73 74 61 74 65  estore the state
1d810 20 6f 66 20 74 68 65 20 50 52 4e 47 20 74 6f 20   of the PRNG to 
1d820 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 20 73  the last state s
1d830 61 76 65 64 20 75 73 69 6e 67 0a 20 20 20 20 2a  aved using.    *
1d840 2a 20 50 52 4e 47 5f 53 41 56 45 2e 20 20 49 66  * PRNG_SAVE.  If
1d850 20 50 52 4e 47 5f 53 41 56 45 20 68 61 73 20 6e   PRNG_SAVE has n
1d860 65 76 65 72 20 62 65 66 6f 72 65 20 62 65 65 6e  ever before been
1d870 20 63 61 6c 6c 65 64 2c 20 74 68 65 6e 0a 20 20   called, then.  
1d880 20 20 2a 2a 20 74 68 69 73 20 76 65 72 62 20 61    ** this verb a
1d890 63 74 73 20 6c 69 6b 65 20 50 52 4e 47 5f 52 45  cts like PRNG_RE
1d8a0 53 45 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  SET..    */.    
1d8b0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
1d8c0 43 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52  CTRL_PRNG_RESTOR
1d8d0 45 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  E: {.      sqlit
1d8e0 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
1d8f0 74 65 28 29 3b 0a 20 20 20 20 20 20 62 72 65 61  te();.      brea
1d900 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1d910 0a 20 20 20 20 2a 2a 20 52 65 73 65 74 20 74 68  .    ** Reset th
1d920 65 20 50 52 4e 47 20 62 61 63 6b 20 74 6f 20 69  e PRNG back to i
1d930 74 73 20 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64  ts uninitialized
1d940 20 73 74 61 74 65 2e 20 20 54 68 65 20 6e 65 78   state.  The nex
1d950 74 20 63 61 6c 6c 0a 20 20 20 20 2a 2a 20 74 6f  t call.    ** to
1d960 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
1d970 65 73 73 28 29 20 77 69 6c 6c 20 72 65 73 65 65  ess() will resee
1d980 64 20 74 68 65 20 50 52 4e 47 20 75 73 69 6e 67  d the PRNG using
1d990 20 61 20 73 69 6e 67 6c 65 20 63 61 6c 6c 0a 20   a single call. 
1d9a0 20 20 20 2a 2a 20 74 6f 20 74 68 65 20 78 52 61     ** to the xRa
1d9b0 6e 64 6f 6d 6e 65 73 73 20 6d 65 74 68 6f 64 20  ndomness method 
1d9c0 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 56  of the default V
1d9d0 46 53 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63  FS..    */.    c
1d9e0 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
1d9f0 54 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 3a 20  TRL_PRNG_RESET: 
1da00 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
1da10 72 61 6e 64 6f 6d 6e 65 73 73 28 30 2c 30 29 3b  randomness(0,0);
1da20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1da30 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20    }..    /*.    
1da40 2a 2a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74  **  sqlite3_test
1da50 5f 63 6f 6e 74 72 6f 6c 28 42 49 54 56 45 43 5f  _control(BITVEC_
1da60 54 45 53 54 2c 20 73 69 7a 65 2c 20 70 72 6f 67  TEST, size, prog
1da70 72 61 6d 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ram).    **.    
1da80 2a 2a 20 52 75 6e 20 61 20 74 65 73 74 20 61 67  ** Run a test ag
1da90 61 69 6e 73 74 20 61 20 42 69 74 76 65 63 20 6f  ainst a Bitvec o
1daa0 62 6a 65 63 74 20 6f 66 20 73 69 7a 65 2e 20 20  bject of size.  
1dab0 54 68 65 20 70 72 6f 67 72 61 6d 20 61 72 67 75  The program argu
1dac0 6d 65 6e 74 0a 20 20 20 20 2a 2a 20 69 73 20 61  ment.    ** is a
1dad0 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
1dae0 65 72 73 20 74 68 61 74 20 64 65 66 69 6e 65 73  ers that defines
1daf0 20 74 68 65 20 74 65 73 74 2e 20 20 52 65 74 75   the test.  Retu
1db00 72 6e 20 2d 31 20 6f 6e 20 61 0a 20 20 20 20 2a  rn -1 on a.    *
1db10 2a 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  * memory allocat
1db20 69 6f 6e 20 65 72 72 6f 72 2c 20 30 20 6f 6e 20  ion error, 0 on 
1db30 73 75 63 63 65 73 73 2c 20 6f 72 20 6e 6f 6e 2d  success, or non-
1db40 7a 65 72 6f 20 66 6f 72 20 61 6e 20 65 72 72 6f  zero for an erro
1db50 72 2e 0a 20 20 20 20 2a 2a 20 53 65 65 20 74 68  r..    ** See th
1db60 65 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  e sqlite3BitvecB
1db70 75 69 6c 74 69 6e 54 65 73 74 28 29 20 66 6f 72  uiltinTest() for
1db80 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1db90 72 6d 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  rmation..    */.
1dba0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1dbb0 54 45 53 54 43 54 52 4c 5f 42 49 54 56 45 43 5f  TESTCTRL_BITVEC_
1dbc0 54 45 53 54 3a 20 7b 0a 20 20 20 20 20 20 69 6e  TEST: {.      in
1dbd0 74 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61 70  t sz = va_arg(ap
1dbe0 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 6e  , int);.      in
1dbf0 74 20 2a 61 50 72 6f 67 20 3d 20 76 61 5f 61 72  t *aProg = va_ar
1dc00 67 28 61 70 2c 20 69 6e 74 2a 29 3b 0a 20 20 20  g(ap, int*);.   
1dc10 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1dc20 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
1dc30 28 73 7a 2c 20 61 50 72 6f 67 29 3b 0a 20 20 20  (sz, aProg);.   
1dc40 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1dc50 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20  .    /*.    **  
1dc60 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1dc70 74 72 6f 6c 28 46 41 55 4c 54 5f 49 4e 53 54 41  trol(FAULT_INSTA
1dc80 4c 4c 2c 20 78 43 61 6c 6c 62 61 63 6b 29 0a 20  LL, xCallback). 
1dc90 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 41 72 72     **.    ** Arr
1dca0 61 6e 67 65 20 74 6f 20 69 6e 76 6f 6b 65 20 78  ange to invoke x
1dcb0 43 61 6c 6c 62 61 63 6b 28 29 20 77 68 65 6e 65  Callback() whene
1dcc0 76 65 72 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ver sqlite3Fault
1dcd0 53 69 6d 28 29 20 69 73 20 63 61 6c 6c 65 64 2c  Sim() is called,
1dce0 0a 20 20 20 20 2a 2a 20 69 66 20 78 43 61 6c 6c  .    ** if xCall
1dcf0 62 61 63 6b 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  back is not NULL
1dd00 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1dd10 41 73 20 61 20 74 65 73 74 20 6f 66 20 74 68 65  As a test of the
1dd20 20 66 61 75 6c 74 20 73 69 6d 75 6c 61 74 6f 72   fault simulator
1dd30 20 6d 65 63 68 61 6e 69 73 6d 20 69 74 73 65 6c   mechanism itsel
1dd40 66 2c 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  f, sqlite3FaultS
1dd50 69 6d 28 30 29 0a 20 20 20 20 2a 2a 20 69 73 20  im(0).    ** is 
1dd60 63 61 6c 6c 65 64 20 69 6d 6d 65 64 69 61 74 65  called immediate
1dd70 6c 79 20 61 66 74 65 72 20 69 6e 73 74 61 6c 6c  ly after install
1dd80 69 6e 67 20 74 68 65 20 6e 65 77 20 63 61 6c 6c  ing the new call
1dd90 62 61 63 6b 20 61 6e 64 20 74 68 65 20 72 65 74  back and the ret
1dda0 75 72 6e 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65  urn.    ** value
1ddb0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 61 75   from sqlite3Fau
1ddc0 6c 74 53 69 6d 28 30 29 20 62 65 63 6f 6d 65 73  ltSim(0) becomes
1ddd0 20 74 68 65 20 72 65 74 75 72 6e 20 66 72 6f 6d   the return from
1dde0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
1ddf0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 0a  test_control()..
1de00 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20      */.    case 
1de10 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1de20 46 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 3a 20 7b  FAULT_INSTALL: {
1de30 0a 20 20 20 20 20 20 2f 2a 20 4d 53 56 43 20 69  .      /* MSVC i
1de40 73 20 70 69 63 6b 79 20 61 62 6f 75 74 20 70 75  s picky about pu
1de50 6c 6c 69 6e 67 20 66 75 6e 63 20 70 74 72 73 20  lling func ptrs 
1de60 66 72 6f 6d 20 76 61 20 6c 69 73 74 73 2e 0a 20  from va lists.. 
1de70 20 20 20 20 20 2a 2a 20 68 74 74 70 3a 2f 2f 73       ** http://s
1de80 75 70 70 6f 72 74 2e 6d 69 63 72 6f 73 6f 66 74  upport.microsoft
1de90 2e 63 6f 6d 2f 6b 62 2f 34 37 39 36 31 0a 20 20  .com/kb/47961.  
1dea0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 47 6c      ** sqlite3Gl
1deb0 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 54 65 73 74  obalConfig.xTest
1dec0 43 61 6c 6c 62 61 63 6b 20 3d 20 76 61 5f 61 72  Callback = va_ar
1ded0 67 28 61 70 2c 20 69 6e 74 28 2a 29 28 69 6e 74  g(ap, int(*)(int
1dee0 29 29 3b 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ));.      */.   
1def0 20 20 20 74 79 70 65 64 65 66 20 69 6e 74 28 2a     typedef int(*
1df00 54 45 53 54 43 41 4c 4c 42 41 43 4b 46 55 4e 43  TESTCALLBACKFUNC
1df10 5f 74 29 28 69 6e 74 29 3b 0a 20 20 20 20 20 20  _t)(int);.      
1df20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
1df30 66 69 67 2e 78 54 65 73 74 43 61 6c 6c 62 61 63  fig.xTestCallbac
1df40 6b 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 54  k = va_arg(ap, T
1df50 45 53 54 43 41 4c 4c 42 41 43 4b 46 55 4e 43 5f  ESTCALLBACKFUNC_
1df60 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  t);.      rc = s
1df70 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 30  qlite3FaultSim(0
1df80 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1df90 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20      }..    /*.  
1dfa0 20 20 2a 2a 20 20 73 71 6c 69 74 65 33 5f 74 65    **  sqlite3_te
1dfb0 73 74 5f 63 6f 6e 74 72 6f 6c 28 42 45 4e 49 47  st_control(BENIG
1dfc0 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 2c 20  N_MALLOC_HOOKS, 
1dfd0 78 42 65 67 69 6e 2c 20 78 45 6e 64 29 0a 20 20  xBegin, xEnd).  
1dfe0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 65 67 69    **.    ** Regi
1dff0 73 74 65 72 20 68 6f 6f 6b 73 20 74 6f 20 63 61  ster hooks to ca
1e000 6c 6c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ll to indicate w
1e010 68 69 63 68 20 6d 61 6c 6c 6f 63 28 29 20 66 61  hich malloc() fa
1e020 69 6c 75 72 65 73 20 0a 20 20 20 20 2a 2a 20 61  ilures .    ** a
1e030 72 65 20 62 65 6e 69 67 6e 2e 0a 20 20 20 20 2a  re benign..    *
1e040 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1e050 45 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47  E_TESTCTRL_BENIG
1e060 4e 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 20  N_MALLOC_HOOKS: 
1e070 7b 0a 20 20 20 20 20 20 74 79 70 65 64 65 66 20  {.      typedef 
1e080 76 6f 69 64 20 28 2a 76 6f 69 64 5f 66 75 6e 63  void (*void_func
1e090 74 69 6f 6e 29 28 76 6f 69 64 29 3b 0a 20 20 20  tion)(void);.   
1e0a0 20 20 20 76 6f 69 64 5f 66 75 6e 63 74 69 6f 6e     void_function
1e0b0 20 78 42 65 6e 69 67 6e 42 65 67 69 6e 3b 0a 20   xBenignBegin;. 
1e0c0 20 20 20 20 20 76 6f 69 64 5f 66 75 6e 63 74 69       void_functi
1e0d0 6f 6e 20 78 42 65 6e 69 67 6e 45 6e 64 3b 0a 20  on xBenignEnd;. 
1e0e0 20 20 20 20 20 78 42 65 6e 69 67 6e 42 65 67 69       xBenignBegi
1e0f0 6e 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76  n = va_arg(ap, v
1e100 6f 69 64 5f 66 75 6e 63 74 69 6f 6e 29 3b 0a 20  oid_function);. 
1e110 20 20 20 20 20 78 42 65 6e 69 67 6e 45 6e 64 20       xBenignEnd 
1e120 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f 69  = va_arg(ap, voi
1e130 64 5f 66 75 6e 63 74 69 6f 6e 29 3b 0a 20 20 20  d_function);.   
1e140 20 20 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e     sqlite3Benign
1e150 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 78 42 65 6e  MallocHooks(xBen
1e160 69 67 6e 42 65 67 69 6e 2c 20 78 42 65 6e 69 67  ignBegin, xBenig
1e170 6e 45 6e 64 29 3b 0a 20 20 20 20 20 20 62 72 65  nEnd);.      bre
1e180 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ak;.    }..    /
1e190 2a 0a 20 20 20 20 2a 2a 20 20 73 71 6c 69 74 65  *.    **  sqlite
1e1a0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
1e1b0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
1e1c0 45 4e 44 49 4e 47 5f 42 59 54 45 2c 20 75 6e 73  ENDING_BYTE, uns
1e1d0 69 67 6e 65 64 20 69 6e 74 20 58 29 0a 20 20 20  igned int X).   
1e1e0 20 2a 2a 0a 20 20 20 20 2a 2a 20 53 65 74 20 74   **.    ** Set t
1e1f0 68 65 20 50 45 4e 44 49 4e 47 20 62 79 74 65 20  he PENDING byte 
1e200 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
1e210 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 69 66  the argument, if
1e220 20 58 3e 30 2e 0a 20 20 20 20 2a 2a 20 4d 61 6b   X>0..    ** Mak
1e230 65 20 6e 6f 20 63 68 61 6e 67 65 73 20 69 66 20  e no changes if 
1e240 58 3d 3d 30 2e 20 20 52 65 74 75 72 6e 20 74 68  X==0.  Return th
1e250 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70  e value of the p
1e260 65 6e 64 69 6e 67 20 62 79 74 65 0a 20 20 20 20  ending byte.    
1e270 2a 2a 20 61 73 20 69 74 20 65 78 69 73 74 69 6e  ** as it existin
1e280 67 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f  g before this ro
1e290 75 74 69 6e 65 20 77 61 73 20 63 61 6c 6c 65 64  utine was called
1e2a0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1e2b0 49 4d 50 4f 52 54 41 4e 54 3a 20 20 43 68 61 6e  IMPORTANT:  Chan
1e2c0 67 69 6e 67 20 74 68 65 20 50 45 4e 44 49 4e 47  ging the PENDING
1e2d0 20 62 79 74 65 20 66 72 6f 6d 20 30 78 34 30 30   byte from 0x400
1e2e0 30 30 30 30 30 20 72 65 73 75 6c 74 73 20 69 6e  00000 results in
1e2f0 0a 20 20 20 20 2a 2a 20 61 6e 20 69 6e 63 6f 6d  .    ** an incom
1e300 70 61 74 69 62 6c 65 20 64 61 74 61 62 61 73 65  patible database
1e310 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 43   file format.  C
1e320 68 61 6e 67 69 6e 67 20 74 68 65 20 50 45 4e 44  hanging the PEND
1e330 49 4e 47 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  ING byte.    ** 
1e340 77 68 69 6c 65 20 61 6e 79 20 64 61 74 61 62 61  while any databa
1e350 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
1e360 20 6f 70 65 6e 20 72 65 73 75 6c 74 73 20 69 6e   open results in
1e370 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 20   undefined and. 
1e380 20 20 20 2a 2a 20 64 65 6c 65 74 65 72 69 6f 75     ** deleteriou
1e390 73 20 62 65 68 61 76 69 6f 72 2e 0a 20 20 20 20  s behavior..    
1e3a0 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  */.    case SQLI
1e3b0 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44  TE_TESTCTRL_PEND
1e3c0 49 4e 47 5f 42 59 54 45 3a 20 7b 0a 20 20 20 20  ING_BYTE: {.    
1e3d0 20 20 72 63 20 3d 20 50 45 4e 44 49 4e 47 5f 42    rc = PENDING_B
1e3e0 59 54 45 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  YTE;.#ifndef SQL
1e3f0 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20  ITE_OMIT_WSD.   
1e400 20 20 20 7b 0a 20 20 20 20 20 20 20 20 75 6e 73     {.        uns
1e410 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 56 61 6c  igned int newVal
1e420 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 75 6e   = va_arg(ap, un
1e430 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 20 20 20  signed int);.   
1e440 20 20 20 20 20 69 66 28 20 6e 65 77 56 61 6c 20       if( newVal 
1e450 29 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  ) sqlite3Pending
1e460 42 79 74 65 20 3d 20 6e 65 77 56 61 6c 3b 0a 20  Byte = newVal;. 
1e470 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20       }.#endif.  
1e480 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1e490 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20  ..    /*.    ** 
1e4a0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1e4b0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1e4c0 54 43 54 52 4c 5f 41 53 53 45 52 54 2c 20 69 6e  TCTRL_ASSERT, in
1e4d0 74 20 58 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20  t X).    **.    
1e4e0 2a 2a 20 54 68 69 73 20 61 63 74 69 6f 6e 20 70  ** This action p
1e4f0 72 6f 76 69 64 65 73 20 61 20 72 75 6e 2d 74 69  rovides a run-ti
1e500 6d 65 20 74 65 73 74 20 74 6f 20 73 65 65 20 77  me test to see w
1e510 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 20 20  hether or not.  
1e520 20 20 2a 2a 20 61 73 73 65 72 74 28 29 20 77 61    ** assert() wa
1e530 73 20 65 6e 61 62 6c 65 64 20 61 74 20 63 6f 6d  s enabled at com
1e540 70 69 6c 65 2d 74 69 6d 65 2e 20 20 49 66 20 58  pile-time.  If X
1e550 20 69 73 20 74 72 75 65 20 61 6e 64 20 61 73 73   is true and ass
1e560 65 72 74 28 29 0a 20 20 20 20 2a 2a 20 69 73 20  ert().    ** is 
1e570 65 6e 61 62 6c 65 64 2c 20 74 68 65 6e 20 74 68  enabled, then th
1e580 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  e return value i
1e590 73 20 74 72 75 65 2e 20 20 49 66 20 58 20 69 73  s true.  If X is
1e5a0 20 74 72 75 65 20 61 6e 64 0a 20 20 20 20 2a 2a   true and.    **
1e5b0 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
1e5c0 61 62 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 20  abled, then the 
1e5d0 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
1e5e0 7a 65 72 6f 2e 20 20 49 66 20 58 20 69 73 0a 20  zero.  If X is. 
1e5f0 20 20 20 2a 2a 20 66 61 6c 73 65 20 61 6e 64 20     ** false and 
1e600 61 73 73 65 72 74 28 29 20 69 73 20 65 6e 61 62  assert() is enab
1e610 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 20 61 73  led, then the as
1e620 73 65 72 74 69 6f 6e 20 66 69 72 65 73 20 61 6e  sertion fires an
1e630 64 20 74 68 65 0a 20 20 20 20 2a 2a 20 70 72 6f  d the.    ** pro
1e640 63 65 73 73 20 61 62 6f 72 74 73 2e 20 20 49 66  cess aborts.  If
1e650 20 58 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20   X is false and 
1e660 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61  assert() is disa
1e670 62 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20  bled, then the. 
1e680 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 76 61 6c     ** return val
1e690 75 65 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20  ue is zero..    
1e6a0 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  */.    case SQLI
1e6b0 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45  TE_TESTCTRL_ASSE
1e6c0 52 54 3a 20 7b 0a 20 20 20 20 20 20 76 6f 6c 61  RT: {.      vola
1e6d0 74 69 6c 65 20 69 6e 74 20 78 20 3d 20 30 3b 0a  tile int x = 0;.
1e6e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 2f 2a        assert( /*
1e6f0 73 69 64 65 2d 65 66 66 65 63 74 73 2d 6f 6b 2a  side-effects-ok*
1e700 2f 20 28 78 20 3d 20 76 61 5f 61 72 67 28 61 70  / (x = va_arg(ap
1e710 2c 69 6e 74 29 29 21 3d 30 20 29 3b 0a 20 20 20  ,int))!=0 );.   
1e720 20 20 20 72 63 20 3d 20 78 3b 0a 20 20 20 20 20     rc = x;.     
1e730 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 0a   break;.    }...
1e740 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 73      /*.    **  s
1e750 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1e760 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
1e770 54 52 4c 5f 41 4c 57 41 59 53 2c 20 69 6e 74 20  TRL_ALWAYS, int 
1e780 58 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  X).    **.    **
1e790 20 54 68 69 73 20 61 63 74 69 6f 6e 20 70 72 6f   This action pro
1e7a0 76 69 64 65 73 20 61 20 72 75 6e 2d 74 69 6d 65  vides a run-time
1e7b0 20 74 65 73 74 20 74 6f 20 73 65 65 20 68 6f 77   test to see how
1e7c0 20 74 68 65 20 41 4c 57 41 59 53 20 61 6e 64 0a   the ALWAYS and.
1e7d0 20 20 20 20 2a 2a 20 4e 45 56 45 52 20 6d 61 63      ** NEVER mac
1e7e0 72 6f 73 20 77 65 72 65 20 64 65 66 69 6e 65 64  ros were defined
1e7f0 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
1e800 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1e810 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  The return value
1e820 20 69 73 20 41 4c 57 41 59 53 28 58 29 2e 20 20   is ALWAYS(X).  
1e830 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1e840 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74  he recommended t
1e850 65 73 74 20 69 73 20 58 3d 3d 32 2e 20 20 49 66  est is X==2.  If
1e860 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
1e870 65 20 69 73 20 32 2c 20 74 68 61 74 20 6d 65 61  e is 2, that mea
1e880 6e 73 0a 20 20 20 20 2a 2a 20 41 4c 57 41 59 53  ns.    ** ALWAYS
1e890 28 29 20 61 6e 64 20 4e 45 56 45 52 28 29 20 61  () and NEVER() a
1e8a0 72 65 20 62 6f 74 68 20 6e 6f 2d 6f 70 20 70 61  re both no-op pa
1e8b0 73 73 2d 74 68 72 6f 75 67 68 20 6d 61 63 72 6f  ss-through macro
1e8c0 73 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 0a  s, which is the.
1e8d0 20 20 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 73      ** default s
1e8e0 65 74 74 69 6e 67 2e 20 20 49 66 20 74 68 65 20  etting.  If the 
1e8f0 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
1e900 31 2c 20 74 68 65 6e 20 41 4c 57 41 59 53 28 29  1, then ALWAYS()
1e910 20 69 73 20 65 69 74 68 65 72 0a 20 20 20 20 2a   is either.    *
1e920 2a 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20  * hard-coded to 
1e930 74 72 75 65 20 6f 72 20 65 6c 73 65 20 69 74 20  true or else it 
1e940 61 73 73 65 72 74 73 20 69 66 20 69 74 73 20 61  asserts if its a
1e950 72 67 75 6d 65 6e 74 20 69 73 20 66 61 6c 73 65  rgument is false
1e960 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 66 69 72  ..    ** The fir
1e970 73 74 20 62 65 68 61 76 69 6f 72 20 28 68 61 72  st behavior (har
1e980 64 2d 63 6f 64 65 64 20 74 6f 20 74 72 75 65 29  d-coded to true)
1e990 20 69 73 20 74 68 65 20 63 61 73 65 20 69 66 0a   is the case if.
1e9a0 20 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f 54 45      ** SQLITE_TE
1e9b0 53 54 43 54 52 4c 5f 41 53 53 45 52 54 20 73 68  STCTRL_ASSERT sh
1e9c0 6f 77 73 20 74 68 61 74 20 61 73 73 65 72 74 28  ows that assert(
1e9d0 29 20 69 73 20 64 69 73 61 62 6c 65 64 20 61 6e  ) is disabled an
1e9e0 64 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  d the second.   
1e9f0 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 28 61 73   ** behavior (as
1ea00 73 65 72 74 20 69 66 20 74 68 65 20 61 72 67 75  sert if the argu
1ea10 6d 65 6e 74 20 74 6f 20 41 4c 57 41 59 53 28 29  ment to ALWAYS()
1ea20 20 69 73 20 66 61 6c 73 65 29 20 69 73 20 74 68   is false) is th
1ea30 65 20 63 61 73 65 20 69 66 0a 20 20 20 20 2a 2a  e case if.    **
1ea40 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1ea50 5f 41 53 53 45 52 54 20 73 68 6f 77 73 20 74 68  _ASSERT shows th
1ea60 61 74 20 61 73 73 65 72 74 28 29 20 69 73 20 65  at assert() is e
1ea70 6e 61 62 6c 65 64 2e 0a 20 20 20 20 2a 2a 0a 20  nabled..    **. 
1ea80 20 20 20 2a 2a 20 54 68 65 20 72 75 6e 2d 74 69     ** The run-ti
1ea90 6d 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  me test procedur
1eaa0 65 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d  e might look som
1eab0 65 74 68 69 6e 67 20 6c 69 6b 65 20 74 68 69 73  ething like this
1eac0 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  :.    **.    ** 
1ead0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74     if( sqlite3_t
1eae0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
1eaf0 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41  TE_TESTCTRL_ALWA
1eb00 59 53 2c 20 32 29 3d 3d 32 20 29 7b 0a 20 20 20  YS, 2)==2 ){.   
1eb10 20 2a 2a 20 20 20 20 20 20 2f 2f 20 41 4c 57 41   **      // ALWA
1eb20 59 53 28 29 20 61 6e 64 20 4e 45 56 45 52 28 29  YS() and NEVER()
1eb30 20 61 72 65 20 6e 6f 2d 6f 70 20 70 61 73 73 2d   are no-op pass-
1eb40 74 68 72 6f 75 67 68 20 6d 61 63 72 6f 73 0a 20  through macros. 
1eb50 20 20 20 2a 2a 20 20 20 20 7d 65 6c 73 65 20 69     **    }else i
1eb60 66 28 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  f( sqlite3_test_
1eb70 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
1eb80 45 53 54 43 54 52 4c 5f 41 53 53 45 52 54 2c 20  ESTCTRL_ASSERT, 
1eb90 31 29 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  1) ){.    **    
1eba0 20 20 2f 2f 20 41 4c 57 41 59 53 28 78 29 20 61    // ALWAYS(x) a
1ebb0 73 73 65 72 74 73 20 74 68 61 74 20 78 20 69 73  sserts that x is
1ebc0 20 74 72 75 65 2e 20 4e 45 56 45 52 28 78 29 20   true. NEVER(x) 
1ebd0 61 73 73 65 72 74 73 20 78 20 69 73 20 66 61 6c  asserts x is fal
1ebe0 73 65 2e 0a 20 20 20 20 2a 2a 20 20 20 20 7d 65  se..    **    }e
1ebf0 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
1ec00 20 2f 2f 20 41 4c 57 41 59 53 28 78 29 20 69 73   // ALWAYS(x) is
1ec10 20 61 20 63 6f 6e 73 74 61 6e 74 20 31 2e 20 20   a constant 1.  
1ec20 4e 45 56 45 52 28 78 29 20 69 73 20 61 20 63 6f  NEVER(x) is a co
1ec30 6e 73 74 61 6e 74 20 30 2e 0a 20 20 20 20 2a 2a  nstant 0..    **
1ec40 20 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20      }.    */.   
1ec50 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
1ec60 54 43 54 52 4c 5f 41 4c 57 41 59 53 3a 20 7b 0a  TCTRL_ALWAYS: {.
1ec70 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 76 61        int x = va
1ec80 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
1ec90 20 20 20 20 72 63 20 3d 20 41 4c 57 41 59 53 28      rc = ALWAYS(
1eca0 78 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  x);.      break;
1ecb0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20  .    }..    /*. 
1ecc0 20 20 20 2a 2a 20 20 20 73 71 6c 69 74 65 33 5f     **   sqlite3_
1ecd0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
1ece0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54  ITE_TESTCTRL_BYT
1ecf0 45 4f 52 44 45 52 29 3b 0a 20 20 20 20 2a 2a 0a  EORDER);.    **.
1ed00 20 20 20 20 2a 2a 20 54 68 65 20 69 6e 74 65 67      ** The integ
1ed10 65 72 20 72 65 74 75 72 6e 65 64 20 72 65 76 65  er returned reve
1ed20 61 6c 73 20 74 68 65 20 62 79 74 65 2d 6f 72 64  als the byte-ord
1ed30 65 72 20 6f 66 20 74 68 65 20 63 6f 6d 70 75 74  er of the comput
1ed40 65 72 20 6f 6e 20 77 68 69 63 68 0a 20 20 20 20  er on which.    
1ed50 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e  ** SQLite is run
1ed60 6e 69 6e 67 3a 0a 20 20 20 20 2a 2a 0a 20 20 20  ning:.    **.   
1ed70 20 2a 2a 20 20 20 20 20 20 20 31 20 20 20 20 20   **       1     
1ed80 62 69 67 2d 65 6e 64 69 61 6e 2c 20 20 20 20 64  big-endian,    d
1ed90 65 74 65 72 6d 69 6e 65 64 20 61 74 20 72 75 6e  etermined at run
1eda0 2d 74 69 6d 65 0a 20 20 20 20 2a 2a 20 20 20 20  -time.    **    
1edb0 20 20 31 30 20 20 20 20 20 6c 69 74 74 6c 65 2d    10     little-
1edc0 65 6e 64 69 61 6e 2c 20 64 65 74 65 72 6d 69 6e  endian, determin
1edd0 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20  ed at run-time. 
1ede0 20 20 20 2a 2a 20 20 34 33 32 31 30 31 20 20 20     **  432101   
1edf0 20 20 62 69 67 2d 65 6e 64 69 61 6e 2c 20 20 20    big-endian,   
1ee00 20 64 65 74 65 72 6d 69 6e 65 64 20 61 74 20 63   determined at c
1ee10 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 20 20 20 20  ompile-time.    
1ee20 2a 2a 20 20 31 32 33 34 31 30 20 20 20 20 20 6c  **  123410     l
1ee30 69 74 74 6c 65 2d 65 6e 64 69 61 6e 2c 20 64 65  ittle-endian, de
1ee40 74 65 72 6d 69 6e 65 64 20 61 74 20 63 6f 6d 70  termined at comp
1ee50 69 6c 65 2d 74 69 6d 65 0a 20 20 20 20 2a 2f 20  ile-time.    */ 
1ee60 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1ee70 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52  _TESTCTRL_BYTEOR
1ee80 44 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63 20  DER: {.      rc 
1ee90 3d 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  = SQLITE_BYTEORD
1eea0 45 52 2a 31 30 30 20 2b 20 53 51 4c 49 54 45 5f  ER*100 + SQLITE_
1eeb0 4c 49 54 54 4c 45 45 4e 44 49 41 4e 2a 31 30 20  LITTLEENDIAN*10 
1eec0 2b 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  + SQLITE_BIGENDI
1eed0 41 4e 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  AN;.      break;
1eee0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20  .    }..    /*  
1eef0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1ef00 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1ef10 54 43 54 52 4c 5f 52 45 53 45 52 56 45 2c 20 73  TCTRL_RESERVE, s
1ef20 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
1ef30 4e 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  N).    **.    **
1ef40 20 53 65 74 20 74 68 65 20 6e 52 65 73 65 72 76   Set the nReserv
1ef50 65 20 73 69 7a 65 20 74 6f 20 4e 20 66 6f 72 20  e size to N for 
1ef60 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1ef70 65 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  e on the databas
1ef80 65 0a 20 20 20 20 2a 2a 20 63 6f 6e 6e 65 63 74  e.    ** connect
1ef90 69 6f 6e 20 64 62 2e 0a 20 20 20 20 2a 2f 0a 20  ion db..    */. 
1efa0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
1efb0 45 53 54 43 54 52 4c 5f 52 45 53 45 52 56 45 3a  ESTCTRL_RESERVE:
1efc0 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
1efd0 20 2a 64 62 20 3d 20 76 61 5f 61 72 67 28 61 70   *db = va_arg(ap
1efe0 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  , sqlite3*);.   
1eff0 20 20 20 69 6e 74 20 78 20 3d 20 76 61 5f 61 72     int x = va_ar
1f000 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20  g(ap,int);.     
1f010 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
1f020 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
1f030 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
1f040 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 64  reeSetPageSize(d
1f050 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 30  b->aDb[0].pBt, 0
1f060 2c 20 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , x, 0);.      s
1f070 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
1f080 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
1f090 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1f0a0 7d 0a 0a 20 20 20 20 2f 2a 20 20 73 71 6c 69 74  }..    /*  sqlit
1f0b0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
1f0c0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1f0d0 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 20 73  OPTIMIZATIONS, s
1f0e0 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
1f0f0 4e 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  N).    **.    **
1f100 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62   Enable or disab
1f110 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
1f120 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 74 65 73  izations for tes
1f130 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 20 20  ting purposes.  
1f140 54 68 65 20 0a 20 20 20 20 2a 2a 20 61 72 67 75  The .    ** argu
1f150 6d 65 6e 74 20 4e 20 69 73 20 61 20 62 69 74 6d  ment N is a bitm
1f160 61 73 6b 20 6f 66 20 6f 70 74 69 6d 69 7a 61 74  ask of optimizat
1f170 69 6f 6e 73 20 74 6f 20 62 65 20 64 69 73 61 62  ions to be disab
1f180 6c 65 64 2e 20 20 46 6f 72 20 6e 6f 72 6d 61 6c  led.  For normal
1f190 0a 20 20 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  .    ** operatio
1f1a0 6e 20 4e 20 73 68 6f 75 6c 64 20 62 65 20 30 2e  n N should be 0.
1f1b0 20 20 54 68 65 20 69 64 65 61 20 69 73 20 74 68    The idea is th
1f1c0 61 74 20 61 20 74 65 73 74 20 70 72 6f 67 72 61  at a test progra
1f1d0 6d 20 28 6c 69 6b 65 20 74 68 65 0a 20 20 20 20  m (like the.    
1f1e0 2a 2a 20 53 51 4c 20 4c 6f 67 69 63 20 54 65 73  ** SQL Logic Tes
1f1f0 74 20 6f 72 20 53 4c 54 20 74 65 73 74 20 6d 6f  t or SLT test mo
1f200 64 75 6c 65 29 20 63 61 6e 20 72 75 6e 20 74 68  dule) can run th
1f210 65 20 73 61 6d 65 20 53 51 4c 20 6d 75 6c 74 69  e same SQL multi
1f220 70 6c 65 20 74 69 6d 65 73 0a 20 20 20 20 2a 2a  ple times.    **
1f230 20 77 69 74 68 20 76 61 72 69 6f 75 73 20 6f 70   with various op
1f240 74 69 6d 69 7a 61 74 69 6f 6e 73 20 64 69 73 61  timizations disa
1f250 62 6c 65 64 20 74 6f 20 76 65 72 69 66 79 20 74  bled to verify t
1f260 68 61 74 20 74 68 65 20 73 61 6d 65 20 61 6e 73  hat the same ans
1f270 77 65 72 0a 20 20 20 20 2a 2a 20 69 73 20 6f 62  wer.    ** is ob
1f280 74 61 69 6e 65 64 20 69 6e 20 65 76 65 72 79 20  tained in every 
1f290 63 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  case..    */.   
1f2a0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
1f2b0 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
1f2c0 4f 4e 53 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ONS: {.      sql
1f2d0 69 74 65 33 20 2a 64 62 20 3d 20 76 61 5f 61 72  ite3 *db = va_ar
1f2e0 67 28 61 70 2c 20 73 71 6c 69 74 65 33 2a 29 3b  g(ap, sqlite3*);
1f2f0 0a 20 20 20 20 20 20 64 62 2d 3e 64 62 4f 70 74  .      db->dbOpt
1f300 46 6c 61 67 73 20 3d 20 28 75 31 36 29 28 76 61  Flags = (u16)(va
1f310 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 20 26 20  _arg(ap, int) & 
1f320 30 78 66 66 66 66 29 3b 0a 20 20 20 20 20 20 62  0xffff);.      b
1f330 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 23 69 66  reak;.    }..#if
1f340 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b 45 59  def SQLITE_N_KEY
1f350 57 4f 52 44 0a 20 20 20 20 2f 2a 20 73 71 6c 69  WORD.    /* sqli
1f360 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1f370 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
1f380 5f 49 53 4b 45 59 57 4f 52 44 2c 20 63 6f 6e 73  _ISKEYWORD, cons
1f390 74 20 63 68 61 72 20 2a 7a 57 6f 72 64 29 0a 20  t char *zWord). 
1f3a0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
1f3b0 7a 57 6f 72 64 20 69 73 20 61 20 6b 65 79 77 6f  zWord is a keywo
1f3c0 72 64 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79  rd recognized by
1f3d0 20 74 68 65 20 70 61 72 73 65 72 2c 20 74 68 65   the parser, the
1f3e0 6e 20 72 65 74 75 72 6e 20 74 68 65 0a 20 20 20  n return the.   
1f3f0 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65   ** number of ke
1f400 79 77 6f 72 64 73 2e 20 20 4f 72 20 69 66 20 7a  ywords.  Or if z
1f410 57 6f 72 64 20 69 73 20 6e 6f 74 20 61 20 6b 65  Word is not a ke
1f420 79 77 6f 72 64 2c 20 72 65 74 75 72 6e 20 30 2e  yword, return 0.
1f430 0a 20 20 20 20 2a 2a 20 0a 20 20 20 20 2a 2a 20  .    ** .    ** 
1f440 54 68 69 73 20 74 65 73 74 20 66 65 61 74 75 72  This test featur
1f450 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  e is only availa
1f460 62 6c 65 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ble in the amalg
1f470 61 6d 61 74 69 6f 6e 20 73 69 6e 63 65 0a 20 20  amation since.  
1f480 20 20 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f    ** the SQLITE_
1f490 4e 5f 4b 45 59 57 4f 52 44 20 6d 61 63 72 6f 20  N_KEYWORD macro 
1f4a0 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 20 69  is not defined i
1f4b0 6e 20 74 68 69 73 20 66 69 6c 65 20 69 66 20 53  n this file if S
1f4c0 51 4c 69 74 65 0a 20 20 20 20 2a 2a 20 69 73 20  QLite.    ** is 
1f4d0 62 75 69 6c 74 20 75 73 69 6e 67 20 73 65 70 61  built using sepa
1f4e0 72 61 74 65 20 73 6f 75 72 63 65 20 66 69 6c 65  rate source file
1f4f0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61  s..    */.    ca
1f500 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
1f510 52 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 20 7b 0a  RL_ISKEYWORD: {.
1f520 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
1f530 20 2a 7a 57 6f 72 64 20 3d 20 76 61 5f 61 72 67   *zWord = va_arg
1f540 28 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  (ap, const char*
1f550 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  );.      int n =
1f560 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
1f570 28 7a 57 6f 72 64 29 3b 0a 20 20 20 20 20 20 72  (zWord);.      r
1f580 63 20 3d 20 28 73 71 6c 69 74 65 33 4b 65 79 77  c = (sqlite3Keyw
1f590 6f 72 64 43 6f 64 65 28 28 75 38 2a 29 7a 57 6f  ordCode((u8*)zWo
1f5a0 72 64 2c 20 6e 29 21 3d 54 4b 5f 49 44 29 20 3f  rd, n)!=TK_ID) ?
1f5b0 20 53 51 4c 49 54 45 5f 4e 5f 4b 45 59 57 4f 52   SQLITE_N_KEYWOR
1f5c0 44 20 3a 20 30 3b 0a 20 20 20 20 20 20 62 72 65  D : 0;.      bre
1f5d0 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ak;.    }.#endif
1f5e0 20 0a 0a 20 20 20 20 2f 2a 20 73 71 6c 69 74 65   ..    /* sqlite
1f5f0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
1f600 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 53  QLITE_TESTCTRL_S
1f610 43 52 41 54 43 48 4d 41 4c 4c 4f 43 2c 20 73 7a  CRATCHMALLOC, sz
1f620 2c 20 26 70 4e 65 77 2c 20 70 46 72 65 65 29 3b  , &pNew, pFree);
1f630 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 50  .    **.    ** P
1f640 61 73 73 20 70 46 72 65 65 20 69 6e 74 6f 20 73  ass pFree into s
1f650 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
1f660 65 28 29 2e 20 0a 20 20 20 20 2a 2a 20 49 66 20  e(). .    ** If 
1f670 73 7a 3e 30 20 74 68 65 6e 20 61 6c 6c 6f 63 61  sz>0 then alloca
1f680 74 65 20 61 20 73 63 72 61 74 63 68 20 62 75 66  te a scratch buf
1f690 66 65 72 20 69 6e 74 6f 20 70 4e 65 77 2e 20 20  fer into pNew.  
1f6a0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65  .    */.    case
1f6b0 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1f6c0 5f 53 43 52 41 54 43 48 4d 41 4c 4c 4f 43 3a 20  _SCRATCHMALLOC: 
1f6d0 7b 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 46  {.      void *pF
1f6e0 72 65 65 2c 20 2a 2a 70 70 4e 65 77 3b 0a 20 20  ree, **ppNew;.  
1f6f0 20 20 20 20 69 6e 74 20 73 7a 3b 0a 20 20 20 20      int sz;.    
1f700 20 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61 70    sz = va_arg(ap
1f710 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 70 70  , int);.      pp
1f720 4e 65 77 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  New = va_arg(ap,
1f730 20 76 6f 69 64 2a 2a 29 3b 0a 20 20 20 20 20 20   void**);.      
1f740 70 46 72 65 65 20 3d 20 76 61 5f 61 72 67 28 61  pFree = va_arg(a
1f750 70 2c 20 76 6f 69 64 2a 29 3b 0a 20 20 20 20 20  p, void*);.     
1f760 20 69 66 28 20 73 7a 20 29 20 2a 70 70 4e 65 77   if( sz ) *ppNew
1f770 20 3d 20 73 71 6c 69 74 65 33 53 63 72 61 74 63   = sqlite3Scratc
1f780 68 4d 61 6c 6c 6f 63 28 73 7a 29 3b 0a 20 20 20  hMalloc(sz);.   
1f790 20 20 20 73 71 6c 69 74 65 33 53 63 72 61 74 63     sqlite3Scratc
1f7a0 68 46 72 65 65 28 70 46 72 65 65 29 3b 0a 20 20  hFree(pFree);.  
1f7b0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1f7c0 0a 0a 20 20 20 20 2f 2a 20 20 20 73 71 6c 69 74  ..    /*   sqlit
1f7d0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
1f7e0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1f7f0 4c 4f 43 41 4c 54 49 4d 45 5f 46 41 55 4c 54 2c  LOCALTIME_FAULT,
1f800 20 69 6e 74 20 6f 6e 6f 66 66 29 3b 0a 20 20 20   int onoff);.   
1f810 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 70 61   **.    ** If pa
1f820 72 61 6d 65 74 65 72 20 6f 6e 6f 66 66 20 69 73  rameter onoff is
1f830 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 63 6f 6e 66 69   non-zero, confi
1f840 67 75 72 65 20 74 68 65 20 77 72 61 70 70 65 72  gure the wrapper
1f850 73 20 73 6f 20 74 68 61 74 20 61 6c 6c 0a 20 20  s so that all.  
1f860 20 20 2a 2a 20 73 75 62 73 65 71 75 65 6e 74 20    ** subsequent 
1f870 63 61 6c 6c 73 20 74 6f 20 6c 6f 63 61 6c 74 69  calls to localti
1f880 6d 65 28 29 20 61 6e 64 20 76 61 72 69 61 6e 74  me() and variant
1f890 73 20 66 61 69 6c 2e 20 49 66 20 6f 6e 6f 66 66  s fail. If onoff
1f8a0 20 69 73 20 7a 65 72 6f 2c 0a 20 20 20 20 2a 2a   is zero,.    **
1f8b0 20 75 6e 64 6f 20 74 68 69 73 20 73 65 74 74 69   undo this setti
1f8c0 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63  ng..    */.    c
1f8d0 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
1f8e0 54 52 4c 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46 41  TRL_LOCALTIME_FA
1f8f0 55 4c 54 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ULT: {.      sql
1f900 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1f910 2e 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74  .bLocaltimeFault
1f920 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e   = va_arg(ap, in
1f930 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  t);.      break;
1f940 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20  .    }..    /*  
1f950 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1f960 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1f970 54 43 54 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52  TCTRL_NEVER_CORR
1f980 55 50 54 2c 20 69 6e 74 29 3b 0a 20 20 20 20 2a  UPT, int);.    *
1f990 2a 0a 20 20 20 20 2a 2a 20 53 65 74 20 6f 72 20  *.    ** Set or 
1f9a0 63 6c 65 61 72 20 61 20 66 6c 61 67 20 74 68 61  clear a flag tha
1f9b0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1f9c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1f9d0 6c 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  le is always wel
1f9e0 6c 2d 0a 20 20 20 20 2a 2a 20 66 6f 72 6d 65 64  l-.    ** formed
1f9f0 20 61 6e 64 20 6e 65 76 65 72 20 63 6f 72 72 75   and never corru
1fa00 70 74 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69  pt.  This flag i
1fa10 73 20 63 6c 65 61 72 20 62 79 20 64 65 66 61 75  s clear by defau
1fa20 6c 74 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74  lt, indicating t
1fa30 68 61 74 0a 20 20 20 20 2a 2a 20 64 61 74 61 62  hat.    ** datab
1fa40 61 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20  ase files might 
1fa50 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 63  have arbitrary c
1fa60 6f 72 72 75 70 74 69 6f 6e 2e 20 20 53 65 74 74  orruption.  Sett
1fa70 69 6e 67 20 74 68 65 20 66 6c 61 67 20 64 75 72  ing the flag dur
1fa80 69 6e 67 0a 20 20 20 20 2a 2a 20 74 65 73 74 69  ing.    ** testi
1fa90 6e 67 20 63 61 75 73 65 73 20 63 65 72 74 61 69  ng causes certai
1faa0 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
1fab0 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
1fac0 65 20 74 6f 20 62 65 20 61 63 74 69 76 61 74 65  e to be activate
1fad0 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 64 65  d.    ** that de
1fae0 6d 6f 6e 73 74 72 61 74 20 69 6e 76 61 72 69 61  monstrat invaria
1faf0 6e 74 73 20 6f 6e 20 77 65 6c 6c 2d 66 6f 72 6d  nts on well-form
1fb00 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
1fb10 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61  s..    */.    ca
1fb20 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
1fb30 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54  RL_NEVER_CORRUPT
1fb40 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
1fb50 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 65  3GlobalConfig.ne
1fb60 76 65 72 43 6f 72 72 75 70 74 20 3d 20 76 61 5f  verCorrupt = va_
1fb70 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
1fb80 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1fb90 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65  ..    /* Set the
1fba0 20 74 68 72 65 73 68 6f 6c 64 20 61 74 20 77 68   threshold at wh
1fbb0 69 63 68 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e  ich OP_Once coun
1fbc0 74 65 72 73 20 72 65 73 65 74 20 62 61 63 6b 20  ters reset back 
1fbd0 74 6f 20 7a 65 72 6f 2e 0a 20 20 20 20 2a 2a 20  to zero..    ** 
1fbe0 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20  By default this 
1fbf0 69 73 20 30 78 37 66 66 66 66 66 66 65 20 28 6f  is 0x7ffffffe (o
1fc00 76 65 72 20 32 20 62 69 6c 6c 69 6f 6e 29 2c 20  ver 2 billion), 
1fc10 62 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69  but that value i
1fc20 73 0a 20 20 20 20 2a 2a 20 74 6f 6f 20 62 69 67  s.    ** too big
1fc30 20 74 6f 20 74 65 73 74 20 69 6e 20 61 20 72 65   to test in a re
1fc40 61 73 6f 6e 61 62 6c 65 20 61 6d 6f 75 6e 74 20  asonable amount 
1fc50 6f 66 20 74 69 6d 65 2c 20 73 6f 20 74 68 69 73  of time, so this
1fc60 20 63 6f 6e 74 72 6f 6c 20 69 73 0a 20 20 20 20   control is.    
1fc70 2a 2a 20 70 72 6f 76 69 64 65 64 20 74 6f 20 73  ** provided to s
1fc80 65 74 20 61 20 73 6d 61 6c 6c 20 61 6e 64 20 65  et a small and e
1fc90 61 73 69 6c 79 20 72 65 61 63 68 61 62 6c 65 20  asily reachable 
1fca0 72 65 73 65 74 20 76 61 6c 75 65 2e 0a 20 20 20  reset value..   
1fcb0 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1fcc0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 4e 43  ITE_TESTCTRL_ONC
1fcd0 45 5f 52 45 53 45 54 5f 54 48 52 45 53 48 4f 4c  E_RESET_THRESHOL
1fce0 44 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  D: {.      sqlit
1fcf0 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
1fd00 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f  OnceResetThresho
1fd10 6c 64 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  ld = va_arg(ap, 
1fd20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61  int);.      brea
1fd30 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1fd40 20 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f     sqlite3_test_
1fd50 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
1fd60 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1fd70 45 52 41 47 45 2c 20 78 43 61 6c 6c 62 61 63 6b  ERAGE, xCallback
1fd80 2c 20 70 74 72 29 3b 0a 20 20 20 20 2a 2a 0a 20  , ptr);.    **. 
1fd90 20 20 20 2a 2a 20 53 65 74 20 74 68 65 20 56 44     ** Set the VD
1fda0 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1fdb0 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f  back function to
1fdc0 20 78 43 61 6c 6c 62 61 63 6b 20 77 69 74 68 20   xCallback with 
1fdd0 63 6f 6e 74 65 78 74 20 0a 20 20 20 20 2a 2a 20  context .    ** 
1fde0 70 6f 69 6e 74 65 72 20 70 74 72 2e 0a 20 20 20  pointer ptr..   
1fdf0 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1fe00 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1fe10 45 5f 43 4f 56 45 52 41 47 45 3a 20 7b 0a 23 69  E_COVERAGE: {.#i
1fe20 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1fe30 5f 43 4f 56 45 52 41 47 45 0a 20 20 20 20 20 20  _COVERAGE.      
1fe40 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 2a 62  typedef void (*b
1fe50 72 61 6e 63 68 5f 63 61 6c 6c 62 61 63 6b 29 28  ranch_callback)(
1fe60 76 6f 69 64 2a 2c 69 6e 74 2c 75 38 2c 75 38 29  void*,int,u8,u8)
1fe70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  ;.      sqlite3G
1fe80 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
1fe90 65 42 72 61 6e 63 68 20 3d 20 76 61 5f 61 72 67  eBranch = va_arg
1fea0 28 61 70 2c 62 72 61 6e 63 68 5f 63 61 6c 6c 62  (ap,branch_callb
1feb0 61 63 6b 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ack);.      sqli
1fec0 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1fed0 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 20 3d  pVdbeBranchArg =
1fee0 20 76 61 5f 61 72 67 28 61 70 2c 76 6f 69 64 2a   va_arg(ap,void*
1fef0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20  );.#endif.      
1ff00 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
1ff10 20 20 2f 2a 20 20 20 73 71 6c 69 74 65 33 5f 74    /*   sqlite3_t
1ff20 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
1ff30 54 45 5f 54 45 53 54 43 54 52 4c 5f 53 4f 52 54  TE_TESTCTRL_SORT
1ff40 45 52 5f 4d 4d 41 50 2c 20 64 62 2c 20 6e 4d 61  ER_MMAP, db, nMa
1ff50 78 29 3b 20 2a 2f 0a 20 20 20 20 63 61 73 65 20  x); */.    case 
1ff60 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1ff70 53 4f 52 54 45 52 5f 4d 4d 41 50 3a 20 7b 0a 20  SORTER_MMAP: {. 
1ff80 20 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62       sqlite3 *db
1ff90 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 73 71   = va_arg(ap, sq
1ffa0 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 20 20 64  lite3*);.      d
1ffb0 62 2d 3e 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  b->nMaxSorterMma
1ffc0 70 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  p = va_arg(ap, i
1ffd0 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  nt);.      break
1ffe0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
1fff0 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63    sqlite3_test_c
20000 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
20010 53 54 43 54 52 4c 5f 49 53 49 4e 49 54 29 3b 0a  STCTRL_ISINIT);.
20020 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 65      **.    ** Re
20030 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69  turn SQLITE_OK i
20040 66 20 53 51 4c 69 74 65 20 68 61 73 20 62 65 65  f SQLite has bee
20050 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e  n initialized an
20060 64 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69  d SQLITE_ERROR i
20070 66 0a 20 20 20 20 2a 2a 20 6e 6f 74 2e 0a 20 20  f.    ** not..  
20080 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51    */.    case SQ
20090 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53  LITE_TESTCTRL_IS
200a0 49 4e 49 54 3a 20 7b 0a 20 20 20 20 20 20 69 66  INIT: {.      if
200b0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
200c0 6f 6e 66 69 67 2e 69 73 49 6e 69 74 3d 3d 30 20  onfig.isInit==0 
200d0 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52  ) rc = SQLITE_ER
200e0 52 4f 52 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  ROR;.      break
200f0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
20100 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
20110 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
20120 54 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20  TCTRL_IMPOSTER, 
20130 64 62 2c 20 64 62 4e 61 6d 65 2c 20 6f 6e 4f 66  db, dbName, onOf
20140 66 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 2a 2a  f, tnum);.    **
20150 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 74 65 73  .    ** This tes
20160 74 20 63 6f 6e 74 72 6f 6c 20 69 73 20 75 73 65  t control is use
20170 64 20 74 6f 20 63 72 65 61 74 65 20 69 6d 70 6f  d to create impo
20180 73 74 65 72 20 74 61 62 6c 65 73 2e 20 20 22 64  ster tables.  "d
20190 62 22 20 69 73 20 61 20 70 6f 69 6e 74 65 72 0a  b" is a pointer.
201a0 20 20 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 61      ** to the da
201b0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
201c0 6e 2e 20 20 64 62 4e 61 6d 65 20 69 73 20 74 68  n.  dbName is th
201d0 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  e database name 
201e0 28 65 78 3a 20 22 6d 61 69 6e 22 20 6f 72 0a 20  (ex: "main" or. 
201f0 20 20 20 2a 2a 20 22 74 65 6d 70 22 29 20 77 68     ** "temp") wh
20200 69 63 68 20 77 69 6c 6c 20 72 65 63 65 69 76 65  ich will receive
20210 20 74 68 65 20 69 6d 70 6f 73 74 65 72 2e 20 20   the imposter.  
20220 22 6f 6e 4f 66 66 22 20 74 75 72 6e 73 20 69 6d  "onOff" turns im
20230 70 6f 73 74 65 72 20 6d 6f 64 65 20 6f 6e 0a 20  poster mode on. 
20240 20 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 22     ** or off.  "
20250 74 6e 75 6d 22 20 69 73 20 74 68 65 20 72 6f 6f  tnum" is the roo
20260 74 20 70 61 67 65 20 6f 66 20 74 68 65 20 62 2d  t page of the b-
20270 74 72 65 65 20 74 6f 20 77 68 69 63 68 20 74 68  tree to which th
20280 65 20 69 6d 70 6f 73 74 65 72 0a 20 20 20 20 2a  e imposter.    *
20290 2a 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 63  * table should c
202a0 6f 6e 6e 65 63 74 2e 0a 20 20 20 20 2a 2a 0a 20  onnect..    **. 
202b0 20 20 20 2a 2a 20 45 6e 61 62 6c 65 20 69 6d 70     ** Enable imp
202c0 6f 73 74 65 72 20 6d 6f 64 65 20 6f 6e 6c 79 20  oster mode only 
202d0 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
202e0 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
202f0 20 70 61 72 73 65 64 2e 20 20 54 68 65 6e 0a 20   parsed.  Then. 
20300 20 20 20 2a 2a 20 72 75 6e 20 61 20 73 69 6e 67     ** run a sing
20310 6c 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  le CREATE TABLE 
20320 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6e  statement to con
20330 73 74 72 75 63 74 20 74 68 65 20 69 6d 70 6f 73  struct the impos
20340 74 65 72 20 74 61 62 6c 65 20 69 6e 0a 20 20 20  ter table in.   
20350 20 2a 2a 20 74 68 65 20 70 61 72 73 65 64 20 73   ** the parsed s
20360 63 68 65 6d 61 2e 20 20 54 68 65 6e 20 74 75 72  chema.  Then tur
20370 6e 20 69 6d 70 6f 73 74 65 72 20 6d 6f 64 65 20  n imposter mode 
20380 62 61 63 6b 20 6f 66 66 20 61 67 61 69 6e 2e 0a  back off again..
20390 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66      **.    ** If
203a0 20 6f 6e 4f 66 66 3d 3d 30 20 61 6e 64 20 74 6e   onOff==0 and tn
203b0 75 6d 3e 30 20 74 68 65 6e 20 72 65 73 65 74 20  um>0 then reset 
203c0 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 61  the schema for a
203d0 6c 6c 20 64 61 74 61 62 61 73 65 73 2c 20 63 61  ll databases, ca
203e0 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 65  using.    ** the
203f0 20 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72 65   schema to be re
20400 70 61 72 73 65 64 20 74 68 65 20 6e 65 78 74 20  parsed the next 
20410 74 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65  time it is neede
20420 64 2e 20 20 54 68 69 73 20 68 61 73 20 74 68 65  d.  This has the
20430 0a 20 20 20 20 2a 2a 20 65 66 66 65 63 74 20 6f  .    ** effect o
20440 66 20 65 72 61 73 69 6e 67 20 61 6c 6c 20 69 6d  f erasing all im
20450 70 6f 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 20  poster tables.. 
20460 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53     */.    case S
20470 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49  QLITE_TESTCTRL_I
20480 4d 50 4f 53 54 45 52 3a 20 7b 0a 20 20 20 20 20  MPOSTER: {.     
20490 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 76   sqlite3 *db = v
204a0 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65  a_arg(ap, sqlite
204b0 33 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  3*);.      sqlit
204c0 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
204d0 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20  b->mutex);.     
204e0 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20   db->init.iDb = 
204f0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
20500 65 28 64 62 2c 20 76 61 5f 61 72 67 28 61 70 2c  e(db, va_arg(ap,
20510 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 3b 0a 20  const char*));. 
20520 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
20530 73 79 20 3d 20 64 62 2d 3e 69 6e 69 74 2e 69 6d  sy = db->init.im
20540 70 6f 73 74 65 72 54 61 62 6c 65 20 3d 20 76 61  posterTable = va
20550 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20  _arg(ap,int);.  
20560 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77      db->init.new
20570 54 6e 75 6d 20 3d 20 76 61 5f 61 72 67 28 61 70  Tnum = va_arg(ap
20580 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  ,int);.      if(
20590 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
205a0 30 20 26 26 20 64 62 2d 3e 69 6e 69 74 2e 6e 65  0 && db->init.ne
205b0 77 54 6e 75 6d 3e 30 20 29 7b 0a 20 20 20 20 20  wTnum>0 ){.     
205c0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
205d0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
205e0 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
205f0 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
20600 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
20610 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 62  >mutex);.      b
20620 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
20630 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23 65    va_end(ap);.#e
20640 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
20650 4e 54 45 53 54 41 42 4c 45 20 2a 2f 0a 20 20 72  NTESTABLE */.  r
20660 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
20670 2a 2a 20 54 68 69 73 20 69 73 20 61 20 75 74 69  ** This is a uti
20680 6c 69 74 79 20 72 6f 75 74 69 6e 65 2c 20 75 73  lity routine, us
20690 65 66 75 6c 20 74 6f 20 56 46 53 20 69 6d 70 6c  eful to VFS impl
206a0 65 6d 65 6e 74 61 74 69 6f 6e 73 2c 20 74 68 61  ementations, tha
206b0 74 20 63 68 65 63 6b 73 0a 2a 2a 20 74 6f 20 73  t checks.** to s
206c0 65 65 20 69 66 20 61 20 64 61 74 61 62 61 73 65  ee if a database
206d0 20 66 69 6c 65 20 77 61 73 20 61 20 55 52 49 20   file was a URI 
206e0 74 68 61 74 20 63 6f 6e 74 61 69 6e 65 64 20 61  that contained a
206f0 20 73 70 65 63 69 66 69 63 20 71 75 65 72 79 20   specific query 
20700 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 2c 20 61  .** parameter, a
20710 6e 64 20 69 66 20 73 6f 20 6f 62 74 61 69 6e 73  nd if so obtains
20720 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
20730 65 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65  e query paramete
20740 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 7a 46 69  r..**.** The zFi
20750 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
20760 69 73 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20  is the filename 
20770 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 69  pointer passed i
20780 6e 74 6f 20 74 68 65 20 78 4f 70 65 6e 28 29 0a  nto the xOpen().
20790 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 61 20 56  ** method of a V
207a0 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  FS implementatio
207b0 6e 2e 20 20 54 68 65 20 7a 50 61 72 61 6d 20 61  n.  The zParam a
207c0 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e  rgument is the n
207d0 61 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 71 75  ame of the.** qu
207e0 65 72 79 20 70 61 72 61 6d 65 74 65 72 20 77 65  ery parameter we
207f0 20 73 65 65 6b 2e 20 20 54 68 69 73 20 72 6f 75   seek.  This rou
20800 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
20810 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 7a 50   value of the zP
20820 61 72 61 6d 0a 2a 2a 20 70 61 72 61 6d 65 74 65  aram.** paramete
20830 72 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 20  r if it exists. 
20840 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   If the paramete
20850 72 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  r does not exist
20860 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a  , this routine.*
20870 2a 20 72 65 74 75 72 6e 73 20 61 20 4e 55 4c 4c  * returns a NULL
20880 20 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 63 6f 6e   pointer..*/.con
20890 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
208a0 5f 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28 63  _uri_parameter(c
208b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
208c0 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  name, const char
208d0 20 2a 7a 50 61 72 61 6d 29 7b 0a 20 20 69 66 28   *zParam){.  if(
208e0 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 7c 7c   zFilename==0 ||
208f0 20 7a 50 61 72 61 6d 3d 3d 30 20 29 20 72 65 74   zParam==0 ) ret
20900 75 72 6e 20 30 3b 0a 20 20 7a 46 69 6c 65 6e 61  urn 0;.  zFilena
20910 6d 65 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  me += sqlite3Str
20920 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
20930 20 2b 20 31 3b 0a 20 20 77 68 69 6c 65 28 20 7a   + 1;.  while( z
20940 46 69 6c 65 6e 61 6d 65 5b 30 5d 20 29 7b 0a 20  Filename[0] ){. 
20950 20 20 20 69 6e 74 20 78 20 3d 20 73 74 72 63 6d     int x = strcm
20960 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 7a 50 61  p(zFilename, zPa
20970 72 61 6d 29 3b 0a 20 20 20 20 7a 46 69 6c 65 6e  ram);.    zFilen
20980 61 6d 65 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  ame += sqlite3St
20990 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
209a0 29 20 2b 20 31 3b 0a 20 20 20 20 69 66 28 20 78  ) + 1;.    if( x
209b0 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 46 69  ==0 ) return zFi
209c0 6c 65 6e 61 6d 65 3b 0a 20 20 20 20 7a 46 69 6c  lename;.    zFil
209d0 65 6e 61 6d 65 20 2b 3d 20 73 71 6c 69 74 65 33  ename += sqlite3
209e0 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
209f0 6d 65 29 20 2b 20 31 3b 0a 20 20 7d 0a 20 20 72  me) + 1;.  }.  r
20a00 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
20a10 2a 20 52 65 74 75 72 6e 20 61 20 62 6f 6f 6c 65  * Return a boole
20a20 61 6e 20 76 61 6c 75 65 20 66 6f 72 20 61 20 71  an value for a q
20a30 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a  uery parameter..
20a40 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 75  */.int sqlite3_u
20a50 72 69 5f 62 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  ri_boolean(const
20a60 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
20a70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50  , const char *zP
20a80 61 72 61 6d 2c 20 69 6e 74 20 62 44 66 6c 74 29  aram, int bDflt)
20a90 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
20aa0 7a 20 3d 20 73 71 6c 69 74 65 33 5f 75 72 69 5f  z = sqlite3_uri_
20ab0 70 61 72 61 6d 65 74 65 72 28 7a 46 69 6c 65 6e  parameter(zFilen
20ac0 61 6d 65 2c 20 7a 50 61 72 61 6d 29 3b 0a 20 20  ame, zParam);.  
20ad0 62 44 66 6c 74 20 3d 20 62 44 66 6c 74 21 3d 30  bDflt = bDflt!=0
20ae0 3b 0a 20 20 72 65 74 75 72 6e 20 7a 20 3f 20 73  ;.  return z ? s
20af0 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
20b00 28 7a 2c 20 62 44 66 6c 74 29 20 3a 20 62 44 66  (z, bDflt) : bDf
20b10 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  lt;.}../*.** Ret
20b20 75 72 6e 20 61 20 36 34 2d 62 69 74 20 69 6e 74  urn a 64-bit int
20b30 65 67 65 72 20 76 61 6c 75 65 20 66 6f 72 20 61  eger value for a
20b40 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72   query parameter
20b50 2e 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f 69 6e 74  ..*/.sqlite3_int
20b60 36 34 20 73 71 6c 69 74 65 33 5f 75 72 69 5f 69  64 sqlite3_uri_i
20b70 6e 74 36 34 28 0a 20 20 63 6f 6e 73 74 20 63 68  nt64(.  const ch
20b80 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20  ar *zFilename,  
20b90 20 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 61 73    /* Filename as
20ba0 20 70 61 73 73 65 64 20 74 6f 20 78 4f 70 65 6e   passed to xOpen
20bb0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
20bc0 20 2a 7a 50 61 72 61 6d 2c 20 20 20 20 20 20 20   *zParam,       
20bd0 2f 2a 20 55 52 49 20 70 61 72 61 6d 65 74 65 72  /* URI parameter
20be0 20 73 6f 75 67 68 74 20 2a 2f 0a 20 20 73 71 6c   sought */.  sql
20bf0 69 74 65 33 5f 69 6e 74 36 34 20 62 44 66 6c 74  ite3_int64 bDflt
20c00 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
20c10 20 69 66 20 70 61 72 61 6d 65 74 65 72 20 69 73   if parameter is
20c20 20 6d 69 73 73 69 6e 67 20 2a 2f 0a 29 7b 0a 20   missing */.){. 
20c30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
20c40 20 73 71 6c 69 74 65 33 5f 75 72 69 5f 70 61 72   sqlite3_uri_par
20c50 61 6d 65 74 65 72 28 7a 46 69 6c 65 6e 61 6d 65  ameter(zFilename
20c60 2c 20 7a 50 61 72 61 6d 29 3b 0a 20 20 73 71 6c  , zParam);.  sql
20c70 69 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a 20 20  ite3_int64 v;.  
20c80 69 66 28 20 7a 20 26 26 20 73 71 6c 69 74 65 33  if( z && sqlite3
20c90 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 2c  DecOrHexToI64(z,
20ca0 20 26 76 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   &v)==SQLITE_OK 
20cb0 29 7b 0a 20 20 20 20 62 44 66 6c 74 20 3d 20 76  ){.    bDflt = v
20cc0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 62  ;.  }.  return b
20cd0 44 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  Dflt;.}../*.** R
20ce0 65 74 75 72 6e 20 74 68 65 20 42 74 72 65 65 20  eturn the Btree 
20cf0 70 6f 69 6e 74 65 72 20 69 64 65 6e 74 69 66 69  pointer identifi
20d00 65 64 20 62 79 20 7a 44 62 4e 61 6d 65 2e 20 20  ed by zDbName.  
20d10 52 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 6e  Return NULL if n
20d20 6f 74 20 66 6f 75 6e 64 2e 0a 2a 2f 0a 42 74 72  ot found..*/.Btr
20d30 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
20d40 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
20d50 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
20d60 20 2a 7a 44 62 4e 61 6d 65 29 7b 0a 20 20 69 6e   *zDbName){.  in
20d70 74 20 69 44 62 20 3d 20 7a 44 62 4e 61 6d 65 20  t iDb = zDbName 
20d80 3f 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  ? sqlite3FindDbN
20d90 61 6d 65 28 64 62 2c 20 7a 44 62 4e 61 6d 65 29  ame(db, zDbName)
20da0 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 69   : 0;.  return i
20db0 44 62 3c 30 20 3f 20 30 20 3a 20 64 62 2d 3e 61  Db<0 ? 0 : db->a
20dc0 44 62 5b 69 44 62 5d 2e 70 42 74 3b 0a 7d 0a 0a  Db[iDb].pBt;.}..
20dd0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
20de0 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65   filename of the
20df0 20 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69   database associ
20e00 61 74 65 64 20 77 69 74 68 20 61 20 64 61 74 61  ated with a data
20e10 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
20e20 6f 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  on..*/.const cha
20e30 72 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f 66 69  r *sqlite3_db_fi
20e40 6c 65 6e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a  lename(sqlite3 *
20e50 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
20e60 7a 44 62 4e 61 6d 65 29 7b 0a 20 20 42 74 72 65  zDbName){.  Btre
20e70 65 20 2a 70 42 74 3b 0a 23 69 66 64 65 66 20 53  e *pBt;.#ifdef S
20e80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
20e90 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
20ea0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
20eb0 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
20ec0 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
20ed0 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
20ee0 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rn 0;.  }.#endif
20ef0 0a 20 20 70 42 74 20 3d 20 73 71 6c 69 74 65 33  .  pBt = sqlite3
20f00 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 64 62  DbNameToBtree(db
20f10 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 72 65  , zDbName);.  re
20f20 74 75 72 6e 20 70 42 74 20 3f 20 73 71 6c 69 74  turn pBt ? sqlit
20f30 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
20f40 6d 65 28 70 42 74 29 20 3a 20 30 3b 0a 7d 0a 0a  me(pBt) : 0;.}..
20f50 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69  /*.** Return 1 i
20f60 66 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65  f database is re
20f70 61 64 2d 6f 6e 6c 79 20 6f 72 20 30 20 69 66 20  ad-only or 0 if 
20f80 72 65 61 64 2f 77 72 69 74 65 2e 20 20 52 65 74  read/write.  Ret
20f90 75 72 6e 20 2d 31 20 69 66 0a 2a 2a 20 6e 6f 20  urn -1 if.** no 
20fa0 73 75 63 68 20 64 61 74 61 62 61 73 65 20 65 78  such database ex
20fb0 69 73 74 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ists..*/.int sql
20fc0 69 74 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79  ite3_db_readonly
20fd0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
20fe0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d  nst char *zDbNam
20ff0 65 29 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  e){.  Btree *pBt
21000 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21010 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
21020 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
21030 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
21040 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51   ){.    (void)SQ
21050 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
21060 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b  ;.    return -1;
21070 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 42  .  }.#endif.  pB
21080 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4e 61 6d  t = sqlite3DbNam
21090 65 54 6f 42 74 72 65 65 28 64 62 2c 20 7a 44 62  eToBtree(db, zDb
210a0 4e 61 6d 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  Name);.  return 
210b0 70 42 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72  pBt ? sqlite3Btr
210c0 65 65 49 73 52 65 61 64 6f 6e 6c 79 28 70 42 74  eeIsReadonly(pBt
210d0 29 20 3a 20 2d 31 3b 0a 7d 0a 23 69 66 20 28 53  ) : -1;.}.#if (S
210e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50  QLITE_ENABLE_APP
210f0 4c 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66  LE_SPI>0) && def
21100 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
21110 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
21120 65 33 5f 70 72 69 76 61 74 65 2e 68 22 0a 0a 2f  e3_private.h"../
21130 2a 20 0a 2a 2a 20 54 65 73 74 69 6e 67 20 61 20  * .** Testing a 
21140 66 69 6c 65 20 70 61 74 68 20 66 6f 72 20 73 71  file path for sq
21150 6c 69 74 65 20 6c 6f 63 6b 73 20 68 65 6c 64 20  lite locks held 
21160 62 79 20 61 20 70 72 6f 63 65 73 73 20 49 44 2e  by a process ID.
21170 20 0a 2a 2a 20 52 65 74 75 72 6e 73 20 53 51 4c   .** Returns SQL
21180 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e  ITE_LOCKSTATE_ON
21190 20 69 66 20 6c 6f 63 6b 73 20 61 72 65 20 70 72   if locks are pr
211a0 65 73 65 6e 74 20 6f 6e 20 70 61 74 68 0a 2a 2a  esent on path.**
211b0 20 74 68 61 74 20 77 6f 75 6c 64 20 70 72 65 76   that would prev
211c0 65 6e 74 20 77 72 69 74 69 6e 67 20 74 6f 20 74  ent writing to t
211d0 68 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a  he database..*/.
211e0 69 6e 74 20 5f 73 71 6c 69 74 65 33 5f 6c 6f 63  int _sqlite3_loc
211f0 6b 73 74 61 74 65 28 63 6f 6e 73 74 20 63 68 61  kstate(const cha
21200 72 20 2a 70 61 74 68 2c 20 70 69 64 5f 74 20 70  r *path, pid_t p
21210 69 64 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  id){.  sqlite3 *
21220 64 62 20 3d 20 4e 55 4c 4c 3b 0a 20 20 0a 20 20  db = NULL;.  .  
21230 69 66 28 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  if( sqlite3_open
21240 5f 76 32 28 70 61 74 68 2c 20 26 64 62 2c 20 53  _v2(path, &db, S
21250 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f  QLITE_OPEN_READO
21260 4e 4c 59 2c 20 4e 55 4c 4c 29 20 3d 3d 20 53 51  NLY, NULL) == SQ
21270 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 4c  LITE_OK ){.    L
21280 6f 63 6b 73 74 61 74 65 50 49 44 20 6c 6f 63 6b  ockstatePID lock
21290 73 74 61 74 65 20 3d 20 7b 70 69 64 2c 20 2d 31  state = {pid, -1
212a0 7d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66  };.    sqlite3_f
212b0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
212c0 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 46 43 4e  NULL, SQLITE_FCN
212d0 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49 44  TL_LOCKSTATE_PID
212e0 2c 20 26 6c 6f 63 6b 73 74 61 74 65 29 3b 0a 20  , &lockstate);. 
212f0 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
21300 28 64 62 29 3b 0a 20 20 20 20 69 6e 74 20 73 74  (db);.    int st
21310 61 74 65 20 3d 20 6c 6f 63 6b 73 74 61 74 65 2e  ate = lockstate.
21320 73 74 61 74 65 3b 0a 20 20 20 20 72 65 74 75 72  state;.    retur
21330 6e 20 73 74 61 74 65 3b 0a 20 20 7d 0a 20 20 69  n state;.  }.  i
21340 66 28 20 4e 55 4c 4c 21 3d 64 62 20 29 7b 20 0a  f( NULL!=db ){ .
21350 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
21360 65 28 64 62 29 3b 20 2f 2a 20 6e 65 65 64 20 74  e(db); /* need t
21370 6f 20 63 6c 6f 73 65 20 65 76 65 6e 20 69 66 20  o close even if 
21380 6f 70 65 6e 20 72 65 74 75 72 6e 73 20 61 6e 20  open returns an 
21390 65 72 72 6f 72 20 2a 2f 0a 20 20 7d 0a 20 20 72  error */.  }.  r
213a0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  eturn SQLITE_LOC
213b0 4b 53 54 41 54 45 5f 45 52 52 4f 52 3b 0a 7d 0a  KSTATE_ERROR;.}.
213c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
213d0 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53  E_ENABLE_APPLE_S
213e0 50 49 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51  PI */..#ifdef SQ
213f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4e 41 50  LITE_ENABLE_SNAP
21400 53 48 4f 54 0a 2f 2a 0a 2a 2a 20 4f 62 74 61 69  SHOT./*.** Obtai
21410 6e 20 61 20 73 6e 61 70 73 68 6f 74 20 68 61 6e  n a snapshot han
21420 64 6c 65 20 66 6f 72 20 74 68 65 20 73 6e 61 70  dle for the snap
21430 73 68 6f 74 20 6f 66 20 64 61 74 61 62 61 73 65  shot of database
21440 20 7a 44 62 20 63 75 72 72 65 6e 74 6c 79 20 0a   zDb currently .
21450 2a 2a 20 62 65 69 6e 67 20 72 65 61 64 20 62 79  ** being read by
21460 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
21470 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 61 70 73  nt sqlite3_snaps
21480 68 6f 74 5f 67 65 74 28 0a 20 20 73 71 6c 69 74  hot_get(.  sqlit
21490 65 33 20 2a 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3 *db, .  const
214a0 20 63 68 61 72 20 2a 7a 44 62 2c 0a 20 20 73 71   char *zDb,.  sq
214b0 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20 2a  lite3_snapshot *
214c0 2a 70 70 53 6e 61 70 73 68 6f 74 0a 29 7b 0a 20  *ppSnapshot.){. 
214d0 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
214e0 5f 45 52 52 4f 52 3b 0a 23 69 66 6e 64 65 66 20  _ERROR;.#ifndef 
214f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
21500 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21510 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
21520 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
21530 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
21540 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
21550 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
21560 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73  ;.  }.#endif.  s
21570 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
21580 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 0a  er(db->mutex);..
21590 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
215a0 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 69  mmit==0 ){.    i
215b0 6e 74 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33  nt iDb = sqlite3
215c0 46 69 6e 64 44 62 4e 61 6d 65 28 64 62 2c 20 7a  FindDbName(db, z
215d0 44 62 29 3b 0a 20 20 20 20 69 66 28 20 69 44 62  Db);.    if( iDb
215e0 3d 3d 30 20 7c 7c 20 69 44 62 3e 31 20 29 7b 0a  ==0 || iDb>1 ){.
215f0 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74        Btree *pBt
21600 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e   = db->aDb[iDb].
21610 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 30  pBt;.      if( 0
21620 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ==sqlite3BtreeIs
21630 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 7b 0a  InTrans(pBt) ){.
21640 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
21650 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
21660 61 6e 73 28 70 42 74 2c 20 30 29 3b 0a 20 20 20  ans(pBt, 0);.   
21670 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
21680 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
21690 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
216a0 50 61 67 65 72 53 6e 61 70 73 68 6f 74 47 65 74  PagerSnapshotGet
216b0 28 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67  (sqlite3BtreePag
216c0 65 72 28 70 42 74 29 2c 20 70 70 53 6e 61 70 73  er(pBt), ppSnaps
216d0 68 6f 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  hot);.        }.
216e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
216f0 7d 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  }..  sqlite3_mut
21700 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
21710 65 78 29 3b 0a 23 65 6e 64 69 66 20 20 20 2f 2a  ex);.#endif   /*
21720 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
21730 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 63 3b   */.  return rc;
21740 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61  .}../*.** Open a
21750 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
21760 6e 20 6f 6e 20 74 68 65 20 73 6e 61 70 73 68 6f  n on the snapsho
21770 74 20 69 64 65 6e 64 69 66 69 65 64 20 62 79 20  t idendified by 
21780 70 53 6e 61 70 73 68 6f 74 2e 0a 2a 2f 0a 69 6e  pSnapshot..*/.in
21790 74 20 73 71 6c 69 74 65 33 5f 73 6e 61 70 73 68  t sqlite3_snapsh
217a0 6f 74 5f 6f 70 65 6e 28 0a 20 20 73 71 6c 69 74  ot_open(.  sqlit
217b0 65 33 20 2a 64 62 2c 20 0a 20 20 63 6f 6e 73 74  e3 *db, .  const
217c0 20 63 68 61 72 20 2a 7a 44 62 2c 20 0a 20 20 73   char *zDb, .  s
217d0 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20  qlite3_snapshot 
217e0 2a 70 53 6e 61 70 73 68 6f 74 0a 29 7b 0a 20 20  *pSnapshot.){.  
217f0 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
21800 45 52 52 4f 52 3b 0a 23 69 66 6e 64 65 66 20 53  ERROR;.#ifndef S
21810 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 0a  QLITE_OMIT_WAL..
21820 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21830 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
21840 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
21850 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
21860 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
21870 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
21880 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71  .  }.#endif.  sq
21890 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
218a0 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
218b0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
218c0 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  it==0 ){.    int
218d0 20 69 44 62 3b 0a 20 20 20 20 69 44 62 20 3d 20   iDb;.    iDb = 
218e0 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d  sqlite3FindDbNam
218f0 65 28 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20  e(db, zDb);.    
21900 69 66 28 20 69 44 62 3d 3d 30 20 7c 7c 20 69 44  if( iDb==0 || iD
21910 62 3e 31 20 29 7b 0a 20 20 20 20 20 20 42 74 72  b>1 ){.      Btr
21920 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44  ee *pBt = db->aD
21930 62 5b 69 44 62 5d 2e 70 42 74 3b 0a 20 20 20 20  b[iDb].pBt;.    
21940 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
21950 42 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61  BtreeIsInReadTra
21960 6e 73 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  ns(pBt) ){.     
21970 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
21980 61 67 65 72 53 6e 61 70 73 68 6f 74 4f 70 65 6e  agerSnapshotOpen
21990 28 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67  (sqlite3BtreePag
219a0 65 72 28 70 42 74 29 2c 20 70 53 6e 61 70 73 68  er(pBt), pSnapsh
219b0 6f 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ot);.        if(
219c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
219d0 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
219e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
219f0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 30 29 3b  inTrans(pBt, 0);
21a00 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
21a10 65 33 50 61 67 65 72 53 6e 61 70 73 68 6f 74 4f  e3PagerSnapshotO
21a20 70 65 6e 28 73 71 6c 69 74 65 33 42 74 72 65 65  pen(sqlite3Btree
21a30 50 61 67 65 72 28 70 42 74 29 2c 20 30 29 3b 0a  Pager(pBt), 0);.
21a40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
21a50 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73  }.    }.  }..  s
21a60 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
21a70 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 23  ve(db->mutex);.#
21a80 65 6e 64 69 66 20 20 20 2f 2a 20 53 51 4c 49 54  endif   /* SQLIT
21a90 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 20 20  E_OMIT_WAL */.  
21aa0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
21ab0 0a 2a 2a 20 52 65 63 6f 76 65 72 20 61 73 20 6d  .** Recover as m
21ac0 61 6e 79 20 73 6e 61 70 73 68 6f 74 73 20 61 73  any snapshots as
21ad0 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74   possible from t
21ae0 68 65 20 77 61 6c 20 66 69 6c 65 20 61 73 73 6f  he wal file asso
21af0 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 73  ciated with.** s
21b00 63 68 65 6d 61 20 7a 44 62 20 6f 66 20 64 61 74  chema zDb of dat
21b10 61 62 61 73 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74  abase db..*/.int
21b20 20 73 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f   sqlite3_snapsho
21b30 74 5f 72 65 63 6f 76 65 72 28 73 71 6c 69 74 65  t_recover(sqlite
21b40 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
21b50 72 20 2a 7a 44 62 29 7b 0a 20 20 69 6e 74 20 72  r *zDb){.  int r
21b60 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
21b70 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69 66  ;.  int iDb;.#if
21b80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21b90 5f 57 41 4c 0a 0a 23 69 66 64 65 66 20 53 51 4c  _WAL..#ifdef SQL
21ba0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
21bb0 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
21bc0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
21bd0 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
21be0 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
21bf0 5f 42 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69  _BKPT;.  }.#endi
21c00 66 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  f..  sqlite3_mut
21c10 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
21c20 65 78 29 3b 0a 20 20 69 44 62 20 3d 20 73 71 6c  ex);.  iDb = sql
21c30 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 64  ite3FindDbName(d
21c40 62 2c 20 7a 44 62 29 3b 0a 20 20 69 66 28 20 69  b, zDb);.  if( i
21c50 44 62 3d 3d 30 20 7c 7c 20 69 44 62 3e 31 20 29  Db==0 || iDb>1 )
21c60 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
21c70 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e   = db->aDb[iDb].
21c80 70 42 74 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  pBt;.    if( 0==
21c90 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
21ca0 52 65 61 64 54 72 61 6e 73 28 70 42 74 29 20 29  ReadTrans(pBt) )
21cb0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
21cc0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
21cd0 61 6e 73 28 70 42 74 2c 20 30 29 3b 0a 20 20 20  ans(pBt, 0);.   
21ce0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
21cf0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
21d00 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
21d10 72 53 6e 61 70 73 68 6f 74 52 65 63 6f 76 65 72  rSnapshotRecover
21d20 28 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67  (sqlite3BtreePag
21d30 65 72 28 70 42 74 29 29 3b 0a 20 20 20 20 20 20  er(pBt));.      
21d40 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f    sqlite3BtreeCo
21d50 6d 6d 69 74 28 70 42 74 29 3b 0a 20 20 20 20 20  mmit(pBt);.     
21d60 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73   }.    }.  }.  s
21d70 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
21d80 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 23  ve(db->mutex);.#
21d90 65 6e 64 69 66 20 20 20 2f 2a 20 53 51 4c 49 54  endif   /* SQLIT
21da0 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 20 20  E_OMIT_WAL */.  
21db0 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
21dc0 0a 2a 2a 20 46 72 65 65 20 61 20 73 6e 61 70 73  .** Free a snaps
21dd0 68 6f 74 20 68 61 6e 64 6c 65 20 6f 62 74 61 69  hot handle obtai
21de0 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
21df0 5f 73 6e 61 70 73 68 6f 74 5f 67 65 74 28 29 2e  _snapshot_get().
21e00 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
21e10 5f 73 6e 61 70 73 68 6f 74 5f 66 72 65 65 28 73  _snapshot_free(s
21e20 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20  qlite3_snapshot 
21e30 2a 70 53 6e 61 70 73 68 6f 74 29 7b 0a 20 20 73  *pSnapshot){.  s
21e40 71 6c 69 74 65 33 5f 66 72 65 65 28 70 53 6e 61  qlite3_free(pSna
21e50 70 73 68 6f 74 29 3b 0a 7d 0a 23 65 6e 64 69 66  pshot);.}.#endif
21e60 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
21e70 45 5f 53 4e 41 50 53 48 4f 54 20 2a 2f 0a 0a 23  E_SNAPSHOT */..#
21e80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
21e90 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
21ea0 5f 44 49 41 47 53 0a 2f 2a 0a 2a 2a 20 47 69 76  _DIAGS./*.** Giv
21eb0 65 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  en the name of a
21ec0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
21ed0 74 69 6f 6e 2c 20 72 65 74 75 72 6e 20 74 72 75  tion, return tru
21ee0 65 20 69 66 20 74 68 61 74 20 6f 70 74 69 6f 6e  e if that option
21ef0 0a 2a 2a 20 77 61 73 20 75 73 65 64 20 61 6e 64  .** was used and
21f00 20 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a   false if not..*
21f10 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 63 61  *.** The name ca
21f20 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 67  n optionally beg
21f30 69 6e 20 77 69 74 68 20 22 53 51 4c 49 54 45 5f  in with "SQLITE_
21f40 22 20 62 75 74 20 74 68 65 20 22 53 51 4c 49 54  " but the "SQLIT
21f50 45 5f 22 20 70 72 65 66 69 78 0a 2a 2a 20 69 73  E_" prefix.** is
21f60 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20 66 6f   not required fo
21f70 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 69 6e  r a match..*/.in
21f80 74 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  t sqlite3_compil
21f90 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 63 6f 6e  eoption_used(con
21fa0 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 4e 61 6d  st char *zOptNam
21fb0 65 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a  e){.  int i, n;.
21fc0 20 20 69 6e 74 20 6e 4f 70 74 3b 0a 20 20 63 6f    int nOpt;.  co
21fd0 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6d  nst char **azCom
21fe0 70 69 6c 65 4f 70 74 3b 0a 20 0a 23 69 66 20 53  pileOpt;. .#if S
21ff0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
22000 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 7a 4f 70  _ARMOR.  if( zOp
22010 74 4e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20  tName==0 ){.    
22020 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
22030 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
22040 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
22050 69 66 0a 0a 20 20 61 7a 43 6f 6d 70 69 6c 65 4f  if..  azCompileO
22060 70 74 20 3d 20 73 71 6c 69 74 65 33 43 6f 6d 70  pt = sqlite3Comp
22070 69 6c 65 4f 70 74 69 6f 6e 73 28 26 6e 4f 70 74  ileOptions(&nOpt
22080 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
22090 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61  3StrNICmp(zOptNa
220a0 6d 65 2c 20 22 53 51 4c 49 54 45 5f 22 2c 20 37  me, "SQLITE_", 7
220b0 29 3d 3d 30 20 29 20 7a 4f 70 74 4e 61 6d 65 20  )==0 ) zOptName 
220c0 2b 3d 20 37 3b 0a 20 20 6e 20 3d 20 73 71 6c 69  += 7;.  n = sqli
220d0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4f 70 74  te3Strlen30(zOpt
220e0 4e 61 6d 65 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e  Name);..  /* Sin
220f0 63 65 20 6e 4f 70 74 20 69 73 20 6e 6f 72 6d 61  ce nOpt is norma
22100 6c 6c 79 20 69 6e 20 73 69 6e 67 6c 65 20 64 69  lly in single di
22110 67 69 74 73 2c 20 61 20 6c 69 6e 65 61 72 20 73  gits, a linear s
22120 65 61 72 63 68 20 69 73 20 0a 20 20 2a 2a 20 61  earch is .  ** a
22130 64 65 71 75 61 74 65 2e 20 4e 6f 20 6e 65 65 64  dequate. No need
22140 20 66 6f 72 20 61 20 62 69 6e 61 72 79 20 73 65   for a binary se
22150 61 72 63 68 2e 20 2a 2f 0a 20 20 66 6f 72 28 69  arch. */.  for(i
22160 3d 30 3b 20 69 3c 6e 4f 70 74 3b 20 69 2b 2b 29  =0; i<nOpt; i++)
22170 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
22180 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61  3StrNICmp(zOptNa
22190 6d 65 2c 20 61 7a 43 6f 6d 70 69 6c 65 4f 70 74  me, azCompileOpt
221a0 5b 69 5d 2c 20 6e 29 3d 3d 30 0a 20 20 20 20 20  [i], n)==0.     
221b0 26 26 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  && sqlite3IsIdCh
221c0 61 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ar((unsigned cha
221d0 72 29 61 7a 43 6f 6d 70 69 6c 65 4f 70 74 5b 69  r)azCompileOpt[i
221e0 5d 5b 6e 5d 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  ][n])==0.    ){.
221f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
22200 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
22210 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn 0;.}../*.** R
22220 65 74 75 72 6e 20 74 68 65 20 4e 2d 74 68 20 63  eturn the N-th c
22230 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
22240 6f 6e 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e  on string.  If N
22250 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
22260 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 61 20 4e 55  ,.** return a NU
22270 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 63  LL pointer..*/.c
22280 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
22290 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
222a0 5f 67 65 74 28 69 6e 74 20 4e 29 7b 0a 20 20 69  _get(int N){.  i
222b0 6e 74 20 6e 4f 70 74 3b 0a 20 20 63 6f 6e 73 74  nt nOpt;.  const
222c0 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6d 70 69 6c   char **azCompil
222d0 65 4f 70 74 3b 0a 20 20 61 7a 43 6f 6d 70 69 6c  eOpt;.  azCompil
222e0 65 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 43 6f  eOpt = sqlite3Co
222f0 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 26 6e 4f  mpileOptions(&nO
22300 70 74 29 3b 0a 20 20 69 66 28 20 4e 3e 3d 30 20  pt);.  if( N>=0 
22310 26 26 20 4e 3c 6e 4f 70 74 20 29 7b 0a 20 20 20  && N<nOpt ){.   
22320 20 72 65 74 75 72 6e 20 61 7a 43 6f 6d 70 69 6c   return azCompil
22330 65 4f 70 74 5b 4e 5d 3b 0a 20 20 7d 0a 20 20 72  eOpt[N];.  }.  r
22340 65 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69  eturn 0;.}.#endi
22350 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
22360 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
22370 49 41 47 53 20 2a 2f 0a                          IAGS */.